chiark / gitweb /
Simplify clip region handling under Windows, which also makes Solo's
authorSimon Tatham <anakin@pobox.com>
Sat, 23 Apr 2005 17:09:19 +0000 (17:09 +0000)
committerSimon Tatham <anakin@pobox.com>
Sat, 23 Apr 2005 17:09:19 +0000 (17:09 +0000)
clipping policy work properly. I haven't proved why it didn't work
the previous way, but I have a good guess: I think that clip regions
are handled by reference. So I saved the old clip region out of the
DC, then did an IntersectClipRect, and then selected the old clip
region back in again - but the old clip region had never been
_de_-selected, because IntersectClipRect didn't change which object
was selected but rather it modified-in-place the one that already
was selected. So my attempt to restore the old clip region did
nothing whatsoever, and thus clipping to two different rectangles
during the same draw sequence failed. Now I'm completely destroying
the clip region during unclip(), which seems to work better.

[originally from svn r5662]

windows.c

index 127311e002b3514a8605a5be200b16127493018f..bf7c21062e3300375a3180f13cf1ee2cd7b2844a 100644 (file)
--- a/windows.c
+++ b/windows.c
@@ -154,18 +154,12 @@ void frontend_default_colour(frontend *fe, float *output)
 
 void clip(frontend *fe, int x, int y, int w, int h)
 {
-    if (!fe->clip) {
-       fe->clip = CreateRectRgn(0, 0, 1, 1);
-       GetClipRgn(fe->hdc_bm, fe->clip);
-    }
-
     IntersectClipRect(fe->hdc_bm, x, y, x+w, y+h);
 }
 
 void unclip(frontend *fe)
 {
-    assert(fe->clip);
-    SelectClipRgn(fe->hdc_bm, fe->clip);
+    SelectClipRgn(fe->hdc_bm, NULL);
 }
 
 void draw_text(frontend *fe, int x, int y, int fonttype, int fontsize,