From da6214a37d879b65c5b500fb82049e4b9eba702d Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Fri, 13 Feb 2004 04:00:29 +0000 Subject: [PATCH] Get rid of a few more references to the DC structure. --- dlls/x11drv/bitblt.c | 15 ++++++++++----- dlls/x11drv/text.c | 12 +++++++----- dlls/x11drv/xrender.c | 32 +++++++++++++++++--------------- 3 files changed, 34 insertions(+), 25 deletions(-) diff --git a/dlls/x11drv/bitblt.c b/dlls/x11drv/bitblt.c index ab58290637a..9579dffa32f 100644 --- a/dlls/x11drv/bitblt.c +++ b/dlls/x11drv/bitblt.c @@ -1133,8 +1133,6 @@ static BOOL BITBLT_GetVisRectangles( X11DRV_PDEVICE *physDevDst, INT xDst, INT y RECT *visRectSrc, RECT *visRectDst ) { RECT rect, clipRect; - DC *dcSrc = physDevSrc ? physDevSrc->dc : NULL; - DC *dcDst = physDevDst->dc; /* Get the destination visible rectangle */ @@ -1144,7 +1142,7 @@ static BOOL BITBLT_GetVisRectangles( X11DRV_PDEVICE *physDevDst, INT xDst, INT y rect.bottom = yDst + heightDst; if (widthDst < 0) SWAP_INT32( &rect.left, &rect.right ); if (heightDst < 0) SWAP_INT32( &rect.top, &rect.bottom ); - GetRgnBox( dcDst->hGCClipRgn, &clipRect ); + GetRgnBox( physDevDst->dc->hGCClipRgn, &clipRect ); if (!IntersectRect( visRectDst, &rect, &clipRect )) return FALSE; /* Get the source visible rectangle */ @@ -1157,8 +1155,15 @@ static BOOL BITBLT_GetVisRectangles( X11DRV_PDEVICE *physDevDst, INT xDst, INT y if (widthSrc < 0) SWAP_INT32( &rect.left, &rect.right ); if (heightSrc < 0) SWAP_INT32( &rect.top, &rect.bottom ); /* Apparently the clipping and visible regions are only for output, - so just check against totalExtent here to avoid BadMatch errors */ - if (!IntersectRect( visRectSrc, &rect, &dcSrc->totalExtent )) + so just check against dc extent here to avoid BadMatch errors */ + if (GetObjectType( physDevSrc->hdc ) == OBJ_MEMDC) + { + BITMAP bm; + GetObjectW( GetCurrentObject(physDevSrc->hdc,OBJ_BITMAP), sizeof(bm), &bm ); + SetRect( &clipRect, 0, 0, bm.bmWidth, bm.bmHeight ); + } + else SetRect( &clipRect, 0, 0, screen_width, screen_height ); + if (!IntersectRect( visRectSrc, &rect, &clipRect )) return FALSE; /* Intersect the rectangles */ diff --git a/dlls/x11drv/text.c b/dlls/x11drv/text.c index c8d0d14e5bc..85dde735df6 100644 --- a/dlls/x11drv/text.c +++ b/dlls/x11drv/text.c @@ -59,6 +59,7 @@ X11DRV_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flags, POINT pt; DC *dc = physDev->dc; UINT align = GetTextAlign( physDev->hdc ); + INT charExtra = GetTextCharacterExtra( physDev->hdc ); if(dc->gdiFont) return X11DRV_XRender_ExtTextOut(physDev, x, y, flags, lprect, wstr, count, @@ -261,7 +262,7 @@ X11DRV_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flags, wine_tsx11_unlock(); if(!rotated) { - if (!dc->charExtra && !dc->breakExtra && !lpDx) + if (!charExtra && !dc->breakExtra && !lpDx) { X11DRV_cptable[pfo->fi->cptable].pDrawString( pfo, gdi_display, physDev->drawable, physDev->gc, @@ -326,7 +327,7 @@ X11DRV_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flags, do { - delta += dc->charExtra; + delta += charExtra; if (str2b[i].byte2 == (char)dfBreakChar) delta += dc->breakExtra; pitem->nchars++; @@ -369,7 +370,7 @@ X11DRV_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flags, font->per_char[char_metric_offset].attributes: font->min_bounds.attributes) * pfo->lpX11Trans->pixelsize / 1000.0; - offset += dc->charExtra; + offset += charExtra; if (str2b[i].byte2 == (char)dfBreakChar) offset += dc->breakExtra; } @@ -434,6 +435,7 @@ BOOL X11DRV_GetTextExtentPoint( X11DRV_PDEVICE *physDev, LPCWSTR str, INT count, TRACE("%s %d\n", debugstr_wn(str,count), count); if( pfo ) { + INT charExtra = GetTextCharacterExtra( physDev->hdc ); XChar2b *p = X11DRV_cptable[pfo->fi->cptable].punicode_to_char2b( pfo, str, count ); if (!p) return FALSE; if( !pfo->lpX11Trans ) { @@ -443,7 +445,7 @@ BOOL X11DRV_GetTextExtentPoint( X11DRV_PDEVICE *physDev, LPCWSTR str, INT count, count, &dir, &ascent, &descent, &info_width ); size->cx = fabs((FLOAT)(info_width + dc->breakRem + count * - dc->charExtra) * dc->xformVport2World.eM11); + charExtra) * dc->xformVport2World.eM11); size->cy = fabs((FLOAT)(pfo->fs->ascent + pfo->fs->descent) * dc->xformVport2World.eM22); } else { @@ -459,7 +461,7 @@ BOOL X11DRV_GetTextExtentPoint( X11DRV_PDEVICE *physDev, LPCWSTR str, INT count, TRACE("x = %f y = %f\n", x, y); x *= pfo->lpX11Trans->pixelsize / 1000.0; y *= pfo->lpX11Trans->pixelsize / 1000.0; - size->cx = fabs((x + dc->breakRem + count * dc->charExtra) * + size->cx = fabs((x + dc->breakRem + count * charExtra) * dc->xformVport2World.eM11); size->cy = fabs(y * dc->xformVport2World.eM22); } diff --git a/dlls/x11drv/xrender.c b/dlls/x11drv/xrender.c index 38fdacd47af..4df7c764c35 100644 --- a/dlls/x11drv/xrender.c +++ b/dlls/x11drv/xrender.c @@ -949,11 +949,11 @@ BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flag gsCacheEntry *entry; BOOL retv = FALSE; HDC hdc = physDev->hdc; - DC *dc = physDev->dc; int textPixel, backgroundPixel; INT *deltas = NULL; INT char_extra; UINT align = GetTextAlign( hdc ); + COLORREF textColor = GetTextColor( hdc ); TRACE("%p, %d, %d, %08x, %p, %s, %d, %p)\n", hdc, x, y, flags, lprect, debugstr_wn(wstr, count), count, lpDx); @@ -968,7 +968,7 @@ BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flag if(lprect) TRACE("rect: %ld,%ld - %ld,%ld\n", lprect->left, lprect->top, lprect->right, lprect->bottom); - TRACE("align = %x bkmode = %x mapmode = %x\n", align, GetBkMode(hdc), dc->MapMode); + TRACE("align = %x bkmode = %x mapmode = %x\n", align, GetBkMode(hdc), GetMapMode(hdc)); if(align & TA_UPDATECP) { @@ -1015,7 +1015,7 @@ BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flag X11DRV_LockDIBSection( physDev, DIB_Status_GdiMod, FALSE ); if(physDev->depth == 1) { - if((dc->textColor & 0xffffff) == 0) { + if((textColor & 0xffffff) == 0) { textPixel = 0; backgroundPixel = 1; } else { @@ -1083,7 +1083,7 @@ BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flag tm.tmAscent = X11DRV_YWStoDS(physDev, tm.tmAscent); tm.tmDescent = X11DRV_YWStoDS(physDev, tm.tmDescent); - switch( dc->textAlign & (TA_LEFT | TA_RIGHT | TA_CENTER) ) { + switch( align & (TA_LEFT | TA_RIGHT | TA_CENTER) ) { case TA_LEFT: if (align & TA_UPDATECP) { pt.x = x + xwidth; @@ -1144,12 +1144,14 @@ BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flag CPSubwindowMode, &pa); wine_tsx11_unlock(); - TRACE("allocing pict = %lx dc = %p drawable = %08lx\n", physDev->xrender->pict, dc, physDev->drawable); + TRACE("allocing pict = %lx dc = %p drawable = %08lx\n", + physDev->xrender->pict, hdc, physDev->drawable); } else { - TRACE("using existing pict = %lx dc = %p drawable = %08lx\n", physDev->xrender->pict, dc, physDev->drawable); + TRACE("using existing pict = %lx dc = %p drawable = %08lx\n", + physDev->xrender->pict, hdc, physDev->drawable); } - if ((data = X11DRV_GetRegionData( dc->hGCClipRgn, 0 ))) + if ((data = X11DRV_GetRegionData( physDev->dc->hGCClipRgn, 0 ))) { wine_tsx11_lock(); pXRenderSetPictureClipRectangles( gdi_display, physDev->xrender->pict, @@ -1192,19 +1194,19 @@ BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flag CPRepeat, &pa); wine_tsx11_unlock(); TRACE("Created pixmap of depth %d\n", format->depth); - /* init lastTextColor to something different from dc->textColor */ - physDev->xrender->lastTextColor = ~dc->textColor; + /* init lastTextColor to something different from textColor */ + physDev->xrender->lastTextColor = ~textColor; } - if(dc->textColor != physDev->xrender->lastTextColor) { + if(textColor != physDev->xrender->lastTextColor) { if(physDev->depth != 1) { /* Map 0 -- 0xff onto 0 -- 0xffff */ - col.red = GetRValue(dc->textColor); + col.red = GetRValue(textColor); col.red |= col.red << 8; - col.green = GetGValue(dc->textColor); + col.green = GetGValue(textColor); col.green |= col.green << 8; - col.blue = GetBValue(dc->textColor); + col.blue = GetBValue(textColor); col.blue |= col.blue << 8; col.alpha = 0x0; } else { /* for a 1bpp bitmap we always need a 1 in the tile */ @@ -1216,7 +1218,7 @@ BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flag physDev->xrender->tile_pict, &col, 0, 0, 1, 1); wine_tsx11_unlock(); - physDev->xrender->lastTextColor = dc->textColor; + physDev->xrender->lastTextColor = textColor; } /* FIXME the mapping of Text/BkColor onto 1 or 0 needs investigation. @@ -1439,7 +1441,7 @@ BOOL X11DRV_XRender_ExtTextOut( X11DRV_PDEVICE *physDev, INT x, INT y, UINT flag yoff + image_off_y - extents.top, entry->bitmaps[glyphs[idx]], &entry->gis[glyphs[idx]], - dc->textColor); + textColor); if(deltas) { offset += X11DRV_XWStoDS(physDev, deltas[idx]); xoff = offset * cosEsc; -- 2.11.4.GIT