From 463c1fa1a916b1a262023601f3913fb12c4bcc8f Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Thu, 3 Dec 1998 15:14:45 +0000 Subject: [PATCH] wxWindow::ReParent() wxDC::SetClippingRegio( region) lots if wxDC inline with wxPoint git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1104 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/dc.h | 290 +++++++++++++++++++++++-------------- include/wx/gtk/dcclient.h | 6 +- include/wx/gtk/window.h | 1 + include/wx/gtk1/dc.h | 290 +++++++++++++++++++++++-------------- include/wx/gtk1/dcclient.h | 6 +- include/wx/gtk1/window.h | 1 + include/wx/postscrp.h | 11 +- src/common/postscrp.cpp | 10 +- src/generic/imaglist.cpp | 3 +- src/gtk.inc | 4 +- src/gtk/dc.cpp | 4 - src/gtk/dcclient.cpp | 66 +++++++-- src/gtk/win_gtk.c | 2 +- src/gtk/window.cpp | 141 ++++++++++-------- src/gtk1/dc.cpp | 4 - src/gtk1/dcclient.cpp | 66 +++++++-- src/gtk1/win_gtk.c | 2 +- src/gtk1/window.cpp | 141 ++++++++++-------- wx-config.in | 2 +- 19 files changed, 660 insertions(+), 390 deletions(-) diff --git a/include/wx/gtk/dc.h b/include/wx/gtk/dc.h index 1c778cfbf8..7870f30bd5 100644 --- a/include/wx/gtk/dc.h +++ b/include/wx/gtk/dc.h @@ -57,133 +57,211 @@ class wxDC: public wxObject { DECLARE_ABSTRACT_CLASS(wxDC) - public: +public: - wxDC(void); - ~wxDC(void); + wxDC(void); + ~wxDC(void); - void BeginDrawing(void) {}; - void EndDrawing(void) {}; + void BeginDrawing(void) {}; + void EndDrawing(void) {}; - virtual bool Ok(void) const; + virtual bool Ok(void) const; - virtual void FloodFill( long x1, long y1, wxColour *col, int style=wxFLOOD_SURFACE ) = 0; - virtual bool GetPixel( long x1, long y1, wxColour *col ) const = 0; + virtual void FloodFill( long x, long y, const wxColour& col, int style=wxFLOOD_SURFACE ) = 0; + inline void FloodFill(const wxPoint& pt, const wxColour& col, int style=wxFLOOD_SURFACE) + { + FloodFill(pt.x, pt.y, col, style); + } + virtual bool GetPixel( long x, long y, wxColour *col ) const = 0; + inline bool GetPixel(const wxPoint& pt, wxColour *col) const + { + return GetPixel(pt.x, pt.y, col); + } - virtual void DrawLine( long x1, long y1, long x2, long y2 ) = 0; - virtual void CrossHair( long x, long y ) = 0; - virtual void DrawArc( long x1, long y1, long x2, long y2, double xc, double yc ); - virtual void DrawEllipticArc( long x, long y, long width, long height, double sa, double ea ) = 0; - virtual void DrawPoint( long x, long y ) = 0; - virtual void DrawPoint( wxPoint& point ); - - virtual void DrawLines( int n, wxPoint points[], long xoffset = 0, long yoffset = 0 ) = 0; - virtual void DrawLines( wxList *points, long xoffset = 0, long yoffset = 0 ); - virtual void DrawPolygon( int n, wxPoint points[], long xoffset = 0, long yoffset = 0, + virtual void DrawLine( long x1, long y1, long x2, long y2 ) = 0; + inline void DrawLine(const wxPoint& pt1, const wxPoint& pt2) + { + DrawLine(pt1.x, pt1.y, pt2.x, pt2.y); + } + virtual void CrossHair( long x, long y ) = 0; + inline void CrossHair(const wxPoint& pt) + { + CrossHair(pt.x, pt.y); + } + virtual void DrawArc( long x1, long y1, long x2, long y2, double xc, double yc ); + inline void DrawArc(const wxPoint& pt1, const wxPoint& pt2, const wxPoint& centre) + { + DrawArc(pt1.x, pt1.y, pt2.x, pt2.y, centre.x, centre.y); + } + virtual void DrawEllipticArc( long x, long y, long width, long height, double sa, double ea ) = 0; + virtual void DrawEllipticArc (const wxPoint& pt, const wxSize& sz, double sa, double ea) + { + DrawEllipticArc(pt.x, pt.y, sz.x, sz.y, sa, ea); + } + virtual void DrawPoint( long x, long y ) = 0; + inline void DrawPoint(const wxPoint& pt) + { + DrawPoint(pt.x, pt.y); + } + virtual void DrawPoint( wxPoint& point ); + + virtual void DrawLines( int n, wxPoint points[], long xoffset = 0, long yoffset = 0 ) = 0; + virtual void DrawLines( wxList *points, long xoffset = 0, long yoffset = 0 ); + virtual void DrawPolygon( int n, wxPoint points[], long xoffset = 0, long yoffset = 0, int fillStyle=wxODDEVEN_RULE ) = 0; - virtual void DrawPolygon( wxList *lines, long xoffset = 0, long yoffset = 0, + virtual void DrawPolygon( wxList *lines, long xoffset = 0, long yoffset = 0, int fillStyle=wxODDEVEN_RULE ); - virtual void DrawRectangle( long x, long y, long width, long height ) = 0; - virtual void DrawRoundedRectangle( long x, long y, long width, long height, double radius = 20.0 ) = 0; - virtual void DrawEllipse( long x, long y, long width, long height ) = 0; - - virtual void DrawSpline( long x1, long y1, long x2, long y2, long x3, long y3 ); - virtual void DrawSpline( wxList *points ) = 0; - virtual void DrawSpline( int n, wxPoint points[] ); - - virtual bool CanDrawBitmap(void) const = 0; - virtual void DrawIcon( const wxIcon &icon, long x, long y ) - { DrawIcon( icon, x, y, TRUE ); } - virtual void DrawIcon( const wxIcon &icon, long x, long y, bool useMask ); - void DrawBitmap( const wxBitmap &bmp, long x, long y, bool useMask=FALSE ) - { DrawIcon( *((wxIcon*)(&bmp)), x, y, useMask ); } - virtual bool Blit( long xdest, long ydest, long width, long height, - wxDC *source, long xsrc, long ysrc, int logical_func = wxCOPY, bool useMask=FALSE ) = 0; + virtual void DrawRectangle( long x, long y, long width, long height ) = 0; + inline void DrawRectangle(const wxPoint& pt, const wxSize& sz) + { + DrawRectangle(pt.x, pt.y, sz.x, sz.y); + } + inline void DrawRectangle(const wxRect& rect) + { + DrawRectangle(rect.x, rect.y, rect.width, rect.height); + } + virtual void DrawRoundedRectangle( long x, long y, long width, long height, double radius = 20.0 ) = 0; + inline void DrawRoundedRectangle(const wxPoint& pt, const wxSize& sz, double radius = 20.0) + { + DrawRoundedRectangle(pt.x, pt.y, sz.x, sz.y, radius); + } + inline void DrawRoundedRectangle(const wxRect& rect, double radius = 20.0) + { + DrawRoundedRectangle(rect.x, rect.y, rect.width, rect.height, radius); + } + virtual void DrawEllipse( long x, long y, long width, long height ) = 0; + inline void DrawEllipse(const wxPoint& pt, const wxSize& sz) + { + DrawEllipse(pt.x, pt.y, sz.x, sz.y); + } + inline void DrawEllipse(const wxRect& rect) + { + DrawEllipse(rect.x, rect.y, rect.width, rect.height); + } + + virtual void DrawSpline( long x1, long y1, long x2, long y2, long x3, long y3 ); + virtual void DrawSpline( wxList *points ) = 0; + virtual void DrawSpline( int n, wxPoint points[] ); + + virtual bool CanDrawBitmap(void) const = 0; + virtual void DrawIcon( const wxIcon &icon, long x, long y ) = 0; + inline void DrawIcon( const wxIcon& icon, const wxPoint& pt ) + { + DrawIcon(icon, pt.x, pt.y); + } + virtual void DrawBitmap( const wxBitmap &bmp, long x, long y, bool useMask=FALSE ) = 0; + inline void DrawBitmap( const wxBitmap& bitmap, const wxPoint& pt, bool useMask=FALSE ) + { + DrawBitmap(bitmap, pt.x, pt.y, useMask ); + } + virtual bool Blit( long xdest, long ydest, + long width, long height, + wxDC *source, + long xsrc, long ysrc, + int logical_func=wxCOPY, + bool useMask=FALSE ) = 0; + inline bool Blit( const wxPoint& destPt, + const wxSize& sz, + wxDC *source, + const wxPoint& srcPt, + int rop = wxCOPY, + bool useMask=FALSE) + { + return Blit(destPt.x, destPt.y, sz.x, sz.y, source, srcPt.x, srcPt.y, rop, useMask); + } - virtual void DrawText( const wxString &text, long x, long y, bool use16 = FALSE ) = 0; - virtual bool CanGetTextExtent(void) const = 0; - virtual void GetTextExtent( const wxString &string, long *width, long *height, - long *descent = (long *) NULL, long *externalLeading = (long *) NULL, - wxFont *theFont = (wxFont *) NULL, bool use16 = FALSE ) = 0; - virtual long GetCharWidth(void) = 0; - virtual long GetCharHeight(void) = 0; - - virtual void Clear(void) = 0; + virtual void DrawText( const wxString &text, long x, long y, bool use16 = FALSE ) = 0; + inline void DrawText(const wxString& text, const wxPoint& pt, bool use16bit = FALSE ) + { + DrawText(text, pt.x, pt.y, use16bit); + } + virtual bool CanGetTextExtent(void) const = 0; + virtual void GetTextExtent( const wxString &string, + long *width, long *height, + long *descent = (long *) NULL, + long *externalLeading = (long *) NULL, + wxFont *theFont = (wxFont *) NULL, + bool use16 = FALSE ) = 0; + virtual long GetCharWidth(void) = 0; + virtual long GetCharHeight(void) = 0; + + virtual void Clear(void) = 0; - virtual void SetFont( const wxFont &font ) = 0; - virtual wxFont *GetFont(void) { return &m_font; }; + virtual void SetFont( const wxFont &font ) = 0; + virtual wxFont *GetFont(void) { return &m_font; }; - virtual void SetPen( const wxPen &pen ) = 0; - virtual wxPen *GetPen(void) { return &m_pen; }; + virtual void SetPen( const wxPen &pen ) = 0; + virtual wxPen *GetPen(void) { return &m_pen; }; - virtual void SetBrush( const wxBrush &brush ) = 0; - virtual wxBrush *GetBrush(void) { return &m_brush; }; + virtual void SetBrush( const wxBrush &brush ) = 0; + virtual wxBrush *GetBrush(void) { return &m_brush; }; - virtual void SetBackground( const wxBrush &brush ) = 0; - virtual wxBrush *GetBackground(void) { return &m_backgroundBrush; }; + virtual void SetBackground( const wxBrush &brush ) = 0; + virtual wxBrush *GetBackground(void) { return &m_backgroundBrush; }; - virtual void SetLogicalFunction( int function ) = 0; - virtual int GetLogicalFunction(void) { return m_logicalFunction; }; + virtual void SetLogicalFunction( int function ) = 0; + virtual int GetLogicalFunction(void) { return m_logicalFunction; }; - virtual void SetTextForeground( const wxColour &col ); - virtual void SetTextBackground( const wxColour &col ); - virtual wxColour& GetTextBackground(void) const { return (wxColour&)m_textBackgroundColour; }; - virtual wxColour& GetTextForeground(void) const { return (wxColour&)m_textForegroundColour; }; + virtual void SetTextForeground( const wxColour &col ); + virtual void SetTextBackground( const wxColour &col ); + virtual wxColour& GetTextBackground(void) const { return (wxColour&)m_textBackgroundColour; }; + virtual wxColour& GetTextForeground(void) const { return (wxColour&)m_textForegroundColour; }; - virtual void SetBackgroundMode( int mode ) = 0; - virtual int GetBackgroundMode(void) { return m_backgroundMode; }; + virtual void SetBackgroundMode( int mode ) = 0; + virtual int GetBackgroundMode(void) { return m_backgroundMode; }; - virtual void SetPalette( const wxPalette& palette ) = 0; - void SetColourMap( const wxPalette& palette ) { SetPalette(palette); }; + virtual void SetPalette( const wxPalette& palette ) = 0; + void SetColourMap( const wxPalette& palette ) { SetPalette(palette); }; // the first two must be overridden and called - virtual void SetClippingRegion( long x, long y, long width, long height ); - virtual void DestroyClippingRegion(void); - virtual void GetClippingBox( long *x, long *y, long *width, long *height ) const; - - virtual inline long MinX(void) const { return m_minX; } - virtual inline long MaxX(void) const { return m_maxX; } - virtual inline long MinY(void) const { return m_minY; } - virtual inline long MaxY(void) const { return m_maxY; } + virtual void DestroyClippingRegion(void); + virtual void SetClippingRegion( long x, long y, long width, long height ); + virtual void GetClippingBox( long *x, long *y, long *width, long *height ) const; + virtual void SetClippingRegion( const wxRegion ®ion ) = 0; + + virtual inline long MinX(void) const { return m_minX; } + virtual inline long MaxX(void) const { return m_maxX; } + virtual inline long MinY(void) const { return m_minY; } + virtual inline long MaxY(void) const { return m_maxY; } - virtual void GetSize( int* width, int* height ) const; - inline wxSize GetSize(void) const { int w, h; GetSize(&w, &h); return wxSize(w, h); } - virtual void GetSizeMM( long* width, long* height ) const; - - virtual bool StartDoc( const wxString& WXUNUSED(message) ) { return TRUE; }; - virtual void EndDoc(void) {}; - virtual void StartPage(void) {}; - virtual void EndPage(void) {}; - - virtual void SetMapMode( int mode ); - virtual int GetMapMode(void) const { return m_mappingMode; }; - - virtual void SetUserScale( double x, double y ); - virtual void GetUserScale( double *x, double *y ); - virtual void SetLogicalScale( double x, double y ); - virtual void GetLogicalScale( double *x, double *y ); - - virtual void SetLogicalOrigin( long x, long y ); - virtual void GetLogicalOrigin( long *x, long *y ); - virtual void SetDeviceOrigin( long x, long y ); - virtual void GetDeviceOrigin( long *x, long *y ); + virtual void GetSize( int* width, int* height ) const; + inline wxSize GetSize(void) const { int w, h; GetSize(&w, &h); return wxSize(w, h); } + virtual void GetSizeMM( long* width, long* height ) const; + + virtual bool StartDoc( const wxString& WXUNUSED(message) ) { return TRUE; }; + virtual void EndDoc(void) {}; + virtual void StartPage(void) {}; + virtual void EndPage(void) {}; + + virtual void SetMapMode( int mode ); + virtual int GetMapMode(void) const { return m_mappingMode; }; + + virtual void SetUserScale( double x, double y ); + virtual void GetUserScale( double *x, double *y ); + virtual void SetLogicalScale( double x, double y ); + virtual void GetLogicalScale( double *x, double *y ); + + virtual void SetLogicalOrigin( long x, long y ); + virtual void GetLogicalOrigin( long *x, long *y ); + virtual void SetDeviceOrigin( long x, long y ); + virtual void GetDeviceOrigin( long *x, long *y ); - virtual void SetAxisOrientation( bool xLeftRight, bool yBottomUp ); - - virtual void SetOptimization( bool WXUNUSED(optimize) ) {}; - virtual bool GetOptimization(void) { return m_optimize; }; - - virtual long DeviceToLogicalX(long x) const; - virtual long DeviceToLogicalY(long y) const; - virtual long DeviceToLogicalXRel(long x) const; - virtual long DeviceToLogicalYRel(long y) const; - virtual long LogicalToDeviceX(long x) const; - virtual long LogicalToDeviceY(long y) const; - virtual long LogicalToDeviceXRel(long x) const; - virtual long LogicalToDeviceYRel(long y) const; + virtual void SetAxisOrientation( bool xLeftRight, bool yBottomUp ); + + virtual void SetOptimization( bool WXUNUSED(optimize) ) {}; + virtual bool GetOptimization(void) { return m_optimize; }; + + virtual long DeviceToLogicalX(long x) const; + virtual long DeviceToLogicalY(long y) const; + virtual long DeviceToLogicalXRel(long x) const; + virtual long DeviceToLogicalYRel(long y) const; + virtual long LogicalToDeviceX(long x) const; + virtual long LogicalToDeviceY(long y) const; + virtual long LogicalToDeviceXRel(long x) const; + virtual long LogicalToDeviceYRel(long y) const; - public: + // implementation void CalcBoundingBox( long x, long y ); void ComputeScaleAndOrigin(void); @@ -279,7 +357,7 @@ class wxDC: public wxObject // not sure what for, but what is a mm on a screen you don't know the size of? double m_mm_to_pix_x,m_mm_to_pix_y; - long m_deviceOriginX,m_deviceOriginY; // Sum of the two above. + long m_deviceOriginX,m_deviceOriginY; long m_logicalOriginX,m_logicalOriginY; // User defined. diff --git a/include/wx/gtk/dcclient.h b/include/wx/gtk/dcclient.h index ab0a9187f0..c39315f143 100644 --- a/include/wx/gtk/dcclient.h +++ b/include/wx/gtk/dcclient.h @@ -40,7 +40,7 @@ public: ~wxWindowDC(void); - virtual void FloodFill( long x1, long y1, wxColour *col, int style=wxFLOOD_SURFACE ); + virtual void FloodFill( long x, long y, const wxColour& col, int style=wxFLOOD_SURFACE ); virtual bool GetPixel( long x1, long y1, wxColour *col ) const; virtual void DrawLine( long x1, long y1, long x2, long y2 ); @@ -61,7 +61,8 @@ public: virtual void DrawEllipse( long x, long y, long width, long height ); virtual bool CanDrawBitmap(void) const; - virtual void DrawIcon( const wxIcon &icon, long x, long y, bool useMask=FALSE ); + virtual void DrawIcon( const wxIcon &icon, long x, long y ); + virtual void DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMask=FALSE ); virtual bool Blit( long xdest, long ydest, long width, long height, wxDC *source, long xsrc, long ysrc, int logical_func = wxCOPY, bool useMask=FALSE ); @@ -87,6 +88,7 @@ public: virtual void SetClippingRegion( long x, long y, long width, long height ); virtual void DestroyClippingRegion(void); + virtual void SetClippingRegion( const wxRegion ®ion ); virtual void DrawSpline( wxList *points ); diff --git a/include/wx/gtk/window.h b/include/wx/gtk/window.h index 1aefc002f6..678c8057df 100644 --- a/include/wx/gtk/window.h +++ b/include/wx/gtk/window.h @@ -165,6 +165,7 @@ public: { return (m_parent ? m_parent->m_parent : (wxWindow*)NULL); } void SetParent( wxWindow *p ) { m_parent = p; } + virtual wxWindow *ReParent( wxWindow *newParent ); wxEvtHandler *GetEventHandler(); void SetEventHandler( wxEvtHandler *handler ); diff --git a/include/wx/gtk1/dc.h b/include/wx/gtk1/dc.h index 1c778cfbf8..7870f30bd5 100644 --- a/include/wx/gtk1/dc.h +++ b/include/wx/gtk1/dc.h @@ -57,133 +57,211 @@ class wxDC: public wxObject { DECLARE_ABSTRACT_CLASS(wxDC) - public: +public: - wxDC(void); - ~wxDC(void); + wxDC(void); + ~wxDC(void); - void BeginDrawing(void) {}; - void EndDrawing(void) {}; + void BeginDrawing(void) {}; + void EndDrawing(void) {}; - virtual bool Ok(void) const; + virtual bool Ok(void) const; - virtual void FloodFill( long x1, long y1, wxColour *col, int style=wxFLOOD_SURFACE ) = 0; - virtual bool GetPixel( long x1, long y1, wxColour *col ) const = 0; + virtual void FloodFill( long x, long y, const wxColour& col, int style=wxFLOOD_SURFACE ) = 0; + inline void FloodFill(const wxPoint& pt, const wxColour& col, int style=wxFLOOD_SURFACE) + { + FloodFill(pt.x, pt.y, col, style); + } + virtual bool GetPixel( long x, long y, wxColour *col ) const = 0; + inline bool GetPixel(const wxPoint& pt, wxColour *col) const + { + return GetPixel(pt.x, pt.y, col); + } - virtual void DrawLine( long x1, long y1, long x2, long y2 ) = 0; - virtual void CrossHair( long x, long y ) = 0; - virtual void DrawArc( long x1, long y1, long x2, long y2, double xc, double yc ); - virtual void DrawEllipticArc( long x, long y, long width, long height, double sa, double ea ) = 0; - virtual void DrawPoint( long x, long y ) = 0; - virtual void DrawPoint( wxPoint& point ); - - virtual void DrawLines( int n, wxPoint points[], long xoffset = 0, long yoffset = 0 ) = 0; - virtual void DrawLines( wxList *points, long xoffset = 0, long yoffset = 0 ); - virtual void DrawPolygon( int n, wxPoint points[], long xoffset = 0, long yoffset = 0, + virtual void DrawLine( long x1, long y1, long x2, long y2 ) = 0; + inline void DrawLine(const wxPoint& pt1, const wxPoint& pt2) + { + DrawLine(pt1.x, pt1.y, pt2.x, pt2.y); + } + virtual void CrossHair( long x, long y ) = 0; + inline void CrossHair(const wxPoint& pt) + { + CrossHair(pt.x, pt.y); + } + virtual void DrawArc( long x1, long y1, long x2, long y2, double xc, double yc ); + inline void DrawArc(const wxPoint& pt1, const wxPoint& pt2, const wxPoint& centre) + { + DrawArc(pt1.x, pt1.y, pt2.x, pt2.y, centre.x, centre.y); + } + virtual void DrawEllipticArc( long x, long y, long width, long height, double sa, double ea ) = 0; + virtual void DrawEllipticArc (const wxPoint& pt, const wxSize& sz, double sa, double ea) + { + DrawEllipticArc(pt.x, pt.y, sz.x, sz.y, sa, ea); + } + virtual void DrawPoint( long x, long y ) = 0; + inline void DrawPoint(const wxPoint& pt) + { + DrawPoint(pt.x, pt.y); + } + virtual void DrawPoint( wxPoint& point ); + + virtual void DrawLines( int n, wxPoint points[], long xoffset = 0, long yoffset = 0 ) = 0; + virtual void DrawLines( wxList *points, long xoffset = 0, long yoffset = 0 ); + virtual void DrawPolygon( int n, wxPoint points[], long xoffset = 0, long yoffset = 0, int fillStyle=wxODDEVEN_RULE ) = 0; - virtual void DrawPolygon( wxList *lines, long xoffset = 0, long yoffset = 0, + virtual void DrawPolygon( wxList *lines, long xoffset = 0, long yoffset = 0, int fillStyle=wxODDEVEN_RULE ); - virtual void DrawRectangle( long x, long y, long width, long height ) = 0; - virtual void DrawRoundedRectangle( long x, long y, long width, long height, double radius = 20.0 ) = 0; - virtual void DrawEllipse( long x, long y, long width, long height ) = 0; - - virtual void DrawSpline( long x1, long y1, long x2, long y2, long x3, long y3 ); - virtual void DrawSpline( wxList *points ) = 0; - virtual void DrawSpline( int n, wxPoint points[] ); - - virtual bool CanDrawBitmap(void) const = 0; - virtual void DrawIcon( const wxIcon &icon, long x, long y ) - { DrawIcon( icon, x, y, TRUE ); } - virtual void DrawIcon( const wxIcon &icon, long x, long y, bool useMask ); - void DrawBitmap( const wxBitmap &bmp, long x, long y, bool useMask=FALSE ) - { DrawIcon( *((wxIcon*)(&bmp)), x, y, useMask ); } - virtual bool Blit( long xdest, long ydest, long width, long height, - wxDC *source, long xsrc, long ysrc, int logical_func = wxCOPY, bool useMask=FALSE ) = 0; + virtual void DrawRectangle( long x, long y, long width, long height ) = 0; + inline void DrawRectangle(const wxPoint& pt, const wxSize& sz) + { + DrawRectangle(pt.x, pt.y, sz.x, sz.y); + } + inline void DrawRectangle(const wxRect& rect) + { + DrawRectangle(rect.x, rect.y, rect.width, rect.height); + } + virtual void DrawRoundedRectangle( long x, long y, long width, long height, double radius = 20.0 ) = 0; + inline void DrawRoundedRectangle(const wxPoint& pt, const wxSize& sz, double radius = 20.0) + { + DrawRoundedRectangle(pt.x, pt.y, sz.x, sz.y, radius); + } + inline void DrawRoundedRectangle(const wxRect& rect, double radius = 20.0) + { + DrawRoundedRectangle(rect.x, rect.y, rect.width, rect.height, radius); + } + virtual void DrawEllipse( long x, long y, long width, long height ) = 0; + inline void DrawEllipse(const wxPoint& pt, const wxSize& sz) + { + DrawEllipse(pt.x, pt.y, sz.x, sz.y); + } + inline void DrawEllipse(const wxRect& rect) + { + DrawEllipse(rect.x, rect.y, rect.width, rect.height); + } + + virtual void DrawSpline( long x1, long y1, long x2, long y2, long x3, long y3 ); + virtual void DrawSpline( wxList *points ) = 0; + virtual void DrawSpline( int n, wxPoint points[] ); + + virtual bool CanDrawBitmap(void) const = 0; + virtual void DrawIcon( const wxIcon &icon, long x, long y ) = 0; + inline void DrawIcon( const wxIcon& icon, const wxPoint& pt ) + { + DrawIcon(icon, pt.x, pt.y); + } + virtual void DrawBitmap( const wxBitmap &bmp, long x, long y, bool useMask=FALSE ) = 0; + inline void DrawBitmap( const wxBitmap& bitmap, const wxPoint& pt, bool useMask=FALSE ) + { + DrawBitmap(bitmap, pt.x, pt.y, useMask ); + } + virtual bool Blit( long xdest, long ydest, + long width, long height, + wxDC *source, + long xsrc, long ysrc, + int logical_func=wxCOPY, + bool useMask=FALSE ) = 0; + inline bool Blit( const wxPoint& destPt, + const wxSize& sz, + wxDC *source, + const wxPoint& srcPt, + int rop = wxCOPY, + bool useMask=FALSE) + { + return Blit(destPt.x, destPt.y, sz.x, sz.y, source, srcPt.x, srcPt.y, rop, useMask); + } - virtual void DrawText( const wxString &text, long x, long y, bool use16 = FALSE ) = 0; - virtual bool CanGetTextExtent(void) const = 0; - virtual void GetTextExtent( const wxString &string, long *width, long *height, - long *descent = (long *) NULL, long *externalLeading = (long *) NULL, - wxFont *theFont = (wxFont *) NULL, bool use16 = FALSE ) = 0; - virtual long GetCharWidth(void) = 0; - virtual long GetCharHeight(void) = 0; - - virtual void Clear(void) = 0; + virtual void DrawText( const wxString &text, long x, long y, bool use16 = FALSE ) = 0; + inline void DrawText(const wxString& text, const wxPoint& pt, bool use16bit = FALSE ) + { + DrawText(text, pt.x, pt.y, use16bit); + } + virtual bool CanGetTextExtent(void) const = 0; + virtual void GetTextExtent( const wxString &string, + long *width, long *height, + long *descent = (long *) NULL, + long *externalLeading = (long *) NULL, + wxFont *theFont = (wxFont *) NULL, + bool use16 = FALSE ) = 0; + virtual long GetCharWidth(void) = 0; + virtual long GetCharHeight(void) = 0; + + virtual void Clear(void) = 0; - virtual void SetFont( const wxFont &font ) = 0; - virtual wxFont *GetFont(void) { return &m_font; }; + virtual void SetFont( const wxFont &font ) = 0; + virtual wxFont *GetFont(void) { return &m_font; }; - virtual void SetPen( const wxPen &pen ) = 0; - virtual wxPen *GetPen(void) { return &m_pen; }; + virtual void SetPen( const wxPen &pen ) = 0; + virtual wxPen *GetPen(void) { return &m_pen; }; - virtual void SetBrush( const wxBrush &brush ) = 0; - virtual wxBrush *GetBrush(void) { return &m_brush; }; + virtual void SetBrush( const wxBrush &brush ) = 0; + virtual wxBrush *GetBrush(void) { return &m_brush; }; - virtual void SetBackground( const wxBrush &brush ) = 0; - virtual wxBrush *GetBackground(void) { return &m_backgroundBrush; }; + virtual void SetBackground( const wxBrush &brush ) = 0; + virtual wxBrush *GetBackground(void) { return &m_backgroundBrush; }; - virtual void SetLogicalFunction( int function ) = 0; - virtual int GetLogicalFunction(void) { return m_logicalFunction; }; + virtual void SetLogicalFunction( int function ) = 0; + virtual int GetLogicalFunction(void) { return m_logicalFunction; }; - virtual void SetTextForeground( const wxColour &col ); - virtual void SetTextBackground( const wxColour &col ); - virtual wxColour& GetTextBackground(void) const { return (wxColour&)m_textBackgroundColour; }; - virtual wxColour& GetTextForeground(void) const { return (wxColour&)m_textForegroundColour; }; + virtual void SetTextForeground( const wxColour &col ); + virtual void SetTextBackground( const wxColour &col ); + virtual wxColour& GetTextBackground(void) const { return (wxColour&)m_textBackgroundColour; }; + virtual wxColour& GetTextForeground(void) const { return (wxColour&)m_textForegroundColour; }; - virtual void SetBackgroundMode( int mode ) = 0; - virtual int GetBackgroundMode(void) { return m_backgroundMode; }; + virtual void SetBackgroundMode( int mode ) = 0; + virtual int GetBackgroundMode(void) { return m_backgroundMode; }; - virtual void SetPalette( const wxPalette& palette ) = 0; - void SetColourMap( const wxPalette& palette ) { SetPalette(palette); }; + virtual void SetPalette( const wxPalette& palette ) = 0; + void SetColourMap( const wxPalette& palette ) { SetPalette(palette); }; // the first two must be overridden and called - virtual void SetClippingRegion( long x, long y, long width, long height ); - virtual void DestroyClippingRegion(void); - virtual void GetClippingBox( long *x, long *y, long *width, long *height ) const; - - virtual inline long MinX(void) const { return m_minX; } - virtual inline long MaxX(void) const { return m_maxX; } - virtual inline long MinY(void) const { return m_minY; } - virtual inline long MaxY(void) const { return m_maxY; } + virtual void DestroyClippingRegion(void); + virtual void SetClippingRegion( long x, long y, long width, long height ); + virtual void GetClippingBox( long *x, long *y, long *width, long *height ) const; + virtual void SetClippingRegion( const wxRegion ®ion ) = 0; + + virtual inline long MinX(void) const { return m_minX; } + virtual inline long MaxX(void) const { return m_maxX; } + virtual inline long MinY(void) const { return m_minY; } + virtual inline long MaxY(void) const { return m_maxY; } - virtual void GetSize( int* width, int* height ) const; - inline wxSize GetSize(void) const { int w, h; GetSize(&w, &h); return wxSize(w, h); } - virtual void GetSizeMM( long* width, long* height ) const; - - virtual bool StartDoc( const wxString& WXUNUSED(message) ) { return TRUE; }; - virtual void EndDoc(void) {}; - virtual void StartPage(void) {}; - virtual void EndPage(void) {}; - - virtual void SetMapMode( int mode ); - virtual int GetMapMode(void) const { return m_mappingMode; }; - - virtual void SetUserScale( double x, double y ); - virtual void GetUserScale( double *x, double *y ); - virtual void SetLogicalScale( double x, double y ); - virtual void GetLogicalScale( double *x, double *y ); - - virtual void SetLogicalOrigin( long x, long y ); - virtual void GetLogicalOrigin( long *x, long *y ); - virtual void SetDeviceOrigin( long x, long y ); - virtual void GetDeviceOrigin( long *x, long *y ); + virtual void GetSize( int* width, int* height ) const; + inline wxSize GetSize(void) const { int w, h; GetSize(&w, &h); return wxSize(w, h); } + virtual void GetSizeMM( long* width, long* height ) const; + + virtual bool StartDoc( const wxString& WXUNUSED(message) ) { return TRUE; }; + virtual void EndDoc(void) {}; + virtual void StartPage(void) {}; + virtual void EndPage(void) {}; + + virtual void SetMapMode( int mode ); + virtual int GetMapMode(void) const { return m_mappingMode; }; + + virtual void SetUserScale( double x, double y ); + virtual void GetUserScale( double *x, double *y ); + virtual void SetLogicalScale( double x, double y ); + virtual void GetLogicalScale( double *x, double *y ); + + virtual void SetLogicalOrigin( long x, long y ); + virtual void GetLogicalOrigin( long *x, long *y ); + virtual void SetDeviceOrigin( long x, long y ); + virtual void GetDeviceOrigin( long *x, long *y ); - virtual void SetAxisOrientation( bool xLeftRight, bool yBottomUp ); - - virtual void SetOptimization( bool WXUNUSED(optimize) ) {}; - virtual bool GetOptimization(void) { return m_optimize; }; - - virtual long DeviceToLogicalX(long x) const; - virtual long DeviceToLogicalY(long y) const; - virtual long DeviceToLogicalXRel(long x) const; - virtual long DeviceToLogicalYRel(long y) const; - virtual long LogicalToDeviceX(long x) const; - virtual long LogicalToDeviceY(long y) const; - virtual long LogicalToDeviceXRel(long x) const; - virtual long LogicalToDeviceYRel(long y) const; + virtual void SetAxisOrientation( bool xLeftRight, bool yBottomUp ); + + virtual void SetOptimization( bool WXUNUSED(optimize) ) {}; + virtual bool GetOptimization(void) { return m_optimize; }; + + virtual long DeviceToLogicalX(long x) const; + virtual long DeviceToLogicalY(long y) const; + virtual long DeviceToLogicalXRel(long x) const; + virtual long DeviceToLogicalYRel(long y) const; + virtual long LogicalToDeviceX(long x) const; + virtual long LogicalToDeviceY(long y) const; + virtual long LogicalToDeviceXRel(long x) const; + virtual long LogicalToDeviceYRel(long y) const; - public: + // implementation void CalcBoundingBox( long x, long y ); void ComputeScaleAndOrigin(void); @@ -279,7 +357,7 @@ class wxDC: public wxObject // not sure what for, but what is a mm on a screen you don't know the size of? double m_mm_to_pix_x,m_mm_to_pix_y; - long m_deviceOriginX,m_deviceOriginY; // Sum of the two above. + long m_deviceOriginX,m_deviceOriginY; long m_logicalOriginX,m_logicalOriginY; // User defined. diff --git a/include/wx/gtk1/dcclient.h b/include/wx/gtk1/dcclient.h index ab0a9187f0..c39315f143 100644 --- a/include/wx/gtk1/dcclient.h +++ b/include/wx/gtk1/dcclient.h @@ -40,7 +40,7 @@ public: ~wxWindowDC(void); - virtual void FloodFill( long x1, long y1, wxColour *col, int style=wxFLOOD_SURFACE ); + virtual void FloodFill( long x, long y, const wxColour& col, int style=wxFLOOD_SURFACE ); virtual bool GetPixel( long x1, long y1, wxColour *col ) const; virtual void DrawLine( long x1, long y1, long x2, long y2 ); @@ -61,7 +61,8 @@ public: virtual void DrawEllipse( long x, long y, long width, long height ); virtual bool CanDrawBitmap(void) const; - virtual void DrawIcon( const wxIcon &icon, long x, long y, bool useMask=FALSE ); + virtual void DrawIcon( const wxIcon &icon, long x, long y ); + virtual void DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMask=FALSE ); virtual bool Blit( long xdest, long ydest, long width, long height, wxDC *source, long xsrc, long ysrc, int logical_func = wxCOPY, bool useMask=FALSE ); @@ -87,6 +88,7 @@ public: virtual void SetClippingRegion( long x, long y, long width, long height ); virtual void DestroyClippingRegion(void); + virtual void SetClippingRegion( const wxRegion ®ion ); virtual void DrawSpline( wxList *points ); diff --git a/include/wx/gtk1/window.h b/include/wx/gtk1/window.h index 1aefc002f6..678c8057df 100644 --- a/include/wx/gtk1/window.h +++ b/include/wx/gtk1/window.h @@ -165,6 +165,7 @@ public: { return (m_parent ? m_parent->m_parent : (wxWindow*)NULL); } void SetParent( wxWindow *p ) { m_parent = p; } + virtual wxWindow *ReParent( wxWindow *newParent ); wxEvtHandler *GetEventHandler(); void SetEventHandler( wxEvtHandler *handler ); diff --git a/include/wx/postscrp.h b/include/wx/postscrp.h index 73fd4dc59d..5b6271775f 100644 --- a/include/wx/postscrp.h +++ b/include/wx/postscrp.h @@ -61,7 +61,7 @@ class WXDLLEXPORT wxPostScriptDC: public wxDC inline virtual void BeginDrawing(void) {} ; inline virtual void EndDrawing(void) {} ; - void FloodFill(long x1, long y1, wxColour *col, int style=wxFLOOD_SURFACE) ; + void FloodFill(long x1, long y1, const wxColour &col, int style=wxFLOOD_SURFACE) ; bool GetPixel(long x1, long y1, wxColour *col) const; void DrawLine(long x1, long y1, long x2, long y2); @@ -85,11 +85,8 @@ class WXDLLEXPORT wxPostScriptDC: public wxDC void DrawSpline(wxList *points); - void DrawIcon(const wxIcon& icon, long x, long y); -#ifdef __WXGTK__ - void DrawIcon(const wxIcon& icon, long x, long y, bool WXUNUSED(usemask) ) - { DrawIcon( icon, x, y ); } -#endif + void DrawIcon( const wxIcon& icon, long x, long y ); + void DrawBitmap( const wxBitmap& bitmap, long x, long y, bool useMask=FALSE ); void DrawText(const wxString& text, long x, long y, bool use16 = FALSE); void Clear(); @@ -98,7 +95,9 @@ class WXDLLEXPORT wxPostScriptDC: public wxDC void SetBrush(const wxBrush& brush); void SetLogicalFunction(int function); void SetBackground(const wxBrush& brush); + void SetClippingRegion(long x, long y, long width, long height); + void SetClippingRegion( const wxRegion ®ion ); void DestroyClippingRegion(); bool StartDoc(const wxString& message); diff --git a/src/common/postscrp.cpp b/src/common/postscrp.cpp index 1ce7e6b6f5..6dc8464b65 100644 --- a/src/common/postscrp.cpp +++ b/src/common/postscrp.cpp @@ -304,6 +304,10 @@ void wxPostScriptDC::SetClippingRegion (long cx, long cy, long cw, long ch) *m_pstream << "closepath clip newpath\n"; } +void wxPostScriptDC::SetClippingRegion( const wxRegion &WXUNUSED(region) ) +{ +} + void wxPostScriptDC::DestroyClippingRegion () { if (!m_pstream) @@ -319,7 +323,7 @@ void wxPostScriptDC::Clear () { } -void wxPostScriptDC::FloodFill (long WXUNUSED(x), long WXUNUSED(y), wxColour * WXUNUSED(col), int WXUNUSED(style)) +void wxPostScriptDC::FloodFill (long WXUNUSED(x), long WXUNUSED(y), const wxColour &WXUNUSED(col), int WXUNUSED(style)) { } @@ -685,6 +689,10 @@ void wxPostScriptDC::DrawIcon (const wxIcon& icon, long x, long y) #endif } +void wxPostScriptDC::DrawBitmap( const wxBitmap& bitmap, long x, long y, bool useMask ) +{ +} + void wxPostScriptDC::SetFont (const wxFont& the_font) { if (!m_pstream) diff --git a/src/generic/imaglist.cpp b/src/generic/imaglist.cpp index fcc9c4e173..ad91a211e0 100644 --- a/src/generic/imaglist.cpp +++ b/src/generic/imaglist.cpp @@ -113,8 +113,7 @@ bool wxImageList::Draw( int index, wxDC &dc, int x, int y, if (!node) return FALSE; wxBitmap *bm = (wxBitmap*)node->Data(); - wxIcon *icon = (wxIcon*)bm; - dc.DrawIcon( *icon, x, y, (flags & wxIMAGELIST_DRAW_TRANSPARENT) > 0 ); + dc.DrawBitmap( *bm, x, y, (flags & wxIMAGELIST_DRAW_TRANSPARENT) > 0 ); return TRUE; } diff --git a/src/gtk.inc b/src/gtk.inc index 5d349c4141..c68b58eae4 100644 --- a/src/gtk.inc +++ b/src/gtk.inc @@ -2,9 +2,9 @@ NONE = # define library name -LIB_TARGET=wx_gtk +LIB_TARGET=wx_gtk_1_0 LIB_MAJOR=1 -LIB_MINOR=97 +LIB_MINOR=99 # define library sources diff --git a/src/gtk/dc.cpp b/src/gtk/dc.cpp index e541ef2181..d782330da8 100644 --- a/src/gtk/dc.cpp +++ b/src/gtk/dc.cpp @@ -93,10 +93,6 @@ void wxDC::DrawArc( long WXUNUSED(x1), long WXUNUSED(y1), long WXUNUSED(x2), lon { } -void wxDC::DrawIcon( const wxIcon &WXUNUSED(icon), long WXUNUSED(x), long WXUNUSED(y), bool WXUNUSED(useMask) ) -{ -} - void wxDC::DrawPoint( wxPoint& point ) { DrawPoint( point.x, point.y ); diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index a0a0ec2545..608e79287a 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -116,15 +116,6 @@ wxWindowDC::wxWindowDC( wxWindow *window ) SetUpDC(); -/* - wxRegion update = window->GetUpdateRegion(); - if (update.Empty()) return; - - gdk_gc_set_clip_region( m_penGC, update.GetRegion() ); - gdk_gc_set_clip_region( m_brushGC, update.GetRegion() ); - gdk_gc_set_clip_region( m_textGC, update.GetRegion() ); - gdk_gc_set_clip_region( m_bgGC, update.GetRegion() ); -*/ } wxWindowDC::~wxWindowDC(void) @@ -132,8 +123,8 @@ wxWindowDC::~wxWindowDC(void) Destroy(); } -void wxWindowDC::FloodFill( long WXUNUSED(x1), long WXUNUSED(y1), - wxColour *WXUNUSED(col), int WXUNUSED(style) ) +void wxWindowDC::FloodFill( long WXUNUSED(x), long WXUNUSED(y), + const wxColour &WXUNUSED(col), int WXUNUSED(style) ) { wxFAIL_MSG( "wxWindowDC::FloodFill not implemented" ); } @@ -505,7 +496,7 @@ bool wxWindowDC::CanDrawBitmap(void) const return TRUE; } -void wxWindowDC::DrawIcon( const wxIcon &icon, long x, long y, bool useMask ) +void wxWindowDC::DrawIcon( const wxIcon &icon, long x, long y ) { if (!Ok()) return; @@ -517,7 +508,7 @@ void wxWindowDC::DrawIcon( const wxIcon &icon, long x, long y, bool useMask ) GdkBitmap *mask = (GdkBitmap *) NULL; if (icon.GetMask()) mask = icon.GetMask()->GetBitmap(); - if (useMask && mask) + if (mask) { gdk_gc_set_clip_mask( m_penGC, mask ); gdk_gc_set_clip_origin( m_penGC, xx, yy ); @@ -526,7 +517,7 @@ void wxWindowDC::DrawIcon( const wxIcon &icon, long x, long y, bool useMask ) GdkPixmap *pm = icon.GetPixmap(); gdk_draw_pixmap( m_window, m_penGC, pm, 0, 0, xx, yy, -1, -1 ); - if (useMask && mask) + if (mask) { gdk_gc_set_clip_mask( m_penGC, (GdkBitmap *) NULL ); gdk_gc_set_clip_origin( m_penGC, 0, 0 ); @@ -538,6 +529,39 @@ void wxWindowDC::DrawIcon( const wxIcon &icon, long x, long y, bool useMask ) CalcBoundingBox( x + width, y + height ); } +void wxWindowDC::DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMask ) +{ + if (!Ok()) return; + + if (!bitmap.Ok()) return; + + int xx = XLOG2DEV(x); + int yy = YLOG2DEV(y); + + GdkBitmap *mask = (GdkBitmap *) NULL; + if (bitmap.GetMask()) mask = bitmap.GetMask()->GetBitmap(); + + if (useMask && mask) + { + gdk_gc_set_clip_mask( m_penGC, mask ); + gdk_gc_set_clip_origin( m_penGC, xx, yy ); + } + + GdkPixmap *pm = bitmap.GetPixmap(); + gdk_draw_pixmap( m_window, m_penGC, pm, 0, 0, xx, yy, -1, -1 ); + + if (useMask && mask) + { + gdk_gc_set_clip_mask( m_penGC, (GdkBitmap *) NULL ); + gdk_gc_set_clip_origin( m_penGC, 0, 0 ); + } + + CalcBoundingBox( x, y ); + int width = bitmap.GetWidth(); + int height = bitmap.GetHeight(); + CalcBoundingBox( x + width, y + height ); +} + bool wxWindowDC::Blit( long xdest, long ydest, long width, long height, wxDC *source, long xsrc, long ysrc, int WXUNUSED(logical_func), bool useMask ) { @@ -941,6 +965,20 @@ void wxWindowDC::SetClippingRegion( long x, long y, long width, long height ) gdk_gc_set_clip_rectangle( m_bgGC, &rect ); } +void wxWindowDC::SetClippingRegion( const wxRegion ®ion ) +{ + if (region.Empty()) + { + DestroyClippingRegion(); + return; + } + + gdk_gc_set_clip_region( m_penGC, region.GetRegion() ); + gdk_gc_set_clip_region( m_brushGC, region.GetRegion() ); + gdk_gc_set_clip_region( m_textGC, region.GetRegion() ); + gdk_gc_set_clip_region( m_bgGC, region.GetRegion() ); +} + void wxWindowDC::DestroyClippingRegion(void) { wxDC::DestroyClippingRegion(); diff --git a/src/gtk/win_gtk.c b/src/gtk/win_gtk.c index 028a92ed33..40c65a8785 100644 --- a/src/gtk/win_gtk.c +++ b/src/gtk/win_gtk.c @@ -211,7 +211,7 @@ gtk_myfixed_move (GtkMyFixed *myfixed, if (child->widget == widget) { -/* if ((child->x == x) && (child->y == y)) return; */ + if ((child->x == x) && (child->y == y)) return; child->x = x; child->y = y; diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 69c55e6c43..9dc17c0291 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -1729,38 +1729,38 @@ int wxWindow::GetCharHeight() const int wxWindow::GetCharWidth() const { - wxASSERT_MSG( (m_widget != NULL), "invalid window" ); + wxASSERT_MSG( (m_widget != NULL), "invalid window" ); - if (!m_font.Ok()) - { - wxFAIL_MSG( "invalid font" ); - return -1; - } + if (!m_font.Ok()) + { + wxFAIL_MSG( "invalid font" ); + return -1; + } - GdkFont *font = m_font.GetInternalFont( 1.0 ); - return gdk_string_width( font, "H" ); + GdkFont *font = m_font.GetInternalFont( 1.0 ); + return gdk_string_width( font, "H" ); } void wxWindow::GetTextExtent( const wxString& string, int *x, int *y, int *descent, int *externalLeading, const wxFont *theFont, bool WXUNUSED(use16) ) const { - wxASSERT_MSG( (m_widget != NULL), "invalid window" ); + wxASSERT_MSG( (m_widget != NULL), "invalid window" ); - wxFont fontToUse = m_font; - if (theFont) fontToUse = *theFont; + wxFont fontToUse = m_font; + if (theFont) fontToUse = *theFont; - if (!fontToUse.Ok()) - { - wxFAIL_MSG( "invalid font" ); - return; - } - wxASSERT_MSG( (m_font.Ok()), "invalid font" ); + if (!fontToUse.Ok()) + { + wxFAIL_MSG( "invalid font" ); + return; + } + wxASSERT_MSG( (m_font.Ok()), "invalid font" ); - GdkFont *font = fontToUse.GetInternalFont( 1.0 ); - if (x) (*x) = gdk_string_width( font, string ); - if (y) (*y) = font->ascent + font->descent; - if (descent) (*descent) = font->descent; - if (externalLeading) (*externalLeading) = 0; // ?? + GdkFont *font = fontToUse.GetInternalFont( 1.0 ); + if (x) (*x) = gdk_string_width( font, string ); + if (y) (*y) = font->ascent + font->descent; + if (descent) (*descent) = font->descent; + if (externalLeading) (*externalLeading) = 0; // ?? } void wxWindow::MakeModal( bool modal ) @@ -1783,105 +1783,122 @@ void wxWindow::MakeModal( bool modal ) void wxWindow::SetFocus() { - wxASSERT_MSG( (m_widget != NULL), "invalid window" ); + wxASSERT_MSG( (m_widget != NULL), "invalid window" ); - GtkWidget *connect_widget = GetConnectWidget(); - if (connect_widget) - { - if (GTK_WIDGET_CAN_FOCUS(connect_widget) && !GTK_WIDGET_HAS_FOCUS (connect_widget) ) + GtkWidget *connect_widget = GetConnectWidget(); + if (connect_widget) { - gtk_widget_grab_focus (connect_widget); + if (GTK_WIDGET_CAN_FOCUS(connect_widget) && !GTK_WIDGET_HAS_FOCUS (connect_widget) ) + { + gtk_widget_grab_focus (connect_widget); + } } - } } bool wxWindow::OnClose() { - return TRUE; + return TRUE; } void wxWindow::AddChild( wxWindow *child ) { - wxASSERT_MSG( (m_widget != NULL), "invalid window" ); - wxASSERT_MSG( (child != NULL), "invalid child" ); + wxASSERT_MSG( (m_widget != NULL), "invalid window" ); + wxASSERT_MSG( (child != NULL), "invalid child" ); - m_children.Append( child ); + m_children.Append( child ); } wxList *wxWindow::GetChildren() { - return (&m_children); + return (&m_children); +} + +wxWindow *wxWindow::ReParent( wxWindow *newParent ) +{ + wxWindow *oldParent = GetParent(); + + if (oldParent) oldParent->RemoveChild( this ); + + gtk_widget_unparent( m_widget ); + + if (newParent) + { + newParent->AddChild( this ); + (newParent->m_insertCallback)( newParent, this ); + } + + return oldParent; } void wxWindow::RemoveChild( wxWindow *child ) { - if (GetChildren()) GetChildren()->DeleteObject( child ); - child->m_parent = (wxWindow *) NULL; + if (GetChildren()) GetChildren()->DeleteObject( child ); + child->m_parent = (wxWindow *) NULL; } void wxWindow::SetReturnCode( int retCode ) { - m_retCode = retCode; + m_retCode = retCode; } int wxWindow::GetReturnCode() { - return m_retCode; + return m_retCode; } void wxWindow::Raise() { - wxASSERT_MSG( (m_widget != NULL), "invalid window" ); + wxASSERT_MSG( (m_widget != NULL), "invalid window" ); - if (m_widget) gdk_window_raise( m_widget->window ); + if (m_widget) gdk_window_raise( m_widget->window ); } void wxWindow::Lower() { - wxASSERT_MSG( (m_widget != NULL), "invalid window" ); + wxASSERT_MSG( (m_widget != NULL), "invalid window" ); - if (m_widget) gdk_window_lower( m_widget->window ); + if (m_widget) gdk_window_lower( m_widget->window ); } wxEvtHandler *wxWindow::GetEventHandler() { - return m_eventHandler; + return m_eventHandler; } void wxWindow::SetEventHandler( wxEvtHandler *handler ) { - m_eventHandler = handler; + m_eventHandler = handler; } void wxWindow::PushEventHandler(wxEvtHandler *handler) { - handler->SetNextHandler(GetEventHandler()); - SetEventHandler(handler); + handler->SetNextHandler(GetEventHandler()); + SetEventHandler(handler); } wxEvtHandler *wxWindow::PopEventHandler(bool deleteHandler) { - if (GetEventHandler()) - { - wxEvtHandler *handlerA = GetEventHandler(); - wxEvtHandler *handlerB = handlerA->GetNextHandler(); - handlerA->SetNextHandler((wxEvtHandler *) NULL); - SetEventHandler(handlerB); - if (deleteHandler) + if (GetEventHandler()) { - delete handlerA; - return (wxEvtHandler*) NULL; - } - else - return handlerA; - } - else - return (wxEvtHandler *) NULL; + wxEvtHandler *handlerA = GetEventHandler(); + wxEvtHandler *handlerB = handlerA->GetNextHandler(); + handlerA->SetNextHandler((wxEvtHandler *) NULL); + SetEventHandler(handlerB); + if (deleteHandler) + { + delete handlerA; + return (wxEvtHandler*) NULL; + } + else + return handlerA; + } + else + return (wxEvtHandler *) NULL; } wxValidator *wxWindow::GetValidator() { - return m_windowValidator; + return m_windowValidator; } void wxWindow::SetValidator( const wxValidator& validator ) diff --git a/src/gtk1/dc.cpp b/src/gtk1/dc.cpp index e541ef2181..d782330da8 100644 --- a/src/gtk1/dc.cpp +++ b/src/gtk1/dc.cpp @@ -93,10 +93,6 @@ void wxDC::DrawArc( long WXUNUSED(x1), long WXUNUSED(y1), long WXUNUSED(x2), lon { } -void wxDC::DrawIcon( const wxIcon &WXUNUSED(icon), long WXUNUSED(x), long WXUNUSED(y), bool WXUNUSED(useMask) ) -{ -} - void wxDC::DrawPoint( wxPoint& point ) { DrawPoint( point.x, point.y ); diff --git a/src/gtk1/dcclient.cpp b/src/gtk1/dcclient.cpp index a0a0ec2545..608e79287a 100644 --- a/src/gtk1/dcclient.cpp +++ b/src/gtk1/dcclient.cpp @@ -116,15 +116,6 @@ wxWindowDC::wxWindowDC( wxWindow *window ) SetUpDC(); -/* - wxRegion update = window->GetUpdateRegion(); - if (update.Empty()) return; - - gdk_gc_set_clip_region( m_penGC, update.GetRegion() ); - gdk_gc_set_clip_region( m_brushGC, update.GetRegion() ); - gdk_gc_set_clip_region( m_textGC, update.GetRegion() ); - gdk_gc_set_clip_region( m_bgGC, update.GetRegion() ); -*/ } wxWindowDC::~wxWindowDC(void) @@ -132,8 +123,8 @@ wxWindowDC::~wxWindowDC(void) Destroy(); } -void wxWindowDC::FloodFill( long WXUNUSED(x1), long WXUNUSED(y1), - wxColour *WXUNUSED(col), int WXUNUSED(style) ) +void wxWindowDC::FloodFill( long WXUNUSED(x), long WXUNUSED(y), + const wxColour &WXUNUSED(col), int WXUNUSED(style) ) { wxFAIL_MSG( "wxWindowDC::FloodFill not implemented" ); } @@ -505,7 +496,7 @@ bool wxWindowDC::CanDrawBitmap(void) const return TRUE; } -void wxWindowDC::DrawIcon( const wxIcon &icon, long x, long y, bool useMask ) +void wxWindowDC::DrawIcon( const wxIcon &icon, long x, long y ) { if (!Ok()) return; @@ -517,7 +508,7 @@ void wxWindowDC::DrawIcon( const wxIcon &icon, long x, long y, bool useMask ) GdkBitmap *mask = (GdkBitmap *) NULL; if (icon.GetMask()) mask = icon.GetMask()->GetBitmap(); - if (useMask && mask) + if (mask) { gdk_gc_set_clip_mask( m_penGC, mask ); gdk_gc_set_clip_origin( m_penGC, xx, yy ); @@ -526,7 +517,7 @@ void wxWindowDC::DrawIcon( const wxIcon &icon, long x, long y, bool useMask ) GdkPixmap *pm = icon.GetPixmap(); gdk_draw_pixmap( m_window, m_penGC, pm, 0, 0, xx, yy, -1, -1 ); - if (useMask && mask) + if (mask) { gdk_gc_set_clip_mask( m_penGC, (GdkBitmap *) NULL ); gdk_gc_set_clip_origin( m_penGC, 0, 0 ); @@ -538,6 +529,39 @@ void wxWindowDC::DrawIcon( const wxIcon &icon, long x, long y, bool useMask ) CalcBoundingBox( x + width, y + height ); } +void wxWindowDC::DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMask ) +{ + if (!Ok()) return; + + if (!bitmap.Ok()) return; + + int xx = XLOG2DEV(x); + int yy = YLOG2DEV(y); + + GdkBitmap *mask = (GdkBitmap *) NULL; + if (bitmap.GetMask()) mask = bitmap.GetMask()->GetBitmap(); + + if (useMask && mask) + { + gdk_gc_set_clip_mask( m_penGC, mask ); + gdk_gc_set_clip_origin( m_penGC, xx, yy ); + } + + GdkPixmap *pm = bitmap.GetPixmap(); + gdk_draw_pixmap( m_window, m_penGC, pm, 0, 0, xx, yy, -1, -1 ); + + if (useMask && mask) + { + gdk_gc_set_clip_mask( m_penGC, (GdkBitmap *) NULL ); + gdk_gc_set_clip_origin( m_penGC, 0, 0 ); + } + + CalcBoundingBox( x, y ); + int width = bitmap.GetWidth(); + int height = bitmap.GetHeight(); + CalcBoundingBox( x + width, y + height ); +} + bool wxWindowDC::Blit( long xdest, long ydest, long width, long height, wxDC *source, long xsrc, long ysrc, int WXUNUSED(logical_func), bool useMask ) { @@ -941,6 +965,20 @@ void wxWindowDC::SetClippingRegion( long x, long y, long width, long height ) gdk_gc_set_clip_rectangle( m_bgGC, &rect ); } +void wxWindowDC::SetClippingRegion( const wxRegion ®ion ) +{ + if (region.Empty()) + { + DestroyClippingRegion(); + return; + } + + gdk_gc_set_clip_region( m_penGC, region.GetRegion() ); + gdk_gc_set_clip_region( m_brushGC, region.GetRegion() ); + gdk_gc_set_clip_region( m_textGC, region.GetRegion() ); + gdk_gc_set_clip_region( m_bgGC, region.GetRegion() ); +} + void wxWindowDC::DestroyClippingRegion(void) { wxDC::DestroyClippingRegion(); diff --git a/src/gtk1/win_gtk.c b/src/gtk1/win_gtk.c index 028a92ed33..40c65a8785 100644 --- a/src/gtk1/win_gtk.c +++ b/src/gtk1/win_gtk.c @@ -211,7 +211,7 @@ gtk_myfixed_move (GtkMyFixed *myfixed, if (child->widget == widget) { -/* if ((child->x == x) && (child->y == y)) return; */ + if ((child->x == x) && (child->y == y)) return; child->x = x; child->y = y; diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index 69c55e6c43..9dc17c0291 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -1729,38 +1729,38 @@ int wxWindow::GetCharHeight() const int wxWindow::GetCharWidth() const { - wxASSERT_MSG( (m_widget != NULL), "invalid window" ); + wxASSERT_MSG( (m_widget != NULL), "invalid window" ); - if (!m_font.Ok()) - { - wxFAIL_MSG( "invalid font" ); - return -1; - } + if (!m_font.Ok()) + { + wxFAIL_MSG( "invalid font" ); + return -1; + } - GdkFont *font = m_font.GetInternalFont( 1.0 ); - return gdk_string_width( font, "H" ); + GdkFont *font = m_font.GetInternalFont( 1.0 ); + return gdk_string_width( font, "H" ); } void wxWindow::GetTextExtent( const wxString& string, int *x, int *y, int *descent, int *externalLeading, const wxFont *theFont, bool WXUNUSED(use16) ) const { - wxASSERT_MSG( (m_widget != NULL), "invalid window" ); + wxASSERT_MSG( (m_widget != NULL), "invalid window" ); - wxFont fontToUse = m_font; - if (theFont) fontToUse = *theFont; + wxFont fontToUse = m_font; + if (theFont) fontToUse = *theFont; - if (!fontToUse.Ok()) - { - wxFAIL_MSG( "invalid font" ); - return; - } - wxASSERT_MSG( (m_font.Ok()), "invalid font" ); + if (!fontToUse.Ok()) + { + wxFAIL_MSG( "invalid font" ); + return; + } + wxASSERT_MSG( (m_font.Ok()), "invalid font" ); - GdkFont *font = fontToUse.GetInternalFont( 1.0 ); - if (x) (*x) = gdk_string_width( font, string ); - if (y) (*y) = font->ascent + font->descent; - if (descent) (*descent) = font->descent; - if (externalLeading) (*externalLeading) = 0; // ?? + GdkFont *font = fontToUse.GetInternalFont( 1.0 ); + if (x) (*x) = gdk_string_width( font, string ); + if (y) (*y) = font->ascent + font->descent; + if (descent) (*descent) = font->descent; + if (externalLeading) (*externalLeading) = 0; // ?? } void wxWindow::MakeModal( bool modal ) @@ -1783,105 +1783,122 @@ void wxWindow::MakeModal( bool modal ) void wxWindow::SetFocus() { - wxASSERT_MSG( (m_widget != NULL), "invalid window" ); + wxASSERT_MSG( (m_widget != NULL), "invalid window" ); - GtkWidget *connect_widget = GetConnectWidget(); - if (connect_widget) - { - if (GTK_WIDGET_CAN_FOCUS(connect_widget) && !GTK_WIDGET_HAS_FOCUS (connect_widget) ) + GtkWidget *connect_widget = GetConnectWidget(); + if (connect_widget) { - gtk_widget_grab_focus (connect_widget); + if (GTK_WIDGET_CAN_FOCUS(connect_widget) && !GTK_WIDGET_HAS_FOCUS (connect_widget) ) + { + gtk_widget_grab_focus (connect_widget); + } } - } } bool wxWindow::OnClose() { - return TRUE; + return TRUE; } void wxWindow::AddChild( wxWindow *child ) { - wxASSERT_MSG( (m_widget != NULL), "invalid window" ); - wxASSERT_MSG( (child != NULL), "invalid child" ); + wxASSERT_MSG( (m_widget != NULL), "invalid window" ); + wxASSERT_MSG( (child != NULL), "invalid child" ); - m_children.Append( child ); + m_children.Append( child ); } wxList *wxWindow::GetChildren() { - return (&m_children); + return (&m_children); +} + +wxWindow *wxWindow::ReParent( wxWindow *newParent ) +{ + wxWindow *oldParent = GetParent(); + + if (oldParent) oldParent->RemoveChild( this ); + + gtk_widget_unparent( m_widget ); + + if (newParent) + { + newParent->AddChild( this ); + (newParent->m_insertCallback)( newParent, this ); + } + + return oldParent; } void wxWindow::RemoveChild( wxWindow *child ) { - if (GetChildren()) GetChildren()->DeleteObject( child ); - child->m_parent = (wxWindow *) NULL; + if (GetChildren()) GetChildren()->DeleteObject( child ); + child->m_parent = (wxWindow *) NULL; } void wxWindow::SetReturnCode( int retCode ) { - m_retCode = retCode; + m_retCode = retCode; } int wxWindow::GetReturnCode() { - return m_retCode; + return m_retCode; } void wxWindow::Raise() { - wxASSERT_MSG( (m_widget != NULL), "invalid window" ); + wxASSERT_MSG( (m_widget != NULL), "invalid window" ); - if (m_widget) gdk_window_raise( m_widget->window ); + if (m_widget) gdk_window_raise( m_widget->window ); } void wxWindow::Lower() { - wxASSERT_MSG( (m_widget != NULL), "invalid window" ); + wxASSERT_MSG( (m_widget != NULL), "invalid window" ); - if (m_widget) gdk_window_lower( m_widget->window ); + if (m_widget) gdk_window_lower( m_widget->window ); } wxEvtHandler *wxWindow::GetEventHandler() { - return m_eventHandler; + return m_eventHandler; } void wxWindow::SetEventHandler( wxEvtHandler *handler ) { - m_eventHandler = handler; + m_eventHandler = handler; } void wxWindow::PushEventHandler(wxEvtHandler *handler) { - handler->SetNextHandler(GetEventHandler()); - SetEventHandler(handler); + handler->SetNextHandler(GetEventHandler()); + SetEventHandler(handler); } wxEvtHandler *wxWindow::PopEventHandler(bool deleteHandler) { - if (GetEventHandler()) - { - wxEvtHandler *handlerA = GetEventHandler(); - wxEvtHandler *handlerB = handlerA->GetNextHandler(); - handlerA->SetNextHandler((wxEvtHandler *) NULL); - SetEventHandler(handlerB); - if (deleteHandler) + if (GetEventHandler()) { - delete handlerA; - return (wxEvtHandler*) NULL; - } - else - return handlerA; - } - else - return (wxEvtHandler *) NULL; + wxEvtHandler *handlerA = GetEventHandler(); + wxEvtHandler *handlerB = handlerA->GetNextHandler(); + handlerA->SetNextHandler((wxEvtHandler *) NULL); + SetEventHandler(handlerB); + if (deleteHandler) + { + delete handlerA; + return (wxEvtHandler*) NULL; + } + else + return handlerA; + } + else + return (wxEvtHandler *) NULL; } wxValidator *wxWindow::GetValidator() { - return m_windowValidator; + return m_windowValidator; } void wxWindow::SetValidator( const wxValidator& validator ) diff --git a/wx-config.in b/wx-config.in index 3c9515c273..824644d48b 100755 --- a/wx-config.in +++ b/wx-config.in @@ -36,7 +36,7 @@ while test $# -gt 0; do echo $exec_prefix ;; --version) - echo 1.97 + echo 1.99 ;; --cflags) if test @includedir@ != /usr/include ; then -- 2.45.2