- Don't hold the DC blit lock during the whole GreTextOutW function.
svn path=/branches/reactos-yarotows/; revision=46934
- /* FIXME : This is ugly, but this function must be rewritten anyway */
- DC_vPrepareDCsForBlit(dc, dc->rosdc.CombinedClip->rclBounds, NULL, DestRect);
-
pdcattr = dc->pdcattr;
if (pdcattr->ulDirty_ & DIRTY_TEXT)
pdcattr = dc->pdcattr;
if (pdcattr->ulDirty_ & DIRTY_TEXT)
DestRect.right += dc->ptlDCOrig.x;
DestRect.bottom += dc->ptlDCOrig.y;
DestRect.right += dc->ptlDCOrig.x;
DestRect.bottom += dc->ptlDCOrig.y;
+ DC_vPrepareDCsForBlit(dc, DestRect, NULL, DestRect);
+
IntEngBitBlt(
&psurf->SurfObj,
NULL,
IntEngBitBlt(
&psurf->SurfObj,
NULL,
&BrushOrigin,
ROP3_TO_ROP4(PATCOPY));
fuOptions &= ~ETO_OPAQUE;
&BrushOrigin,
ROP3_TO_ROP4(PATCOPY));
fuOptions &= ~ETO_OPAQUE;
+ DC_vFinishBlit(dc, NULL);
/*
* The main rendering loop.
*/
/*
* The main rendering loop.
*/
for (i = 0; i < Count; i++)
{
if (fuOptions & ETO_GLYPH_INDEX)
for (i = 0; i < Count; i++)
{
if (fuOptions & ETO_GLYPH_INDEX)
DestRect.right = (TextLeft + (realglyph->root.advance.x >> 10) + 32) >> 6;
DestRect.top = TextTop + yoff - ((face->size->metrics.ascender + 32) >> 6);
DestRect.bottom = TextTop + yoff + ((32 - face->size->metrics.descender) >> 6);
DestRect.right = (TextLeft + (realglyph->root.advance.x >> 10) + 32) >> 6;
DestRect.top = TextTop + yoff - ((face->size->metrics.ascender + 32) >> 6);
DestRect.bottom = TextTop + yoff + ((32 - face->size->metrics.descender) >> 6);
+ DC_vPrepareDCsForBlit(dc, DestRect, NULL, DestRect);
IntEngBitBlt(
&psurf->SurfObj,
NULL,
IntEngBitBlt(
&psurf->SurfObj,
NULL,
&dc->eboBackground.BrushObject,
&BrushOrigin,
ROP3_TO_ROP4(PATCOPY));
&dc->eboBackground.BrushObject,
&BrushOrigin,
ROP3_TO_ROP4(PATCOPY));
+ DC_vFinishBlit(dc, NULL);
BackgroundLeft = DestRect.right;
BackgroundLeft = DestRect.right;
}
DestRect.left = ((TextLeft + 32) >> 6) + realglyph->left;
}
DestRect.left = ((TextLeft + 32) >> 6) + realglyph->left;
DestRect.right = lprc->right + dc->ptlDCOrig.x;
DoBreak = TRUE;
}
DestRect.right = lprc->right + dc->ptlDCOrig.x;
DoBreak = TRUE;
}
+ DC_vPrepareDCsForBlit(dc, DestRect, NULL, DestRect);
IntEngMaskBlt(
SurfObj,
SourceGlyphSurf,
IntEngMaskBlt(
SurfObj,
SourceGlyphSurf,
(PPOINTL)&MaskRect,
&dc->eboText.BrushObject,
&BrushOrigin);
(PPOINTL)&MaskRect,
&dc->eboText.BrushObject,
&BrushOrigin);
+ DC_vFinishBlit(dc, NULL);
EngUnlockSurface(SourceGlyphSurf);
EngDeleteSurface((HSURF)HSourceGlyph);
EngUnlockSurface(SourceGlyphSurf);
EngDeleteSurface((HSURF)HSourceGlyph);
IntUnLockFreeType;
EXLATEOBJ_vCleanup(&exloRGB2Dst);
IntUnLockFreeType;
EXLATEOBJ_vCleanup(&exloRGB2Dst);
if (TextObj != NULL)
TEXTOBJ_UnlockText(TextObj);
good:
if (TextObj != NULL)
TEXTOBJ_UnlockText(TextObj);
good:
- DC_vFinishBlit(dc, NULL);
DC_UnlockDc( dc );
return TRUE;
DC_UnlockDc( dc );
return TRUE;
fail:
if (TextObj != NULL)
TEXTOBJ_UnlockText(TextObj);
fail:
if (TextObj != NULL)
TEXTOBJ_UnlockText(TextObj);
- DC_vFinishBlit(dc, NULL);
DC_UnlockDc(dc);
return FALSE;
DC_UnlockDc(dc);
return FALSE;