]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/dcclient.cpp
wxSetlocale() doesn't always return NULL
[wxWidgets.git] / src / gtk / dcclient.cpp
index 668155d07c008f2ddbd48a071c1d84a3cf2dec81..01e03030ab5d8c266698b7333a0b819ba29da57c 100644 (file)
 #include "wx/dcclient.h"
 #include "wx/dcmemory.h"
 #include "wx/image.h"
-#include <math.h>               // for floating-point functions
+#include "wx/gtk/win_gtk.h"
 
-#include "gdk/gdk.h"
-#include "gtk/gtk.h"
+#include <math.h>               // for floating-point functions
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
 
 //-----------------------------------------------------------------------------
 // local data
@@ -38,7 +39,7 @@ static GdkPixmap **hatch_bitmap = (GdkPixmap **) NULL;
 // constants
 //-----------------------------------------------------------------------------
 
-#define RAD2DEG 57.2957795131
+const double RAD2DEG  = 180.0 / M_PI;
 
 //-----------------------------------------------------------------------------
 // temporary implementation of the missing GDK function
@@ -84,6 +85,25 @@ void gdk_draw_bitmap     (GdkDrawable  *drawable,
                 1 );
 }
 
+/*
+ * compare two doubles and return the larger rounded
+ * to the nearest int
+ */
+static int roundmax(double a, double b)
+{
+    return (int)((a > b ? a : b) + 0.5);
+}
+
+/*
+ * compare two doubles and return the smaller rounded
+ * to the nearest int
+ */
+static int roundmin(double a, double b)
+{
+    return (int)((a < b ? a : b) - 0.5);
+}
+
+
 //-----------------------------------------------------------------------------
 // wxWindowDC
 //-----------------------------------------------------------------------------
@@ -118,7 +138,8 @@ wxWindowDC::wxWindowDC( wxWindow *window )
 
     wxASSERT_MSG( widget, wxT("DC needs a widget") );
 
-    m_window = widget->window;
+    GtkPizza *pizza = GTK_PIZZA( widget );
+    m_window = pizza->bin_window;
 
     /* not realized ? */
     if (!m_window)
@@ -151,19 +172,19 @@ wxWindowDC::~wxWindowDC()
     Destroy();
 }
 
-void wxWindowDC::DoFloodFill( long WXUNUSED(x), long WXUNUSED(y),
+void wxWindowDC::DoFloodFill( wxCoord WXUNUSED(x), wxCoord WXUNUSED(y),
                            const wxColour &WXUNUSED(col), int WXUNUSED(style) )
 {
     wxFAIL_MSG( wxT("wxWindowDC::DoFloodFill not implemented") );
 }
 
-bool wxWindowDC::DoGetPixel( long WXUNUSED(x1), long WXUNUSED(y1), wxColour *WXUNUSED(col) ) const
+bool wxWindowDC::DoGetPixel( wxCoord WXUNUSED(x1), wxCoord WXUNUSED(y1), wxColour *WXUNUSED(col) ) const
 {
     wxFAIL_MSG( wxT("wxWindowDC::DoGetPixel not implemented") );
     return FALSE;
 }
 
-void wxWindowDC::DoDrawLine( long x1, long y1, long x2, long y2 )
+void wxWindowDC::DoDrawLine( wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2 )
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") );
 
@@ -177,7 +198,7 @@ void wxWindowDC::DoDrawLine( long x1, long y1, long x2, long y2 )
     }
 }
 
-void wxWindowDC::DoCrossHair( long x, long y )
+void wxWindowDC::DoCrossHair( wxCoord x, wxCoord y )
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") );
 
@@ -186,8 +207,8 @@ void wxWindowDC::DoCrossHair( long x, long y )
         int w = 0;
         int h = 0;
         GetSize( &w, &h );
-        long xx = XLOG2DEV(x);
-        long yy = YLOG2DEV(y);
+        wxCoord xx = XLOG2DEV(x);
+        wxCoord yy = YLOG2DEV(y);
         if (m_window)
         {
             gdk_draw_line( m_window, m_penGC, 0, yy, XLOG2DEVREL(w), yy );
@@ -196,21 +217,21 @@ void wxWindowDC::DoCrossHair( long x, long y )
     }
 }
 
