]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/dcclient.cpp
fixed crash introduced by recently applied autowidth patch (patch 1171455)
[wxWidgets.git] / src / motif / dcclient.cpp
index 3a5619cd9a85f2f253e9465205ef51594d28e74a..f1e09cb97f52be0599908c55d15b11a3b0de5734 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     01/02/97
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart
 // Created:     01/02/97
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart
-// Licence:     wxWidgets licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 /*
 /////////////////////////////////////////////////////////////////////////////
 
 /*
@@ -49,8 +49,7 @@
 #include "wx/app.h"
 #include "wx/image.h"
 #include "wx/log.h"
 #include "wx/app.h"
 #include "wx/image.h"
 #include "wx/log.h"
-
-#include <math.h>
+#include "wx/math.h"
 
 #ifdef __VMS__
 #pragma message disable nosimpint
 
 #ifdef __VMS__
 #pragma message disable nosimpint
@@ -86,9 +85,18 @@ static Pixmap bdiag, cdiag, fdiag, cross, horiz, verti;
 // macros
 // ----------------------------------------------------------------------------
 
 // macros
 // ----------------------------------------------------------------------------
 
-    IMPLEMENT_DYNAMIC_CLASS(wxClientDC, wxWindowDC)
-    IMPLEMENT_DYNAMIC_CLASS(wxPaintDC, wxWindowDC)
-    IMPLEMENT_DYNAMIC_CLASS(wxWindowDC, wxDC)
+IMPLEMENT_DYNAMIC_CLASS(wxClientDC, wxWindowDC)
+IMPLEMENT_DYNAMIC_CLASS(wxPaintDC, wxWindowDC)
+IMPLEMENT_DYNAMIC_CLASS(wxWindowDC, wxDC)
+
+#ifndef IS_HATCH
+    // IS_HATCH exists for WXWIN_COMPATIBILITY_2_4 only
+    // but wxMotif needs it for its internals here
+    #define IS_HATCH(s)    ((s)>=wxFIRST_HATCH && (s)<=wxLAST_HATCH)
+#endif
+
+// FIXME: left over after removal of wxDC::GetOptimization()
+#define GET_OPTIMIZATION false
 
 // ----------------------------------------------------------------------------
 // prototypes
 
 // ----------------------------------------------------------------------------
 // prototypes
@@ -163,7 +171,7 @@ wxWindowDC::wxWindowDC( wxWindow *window )
 
     m_window = window;
     m_font = window->GetFont();
 
     m_window = window;
     m_font = window->GetFont();
-    m_ok = TRUE;
+    m_ok = true;
 
     m_display = window->GetXDisplay();
     m_pixmap = window->GetXWindow();
 
     m_display = window->GetXDisplay();
     m_pixmap = window->GetXWindow();
@@ -222,7 +230,7 @@ wxWindowDC::~wxWindowDC()
     m_clipRegion = (WXRegion) 0;
 }
 
     m_clipRegion = (WXRegion) 0;
 }
 
-extern bool wxDoFloodFill(wxDC *dc, wxCoord x, wxCoord y, 
+extern bool wxDoFloodFill(wxDC *dc, wxCoord x, wxCoord y,
                           const wxColour & col, int style);
 
 bool wxWindowDC::DoFloodFill(wxCoord x, wxCoord y,
                           const wxColour & col, int style);
 
 bool wxWindowDC::DoFloodFill(wxCoord x, wxCoord y,
@@ -230,7 +238,7 @@ bool wxWindowDC::DoFloodFill(wxCoord x, wxCoord y,
 {
     return wxDoFloodFill(this, x, y, col, style);
 }
 {
     return wxDoFloodFill(this, x, y, col, style);
 }
-  
+
 bool wxWindowDC::DoGetPixel( wxCoord x1, wxCoord y1, wxColour *col ) const
 {
     // Generic (and therefore rather inefficient) method.
 bool wxWindowDC::DoGetPixel( wxCoord x1, wxCoord y1, wxColour *col ) const
 {
     // Generic (and therefore rather inefficient) method.
@@ -242,7 +250,7 @@ bool wxWindowDC::DoGetPixel( wxCoord x1, wxCoord y1, wxColour *col ) const
     memdc.SelectObject(wxNullBitmap);
     wxImage image = bitmap.ConvertToImage();
     col->Set(image.GetRed(0, 0), image.GetGreen(0, 0), image.GetBlue(0, 0));
     memdc.SelectObject(wxNullBitmap);
     wxImage image = bitmap.ConvertToImage();
     col->Set(image.GetRed(0, 0), image.GetGreen(0, 0), image.GetBlue(0, 0));
-    return TRUE;
+    return true;
 }
 
 void wxWindowDC::DoDrawLine( wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2 )
 }
 
 void wxWindowDC::DoDrawLine( wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2 )
@@ -402,7 +410,7 @@ void wxWindowDC::DoDrawEllipticArc( wxCoord x, wxCoord y, wxCoord width, wxCoord
 
     if (m_brush.Ok() && m_brush.GetStyle () != wxTRANSPARENT)
     {
 
     if (m_brush.Ok() && m_brush.GetStyle () != wxTRANSPARENT)
     {
-        m_autoSetting = TRUE;    // must be reset
+        m_autoSetting = true;    // must be reset
 
         SetBrush (m_brush);
         XFillArc ((Display*) m_display, (Pixmap) m_pixmap, (GC) m_gc, xd, yd, wd, hd, start, end);
 
         SetBrush (m_brush);
         XFillArc ((Display*) m_display, (Pixmap) m_pixmap, (GC) m_gc, xd, yd, wd, hd, start, end);
@@ -781,12 +789,12 @@ void wxWindowDC::DoDrawEllipse( wxCoord x, wxCoord y, wxCoord width, wxCoord hei
 
 bool wxWindowDC::CanDrawBitmap() const
 {
 
 bool wxWindowDC::CanDrawBitmap() const
 {
-    wxCHECK_MSG( Ok(), FALSE, "invalid dc" );
+    wxCHECK_MSG( Ok(), false, "invalid dc" );
 
 
-    return TRUE;
+    return true;
 }
 
 }
 
-// TODO: use scaled Blit e.g. as per John Price's implementation 
+// TODO: use scaled Blit e.g. as per John Price's implementation
 // in Contrib/Utilities
 bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest,
                          wxCoord width, wxCoord height,
 // in Contrib/Utilities
 bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest,
                          wxCoord width, wxCoord height,
@@ -794,7 +802,7 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest,
                          int rop, bool useMask,
                          wxCoord xsrcMask, wxCoord ysrcMask )
 {
                          int rop, bool useMask,
                          wxCoord xsrcMask, wxCoord ysrcMask )
 {
-    wxCHECK_MSG( Ok(), FALSE, "invalid dc" );
+    wxCHECK_MSG( Ok(), false, "invalid dc" );
 
     wxWindowDC* sourceDC = wxDynamicCast(source, wxWindowDC);
 
 
     wxWindowDC* sourceDC = wxDynamicCast(source, wxWindowDC);
 
@@ -823,8 +831,8 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest,
 
         if( m_textForegroundColour.GetPixel() <= -1 )
             CalculatePixel( m_textForegroundColour,
 
         if( m_textForegroundColour.GetPixel() <= -1 )
             CalculatePixel( m_textForegroundColour,
-                            m_textForegroundColour, TRUE);
+                            m_textForegroundColour, true);
+
         int pixel = m_textForegroundColour.GetPixel();
         if (pixel > -1)
             SetForegroundPixelWithLogicalFunction(pixel);
         int pixel = m_textForegroundColour.GetPixel();
         if (pixel > -1)
             SetForegroundPixelWithLogicalFunction(pixel);
@@ -836,7 +844,7 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest,
     Pixmap sourcePixmap = (Pixmap) NULL;
     double scaleX, scaleY;
     GetUserScale(& scaleX, & scaleY);
     Pixmap sourcePixmap = (Pixmap) NULL;
     double scaleX, scaleY;
     GetUserScale(& scaleX, & scaleY);
-    bool retVal = FALSE;
+    bool retVal = false;
 
     /* TODO: use the mask origin when drawing transparently */
     if (xsrcMask == -1 && ysrcMask == -1)
 
     /* TODO: use the mask origin when drawing transparently */
     if (xsrcMask == -1 && ysrcMask == -1)
