summaryrefslogtreecommitdiffstats
path: root/win
diff options
context:
space:
mode:
authorhobbs <hobbs>2003-11-11 00:26:16 (GMT)
committerhobbs <hobbs>2003-11-11 00:26:16 (GMT)
commit3f5d4b03620b19dac3b641d0315b09b766136265 (patch)
tree9a9d32b3274d799143980dc53f9e7d8e4900e4b8 /win
parentb061060374f936e48c4b1c8ed36b7ea1d77b9462 (diff)
downloadtk-3f5d4b03620b19dac3b641d0315b09b766136265.zip
tk-3f5d4b03620b19dac3b641d0315b09b766136265.tar.gz
tk-3f5d4b03620b19dac3b641d0315b09b766136265.tar.bz2
* win/tkWinDraw.c (XFillRectangles): correctly handle the
XGCValues.function parameter when filling rectangles. [Bug #820278] [Patch #820282]
Diffstat (limited to 'win')
-rw-r--r--win/tkWinDraw.c31
1 files changed, 25 insertions, 6 deletions
diff --git a/win/tkWinDraw.c b/win/tkWinDraw.c
index 39a3d9c..86d22a8 100644
--- a/win/tkWinDraw.c
+++ b/win/tkWinDraw.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkWinDraw.c,v 1.12 2003/02/26 02:47:04 hobbs Exp $
+ * RCS: @(#) $Id: tkWinDraw.c,v 1.13 2003/11/11 00:26:17 hobbs Exp $
*/
#include "tkWinInt.h"
@@ -630,7 +630,7 @@ XFillRectangles(display, d, gc, rectangles, nrectangles)
int i;
RECT rect;
TkWinDCState state;
- HBRUSH brush;
+ HBRUSH brush, oldBrush;
if (d == None) {
return;
@@ -644,7 +644,7 @@ XFillRectangles(display, d, gc, rectangles, nrectangles)
|| gc->fill_style == FillOpaqueStippled)
&& gc->stipple != None) {
TkWinDrawable *twdPtr = (TkWinDrawable *)gc->stipple;
- HBRUSH oldBrush, stipple;
+ HBRUSH stipple;
HBITMAP oldBitmap, bitmap;
HDC dcMem;
HBRUSH bgBrush = CreateSolidBrush(gc->background);
@@ -694,9 +694,28 @@ XFillRectangles(display, d, gc, rectangles, nrectangles)
DeleteObject(stipple);
DeleteObject(bgBrush);
} else {
- for (i = 0; i < nrectangles; i++) {
- TkWinFillRect(dc, rectangles[i].x, rectangles[i].y,
- rectangles[i].width, rectangles[i].height, gc->foreground);
+ if (gc->function == GXcopy) {
+ for (i = 0; i < nrectangles; i++) {
+ rect.left = rectangles[i].x;
+ rect.right = rect.left + rectangles[i].width;
+ rect.top = rectangles[i].y;
+ rect.bottom = rect.top + rectangles[i].height;
+ FillRect(dc, &rect, brush);
+ }
+ } else {
+ HPEN newPen = CreatePen(PS_NULL, 0, gc->foreground);
+ HPEN oldPen = SelectObject(dc, newPen);
+ oldBrush = SelectObject(dc, brush);
+
+ for (i = 0; i < nrectangles; i++) {
+ Rectangle(dc, rectangles[i].x, rectangles[i].y,
+ rectangles[i].x + rectangles[i].width + 1,
+ rectangles[i].y + rectangles[i].height + 1);
+ }
+
+ SelectObject(dc, oldBrush);
+ SelectObject(dc, oldPen);
+ DeleteObject(newPen);
}
}
DeleteObject(brush);