-void wxWindowDC::DoDrawArc( long x1, long y1, long x2, long y2,
-                            long xc, long yc )
+void wxWindowDC::DoDrawArc( wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2,
+                            wxCoord xc, wxCoord yc )
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") );
 
-    long xx1 = XLOG2DEV(x1);
-    long yy1 = YLOG2DEV(y1);
-    long xx2 = XLOG2DEV(x2);
-    long yy2 = YLOG2DEV(y2);
-    long xxc = XLOG2DEV(xc);
-    long yyc = YLOG2DEV(yc);
+    wxCoord xx1 = XLOG2DEV(x1);
+    wxCoord yy1 = YLOG2DEV(y1);
+    wxCoord xx2 = XLOG2DEV(x2);
+    wxCoord yy2 = YLOG2DEV(y2);
+    wxCoord xxc = XLOG2DEV(xc);
+    wxCoord yyc = YLOG2DEV(yc);
     double dx = xx1 - xxc;
     double dy = yy1 - yyc;
-    double radius = sqrt(dx*dx+dy*dy);
-    long   r      = (long)radius;
+    double radius = sqrt((double)(dx*dx+dy*dy));
+    wxCoord   r      = (wxCoord)radius;
     double radius1, radius2;
 
     if (xx1 == xx2 && yy1 == yy2)
@@ -232,8 +253,8 @@ void wxWindowDC::DoDrawArc( long x1, long y1, long x2, long y2,
             (yy2 - yyc < 0) ? 90.0 : -90.0 :
             -atan2(double(yy2-yyc), double(xx2-xxc)) * RAD2DEG;
     }
-    long alpha1 = long(radius1 * 64.0);
-    long alpha2 = long((radius2 - radius1) * 64.0);
+    wxCoord alpha1 = wxCoord(radius1 * 64.0);
+    wxCoord alpha2 = wxCoord((radius2 - radius1) * 64.0);
     while (alpha2 <= 0) alpha2 += 360*64;
     while (alpha1 > 360*64) alpha1 -= 360*64;
 
@@ -250,14 +271,14 @@ void wxWindowDC::DoDrawArc( long x1, long y1, long x2, long y2,
     CalcBoundingBox (x2, y2);
 }
 
-void wxWindowDC::DoDrawEllipticArc( long x, long y, long width, long height, double sa, double ea )
+void wxWindowDC::DoDrawEllipticArc( wxCoord x, wxCoord y, wxCoord width, wxCoord height, double sa, double ea )
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") );
 
-    long xx = XLOG2DEV(x);
-    long yy = YLOG2DEV(y);
-    long ww = m_signX * XLOG2DEVREL(width);
-    long hh = m_signY * YLOG2DEVREL(height);
+    wxCoord xx = XLOG2DEV(x);
+    wxCoord yy = YLOG2DEV(y);
+    wxCoord ww = m_signX * XLOG2DEVREL(width);
+    wxCoord hh = m_signY * YLOG2DEVREL(height);
 
     // CMB: handle -ve width and/or height
     if (ww < 0) { ww = -ww; xx = xx - ww; }
@@ -265,8 +286,8 @@ void wxWindowDC::DoDrawEllipticArc( long x, long y, long width, long height, dou
 
     if (m_window)
     {
-        long start = long(sa * 64.0);
-        long end = long(ea * 64.0);
+        wxCoord start = wxCoord(sa * 64.0);
+        wxCoord end = wxCoord(ea * 64.0);
 
         if (m_brush.GetStyle() != wxTRANSPARENT)
             gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, start, end );
@@ -279,7 +300,7 @@ void wxWindowDC::DoDrawEllipticArc( long x, long y, long width, long height, dou
     CalcBoundingBox (x + width, y + height);
 }
 
-void wxWindowDC::DoDrawPoint( long x, long y )
+void wxWindowDC::DoDrawPoint( wxCoord x, wxCoord y )
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") );
 
@@ -289,7 +310,7 @@ void wxWindowDC::DoDrawPoint( long x, long y )
     CalcBoundingBox (x, y);
 }
 