@@ -890,7 +898,7 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest,
                 source->LogicalToDeviceXRel(width),
                 source->LogicalToDeviceYRel(height),
                 XLOG2DEV_2 (xdest), YLOG2DEV_2 (ydest),
                 source->LogicalToDeviceXRel(width),
                 source->LogicalToDeviceYRel(height),
                 XLOG2DEV_2 (xdest), YLOG2DEV_2 (ydest),
-                TRUE, &cache);
+                True, &cache);
 
             if ( useMask && source->IsKindOf(CLASSINFO(wxMemoryDC)) )
             {
 
             if ( useMask && source->IsKindOf(CLASSINFO(wxMemoryDC)) )
             {
@@ -909,7 +917,7 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest,
                 source->LogicalToDeviceXRel(width),
                 source->LogicalToDeviceYRel(height),
                 XLOG2DEV (xdest), YLOG2DEV (ydest),
                 source->LogicalToDeviceXRel(width),
                 source->LogicalToDeviceYRel(height),
                 XLOG2DEV (xdest), YLOG2DEV (ydest),
-                FALSE, &cache);
+                False, &cache);
 
             if ( useMask )
             {
 
             if ( useMask )
             {
@@ -924,7 +932,7 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest,
 
         } else
         {        //XGCValues values;
 
         } else
         {        //XGCValues values;
-        //XGetGCValues((Display*)m_display, (GC)m_gc, GCForeground, &values);   
+        //XGetGCValues((Display*)m_display, (GC)m_gc, GCForeground, &values);
 
             if (m_window && m_window->GetBackingPixmap())
             {
 
             if (m_window && m_window->GetBackingPixmap())
             {
@@ -997,7 +1005,7 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest,
 
         SetLogicalFunction(orig);
 
 
         SetLogicalFunction(orig);
 
-        retVal = TRUE;
+        retVal = true;
   }
   if (scaledBitmap) delete scaledBitmap;
 
   }
   if (scaledBitmap) delete scaledBitmap;
 
@@ -1079,7 +1087,7 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
         sameColour = (sameColour &&
             (oldPenColour.GetPixel() == m_textBackgroundColour.GetPixel()));
 
         sameColour = (sameColour &&
             (oldPenColour.GetPixel() == m_textBackgroundColour.GetPixel()));
 
-        if (!sameColour || !GetOptimization())
+        if (!sameColour || !GET_OPTIMIZATION)
         {
             int pixel = m_textBackgroundColour.AllocColour(m_display);
             m_currentColour = m_textBackgroundColour;
         {
             int pixel = m_textBackgroundColour.AllocColour(m_display);
             m_currentColour = m_textBackgroundColour;
@@ -1112,10 +1120,10 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
             (oldPenColour.Green () == m_currentColour.Green ()) &&
             (oldPenColour.GetPixel() == m_currentColour.GetPixel()));
 
             (oldPenColour.Green () == m_currentColour.Green ()) &&
             (oldPenColour.GetPixel() == m_currentColour.GetPixel()));
 
-        if (!sameColour || !GetOptimization())
+        if (!sameColour || !GET_OPTIMIZATION)
         {
             int pixel = CalculatePixel(m_textForegroundColour,
         {
             int pixel = CalculatePixel(m_textForegroundColour,
-                                       m_currentColour, FALSE);
+                                       m_currentColour, false);
 
             // Set the GC to the required colour
             if (pixel > -1)
 
             // Set the GC to the required colour
             if (pixel > -1)
@@ -1191,8 +1199,8 @@ void wxWindowDC::DoDrawRotatedText( const wxString &text, wxCoord x, wxCoord y,
 
         if( m_textForegroundColour.GetPixel() <= -1 )
             CalculatePixel( m_textForegroundColour,
 
         if( m_textForegroundColour.GetPixel() <= -1 )
             CalculatePixel( m_textForegroundColour,
-                            m_textForegroundColour, TRUE);
+                            m_textForegroundColour, true);
+
         foregroundPixel = m_textForegroundColour.GetPixel();
     }
 
         foregroundPixel = m_textForegroundColour.GetPixel();
     }
 
@@ -1323,7 +1331,7 @@ void wxWindowDC::DoDrawRotatedText( const wxString &text, wxCoord x, wxCoord y,
 
 bool wxWindowDC::CanGetTextExtent() const
 {
 
 bool wxWindowDC::CanGetTextExtent() const
 {
-    return TRUE;
+    return true;
 }
 
 void wxWindowDC::DoGetTextExtent( const wxString &string, wxCoord *width, wxCoord *height,
 }
 
 void wxWindowDC::DoGetTextExtent( const wxString &string, wxCoord *width, wxCoord *height,
@@ -1429,7 +1437,7 @@ void wxWindowDC::Clear()
 {
     wxCHECK_RET( Ok(), "invalid dc" );
 
 {
     wxCHECK_RET( Ok(), "invalid dc" );
 
-    wxRect rect( wxPoint( 0, 0 ), GetSize() );
+    wxRect rect( GetSize() );
     Clear( rect );
 }
 
     Clear( rect );
 }
 
@@ -1505,7 +1513,7 @@ int wxWindowDC::CalculatePixel(wxColour& colour, wxColour& curCol,
                                bool roundToWhite) const
 {
     const unsigned char wp = (unsigned char)255;
                                bool roundToWhite) const
 {
     const unsigned char wp = (unsigned char)255;
-        
+
     int pixel = -1;
     if(!m_colour) // Mono display
     {
     int pixel = -1;
     if(!m_colour) // Mono display
     {
@@ -1586,7 +1594,7 @@ void wxWindowDC::SetPen( const wxPen &pen )
         (oldPenColour.Green () == m_currentColour.Green ()) &&
         (oldPenColour.GetPixel() == m_currentColour.GetPixel()));
 
         (oldPenColour.Green () == m_currentColour.Green ()) &&
         (oldPenColour.GetPixel() == m_currentColour.GetPixel()));
 
-    if (!sameStyle || !GetOptimization())
+    if (!sameStyle || !GET_OPTIMIZATION)
     {
         int scaled_width = (int) XLOG2DEVREL (m_pen.GetWidth ());
         if (scaled_width < 0)
     {
         int scaled_width = (int) XLOG2DEVREL (m_pen.GetWidth ());
         if (scaled_width < 0)
@@ -1699,7 +1707,7 @@ void wxWindowDC::SetPen( const wxPen &pen )
             XSetLineAttributes ((Display*) m_display,(GC) m_gcBacking, scaled_width, style, cap, join);
     }
 
             XSetLineAttributes ((Display*) m_display,(GC) m_gcBacking, scaled_width, style, cap, join);
     }
 
-    if (IS_HATCH(m_currentFill) && ((m_currentFill != oldFill) || !GetOptimization()))
+    if (IS_HATCH(m_currentFill) && ((m_currentFill != oldFill) || !GET_OPTIMIZATION))
     {
         Pixmap myStipple;
 
     {
         Pixmap myStipple;
 
@@ -1757,7 +1765,7 @@ void wxWindowDC::SetPen( const wxPen &pen )
             XSetStipple ((Display*) m_display,(GC) m_gcBacking, myStipple);
     }
     else if (m_currentStipple.Ok()
             XSetStipple ((Display*) m_display,(GC) m_gcBacking, myStipple);
     }
     else if (m_currentStipple.Ok()
-        && ((m_currentStipple != oldStipple) || !GetOptimization()))
+        && ((m_currentStipple != oldStipple) || !GET_OPTIMIZATION))
     {
         XSetStipple ((Display*) m_display, (GC) m_gc, (Pixmap) m_currentStipple.GetDrawable());
 
     {
         XSetStipple ((Display*) m_display, (GC) m_gc, (Pixmap) m_currentStipple.GetDrawable());
 
@@ -1765,7 +1773,7 @@ void wxWindowDC::SetPen( const wxPen &pen )
             XSetStipple ((Display*) m_display,(GC) m_gcBacking, (Pixmap) m_currentStipple.GetDrawable());
     }
 
             XSetStipple ((Display*) m_display,(GC) m_gcBacking, (Pixmap) m_currentStipple.GetDrawable());
     }
 
-    if ((m_currentFill != oldFill) || !GetOptimization())
+    if ((m_currentFill != oldFill) || !GET_OPTIMIZATION)
     {
         int fill_style;
 
     {
         int fill_style;
 
@@ -1781,7 +1789,7 @@ void wxWindowDC::SetPen( const wxPen &pen )
     }
 
     // must test m_logicalFunction, because it involves background!
     }
 
     // must test m_logicalFunction, because it involves background!
-    if (!sameColour || !GetOptimization()
+    if (!sameColour || !GET_OPTIMIZATION
         || ((m_logicalFunction == wxXOR) || (m_autoSetting & 0x2)))
     {
         int pixel = -1;
         || ((m_logicalFunction == wxXOR) || (m_autoSetting & 0x2)))
     {
         int pixel = -1;
@@ -1789,7 +1797,7 @@ void wxWindowDC::SetPen( const wxPen &pen )
             pixel = m_backgroundPixel;
         else
         {
             pixel = m_backgroundPixel;
         else
         {
-            pixel = CalculatePixel(m_pen.GetColour(), m_currentColour, FALSE);
+            pixel = CalculatePixel(m_pen.GetColour(), m_currentColour, false);
         }
 
         // Finally, set the GC to the required colour
         }
 
         // Finally, set the GC to the required colour
@@ -1831,7 +1839,7 @@ void wxWindowDC::SetBrush( const wxBrush &brush )
 
     int stippleDepth = -1;
 
 
     int stippleDepth = -1;
 
-    if ((oldFill != m_brush.GetStyle ()) || !GetOptimization())
+    if ((oldFill != m_brush.GetStyle ()) || !GET_OPTIMIZATION)
     {
         switch (brush.GetStyle ())
         {
     {
         switch (brush.GetStyle ())
         {
@@ -1853,7 +1861,7 @@ void wxWindowDC::SetBrush( const wxBrush &brush )
                 // determine whether fill style should be solid or
                 // transparent
                 int style = stippleDepth == 1 ?
                 // determine whether fill style should be solid or
                 // transparent
                 int style = stippleDepth == 1 ?
-                    (m_backgroundMode == wxSOLID ? 
+                    (m_backgroundMode == wxSOLID ?
                      FillOpaqueStippled : FillStippled) :
                     FillTiled;
                 XSetFillStyle ((Display*) m_display, (GC) m_gc, style);
                      FillOpaqueStippled : FillStippled) :
                     FillTiled;
                 XSetFillStyle ((Display*) m_display, (GC) m_gc, style);
@@ -1870,7 +1878,7 @@ void wxWindowDC::SetBrush( const wxBrush &brush )
         }
     }
 
         }
     }
 
-    if (IS_HATCH(m_currentFill) && ((m_currentFill != oldFill) || !GetOptimization()))
+    if (IS_HATCH(m_currentFill) && ((m_currentFill != oldFill) || !GET_OPTIMIZATION))
     {
         Pixmap myStipple;
 
     {
         Pixmap myStipple;
 
@@ -1949,10 +1957,10 @@ void wxWindowDC::SetBrush( const wxBrush &brush )
     }
 
     // must test m_logicalFunction, because it involves background!
     }
 
     // must test m_logicalFunction, because it involves background!
-    if (!sameColour || !GetOptimization() || m_logicalFunction == wxXOR)
+    if (!sameColour || !GET_OPTIMIZATION || m_logicalFunction == wxXOR)
     {
     {
-        int pixel = CalculatePixel(m_brush.GetColour(), m_currentColour, TRUE);
+        int pixel = CalculatePixel(m_brush.GetColour(), m_currentColour, true);
+
         if (pixel > -1)
             SetForegroundPixelWithLogicalFunction(pixel);
     }
         if (pixel > -1)
             SetForegroundPixelWithLogicalFunction(pixel);
     }
@@ -2207,7 +2215,7 @@ int wxWindowDC::GetDepth() const
 wxPaintDC::wxPaintDC(wxWindow* win) : wxWindowDC(win)
 {
     // Set the clipping region.to the update region
 wxPaintDC::wxPaintDC(wxWindow* win) : wxWindowDC(win)
 {
     // Set the clipping region.to the update region
-    SetDCClipping((WXRegion)NULL);   
+    SetDCClipping((WXRegion)NULL);
 }
 
 wxPaintDC::~wxPaintDC()
 }
 
 wxPaintDC::~wxPaintDC()
@@ -2253,7 +2261,7 @@ static void XCopyRemote(Display *src_display, Display *dest_display,
     destcm = (Colormap) wxTheApp->GetMainColormap((WXDisplay*) dest_display);
 
     cache_pos = 0;
     destcm = (Colormap) wxTheApp->GetMainColormap((WXDisplay*) dest_display);
 
     cache_pos = 0;
-    all_cache = FALSE;
+    all_cache = False;
 
     for (i = 0; i < w; i++)
         for (j = 0; j < h; j++) {
 
     for (i = 0; i < w; i++)
         for (j = 0; j < h; j++) {
@@ -2281,7 +2289,7 @@ static void XCopyRemote(Display *src_display, Display *dest_display,
 
                         if (++cache_pos >= CACHE_SIZE) {
                             cache_pos = 0;
 
                         if (++cache_pos >= CACHE_SIZE) {
                             cache_pos = 0;
-                            all_cache = TRUE;
+                            all_cache = true;
                         }
 
 install:
                         }
 
 install: