]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/dcclient.cpp
added operator[] for STL builds
[wxWidgets.git] / src / motif / dcclient.cpp
index 3ab64e342524e801f7422dc1868164eafbeef0dd..eef4a0aa7dba678110fe1e6775e9b992621daee8 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        dcclient.cpp
+// Name:        src/motif/dcclient.cpp
 // Purpose:     wxClientDC class
 // Author:      Julian Smart
 // Modified by:
 // Purpose:     wxClientDC class
 // Author:      Julian Smart
 // Modified by:
@@ -10,7 +10,7 @@
 /////////////////////////////////////////////////////////////////////////////
 
 /*
 /////////////////////////////////////////////////////////////////////////////
 
 /*
-  About pens, brushes, and the autoSetting flag:
+  About pens, brushes, and the m_autoSetting flag:
 
   Under X, pens and brushes control some of the same X drawing
   parameters.  Therefore, it is impossible to independently maintain
 
   Under X, pens and brushes control some of the same X drawing
   parameters.  Therefore, it is impossible to independently maintain
@@ -18,9 +18,9 @@
   the current logical function. The m_currentFill, etc. instance
   variables remember state across the brush and pen.
 
   the current logical function. The m_currentFill, etc. instance
   variables remember state across the brush and pen.
 
-  Since pens are used more than brushes, the autoSetting flag is used to
+  Since pens are used more than brushes, the m_autoSetting flag is used to
   indicate that a brush was recently used, and SetPen must be called to
   indicate that a brush was recently used, and SetPen must be called to
-  reinstall the current pen's parameters. If autoSetting includes 0x2, then the
+  reinstall the current pen's parameters. If m_autoSetting includes 0x2, then the
   pens color may need to be set based on XOR.
 
   There is, unfortunately, some confusion between setting the current pen/brush
   pens color may need to be set based on XOR.
 
   There is, unfortunately, some confusion between setting the current pen/brush
 // headers
 // ----------------------------------------------------------------------------
 
 // headers
 // ----------------------------------------------------------------------------
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma implementation "dcclient.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #include "wx/dcclient.h"
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #include "wx/dcclient.h"
+
+#ifndef WX_PRECOMP
+    #include "wx/log.h"
+    #include "wx/app.h"
+    #include "wx/window.h"
+#endif
+
 #include "wx/dcmemory.h"
 #include "wx/dcmemory.h"
-#include "wx/window.h"
-#include "wx/app.h"
 #include "wx/image.h"
 #include "wx/image.h"
-#include "wx/log.h"
 #include "wx/math.h"
 
 #ifdef __VMS__
 #include "wx/math.h"
 
 #ifdef __VMS__
@@ -153,7 +153,6 @@ void wxWindowDC::Init()
     m_display = (WXDisplay*) NULL;
     m_pixmap = (WXPixmap) 0;
     m_autoSetting = 0;
     m_display = (WXDisplay*) NULL;
     m_pixmap = (WXPixmap) 0;
     m_autoSetting = 0;
-    m_oldFont = (WXFont) 0;
     m_ok = false;
     m_clipRegion = (WXRegion) 0;
 }
     m_ok = false;
     m_clipRegion = (WXRegion) 0;
 }
@@ -199,24 +198,11 @@ wxWindowDC::wxWindowDC( wxWindow *window )
 
     m_backgroundPixel = (int) gcvalues.background;
 
 
     m_backgroundPixel = (int) gcvalues.background;
 
-    // Get the current Font so we can set it back later
-    XGCValues valReturn;
-    XGetGCValues((Display*) m_display, (GC) m_gc, GCFont, &valReturn);
-    m_oldFont = (WXFont) valReturn.font;
-
     SetBackground(wxBrush(m_window->GetBackgroundColour(), wxSOLID));
 }
 
 wxWindowDC::~wxWindowDC()
 {
     SetBackground(wxBrush(m_window->GetBackgroundColour(), wxSOLID));
 }
 
 wxWindowDC::~wxWindowDC()
 {
-    if (m_gc && m_oldFont)
-    {
-        XSetFont ((Display*) m_display, (GC) m_gc, (Font) m_oldFont);
-
-        if (m_window && m_window->GetBackingPixmap())
-            XSetFont ((Display*) m_display,(GC) m_gcBacking, (Font) m_oldFont);
-    }
-
     if (m_gc)
         XFreeGC ((Display*) m_display, (GC) m_gc);
     m_gc = (WXGC) 0;
     if (m_gc)
         XFreeGC ((Display*) m_display, (GC) m_gc);
     m_gc = (WXGC) 0;
@@ -461,8 +447,8 @@ void wxWindowDC::DoDrawLines( int n, wxPoint points[], wxCoord xoffset, wxCoord
 
         for (i = 0; i < n; i++)
         {
 
         for (i = 0; i < n; i++)
         {
-            xpoints[i].x = XLOG2DEV (points[i].x + xoffset);
-            xpoints[i].y = YLOG2DEV (points[i].y + yoffset);
+            xpoints[i].x = (short)XLOG2DEV (points[i].x + xoffset);
+            xpoints[i].y = (short)YLOG2DEV (points[i].y + yoffset);
         }
         XDrawLines ((Display*) m_display, (Pixmap) m_pixmap, (GC) m_gc, xpoints, n, 0);
 
         }
         XDrawLines ((Display*) m_display, (Pixmap) m_pixmap, (GC) m_gc, xpoints, n, 0);
 
@@ -470,8 +456,8 @@ void wxWindowDC::DoDrawLines( int n, wxPoint points[], wxCoord xoffset, wxCoord
         {
             for (i = 0; i < n; i++)
             {
         {
             for (i = 0; i < n; i++)
             {
-                xpoints[i].x = XLOG2DEV_2 (points[i].x + xoffset);
-                xpoints[i].y = YLOG2DEV_2 (points[i].y + yoffset);
+                xpoints[i].x = (short)XLOG2DEV_2 (points[i].x + xoffset);
+                xpoints[i].y = (short)YLOG2DEV_2 (points[i].y + yoffset);
             }
             XDrawLines ((Display*) m_display, (Pixmap) m_window->GetBackingPixmap(),(GC) m_gcBacking, xpoints, n, 0);
         }
             }
             XDrawLines ((Display*) m_display, (Pixmap) m_window->GetBackingPixmap(),(GC) m_gcBacking, xpoints, n, 0);
         }
@@ -489,10 +475,10 @@ void wxWindowDC::DoDrawPolygon( int n, wxPoint points[],
     int i;
     for (i = 0; i < n; i++)
     {
     int i;
     for (i = 0; i < n; i++)
     {
-        xpoints1[i].x = XLOG2DEV (points[i].x + xoffset);
-        xpoints1[i].y = YLOG2DEV (points[i].y + yoffset);
-        xpoints2[i].x = XLOG2DEV_2 (points[i].x + xoffset);
-        xpoints2[i].y = YLOG2DEV_2 (points[i].y + yoffset);
+        xpoints1[i].x = (short)XLOG2DEV (points[i].x + xoffset);
+        xpoints1[i].y = (short)YLOG2DEV (points[i].y + yoffset);
+        xpoints2[i].x = (short)XLOG2DEV_2 (points[i].x + xoffset);
+        xpoints2[i].y = (short)YLOG2DEV_2 (points[i].y + yoffset);
         CalcBoundingBox (points[i].x + xoffset, points[i].y + yoffset);
     }
 
         CalcBoundingBox (points[i].x + xoffset, points[i].y + yoffset);
     }
 
@@ -1337,7 +1323,7 @@ wxCoord wxWindowDC::GetCharWidth() const
 {
     wxCHECK_MSG( Ok(), 0, "invalid dc" );
     wxCHECK_MSG( m_font.Ok(), 0, "invalid font" );
 {
     wxCHECK_MSG( Ok(), 0, "invalid dc" );
     wxCHECK_MSG( m_font.Ok(), 0, "invalid font" );
-    
+
     int width;
 
     wxGetTextExtent (m_display, m_font, m_userScaleY * m_logicalScaleY,
     int width;
 
     wxGetTextExtent (m_display, m_font, m_userScaleY * m_logicalScaleY,
@@ -1415,13 +1401,6 @@ void wxWindowDC::SetFont( const wxFont &font )
 
     if (!m_font.Ok())
     {
 
     if (!m_font.Ok())
     {
-        if (m_oldFont)
-        {
-            XSetFont ((Display*) m_display, (GC) m_gc, (Font) m_oldFont);
-
-            if (m_window && m_window->GetBackingPixmap())
-                XSetFont ((Display*) m_display,(GC) m_gcBacking, (Font) m_oldFont);
-        }
         return;
     }
 
         return;
     }
 
@@ -1603,7 +1582,7 @@ void wxWindowDC::SetPen( const wxPen &pen )
             {
                 int factor = scaled_width == 0 ? 1 : scaled_width;
                 for (int i = 0; i < req_nb_dash; i++)
             {
                 int factor = scaled_width == 0 ? 1 : scaled_width;
                 for (int i = 0; i < req_nb_dash; i++)
-                    real_req_dash[i] = req_dash[i] * factor;
+                    real_req_dash[i] = (wxX11Dash)(req_dash[i] * factor);
                 XSetDashes ((Display*) m_display, (GC) m_gc, 0, real_req_dash, req_nb_dash);
 
                 if (m_window && m_window->GetBackingPixmap())
                 XSetDashes ((Display*) m_display, (GC) m_gc, 0, real_req_dash, req_nb_dash);
 
                 if (m_window && m_window->GetBackingPixmap())
@@ -2097,10 +2076,10 @@ void wxWindowDC::DoSetClippingRegion( wxCoord x, wxCoord y,
     if (m_window && m_window->GetBackingPixmap())
     {
         XRectangle rects[1];
     if (m_window && m_window->GetBackingPixmap())
     {
         XRectangle rects[1];
-        rects[0].x = XLOG2DEV_2(x);
-        rects[0].y = YLOG2DEV_2(y);
-        rects[0].width = XLOG2DEVREL(width);
-        rects[0].height = YLOG2DEVREL(height);
+        rects[0].x = (short)XLOG2DEV_2(x);
+        rects[0].y = (short)YLOG2DEV_2(y);
+        rects[0].width = (unsigned short)XLOG2DEVREL(width);
+        rects[0].height = (unsigned short)YLOG2DEVREL(height);
         XSetClipRectangles((Display*) m_display, (GC) m_gcBacking,
                            0, 0, rects, 1, Unsorted);
     }
         XSetClipRectangles((Display*) m_display, (GC) m_gcBacking,
                            0, 0, rects, 1, Unsorted);
     }
@@ -2119,10 +2098,10 @@ void wxWindowDC::DoSetClippingRegionAsRegion( const wxRegion& region )
     if (m_window && m_window->GetBackingPixmap())
     {
         XRectangle rects[1];
     if (m_window && m_window->GetBackingPixmap())
     {
         XRectangle rects[1];
-        rects[0].x = XLOG2DEV_2(box.x);
-        rects[0].y = YLOG2DEV_2(box.y);
-        rects[0].width = XLOG2DEVREL(box.width);
-        rects[0].height = YLOG2DEVREL(box.height);
+        rects[0].x = (short)XLOG2DEV_2(box.x);
+        rects[0].y = (short)YLOG2DEV_2(box.y);
+        rects[0].width = (unsigned short)XLOG2DEVREL(box.width);
+        rects[0].height = (unsigned short)YLOG2DEVREL(box.height);
         XSetClipRectangles((Display*) m_display, (GC) m_gcBacking,
                            0, 0, rects, 1, Unsorted);
     }
         XSetClipRectangles((Display*) m_display, (GC) m_gcBacking,
                            0, 0, rects, 1, Unsorted);
     }