case GdiBCSetBrushOrg:
{
PGDIBSSETBRHORG pgSBO;
- if(!dc) break;
+ if (!dc) break;
pgSBO = (PGDIBSSETBRHORG) pHdr;
pdcattr->ptlBrushOrigin = pgSBO->ptlBrushOrigin;
+ IntptlBrushOrigin(dc, pgSBO->ptlBrushOrigin.x, pgSBO->ptlBrushOrigin.y);
break;
}
case GdiBCExtSelClipRgn:
case GdiBCSelObj:
{
PGDIBSOBJECT pgO;
- if(!dc) break;
+ PTEXTOBJ pOrgFnt, pNewFnt = NULL;
+ HFONT hOrgFont = NULL;
+
+ if (!dc) break;
pgO = (PGDIBSOBJECT) pHdr;
- TextIntRealizeFont((HFONT) pgO->hgdiobj, NULL);
- pdcattr->ulDirty_ &= ~(DIRTY_CHARSET);
+
+ if (NT_SUCCESS(TextIntRealizeFont((HFONT)pgO->hgdiobj,NULL)))
+ {
+ /* LFONTOBJ use share and locking. */
+ pNewFnt = TEXTOBJ_LockText(pgO->hgdiobj);
+
+ pOrgFnt = dc->dclevel.plfnt;
+ if (pOrgFnt)
+ {
+ hOrgFont = pOrgFnt->BaseObject.hHmgr;
+ }
+ else
+ {
+ hOrgFont = pdcattr->hlfntNew;
+ }
+ dc->dclevel.plfnt = pNewFnt;
+ dc->hlfntCur = pgO->hgdiobj;
+ pdcattr->hlfntNew = pgO->hgdiobj;
+ pdcattr->ulDirty_ |= DIRTY_CHARSET;
+ pdcattr->ulDirty_ &= ~SLOW_WIDTHS;
+ }
+ if (pNewFnt) TEXTOBJ_UnlockText(pNewFnt);
+ break;
}
case GdiBCDelRgn:
DPRINT("Delete Region Object!\n");