wxWindowDC compiles (wxGTK doesn't link yet because of dcpsg.cpp problems...)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2457 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
1999-05-13 23:02:35 +00:00
parent 85d10d9bbb
commit b0e0d66151
10 changed files with 565 additions and 683 deletions

View File

@@ -395,10 +395,10 @@ public:
if ( x ) *x = m_userScaleX; if ( x ) *x = m_userScaleX;
if ( y ) *y = m_userScaleY; if ( y ) *y = m_userScaleY;
} }
void SetSystemScale(double x, double y)
{ SetUserScale(x, y); }
virtual void SetUserScale(double x, double y) = 0; virtual void SetUserScale(double x, double y) = 0;
virtual void SetSystemScale(double x, double y) = 0;
virtual void GetLogicalScale(double *x, double *y) virtual void GetLogicalScale(double *x, double *y)
{ {
if ( x ) *x = m_logicalScaleX; if ( x ) *x = m_logicalScaleX;
@@ -509,8 +509,11 @@ protected:
virtual void DoSetClippingRegionAsRegion(const wxRegion& region) = 0; virtual void DoSetClippingRegionAsRegion(const wxRegion& region) = 0;
virtual void DoSetClippingRegion(long x, long y, virtual void DoSetClippingRegion(long x, long y,
long width, long height) = 0; long width, long height) = 0;
// FIXME are these functions really different?
virtual void DoGetClippingRegion(long *x, long *y, virtual void DoGetClippingRegion(long *x, long *y,
long *width, long *height) = 0; long *w, long *h)
{ DoGetClippingBox(x, y, w, h); }
virtual void DoGetClippingBox(long *x, long *y, virtual void DoGetClippingBox(long *x, long *y,
long *w, long *h) const long *w, long *h) const
{ {

View File

@@ -142,8 +142,6 @@ protected:
public: public:
// GTK-specific member variables // GTK-specific member variables
int m_textAlignment; // gone in wxWin 2.0 ?
// not sure what for, but what is a mm on a screen you don't know the size // not sure what for, but what is a mm on a screen you don't know the size
// of? // of?
double m_mm_to_pix_x, double m_mm_to_pix_x,

View File

@@ -7,7 +7,6 @@
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
#ifndef __GTKDCCLIENTH__ #ifndef __GTKDCCLIENTH__
#define __GTKDCCLIENTH__ #define __GTKDCCLIENTH__
@@ -30,85 +29,94 @@ class wxClientDC;
// wxWindowDC // wxWindowDC
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
class wxWindowDC: public wxDC class wxWindowDC : public wxDC
{ {
DECLARE_DYNAMIC_CLASS(wxWindowDC) DECLARE_DYNAMIC_CLASS(wxWindowDC)
public: public:
wxWindowDC(); wxWindowDC();
wxWindowDC( wxWindow *win ); wxWindowDC( wxWindow *win );
~wxWindowDC(); ~wxWindowDC();
virtual void FloodFill( long x, long y, const wxColour& col, int style=wxFLOOD_SURFACE ); virtual bool CanDrawBitmap() const { return TRUE; }
virtual bool GetPixel( long x1, long y1, wxColour *col ) const; virtual bool CanGetTextExtent() const { return TRUE; }
virtual void DrawLine( long x1, long y1, long x2, long y2 ); virtual void DoFloodFill( long x, long y, const wxColour& col, int style=wxFLOOD_SURFACE );
virtual void CrossHair( long x, long y ); virtual bool DoGetPixel( long x1, long y1, wxColour *col ) const;
virtual void DrawArc( long x1, long y1, long x2, long y2, long xc, long yc );
virtual void DrawEllipticArc( long x, long y, long width, long height, double sa, double ea );
virtual void DrawPoint( long x, long y );
virtual void DrawLines( int n, wxPoint points[], long xoffset = 0, long yoffset = 0 ); virtual void DoDrawLine( long x1, long y1, long x2, long y2 );
virtual void DrawLines( wxList *points, long xoffset = 0, long yoffset = 0 ); virtual void DoCrossHair( long x, long y );
virtual void DrawPolygon( int n, wxPoint points[], long xoffset = 0, long yoffset = 0, virtual void DoDrawArc( long x1, long y1, long x2, long y2,
int fillStyle=wxODDEVEN_RULE ); long xc, long yc );
virtual void DrawPolygon( wxList *lines, long xoffset = 0, long yoffset = 0, virtual void DoDrawEllipticArc( long x, long y, long width, long height,
int fillStyle=wxODDEVEN_RULE ); double sa, double ea );
virtual void DoDrawPoint( long x, long y );
virtual void DrawRectangle( long x, long y, long width, long height ); virtual void DoDrawLines(int n, wxPoint points[],
virtual void DrawRoundedRectangle( long x, long y, long width, long height, double radius = 20.0 ); long xoffset, long yoffset);
virtual void DrawEllipse( long x, long y, long width, long height ); virtual void DoDrawPolygon(int n, wxPoint points[],
long xoffset, long yoffset,
int fillStyle = wxODDEVEN_RULE);
virtual bool CanDrawBitmap() const; virtual void DoDrawRectangle( long x, long y, long width, long height );
virtual void DrawIcon( const wxIcon &icon, long x, long y ); virtual void DoDrawRoundedRectangle( long x, long y, long width, long height, double radius = 20.0 );
virtual void DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMask=FALSE ); virtual void DoDrawEllipse( long x, long y, long width, long height );
virtual bool Blit( long xdest, long ydest, long width, long height,
wxDC *source, long xsrc, long ysrc, int logical_func = wxCOPY, bool useMask=FALSE );
virtual void DrawText( const wxString &text, long x, long y, bool use16 = FALSE ); virtual void DoDrawIcon( const wxIcon &icon, long x, long y );
virtual bool CanGetTextExtent() const; virtual void DoDrawBitmap( const wxBitmap &bitmap, long x, long y,
virtual void GetTextExtent( const wxString &string, long *width, long *height, bool useMask = FALSE );
long *descent = (long *) NULL, long *externalLeading = (long *) NULL,
wxFont *theFont = (wxFont *) NULL, bool use16 = FALSE );
virtual long GetCharWidth();
virtual long GetCharHeight();
virtual void Clear(); virtual bool DoBlit( long xdest, long ydest, long width, long height,
wxDC *source, long xsrc, long ysrc,
int logical_func = wxCOPY, bool useMask = FALSE );
virtual void SetFont( const wxFont &font ); virtual void DoDrawText( const wxString &text, long x, long y );
virtual void SetPen( const wxPen &pen ); virtual void GetTextExtent( const wxString &string,
virtual void SetBrush( const wxBrush &brush ); long *width, long *height,
virtual void SetBackground( const wxBrush &brush ); long *descent = (long *) NULL,
virtual void SetLogicalFunction( int function ); long *externalLeading = (long *) NULL,
virtual void SetTextForeground( const wxColour &col ); wxFont *theFont = (wxFont *) NULL) const;
virtual void SetTextBackground( const wxColour &col ); virtual long GetCharWidth() const;
virtual void SetBackgroundMode( int mode ); virtual long GetCharHeight() const;
virtual void SetPalette( const wxPalette& palette );
virtual void SetClippingRegion( long x, long y, long width, long height ); virtual void Clear();
virtual void DestroyClippingRegion();
virtual void SetClippingRegion( const wxRegion &region );
virtual void DrawSpline( wxList *points ); virtual void SetFont( const wxFont &font );
virtual void SetPen( const wxPen &pen );
virtual void SetBrush( const wxBrush &brush );
virtual void SetBackground( const wxBrush &brush );
virtual void SetLogicalFunction( int function );
virtual void SetTextForeground( const wxColour &col );
virtual void SetTextBackground( const wxColour &col );
virtual void SetBackgroundMode( int mode );
virtual void SetPalette( const wxPalette& palette );
// Resolution in pixels per logical inch virtual void DoSetClippingRegion( long x, long y, long width, long height );
wxSize GetPPI(void) const; virtual void DestroyClippingRegion();
virtual void DoSetClippingRegionAsRegion( const wxRegion &region );
// implementation virtual void DoDrawSpline( wxList *points );
GdkWindow *m_window; // Resolution in pixels per logical inch
GdkGC *m_penGC; virtual wxSize GetPPI() const;
GdkGC *m_brushGC; virtual int GetDepth() const;
GdkGC *m_textGC;
GdkGC *m_bgGC;
GdkColormap *m_cmap;
bool m_isMemDC;
wxWindow *m_owner;
void SetUpDC(); // implementation
void Destroy(); // --------------
GdkWindow *GetWindow();
GdkWindow *m_window;
GdkGC *m_penGC;
GdkGC *m_brushGC;
GdkGC *m_textGC;
GdkGC *m_bgGC;
GdkColormap *m_cmap;
bool m_isMemDC;
wxWindow *m_owner;
void SetUpDC();
void Destroy();
GdkWindow *GetWindow() { return m_window; }
}; };
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -117,11 +125,11 @@ public:
class wxPaintDC : public wxWindowDC class wxPaintDC : public wxWindowDC
{ {
DECLARE_DYNAMIC_CLASS(wxPaintDC) DECLARE_DYNAMIC_CLASS(wxPaintDC)
public: public:
wxPaintDC(); wxPaintDC();
wxPaintDC( wxWindow *win ); wxPaintDC( wxWindow *win );
}; };
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -130,11 +138,11 @@ public:
class wxClientDC : public wxWindowDC class wxClientDC : public wxWindowDC
{ {
DECLARE_DYNAMIC_CLASS(wxClientDC) DECLARE_DYNAMIC_CLASS(wxClientDC)
public: public:
wxClientDC(); wxClientDC();
wxClientDC( wxWindow *win ); wxClientDC( wxWindow *win );
}; };

View File

@@ -142,8 +142,6 @@ protected:
public: public:
// GTK-specific member variables // GTK-specific member variables
int m_textAlignment; // gone in wxWin 2.0 ?
// not sure what for, but what is a mm on a screen you don't know the size // not sure what for, but what is a mm on a screen you don't know the size
// of? // of?
double m_mm_to_pix_x, double m_mm_to_pix_x,

View File

@@ -7,7 +7,6 @@
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
#ifndef __GTKDCCLIENTH__ #ifndef __GTKDCCLIENTH__
#define __GTKDCCLIENTH__ #define __GTKDCCLIENTH__
@@ -30,85 +29,94 @@ class wxClientDC;
// wxWindowDC // wxWindowDC
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
class wxWindowDC: public wxDC class wxWindowDC : public wxDC
{ {
DECLARE_DYNAMIC_CLASS(wxWindowDC) DECLARE_DYNAMIC_CLASS(wxWindowDC)
public: public:
wxWindowDC(); wxWindowDC();
wxWindowDC( wxWindow *win ); wxWindowDC( wxWindow *win );
~wxWindowDC(); ~wxWindowDC();
virtual void FloodFill( long x, long y, const wxColour& col, int style=wxFLOOD_SURFACE ); virtual bool CanDrawBitmap() const { return TRUE; }
virtual bool GetPixel( long x1, long y1, wxColour *col ) const; virtual bool CanGetTextExtent() const { return TRUE; }
virtual void DrawLine( long x1, long y1, long x2, long y2 ); virtual void DoFloodFill( long x, long y, const wxColour& col, int style=wxFLOOD_SURFACE );
virtual void CrossHair( long x, long y ); virtual bool DoGetPixel( long x1, long y1, wxColour *col ) const;
virtual void DrawArc( long x1, long y1, long x2, long y2, long xc, long yc );
virtual void DrawEllipticArc( long x, long y, long width, long height, double sa, double ea );
virtual void DrawPoint( long x, long y );
virtual void DrawLines( int n, wxPoint points[], long xoffset = 0, long yoffset = 0 ); virtual void DoDrawLine( long x1, long y1, long x2, long y2 );
virtual void DrawLines( wxList *points, long xoffset = 0, long yoffset = 0 ); virtual void DoCrossHair( long x, long y );
virtual void DrawPolygon( int n, wxPoint points[], long xoffset = 0, long yoffset = 0, virtual void DoDrawArc( long x1, long y1, long x2, long y2,
int fillStyle=wxODDEVEN_RULE ); long xc, long yc );
virtual void DrawPolygon( wxList *lines, long xoffset = 0, long yoffset = 0, virtual void DoDrawEllipticArc( long x, long y, long width, long height,
int fillStyle=wxODDEVEN_RULE ); double sa, double ea );
virtual void DoDrawPoint( long x, long y );
virtual void DrawRectangle( long x, long y, long width, long height ); virtual void DoDrawLines(int n, wxPoint points[],
virtual void DrawRoundedRectangle( long x, long y, long width, long height, double radius = 20.0 ); long xoffset, long yoffset);
virtual void DrawEllipse( long x, long y, long width, long height ); virtual void DoDrawPolygon(int n, wxPoint points[],
long xoffset, long yoffset,
int fillStyle = wxODDEVEN_RULE);
virtual bool CanDrawBitmap() const; virtual void DoDrawRectangle( long x, long y, long width, long height );
virtual void DrawIcon( const wxIcon &icon, long x, long y ); virtual void DoDrawRoundedRectangle( long x, long y, long width, long height, double radius = 20.0 );
virtual void DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMask=FALSE ); virtual void DoDrawEllipse( long x, long y, long width, long height );
virtual bool Blit( long xdest, long ydest, long width, long height,
wxDC *source, long xsrc, long ysrc, int logical_func = wxCOPY, bool useMask=FALSE );
virtual void DrawText( const wxString &text, long x, long y, bool use16 = FALSE ); virtual void DoDrawIcon( const wxIcon &icon, long x, long y );
virtual bool CanGetTextExtent() const; virtual void DoDrawBitmap( const wxBitmap &bitmap, long x, long y,
virtual void GetTextExtent( const wxString &string, long *width, long *height, bool useMask = FALSE );
long *descent = (long *) NULL, long *externalLeading = (long *) NULL,
wxFont *theFont = (wxFont *) NULL, bool use16 = FALSE );
virtual long GetCharWidth();
virtual long GetCharHeight();
virtual void Clear(); virtual bool DoBlit( long xdest, long ydest, long width, long height,
wxDC *source, long xsrc, long ysrc,
int logical_func = wxCOPY, bool useMask = FALSE );
virtual void SetFont( const wxFont &font ); virtual void DoDrawText( const wxString &text, long x, long y );
virtual void SetPen( const wxPen &pen ); virtual void GetTextExtent( const wxString &string,
virtual void SetBrush( const wxBrush &brush ); long *width, long *height,
virtual void SetBackground( const wxBrush &brush ); long *descent = (long *) NULL,
virtual void SetLogicalFunction( int function ); long *externalLeading = (long *) NULL,
virtual void SetTextForeground( const wxColour &col ); wxFont *theFont = (wxFont *) NULL) const;
virtual void SetTextBackground( const wxColour &col ); virtual long GetCharWidth() const;
virtual void SetBackgroundMode( int mode ); virtual long GetCharHeight() const;
virtual void SetPalette( const wxPalette& palette );
virtual void SetClippingRegion( long x, long y, long width, long height ); virtual void Clear();
virtual void DestroyClippingRegion();
virtual void SetClippingRegion( const wxRegion &region );
virtual void DrawSpline( wxList *points ); virtual void SetFont( const wxFont &font );
virtual void SetPen( const wxPen &pen );
virtual void SetBrush( const wxBrush &brush );
virtual void SetBackground( const wxBrush &brush );
virtual void SetLogicalFunction( int function );
virtual void SetTextForeground( const wxColour &col );
virtual void SetTextBackground( const wxColour &col );
virtual void SetBackgroundMode( int mode );
virtual void SetPalette( const wxPalette& palette );
// Resolution in pixels per logical inch virtual void DoSetClippingRegion( long x, long y, long width, long height );
wxSize GetPPI(void) const; virtual void DestroyClippingRegion();
virtual void DoSetClippingRegionAsRegion( const wxRegion &region );
// implementation virtual void DoDrawSpline( wxList *points );
GdkWindow *m_window; // Resolution in pixels per logical inch
GdkGC *m_penGC; virtual wxSize GetPPI() const;
GdkGC *m_brushGC; virtual int GetDepth() const;
GdkGC *m_textGC;
GdkGC *m_bgGC;
GdkColormap *m_cmap;
bool m_isMemDC;
wxWindow *m_owner;
void SetUpDC(); // implementation
void Destroy(); // --------------
GdkWindow *GetWindow();
GdkWindow *m_window;
GdkGC *m_penGC;
GdkGC *m_brushGC;
GdkGC *m_textGC;
GdkGC *m_bgGC;
GdkColormap *m_cmap;
bool m_isMemDC;
wxWindow *m_owner;
void SetUpDC();
void Destroy();
GdkWindow *GetWindow() { return m_window; }
}; };
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -117,11 +125,11 @@ public:
class wxPaintDC : public wxWindowDC class wxPaintDC : public wxWindowDC
{ {
DECLARE_DYNAMIC_CLASS(wxPaintDC) DECLARE_DYNAMIC_CLASS(wxPaintDC)
public: public:
wxPaintDC(); wxPaintDC();
wxPaintDC( wxWindow *win ); wxPaintDC( wxWindow *win );
}; };
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -130,11 +138,11 @@ public:
class wxClientDC : public wxWindowDC class wxClientDC : public wxWindowDC
{ {
DECLARE_DYNAMIC_CLASS(wxClientDC) DECLARE_DYNAMIC_CLASS(wxClientDC)
public: public:
wxClientDC(); wxClientDC();
wxClientDC( wxWindow *win ); wxClientDC( wxWindow *win );
}; };

View File

@@ -30,6 +30,7 @@
#include "wx/font.h" #include "wx/font.h"
#include "wx/palette.h" #include "wx/palette.h"
#include "wx/app.h" #include "wx/app.h"
#include "wx/dc.h"
#include "wx/log.h" #include "wx/log.h"
#include <string.h> #include <string.h>

View File

@@ -38,9 +38,6 @@ wxDC::wxDC()
{ {
m_ok = FALSE; m_ok = FALSE;
m_optimize = FALSE;
m_autoSetting = FALSE;
m_mm_to_pix_x = 1.0; m_mm_to_pix_x = 1.0;
m_mm_to_pix_y = 1.0; m_mm_to_pix_y = 1.0;
@@ -196,41 +193,41 @@ void wxDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
long wxDCBase::DeviceToLogicalX(long x) const long wxDCBase::DeviceToLogicalX(long x) const
{ {
return XDEV2LOG(x); return ((wxDC *)this)->XDEV2LOG(x);
} }
long wxDCBase::DeviceToLogicalY(long y) const long wxDCBase::DeviceToLogicalY(long y) const
{ {
return YDEV2LOG(y); return ((wxDC *)this)->YDEV2LOG(y);
} }
long wxDCBase::DeviceToLogicalXRel(long x) const long wxDCBase::DeviceToLogicalXRel(long x) const
{ {
return XDEV2LOGREL(x); return ((wxDC *)this)->XDEV2LOGREL(x);
} }
long wxDCBase::DeviceToLogicalYRel(long y) const long wxDCBase::DeviceToLogicalYRel(long y) const
{ {
return YDEV2LOGREL(y); return ((wxDC *)this)->YDEV2LOGREL(y);
} }
long wxDCBase::LogicalToDeviceX(long x) const long wxDCBase::LogicalToDeviceX(long x) const
{ {
return XLOG2DEV(x); return ((wxDC *)this)->XLOG2DEV(x);
} }
long wxDCBase::LogicalToDeviceY(long y) const long wxDCBase::LogicalToDeviceY(long y) const
{ {
return YLOG2DEV(y); return ((wxDC *)this)->YLOG2DEV(y);
} }
long wxDCBase::LogicalToDeviceXRel(long x) const long wxDCBase::LogicalToDeviceXRel(long x) const
{ {
return XLOG2DEVREL(x); return ((wxDC *)this)->XLOG2DEVREL(x);
} }
long wxDCBase::LogicalToDeviceYRel(long y) const long wxDCBase::LogicalToDeviceYRel(long y) const
{ {
return YLOG2DEVREL(y); return ((wxDC *)this)->YLOG2DEVREL(y);
} }

View File

@@ -4,7 +4,7 @@
// Author: Robert Roebling // Author: Robert Roebling
// RCS-ID: $Id$ // RCS-ID: $Id$
// Copyright: (c) 1998 Robert Roebling, Markus Holzem, Chris Breeze // Copyright: (c) 1998 Robert Roebling, Markus Holzem, Chris Breeze
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__ #ifdef __GNUG__
@@ -43,16 +43,18 @@ static GdkPixmap **hatch_bitmap = (GdkPixmap **) NULL;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// temporary implementation of the missing GDK function // temporary implementation of the missing GDK function
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
#include "gdk/gdkprivate.h" #include "gdk/gdkprivate.h"
void gdk_draw_bitmap (GdkDrawable *drawable,
GdkGC *gc, void gdk_draw_bitmap (GdkDrawable *drawable,
GdkDrawable *src, GdkGC *gc,
gint xsrc, GdkDrawable *src,
gint ysrc, gint xsrc,
gint xdest, gint ysrc,
gint ydest, gint xdest,
gint width, gint ydest,
gint height) gint width,
gint height)
{ {
GdkWindowPrivate *drawable_private; GdkWindowPrivate *drawable_private;
GdkWindowPrivate *src_private; GdkWindowPrivate *src_private;
@@ -66,27 +68,27 @@ void gdk_draw_bitmap (GdkDrawable *drawable,
src_private = (GdkWindowPrivate*) src; src_private = (GdkWindowPrivate*) src;
if (drawable_private->destroyed || src_private->destroyed) if (drawable_private->destroyed || src_private->destroyed)
return; return;
gc_private = (GdkGCPrivate*) gc; gc_private = (GdkGCPrivate*) gc;
if (width == -1) width = src_private->width; if (width == -1) width = src_private->width;
if (height == -1) height = src_private->height; if (height == -1) height = src_private->height;
XCopyPlane( drawable_private->xdisplay, XCopyPlane( drawable_private->xdisplay,
src_private->xwindow, src_private->xwindow,
drawable_private->xwindow, drawable_private->xwindow,
gc_private->xgc, gc_private->xgc,
xsrc, ysrc, xsrc, ysrc,
width, height, width, height,
xdest, ydest, xdest, ydest,
1 ); 1 );
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// wxWindowDC // wxWindowDC
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxWindowDC,wxDC) IMPLEMENT_DYNAMIC_CLASS(wxWindowDC, wxDC)
wxWindowDC::wxWindowDC() wxWindowDC::wxWindowDC()
{ {
@@ -108,7 +110,8 @@ wxWindowDC::wxWindowDC( wxWindow *window )
m_cmap = (GdkColormap *) NULL; m_cmap = (GdkColormap *) NULL;
m_owner = (wxWindow *)NULL; m_owner = (wxWindow *)NULL;
if (!window) return; if (!window)
return;
GtkWidget *widget = window->m_wxwindow; GtkWidget *widget = window->m_wxwindow;
if (!widget) if (!widget)
@@ -125,7 +128,8 @@ wxWindowDC::wxWindowDC( wxWindow *window )
} }
/* still not realized ? */ /* still not realized ? */
if (!m_window) return; if (!m_window)
return;
if (window->m_wxwindow) if (window->m_wxwindow)
m_cmap = gtk_widget_get_colormap( window->m_wxwindow ); m_cmap = gtk_widget_get_colormap( window->m_wxwindow );
@@ -151,19 +155,19 @@ wxWindowDC::~wxWindowDC()
Destroy(); Destroy();
} }
void wxWindowDC::FloodFill( long WXUNUSED(x), long WXUNUSED(y), void wxWindowDC::DoFloodFill( long WXUNUSED(x), long WXUNUSED(y),
const wxColour &WXUNUSED(col), int WXUNUSED(style) ) const wxColour &WXUNUSED(col), int WXUNUSED(style) )
{ {
wxFAIL_MSG( _T("wxWindowDC::FloodFill not implemented") ); wxFAIL_MSG( _T("wxWindowDC::DoFloodFill not implemented") );
} }
bool wxWindowDC::GetPixel( long WXUNUSED(x1), long WXUNUSED(y1), wxColour *WXUNUSED(col) ) const bool wxWindowDC::DoGetPixel( long WXUNUSED(x1), long WXUNUSED(y1), wxColour *WXUNUSED(col) ) const
{ {
wxFAIL_MSG( _T("wxWindowDC::GetPixel not implemented") ); wxFAIL_MSG( _T("wxWindowDC::DoGetPixel not implemented") );
return FALSE; return FALSE;
} }
void wxWindowDC::DrawLine( long x1, long y1, long x2, long y2 ) void wxWindowDC::DoDrawLine( long x1, long y1, long x2, long y2 )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -171,13 +175,13 @@ void wxWindowDC::DrawLine( long x1, long y1, long x2, long y2 )
{ {
gdk_draw_line( m_window, m_penGC, gdk_draw_line( m_window, m_penGC,
XLOG2DEV(x1), YLOG2DEV(y1), XLOG2DEV(x2), YLOG2DEV(y2) ); XLOG2DEV(x1), YLOG2DEV(y1), XLOG2DEV(x2), YLOG2DEV(y2) );
CalcBoundingBox(x1, y1); CalcBoundingBox(x1, y1);
CalcBoundingBox(x2, y2); CalcBoundingBox(x2, y2);
} }
} }
void wxWindowDC::CrossHair( long x, long y ) void wxWindowDC::DoCrossHair( long x, long y )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -193,7 +197,8 @@ void wxWindowDC::CrossHair( long x, long y )
} }
} }
void wxWindowDC::DrawArc( long x1, long y1, long x2, long y2, long xc, long yc ) void wxWindowDC::DoDrawArc( long x1, long y1, long x2, long y2,
long xc, long yc )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -222,11 +227,11 @@ void wxWindowDC::DrawArc( long x1, long y1, long x2, long y2, long xc, long yc )
else else
{ {
radius1 = (xx1 - xxc == 0) ? radius1 = (xx1 - xxc == 0) ?
(yy1 - yyc < 0) ? 90.0 : -90.0 : (yy1 - yyc < 0) ? 90.0 : -90.0 :
-atan2(double(yy1-yyc), double(xx1-xxc)) * RAD2DEG; -atan2(double(yy1-yyc), double(xx1-xxc)) * RAD2DEG;
radius2 = (xx2 - xxc == 0) ? radius2 = (xx2 - xxc == 0) ?
(yy2 - yyc < 0) ? 90.0 : -90.0 : (yy2 - yyc < 0) ? 90.0 : -90.0 :
-atan2(double(yy2-yyc), double(xx2-xxc)) * RAD2DEG; -atan2(double(yy2-yyc), double(xx2-xxc)) * RAD2DEG;
} }
long alpha1 = long(radius1 * 64.0); long alpha1 = long(radius1 * 64.0);
long alpha2 = long((radius2 - radius1) * 64.0); long alpha2 = long((radius2 - radius1) * 64.0);
@@ -243,7 +248,7 @@ void wxWindowDC::DrawArc( long x1, long y1, long x2, long y2, long xc, long yc )
CalcBoundingBox (x2, y2); CalcBoundingBox (x2, y2);
} }
void wxWindowDC::DrawEllipticArc( long x, long y, long width, long height, double sa, double ea ) void wxWindowDC::DoDrawEllipticArc( long x, long y, long width, long height, double sa, double ea )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -263,22 +268,22 @@ void wxWindowDC::DrawEllipticArc( long x, long y, long width, long height, doubl
if (m_pen.GetStyle() != wxTRANSPARENT) if (m_pen.GetStyle() != wxTRANSPARENT)
gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, start, end ); gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, start, end );
CalcBoundingBox (x, y); CalcBoundingBox (x, y);
CalcBoundingBox (x + width, y + height); CalcBoundingBox (x + width, y + height);
} }
void wxWindowDC::DrawPoint( long x, long y ) void wxWindowDC::DoDrawPoint( long x, long y )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
if (m_pen.GetStyle() != wxTRANSPARENT) if (m_pen.GetStyle() != wxTRANSPARENT)
gdk_draw_point( m_window, m_penGC, XLOG2DEV(x), YLOG2DEV(y) ); gdk_draw_point( m_window, m_penGC, XLOG2DEV(x), YLOG2DEV(y) );
CalcBoundingBox (x, y); CalcBoundingBox (x, y);
} }
void wxWindowDC::DrawLines( int n, wxPoint points[], long xoffset, long yoffset ) void wxWindowDC::DoDrawLines( int n, wxPoint points[], long xoffset, long yoffset )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -294,39 +299,12 @@ void wxWindowDC::DrawLines( int n, wxPoint points[], long xoffset, long yoffset
long y1 = YLOG2DEV(points[i].y + yoffset); // oh, what a waste long y1 = YLOG2DEV(points[i].y + yoffset); // oh, what a waste
long y2 = YLOG2DEV(points[i+1].y + yoffset); long y2 = YLOG2DEV(points[i+1].y + yoffset);
gdk_draw_line( m_window, m_penGC, x1, y1, x2, y2 ); gdk_draw_line( m_window, m_penGC, x1, y1, x2, y2 );
CalcBoundingBox( points[i+1].x + xoffset, points[i+1].y + yoffset ); CalcBoundingBox( points[i+1].x + xoffset, points[i+1].y + yoffset );
} }
} }
void wxWindowDC::DrawLines( wxList *points, long xoffset, long yoffset ) void wxWindowDC::DoDrawPolygon( int n, wxPoint points[], long xoffset, long yoffset, int WXUNUSED(fillStyle) )
{
wxCHECK_RET( Ok(), _T("invalid window dc") );
if (m_pen.GetStyle() == wxTRANSPARENT) return;
wxNode *node = points->First();
if (!node) return;
wxPoint *pt = (wxPoint*)node->Data();
CalcBoundingBox( pt->x + xoffset, pt->y + yoffset );
while (node->Next())
{
wxPoint *point = (wxPoint*)node->Data();
wxPoint *npoint = (wxPoint*)node->Next()->Data();
long x1 = XLOG2DEV(point->x + xoffset);
long x2 = XLOG2DEV(npoint->x + xoffset);
long y1 = YLOG2DEV(point->y + yoffset); // and a waste again...
long y2 = YLOG2DEV(npoint->y + yoffset);
gdk_draw_line( m_window, m_penGC, x1, y1, x2, y2 );
node = node->Next();
CalcBoundingBox( npoint->x + xoffset, npoint->y + yoffset );
}
}
void wxWindowDC::DrawPolygon( int n, wxPoint points[], long xoffset, long yoffset, int WXUNUSED(fillStyle) )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -338,7 +316,7 @@ void wxWindowDC::DrawPolygon( int n, wxPoint points[], long xoffset, long yoffse
{ {
gdkpoints[i].x = XLOG2DEV(points[i].x + xoffset); gdkpoints[i].x = XLOG2DEV(points[i].x + xoffset);
gdkpoints[i].y = YLOG2DEV(points[i].y + yoffset); gdkpoints[i].y = YLOG2DEV(points[i].y + yoffset);
CalcBoundingBox( points[i].x + xoffset, points[i].y + yoffset ); CalcBoundingBox( points[i].x + xoffset, points[i].y + yoffset );
} }
@@ -349,59 +327,18 @@ void wxWindowDC::DrawPolygon( int n, wxPoint points[], long xoffset, long yoffse
if (m_pen.GetStyle() != wxTRANSPARENT) if (m_pen.GetStyle() != wxTRANSPARENT)
for (i = 0 ; i < n ; i++) for (i = 0 ; i < n ; i++)
{ {
gdk_draw_line( m_window, m_penGC, gdk_draw_line( m_window, m_penGC,
gdkpoints[i%n].x, gdkpoints[i%n].x,
gdkpoints[i%n].y, gdkpoints[i%n].y,
gdkpoints[(i+1)%n].x, gdkpoints[(i+1)%n].x,
gdkpoints[(i+1)%n].y); gdkpoints[(i+1)%n].y);
} }
delete[] gdkpoints; delete[] gdkpoints;
} }
void wxWindowDC::DrawPolygon( wxList *lines, long xoffset, long yoffset, int WXUNUSED(fillStyle)) void wxWindowDC::DoDrawRectangle( long x, long y, long width, long height )
{
wxCHECK_RET( Ok(), _T("invalid window dc") );
int n = lines->Number();
if (n <= 0) return;
GdkPoint *gdkpoints = new GdkPoint[n];
wxNode *node = lines->First();
int cnt = 0;
while (node)
{
wxPoint *p = (wxPoint *) node->Data();
gdkpoints[cnt].x = XLOG2DEV(p->x + xoffset);
gdkpoints[cnt].y = YLOG2DEV(p->y + yoffset);
node = node->Next();
cnt++;
CalcBoundingBox( p->x + xoffset, p->y + yoffset );
}
if (m_brush.GetStyle() != wxTRANSPARENT)
gdk_draw_polygon (m_window, m_brushGC, TRUE, gdkpoints, n);
// To do: Fillstyle
if (m_pen.GetStyle() != wxTRANSPARENT)
{
int i;
for (i = 0 ; i < n ; i++)
{
gdk_draw_line( m_window, m_penGC,
gdkpoints[i%n].x,
gdkpoints[i%n].y,
gdkpoints[(i+1)%n].x,
gdkpoints[(i+1)%n].y );
}
}
delete[] gdkpoints;
}
void wxWindowDC::DrawRectangle( long x, long y, long width, long height )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -427,7 +364,7 @@ void wxWindowDC::DrawRectangle( long x, long y, long width, long height )
CalcBoundingBox( x + width, y + height ); CalcBoundingBox( x + width, y + height );
} }
void wxWindowDC::DrawRoundedRectangle( long x, long y, long width, long height, double radius ) void wxWindowDC::DoDrawRoundedRectangle( long x, long y, long width, long height, double radius )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -496,7 +433,7 @@ void wxWindowDC::DrawRoundedRectangle( long x, long y, long width, long height,
CalcBoundingBox( x + width, y + height ); CalcBoundingBox( x + width, y + height );
} }
void wxWindowDC::DrawEllipse( long x, long y, long width, long height ) void wxWindowDC::DoDrawEllipse( long x, long y, long width, long height )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -514,26 +451,24 @@ void wxWindowDC::DrawEllipse( long x, long y, long width, long height )
if (m_pen.GetStyle() != wxTRANSPARENT) if (m_pen.GetStyle() != wxTRANSPARENT)
gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, 0, 360*64 ); gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, 0, 360*64 );
CalcBoundingBox( x - width, y - height ); CalcBoundingBox( x - width, y - height );
CalcBoundingBox( x + width, y + height ); CalcBoundingBox( x + width, y + height );
} }
bool wxWindowDC::CanDrawBitmap() const void wxWindowDC::DoDrawIcon( const wxIcon &icon, long x, long y )
{ {
return TRUE; // VZ: egcs 1.0.3 refuses to compile this without cast, no idea why
DoDrawBitmap( (const wxBitmap&)icon, x, y, (bool)TRUE );
} }
void wxWindowDC::DrawIcon( const wxIcon &icon, long x, long y ) void wxWindowDC::DoDrawBitmap( const wxBitmap &bitmap,
{ long x, long y,
DrawBitmap( icon, x, y, TRUE ); bool useMask )
}
void wxWindowDC::DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMask )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
if (!bitmap.Ok()) return; wxCHECK_RET( bitmap.Ok(), _T("invalid bitmap") );
/* scale/translate size and position */ /* scale/translate size and position */
@@ -553,9 +488,9 @@ void wxWindowDC::DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMas
if ((w != ww) || (h != hh)) if ((w != ww) || (h != hh))
{ {
wxImage image( bitmap ); wxImage image( bitmap );
image = image.Scale( ww, hh ); image = image.Scale( ww, hh );
use_bitmap = image.ConvertToBitmap(); use_bitmap = image.ConvertToBitmap();
} }
else else
{ {
@@ -586,7 +521,7 @@ void wxWindowDC::DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMas
if (bm) if (bm)
{ {
gdk_draw_bitmap( m_window, m_penGC, bm, 0, 0, xx, yy, -1, -1 ); gdk_draw_bitmap( m_window, m_penGC, bm, 0, 0, xx, yy, -1, -1 );
} }
} }
/* remove mask again if any */ /* remove mask again if any */
@@ -601,8 +536,9 @@ void wxWindowDC::DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMas
CalcBoundingBox( x + w, y + h ); CalcBoundingBox( x + w, y + h );
} }
bool wxWindowDC::Blit( long xdest, long ydest, long width, long height, bool wxWindowDC::DoBlit( long xdest, long ydest, long width, long height,
wxDC *source, long xsrc, long ysrc, int logical_func, bool useMask ) wxDC *source, long xsrc, long ysrc,
int logical_func, bool useMask )
{ {
/* this is the nth try to get this utterly useless function to /* this is the nth try to get this utterly useless function to
work. it now completely ignores the scaling or translation work. it now completely ignores the scaling or translation
@@ -620,42 +556,42 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
if (srcDC->m_isMemDC) if (srcDC->m_isMemDC)
{ {
if (!memDC->m_selected.Ok()) return FALSE; if (!memDC->m_selected.Ok()) return FALSE;
/* we use the "XCopyArea" way to copy a memory dc into /* we use the "XCopyArea" way to copy a memory dc into
y different window if the memory dc BOTH y different window if the memory dc BOTH
a) doesn't have any mask or its mask isn't used a) doesn't have any mask or its mask isn't used
b) it is clipped b) it is clipped
c) is not 1-bit */ c) is not 1-bit */
if (useMask && (memDC->m_selected.GetMask())) if (useMask && (memDC->m_selected.GetMask()))
{ {
/* we HAVE TO use the direct way for memory dcs /* we HAVE TO use the direct way for memory dcs
that have mask since the XCopyArea doesn't know that have mask since the XCopyArea doesn't know
about masks */ about masks */
use_bitmap_method = TRUE; use_bitmap_method = TRUE;
} }
else if (memDC->m_selected.GetDepth() == 1) else if (memDC->m_selected.GetDepth() == 1)
{ {
/* we HAVE TO use the direct way for memory dcs /* we HAVE TO use the direct way for memory dcs
that are bitmaps because XCopyArea doesn't cope that are bitmaps because XCopyArea doesn't cope
with different bit depths */ with different bit depths */
use_bitmap_method = TRUE; use_bitmap_method = TRUE;
} }
else if ((xsrc == 0) && (ysrc == 0) && else if ((xsrc == 0) && (ysrc == 0) &&
(width == memDC->m_selected.GetWidth()) && (width == memDC->m_selected.GetWidth()) &&
(height == memDC->m_selected.GetHeight())) (height == memDC->m_selected.GetHeight()))
{ {
/* we SHOULD use the direct way if all of the bitmap /* we SHOULD use the direct way if all of the bitmap
in the memory dc is copied in which case XCopyArea in the memory dc is copied in which case XCopyArea
wouldn't be able able to boost performace by reducing wouldn't be able able to boost performace by reducing
the area to be scaled */ the area to be scaled */
use_bitmap_method = TRUE; use_bitmap_method = TRUE;
} }
else else
{ {
use_bitmap_method = FALSE; use_bitmap_method = FALSE;
} }
} }
CalcBoundingBox( xdest, ydest ); CalcBoundingBox( xdest, ydest );
@@ -668,12 +604,12 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
{ {
/* scale/translate bitmap size */ /* scale/translate bitmap size */
long bm_width = memDC->m_selected.GetWidth(); long bm_width = memDC->m_selected.GetWidth();
long bm_height = memDC->m_selected.GetHeight(); long bm_height = memDC->m_selected.GetHeight();
long bm_ww = XLOG2DEVREL( bm_width ); long bm_ww = XLOG2DEVREL( bm_width );
long bm_hh = YLOG2DEVREL( bm_height ); long bm_hh = YLOG2DEVREL( bm_height );
/* scale bitmap if required */ /* scale bitmap if required */
wxBitmap use_bitmap; wxBitmap use_bitmap;
@@ -681,23 +617,23 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
if ((bm_width != bm_ww) || (bm_height != bm_hh)) if ((bm_width != bm_ww) || (bm_height != bm_hh))
{ {
wxImage image( memDC->m_selected ); wxImage image( memDC->m_selected );
image = image.Scale( bm_ww, bm_hh ); image = image.Scale( bm_ww, bm_hh );
use_bitmap = image.ConvertToBitmap(); use_bitmap = image.ConvertToBitmap();
} }
else else
{ {
use_bitmap = memDC->m_selected; use_bitmap = memDC->m_selected;
} }
/* scale/translate size and position */ /* scale/translate size and position */
long xx = XLOG2DEV(xdest); long xx = XLOG2DEV(xdest);
long yy = YLOG2DEV(ydest); long yy = YLOG2DEV(ydest);
long ww = XLOG2DEVREL(width); long ww = XLOG2DEVREL(width);
long hh = YLOG2DEVREL(height); long hh = YLOG2DEVREL(height);
/* apply mask if any */ /* apply mask if any */
GdkBitmap *mask = (GdkBitmap *) NULL; GdkBitmap *mask = (GdkBitmap *) NULL;
@@ -708,7 +644,7 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
gdk_gc_set_clip_mask( m_penGC, mask ); gdk_gc_set_clip_mask( m_penGC, mask );
gdk_gc_set_clip_origin( m_penGC, xx, yy ); gdk_gc_set_clip_origin( m_penGC, xx, yy );
} }
/* draw XPixmap or XBitmap, depending on what the wxBitmap contains */ /* draw XPixmap or XBitmap, depending on what the wxBitmap contains */
GdkPixmap *pm = use_bitmap.GetPixmap(); GdkPixmap *pm = use_bitmap.GetPixmap();
@@ -721,10 +657,10 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
GdkBitmap *bm = use_bitmap.GetBitmap(); GdkBitmap *bm = use_bitmap.GetBitmap();
if (bm) if (bm)
{ {
/* we use the textGC here because blitting a bitmap is done /* we use the textGC here because blitting a bitmap is done
using the current text colour */ using the current text colour */
gdk_draw_bitmap( m_window, m_textGC, bm, xsrc, ysrc, xx, yy, ww, hh ); gdk_draw_bitmap( m_window, m_textGC, bm, xsrc, ysrc, xx, yy, ww, hh );
} }
} }
/* remove mask again if any */ /* remove mask again if any */
@@ -741,59 +677,59 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
long xx = XLOG2DEV(xdest); long xx = XLOG2DEV(xdest);
long yy = YLOG2DEV(ydest); long yy = YLOG2DEV(ydest);
long ww = XLOG2DEVREL(width); long ww = XLOG2DEVREL(width);
long hh = YLOG2DEVREL(height); long hh = YLOG2DEVREL(height);
if ((width != ww) || (height != hh)) if ((width != ww) || (height != hh))
{ {
/* draw source window into a bitmap as we cannot scale /* draw source window into a bitmap as we cannot scale
a window in contrast to a bitmap. this would actually a window in contrast to a bitmap. this would actually
work with memory dcs as well, but we'd lose the mask work with memory dcs as well, but we'd lose the mask
information and waste one step in this process since information and waste one step in this process since
a memory already has a bitmap. all this is slightly a memory already has a bitmap. all this is slightly
inefficient as we could take an XImage directly from inefficient as we could take an XImage directly from
an X window, but we'd then also have to care that an X window, but we'd then also have to care that
the window is not outside the screen (in which case the window is not outside the screen (in which case
we'd get a BadMatch or what not). we'd get a BadMatch or what not).
Is a double XGetImage and combined XGetPixel and Is a double XGetImage and combined XGetPixel and
XPutPixel really faster? I'm not sure. look at wxXt XPutPixel really faster? I'm not sure. look at wxXt
for a different implementation of the same problem. */ for a different implementation of the same problem. */
wxBitmap bitmap( width, height ); wxBitmap bitmap( width, height );
gdk_window_copy_area( bitmap.GetPixmap(), m_penGC, 0, 0, gdk_window_copy_area( bitmap.GetPixmap(), m_penGC, 0, 0,
srcDC->GetWindow(), srcDC->GetWindow(),
xsrc, ysrc, width, height ); xsrc, ysrc, width, height );
/* scale image */ /* scale image */
wxImage image( bitmap ); wxImage image( bitmap );
image = image.Scale( ww, hh ); image = image.Scale( ww, hh );
/* convert to bitmap */ /* convert to bitmap */
bitmap = image.ConvertToBitmap(); bitmap = image.ConvertToBitmap();
/* draw scaled bitmap */ /* draw scaled bitmap */
gdk_draw_pixmap( m_window, m_penGC, bitmap.GetPixmap(), 0, 0, xx, yy, -1, -1 ); gdk_draw_pixmap( m_window, m_penGC, bitmap.GetPixmap(), 0, 0, xx, yy, -1, -1 );
} }
else else
{ {
/* no scaling and not a memory dc with a mask either */ /* no scaling and not a memory dc with a mask either */
gdk_window_copy_area( m_window, m_penGC, xx, yy, gdk_window_copy_area( m_window, m_penGC, xx, yy,
srcDC->GetWindow(), srcDC->GetWindow(),
xsrc, ysrc, width, height ); xsrc, ysrc, width, height );
} }
} }
SetLogicalFunction( old_logical_func ); SetLogicalFunction( old_logical_func );
return TRUE; return TRUE;
} }
void wxWindowDC::DrawText( const wxString &text, long x, long y, bool WXUNUSED(use16) ) void wxWindowDC::DoDrawText( const wxString &text, long x, long y )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -830,14 +766,9 @@ void wxWindowDC::DrawText( const wxString &text, long x, long y, bool WXUNUSED(u
CalcBoundingBox (x, y); CalcBoundingBox (x, y);
} }
bool wxWindowDC::CanGetTextExtent() const
{
return TRUE;
}
void wxWindowDC::GetTextExtent( const wxString &string, long *width, long *height, void wxWindowDC::GetTextExtent( const wxString &string, long *width, long *height,
long *descent, long *externalLeading, long *descent, long *externalLeading,
wxFont *theFont, bool WXUNUSED(use16) ) wxFont *theFont ) const
{ {
wxFont fontToUse = m_font; wxFont fontToUse = m_font;
if (theFont) fontToUse = *theFont; if (theFont) fontToUse = *theFont;
@@ -849,13 +780,13 @@ void wxWindowDC::GetTextExtent( const wxString &string, long *width, long *heigh
if (externalLeading) (*externalLeading) = 0; // ?? if (externalLeading) (*externalLeading) = 0; // ??
} }
long wxWindowDC::GetCharWidth() long wxWindowDC::GetCharWidth() const
{ {
GdkFont *font = m_font.GetInternalFont( m_scaleY ); GdkFont *font = m_font.GetInternalFont( m_scaleY );
return long(gdk_string_width( font, "H" ) / m_scaleX); return long(gdk_string_width( font, "H" ) / m_scaleX);
} }
long wxWindowDC::GetCharHeight() long wxWindowDC::GetCharHeight() const
{ {
GdkFont *font = m_font.GetInternalFont( m_scaleY ); GdkFont *font = m_font.GetInternalFont( m_scaleY );
return long((font->ascent + font->descent) / m_scaleY); return long((font->ascent + font->descent) / m_scaleY);
@@ -877,7 +808,7 @@ void wxWindowDC::Clear()
int width,height; int width,height;
m_owner->GetSize( &width, &height ); m_owner->GetSize( &width, &height );
gdk_draw_rectangle( m_window, m_bgGC, TRUE, 0, 0, width, height ); gdk_draw_rectangle( m_window, m_bgGC, TRUE, 0, 0, width, height );
return; return;
} }
if (m_isMemDC) if (m_isMemDC)
@@ -885,7 +816,7 @@ void wxWindowDC::Clear()
int width,height; int width,height;
GetSize( &width, &height ); GetSize( &width, &height );
gdk_draw_rectangle( m_window, m_bgGC, TRUE, 0, 0, width, height ); gdk_draw_rectangle( m_window, m_bgGC, TRUE, 0, 0, width, height );
return; return;
} }
} }
@@ -979,7 +910,7 @@ void wxWindowDC::SetBrush( const wxBrush &brush )
{ {
if (m_brush.GetStipple()->GetPixmap()) if (m_brush.GetStipple()->GetPixmap())
gdk_gc_set_stipple( m_brushGC, m_brush.GetStipple()->GetPixmap() ); gdk_gc_set_stipple( m_brushGC, m_brush.GetStipple()->GetPixmap() );
else else
gdk_gc_set_stipple( m_brushGC, m_brush.GetStipple()->GetBitmap() ); gdk_gc_set_stipple( m_brushGC, m_brush.GetStipple()->GetBitmap() );
} }
@@ -1113,7 +1044,7 @@ void wxWindowDC::SetPalette( const wxPalette& WXUNUSED(palette) )
wxFAIL_MSG( _T("wxWindowDC::SetPalette not implemented") ); wxFAIL_MSG( _T("wxWindowDC::SetPalette not implemented") );
} }
void wxWindowDC::SetClippingRegion( long x, long y, long width, long height ) void wxWindowDC::DoSetClippingRegion( long x, long y, long width, long height )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -1130,7 +1061,7 @@ void wxWindowDC::SetClippingRegion( long x, long y, long width, long height )
gdk_gc_set_clip_rectangle( m_bgGC, &rect ); gdk_gc_set_clip_rectangle( m_bgGC, &rect );
} }
void wxWindowDC::SetClippingRegion( const wxRegion &region ) void wxWindowDC::DoSetClippingRegionAsRegion( const wxRegion &region )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -1215,11 +1146,20 @@ void wxWindowDC::Destroy()
m_bgGC = (GdkGC*) NULL; m_bgGC = (GdkGC*) NULL;
} }
GdkWindow *wxWindowDC::GetWindow() // Resolution in pixels per logical inch
wxSize wxWindowDC::GetPPI() const
{ {
return m_window; return wxSize(100, 100);
} }
int wxWindowDC::GetDepth() const
{
wxFAIL_MSG(_T("not implemented"));
return -1;
}
#if wxUSE_SPLINE
// ----------------------------------- spline code ---------------------------------------- // ----------------------------------- spline code ----------------------------------------
void wx_quadratic_spline(double a1, double b1, double a2, double b2, void wx_quadratic_spline(double a1, double b1, double a2, double b2,
@@ -1234,8 +1174,8 @@ static void wx_spline_draw_point_array(wxDC *dc);
wxList wx_spline_point_list; wxList wx_spline_point_list;
#define half(z1, z2) ((z1+z2)/2.0) #define half(z1, z2) ((z1+z2)/2.0)
#define THRESHOLD 5 #define THRESHOLD 5
/* iterative version */ /* iterative version */
@@ -1251,16 +1191,16 @@ void wx_quadratic_spline(double a1, double b1, double a2, double b2, double a3,
while (wx_spline_pop(&x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4)) { while (wx_spline_pop(&x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4)) {
xmid = (double)half(x2, x3); xmid = (double)half(x2, x3);
ymid = (double)half(y2, y3); ymid = (double)half(y2, y3);
if (fabs(x1 - xmid) < THRESHOLD && fabs(y1 - ymid) < THRESHOLD && if (fabs(x1 - xmid) < THRESHOLD && fabs(y1 - ymid) < THRESHOLD &&
fabs(xmid - x4) < THRESHOLD && fabs(ymid - y4) < THRESHOLD) { fabs(xmid - x4) < THRESHOLD && fabs(ymid - y4) < THRESHOLD) {
wx_spline_add_point( x1, y1 ); wx_spline_add_point( x1, y1 );
wx_spline_add_point( xmid, ymid ); wx_spline_add_point( xmid, ymid );
} else { } else {
wx_spline_push(xmid, ymid, (double)half(xmid, x3), (double)half(ymid, y3), wx_spline_push(xmid, ymid, (double)half(xmid, x3), (double)half(ymid, y3),
(double)half(x3, x4), (double)half(y3, y4), x4, y4); (double)half(x3, x4), (double)half(y3, y4), x4, y4);
wx_spline_push(x1, y1, (double)half(x1, x2), (double)half(y1, y2), wx_spline_push(x1, y1, (double)half(x1, x2), (double)half(y1, y2),
(double)half(x2, xmid), (double)half(y2, ymid), xmid, ymid); (double)half(x2, xmid), (double)half(y2, ymid), xmid, ymid);
} }
} }
} }
@@ -1299,7 +1239,7 @@ int wx_spline_pop(double *x1, double *y1, double *x2, double *y2,
double *x3, double *y3, double *x4, double *y4) double *x3, double *y3, double *x4, double *y4)
{ {
if (wx_stack_count == 0) if (wx_stack_count == 0)
return (0); return (0);
wx_stack_top--; wx_stack_top--;
wx_stack_count--; wx_stack_count--;
*x1 = wx_stack_top->x1; *x1 = wx_stack_top->x1;
@@ -1335,7 +1275,7 @@ static void wx_spline_draw_point_array(wxDC *dc)
} }
} }
void wxWindowDC::DrawSpline( wxList *points ) void wxWindowDC::DoDrawSpline( wxList *points )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -1364,10 +1304,10 @@ void wxWindowDC::DrawSpline( wxList *points )
while ((node = node->Next()) != NULL) while ((node = node->Next()) != NULL)
{ {
p = (wxPoint *)node->Data(); p = (wxPoint *)node->Data();
x1 = x2; x1 = x2;
y1 = y2; y1 = y2;
x2 = p->x; x2 = p->x;
y2 = p->y; y2 = p->y;
cx4 = (double)(x1 + x2) / 2; cx4 = (double)(x1 + x2) / 2;
cy4 = (double)(y1 + y2) / 2; cy4 = (double)(y1 + y2) / 2;
cx3 = (double)(x1 + cx4) / 2; cx3 = (double)(x1 + cx4) / 2;
@@ -1375,8 +1315,8 @@ void wxWindowDC::DrawSpline( wxList *points )
wx_quadratic_spline(cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4); wx_quadratic_spline(cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4);
cx1 = cx4; cx1 = cx4;
cy1 = cy4; cy1 = cy4;
cx2 = (double)(cx1 + x2) / 2; cx2 = (double)(cx1 + x2) / 2;
cy2 = (double)(cy1 + y2) / 2; cy2 = (double)(cy1 + y2) / 2;
} }
@@ -1387,11 +1327,7 @@ void wxWindowDC::DrawSpline( wxList *points )
wx_spline_draw_point_array( this ); wx_spline_draw_point_array( this );
} }
// Resolution in pixels per logical inch #endif // wxUSE_SPLINE
wxSize wxWindowDC::GetPPI(void) const
{
return wxSize(100, 100);
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// wxPaintDC // wxPaintDC

View File

@@ -38,9 +38,6 @@ wxDC::wxDC()
{ {
m_ok = FALSE; m_ok = FALSE;
m_optimize = FALSE;
m_autoSetting = FALSE;
m_mm_to_pix_x = 1.0; m_mm_to_pix_x = 1.0;
m_mm_to_pix_y = 1.0; m_mm_to_pix_y = 1.0;
@@ -196,41 +193,41 @@ void wxDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
long wxDCBase::DeviceToLogicalX(long x) const long wxDCBase::DeviceToLogicalX(long x) const
{ {
return XDEV2LOG(x); return ((wxDC *)this)->XDEV2LOG(x);
} }
long wxDCBase::DeviceToLogicalY(long y) const long wxDCBase::DeviceToLogicalY(long y) const
{ {
return YDEV2LOG(y); return ((wxDC *)this)->YDEV2LOG(y);
} }
long wxDCBase::DeviceToLogicalXRel(long x) const long wxDCBase::DeviceToLogicalXRel(long x) const
{ {
return XDEV2LOGREL(x); return ((wxDC *)this)->XDEV2LOGREL(x);
} }
long wxDCBase::DeviceToLogicalYRel(long y) const long wxDCBase::DeviceToLogicalYRel(long y) const
{ {
return YDEV2LOGREL(y); return ((wxDC *)this)->YDEV2LOGREL(y);
} }
long wxDCBase::LogicalToDeviceX(long x) const long wxDCBase::LogicalToDeviceX(long x) const
{ {
return XLOG2DEV(x); return ((wxDC *)this)->XLOG2DEV(x);
} }
long wxDCBase::LogicalToDeviceY(long y) const long wxDCBase::LogicalToDeviceY(long y) const
{ {
return YLOG2DEV(y); return ((wxDC *)this)->YLOG2DEV(y);
} }
long wxDCBase::LogicalToDeviceXRel(long x) const long wxDCBase::LogicalToDeviceXRel(long x) const
{ {
return XLOG2DEVREL(x); return ((wxDC *)this)->XLOG2DEVREL(x);
} }
long wxDCBase::LogicalToDeviceYRel(long y) const long wxDCBase::LogicalToDeviceYRel(long y) const
{ {
return YLOG2DEVREL(y); return ((wxDC *)this)->YLOG2DEVREL(y);
} }

View File

@@ -4,7 +4,7 @@
// Author: Robert Roebling // Author: Robert Roebling
// RCS-ID: $Id$ // RCS-ID: $Id$
// Copyright: (c) 1998 Robert Roebling, Markus Holzem, Chris Breeze // Copyright: (c) 1998 Robert Roebling, Markus Holzem, Chris Breeze
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__ #ifdef __GNUG__
@@ -43,16 +43,18 @@ static GdkPixmap **hatch_bitmap = (GdkPixmap **) NULL;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// temporary implementation of the missing GDK function // temporary implementation of the missing GDK function
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
#include "gdk/gdkprivate.h" #include "gdk/gdkprivate.h"
void gdk_draw_bitmap (GdkDrawable *drawable,
GdkGC *gc, void gdk_draw_bitmap (GdkDrawable *drawable,
GdkDrawable *src, GdkGC *gc,
gint xsrc, GdkDrawable *src,
gint ysrc, gint xsrc,
gint xdest, gint ysrc,
gint ydest, gint xdest,
gint width, gint ydest,
gint height) gint width,
gint height)
{ {
GdkWindowPrivate *drawable_private; GdkWindowPrivate *drawable_private;
GdkWindowPrivate *src_private; GdkWindowPrivate *src_private;
@@ -66,27 +68,27 @@ void gdk_draw_bitmap (GdkDrawable *drawable,
src_private = (GdkWindowPrivate*) src; src_private = (GdkWindowPrivate*) src;
if (drawable_private->destroyed || src_private->destroyed) if (drawable_private->destroyed || src_private->destroyed)
return; return;
gc_private = (GdkGCPrivate*) gc; gc_private = (GdkGCPrivate*) gc;
if (width == -1) width = src_private->width; if (width == -1) width = src_private->width;
if (height == -1) height = src_private->height; if (height == -1) height = src_private->height;
XCopyPlane( drawable_private->xdisplay, XCopyPlane( drawable_private->xdisplay,
src_private->xwindow, src_private->xwindow,
drawable_private->xwindow, drawable_private->xwindow,
gc_private->xgc, gc_private->xgc,
xsrc, ysrc, xsrc, ysrc,
width, height, width, height,
xdest, ydest, xdest, ydest,
1 ); 1 );
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// wxWindowDC // wxWindowDC
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxWindowDC,wxDC) IMPLEMENT_DYNAMIC_CLASS(wxWindowDC, wxDC)
wxWindowDC::wxWindowDC() wxWindowDC::wxWindowDC()
{ {
@@ -108,7 +110,8 @@ wxWindowDC::wxWindowDC( wxWindow *window )
m_cmap = (GdkColormap *) NULL; m_cmap = (GdkColormap *) NULL;
m_owner = (wxWindow *)NULL; m_owner = (wxWindow *)NULL;
if (!window) return; if (!window)
return;
GtkWidget *widget = window->m_wxwindow; GtkWidget *widget = window->m_wxwindow;
if (!widget) if (!widget)
@@ -125,7 +128,8 @@ wxWindowDC::wxWindowDC( wxWindow *window )
} }
/* still not realized ? */ /* still not realized ? */
if (!m_window) return; if (!m_window)
return;
if (window->m_wxwindow) if (window->m_wxwindow)
m_cmap = gtk_widget_get_colormap( window->m_wxwindow ); m_cmap = gtk_widget_get_colormap( window->m_wxwindow );
@@ -151,19 +155,19 @@ wxWindowDC::~wxWindowDC()
Destroy(); Destroy();
} }
void wxWindowDC::FloodFill( long WXUNUSED(x), long WXUNUSED(y), void wxWindowDC::DoFloodFill( long WXUNUSED(x), long WXUNUSED(y),
const wxColour &WXUNUSED(col), int WXUNUSED(style) ) const wxColour &WXUNUSED(col), int WXUNUSED(style) )
{ {
wxFAIL_MSG( _T("wxWindowDC::FloodFill not implemented") ); wxFAIL_MSG( _T("wxWindowDC::DoFloodFill not implemented") );
} }
bool wxWindowDC::GetPixel( long WXUNUSED(x1), long WXUNUSED(y1), wxColour *WXUNUSED(col) ) const bool wxWindowDC::DoGetPixel( long WXUNUSED(x1), long WXUNUSED(y1), wxColour *WXUNUSED(col) ) const
{ {
wxFAIL_MSG( _T("wxWindowDC::GetPixel not implemented") ); wxFAIL_MSG( _T("wxWindowDC::DoGetPixel not implemented") );
return FALSE; return FALSE;
} }
void wxWindowDC::DrawLine( long x1, long y1, long x2, long y2 ) void wxWindowDC::DoDrawLine( long x1, long y1, long x2, long y2 )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -171,13 +175,13 @@ void wxWindowDC::DrawLine( long x1, long y1, long x2, long y2 )
{ {
gdk_draw_line( m_window, m_penGC, gdk_draw_line( m_window, m_penGC,
XLOG2DEV(x1), YLOG2DEV(y1), XLOG2DEV(x2), YLOG2DEV(y2) ); XLOG2DEV(x1), YLOG2DEV(y1), XLOG2DEV(x2), YLOG2DEV(y2) );
CalcBoundingBox(x1, y1); CalcBoundingBox(x1, y1);
CalcBoundingBox(x2, y2); CalcBoundingBox(x2, y2);
} }
} }
void wxWindowDC::CrossHair( long x, long y ) void wxWindowDC::DoCrossHair( long x, long y )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -193,7 +197,8 @@ void wxWindowDC::CrossHair( long x, long y )
} }
} }
void wxWindowDC::DrawArc( long x1, long y1, long x2, long y2, long xc, long yc ) void wxWindowDC::DoDrawArc( long x1, long y1, long x2, long y2,
long xc, long yc )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -222,11 +227,11 @@ void wxWindowDC::DrawArc( long x1, long y1, long x2, long y2, long xc, long yc )
else else
{ {
radius1 = (xx1 - xxc == 0) ? radius1 = (xx1 - xxc == 0) ?
(yy1 - yyc < 0) ? 90.0 : -90.0 : (yy1 - yyc < 0) ? 90.0 : -90.0 :
-atan2(double(yy1-yyc), double(xx1-xxc)) * RAD2DEG; -atan2(double(yy1-yyc), double(xx1-xxc)) * RAD2DEG;
radius2 = (xx2 - xxc == 0) ? radius2 = (xx2 - xxc == 0) ?
(yy2 - yyc < 0) ? 90.0 : -90.0 : (yy2 - yyc < 0) ? 90.0 : -90.0 :
-atan2(double(yy2-yyc), double(xx2-xxc)) * RAD2DEG; -atan2(double(yy2-yyc), double(xx2-xxc)) * RAD2DEG;
} }
long alpha1 = long(radius1 * 64.0); long alpha1 = long(radius1 * 64.0);
long alpha2 = long((radius2 - radius1) * 64.0); long alpha2 = long((radius2 - radius1) * 64.0);
@@ -243,7 +248,7 @@ void wxWindowDC::DrawArc( long x1, long y1, long x2, long y2, long xc, long yc )
CalcBoundingBox (x2, y2); CalcBoundingBox (x2, y2);
} }
void wxWindowDC::DrawEllipticArc( long x, long y, long width, long height, double sa, double ea ) void wxWindowDC::DoDrawEllipticArc( long x, long y, long width, long height, double sa, double ea )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -263,22 +268,22 @@ void wxWindowDC::DrawEllipticArc( long x, long y, long width, long height, doubl
if (m_pen.GetStyle() != wxTRANSPARENT) if (m_pen.GetStyle() != wxTRANSPARENT)
gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, start, end ); gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, start, end );
CalcBoundingBox (x, y); CalcBoundingBox (x, y);
CalcBoundingBox (x + width, y + height); CalcBoundingBox (x + width, y + height);
} }
void wxWindowDC::DrawPoint( long x, long y ) void wxWindowDC::DoDrawPoint( long x, long y )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
if (m_pen.GetStyle() != wxTRANSPARENT) if (m_pen.GetStyle() != wxTRANSPARENT)
gdk_draw_point( m_window, m_penGC, XLOG2DEV(x), YLOG2DEV(y) ); gdk_draw_point( m_window, m_penGC, XLOG2DEV(x), YLOG2DEV(y) );
CalcBoundingBox (x, y); CalcBoundingBox (x, y);
} }
void wxWindowDC::DrawLines( int n, wxPoint points[], long xoffset, long yoffset ) void wxWindowDC::DoDrawLines( int n, wxPoint points[], long xoffset, long yoffset )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -294,39 +299,12 @@ void wxWindowDC::DrawLines( int n, wxPoint points[], long xoffset, long yoffset
long y1 = YLOG2DEV(points[i].y + yoffset); // oh, what a waste long y1 = YLOG2DEV(points[i].y + yoffset); // oh, what a waste
long y2 = YLOG2DEV(points[i+1].y + yoffset); long y2 = YLOG2DEV(points[i+1].y + yoffset);
gdk_draw_line( m_window, m_penGC, x1, y1, x2, y2 ); gdk_draw_line( m_window, m_penGC, x1, y1, x2, y2 );
CalcBoundingBox( points[i+1].x + xoffset, points[i+1].y + yoffset ); CalcBoundingBox( points[i+1].x + xoffset, points[i+1].y + yoffset );
} }
} }
void wxWindowDC::DrawLines( wxList *points, long xoffset, long yoffset ) void wxWindowDC::DoDrawPolygon( int n, wxPoint points[], long xoffset, long yoffset, int WXUNUSED(fillStyle) )
{
wxCHECK_RET( Ok(), _T("invalid window dc") );
if (m_pen.GetStyle() == wxTRANSPARENT) return;
wxNode *node = points->First();
if (!node) return;
wxPoint *pt = (wxPoint*)node->Data();
CalcBoundingBox( pt->x + xoffset, pt->y + yoffset );
while (node->Next())
{
wxPoint *point = (wxPoint*)node->Data();
wxPoint *npoint = (wxPoint*)node->Next()->Data();
long x1 = XLOG2DEV(point->x + xoffset);
long x2 = XLOG2DEV(npoint->x + xoffset);
long y1 = YLOG2DEV(point->y + yoffset); // and a waste again...
long y2 = YLOG2DEV(npoint->y + yoffset);
gdk_draw_line( m_window, m_penGC, x1, y1, x2, y2 );
node = node->Next();
CalcBoundingBox( npoint->x + xoffset, npoint->y + yoffset );
}
}
void wxWindowDC::DrawPolygon( int n, wxPoint points[], long xoffset, long yoffset, int WXUNUSED(fillStyle) )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -338,7 +316,7 @@ void wxWindowDC::DrawPolygon( int n, wxPoint points[], long xoffset, long yoffse
{ {
gdkpoints[i].x = XLOG2DEV(points[i].x + xoffset); gdkpoints[i].x = XLOG2DEV(points[i].x + xoffset);
gdkpoints[i].y = YLOG2DEV(points[i].y + yoffset); gdkpoints[i].y = YLOG2DEV(points[i].y + yoffset);
CalcBoundingBox( points[i].x + xoffset, points[i].y + yoffset ); CalcBoundingBox( points[i].x + xoffset, points[i].y + yoffset );
} }
@@ -349,59 +327,18 @@ void wxWindowDC::DrawPolygon( int n, wxPoint points[], long xoffset, long yoffse
if (m_pen.GetStyle() != wxTRANSPARENT) if (m_pen.GetStyle() != wxTRANSPARENT)
for (i = 0 ; i < n ; i++) for (i = 0 ; i < n ; i++)
{ {
gdk_draw_line( m_window, m_penGC, gdk_draw_line( m_window, m_penGC,
gdkpoints[i%n].x, gdkpoints[i%n].x,
gdkpoints[i%n].y, gdkpoints[i%n].y,
gdkpoints[(i+1)%n].x, gdkpoints[(i+1)%n].x,
gdkpoints[(i+1)%n].y); gdkpoints[(i+1)%n].y);
} }
delete[] gdkpoints; delete[] gdkpoints;
} }
void wxWindowDC::DrawPolygon( wxList *lines, long xoffset, long yoffset, int WXUNUSED(fillStyle)) void wxWindowDC::DoDrawRectangle( long x, long y, long width, long height )
{
wxCHECK_RET( Ok(), _T("invalid window dc") );
int n = lines->Number();
if (n <= 0) return;
GdkPoint *gdkpoints = new GdkPoint[n];
wxNode *node = lines->First();
int cnt = 0;
while (node)
{
wxPoint *p = (wxPoint *) node->Data();
gdkpoints[cnt].x = XLOG2DEV(p->x + xoffset);
gdkpoints[cnt].y = YLOG2DEV(p->y + yoffset);
node = node->Next();
cnt++;
CalcBoundingBox( p->x + xoffset, p->y + yoffset );
}
if (m_brush.GetStyle() != wxTRANSPARENT)
gdk_draw_polygon (m_window, m_brushGC, TRUE, gdkpoints, n);
// To do: Fillstyle
if (m_pen.GetStyle() != wxTRANSPARENT)
{
int i;
for (i = 0 ; i < n ; i++)
{
gdk_draw_line( m_window, m_penGC,
gdkpoints[i%n].x,
gdkpoints[i%n].y,
gdkpoints[(i+1)%n].x,
gdkpoints[(i+1)%n].y );
}
}
delete[] gdkpoints;
}
void wxWindowDC::DrawRectangle( long x, long y, long width, long height )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -427,7 +364,7 @@ void wxWindowDC::DrawRectangle( long x, long y, long width, long height )
CalcBoundingBox( x + width, y + height ); CalcBoundingBox( x + width, y + height );
} }
void wxWindowDC::DrawRoundedRectangle( long x, long y, long width, long height, double radius ) void wxWindowDC::DoDrawRoundedRectangle( long x, long y, long width, long height, double radius )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -496,7 +433,7 @@ void wxWindowDC::DrawRoundedRectangle( long x, long y, long width, long height,
CalcBoundingBox( x + width, y + height ); CalcBoundingBox( x + width, y + height );
} }
void wxWindowDC::DrawEllipse( long x, long y, long width, long height ) void wxWindowDC::DoDrawEllipse( long x, long y, long width, long height )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -514,26 +451,24 @@ void wxWindowDC::DrawEllipse( long x, long y, long width, long height )
if (m_pen.GetStyle() != wxTRANSPARENT) if (m_pen.GetStyle() != wxTRANSPARENT)
gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, 0, 360*64 ); gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, 0, 360*64 );
CalcBoundingBox( x - width, y - height ); CalcBoundingBox( x - width, y - height );
CalcBoundingBox( x + width, y + height ); CalcBoundingBox( x + width, y + height );
} }
bool wxWindowDC::CanDrawBitmap() const void wxWindowDC::DoDrawIcon( const wxIcon &icon, long x, long y )
{ {
return TRUE; // VZ: egcs 1.0.3 refuses to compile this without cast, no idea why
DoDrawBitmap( (const wxBitmap&)icon, x, y, (bool)TRUE );
} }
void wxWindowDC::DrawIcon( const wxIcon &icon, long x, long y ) void wxWindowDC::DoDrawBitmap( const wxBitmap &bitmap,
{ long x, long y,
DrawBitmap( icon, x, y, TRUE ); bool useMask )
}
void wxWindowDC::DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMask )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
if (!bitmap.Ok()) return; wxCHECK_RET( bitmap.Ok(), _T("invalid bitmap") );
/* scale/translate size and position */ /* scale/translate size and position */
@@ -553,9 +488,9 @@ void wxWindowDC::DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMas
if ((w != ww) || (h != hh)) if ((w != ww) || (h != hh))
{ {
wxImage image( bitmap ); wxImage image( bitmap );
image = image.Scale( ww, hh ); image = image.Scale( ww, hh );
use_bitmap = image.ConvertToBitmap(); use_bitmap = image.ConvertToBitmap();
} }
else else
{ {
@@ -586,7 +521,7 @@ void wxWindowDC::DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMas
if (bm) if (bm)
{ {
gdk_draw_bitmap( m_window, m_penGC, bm, 0, 0, xx, yy, -1, -1 ); gdk_draw_bitmap( m_window, m_penGC, bm, 0, 0, xx, yy, -1, -1 );
} }
} }
/* remove mask again if any */ /* remove mask again if any */
@@ -601,8 +536,9 @@ void wxWindowDC::DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMas
CalcBoundingBox( x + w, y + h ); CalcBoundingBox( x + w, y + h );
} }
bool wxWindowDC::Blit( long xdest, long ydest, long width, long height, bool wxWindowDC::DoBlit( long xdest, long ydest, long width, long height,
wxDC *source, long xsrc, long ysrc, int logical_func, bool useMask ) wxDC *source, long xsrc, long ysrc,
int logical_func, bool useMask )
{ {
/* this is the nth try to get this utterly useless function to /* this is the nth try to get this utterly useless function to
work. it now completely ignores the scaling or translation work. it now completely ignores the scaling or translation
@@ -620,42 +556,42 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
if (srcDC->m_isMemDC) if (srcDC->m_isMemDC)
{ {
if (!memDC->m_selected.Ok()) return FALSE; if (!memDC->m_selected.Ok()) return FALSE;
/* we use the "XCopyArea" way to copy a memory dc into /* we use the "XCopyArea" way to copy a memory dc into
y different window if the memory dc BOTH y different window if the memory dc BOTH
a) doesn't have any mask or its mask isn't used a) doesn't have any mask or its mask isn't used
b) it is clipped b) it is clipped
c) is not 1-bit */ c) is not 1-bit */
if (useMask && (memDC->m_selected.GetMask())) if (useMask && (memDC->m_selected.GetMask()))
{ {
/* we HAVE TO use the direct way for memory dcs /* we HAVE TO use the direct way for memory dcs
that have mask since the XCopyArea doesn't know that have mask since the XCopyArea doesn't know
about masks */ about masks */
use_bitmap_method = TRUE; use_bitmap_method = TRUE;
} }
else if (memDC->m_selected.GetDepth() == 1) else if (memDC->m_selected.GetDepth() == 1)
{ {
/* we HAVE TO use the direct way for memory dcs /* we HAVE TO use the direct way for memory dcs
that are bitmaps because XCopyArea doesn't cope that are bitmaps because XCopyArea doesn't cope
with different bit depths */ with different bit depths */
use_bitmap_method = TRUE; use_bitmap_method = TRUE;
} }
else if ((xsrc == 0) && (ysrc == 0) && else if ((xsrc == 0) && (ysrc == 0) &&
(width == memDC->m_selected.GetWidth()) && (width == memDC->m_selected.GetWidth()) &&
(height == memDC->m_selected.GetHeight())) (height == memDC->m_selected.GetHeight()))
{ {
/* we SHOULD use the direct way if all of the bitmap /* we SHOULD use the direct way if all of the bitmap
in the memory dc is copied in which case XCopyArea in the memory dc is copied in which case XCopyArea
wouldn't be able able to boost performace by reducing wouldn't be able able to boost performace by reducing
the area to be scaled */ the area to be scaled */
use_bitmap_method = TRUE; use_bitmap_method = TRUE;
} }
else else
{ {
use_bitmap_method = FALSE; use_bitmap_method = FALSE;
} }
} }
CalcBoundingBox( xdest, ydest ); CalcBoundingBox( xdest, ydest );
@@ -668,12 +604,12 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
{ {
/* scale/translate bitmap size */ /* scale/translate bitmap size */
long bm_width = memDC->m_selected.GetWidth(); long bm_width = memDC->m_selected.GetWidth();
long bm_height = memDC->m_selected.GetHeight(); long bm_height = memDC->m_selected.GetHeight();
long bm_ww = XLOG2DEVREL( bm_width ); long bm_ww = XLOG2DEVREL( bm_width );
long bm_hh = YLOG2DEVREL( bm_height ); long bm_hh = YLOG2DEVREL( bm_height );
/* scale bitmap if required */ /* scale bitmap if required */
wxBitmap use_bitmap; wxBitmap use_bitmap;
@@ -681,23 +617,23 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
if ((bm_width != bm_ww) || (bm_height != bm_hh)) if ((bm_width != bm_ww) || (bm_height != bm_hh))
{ {
wxImage image( memDC->m_selected ); wxImage image( memDC->m_selected );
image = image.Scale( bm_ww, bm_hh ); image = image.Scale( bm_ww, bm_hh );
use_bitmap = image.ConvertToBitmap(); use_bitmap = image.ConvertToBitmap();
} }
else else
{ {
use_bitmap = memDC->m_selected; use_bitmap = memDC->m_selected;
} }
/* scale/translate size and position */ /* scale/translate size and position */
long xx = XLOG2DEV(xdest); long xx = XLOG2DEV(xdest);
long yy = YLOG2DEV(ydest); long yy = YLOG2DEV(ydest);
long ww = XLOG2DEVREL(width); long ww = XLOG2DEVREL(width);
long hh = YLOG2DEVREL(height); long hh = YLOG2DEVREL(height);
/* apply mask if any */ /* apply mask if any */
GdkBitmap *mask = (GdkBitmap *) NULL; GdkBitmap *mask = (GdkBitmap *) NULL;
@@ -708,7 +644,7 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
gdk_gc_set_clip_mask( m_penGC, mask ); gdk_gc_set_clip_mask( m_penGC, mask );
gdk_gc_set_clip_origin( m_penGC, xx, yy ); gdk_gc_set_clip_origin( m_penGC, xx, yy );
} }
/* draw XPixmap or XBitmap, depending on what the wxBitmap contains */ /* draw XPixmap or XBitmap, depending on what the wxBitmap contains */
GdkPixmap *pm = use_bitmap.GetPixmap(); GdkPixmap *pm = use_bitmap.GetPixmap();
@@ -721,10 +657,10 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
GdkBitmap *bm = use_bitmap.GetBitmap(); GdkBitmap *bm = use_bitmap.GetBitmap();
if (bm) if (bm)
{ {
/* we use the textGC here because blitting a bitmap is done /* we use the textGC here because blitting a bitmap is done
using the current text colour */ using the current text colour */
gdk_draw_bitmap( m_window, m_textGC, bm, xsrc, ysrc, xx, yy, ww, hh ); gdk_draw_bitmap( m_window, m_textGC, bm, xsrc, ysrc, xx, yy, ww, hh );
} }
} }
/* remove mask again if any */ /* remove mask again if any */
@@ -741,59 +677,59 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
long xx = XLOG2DEV(xdest); long xx = XLOG2DEV(xdest);
long yy = YLOG2DEV(ydest); long yy = YLOG2DEV(ydest);
long ww = XLOG2DEVREL(width); long ww = XLOG2DEVREL(width);
long hh = YLOG2DEVREL(height); long hh = YLOG2DEVREL(height);
if ((width != ww) || (height != hh)) if ((width != ww) || (height != hh))
{ {
/* draw source window into a bitmap as we cannot scale /* draw source window into a bitmap as we cannot scale
a window in contrast to a bitmap. this would actually a window in contrast to a bitmap. this would actually
work with memory dcs as well, but we'd lose the mask work with memory dcs as well, but we'd lose the mask
information and waste one step in this process since information and waste one step in this process since
a memory already has a bitmap. all this is slightly a memory already has a bitmap. all this is slightly
inefficient as we could take an XImage directly from inefficient as we could take an XImage directly from
an X window, but we'd then also have to care that an X window, but we'd then also have to care that
the window is not outside the screen (in which case the window is not outside the screen (in which case
we'd get a BadMatch or what not). we'd get a BadMatch or what not).
Is a double XGetImage and combined XGetPixel and Is a double XGetImage and combined XGetPixel and
XPutPixel really faster? I'm not sure. look at wxXt XPutPixel really faster? I'm not sure. look at wxXt
for a different implementation of the same problem. */ for a different implementation of the same problem. */
wxBitmap bitmap( width, height ); wxBitmap bitmap( width, height );
gdk_window_copy_area( bitmap.GetPixmap(), m_penGC, 0, 0, gdk_window_copy_area( bitmap.GetPixmap(), m_penGC, 0, 0,
srcDC->GetWindow(), srcDC->GetWindow(),
xsrc, ysrc, width, height ); xsrc, ysrc, width, height );
/* scale image */ /* scale image */
wxImage image( bitmap ); wxImage image( bitmap );
image = image.Scale( ww, hh ); image = image.Scale( ww, hh );
/* convert to bitmap */ /* convert to bitmap */
bitmap = image.ConvertToBitmap(); bitmap = image.ConvertToBitmap();
/* draw scaled bitmap */ /* draw scaled bitmap */
gdk_draw_pixmap( m_window, m_penGC, bitmap.GetPixmap(), 0, 0, xx, yy, -1, -1 ); gdk_draw_pixmap( m_window, m_penGC, bitmap.GetPixmap(), 0, 0, xx, yy, -1, -1 );
} }
else else
{ {
/* no scaling and not a memory dc with a mask either */ /* no scaling and not a memory dc with a mask either */
gdk_window_copy_area( m_window, m_penGC, xx, yy, gdk_window_copy_area( m_window, m_penGC, xx, yy,
srcDC->GetWindow(), srcDC->GetWindow(),
xsrc, ysrc, width, height ); xsrc, ysrc, width, height );
} }
} }
SetLogicalFunction( old_logical_func ); SetLogicalFunction( old_logical_func );
return TRUE; return TRUE;
} }
void wxWindowDC::DrawText( const wxString &text, long x, long y, bool WXUNUSED(use16) ) void wxWindowDC::DoDrawText( const wxString &text, long x, long y )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -830,14 +766,9 @@ void wxWindowDC::DrawText( const wxString &text, long x, long y, bool WXUNUSED(u
CalcBoundingBox (x, y); CalcBoundingBox (x, y);
} }
bool wxWindowDC::CanGetTextExtent() const
{
return TRUE;
}
void wxWindowDC::GetTextExtent( const wxString &string, long *width, long *height, void wxWindowDC::GetTextExtent( const wxString &string, long *width, long *height,
long *descent, long *externalLeading, long *descent, long *externalLeading,
wxFont *theFont, bool WXUNUSED(use16) ) wxFont *theFont ) const
{ {
wxFont fontToUse = m_font; wxFont fontToUse = m_font;
if (theFont) fontToUse = *theFont; if (theFont) fontToUse = *theFont;
@@ -849,13 +780,13 @@ void wxWindowDC::GetTextExtent( const wxString &string, long *width, long *heigh
if (externalLeading) (*externalLeading) = 0; // ?? if (externalLeading) (*externalLeading) = 0; // ??
} }
long wxWindowDC::GetCharWidth() long wxWindowDC::GetCharWidth() const
{ {
GdkFont *font = m_font.GetInternalFont( m_scaleY ); GdkFont *font = m_font.GetInternalFont( m_scaleY );
return long(gdk_string_width( font, "H" ) / m_scaleX); return long(gdk_string_width( font, "H" ) / m_scaleX);
} }
long wxWindowDC::GetCharHeight() long wxWindowDC::GetCharHeight() const
{ {
GdkFont *font = m_font.GetInternalFont( m_scaleY ); GdkFont *font = m_font.GetInternalFont( m_scaleY );
return long((font->ascent + font->descent) / m_scaleY); return long((font->ascent + font->descent) / m_scaleY);
@@ -877,7 +808,7 @@ void wxWindowDC::Clear()
int width,height; int width,height;
m_owner->GetSize( &width, &height ); m_owner->GetSize( &width, &height );
gdk_draw_rectangle( m_window, m_bgGC, TRUE, 0, 0, width, height ); gdk_draw_rectangle( m_window, m_bgGC, TRUE, 0, 0, width, height );
return; return;
} }
if (m_isMemDC) if (m_isMemDC)
@@ -885,7 +816,7 @@ void wxWindowDC::Clear()
int width,height; int width,height;
GetSize( &width, &height ); GetSize( &width, &height );
gdk_draw_rectangle( m_window, m_bgGC, TRUE, 0, 0, width, height ); gdk_draw_rectangle( m_window, m_bgGC, TRUE, 0, 0, width, height );
return; return;
} }
} }
@@ -979,7 +910,7 @@ void wxWindowDC::SetBrush( const wxBrush &brush )
{ {
if (m_brush.GetStipple()->GetPixmap()) if (m_brush.GetStipple()->GetPixmap())
gdk_gc_set_stipple( m_brushGC, m_brush.GetStipple()->GetPixmap() ); gdk_gc_set_stipple( m_brushGC, m_brush.GetStipple()->GetPixmap() );
else else
gdk_gc_set_stipple( m_brushGC, m_brush.GetStipple()->GetBitmap() ); gdk_gc_set_stipple( m_brushGC, m_brush.GetStipple()->GetBitmap() );
} }
@@ -1113,7 +1044,7 @@ void wxWindowDC::SetPalette( const wxPalette& WXUNUSED(palette) )
wxFAIL_MSG( _T("wxWindowDC::SetPalette not implemented") ); wxFAIL_MSG( _T("wxWindowDC::SetPalette not implemented") );
} }
void wxWindowDC::SetClippingRegion( long x, long y, long width, long height ) void wxWindowDC::DoSetClippingRegion( long x, long y, long width, long height )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -1130,7 +1061,7 @@ void wxWindowDC::SetClippingRegion( long x, long y, long width, long height )
gdk_gc_set_clip_rectangle( m_bgGC, &rect ); gdk_gc_set_clip_rectangle( m_bgGC, &rect );
} }
void wxWindowDC::SetClippingRegion( const wxRegion &region ) void wxWindowDC::DoSetClippingRegionAsRegion( const wxRegion &region )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -1215,11 +1146,20 @@ void wxWindowDC::Destroy()
m_bgGC = (GdkGC*) NULL; m_bgGC = (GdkGC*) NULL;
} }
GdkWindow *wxWindowDC::GetWindow() // Resolution in pixels per logical inch
wxSize wxWindowDC::GetPPI() const
{ {
return m_window; return wxSize(100, 100);
} }
int wxWindowDC::GetDepth() const
{
wxFAIL_MSG(_T("not implemented"));
return -1;
}
#if wxUSE_SPLINE
// ----------------------------------- spline code ---------------------------------------- // ----------------------------------- spline code ----------------------------------------
void wx_quadratic_spline(double a1, double b1, double a2, double b2, void wx_quadratic_spline(double a1, double b1, double a2, double b2,
@@ -1234,8 +1174,8 @@ static void wx_spline_draw_point_array(wxDC *dc);
wxList wx_spline_point_list; wxList wx_spline_point_list;
#define half(z1, z2) ((z1+z2)/2.0) #define half(z1, z2) ((z1+z2)/2.0)
#define THRESHOLD 5 #define THRESHOLD 5
/* iterative version */ /* iterative version */
@@ -1251,16 +1191,16 @@ void wx_quadratic_spline(double a1, double b1, double a2, double b2, double a3,
while (wx_spline_pop(&x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4)) { while (wx_spline_pop(&x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4)) {
xmid = (double)half(x2, x3); xmid = (double)half(x2, x3);
ymid = (double)half(y2, y3); ymid = (double)half(y2, y3);
if (fabs(x1 - xmid) < THRESHOLD && fabs(y1 - ymid) < THRESHOLD && if (fabs(x1 - xmid) < THRESHOLD && fabs(y1 - ymid) < THRESHOLD &&
fabs(xmid - x4) < THRESHOLD && fabs(ymid - y4) < THRESHOLD) { fabs(xmid - x4) < THRESHOLD && fabs(ymid - y4) < THRESHOLD) {
wx_spline_add_point( x1, y1 ); wx_spline_add_point( x1, y1 );
wx_spline_add_point( xmid, ymid ); wx_spline_add_point( xmid, ymid );
} else { } else {
wx_spline_push(xmid, ymid, (double)half(xmid, x3), (double)half(ymid, y3), wx_spline_push(xmid, ymid, (double)half(xmid, x3), (double)half(ymid, y3),
(double)half(x3, x4), (double)half(y3, y4), x4, y4); (double)half(x3, x4), (double)half(y3, y4), x4, y4);
wx_spline_push(x1, y1, (double)half(x1, x2), (double)half(y1, y2), wx_spline_push(x1, y1, (double)half(x1, x2), (double)half(y1, y2),
(double)half(x2, xmid), (double)half(y2, ymid), xmid, ymid); (double)half(x2, xmid), (double)half(y2, ymid), xmid, ymid);
} }
} }
} }
@@ -1299,7 +1239,7 @@ int wx_spline_pop(double *x1, double *y1, double *x2, double *y2,
double *x3, double *y3, double *x4, double *y4) double *x3, double *y3, double *x4, double *y4)
{ {
if (wx_stack_count == 0) if (wx_stack_count == 0)
return (0); return (0);
wx_stack_top--; wx_stack_top--;
wx_stack_count--; wx_stack_count--;
*x1 = wx_stack_top->x1; *x1 = wx_stack_top->x1;
@@ -1335,7 +1275,7 @@ static void wx_spline_draw_point_array(wxDC *dc)
} }
} }
void wxWindowDC::DrawSpline( wxList *points ) void wxWindowDC::DoDrawSpline( wxList *points )
{ {
wxCHECK_RET( Ok(), _T("invalid window dc") ); wxCHECK_RET( Ok(), _T("invalid window dc") );
@@ -1364,10 +1304,10 @@ void wxWindowDC::DrawSpline( wxList *points )
while ((node = node->Next()) != NULL) while ((node = node->Next()) != NULL)
{ {
p = (wxPoint *)node->Data(); p = (wxPoint *)node->Data();
x1 = x2; x1 = x2;
y1 = y2; y1 = y2;
x2 = p->x; x2 = p->x;
y2 = p->y; y2 = p->y;
cx4 = (double)(x1 + x2) / 2; cx4 = (double)(x1 + x2) / 2;
cy4 = (double)(y1 + y2) / 2; cy4 = (double)(y1 + y2) / 2;
cx3 = (double)(x1 + cx4) / 2; cx3 = (double)(x1 + cx4) / 2;
@@ -1375,8 +1315,8 @@ void wxWindowDC::DrawSpline( wxList *points )
wx_quadratic_spline(cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4); wx_quadratic_spline(cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4);
cx1 = cx4; cx1 = cx4;
cy1 = cy4; cy1 = cy4;
cx2 = (double)(cx1 + x2) / 2; cx2 = (double)(cx1 + x2) / 2;
cy2 = (double)(cy1 + y2) / 2; cy2 = (double)(cy1 + y2) / 2;
} }
@@ -1387,11 +1327,7 @@ void wxWindowDC::DrawSpline( wxList *points )
wx_spline_draw_point_array( this ); wx_spline_draw_point_array( this );
} }
// Resolution in pixels per logical inch #endif // wxUSE_SPLINE
wxSize wxWindowDC::GetPPI(void) const
{
return wxSize(100, 100);
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// wxPaintDC // wxPaintDC