EMR_SELECTOBJECT records stock objects with their id as the object

handle and the high bit set.
This commit is contained in:
Sheri Steeves 2000-04-18 11:53:23 +00:00 committed by Alexandre Julliard
parent c9315fe820
commit 118ce5dec1
1 changed files with 53 additions and 5 deletions

View File

@ -104,10 +104,25 @@ static HBRUSH EMFDRV_BRUSH_SelectObject(DC *dc, HBRUSH hBrush )
EMRSELECTOBJECT emr;
DWORD index;
HBRUSH hOldBrush;
index = EMFDRV_CreateBrushIndirect(dc, hBrush );
if(!index) return FALSE;
/* If the object is a stock brush object, do not need to create it.
* See definitions in wingdi.h for range of stock brushes.
* We do however have to handle setting the higher order bit to
* designate that this is a stock object.
*/
if (hBrush >= FIRST_STOCK_HANDLE &&
hBrush <= FIRST_STOCK_HANDLE+HOLLOW_BRUSH )
{
DWORD brush_index = hBrush - FIRST_STOCK_HANDLE;
index = brush_index | 0x80000000;
}
else
{
index = EMFDRV_CreateBrushIndirect(dc, hBrush );
}
if(!index) return FALSE;
emr.emr.iType = EMR_SELECTOBJECT;
emr.emr.nSize = sizeof(emr);
emr.ihObject = index;
@ -169,7 +184,24 @@ static HFONT EMFDRV_FONT_SelectObject( DC * dc, HFONT hFont )
DWORD index;
HFONT hOldFont;
index = EMFDRV_CreateFontIndirect(dc, hFont );
/* If the object is a stock font object, do not need to create it.
* See definitions in wingdi.h for range of stock fonts.
* We do however have to handle setting the higher order bit to
* designate that this is a stock object.
*/
if (hFont >= STOCK_OEM_FIXED_FONT &&
hFont <= STOCK_DEFAULT_GUI_FONT &&
hFont != STOCK_DEFAULT_PALETTE)
{
DWORD font_index = hFont - FIRST_STOCK_HANDLE;
index = font_index | 0x80000000;
}
else
{
index = EMFDRV_CreateFontIndirect(dc, hFont );
}
if(!index) return FALSE;
emr.emr.iType = EMR_SELECTOBJECT;
@ -214,7 +246,23 @@ static HPEN EMFDRV_PEN_SelectObject(DC *dc, HPEN hPen )
DWORD index;
HFONT hOldPen;
index = EMFDRV_CreatePenIndirect(dc, hPen );
/* If the object is a stock pen object, do not need to create it.
* See definitions in wingdi.h for range of stock pens.
* We do however have to handle setting the higher order bit to
* designate that this is a stock object.
*/
if (hPen >= STOCK_WHITE_PEN &&
hPen <= STOCK_NULL_PEN )
{
DWORD pen_index = hPen - FIRST_STOCK_HANDLE;
index = pen_index | 0x80000000;
}
else
{
index = EMFDRV_CreatePenIndirect(dc, hPen );
}
if(!index) return FALSE;
emr.emr.iType = EMR_SELECTOBJECT;