X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2f1ae4143271ae63a17e052a1a471d16e9cd8c44..cf1a9b45c7b70f217d3cc282ab77df8feaadcdeb:/src/mac/carbon/dc.cpp?ds=sidebyside diff --git a/src/mac/carbon/dc.cpp b/src/mac/carbon/dc.cpp index 1682209492..8285afd1c6 100644 --- a/src/mac/carbon/dc.cpp +++ b/src/mac/carbon/dc.cpp @@ -14,8 +14,13 @@ #endif #include "wx/dc.h" +#include "wx/app.h" #include "wx/mac/uma.h" +#if __MSL__ >= 0x6000 +#include "math.h" +#endif + #if !USE_SHARED_LIBRARY IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject) #endif @@ -31,8 +36,6 @@ IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject) #define mm2pt 2.83464566929 #define pt2mm 0.352777777778 -long wxDC::m_macCurrentPortId = 1 ; - //----------------------------------------------------------------------------- // wxDC //----------------------------------------------------------------------------- @@ -40,18 +43,11 @@ long wxDC::m_macCurrentPortId = 1 ; wxDC::wxDC() { m_ok = FALSE; - m_optimize = FALSE; - m_autoSetting = FALSE; m_colour = TRUE; - m_clipping = FALSE; m_mm_to_pix_x = mm2pt; m_mm_to_pix_y = mm2pt; - m_logicalOriginX = 0; - m_logicalOriginY = 0; - m_deviceOriginX = 0; - m_deviceOriginY = 0; m_internalDeviceOriginX = 0; m_internalDeviceOriginY = 0; m_externalDeviceOriginX = 0; @@ -64,28 +60,12 @@ wxDC::wxDC() m_scaleX = 1.0; m_scaleY = 1.0; - m_mappingMode = wxMM_TEXT; m_needComputeScaleX = FALSE; m_needComputeScaleY = FALSE; - m_signX = 1; // default x-axis left to right - m_signY = 1; // default y-axis top down - m_maxX = m_maxY = -100000; m_minY = m_minY = 100000; - m_logicalFunction = wxCOPY; -// m_textAlignment = wxALIGN_TOP_LEFT; - m_backgroundMode = wxTRANSPARENT; - - m_textForegroundColour = *wxBLACK; - m_textBackgroundColour = *wxWHITE; - m_pen = *wxBLACK_PEN; - m_font = *wxNORMAL_FONT; - m_brush = *wxTRANSPARENT_BRUSH; - m_backgroundBrush = *wxWHITE_BRUSH; - -// m_palette = wxAPP_COLOURMAP; m_macPort = NULL ; m_macMask = NULL ; m_ok = FALSE ; @@ -94,43 +74,36 @@ wxDC::wxDC() m_macBrushInstalled = false ; m_macPenInstalled = false ; - m_macPortId = 0 ; m_macLocalOrigin.h = m_macLocalOrigin.v = 0 ; m_macClipRect.left = -32000 ; m_macClipRect.top = -32000 ; m_macClipRect.right = 32000 ; m_macClipRect.bottom = 32000 ; - ::GetPort( &m_macOrigPort ) ; + + m_pen = *wxBLACK_PEN; + m_font = *wxNORMAL_FONT; + m_brush = *wxWHITE_BRUSH; }; +wxMacPortSetter::wxMacPortSetter( const wxDC* dc ) : + m_ph( dc->m_macPort ) +{ + wxASSERT( dc->Ok() ) ; + + dc->MacSetupPort(&m_ph) ; +} + +wxMacPortSetter::~wxMacPortSetter() +{ +} + wxDC::~wxDC(void) { - if ( !m_macPortHelper.IsCleared() ) - { - GrafPtr port ; - GetPort( &port ) ; - SetPort( m_macPortHelper.GetCurrentPort() ) ; - SetOrigin( 0 , 0 ) ; - SetPort( port ) ; - } - /* - if ( m_macPort ) - { - ::SetPort( m_macPort ) ; - ::SetOrigin( 0 , 0 ) ; - ::ClipRect( &m_macPort->portRect ) ; - ::PenNormal() ; - ::SetPort( m_macOrigPort ) ; - } - */ - ++m_macCurrentPortId ; }; -void wxDC::MacSetupPort() const +void wxDC::MacSetupPort(AGAPortHelper* help) const { - AGAPortHelper* help = &m_macPortHelper ; help->Setup( m_macPort ) ; - m_macPortId = ++m_macCurrentPortId ; ::SetOrigin(-m_macLocalOrigin.h, -m_macLocalOrigin.v); ::ClipRect(&m_macClipRect); @@ -145,7 +118,7 @@ void wxDC::DoDrawBitmap( const wxBitmap &bmp, wxCoord x, wxCoord y, bool useMask if (!Ok()) return; - MacVerifySetup() ; + wxMacPortSetter helper(this) ; long xx1 = XLOG2DEV(x); long yy1 = YLOG2DEV(y); @@ -157,7 +130,7 @@ void wxDC::DoDrawBitmap( const wxBitmap &bmp, wxCoord x, wxCoord y, bool useMask { if ( bmap->m_bitmapType == kMacBitmapTypePict ) { - Rect bitmaprect = { 0 , 0 , bmap->m_height * scale , bmap->m_width * scale} ; + Rect bitmaprect = { 0 , 0 , int(bmap->m_height * scale) , int(bmap->m_width * scale)} ; ::OffsetRect( &bitmaprect , xx1 , yy1 ) ; ::DrawPicture( bmap->m_hPict , &bitmaprect ) ; } @@ -214,7 +187,7 @@ void wxDC::DoDrawIcon( const wxIcon &icon, wxCoord x, wxCoord y ) { if (!Ok()) return; - MacVerifySetup() ; + wxMacPortSetter helper(this) ; long xx1 = XLOG2DEV(x); long yy1 = YLOG2DEV(y); @@ -233,7 +206,7 @@ void wxDC::DoDrawIcon( const wxIcon &icon, wxCoord x, wxCoord y ) void wxDC::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord width, wxCoord height ) { - MacVerifySetup() ; + wxMacPortSetter helper(this) ; if( m_clipping ) { m_clipX1 = wxMax( m_clipX1 , x ) ; @@ -266,7 +239,7 @@ void wxDC::DoSetClippingRegionAsRegion( const wxRegion ®ion ) { wxCHECK_RET( Ok(), wxT("invalid window dc") ); - MacVerifySetup() ; + wxMacPortSetter helper(this) ; if (region.Empty()) { DestroyClippingRegion(); @@ -280,7 +253,7 @@ void wxDC::DoSetClippingRegionAsRegion( const wxRegion ®ion ) void wxDC::DestroyClippingRegion(void) { - MacVerifySetup() ; + wxMacPortSetter helper(this) ; m_clipping = FALSE; // Rect clip = { -32000 , -32000 , 32000 , 32000 } ; ::ClipRect(&m_macClipRect); @@ -427,7 +400,12 @@ void wxDC::ComputeScaleAndOrigin(void) // CMB: if scale has changed call SetPen to recalulate the line width if (m_scaleX != origScaleX || m_scaleY != origScaleY) { - // TODO : set internal flags for recalc + // this is a bit artificial, but we need to force wxDC to think + // the pen has changed + wxPen* pen = & GetPen(); + wxPen tempPen; + m_pen = tempPen; + SetPen(* pen); } }; @@ -445,7 +423,7 @@ void wxDC::SetFont( const wxFont &font ) if (!Ok()) return; - MacVerifySetup() ; +// wxMacPortSetter helper(this) ; m_font = font; m_macFontInstalled = false ; @@ -456,7 +434,7 @@ void wxDC::SetPen( const wxPen &pen ) if (!Ok() ) return; - MacVerifySetup() ; +// wxMacPortSetter helper(this) ; if ( m_pen == pen ) return ; @@ -473,7 +451,7 @@ void wxDC::SetBrush( const wxBrush &brush ) { if (!Ok() ) return; - MacVerifySetup() ; +// wxMacPortSetter helper(this) ; if (m_brush == brush) return; @@ -486,7 +464,7 @@ void wxDC::SetBackground( const wxBrush &brush ) { if (!Ok()) return; - MacVerifySetup() ; +// wxMacPortSetter helper(this) ; if (m_backgroundBrush == brush) return; @@ -524,12 +502,12 @@ void wxDC::DoDrawLine( wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2 ) if (!Ok()) return; - MacVerifySetup() ; + wxMacPortSetter helper(this) ; if (m_pen.GetStyle() != wxTRANSPARENT) { MacInstallPen() ; - int offset = (m_pen.GetWidth() - 1) / 2 ; + int offset = ( (m_pen.GetWidth() == 0 ? 1 : m_pen.GetWidth() ) * m_scaleX - 1) / 2 ; long xx1 = XLOG2DEV(x1); long yy1 = YLOG2DEV(y1); long xx2 = XLOG2DEV(x2); @@ -560,7 +538,7 @@ void wxDC::DoDrawPoint( wxCoord x, wxCoord y ) if (!Ok()) return; - MacVerifySetup() ; + wxMacPortSetter helper(this) ; if (m_pen.GetStyle() != wxTRANSPARENT) { @@ -578,24 +556,24 @@ void wxDC::DoDrawLines(int n, wxPoint points[], { if (!Ok()) return; - MacVerifySetup() ; + wxMacPortSetter helper(this) ; if (m_pen.GetStyle() == wxTRANSPARENT) return; - MacInstallPen() ; + MacInstallPen() ; - int offset = (m_pen.GetWidth() - 1 ) / 2 ; + int offset = (m_pen.GetWidth() - 1 ) / 2 ; long x1, x2 , y1 , y2 ; x1 = XLOG2DEV(points[0].x + xoffset); - y1 = YLOG2DEV(points[0].y + yoffset); - ::MoveTo(x1 - offset ,y1 - offset ); + y1 = YLOG2DEV(points[0].y + yoffset); + ::MoveTo(x1 - offset ,y1 - offset ); for (int i = 0; i < n-1; i++) { - long x2 = XLOG2DEV(points[i+1].x + xoffset); - long y2 = YLOG2DEV(points[i+1].y + yoffset); - ::LineTo(x2 - offset , y2 - offset ); + x2 = XLOG2DEV(points[i+1].x + xoffset); + y2 = YLOG2DEV(points[i+1].y + yoffset); + ::LineTo(x2 - offset , y2 - offset ); } } @@ -605,19 +583,19 @@ void wxDC::DoDrawPolygon(int n, wxPoint points[], { if (!Ok()) return; - MacVerifySetup() ; + wxMacPortSetter helper(this) ; PolyHandle polygon = OpenPoly() ; long x1, x2 , y1 , y2 ; x1 = XLOG2DEV(points[0].x + xoffset); - y1 = YLOG2DEV(points[0].y + yoffset); - ::MoveTo(x1,y1); + y1 = YLOG2DEV(points[0].y + yoffset); + ::MoveTo(x1,y1); for (int i = 0; i < n-1; i++) { - long x2 = XLOG2DEV(points[i+1].x + xoffset); - long y2 = YLOG2DEV(points[i+1].y + yoffset); - ::LineTo(x2, y2); + x2 = XLOG2DEV(points[i+1].x + xoffset); + y2 = YLOG2DEV(points[i+1].y + yoffset); + ::LineTo(x2, y2); } ClosePoly() ; @@ -639,7 +617,7 @@ void wxDC::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height) { if (!Ok()) return; - MacVerifySetup() ; + wxMacPortSetter helper(this) ; long xx = XLOG2DEV(x); long yy = YLOG2DEV(y); @@ -684,7 +662,7 @@ void wxDC::DoDrawRoundedRectangle(wxCoord x, wxCoord y, { if (!Ok()) return; - MacVerifySetup() ; + wxMacPortSetter helper(this) ; if (radius < 0.0) radius = - radius * ((width < height) ? width : height); @@ -716,13 +694,13 @@ void wxDC::DoDrawRoundedRectangle(wxCoord x, wxCoord y, if (m_brush.GetStyle() != wxTRANSPARENT) { MacInstallBrush() ; - ::PaintRoundRect( &rect , radius * 2 , radius * 2 ) ; + ::PaintRoundRect( &rect , int(radius * 2) , int(radius * 2) ) ; }; if (m_pen.GetStyle() != wxTRANSPARENT) { MacInstallPen() ; - ::FrameRoundRect( &rect , radius * 2 , radius * 2 ) ; + ::FrameRoundRect( &rect , int(radius * 2) , int(radius * 2) ) ; }; } @@ -730,7 +708,7 @@ void wxDC::DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height) { if (!Ok()) return; - MacVerifySetup() ; + wxMacPortSetter helper(this) ; long xx = XLOG2DEV(x); long yy = YLOG2DEV(y); @@ -769,171 +747,6 @@ void wxDC::DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height) }; } -// ----------------------------------- spline code ---------------------------------------- - -static void wx_quadratic_spline(double a1, double b1, double a2, double b2, - double a3, double b3, double a4, double b4); -static void wx_clear_stack(void); -static int wx_spline_pop(double *x1, double *y1, double *x2, double *y2, double *x3, - double *y3, double *x4, double *y4); -static void wx_spline_push(double x1, double y1, double x2, double y2, double x3, double y3, - double x4, double y4); -static bool wx_spline_add_point(double x, double y); -static void wx_spline_draw_point_array(wxDC *dc); - -static wxList wx_spline_point_list; - -#define half(z1, z2) ((z1+z2)/2.0) -#define THRESHOLD 5 - -/* iterative version */ - -static void wx_quadratic_spline(double a1, double b1, double a2, double b2, double a3, double b3, double a4, - double b4) -{ - register double xmid, ymid; - double x1, y1, x2, y2, x3, y3, x4, y4; - - wx_clear_stack(); - wx_spline_push(a1, b1, a2, b2, a3, b3, a4, b4); - - while (wx_spline_pop(&x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4)) { - xmid = (double)half(x2, x3); - ymid = (double)half(y2, y3); - if (fabs(x1 - xmid) < THRESHOLD && fabs(y1 - ymid) < THRESHOLD && - fabs(xmid - x4) < THRESHOLD && fabs(ymid - y4) < THRESHOLD) { - wx_spline_add_point( x1, y1 ); - wx_spline_add_point( xmid, ymid ); - } else { - wx_spline_push(xmid, ymid, (double)half(xmid, x3), (double)half(ymid, y3), - (double)half(x3, x4), (double)half(y3, y4), x4, y4); - wx_spline_push(x1, y1, (double)half(x1, x2), (double)half(y1, y2), - (double)half(x2, xmid), (double)half(y2, ymid), xmid, ymid); - } - } -} - -/* utilities used by spline drawing routines */ - -typedef struct wx_spline_stack_struct { - double x1, y1, x2, y2, x3, y3, x4, y4; -} Stack; - -#define SPLINE_STACK_DEPTH 20 -static Stack wx_spline_stack[SPLINE_STACK_DEPTH]; -static Stack *wx_stack_top; -static int wx_stack_count; - -static void wx_clear_stack(void) -{ - wx_stack_top = wx_spline_stack; - wx_stack_count = 0; -} - -static void wx_spline_push(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) -{ - wx_stack_top->x1 = x1; - wx_stack_top->y1 = y1; - wx_stack_top->x2 = x2; - wx_stack_top->y2 = y2; - wx_stack_top->x3 = x3; - wx_stack_top->y3 = y3; - wx_stack_top->x4 = x4; - wx_stack_top->y4 = y4; - wx_stack_top++; - wx_stack_count++; -} - -static int wx_spline_pop(double *x1, double *y1, double *x2, double *y2, - double *x3, double *y3, double *x4, double *y4) -{ - if (wx_stack_count == 0) - return (0); - wx_stack_top--; - wx_stack_count--; - *x1 = wx_stack_top->x1; - *y1 = wx_stack_top->y1; - *x2 = wx_stack_top->x2; - *y2 = wx_stack_top->y2; - *x3 = wx_stack_top->x3; - *y3 = wx_stack_top->y3; - *x4 = wx_stack_top->x4; - *y4 = wx_stack_top->y4; - return (1); -} - -static bool wx_spline_add_point(double x, double y) -{ - wxPoint *point = new wxPoint ; - point->x = (int) x; - point->y = (int) y; - wx_spline_point_list.Append((wxObject*)point); - return TRUE; -} - -static void wx_spline_draw_point_array(wxDC *dc) -{ - dc->DrawLines(&wx_spline_point_list, 0, 0 ); - wxNode *node = wx_spline_point_list.First(); - while (node) - { - wxPoint *point = (wxPoint *)node->Data(); - delete point; - delete node; - node = wx_spline_point_list.First(); - } -} - -void wxDC::DoDrawSpline(wxList *points) -{ - wxPoint *p; - double cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4; - double x1, y1, x2, y2; - - wxNode *node = points->First(); - p = (wxPoint *)node->Data(); - - x1 = p->x; - y1 = p->y; - - node = node->Next(); - p = (wxPoint *)node->Data(); - - x2 = p->x; - y2 = p->y; - cx1 = (double)((x1 + x2) / 2); - cy1 = (double)((y1 + y2) / 2); - cx2 = (double)((cx1 + x2) / 2); - cy2 = (double)((cy1 + y2) / 2); - - wx_spline_add_point(x1, y1); - - while ((node = node->Next()) != NULL) - { - p = (wxPoint *)node->Data(); - x1 = x2; - y1 = y2; - x2 = p->x; - y2 = p->y; - cx4 = (double)(x1 + x2) / 2; - cy4 = (double)(y1 + y2) / 2; - cx3 = (double)(x1 + cx4) / 2; - cy3 = (double)(y1 + cy4) / 2; - - wx_quadratic_spline(cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4); - - cx1 = cx4; - cy1 = cy4; - cx2 = (double)(cx1 + x2) / 2; - cy2 = (double)(cy1 + y2) / 2; - } - - wx_spline_add_point( cx1, cy1 ); - wx_spline_add_point( x2, y2 ); - - wx_spline_draw_point_array( this ); -} - bool wxDC::CanDrawBitmap(void) const @@ -946,14 +759,16 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, wxDC *source, wxCoord xsrc, wxCoord ysrc, int logical_func , bool useMask ) { if (!Ok()) return FALSE; - MacVerifySetup() ; + wxMacPortSetter helper(this) ; CGrafPtr sourcePort = (CGrafPtr) source->m_macPort ; PixMapHandle bmappixels = GetGWorldPixMap( sourcePort ) ; - RGBColor white = { 0xFFFF, 0xFFFF,0xFFFF} ; - RGBColor black = { 0,0,0} ; - RGBForeColor( &m_textForegroundColour.GetPixel() ) ; - RGBBackColor( &m_textBackgroundColour.GetPixel() ) ; + RGBColor white = { 0xFFFF, 0xFFFF,0xFFFF} ; + RGBColor black = { 0,0,0} ; + RGBColor forecolor = m_textForegroundColour.GetPixel(); + RGBColor backcolor = m_textBackgroundColour.GetPixel(); + RGBForeColor( &forecolor ) ; + RGBBackColor( &backcolor ) ; if ( LockPixels(bmappixels) ) { @@ -1015,7 +830,7 @@ void wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y) { if (!Ok()) return; - MacVerifySetup() ; + wxMacPortSetter helper(this) ; long xx = XLOG2DEV(x); long yy = YLOG2DEV(y); @@ -1095,7 +910,7 @@ void wxDC::DoGetTextExtent( const wxString &string, wxCoord *width, wxCoord *he if (!Ok()) return; - MacVerifySetup() ; + wxMacPortSetter helper(this) ; wxFont formerFont = m_font ; @@ -1177,7 +992,7 @@ wxCoord wxDC::GetCharWidth(void) const if (!Ok()) return 1; - MacVerifySetup() ; + wxMacPortSetter helper(this) ; MacInstallFont() ; @@ -1192,7 +1007,7 @@ wxCoord wxDC::GetCharHeight(void) const if (!Ok()) return 1; - MacVerifySetup() ; + wxMacPortSetter helper(this) ; MacInstallFont() ; @@ -1206,7 +1021,7 @@ void wxDC::Clear(void) { if (!Ok()) return; - MacVerifySetup() ; + wxMacPortSetter helper(this) ; Rect rect = { -32767 , -32767 , 32767 , 32767 } ; if (m_backgroundBrush.GetStyle() != wxTRANSPARENT) @@ -1220,10 +1035,9 @@ void wxDC::MacInstallFont() const { if (!Ok()) return; - MacVerifySetup() ; - if ( m_macFontInstalled ) - return ; +// if ( m_macFontInstalled ) +// return ; Pattern blackColor ; wxFontRefData * font = (wxFontRefData*) m_font.GetRefData() ; @@ -1231,15 +1045,17 @@ void wxDC::MacInstallFont() const if ( font ) { ::TextFont( font->m_macFontNum ) ; - ::TextSize( m_scaleY * font->m_macFontSize ) ; + ::TextSize( short(m_scaleY * font->m_macFontSize) ) ; ::TextFace( font->m_macFontStyle ) ; m_macFontInstalled = true ; m_macBrushInstalled = false ; m_macPenInstalled = false ; - - ::RGBForeColor(&m_textForegroundColour.GetPixel() ); - ::RGBBackColor(&m_textBackgroundColour.GetPixel() ); + + RGBColor forecolor = m_textForegroundColour.GetPixel(); + RGBColor backcolor = m_textBackgroundColour.GetPixel(); + ::RGBForeColor( &forecolor ); + ::RGBBackColor( &backcolor ); } else { @@ -1247,7 +1063,7 @@ void wxDC::MacInstallFont() const GetFNum( "\pGeneva" , &fontnum ) ; ::TextFont( fontnum ) ; - ::TextSize( m_scaleY * 10 ) ; + ::TextSize( short(m_scaleY * 10) ) ; ::TextFace( 0 ) ; // todo reset after spacing changes - or store the current spacing somewhere @@ -1255,10 +1071,12 @@ void wxDC::MacInstallFont() const m_macFontInstalled = true ; m_macBrushInstalled = false ; m_macPenInstalled = false ; - ::RGBForeColor( &(m_textForegroundColour.GetPixel()) ); - ::RGBBackColor(&m_textBackgroundColour.GetPixel() ); - } + RGBColor forecolor = m_textForegroundColour.GetPixel(); + RGBColor backcolor = m_textBackgroundColour.GetPixel(); + ::RGBForeColor( &forecolor ); + ::RGBBackColor( &backcolor ); + } short mode = patCopy ; @@ -1338,24 +1156,31 @@ void wxDC::MacInstallPen() const { if (!Ok()) return; - MacVerifySetup() ; Pattern blackColor; - if ( m_macPenInstalled ) - return ; +// if ( m_macPenInstalled ) +// return ; - ::RGBForeColor(&m_pen.GetColour().GetPixel() ); - ::RGBBackColor(&m_backgroundBrush.GetColour().GetPixel() ); + RGBColor forecolor = m_pen.GetColour().GetPixel(); + RGBColor backcolor = m_backgroundBrush.GetColour().GetPixel(); + ::RGBForeColor( &forecolor ); + ::RGBBackColor( &backcolor ); ::PenNormal() ; - int penWidth = m_pen.GetWidth(); + int penWidth = m_pen.GetWidth() * m_scaleX ; + + // null means only one pixel, at whatever resolution + if ( penWidth == 0 ) + penWidth = 1 ; ::PenSize(penWidth, penWidth); int penStyle = m_pen.GetStyle(); if (penStyle == wxSOLID) + { ::PenPat(GetQDGlobalsBlack(&blackColor)); + } else if (IS_HATCH(penStyle)) { Pattern pat ; @@ -1417,15 +1242,17 @@ void wxDC::MacInstallBrush() const { if (!Ok()) return; - MacVerifySetup() ; + Pattern blackColor, whiteColor ; - if ( m_macBrushInstalled ) - return ; +// if ( m_macBrushInstalled ) +// return ; // foreground - ::RGBForeColor(&m_brush.GetColour().GetPixel() ); - ::RGBBackColor(&m_backgroundBrush.GetColour().GetPixel() ); + RGBColor forecolor = m_brush.GetColour().GetPixel(); + RGBColor backcolor = m_backgroundBrush.GetColour().GetPixel(); + ::RGBForeColor( &forecolor ); + ::RGBBackColor( &backcolor ); int brushStyle = m_brush.GetStyle(); if (brushStyle == wxSOLID)