From ab638a7e678fb6e8c2016f8c52de57ebc2d6a4fa Mon Sep 17 00:00:00 2001
From: hobbs <hobbs@noemail.net>
Date: Tue, 11 Nov 2003 00:26:33 +0000
Subject:         * win/tkWinDraw.c (XFillRectangles): correctly handle the    
     XGCValues.function parameter when filling rectangles.         [Bug
 #820278] [Patch #820282]

FossilOrigin-Name: 6bc71292aad1a5c7bf671fe5041d3d0c3cd3a387
---
 ChangeLog       |  4 ++++
 win/tkWinDraw.c | 31 +++++++++++++++++++++++++------
 2 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index f00e76d..43a622c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2003-11-10  Jeff Hobbs  <jeffh@ActiveState.com>
 
+	* win/tkWinDraw.c (XFillRectangles): correctly handle the
+	XGCValues.function parameter when filling rectangles.
+	[Bug #820278] [Patch #820282]
+
 	* generic/tkImgPhoto.c (ImgPhotoBlendComplexAlpha): add alpha
 	blending for images with partial transparency.  Only operates for
 	15bpp+ display, and not on Mac at all. [Bug 809157]
diff --git a/win/tkWinDraw.c b/win/tkWinDraw.c
index 39a3d9c..21f0636 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.12.2.1 2003/11/11 00:26:33 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);
-- 
cgit v0.12