mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 21:05:43 +00:00
- Add new function for locking text font objects when realized. This is for batching support.
- Batching works for selected fonts, due to a system initialization bug this is disabled. - Miscellaneous changes and updates. svn path=/trunk/; revision=37159
This commit is contained in:
parent
bed3b885b4
commit
53586450b4
7 changed files with 80 additions and 40 deletions
|
@ -1535,7 +1535,7 @@ SelectObject(HDC hDC,
|
||||||
HGDIOBJ hGdiObj)
|
HGDIOBJ hGdiObj)
|
||||||
{
|
{
|
||||||
PDC_ATTR pDc_Attr;
|
PDC_ATTR pDc_Attr;
|
||||||
// HGDIOBJ hOldObj = NULL;
|
HGDIOBJ hOldObj = NULL;
|
||||||
// PTEB pTeb;
|
// PTEB pTeb;
|
||||||
|
|
||||||
if(!GdiGetHandleUserData(hDC, GDI_OBJECT_TYPE_DC, (PVOID)&pDc_Attr))
|
if(!GdiGetHandleUserData(hDC, GDI_OBJECT_TYPE_DC, (PVOID)&pDc_Attr))
|
||||||
|
@ -1580,10 +1580,15 @@ SelectObject(HDC hDC,
|
||||||
return NtGdiSelectPen(hDC, hGdiObj);
|
return NtGdiSelectPen(hDC, hGdiObj);
|
||||||
|
|
||||||
case GDI_OBJECT_TYPE_FONT:
|
case GDI_OBJECT_TYPE_FONT:
|
||||||
|
hOldObj = pDc_Attr->hlfntNew;
|
||||||
|
if (hOldObj == hGdiObj) return hOldObj;
|
||||||
#if 0
|
#if 0
|
||||||
|
pDc_Attr->ulDirty_ &= ~SLOW_WIDTHS;
|
||||||
|
pDc_Attr->ulDirty_ |= DIRTY_CHARSET;
|
||||||
|
pDc_Attr->hlfntNew = hGdiObj;
|
||||||
pTeb = NtCurrentTeb();
|
pTeb = NtCurrentTeb();
|
||||||
if (((pTeb->GdiTebBatch.HDC == 0) ||
|
if (((pTeb->GdiTebBatch.HDC == 0) ||
|
||||||
(pTeb->GdiTebBatch.HDC == (ULONG)hDC)) &&
|
(pTeb->GdiTebBatch.HDC == hDC)) &&
|
||||||
((pTeb->GdiTebBatch.Offset + sizeof(GDIBSOBJECT)) <= GDIBATCHBUFSIZE) &&
|
((pTeb->GdiTebBatch.Offset + sizeof(GDIBSOBJECT)) <= GDIBATCHBUFSIZE) &&
|
||||||
(!(pDc_Attr->ulDirty_ & DC_DIBSECTION)))
|
(!(pDc_Attr->ulDirty_ & DC_DIBSECTION)))
|
||||||
{
|
{
|
||||||
|
@ -1594,14 +1599,15 @@ SelectObject(HDC hDC,
|
||||||
pgO->hgdiobj = hGdiObj;
|
pgO->hgdiobj = hGdiObj;
|
||||||
|
|
||||||
pTeb->GdiTebBatch.Offset += sizeof(GDIBSOBJECT);
|
pTeb->GdiTebBatch.Offset += sizeof(GDIBSOBJECT);
|
||||||
pTeb->GdiTebBatch.HDC = (ULONG)hDC;
|
pTeb->GdiTebBatch.HDC = hDC;
|
||||||
pTeb->GdiBatchCount++;
|
pTeb->GdiBatchCount++;
|
||||||
if (pTeb->GdiBatchCount >= GDI_BatchLimit) NtGdiFlush();
|
if (pTeb->GdiBatchCount >= GDI_BatchLimit) NtGdiFlush();
|
||||||
return pDc_Attr->hlfntNew;
|
return hOldObj;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
// default for select object font
|
// default for select object font
|
||||||
return NtGdiSelectFont(hDC, hGdiObj);
|
return NtGdiSelectFont(hDC, hGdiObj);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
case GDI_OBJECT_TYPE_METADC:
|
case GDI_OBJECT_TYPE_METADC:
|
||||||
return MFDRV_SelectObject( hDC, hGdiObj);
|
return MFDRV_SelectObject( hDC, hGdiObj);
|
||||||
|
|
|
@ -54,6 +54,8 @@ typedef struct _STRGDI
|
||||||
ULONG acFaceNameGlyphs[8];
|
ULONG acFaceNameGlyphs[8];
|
||||||
} STRGDI, *PSTRGDI;
|
} STRGDI, *PSTRGDI;
|
||||||
|
|
||||||
|
#define TEXTOBJECT_INIT 0x00010000
|
||||||
|
|
||||||
/* GDI logical font object */
|
/* GDI logical font object */
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -62,9 +64,13 @@ typedef struct
|
||||||
BASEOBJECT BaseObject;
|
BASEOBJECT BaseObject;
|
||||||
LFTYPE lft;
|
LFTYPE lft;
|
||||||
FLONG fl;
|
FLONG fl;
|
||||||
ENUMLOGFONTEXDVW logfont; //LOGFONTW logfont;
|
|
||||||
FONTOBJ *Font;
|
FONTOBJ *Font;
|
||||||
BOOLEAN Initialized; /* Don't reinitialize for each DC */
|
WCHAR FullName[LF_FULLFACESIZE];
|
||||||
|
WCHAR Style[LF_FACESIZE];
|
||||||
|
WCHAR FaceName[LF_FACESIZE];
|
||||||
|
DWORD dwOffsetEndArray;
|
||||||
|
// Fixed:
|
||||||
|
ENUMLOGFONTEXDVW logfont;
|
||||||
} TEXTOBJ, *PTEXTOBJ;
|
} TEXTOBJ, *PTEXTOBJ;
|
||||||
|
|
||||||
/* Internal interface */
|
/* Internal interface */
|
||||||
|
@ -76,7 +82,8 @@ typedef struct
|
||||||
#define TEXTOBJ_LockText(hBMObj) ((PTEXTOBJ) GDIOBJ_LockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_FONT))
|
#define TEXTOBJ_LockText(hBMObj) ((PTEXTOBJ) GDIOBJ_LockObj ((HGDIOBJ) hBMObj, GDI_OBJECT_TYPE_FONT))
|
||||||
#define TEXTOBJ_UnlockText(pBMObj) GDIOBJ_UnlockObjByPtr ((POBJ)pBMObj)
|
#define TEXTOBJ_UnlockText(pBMObj) GDIOBJ_UnlockObjByPtr ((POBJ)pBMObj)
|
||||||
|
|
||||||
NTSTATUS FASTCALL TextIntRealizeFont(HFONT FontHandle);
|
PTEXTOBJ FASTCALL RealizeFontInit(HFONT);
|
||||||
|
NTSTATUS FASTCALL TextIntRealizeFont(HFONT,PTEXTOBJ);
|
||||||
NTSTATUS FASTCALL TextIntCreateFontIndirect(CONST LPLOGFONTW lf, HFONT *NewFont);
|
NTSTATUS FASTCALL TextIntCreateFontIndirect(CONST LPLOGFONTW lf, HFONT *NewFont);
|
||||||
BOOL FASTCALL InitFontSupport(VOID);
|
BOOL FASTCALL InitFontSupport(VOID);
|
||||||
BOOL FASTCALL IntIsFontRenderingEnabled(VOID);
|
BOOL FASTCALL IntIsFontRenderingEnabled(VOID);
|
||||||
|
|
|
@ -2216,7 +2216,7 @@ NtGdiSelectFont(
|
||||||
if(!pDc_Attr) pDc_Attr = &pDC->Dc_Attr;
|
if(!pDc_Attr) pDc_Attr = &pDC->Dc_Attr;
|
||||||
|
|
||||||
/* FIXME: what if not successful? */
|
/* FIXME: what if not successful? */
|
||||||
if(NT_SUCCESS(TextIntRealizeFont((HFONT)hFont)))
|
if(NT_SUCCESS(TextIntRealizeFont((HFONT)hFont,NULL)))
|
||||||
{
|
{
|
||||||
hOrgFont = pDc_Attr->hlfntNew;
|
hOrgFont = pDc_Attr->hlfntNew;
|
||||||
pDc_Attr->hlfntNew = hFont;
|
pDc_Attr->hlfntNew = hFont;
|
||||||
|
@ -2668,7 +2668,7 @@ DC_AllocDC(PUNICODE_STRING Driver)
|
||||||
Dc_Attr->hpen = NtGdiGetStockObject( BLACK_PEN );
|
Dc_Attr->hpen = NtGdiGetStockObject( BLACK_PEN );
|
||||||
////
|
////
|
||||||
Dc_Attr->hlfntNew = NtGdiGetStockObject(SYSTEM_FONT);
|
Dc_Attr->hlfntNew = NtGdiGetStockObject(SYSTEM_FONT);
|
||||||
TextIntRealizeFont(Dc_Attr->hlfntNew);
|
TextIntRealizeFont(Dc_Attr->hlfntNew,NULL);
|
||||||
|
|
||||||
NewDC->DcLevel.hpal = NtGdiGetStockObject(DEFAULT_PALETTE);
|
NewDC->DcLevel.hpal = NtGdiGetStockObject(DEFAULT_PALETTE);
|
||||||
NewDC->DcLevel.laPath.eMiterLimit = 10.0;
|
NewDC->DcLevel.laPath.eMiterLimit = 10.0;
|
||||||
|
|
|
@ -55,6 +55,27 @@ FontGetObject(PTEXTOBJ TFont, INT Count, PVOID Buffer)
|
||||||
return Count;
|
return Count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PTEXTOBJ
|
||||||
|
FASTCALL
|
||||||
|
RealizeFontInit(HFONT hFont)
|
||||||
|
{
|
||||||
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
|
PTEXTOBJ pTextObj;
|
||||||
|
|
||||||
|
pTextObj = TEXTOBJ_LockText(hFont);
|
||||||
|
|
||||||
|
if ( pTextObj && !pTextObj->fl & TEXTOBJECT_INIT)
|
||||||
|
{
|
||||||
|
Status = TextIntRealizeFont(hFont, pTextObj);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
TEXTOBJ_UnlockText(pTextObj);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pTextObj;
|
||||||
|
}
|
||||||
|
|
||||||
/** Functions ******************************************************************/
|
/** Functions ******************************************************************/
|
||||||
|
|
||||||
INT
|
INT
|
||||||
|
@ -146,7 +167,7 @@ NtGdiGetFontData(
|
||||||
if(!Dc_Attr) Dc_Attr = &Dc->Dc_Attr;
|
if(!Dc_Attr) Dc_Attr = &Dc->Dc_Attr;
|
||||||
|
|
||||||
hFont = Dc_Attr->hlfntNew;
|
hFont = Dc_Attr->hlfntNew;
|
||||||
TextObj = TEXTOBJ_LockText(hFont);
|
TextObj = RealizeFontInit(hFont);
|
||||||
DC_UnlockDc(Dc);
|
DC_UnlockDc(Dc);
|
||||||
|
|
||||||
if (TextObj == NULL)
|
if (TextObj == NULL)
|
||||||
|
@ -193,7 +214,7 @@ NtGdiGetFontUnicodeRanges(
|
||||||
if(!Dc_Attr) Dc_Attr = &pDc->Dc_Attr;
|
if(!Dc_Attr) Dc_Attr = &pDc->Dc_Attr;
|
||||||
|
|
||||||
hFont = Dc_Attr->hlfntNew;
|
hFont = Dc_Attr->hlfntNew;
|
||||||
TextObj = TEXTOBJ_LockText(hFont);
|
TextObj = RealizeFontInit(hFont);
|
||||||
|
|
||||||
if ( TextObj == NULL)
|
if ( TextObj == NULL)
|
||||||
{
|
{
|
||||||
|
@ -363,7 +384,7 @@ NtGdiGetOutlineTextMetricsInternalW (HDC hDC,
|
||||||
Dc_Attr = dc->pDc_Attr;
|
Dc_Attr = dc->pDc_Attr;
|
||||||
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
|
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
|
||||||
hFont = Dc_Attr->hlfntNew;
|
hFont = Dc_Attr->hlfntNew;
|
||||||
TextObj = TEXTOBJ_LockText(hFont);
|
TextObj = RealizeFontInit(hFont);
|
||||||
DC_UnlockDc(dc);
|
DC_UnlockDc(dc);
|
||||||
if (TextObj == NULL)
|
if (TextObj == NULL)
|
||||||
{
|
{
|
||||||
|
@ -543,7 +564,7 @@ NtGdiHfontCreate(
|
||||||
}
|
}
|
||||||
hNewFont = TextObj->BaseObject.hHmgr;
|
hNewFont = TextObj->BaseObject.hHmgr;
|
||||||
|
|
||||||
TextObj->lft = cjElfw;
|
TextObj->lft = lft;
|
||||||
TextObj->fl = fl;
|
TextObj->fl = fl;
|
||||||
RtlCopyMemory (&TextObj->logfont, &SafeLogfont, sizeof(ENUMLOGFONTEXDVW));
|
RtlCopyMemory (&TextObj->logfont, &SafeLogfont, sizeof(ENUMLOGFONTEXDVW));
|
||||||
|
|
||||||
|
|
|
@ -1488,7 +1488,7 @@ ftGdiGetGlyphOutline(
|
||||||
eM11 = xForm.eM11;
|
eM11 = xForm.eM11;
|
||||||
|
|
||||||
hFont = Dc_Attr->hlfntNew;
|
hFont = Dc_Attr->hlfntNew;
|
||||||
TextObj = TEXTOBJ_LockText(hFont);
|
TextObj = RealizeFontInit(hFont);
|
||||||
|
|
||||||
if (!TextObj)
|
if (!TextObj)
|
||||||
{
|
{
|
||||||
|
@ -2249,7 +2249,7 @@ ftGdiGetTextCharsetInfo(
|
||||||
Dc_Attr = Dc->pDc_Attr;
|
Dc_Attr = Dc->pDc_Attr;
|
||||||
if(!Dc_Attr) Dc_Attr = &Dc->Dc_Attr;
|
if(!Dc_Attr) Dc_Attr = &Dc->Dc_Attr;
|
||||||
hFont = Dc_Attr->hlfntNew;
|
hFont = Dc_Attr->hlfntNew;
|
||||||
TextObj = TEXTOBJ_LockText(hFont);
|
TextObj = RealizeFontInit(hFont);
|
||||||
|
|
||||||
if ( TextObj == NULL)
|
if ( TextObj == NULL)
|
||||||
{
|
{
|
||||||
|
@ -2465,7 +2465,7 @@ ftGdiGetTextMetricsW(
|
||||||
}
|
}
|
||||||
Dc_Attr = dc->pDc_Attr;
|
Dc_Attr = dc->pDc_Attr;
|
||||||
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
|
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
|
||||||
TextObj = TEXTOBJ_LockText(Dc_Attr->hlfntNew);
|
TextObj = RealizeFontInit(Dc_Attr->hlfntNew);
|
||||||
if (NULL != TextObj)
|
if (NULL != TextObj)
|
||||||
{
|
{
|
||||||
FontGDI = ObjToGDI(TextObj->Font, FONT);
|
FontGDI = ObjToGDI(TextObj->Font, FONT);
|
||||||
|
@ -2743,7 +2743,7 @@ IntFontType(PFONTGDI Font)
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
FASTCALL
|
FASTCALL
|
||||||
TextIntRealizeFont(HFONT FontHandle)
|
TextIntRealizeFont(HFONT FontHandle, PTEXTOBJ pTextObj)
|
||||||
{
|
{
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
PTEXTOBJ TextObj;
|
PTEXTOBJ TextObj;
|
||||||
|
@ -2751,21 +2751,26 @@ TextIntRealizeFont(HFONT FontHandle)
|
||||||
PW32PROCESS Win32Process;
|
PW32PROCESS Win32Process;
|
||||||
UINT MatchScore;
|
UINT MatchScore;
|
||||||
|
|
||||||
|
if (!pTextObj)
|
||||||
|
{
|
||||||
TextObj = TEXTOBJ_LockText(FontHandle);
|
TextObj = TEXTOBJ_LockText(FontHandle);
|
||||||
if (NULL == TextObj)
|
if (NULL == TextObj)
|
||||||
{
|
{
|
||||||
return STATUS_INVALID_HANDLE;
|
return STATUS_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TextObj->Initialized)
|
if (TextObj->fl & TEXTOBJECT_INIT)
|
||||||
{
|
{
|
||||||
TEXTOBJ_UnlockText(TextObj);
|
TEXTOBJ_UnlockText(TextObj);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
TextObj = pTextObj;
|
||||||
|
|
||||||
if (! RtlCreateUnicodeString(&FaceName, TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfFaceName))
|
if (! RtlCreateUnicodeString(&FaceName, TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfFaceName))
|
||||||
{
|
{
|
||||||
TEXTOBJ_UnlockText(TextObj);
|
if (!pTextObj) TEXTOBJ_UnlockText(TextObj);
|
||||||
return STATUS_NO_MEMORY;
|
return STATUS_NO_MEMORY;
|
||||||
}
|
}
|
||||||
SubstituteFontFamily(&FaceName, 0);
|
SubstituteFontFamily(&FaceName, 0);
|
||||||
|
@ -2803,12 +2808,12 @@ TextIntRealizeFont(HFONT FontHandle)
|
||||||
FontGdi->flRealizedType = 0;
|
FontGdi->flRealizedType = 0;
|
||||||
FontGdi->Underline = TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfUnderline ? 0xff : 0;
|
FontGdi->Underline = TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfUnderline ? 0xff : 0;
|
||||||
FontGdi->StrikeOut = TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfStrikeOut ? 0xff : 0;
|
FontGdi->StrikeOut = TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfStrikeOut ? 0xff : 0;
|
||||||
TextObj->Initialized = TRUE;
|
TextObj->fl |= TEXTOBJECT_INIT;
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
RtlFreeUnicodeString(&FaceName);
|
RtlFreeUnicodeString(&FaceName);
|
||||||
TEXTOBJ_UnlockText(TextObj);
|
if (!pTextObj) TEXTOBJ_UnlockText(TextObj);
|
||||||
|
|
||||||
ASSERT((NT_SUCCESS(Status) ^ (NULL == TextObj->Font)) != 0);
|
ASSERT((NT_SUCCESS(Status) ^ (NULL == TextObj->Font)) != 0);
|
||||||
|
|
||||||
|
@ -3040,7 +3045,7 @@ ftGdiGetKerningPairs( PFONTGDI Font,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
////////////////
|
//////////////////
|
||||||
//
|
//
|
||||||
// Functions needing sorting.
|
// Functions needing sorting.
|
||||||
//
|
//
|
||||||
|
@ -3343,7 +3348,7 @@ NtGdiExtTextOutW(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TextObj = TEXTOBJ_LockText(Dc_Attr->hlfntNew);
|
TextObj = RealizeFontInit(Dc_Attr->hlfntNew);
|
||||||
if(TextObj == NULL)
|
if(TextObj == NULL)
|
||||||
{
|
{
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -3796,7 +3801,7 @@ NtGdiGetCharABCWidthsW(
|
||||||
Dc_Attr = dc->pDc_Attr;
|
Dc_Attr = dc->pDc_Attr;
|
||||||
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
|
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
|
||||||
hFont = Dc_Attr->hlfntNew;
|
hFont = Dc_Attr->hlfntNew;
|
||||||
TextObj = TEXTOBJ_LockText(hFont);
|
TextObj = RealizeFontInit(hFont);
|
||||||
DC_UnlockDc(dc);
|
DC_UnlockDc(dc);
|
||||||
|
|
||||||
if (TextObj == NULL)
|
if (TextObj == NULL)
|
||||||
|
@ -3964,7 +3969,7 @@ NtGdiGetCharWidthW(
|
||||||
Dc_Attr = dc->pDc_Attr;
|
Dc_Attr = dc->pDc_Attr;
|
||||||
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
|
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
|
||||||
hFont = Dc_Attr->hlfntNew;
|
hFont = Dc_Attr->hlfntNew;
|
||||||
TextObj = TEXTOBJ_LockText(hFont);
|
TextObj = RealizeFontInit(hFont);
|
||||||
DC_UnlockDc(dc);
|
DC_UnlockDc(dc);
|
||||||
|
|
||||||
if (TextObj == NULL)
|
if (TextObj == NULL)
|
||||||
|
@ -4076,7 +4081,7 @@ NtGdiGetGlyphIndicesW(
|
||||||
Dc_Attr = dc->pDc_Attr;
|
Dc_Attr = dc->pDc_Attr;
|
||||||
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
|
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
|
||||||
hFont = Dc_Attr->hlfntNew;
|
hFont = Dc_Attr->hlfntNew;
|
||||||
TextObj = TEXTOBJ_LockText(hFont);
|
TextObj = RealizeFontInit(hFont);
|
||||||
DC_UnlockDc(dc);
|
DC_UnlockDc(dc);
|
||||||
if (!TextObj)
|
if (!TextObj)
|
||||||
{
|
{
|
||||||
|
|
|
@ -64,6 +64,7 @@ FASTCALL
|
||||||
GdiFlushUserBatch(PDC dc, PGDIBATCHHDR pHdr)
|
GdiFlushUserBatch(PDC dc, PGDIBATCHHDR pHdr)
|
||||||
{
|
{
|
||||||
PDC_ATTR Dc_Attr = NULL;
|
PDC_ATTR Dc_Attr = NULL;
|
||||||
|
UserEnterExclusive();
|
||||||
if (dc)
|
if (dc)
|
||||||
{
|
{
|
||||||
Dc_Attr = dc->pDc_Attr;
|
Dc_Attr = dc->pDc_Attr;
|
||||||
|
@ -95,8 +96,8 @@ GdiFlushUserBatch(PDC dc, PGDIBATCHHDR pHdr)
|
||||||
PGDIBSOBJECT pgO;
|
PGDIBSOBJECT pgO;
|
||||||
if(!dc) break;
|
if(!dc) break;
|
||||||
pgO = (PGDIBSOBJECT) pHdr;
|
pgO = (PGDIBSOBJECT) pHdr;
|
||||||
if(NT_SUCCESS(TextIntRealizeFont((HFONT) pgO->hgdiobj)))
|
TextIntRealizeFont((HFONT) pgO->hgdiobj, NULL);
|
||||||
Dc_Attr->hlfntNew = (HFONT) pgO->hgdiobj;
|
Dc_Attr->ulDirty_ &= ~(DIRTY_CHARSET);
|
||||||
}
|
}
|
||||||
case GdiBCDelObj:
|
case GdiBCDelObj:
|
||||||
case GdiBCDelRgn:
|
case GdiBCDelRgn:
|
||||||
|
@ -108,7 +109,7 @@ GdiFlushUserBatch(PDC dc, PGDIBATCHHDR pHdr)
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
UserLeave();
|
||||||
return pHdr->Size; // Return the full size of the structure.
|
return pHdr->Size; // Return the full size of the structure.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -209,7 +209,7 @@ NtGdiGetTextExtentExW(
|
||||||
}
|
}
|
||||||
Dc_Attr = dc->pDc_Attr;
|
Dc_Attr = dc->pDc_Attr;
|
||||||
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
|
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
|
||||||
TextObj = TEXTOBJ_LockText(Dc_Attr->hlfntNew);
|
TextObj = RealizeFontInit(Dc_Attr->hlfntNew);
|
||||||
if ( TextObj )
|
if ( TextObj )
|
||||||
{
|
{
|
||||||
Result = TextIntGetTextExtentPoint(dc, TextObj, String, Count, MaxExtent,
|
Result = TextIntGetTextExtentPoint(dc, TextObj, String, Count, MaxExtent,
|
||||||
|
@ -339,7 +339,7 @@ NtGdiGetTextFaceW(
|
||||||
hFont = Dc_Attr->hlfntNew;
|
hFont = Dc_Attr->hlfntNew;
|
||||||
DC_UnlockDc(Dc);
|
DC_UnlockDc(Dc);
|
||||||
|
|
||||||
TextObj = TEXTOBJ_LockText(hFont);
|
TextObj = RealizeFontInit(hFont);
|
||||||
ASSERT(TextObj != NULL);
|
ASSERT(TextObj != NULL);
|
||||||
Count = min(Count, wcslen(TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfFaceName));
|
Count = min(Count, wcslen(TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfFaceName));
|
||||||
Status = MmCopyToCaller(FaceName, TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfFaceName, Count * sizeof(WCHAR));
|
Status = MmCopyToCaller(FaceName, TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfFaceName, Count * sizeof(WCHAR));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue