fix Windows problem with draw-bitmap-section and non-monochrome masks (PR 8543)

svn: r5688
This commit is contained in:
Matthew Flatt 2007-02-24 16:59:42 +00:00
parent 4c901b1f8b
commit e60ba79f61
2 changed files with 16 additions and 0 deletions

View File

@ -148,6 +148,7 @@ class wxBitmap: public wxObject
wxDC *selectedInto; // So bitmap knows whether it's been selected into wxDC *selectedInto; // So bitmap knows whether it's been selected into
// a device context (for error checking) // a device context (for error checking)
wxMemoryDC *mask_cache; // the cached mask wxMemoryDC *mask_cache; // the cached mask
int cache_xsrc1, cache_ysrc1, cache_iw, cache_ih;
Bool selectedIntoDC; Bool selectedIntoDC;
wxGLConfig *gl_cfg; wxGLConfig *gl_cfg;

View File

@ -2535,6 +2535,10 @@ Bool wxDC::Blit(double xdest, double ydest, double width, double height,
if (mask->mask_cache if (mask->mask_cache
&& (mask->mask_cache == source->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) && (mask != selected_bitmap)
&& (source != selected_bitmap) && (source != selected_bitmap)
&& (source->mask_cache->selected_bitmap)) { && (source->mask_cache->selected_bitmap)) {
@ -2648,10 +2652,21 @@ Bool wxDC::Blit(double xdest, double ydest, double width, double height,
source->ReleaseCachedMask(); source->ReleaseCachedMask();
orig_mask->mask_cache = invented_memdc; orig_mask->mask_cache = invented_memdc;
source->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) if (source == orig_mask)
invented_memdc->refcount = 1; invented_memdc->refcount = 1;
else else
invented_memdc->refcount = 2; invented_memdc->refcount = 2;
invented = NULL; /* indicates that we cached invented */ invented = NULL; /* indicates that we cached invented */
} }
} }