-void wxWindowDC::DoDrawLines( int n, wxPoint points[], long xoffset, long yoffset )
+void wxWindowDC::DoDrawLines( int n, wxPoint points[], wxCoord xoffset, wxCoord yoffset )
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") );
 
@@ -300,10 +321,10 @@ void wxWindowDC::DoDrawLines( int n, wxPoint points[], long xoffset, long yoffse
 
     for (int i = 0; i < n-1; i++)
     {
-        long x1 = XLOG2DEV(points[i].x + xoffset);
-        long x2 = XLOG2DEV(points[i+1].x + xoffset);
-        long y1 = YLOG2DEV(points[i].y + yoffset);     // oh, what a waste
-        long y2 = YLOG2DEV(points[i+1].y + yoffset);
+        wxCoord x1 = XLOG2DEV(points[i].x + xoffset);
+        wxCoord x2 = XLOG2DEV(points[i+1].x + xoffset);
+        wxCoord y1 = YLOG2DEV(points[i].y + yoffset);     // oh, what a waste
+        wxCoord y2 = YLOG2DEV(points[i+1].y + yoffset);
 
         if (m_window)
             gdk_draw_line( m_window, m_penGC, x1, y1, x2, y2 );
@@ -312,7 +333,7 @@ void wxWindowDC::DoDrawLines( int n, wxPoint points[], long xoffset, long yoffse
     }
 }
 
-void wxWindowDC::DoDrawPolygon( int n, wxPoint points[], long xoffset, long yoffset, int WXUNUSED(fillStyle) )
+void wxWindowDC::DoDrawPolygon( int n, wxPoint points[], wxCoord xoffset, wxCoord yoffset, int WXUNUSED(fillStyle) )
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") );
 
@@ -348,14 +369,14 @@ void wxWindowDC::DoDrawPolygon( int n, wxPoint points[], long xoffset, long yoff
     delete[] gdkpoints;
 }
 
-void wxWindowDC::DoDrawRectangle( long x, long y, long width, long height )
+void wxWindowDC::DoDrawRectangle( wxCoord x, wxCoord y, wxCoord width, wxCoord height )
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") );
 
-    long xx = XLOG2DEV(x);
-    long yy = YLOG2DEV(y);
-    long ww = m_signX * XLOG2DEVREL(width);
-    long hh = m_signY * YLOG2DEVREL(height);
+    wxCoord xx = XLOG2DEV(x);
+    wxCoord yy = YLOG2DEV(y);
+    wxCoord ww = m_signX * XLOG2DEVREL(width);
+    wxCoord hh = m_signY * YLOG2DEVREL(height);
 
     // CMB: draw nothing if transformed w or h is 0
     if (ww == 0 || hh == 0) return;
@@ -377,17 +398,17 @@ void wxWindowDC::DoDrawRectangle( long x, long y, long width, long height )
     CalcBoundingBox( x + width, y + height );
 }
 
-void wxWindowDC::DoDrawRoundedRectangle( long x, long y, long width, long height, double radius )
+void wxWindowDC::DoDrawRoundedRectangle( wxCoord x, wxCoord y, wxCoord width, wxCoord height, double radius )
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") );
 
     if (radius < 0.0) radius = - radius * ((width < height) ? width : height);
 
-    long xx = XLOG2DEV(x);
-    long yy = YLOG2DEV(y);
-    long ww = m_signX * XLOG2DEVREL(width);
-    long hh = m_signY * YLOG2DEVREL(height);
-    long rr = XLOG2DEVREL((long)radius);
+    wxCoord xx = XLOG2DEV(x);
+    wxCoord yy = YLOG2DEV(y);
+    wxCoord ww = m_signX * XLOG2DEVREL(width);
+    wxCoord hh = m_signY * YLOG2DEVREL(height);
+    wxCoord rr = XLOG2DEVREL((wxCoord)radius);
 
     // CMB: handle -ve width and/or height
     if (ww < 0) { ww = -ww; xx = xx - ww; }
