From e60ba79f615b38fdf83a25bb0bd808584c9b659b Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 24 Feb 2007 16:59:42 +0000 Subject: [PATCH] fix Windows problem with draw-bitmap-section and non-monochrome masks (PR 8543) svn: r5688 --- src/wxwindow/include/msw/wx_gdi.h | 1 + src/wxwindow/src/msw/wx_dc.cxx | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/wxwindow/include/msw/wx_gdi.h b/src/wxwindow/include/msw/wx_gdi.h index bcf5864820..121bb258d7 100644 --- a/src/wxwindow/include/msw/wx_gdi.h +++ b/src/wxwindow/include/msw/wx_gdi.h @@ -148,6 +148,7 @@ class wxBitmap: public wxObject wxDC *selectedInto; // So bitmap knows whether it's been selected into // a device context (for error checking) wxMemoryDC *mask_cache; // the cached mask + int cache_xsrc1, cache_ysrc1, cache_iw, cache_ih; Bool selectedIntoDC; wxGLConfig *gl_cfg; diff --git a/src/wxwindow/src/msw/wx_dc.cxx b/src/wxwindow/src/msw/wx_dc.cxx index e46916fb4a..3801c3f8e1 100644 --- a/src/wxwindow/src/msw/wx_dc.cxx +++ b/src/wxwindow/src/msw/wx_dc.cxx @@ -2535,6 +2535,10 @@ Bool wxDC::Blit(double xdest, double ydest, double width, double height, if (mask->mask_cache && (mask->mask_cache == source->mask_cache) + && (mask->cache_xsrc1 == xsrc1) + && (mask->cache_ysrc1 == ysrc1) + && (mask->cache_iw == iw) + && (mask->cache_ih == ih) && (mask != selected_bitmap) && (source != selected_bitmap) && (source->mask_cache->selected_bitmap)) { @@ -2648,10 +2652,21 @@ Bool wxDC::Blit(double xdest, double ydest, double width, double height, source->ReleaseCachedMask(); orig_mask->mask_cache = invented_memdc; source->mask_cache = invented_memdc; + + orig_mask->cache_xsrc1 = xsrc1; + orig_mask->cache_ysrc1 = ysrc1; + orig_mask->cache_iw = iw; + orig_mask->cache_ih = ih; + source->cache_xsrc1 = xsrc1; + source->cache_ysrc1 = ysrc1; + source->cache_iw = iw; + source->cache_ih = ih; + if (source == orig_mask) invented_memdc->refcount = 1; else invented_memdc->refcount = 2; + invented = NULL; /* indicates that we cached invented */ } }