From 5c2c9c79dc64e2a2074b1fe7690525e3a832fa1e Mon Sep 17 00:00:00 2001 From: Jason Rumney Date: Thu, 13 Sep 2007 13:37:26 +0000 Subject: [PATCH] (w32font_draw): Do clipping here. --- src/w32font.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/w32font.c b/src/w32font.c index f1c2677f96c..061b253230a 100644 --- a/src/w32font.c +++ b/src/w32font.c @@ -492,9 +492,32 @@ w32font_draw (s, from, to, x, y, with_background) int from, to, x, y, with_background; { UINT options = 0; + HRGN orig_clip; + + /* Save clip region for later restoration. */ + GetClipRgn(s->hdc, orig_clip); + + if (s->num_clips > 0) + { + HRGN new_clip = CreateRectRgnIndirect (s->clip); + + if (s->num_clips > 1) + { + HRGN clip2 = CreateRectRgnIndirect (s->clip + 1); + + CombineRgn (new_clip, new_clip, clip2, RGN_OR); + DeleteObject (clip2); + } + + SelectClipRgn (s->hdc, new_clip); + DeleteObject (new_clip); + } if (with_background) { + SetBkColor (s->hdc, s->gc->background); + SetBkMode (s->hdc, OPAQUE); +#if 0 HBRUSH brush; RECT rect; @@ -505,11 +528,18 @@ w32font_draw (s, from, to, x, y, with_background) rect.bottom = y + ((struct font *) (s->font_info->font))->descent; FillRect (s->hdc, &rect, brush); DeleteObject (brush); +#endif } else SetBkMode (s->hdc, TRANSPARENT); ExtTextOutW (s->hdc, x, y, options, NULL, s->char2b + from, to - from, NULL); + + /* Restore clip region. */ + if (s->num_clips > 0) + { + SelectClipRgn (s->hdc, orig_clip); + } } /* w32 implementation of free_entity for font backend. -- 2.39.5