@@ -416,7 +437,7 @@ void wxWindowDC::DoDrawRoundedRectangle( long x, long y, long width, long height
     {
         // CMB: ensure dd is not larger than rectangle otherwise we
         // get an hour glass shape
-        long dd = 2 * rr;
+        wxCoord dd = 2 * rr;
         if (dd > ww) dd = ww;
         if (dd > hh) dd = hh;
         rr = dd / 2;
@@ -449,14 +470,14 @@ void wxWindowDC::DoDrawRoundedRectangle( long x, long y, long width, long height
     CalcBoundingBox( x + width, y + height );
 }
 
-void wxWindowDC::DoDrawEllipse( long x, long y, long width, long height )
+void wxWindowDC::DoDrawEllipse( wxCoord x, wxCoord y, wxCoord width, wxCoord height )
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") );
 
-    long xx = XLOG2DEV(x);
-    long yy = YLOG2DEV(y);
-    long ww = m_signX * XLOG2DEVREL(width);
-    long hh = m_signY * YLOG2DEVREL(height);
+    wxCoord xx = XLOG2DEV(x);
+    wxCoord yy = YLOG2DEV(y);
+    wxCoord ww = m_signX * XLOG2DEVREL(width);
+    wxCoord hh = m_signY * YLOG2DEVREL(height);
 
     // CMB: handle -ve width and/or height
     if (ww < 0) { ww = -ww; xx = xx - ww; }
@@ -475,14 +496,14 @@ void wxWindowDC::DoDrawEllipse( long x, long y, long width, long height )
     CalcBoundingBox( x + width, y + height );
 }
 
-void wxWindowDC::DoDrawIcon( const wxIcon &icon, long x, long y )
+void wxWindowDC::DoDrawIcon( const wxIcon &icon, wxCoord x, wxCoord y )
 {
     // VZ: egcs 1.0.3 refuses to compile this without cast, no idea why
     DoDrawBitmap( (const wxBitmap&)icon, x, y, (bool)TRUE );
 }
 
 void wxWindowDC::DoDrawBitmap( const wxBitmap &bitmap,
-                               long x, long y,
+                               wxCoord x, wxCoord y,
                                bool useMask )
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") );
@@ -557,8 +578,8 @@ void wxWindowDC::DoDrawBitmap( const wxBitmap &bitmap,
     }
 }
 
