From e23d0e958e1776cf9e7a8c61a41dbf57e16b4b60 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Mon, 16 Nov 1998 08:31:32 +0000 Subject: [PATCH] Fixed bug in dc::blit() Redid fix in fileconf FortyThieves works now.. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1006 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- samples/forty/game.cpp | 5 +++-- src/common/fileconf.cpp | 11 +++++++---- src/gtk/dcclient.cpp | 38 +++++++++++++++++++++++++++++++++++--- src/gtk1/dcclient.cpp | 38 +++++++++++++++++++++++++++++++++++--- 4 files changed, 80 insertions(+), 12 deletions(-) diff --git a/samples/forty/game.cpp b/samples/forty/game.cpp index c121d8dd06..90bfc194c0 100644 --- a/samples/forty/game.cpp +++ b/samples/forty/game.cpp @@ -288,11 +288,12 @@ void Game::Redraw(wxDC& dc) // Initialise the card bitmap to the background colour wxMemoryDC memoryDC; - memoryDC.SelectObject(m_bmapCard); + memoryDC.SelectObject(*m_bmapCard); memoryDC.SetBrush(FortyApp::BackgroundBrush()); memoryDC.DrawRectangle(0, 0, CardWidth, CardHeight); - memoryDC.SelectObject(m_bmap); + memoryDC.SelectObject(*m_bmap); memoryDC.DrawRectangle(0, 0, CardWidth, CardHeight); + memoryDC.SelectObject(wxNullBitmap); } } diff --git a/src/common/fileconf.cpp b/src/common/fileconf.cpp index 873515cc50..f518ec1f58 100644 --- a/src/common/fileconf.cpp +++ b/src/common/fileconf.cpp @@ -113,9 +113,12 @@ wxString wxFileConfig::GetLocalDir() wxString strDir; wxGetHomeDir(&strDir); - - if (strDir.Last() != '/' && strDir.Last() != '\\') - strDir += "/"; + +#ifdef __UNIX__ + if (strDir.Last() != '/') strDir << '/'; +#else + if (strDir.Last() != '\\') strDir << '\\'; +#endif return strDir; } @@ -149,7 +152,7 @@ wxString wxFileConfig::GetLocalFileName(const char *szFile) if ( strchr(szFile, '.') == NULL ) str << ".ini"; #endif - + return str; } diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index 9587269a0d..8fdd39e4ce 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -532,7 +532,7 @@ bool wxPaintDC::Blit( long xdest, long ydest, long width, long height, wxDC *source, long xsrc, long ysrc, int WXUNUSED(logical_func), bool useMask ) { if (!Ok()) return FALSE; - + CalcBoundingBox( xdest, ydest ); CalcBoundingBox( xdest + width, ydest + height ); @@ -541,7 +541,39 @@ bool wxPaintDC::Blit( long xdest, long ydest, long width, long height, if (csrc->m_isMemDC) { wxMemoryDC* srcDC = (wxMemoryDC*)source; - GdkPixmap* bmap = srcDC->m_selected.GetPixmap(); + GdkPixmap* pmap = srcDC->m_selected.GetPixmap(); + if (pmap) + { + long xx = XLOG2DEV(xdest); + long yy = YLOG2DEV(ydest); + + GdkBitmap *mask = (GdkBitmap *) NULL; + if (srcDC->m_selected.GetMask()) mask = srcDC->m_selected.GetMask()->GetBitmap(); + + if (useMask && mask) + { + gdk_gc_set_clip_mask( m_penGC, mask ); + gdk_gc_set_clip_origin( m_penGC, xx, yy ); + } + + gdk_draw_pixmap( m_window, m_penGC, pmap, + source->DeviceToLogicalX(xsrc), + source->DeviceToLogicalY(ysrc), + xx, + yy, + source->DeviceToLogicalXRel(width), + source->DeviceToLogicalYRel(height) ); + + if (useMask && mask) + { + gdk_gc_set_clip_mask( m_penGC, (GdkBitmap *) NULL ); + gdk_gc_set_clip_origin( m_penGC, 0, 0 ); + } + + return TRUE; + } + + GdkBitmap* bmap = srcDC->m_selected.GetBitmap(); if (bmap) { long xx = XLOG2DEV(xdest); @@ -556,7 +588,7 @@ bool wxPaintDC::Blit( long xdest, long ydest, long width, long height, gdk_gc_set_clip_origin( m_penGC, xx, yy ); } - gdk_draw_pixmap( m_window, m_penGC, bmap, + gdk_draw_bitmap( m_window, m_penGC, bmap, source->DeviceToLogicalX(xsrc), source->DeviceToLogicalY(ysrc), xx, diff --git a/src/gtk1/dcclient.cpp b/src/gtk1/dcclient.cpp index 9587269a0d..8fdd39e4ce 100644 --- a/src/gtk1/dcclient.cpp +++ b/src/gtk1/dcclient.cpp @@ -532,7 +532,7 @@ bool wxPaintDC::Blit( long xdest, long ydest, long width, long height, wxDC *source, long xsrc, long ysrc, int WXUNUSED(logical_func), bool useMask ) { if (!Ok()) return FALSE; - + CalcBoundingBox( xdest, ydest ); CalcBoundingBox( xdest + width, ydest + height ); @@ -541,7 +541,39 @@ bool wxPaintDC::Blit( long xdest, long ydest, long width, long height, if (csrc->m_isMemDC) { wxMemoryDC* srcDC = (wxMemoryDC*)source; - GdkPixmap* bmap = srcDC->m_selected.GetPixmap(); + GdkPixmap* pmap = srcDC->m_selected.GetPixmap(); + if (pmap) + { + long xx = XLOG2DEV(xdest); + long yy = YLOG2DEV(ydest); + + GdkBitmap *mask = (GdkBitmap *) NULL; + if (srcDC->m_selected.GetMask()) mask = srcDC->m_selected.GetMask()->GetBitmap(); + + if (useMask && mask) + { + gdk_gc_set_clip_mask( m_penGC, mask ); + gdk_gc_set_clip_origin( m_penGC, xx, yy ); + } + + gdk_draw_pixmap( m_window, m_penGC, pmap, + source->DeviceToLogicalX(xsrc), + source->DeviceToLogicalY(ysrc), + xx, + yy, + source->DeviceToLogicalXRel(width), + source->DeviceToLogicalYRel(height) ); + + if (useMask && mask) + { + gdk_gc_set_clip_mask( m_penGC, (GdkBitmap *) NULL ); + gdk_gc_set_clip_origin( m_penGC, 0, 0 ); + } + + return TRUE; + } + + GdkBitmap* bmap = srcDC->m_selected.GetBitmap(); if (bmap) { long xx = XLOG2DEV(xdest); @@ -556,7 +588,7 @@ bool wxPaintDC::Blit( long xdest, long ydest, long width, long height, gdk_gc_set_clip_origin( m_penGC, xx, yy ); } - gdk_draw_pixmap( m_window, m_penGC, bmap, + gdk_draw_bitmap( m_window, m_penGC, bmap, source->DeviceToLogicalX(xsrc), source->DeviceToLogicalY(ysrc), xx, -- 2.45.2