-bool wxWindowDC::DoBlit( long xdest, long ydest, long width, long height,
-                         wxDC *source, long xsrc, long ysrc,
+bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
+                         wxDC *source, wxCoord xsrc, wxCoord ysrc,
                          int logical_func, bool useMask )
 {
    /* this is the nth try to get this utterly useless function to
@@ -627,11 +648,11 @@ bool wxWindowDC::DoBlit( long xdest, long ydest, long width, long height,
     {
         /* scale/translate bitmap size */
 
-        long bm_width = memDC->m_selected.GetWidth();
-        long bm_height = memDC->m_selected.GetHeight();
+        wxCoord bm_width = memDC->m_selected.GetWidth();
+        wxCoord bm_height = memDC->m_selected.GetHeight();
 
-        long bm_ww = XLOG2DEVREL( bm_width );
-        long bm_hh = YLOG2DEVREL( bm_height );
+        wxCoord bm_ww = XLOG2DEVREL( bm_width );
+        wxCoord bm_hh = YLOG2DEVREL( bm_height );
 
         /* scale bitmap if required */
 
@@ -651,11 +672,11 @@ bool wxWindowDC::DoBlit( long xdest, long ydest, long width, long height,
 
         /* scale/translate size and position */
 
-        long xx = XLOG2DEV(xdest);
-        long yy = YLOG2DEV(ydest);
+        wxCoord xx = XLOG2DEV(xdest);
+        wxCoord yy = YLOG2DEV(ydest);
 
-        long ww = XLOG2DEVREL(width);
-        long hh = YLOG2DEVREL(height);
+        wxCoord ww = XLOG2DEVREL(width);
+        wxCoord hh = YLOG2DEVREL(height);
 
         /* apply mask if any */
 
@@ -698,11 +719,11 @@ bool wxWindowDC::DoBlit( long xdest, long ydest, long width, long height,
     {
         /* scale/translate size and position */
 
-        long xx = XLOG2DEV(xdest);
-        long yy = YLOG2DEV(ydest);
+        wxCoord xx = XLOG2DEV(xdest);
+        wxCoord yy = YLOG2DEV(ydest);
 
-        long ww = XLOG2DEVREL(width);
-        long hh = YLOG2DEVREL(height);
+        wxCoord ww = XLOG2DEVREL(width);
+        wxCoord hh = YLOG2DEVREL(height);
 
         if ((width != ww) || (height != hh))
         {
@@ -752,7 +773,7 @@ bool wxWindowDC::DoBlit( long xdest, long ydest, long width, long height,
     return TRUE;
 }
 
-void wxWindowDC::DoDrawText( const wxString &text, long x, long y )
+void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") );
 
@@ -760,14 +781,16 @@ void wxWindowDC::DoDrawText( const wxString &text, long x, long y )
 
     GdkFont *font = m_font.GetInternalFont( m_scaleY );
 
+    wxCHECK_RET( font, wxT("invalid font") );
+
     x = XLOG2DEV(x);
     y = YLOG2DEV(y);
 
     /* CMB 21/5/98: draw text background if mode is wxSOLID */
     if (m_backgroundMode == wxSOLID)
     {
-        long width = gdk_string_width( font, text.mbc_str() );
-        long height = font->ascent + font->descent;
+        wxCoord width = gdk_string_width( font, text.mbc_str() );
+        wxCoord height = font->ascent + font->descent;
         gdk_gc_set_foreground( m_textGC, m_textBackgroundColour.GetColor() );
         gdk_draw_rectangle( m_window, m_textGC, TRUE, x, y, width, height );
         gdk_gc_set_foreground( m_textGC, m_textForegroundColour.GetColor() );
@@ -791,30 +814,114 @@ void wxWindowDC::DoDrawText( const wxString &text, long x, long y )
     CalcBoundingBox (x, y);
 }
 
-void wxWindowDC::GetTextExtent( const wxString &string, long *width, long *height,
-                                long *descent, long *externalLeading,
-                                wxFont *theFont ) const
+void wxWindowDC::DoDrawRotatedText( const wxString &text, wxCoord x, wxCoord y, double angle )
+{
+    if (angle == 0.0)
+    {
+        DrawText(text, x, y);
+        return;
+    }
+
+    wxCHECK_RET( Ok(), wxT("invalid window dc") );
+
+    if (!m_window) return;
+
+    GdkFont *font = m_font.GetInternalFont( m_scaleY );
+
+    wxCHECK_RET( font, wxT("invalid font") );
+
+    x = XLOG2DEV(x);
+    y = YLOG2DEV(y);
+
+    int cx = gdk_string_width( font, text.mbc_str() );
+    int cy = font->ascent + font->descent;
+
+    wxBitmap src(cx, cy);
+    wxMemoryDC dc;
+    dc.SelectObject(src);
+    dc.SetFont(GetFont());
+    dc.SetBackground(*wxWHITE_BRUSH);
+    dc.SetBrush(*wxBLACK_BRUSH);
+    dc.Clear();
+    dc.DrawText(text, 0, 0);
+    dc.SetFont(wxNullFont);
+
+    // Calculate the size of the rotated bounding box.
+    double dx = cos(angle / 180.0 * M_PI);
+    double dy = sin(angle / 180.0 * M_PI);
+    double x4 = -cy * dy;
+    double y4 = cy * dx;
+    double x3 = cx * dx;
+    double y3 = cx * dy;
+    double x2 = x3 + x4;
+    double y2 = y3 + y4;
+    double x1 = x;
+    double y1 = y;
+
+    // Create image from the source bitmap after writing the text into it.
+    wxImage  image(src);
+
+    int minx = roundmin(0, roundmin(x4, roundmin(x2, x3)));
+    int miny = roundmin(0, roundmin(y4, roundmin(y2, y3)));
+    int maxx = roundmax(0, roundmax(x4, roundmax(x2, x3)));
+    int maxy = roundmax(0, roundmax(y4, roundmax(y2, y3)));
+
+    // This rotates counterclockwise around the top left corner.
+    for (int rx = minx; rx < maxx; rx++)
+    {
+        for (int ry = miny; ry < maxy; ry++)
+        {
+            // transform dest coords to source coords
+            int sx = (int) (rx * dx + ry * dy + 0.5);
+            int sy = (int) (ry * dx - rx * dy + 0.5);
+            if (sx >= 0 && sx < cx && sy >= 0 && sy < cy)
+            {
+                // draw black pixels, ignore white ones (i.e. transparent b/g)
+                if (image.GetRed(sx, sy) == 0)
+                {
+                    DrawPoint(x1 + maxx - rx, cy + y1 - ry);
+                }
+                else
+                {
+                    // Background
+                    //DrawPoint(x1 + maxx - rx, cy + y1 + maxy - ry);
+                }
+            }
+        }
+    }
+
+    // TODO call CalcBoundingBox()
+}
+
+void wxWindowDC::DoGetTextExtent(const wxString &string,
+                                 wxCoord *width, wxCoord *height,
+                                 wxCoord *descent, wxCoord *externalLeading,
+                                 wxFont *theFont) const
 {
     wxFont fontToUse = m_font;
     if (theFont) fontToUse = *theFont;
 
     GdkFont *font = fontToUse.GetInternalFont( m_scaleY );
-    if (width) (*width) = long(gdk_string_width( font, string.mbc_str() ) / m_scaleX);
-    if (height) (*height) = long((font->ascent + font->descent) / m_scaleY);
-    if (descent) (*descent) = long(font->descent / m_scaleY);
+    if (width) (*width) = wxCoord(gdk_string_width( font, string.mbc_str() ) / m_scaleX);
+    if (height) (*height) = wxCoord((font->ascent + font->descent) / m_scaleY);
+    if (descent) (*descent) = wxCoord(font->descent / m_scaleY);
     if (externalLeading) (*externalLeading) = 0;  // ??
 }
 
-long wxWindowDC::GetCharWidth() const
+wxCoord wxWindowDC::GetCharWidth() const
 {
     GdkFont *font = m_font.GetInternalFont( m_scaleY );
-    return long(gdk_string_width( font, "H" ) / m_scaleX);
+    wxCHECK_MSG( font, -1, wxT("invalid font") );
+
+    return wxCoord(gdk_string_width( font, "H" ) / m_scaleX);
 }
 
-long wxWindowDC::GetCharHeight() const
+wxCoord wxWindowDC::GetCharHeight() const
 {
     GdkFont *font = m_font.GetInternalFont( m_scaleY );
-    return long((font->ascent + font->descent) / m_scaleY);
+    wxCHECK_MSG( font, -1, wxT("invalid font") );
+
+    return wxCoord((font->ascent + font->descent) / m_scaleY);
 }
 
 void wxWindowDC::Clear()
@@ -882,7 +989,7 @@ void wxWindowDC::SetPen( const wxPen &pen )
 
     static const char dotted[] = {1, 1};
     static const char short_dashed[] = {2, 2};
-    static const char long_dashed[] = {2, 4};
+    static const char wxCoord_dashed[] = {2, 4};
     static const char dotted_dashed[] = {3, 3, 1, 3};
 
     // We express dash pattern in pen width unit, so we are
@@ -911,7 +1018,7 @@ void wxWindowDC::SetPen( const wxPen &pen )
         {
             lineStyle = GDK_LINE_ON_OFF_DASH;
             req_nb_dash = 2;
-            req_dash = long_dashed;
+            req_dash = wxCoord_dashed;
             break;
         }
         case wxSHORT_DASH:
@@ -1164,7 +1271,7 @@ void wxWindowDC::SetPalette( const wxPalette& WXUNUSED(palette) )
     wxFAIL_MSG( wxT("wxWindowDC::SetPalette not implemented") );
 }
 
-void wxWindowDC::DoSetClippingRegion( long x, long y, long width, long height )
+void wxWindowDC::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord width, wxCoord height )
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") );