]> git.saurik.com Git - wxWidgets.git/commitdiff
Update for bitmap, image on scaling, transparancy,
authorRobert Roebling <robert@roebling.de>
Sun, 6 Dec 1998 17:33:01 +0000 (17:33 +0000)
committerRobert Roebling <robert@roebling.de>
Sun, 6 Dec 1998 17:33:01 +0000 (17:33 +0000)
  wxCHECKs and no more dependance of wxBitmap on wxImage
  in its API

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1117 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

28 files changed:
include/wx/gtk/bitmap.h
include/wx/gtk/dc.h
include/wx/gtk/dcclient.h
include/wx/gtk/dcmemory.h
include/wx/gtk/dcps.h
include/wx/gtk1/bitmap.h
include/wx/gtk1/dc.h
include/wx/gtk1/dcclient.h
include/wx/gtk1/dcmemory.h
include/wx/gtk1/dcps.h
include/wx/image.h
samples/printing/printing.cpp
src/common/image.cpp
src/generic/listctrl.cpp
src/gtk/app.cpp
src/gtk/bitmap.cpp
src/gtk/dc.cpp
src/gtk/dcclient.cpp
src/gtk/dcmemory.cpp
src/gtk/dcps.cpp
src/gtk/dcscreen.cpp
src/gtk1/app.cpp
src/gtk1/bitmap.cpp
src/gtk1/dc.cpp
src/gtk1/dcclient.cpp
src/gtk1/dcmemory.cpp
src/gtk1/dcps.cpp
src/gtk1/dcscreen.cpp

index 35d5c3008a617a2b392089583cba82209b96d420..45258f067b7e9a0b2f05012b2b26eab10dfa5729 100644 (file)
@@ -19,7 +19,6 @@
 #include "wx/object.h"
 #include "wx/string.h"
 #include "wx/palette.h"
-#include "wx/image.h"
 
 //-----------------------------------------------------------------------------
 // classes
 class wxMask;
 class wxBitmap;
 
+//-----------------------------------------------------------------------------
+// also implemented here from wxImage
+//-----------------------------------------------------------------------------
+
+/*
+class wxImage : wxGDIObject
+{
+  wxImage( const wxBitmap &bitmap );
+  wxBitmap ConvertToBitmap() const;
+}
+*/
+
 //-----------------------------------------------------------------------------
 // wxMask
 //-----------------------------------------------------------------------------
@@ -61,7 +72,6 @@ public:
   wxBitmap();
   wxBitmap( int width, int height, int depth = -1 );
   wxBitmap( const char bits[], int width, int height, int depth = 1 );
-  wxBitmap( const wxImage &image );
   wxBitmap( const char **bits );
   wxBitmap( char **bits );
   wxBitmap( const wxBitmap& bmp );
@@ -73,14 +83,9 @@ public:
   bool operator != ( const wxBitmap& bmp );
   bool Ok() const;
     
-  wxImage ConvertToImage() const;
-
   int GetHeight() const;
   int GetWidth() const;
   int GetDepth() const;
-  void SetHeight( int height );
-  void SetWidth( int width );
-  void SetDepth( int depth );
 
   wxMask *GetMask() const;
   void SetMask( wxMask *mask );
@@ -94,6 +99,11 @@ public:
       
 // implementation      
 
+  void SetHeight( int height );
+  void SetWidth( int width );
+  void SetDepth( int depth );
+  void SetPixmap( GdkPixmap *pixmap );
+  
   GdkPixmap *GetPixmap() const;
   GdkBitmap *GetBitmap() const;
 
index 7870f30bd5ddd23479ad7b425c0972866f3ec815..e1ca5b0b91d6966b73c8b3ecf725616967a3ef07 100644 (file)
@@ -59,13 +59,13 @@ class wxDC: public wxObject
 
 public:
 
-  wxDC(void);
-  ~wxDC(void);
+  wxDC();
+  ~wxDC();
     
-  void BeginDrawing(void) {};
-  void EndDrawing(void) {};
+  virtual void BeginDrawing() {}
+  virtual void EndDrawing() {}
     
-  virtual bool Ok(void) const;
+  virtual bool Ok() const;
 
   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)
@@ -186,30 +186,30 @@ public:
   virtual long GetCharWidth(void) = 0;
   virtual long GetCharHeight(void) = 0;
     
-  virtual void Clear(void) = 0;
+  virtual void Clear() = 0;
             
   virtual void SetFont( const wxFont &font ) = 0;
-  virtual wxFont *GetFont(void) { return &m_font; };
+  virtual wxFont *GetFont() { return &m_font; };
     
   virtual void SetPen( const wxPen &pen ) = 0;
-  virtual wxPen *GetPen(void) { return &m_pen; };
+  virtual wxPen *GetPen() { return &m_pen; };
     
   virtual void SetBrush( const wxBrush &brush ) = 0;
-  virtual wxBrush *GetBrush(void) { return &m_brush; };
+  virtual wxBrush *GetBrush() { return &m_brush; };
 
   virtual void SetBackground( const wxBrush &brush ) = 0;
-  virtual wxBrush *GetBackground(void) { return &m_backgroundBrush; };
+  virtual wxBrush *GetBackground() { return &m_backgroundBrush; };
 
   virtual void SetLogicalFunction( int function ) = 0;
-  virtual int GetLogicalFunction(void) { return m_logicalFunction; };
+  virtual int GetLogicalFunction() { 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 wxColour& GetTextBackground() const { return (wxColour&)m_textBackgroundColour; };
+  virtual wxColour& GetTextForeground() const { return (wxColour&)m_textForegroundColour; };
     
   virtual void SetBackgroundMode( int mode ) = 0;
-  virtual int GetBackgroundMode(void) { return m_backgroundMode; };
+  virtual int GetBackgroundMode() { return m_backgroundMode; };
     
   virtual void SetPalette( const wxPalette& palette ) = 0;
   void SetColourMap( const wxPalette& palette ) { SetPalette(palette); };
@@ -220,19 +220,19 @@ public:
   virtual void GetClippingBox( long *x, long *y, long *width, long *height ) const;
   virtual void SetClippingRegion( const wxRegion &region  ) = 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 long MinX() const { return m_minX; }
+  virtual long MaxX() const { return m_maxX; }
+  virtual long MinY() const { return m_minY; }
+  virtual long MaxY() 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 bool StartDoc( const wxString& WXUNUSED(message) ) { return TRUE; }
+  virtual void EndDoc() {}
+  virtual void StartPage() {}
+  virtual void EndPage() {}
     
   virtual void SetMapMode( int mode );
   virtual int GetMapMode(void) const { return m_mappingMode; };
@@ -249,8 +249,8 @@ public:
 
   virtual void SetAxisOrientation( bool xLeftRight, bool yBottomUp );
     
-  virtual void SetOptimization( bool WXUNUSED(optimize) ) {};
-  virtual bool GetOptimization(void) { return m_optimize; };
+  virtual void SetOptimization( bool WXUNUSED(optimize) ) {}
+  virtual bool GetOptimization() { return m_optimize; }
     
   virtual long DeviceToLogicalX(long x) const;
   virtual long DeviceToLogicalY(long y) const;
@@ -264,7 +264,7 @@ public:
   // implementation
   
     void CalcBoundingBox( long x, long y );
-    void ComputeScaleAndOrigin(void);
+    void ComputeScaleAndOrigin();
     
     long XDEV2LOG(long x) const
        {
index c39315f143cefee10e3c1df0abe1a3a99a73fb3e..9a466630293d92147240e1305282bf518b296b6d 100644 (file)
@@ -35,10 +35,10 @@ class wxWindowDC: public wxDC
   DECLARE_DYNAMIC_CLASS(wxWindowDC)
 
 public:
-  wxWindowDC(void);
+  wxWindowDC();
   wxWindowDC( wxWindow *win );
     
-  ~wxWindowDC(void);
+  ~wxWindowDC();
     
   virtual void FloodFill( long x, long y, const wxColour& col, int style=wxFLOOD_SURFACE );
   virtual bool GetPixel( long x1, long y1, wxColour *col ) const;
@@ -60,21 +60,21 @@ public:
   virtual void DrawRoundedRectangle( long x, long y, long width, long height, double radius = 20.0 );
   virtual void DrawEllipse( long x, long y, long width, long height );
     
-  virtual bool CanDrawBitmap(void) const;
+  virtual bool CanDrawBitmap() const;
   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 );
 
   virtual void DrawText( const wxString &text, long x, long y, bool use16 = FALSE );
-  virtual bool CanGetTextExtent(void) const;
+  virtual bool CanGetTextExtent() const;
   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 );
-  virtual long GetCharWidth(void);
-  virtual long GetCharHeight(void);
+  virtual long GetCharWidth();
+  virtual long GetCharHeight();
     
-  virtual void Clear(void);
+  virtual void Clear();
             
   virtual void SetFont( const wxFont &font );
   virtual void SetPen( const wxPen &pen );
@@ -87,7 +87,7 @@ public:
   virtual void SetPalette( const wxPalette& palette );
     
   virtual void SetClippingRegion( long x, long y, long width, long height );
-  virtual void DestroyClippingRegion(void);
+  virtual void DestroyClippingRegion();
   virtual void SetClippingRegion( const wxRegion &region  );
     
   virtual void DrawSpline( wxList *points );
@@ -102,9 +102,9 @@ public:
   GdkColormap  *m_cmap;
   bool          m_isMemDC;
     
-  void SetUpDC(void);
-  void Destroy(void);
-  GdkWindow *GetWindow(void);
+  void SetUpDC();
+  void Destroy();
+  GdkWindow *GetWindow();
 };
 
 //-----------------------------------------------------------------------------
@@ -116,7 +116,7 @@ class wxPaintDC : public wxWindowDC
   DECLARE_DYNAMIC_CLASS(wxPaintDC)
 
 public:
-  wxPaintDC(void);
+  wxPaintDC();
   wxPaintDC( wxWindow *win );
 };
 
@@ -129,7 +129,7 @@ class wxClientDC : public wxWindowDC
   DECLARE_DYNAMIC_CLASS(wxClientDC)
 
 public:
-  wxClientDC(void);
+  wxClientDC();
   wxClientDC( wxWindow *win );
 };
 
index 632afa38eccb19feb2e44a1cc54c495a71c92a00..10d0f2905f536a0b96b9b8f255debdd9bb4a2d5b 100644 (file)
@@ -33,9 +33,9 @@ class wxMemoryDC: public wxWindowDC
   DECLARE_DYNAMIC_CLASS(wxMemoryDC)
 
 public:
-  wxMemoryDC(void);
+  wxMemoryDC();
   wxMemoryDC( wxDC *dc ); // Create compatible DC
-  ~wxMemoryDC(void);
+  ~wxMemoryDC();
   virtual void SelectObject( const wxBitmap& bitmap );
   void GetSize( int *width, int *height ) const;
 
index 33c03a2f0d5676c88d813eb47b260868cca16a5d..8d0ccedc118cc5fa2182e66f6f13d41199c5698a 100644 (file)
@@ -45,10 +45,12 @@ public:
 
   bool Create(const wxString& output, bool interactive = TRUE, wxWindow *parent = (wxWindow *) NULL);
 
+  virtual bool Ok() const;
+
   virtual bool PrinterDialog(wxWindow *parent = (wxWindow *) NULL);
 
-  inline virtual void BeginDrawing(void) {} ;
-  inline virtual void EndDrawing(void) {} ;
+  virtual void BeginDrawing() {}
+  virtual void EndDrawing() {}
 
   void FloodFill(long x1, long y1, const wxColour &col, int style=wxFLOOD_SURFACE) ;
   bool GetPixel(long x1, long y1, wxColour *col) const;
@@ -81,7 +83,6 @@ public:
   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();
@@ -114,7 +115,7 @@ public:
   void SetAxisOrientation( bool xLeftRight, bool yBottomUp );
   void SetDeviceOrigin( long x, long y );
   
-  inline void SetBackgroundMode(int WXUNUSED(mode)) {};
+  inline void SetBackgroundMode(int WXUNUSED(mode)) {}
   inline void SetPalette(const wxPalette& WXUNUSED(palette)) {}
   
   inline ofstream *GetStream(void) const { return m_pstream; }
index 35d5c3008a617a2b392089583cba82209b96d420..45258f067b7e9a0b2f05012b2b26eab10dfa5729 100644 (file)
@@ -19,7 +19,6 @@
 #include "wx/object.h"
 #include "wx/string.h"
 #include "wx/palette.h"
-#include "wx/image.h"
 
 //-----------------------------------------------------------------------------
 // classes
 class wxMask;
 class wxBitmap;
 
+//-----------------------------------------------------------------------------
+// also implemented here from wxImage
+//-----------------------------------------------------------------------------
+
+/*
+class wxImage : wxGDIObject
+{
+  wxImage( const wxBitmap &bitmap );
+  wxBitmap ConvertToBitmap() const;
+}
+*/
+
 //-----------------------------------------------------------------------------
 // wxMask
 //-----------------------------------------------------------------------------
@@ -61,7 +72,6 @@ public:
   wxBitmap();
   wxBitmap( int width, int height, int depth = -1 );
   wxBitmap( const char bits[], int width, int height, int depth = 1 );
-  wxBitmap( const wxImage &image );
   wxBitmap( const char **bits );
   wxBitmap( char **bits );
   wxBitmap( const wxBitmap& bmp );
@@ -73,14 +83,9 @@ public:
   bool operator != ( const wxBitmap& bmp );
   bool Ok() const;
     
-  wxImage ConvertToImage() const;
-
   int GetHeight() const;
   int GetWidth() const;
   int GetDepth() const;
-  void SetHeight( int height );
-  void SetWidth( int width );
-  void SetDepth( int depth );
 
   wxMask *GetMask() const;
   void SetMask( wxMask *mask );
@@ -94,6 +99,11 @@ public:
       
 // implementation      
 
+  void SetHeight( int height );
+  void SetWidth( int width );
+  void SetDepth( int depth );
+  void SetPixmap( GdkPixmap *pixmap );
+  
   GdkPixmap *GetPixmap() const;
   GdkBitmap *GetBitmap() const;
 
index 7870f30bd5ddd23479ad7b425c0972866f3ec815..e1ca5b0b91d6966b73c8b3ecf725616967a3ef07 100644 (file)
@@ -59,13 +59,13 @@ class wxDC: public wxObject
 
 public:
 
-  wxDC(void);
-  ~wxDC(void);
+  wxDC();
+  ~wxDC();
     
-  void BeginDrawing(void) {};
-  void EndDrawing(void) {};
+  virtual void BeginDrawing() {}
+  virtual void EndDrawing() {}
     
-  virtual bool Ok(void) const;
+  virtual bool Ok() const;
 
   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)
@@ -186,30 +186,30 @@ public:
   virtual long GetCharWidth(void) = 0;
   virtual long GetCharHeight(void) = 0;
     
-  virtual void Clear(void) = 0;
+  virtual void Clear() = 0;
             
   virtual void SetFont( const wxFont &font ) = 0;
-  virtual wxFont *GetFont(void) { return &m_font; };
+  virtual wxFont *GetFont() { return &m_font; };
     
   virtual void SetPen( const wxPen &pen ) = 0;
-  virtual wxPen *GetPen(void) { return &m_pen; };
+  virtual wxPen *GetPen() { return &m_pen; };
     
   virtual void SetBrush( const wxBrush &brush ) = 0;
-  virtual wxBrush *GetBrush(void) { return &m_brush; };
+  virtual wxBrush *GetBrush() { return &m_brush; };
 
   virtual void SetBackground( const wxBrush &brush ) = 0;
-  virtual wxBrush *GetBackground(void) { return &m_backgroundBrush; };
+  virtual wxBrush *GetBackground() { return &m_backgroundBrush; };
 
   virtual void SetLogicalFunction( int function ) = 0;
-  virtual int GetLogicalFunction(void) { return m_logicalFunction; };
+  virtual int GetLogicalFunction() { 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 wxColour& GetTextBackground() const { return (wxColour&)m_textBackgroundColour; };
+  virtual wxColour& GetTextForeground() const { return (wxColour&)m_textForegroundColour; };
     
   virtual void SetBackgroundMode( int mode ) = 0;
-  virtual int GetBackgroundMode(void) { return m_backgroundMode; };
+  virtual int GetBackgroundMode() { return m_backgroundMode; };
     
   virtual void SetPalette( const wxPalette& palette ) = 0;
   void SetColourMap( const wxPalette& palette ) { SetPalette(palette); };
@@ -220,19 +220,19 @@ public:
   virtual void GetClippingBox( long *x, long *y, long *width, long *height ) const;
   virtual void SetClippingRegion( const wxRegion &region  ) = 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 long MinX() const { return m_minX; }
+  virtual long MaxX() const { return m_maxX; }
+  virtual long MinY() const { return m_minY; }
+  virtual long MaxY() 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 bool StartDoc( const wxString& WXUNUSED(message) ) { return TRUE; }
+  virtual void EndDoc() {}
+  virtual void StartPage() {}
+  virtual void EndPage() {}
     
   virtual void SetMapMode( int mode );
   virtual int GetMapMode(void) const { return m_mappingMode; };
@@ -249,8 +249,8 @@ public:
 
   virtual void SetAxisOrientation( bool xLeftRight, bool yBottomUp );
     
-  virtual void SetOptimization( bool WXUNUSED(optimize) ) {};
-  virtual bool GetOptimization(void) { return m_optimize; };
+  virtual void SetOptimization( bool WXUNUSED(optimize) ) {}
+  virtual bool GetOptimization() { return m_optimize; }
     
   virtual long DeviceToLogicalX(long x) const;
   virtual long DeviceToLogicalY(long y) const;
@@ -264,7 +264,7 @@ public:
   // implementation
   
     void CalcBoundingBox( long x, long y );
-    void ComputeScaleAndOrigin(void);
+    void ComputeScaleAndOrigin();
     
     long XDEV2LOG(long x) const
        {
index c39315f143cefee10e3c1df0abe1a3a99a73fb3e..9a466630293d92147240e1305282bf518b296b6d 100644 (file)
@@ -35,10 +35,10 @@ class wxWindowDC: public wxDC
   DECLARE_DYNAMIC_CLASS(wxWindowDC)
 
 public:
-  wxWindowDC(void);
+  wxWindowDC();
   wxWindowDC( wxWindow *win );
     
-  ~wxWindowDC(void);
+  ~wxWindowDC();
     
   virtual void FloodFill( long x, long y, const wxColour& col, int style=wxFLOOD_SURFACE );
   virtual bool GetPixel( long x1, long y1, wxColour *col ) const;
@@ -60,21 +60,21 @@ public:
   virtual void DrawRoundedRectangle( long x, long y, long width, long height, double radius = 20.0 );
   virtual void DrawEllipse( long x, long y, long width, long height );
     
-  virtual bool CanDrawBitmap(void) const;
+  virtual bool CanDrawBitmap() const;
   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 );
 
   virtual void DrawText( const wxString &text, long x, long y, bool use16 = FALSE );
-  virtual bool CanGetTextExtent(void) const;
+  virtual bool CanGetTextExtent() const;
   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 );
-  virtual long GetCharWidth(void);
-  virtual long GetCharHeight(void);
+  virtual long GetCharWidth();
+  virtual long GetCharHeight();
     
-  virtual void Clear(void);
+  virtual void Clear();
             
   virtual void SetFont( const wxFont &font );
   virtual void SetPen( const wxPen &pen );
@@ -87,7 +87,7 @@ public:
   virtual void SetPalette( const wxPalette& palette );
     
   virtual void SetClippingRegion( long x, long y, long width, long height );
-  virtual void DestroyClippingRegion(void);
+  virtual void DestroyClippingRegion();
   virtual void SetClippingRegion( const wxRegion &region  );
     
   virtual void DrawSpline( wxList *points );
@@ -102,9 +102,9 @@ public:
   GdkColormap  *m_cmap;
   bool          m_isMemDC;
     
-  void SetUpDC(void);
-  void Destroy(void);
-  GdkWindow *GetWindow(void);
+  void SetUpDC();
+  void Destroy();
+  GdkWindow *GetWindow();
 };
 
 //-----------------------------------------------------------------------------
@@ -116,7 +116,7 @@ class wxPaintDC : public wxWindowDC
   DECLARE_DYNAMIC_CLASS(wxPaintDC)
 
 public:
-  wxPaintDC(void);
+  wxPaintDC();
   wxPaintDC( wxWindow *win );
 };
 
@@ -129,7 +129,7 @@ class wxClientDC : public wxWindowDC
   DECLARE_DYNAMIC_CLASS(wxClientDC)
 
 public:
-  wxClientDC(void);
+  wxClientDC();
   wxClientDC( wxWindow *win );
 };
 
index 632afa38eccb19feb2e44a1cc54c495a71c92a00..10d0f2905f536a0b96b9b8f255debdd9bb4a2d5b 100644 (file)
@@ -33,9 +33,9 @@ class wxMemoryDC: public wxWindowDC
   DECLARE_DYNAMIC_CLASS(wxMemoryDC)
 
 public:
-  wxMemoryDC(void);
+  wxMemoryDC();
   wxMemoryDC( wxDC *dc ); // Create compatible DC
-  ~wxMemoryDC(void);
+  ~wxMemoryDC();
   virtual void SelectObject( const wxBitmap& bitmap );
   void GetSize( int *width, int *height ) const;
 
index 33c03a2f0d5676c88d813eb47b260868cca16a5d..8d0ccedc118cc5fa2182e66f6f13d41199c5698a 100644 (file)
@@ -45,10 +45,12 @@ public:
 
   bool Create(const wxString& output, bool interactive = TRUE, wxWindow *parent = (wxWindow *) NULL);
 
+  virtual bool Ok() const;
+
   virtual bool PrinterDialog(wxWindow *parent = (wxWindow *) NULL);
 
-  inline virtual void BeginDrawing(void) {} ;
-  inline virtual void EndDrawing(void) {} ;
+  virtual void BeginDrawing() {}
+  virtual void EndDrawing() {}
 
   void FloodFill(long x1, long y1, const wxColour &col, int style=wxFLOOD_SURFACE) ;
   bool GetPixel(long x1, long y1, wxColour *col) const;
@@ -81,7 +83,6 @@ public:
   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();
@@ -114,7 +115,7 @@ public:
   void SetAxisOrientation( bool xLeftRight, bool yBottomUp );
   void SetDeviceOrigin( long x, long y );
   
-  inline void SetBackgroundMode(int WXUNUSED(mode)) {};
+  inline void SetBackgroundMode(int WXUNUSED(mode)) {}
   inline void SetPalette(const wxPalette& WXUNUSED(palette)) {}
   
   inline ofstream *GetStream(void) const { return m_pstream; }
index a8cf85145db9ed52e04abe3ba6457ba90c140bbb..dc93c603c6a730790c2d326a0cbeb8faecffd2e2 100644 (file)
@@ -28,6 +28,8 @@ class WXDLLEXPORT wxPNGHandler;
 class WXDLLEXPORT wxBMPHandler;
 class WXDLLEXPORT wxImage;
 
+class WXDLLEXPORT wxBitmap;
+
 //-----------------------------------------------------------------------------
 // wxImageHandler
 //-----------------------------------------------------------------------------
@@ -115,10 +117,16 @@ public:
   
   wxImage( const wxImage& image );
   wxImage( const wxImage* image );
+  
+  // these functions get implemented in /src/(platform)/bitmap.cpp 
+  wxImage( const wxBitmap &bitmap );
+  wxBitmap ConvertToBitmap() const;
 
   void Create( int width, int height );
   void Destroy();
   
+  wxImage Scale( int width, int height );
+  
   virtual bool LoadFile( const wxString& name, long type = wxBITMAP_TYPE_PNG );
   virtual bool SaveFile( const wxString& name, int type );
 
index 782e17de3d9c99ff72ebcedc37d99052d7535fd1..598d0876fef1adb51417e44a4d65dc12bdacbe95 100644 (file)
 
 #include "printing.h"
 
+#ifndef __WXMSW__
+#include "mondrian.xpm"
+#endif
+
 // Declare a frame
 MyFrame   *frame = (MyFrame *) NULL;
 int orientation = wxPORTRAIT;
@@ -54,10 +58,6 @@ int orientation = wxPORTRAIT;
 // Main proc
 IMPLEMENT_APP(MyApp)
 
-#if defined(__WXGTK__) || defined(__WXMOTIF__)
-#include "folder.xpm"
-#endif
-
 // Writes a header on a page. Margin units are in millimetres.
 bool WritePageHeader(wxPrintout *printout, wxDC *dc, char *text, float mmToLogical);
 
@@ -78,12 +78,7 @@ bool MyApp::OnInit(void)
   frame->CreateStatusBar(2);
 
   // Load icon and bitmap
-#ifdef __WXMSW__
-  frame->SetIcon(wxIcon("mondrian"));
-#endif
-#ifdef __X__
-//  frame->SetIcon(wxIcon(mondrian_bits, mondrian_width, mondrian_height));
-#endif
+  frame->SetIcon( wxICON( mondrian) );
 
   // Make a menubar
   wxMenu *file_menu = new wxMenu;
@@ -324,13 +319,7 @@ void MyFrame::Draw(wxDC& dc)
   dc.DrawLine(0, 0, 200, 200);
   dc.DrawLine(200, 0, 0, 200);
   
-#if defined(__WXGTK__) || defined(__WXMOTIF__)
-  wxIcon my_icon( folder_xpm );
-#elif defined(__WXMSW__)
-  wxIcon my_icon( "mondrian" );
-#elif
-#error "Platform not supported."
-#endif
+  wxIcon my_icon( wxICON(mondrian) );
 
   dc.DrawIcon( my_icon, 100, 100);
 }
index e838d1cfc5883a6bc866ca4131a37309c67941be..1e47bc22c7042076fdade1c6a0f2144c55d7dceb 100644 (file)
@@ -118,6 +118,41 @@ void wxImage::Destroy()
     UnRef();
 }
 
+wxImage wxImage::Scale( int width, int height )
+{
+    wxImage image;
+    
+    wxCHECK_MSG( Ok(), image, "invlaid image" );
+    
+    wxCHECK_MSG( (width > 0) && (height > 0), image, "invalid image size" );
+    
+    image.Create( width, height );
+    
+    char unsigned *data = image.GetData();
+    
+    wxCHECK_MSG( data, image, "unable to create image" );
+    
+    if (M_IMGDATA->m_hasMask)
+        image.SetMaskColour( M_IMGDATA->m_maskRed, M_IMGDATA->m_maskGreen, M_IMGDATA->m_maskBlue );
+    
+    double xscale = (double)width / (double)M_IMGDATA->m_width;
+    double yscale = (double)height / (double)M_IMGDATA->m_height;
+    
+    for (int j = 0; j < height; j++)
+    {
+        for (int i = 0; i < width; i++)
+       {
+           int new_pos = 3*(j*width + i);
+           int old_pos = 3*((long)(j/yscale)*M_IMGDATA->m_width + (long)(i/xscale));
+           data[ new_pos   ] = M_IMGDATA->m_data[ old_pos   ];
+           data[ new_pos+1 ] = M_IMGDATA->m_data[ old_pos+1 ];
+           data[ new_pos+2 ] = M_IMGDATA->m_data[ old_pos+2 ];
+       }
+    }
+    
+    return image;
+}
+  
 bool wxImage::Ok() const 
 { 
     return (M_IMGDATA && M_IMGDATA->m_ok); 
@@ -125,18 +160,19 @@ bool wxImage::Ok() const
 
 char unsigned *wxImage::GetData() const
 {
-    if (!Ok()) return (char unsigned *)NULL;
+    wxCHECK_MSG( Ok(), (char unsigned *)NULL, "invalid image" );
   
     return M_IMGDATA->m_data;
 }
 
 void wxImage::SetData( char unsigned *WXUNUSED(data) )
 {
+    wxCHECK_RET( Ok(), "invalid image" );
 }
 
 void wxImage::SetMaskColour( unsigned char r, unsigned char g, unsigned char b )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid image" );
   
     M_IMGDATA->m_maskRed = r;
     M_IMGDATA->m_maskGreen = g;
@@ -146,47 +182,51 @@ void wxImage::SetMaskColour( unsigned char r, unsigned char g, unsigned char b )
 
 unsigned char wxImage::GetMaskRed() const
 {
-    if (!Ok()) return 0;
+    wxCHECK_MSG( Ok(), 0, "invalid image" );
   
     return M_IMGDATA->m_maskRed;
 }
 
 unsigned char wxImage::GetMaskGreen() const
 {
-    if (!Ok()) return 0;
+    wxCHECK_MSG( Ok(), 0, "invalid image" );
    
     return M_IMGDATA->m_maskGreen;
 }
 
 unsigned char wxImage::GetMaskBlue() const
 {
-    if (!Ok()) return 0;
+    wxCHECK_MSG( Ok(), 0, "invalid image" );
   
     return M_IMGDATA->m_maskBlue;
 }
   
 void wxImage::SetMask( bool mask )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid image" );
   
     M_IMGDATA->m_hasMask = mask;
 }
 
 bool wxImage::HasMask() const
 {
-    if (!Ok()) return FALSE;
+    wxCHECK_MSG( Ok(), FALSE, "invalid image" );
   
     return M_IMGDATA->m_hasMask;
 }
 
 int wxImage::GetWidth() const 
 { 
-    return (M_IMGDATA ? M_IMGDATA->m_width : 0); 
+    wxCHECK_MSG( Ok(), 0, "invalid image" );
+    
+    return M_IMGDATA->m_width; 
 }
 
 int wxImage::GetHeight() const 
 { 
-    return (M_IMGDATA ? M_IMGDATA->m_height : 0); 
+    wxCHECK_MSG( Ok(), 0, "invalid image" );
+    
+    return M_IMGDATA->m_height; 
 }
 
 bool wxImage::LoadFile( const wxString& filename, long type )
@@ -216,6 +256,8 @@ bool wxImage::LoadFile( const wxString& filename, long type )
 
 bool wxImage::SaveFile( const wxString& filename, int type )
 {
+    wxCHECK_MSG( Ok(), FALSE, "invalid image" );
+    
     wxImageHandler *handler = FindHandler(type);
 
     if (handler == NULL) 
index a75bf69fb813e4478a79fd1bdffa74ae83266ef9..8cb3082a06d78a2ad1d1e673d5669b42dc4ef972 100644 (file)
@@ -2004,7 +2004,7 @@ void wxListMainWindow::DeleteItem( long index )
 
 void wxListMainWindow::DeleteColumn( int col )
 {
-  wxCHECK_RET( col < m_columns.GetCount(),
+  wxCHECK_RET( col < (int)m_columns.GetCount(),
                "attempting to delete inexistent column in wxListView" );
 
   m_dirty = TRUE;
index 631a12eff8d5308bb38e787e03e4fa7393573b95..0e7eec9b1bc11f1a5446e56674979962eb3455cf 100644 (file)
@@ -21,6 +21,7 @@
 #include "wx/settings.h"
 #include "wx/resource.h"
 #include "wx/module.h"
+#include "wx/image.h"
 
 #include "unistd.h"
 
index 476a09919fec79fcb657e508e39af4f929508e31..f92b14637702d1082ace2f247c1839e198d18898 100644 (file)
@@ -16,6 +16,7 @@
 #include "wx/filefn.h"
 #include "gdk/gdkprivate.h"
 #include "gdk/gdkx.h"
+#include "wx/image.h"
 
 //-----------------------------------------------------------------------------
 // wxMask
@@ -151,6 +152,8 @@ wxBitmap::wxBitmap( char **bits )
   
     M_BMPDATA->m_pixmap = gdk_pixmap_create_from_xpm_d( parent, &mask, NULL, (gchar **) bits );
     
+    wxCHECK_RET( M_BMPDATA->m_pixmap, "couldn't create pixmap" );
+    
     if (mask)
     {
         M_BMPDATA->m_mask = new wxMask();
@@ -195,6 +198,8 @@ wxBitmap::wxBitmap( const char bits[], int width, int height, int WXUNUSED(depth
     M_BMPDATA->m_height = height;
     M_BMPDATA->m_bpp = 1;
 
+    wxCHECK_RET( M_BMPDATA->m_bitmap, "couldn't create bitmap" );
+      
     if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
 }
   
@@ -246,33 +251,6 @@ int wxBitmap::GetDepth(void) const
     return M_BMPDATA->m_bpp;
 }
 
-void wxBitmap::SetHeight( int height )
-{
-    if (!Ok()) return;
-  
-    wxFAIL_MSG( "wxBitmap::SetHeight not implemented" );
-  
-    M_BMPDATA->m_height = height;
-}
-
-void wxBitmap::SetWidth( int width )
-{
-    if (!Ok()) return;
-  
-    wxFAIL_MSG( "wxBitmap::SetWidth not implemented" );
-  
-    M_BMPDATA->m_width = width;
-}
-
-void wxBitmap::SetDepth( int depth )
-{
-    if (!Ok()) return;
-  
-    wxFAIL_MSG( "wxBitmap::SetDepth not implemented" );
-  
-    M_BMPDATA->m_bpp = depth;
-}
-
 wxMask *wxBitmap::GetMask(void) const
 {
     wxCHECK_MSG( Ok(), (wxMask *) NULL, "invalid bitmap" );
@@ -295,7 +273,7 @@ bool wxBitmap::SaveFile( const wxString &name, int type, wxPalette *WXUNUSED(pal
   
     if (type == wxBITMAP_TYPE_PNG)
     {
-        wxImage image = ConvertToImage();
+        wxImage image( *this );
        if (image.Ok()) return image.SaveFile( name, type );
     }
     
@@ -330,13 +308,13 @@ bool wxBitmap::LoadFile( const wxString &name, int type )
     {
         wxImage image;
         image.LoadFile( name, type );
-        if (image.Ok()) *this = wxBitmap( image );
+        if (image.Ok()) *this = image.ConvertToBitmap();
     }
     else if (type == wxBITMAP_TYPE_BMP)
     {
         wxImage image;
         image.LoadFile( name, type );
-        if (image.Ok()) *this = wxBitmap( image );
+        if (image.Ok()) *this = image.ConvertToBitmap();
     }
     else 
         return FALSE;
@@ -351,6 +329,34 @@ wxPalette *wxBitmap::GetPalette(void) const
     return M_BMPDATA->m_palette;
 }
 
+void wxBitmap::SetHeight( int height )
+{
+    if (!m_refData) m_refData = new wxBitmapRefData();
+
+    M_BMPDATA->m_height = height;
+}
+
+void wxBitmap::SetWidth( int width )
+{
+    if (!m_refData) m_refData = new wxBitmapRefData();
+
+    M_BMPDATA->m_width = width;
+}
+
+void wxBitmap::SetDepth( int depth )
+{
+    if (!m_refData) m_refData = new wxBitmapRefData();
+
+    M_BMPDATA->m_bpp = depth;
+}
+
+void wxBitmap::SetPixmap( GdkPixmap *pixmap )
+{
+    if (!m_refData) m_refData = new wxBitmapRefData();
+
+    M_BMPDATA->m_pixmap = pixmap;
+}
+
 GdkPixmap *wxBitmap::GetPixmap(void) const
 {
     wxCHECK_MSG( Ok(), (GdkPixmap *) NULL, "invalid bitmap" );
@@ -365,44 +371,48 @@ GdkBitmap *wxBitmap::GetBitmap(void) const
     return M_BMPDATA->m_bitmap;
 }
   
-wxBitmap::wxBitmap( const wxImage &image )
+//-----------------------------------------------------------------------------
+// wxImage
+//-----------------------------------------------------------------------------
+
+wxBitmap wxImage::ConvertToBitmap() const
 {
-    if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
-  
-    if (!image.Ok()) return;
+    wxBitmap bitmap;
 
-    m_refData = new wxBitmapRefData();
+    wxCHECK_MSG( Ok(), bitmap, "invalid image" );
 
-    M_BMPDATA->m_height = image.GetHeight();
-    M_BMPDATA->m_width = image.GetWidth();
-    int width = image.GetWidth();
-    int height = image.GetHeight();
+    int width = GetWidth();
+    int height = GetHeight();
   
+    bitmap.SetHeight( height );
+    bitmap.SetWidth( width );
+    
     // Create picture
   
     GdkImage *data_image = 
       gdk_image_new( GDK_IMAGE_FASTEST, gdk_visual_get_system(), width, height );
   
-    M_BMPDATA->m_pixmap = 
-      gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, -1 );
+    bitmap.SetPixmap( gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, -1 ) );
 
     // Create mask
   
     GdkImage *mask_image = (GdkImage*) NULL;
   
-    if (image.HasMask())
+    if (HasMask())
     {
         unsigned char *mask_data = (unsigned char*)malloc( ((width >> 3)+8) * height );
   
         mask_image =  gdk_image_new_bitmap( gdk_visual_get_system(), mask_data, width, height );
   
-        M_BMPDATA->m_mask = new wxMask();
-        M_BMPDATA->m_mask->m_bitmap = gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, 1 );
+       wxMask *mask = new wxMask();
+       mask->m_bitmap = gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, 1 );
+       
+       bitmap.SetMask( mask );
     }
   
     // Retrieve depth  
   
-    GdkVisual *visual = gdk_window_get_visual( M_BMPDATA->m_pixmap );
+    GdkVisual *visual = gdk_window_get_visual( bitmap.GetPixmap() );
     if (visual == NULL) visual = gdk_window_get_visual( (GdkWindow*) &gdk_root_parent );
     int bpp = visual->depth;
     if ((bpp == 16) && (visual->red_mask != 0xf800)) bpp = 15;
@@ -424,11 +434,11 @@ wxBitmap::wxBitmap( const wxImage &image )
         else if ((visual->green_mask > visual->blue_mask) && (visual->blue_mask > visual->red_mask))  b_o = GBR;
     }
   
-    int r_mask = image.GetMaskRed();
-    int g_mask = image.GetMaskGreen();
-    int b_mask = image.GetMaskBlue();
+    int r_mask = GetMaskRed();
+    int g_mask = GetMaskGreen();
+    int b_mask = GetMaskBlue();
   
-    unsigned char* data = image.GetData();
+    unsigned char* data = GetData();
   
     int index = 0;
     for (int y = 0; y < height; y++)
@@ -442,7 +452,7 @@ wxBitmap::wxBitmap( const wxImage &image )
             int b = data[index];
            index++;
        
-           if (image.HasMask())
+           if (HasMask())
            {
                if ((r == r_mask) && (b == b_mask) && (g == g_mask))
                    gdk_image_put_pixel( mask_image, x, y, 1 );
@@ -506,40 +516,59 @@ wxBitmap::wxBitmap( const wxImage &image )
         
     // Blit picture
   
-    GdkGC *data_gc = gdk_gc_new( M_BMPDATA->m_pixmap );
+    GdkGC *data_gc = gdk_gc_new( bitmap.GetPixmap() );
   
-    gdk_draw_image( M_BMPDATA->m_pixmap, data_gc, data_image, 0, 0, 0, 0, width, height );
+    gdk_draw_image( bitmap.GetPixmap(), data_gc, data_image, 0, 0, 0, 0, width, height );
   
     gdk_image_destroy( data_image );
     gdk_gc_unref( data_gc );
   
     // Blit mask
   
-    if (image.HasMask())
+    if (HasMask())
     {
-        GdkGC *mask_gc = gdk_gc_new( M_BMPDATA->m_mask->m_bitmap );
+        GdkGC *mask_gc = gdk_gc_new( bitmap.GetMask()->GetBitmap() );
   
-        gdk_draw_image( M_BMPDATA->m_mask->m_bitmap, mask_gc, mask_image, 0, 0, 0, 0, width, height );
+        gdk_draw_image( bitmap.GetMask()->GetBitmap(), mask_gc, mask_image, 0, 0, 0, 0, width, height );
   
         gdk_image_destroy( mask_image );
         gdk_gc_unref( mask_gc );
     }
+    
+    return bitmap;
 }
 
-wxImage wxBitmap::ConvertToImage() const
+wxImage::wxImage( const wxBitmap &bitmap )
 {
-    wxImage image;
-
-    wxCHECK_MSG( Ok(), image, "invalid bitmap" );
+    wxCHECK_RET( bitmap.Ok(), "invalid bitmap" );
   
-    GdkImage *gdk_image = gdk_image_get( M_BMPDATA->m_pixmap, 0, 0, M_BMPDATA->m_width, M_BMPDATA->m_height );
-  
-    if (!gdk_image) return image;
+    GdkImage *gdk_image = gdk_image_get( bitmap.GetPixmap(), 
+                                         0, 0, 
+                                        bitmap.GetWidth(), bitmap.GetHeight() );
+    
+    wxCHECK_RET( gdk_image, "couldn't create image" );
   
-    image.Create( M_BMPDATA->m_width, M_BMPDATA->m_height );
-    char unsigned *data = image.GetData();
+    Create( bitmap.GetWidth(), bitmap.GetHeight() );
+    char unsigned *data = GetData();
+    
+    if (!data)
+    {
+        gdk_image_destroy( gdk_image );
+        wxFAIL_MSG( "couldn't create image" );
+       return;
+    }
+    
+    GdkImage *gdk_image_mask = (GdkImage*) NULL;
+    if (bitmap.GetMask())
+    {
+        gdk_image_mask = gdk_image_get( bitmap.GetMask()->GetBitmap(), 
+                                       0, 0, 
+                                       bitmap.GetWidth(), bitmap.GetHeight() );
 
-    GdkVisual *visual = gdk_window_get_visual( M_BMPDATA->m_pixmap );
+       SetMaskColour( 16, 16, 16 );  // anything unlikely and dividable
+    }
+  
+    GdkVisual *visual = gdk_window_get_visual( bitmap.GetPixmap() );
     if (visual == NULL) visual = gdk_window_get_visual( (GdkWindow*) &gdk_root_parent );
     int bpp = visual->depth;
     if ((bpp == 16) && (visual->red_mask != 0xf800)) bpp = 15;
@@ -547,9 +576,9 @@ wxImage wxBitmap::ConvertToImage() const
     GdkColormap *cmap = gtk_widget_get_default_colormap();
   
     long pos = 0;
-    for (int j = 0; j < M_BMPDATA->m_height; j++)
+    for (int j = 0; j < bitmap.GetHeight(); j++)
     {
-        for (int i = 0; i < M_BMPDATA->m_width; i++)
+        for (int i = 0; i < bitmap.GetWidth(); i++)
         {
             int pixel = gdk_image_get_pixel( gdk_image, i, j );
             if (bpp <= 8)
@@ -574,13 +603,23 @@ wxImage wxBitmap::ConvertToImage() const
                 data[pos+2] = pixel & 0xff;
             }
       
+           if (gdk_image_mask)
+           {
+               int mask_pixel = gdk_image_get_pixel( gdk_image_mask, i, j );
+               if (mask_pixel == 0)
+               {
+                    data[pos] = 16;
+                    data[pos+1] = 16;
+                    data[pos+2] = 16;
+              }
+           }
+       
             pos += 3;
         }
     }
   
     gdk_image_destroy( gdk_image );
-  
-    return image;
+    if (gdk_image_mask) gdk_image_destroy( gdk_image_mask );
 }
 
 
index d782330da8f0f624b504af663c3ed1188618d1e3..44fe792814d64d4d95e4331081e6a7534cd778d9 100644 (file)
 
 IMPLEMENT_ABSTRACT_CLASS(wxDC,wxObject)
 
-wxDC::wxDC(void)
+wxDC::wxDC()
 {
-  m_ok = FALSE;
-  m_optimize = FALSE;
-  m_autoSetting = FALSE;
-  m_colour = TRUE;
-  m_clipping = FALSE;
+    m_ok = FALSE;
+    m_optimize = FALSE;
+    m_autoSetting = FALSE;
+    m_colour = TRUE;
+    m_clipping = FALSE;
   
-  m_mm_to_pix_x = 1.0;
-  m_mm_to_pix_y = 1.0;
+    m_mm_to_pix_x = 1.0;
+    m_mm_to_pix_y = 1.0;
   
-  m_logicalOriginX = 0;
-  m_logicalOriginY = 0;
-  m_deviceOriginX = 0;
-  m_deviceOriginY = 0;
+    m_logicalOriginX = 0;
+    m_logicalOriginY = 0;
+    m_deviceOriginX = 0;
+    m_deviceOriginY = 0;
   
-  m_logicalScaleX = 1.0;
-  m_logicalScaleY = 1.0;
-  m_userScaleX = 1.0;
-  m_userScaleY = 1.0;
-  m_scaleX = 1.0;
-  m_scaleY = 1.0;
+    m_logicalScaleX = 1.0;
+    m_logicalScaleY = 1.0;
+    m_userScaleX = 1.0;
+    m_userScaleY = 1.0;
+    m_scaleX = 1.0;
+    m_scaleY = 1.0;
   
-  m_mappingMode = MM_TEXT;
-  m_needComputeScaleX = FALSE;
-  m_needComputeScaleY = FALSE;
+    m_mappingMode = MM_TEXT;
+    m_needComputeScaleX = FALSE;
+    m_needComputeScaleY = FALSE;
   
-  m_signX = 1;  // default x-axis left to right
-  m_signY = 1;  // default y-axis top down
+    m_signX = 1;  // default x-axis left to right
+    m_signY = 1;  // default y-axis top down
 
-  m_maxX = m_maxY = -100000;
-  m_minY = m_minY =  100000;
+    m_maxX = m_maxY = -100000;
+    m_minY = m_minY =  100000;
 
-  m_logicalFunction = wxCOPY;
+    m_logicalFunction = wxCOPY;
 //  m_textAlignment = wxALIGN_TOP_LEFT;
-  m_backgroundMode = wxTRANSPARENT;
+    m_backgroundMode = wxTRANSPARENT;
   
-  m_textForegroundColour = *wxBLACK;
-  m_textBackgroundColour = *wxWHITE;
-  m_pen = *wxBLACK_PEN;
-  m_font = *wxNORMAL_FONT;
-  m_brush = *wxTRANSPARENT_BRUSH;
-  m_backgroundBrush = *wxWHITE_BRUSH;
+    m_textForegroundColour = *wxBLACK;
+    m_textBackgroundColour = *wxWHITE;
+    m_pen = *wxBLACK_PEN;
+    m_font = *wxNORMAL_FONT;
+    m_brush = *wxTRANSPARENT_BRUSH;
+    m_backgroundBrush = *wxWHITE_BRUSH;
   
 //  m_palette = wxAPP_COLOURMAP;
 }
 
-wxDC::~wxDC(void)
+wxDC::~wxDC()
 {
 }
 
-bool wxDC::Ok(void) const 
+bool wxDC::Ok() const 
 { 
-  wxASSERT_MSG( m_ok, "invalid display context" );
-  return m_ok; 
+    return m_ok; 
 }
 
 void wxDC::DrawArc( long WXUNUSED(x1), long WXUNUSED(y1), long WXUNUSED(x2), long WXUNUSED(y2), 
@@ -95,277 +94,280 @@ void wxDC::DrawArc( long WXUNUSED(x1), long WXUNUSED(y1), long WXUNUSED(x2), lon
 
 void wxDC::DrawPoint( wxPoint& point ) 
 { 
-  DrawPoint( point.x, point.y ); 
+    DrawPoint( point.x, point.y ); 
 }
 
 void wxDC::DrawPolygon( wxList *list, long xoffset, long yoffset, int fillStyle )
 {
-  int n = list->Number();
-  wxPoint *points = new wxPoint[n];
+    int n = list->Number();
+    wxPoint *points = new wxPoint[n];
 
-  int i = 0;
-  for( wxNode *node = list->First(); node; node = node->Next() )
-  {
-    wxPoint *point = (wxPoint *)node->Data();
-    points[i].x = point->x;
-    points[i++].y = point->y;
-  }
-  DrawPolygon( n, points, xoffset, yoffset, fillStyle );
-  delete[] points;
+    int i = 0;
+    for( wxNode *node = list->First(); node; node = node->Next() )
+    {
+        wxPoint *point = (wxPoint *)node->Data();
+        points[i].x = point->x;
+        points[i++].y = point->y;
+    }
+    
+    DrawPolygon( n, points, xoffset, yoffset, fillStyle );
+    delete[] points;
 }
 
 void wxDC::DrawLines( wxList *list, long xoffset, long yoffset )
 {
-  int n = list->Number();
-  wxPoint *points = new wxPoint[n];
+    int n = list->Number();
+    wxPoint *points = new wxPoint[n];
 
-  int i = 0;
-  for( wxNode *node = list->First(); node; node = node->Next() ) 
-  {
-    wxPoint *point = (wxPoint *)node->Data();
-    points[i].x = point->x;
-    points[i++].y = point->y;
-  }
-  DrawLines( n, points, xoffset, yoffset );
-  delete []points;
+    int i = 0;
+    for( wxNode *node = list->First(); node; node = node->Next() ) 
+    {
+        wxPoint *point = (wxPoint *)node->Data();
+        points[i].x = point->x;
+        points[i++].y = point->y;
+    }
+    
+    DrawLines( n, points, xoffset, yoffset );
+    delete []points;
 }
 
 void wxDC::DrawSpline( long x1, long y1, long x2, long y2, long x3, long y3 )
 {
-  wxList list;
-  list.Append( (wxObject*)new wxPoint(x1, y1) );
-  list.Append( (wxObject*)new wxPoint(x2, y2) );
-  list.Append( (wxObject*)new wxPoint(x3, y3) );
-  DrawSpline(&list);
-  wxNode *node = list.First();
-  while (node)
-  {
-    wxPoint *p = (wxPoint*)node->Data();
-    delete p;
-    node = node->Next();
-  }
+    wxList list;
+    list.Append( (wxObject*)new wxPoint(x1, y1) );
+    list.Append( (wxObject*)new wxPoint(x2, y2) );
+    list.Append( (wxObject*)new wxPoint(x3, y3) );
+    DrawSpline(&list);
+    wxNode *node = list.First();
+    while (node)
+    {
+        wxPoint *p = (wxPoint*)node->Data();
+        delete p;
+        node = node->Next();
+    }
 }
 
 void wxDC::DrawSpline( int n, wxPoint points[] )
 {
-  wxList list;
-  for (int i = 0; i < n; i++) list.Append( (wxObject*)&points[i] );
-  DrawSpline( &list );
+    wxList list;
+    for (int i = 0; i < n; i++) list.Append( (wxObject*)&points[i] );
+    DrawSpline( &list );
 }
 
 void wxDC::SetClippingRegion( long x, long y, long width, long height )
 {
-  m_clipping = TRUE;
-  m_clipX1 = x;
-  m_clipY1 = y;
-  m_clipX2 = x + width;
-  m_clipY2 = y + height;
+    m_clipping = TRUE;
+    m_clipX1 = x;
+    m_clipY1 = y;
+    m_clipX2 = x + width;
+    m_clipY2 = y + height;
 }
 
-void wxDC::DestroyClippingRegion(void)
+void wxDC::DestroyClippingRegion()
 {
-  m_clipping = FALSE;
+    m_clipping = FALSE;
 }
 
 void wxDC::GetClippingBox( long *x, long *y, long *width, long *height ) const
 {
-  if (m_clipping)
-  {
-    if (x) *x = m_clipX1;
-    if (y) *y = m_clipY1;
-    if (width) *width = (m_clipX2 - m_clipX1);
-    if (height) *height = (m_clipY2 - m_clipY1);
-  }
-  else
-   *x = *y = *width = *height = 0;
+    if (m_clipping)
+    {
+        if (x) *x = m_clipX1;
+        if (y) *y = m_clipY1;
+        if (width) *width = (m_clipX2 - m_clipX1);
+        if (height) *height = (m_clipY2 - m_clipY1);
+    }
+    else
+    {
+        *x = *y = *width = *height = 0;
+    }
 }
 
 void wxDC::GetSize( int* width, int* height ) const
 {
-  *width = m_maxX-m_minX;
-  *height = m_maxY-m_minY;
+    if (width) *width = m_maxX-m_minX;
+    if (height) *height = m_maxY-m_minY;
 }
 
 void wxDC::GetSizeMM( long* width, long* height ) const
 {
-  int w = 0;
-  int h = 0;
-  GetSize( &w, &h );
-  *width = long( double(w) / (m_scaleX*m_mm_to_pix_x) );
-  *height = long( double(h) / (m_scaleY*m_mm_to_pix_y) );
+    int w = 0;
+    int h = 0;
+    GetSize( &w, &h );
+    if (width) *width = long( double(w) / (m_scaleX*m_mm_to_pix_x) );
+    if (height) *height = long( double(h) / (m_scaleY*m_mm_to_pix_y) );
 }
 
 void wxDC::SetTextForeground( const wxColour &col )
 {
-  if (!Ok()) return;
-  m_textForegroundColour = col;
+    m_textForegroundColour = col;
 }
 
 void wxDC::SetTextBackground( const wxColour &col )
 {
-  if (!Ok()) return;
-  m_textBackgroundColour = col;
+    m_textBackgroundColour = col;
 }
 
 void wxDC::SetMapMode( int mode )
 {
-  switch (mode) 
-  {
-    case MM_TWIPS:
-      SetLogicalScale( twips2mm*m_mm_to_pix_x, twips2mm*m_mm_to_pix_y );
-      break;
-    case MM_POINTS:
-      SetLogicalScale( pt2mm*m_mm_to_pix_x, pt2mm*m_mm_to_pix_y );
-      break;
-    case MM_METRIC:
-      SetLogicalScale( m_mm_to_pix_x, m_mm_to_pix_y );
-      break;
-    case MM_LOMETRIC:
-      SetLogicalScale( m_mm_to_pix_x/10.0, m_mm_to_pix_y/10.0 );
-      break;
-    default:
-    case MM_TEXT:
-      SetLogicalScale( 1.0, 1.0 );
-      break;
-  }
-  if (mode != MM_TEXT)
-  {
-    m_needComputeScaleX = TRUE;
-    m_needComputeScaleY = TRUE;
-  }
+    switch (mode) 
+    {
+        case MM_TWIPS:
+          SetLogicalScale( twips2mm*m_mm_to_pix_x, twips2mm*m_mm_to_pix_y );
+          break;
+        case MM_POINTS:
+          SetLogicalScale( pt2mm*m_mm_to_pix_x, pt2mm*m_mm_to_pix_y );
+          break;
+        case MM_METRIC:
+          SetLogicalScale( m_mm_to_pix_x, m_mm_to_pix_y );
+          break;
+        case MM_LOMETRIC:
+          SetLogicalScale( m_mm_to_pix_x/10.0, m_mm_to_pix_y/10.0 );
+          break;
+        default:
+        case MM_TEXT:
+          SetLogicalScale( 1.0, 1.0 );
+          break;
+    }
+/*  we don't do this mega optimisation
+    if (mode != MM_TEXT)
+    {
+        m_needComputeScaleX = TRUE;
+        m_needComputeScaleY = TRUE;
+    }
+*/
 }
 
 void wxDC::SetUserScale( double x, double y )
 {
-  // allow negative ? -> no
-  m_userScaleX = x;
-  m_userScaleY = y;
-  ComputeScaleAndOrigin();
+    // allow negative ? -> no
+    m_userScaleX = x;
+    m_userScaleY = y;
+    ComputeScaleAndOrigin();
 }
 
 void wxDC::GetUserScale( double *x, double *y )
 {
-  if (x) *x = m_userScaleX;
-  if (y) *y = m_userScaleY;
+    if (x) *x = m_userScaleX;
+    if (y) *y = m_userScaleY;
 }
 
 void wxDC::SetLogicalScale( double x, double y )
 {
-  // allow negative ?
-  m_logicalScaleX = x;
-  m_logicalScaleY = y;
-  ComputeScaleAndOrigin();
+    // allow negative ?
+    m_logicalScaleX = x;
+    m_logicalScaleY = y;
+    ComputeScaleAndOrigin();
 }
 
 void wxDC::GetLogicalScale( double *x, double *y )
 {
-  if (x) *x = m_logicalScaleX;
-  if (y) *y = m_logicalScaleY;
+    if (x) *x = m_logicalScaleX;
+    if (y) *y = m_logicalScaleY;
 }
 
 void wxDC::SetLogicalOrigin( long x, long y )
 {
-  m_logicalOriginX = x * m_signX;   // is this still correct ?
-  m_logicalOriginY = y * m_signY;
-  ComputeScaleAndOrigin();
+    m_logicalOriginX = x * m_signX;   // is this still correct ?
+    m_logicalOriginY = y * m_signY;
+    ComputeScaleAndOrigin();
 }
 
 void wxDC::GetLogicalOrigin( long *x, long *y )
 {
-  if (x) *x = m_logicalOriginX;
-  if (y) *y = m_logicalOriginY;
+    if (x) *x = m_logicalOriginX;
+    if (y) *y = m_logicalOriginY;
 }
 
 void wxDC::SetDeviceOrigin( long x, long y )
 {
-  m_deviceOriginX = x;
-  m_deviceOriginY = y;
-  ComputeScaleAndOrigin();
+    // only wxPostScripDC has m_signX = -1, we override SetDeviceOrigin there
+    m_deviceOriginX = x;  
+    m_deviceOriginY = y;
+    ComputeScaleAndOrigin();
 }
 
 void wxDC::GetDeviceOrigin( long *x, long *y )
 {
-  if (x) *x = m_deviceOriginX;
-  if (y) *y = m_deviceOriginY;
+    if (x) *x = m_deviceOriginX;
+    if (y) *y = m_deviceOriginY;
 }
 
 void wxDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
 {
-  m_signX = (xLeftRight ?  1 : -1);
-  m_signY = (yBottomUp  ? -1 :  1);
-  ComputeScaleAndOrigin();
+    // only wxPostScripDC has m_signX = -1, we override SetAxisOrientation there
+    m_signX = (xLeftRight ?  1 : -1);
+    m_signY = (yBottomUp  ? -1 :  1);
+    ComputeScaleAndOrigin();
 }
 
 long wxDC::DeviceToLogicalX(long x) const
 {
-  return XDEV2LOG(x);
+    return XDEV2LOG(x);
 }
 
 long wxDC::DeviceToLogicalY(long y) const
 {
-  return YDEV2LOG(y);
+    return YDEV2LOG(y);
 }
 
 long wxDC::DeviceToLogicalXRel(long x) const
 {
-  return XDEV2LOGREL(x);
+    return XDEV2LOGREL(x);
 }
 
 long wxDC::DeviceToLogicalYRel(long y) const
 {
-  return YDEV2LOGREL(y);
+    return YDEV2LOGREL(y);
 }
 
 long wxDC::LogicalToDeviceX(long x) const
 {
-  return XLOG2DEV(x);
+    return XLOG2DEV(x);
 }
 
 long wxDC::LogicalToDeviceY(long y) const
 {
-  return YLOG2DEV(y);
+    return YLOG2DEV(y);
 }
 
 long wxDC::LogicalToDeviceXRel(long x) const
 {
-  return XLOG2DEVREL(x);
+    return XLOG2DEVREL(x);
 }
 
 long wxDC::LogicalToDeviceYRel(long y) const
 {
-  return YLOG2DEVREL(y);
+    return YLOG2DEVREL(y);
 }
     
 void wxDC::CalcBoundingBox( long x, long y )
 {
-  if (x < m_minX) m_minX = x;
-  if (y < m_minY) m_minY = y;
-  if (x > m_maxX) m_maxX = x;
-  if (y > m_maxY) m_maxY = y;
+    if (x < m_minX) m_minX = x;
+    if (y < m_minY) m_minY = y;
+    if (x > m_maxX) m_maxX = x;
+    if (y > m_maxY) m_maxY = y;
 }
 
-void wxDC::ComputeScaleAndOrigin(void)
+void wxDC::ComputeScaleAndOrigin()
 {
-  // CMB: copy scale to see if it changes
-  double origScaleX = m_scaleX;
-  double origScaleY = m_scaleY;
+    // CMB: copy scale to see if it changes
+    double origScaleX = m_scaleX;
+    double origScaleY = m_scaleY;
 
-  m_scaleX = m_logicalScaleX * m_userScaleX;
-  m_scaleY = m_logicalScaleY * m_userScaleY;
+    m_scaleX = m_logicalScaleX * m_userScaleX;
+    m_scaleY = m_logicalScaleY * m_userScaleY;
 
-  // CMB: if scale has changed call SetPen to recalulate the line width 
-  if (m_scaleX != origScaleX || m_scaleY != origScaleY)
-  {
-    // this is a bit artificial, but we need to force wxDC to think
-    // the pen has changed
-      // Using this code, wxDC will ignore the new settings
-      // so it's complete non-sense, Robert Roebling TODO!!
-        // It even gives an Assert, Robert Roebling
+    // CMB: if scale has changed call SetPen to recalulate the line width 
+    if (m_scaleX != origScaleX || m_scaleY != origScaleY)
+    {
+      // this is a bit artificial, but we need to force wxDC to think
+      // the pen has changed
+        // It gives an Assert, Robert Roebling
 /*     
-    wxPen* pen = GetPen();
-    wxPen tempPen;
-    m_pen = tempPen;
-    SetPen(pen);
+      wxPen pen = m_pen;
+      m_pen = wxNullPen;
+      SetPen( pen );
 */
   }
 }
index 3bf445ef645c8d561ef13a4960be7e20c7fc2894..0b2a1391cd461bebb77b194273181aa41e7530d3 100644 (file)
@@ -13,6 +13,7 @@
 
 #include "wx/dcclient.h"
 #include "wx/dcmemory.h"
+#include "wx/image.h"
 #include <math.h>
 
 //-----------------------------------------------------------------------------
@@ -84,7 +85,7 @@ void gdk_draw_bitmap   (GdkDrawable  *drawable,
 
 IMPLEMENT_DYNAMIC_CLASS(wxWindowDC,wxDC)
 
-wxWindowDC::wxWindowDC(void)
+wxWindowDC::wxWindowDC()
 {
     m_penGC = (GdkGC *) NULL;
     m_brushGC = (GdkGC *) NULL;
@@ -118,7 +119,7 @@ wxWindowDC::wxWindowDC( wxWindow *window )
     
 }
 
-wxWindowDC::~wxWindowDC(void)
+wxWindowDC::~wxWindowDC()
 {
     Destroy();
 }
@@ -137,7 +138,7 @@ bool wxWindowDC::GetPixel( long WXUNUSED(x1), long WXUNUSED(y1), wxColour *WXUNU
 
 void wxWindowDC::DrawLine( long x1, long y1, long x2, long y2 )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_pen.GetStyle() != wxTRANSPARENT)
     {
@@ -151,7 +152,7 @@ void wxWindowDC::DrawLine( long x1, long y1, long x2, long y2 )
 
 void wxWindowDC::CrossHair( long x, long y )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_pen.GetStyle() != wxTRANSPARENT)
     {
@@ -167,7 +168,7 @@ void wxWindowDC::CrossHair( long x, long y )
 
 void wxWindowDC::DrawArc( long x1, long y1, long x2, long y2, double xc, double yc )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     long xx1 = XLOG2DEV(x1); 
     long yy1 = YLOG2DEV(y1);
@@ -217,7 +218,7 @@ void wxWindowDC::DrawArc( long x1, long y1, long x2, long y2, double xc, double
 
 void wxWindowDC::DrawEllipticArc( long x, long y, long width, long height, double sa, double ea )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     long xx = XLOG2DEV(x);    
     long yy = YLOG2DEV(y);
@@ -242,7 +243,7 @@ void wxWindowDC::DrawEllipticArc( long x, long y, long width, long height, doubl
 
 void wxWindowDC::DrawPoint( long x, long y )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_pen.GetStyle() != wxTRANSPARENT)
         gdk_draw_point( m_window, m_penGC, XLOG2DEV(x), YLOG2DEV(y) );
@@ -252,7 +253,7 @@ void wxWindowDC::DrawPoint( long x, long y )
 
 void wxWindowDC::DrawLines( int n, wxPoint points[], long xoffset, long yoffset )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_pen.GetStyle() == wxTRANSPARENT) return;
     if (n <= 0) return;
@@ -273,7 +274,7 @@ void wxWindowDC::DrawLines( int n, wxPoint points[], long xoffset, long yoffset
 
 void wxWindowDC::DrawLines( wxList *points, long xoffset, long yoffset )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_pen.GetStyle() == wxTRANSPARENT) return;
   
@@ -300,9 +301,9 @@ void wxWindowDC::DrawLines( wxList *points, long xoffset, long yoffset )
 
 void wxWindowDC::DrawPolygon( int n, wxPoint points[], long xoffset, long yoffset, int WXUNUSED(fillStyle) )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
-    if (!n) return;
+    if (n <= 0) return;
     
     GdkPoint *gdkpoints = new GdkPoint[n+1];
     int i;
@@ -334,10 +335,10 @@ void wxWindowDC::DrawPolygon( int n, wxPoint points[], long xoffset, long yoffse
 
 void wxWindowDC::DrawPolygon( wxList *lines, long xoffset, long yoffset, int WXUNUSED(fillStyle))
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     int n = lines->Number();
-    if (!n) return;
+    if (n <= 0) return;
     
     GdkPoint *gdkpoints = new GdkPoint[n];
     wxNode *node = lines->First();
@@ -375,7 +376,7 @@ void wxWindowDC::DrawPolygon( wxList *lines, long xoffset, long yoffset, int WXU
 
 void wxWindowDC::DrawRectangle( long x, long y, long width, long height )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
 
     long xx = XLOG2DEV(x);
     long yy = YLOG2DEV(y);
@@ -401,7 +402,7 @@ void wxWindowDC::DrawRectangle( long x, long y, long width, long height )
 
 void wxWindowDC::DrawRoundedRectangle( long x, long y, long width, long height, double radius )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (radius < 0.0) radius = - radius * ((width < height) ? width : height);
   
@@ -470,7 +471,7 @@ void wxWindowDC::DrawRoundedRectangle( long x, long y, long width, long height,
 
 void wxWindowDC::DrawEllipse( long x, long y, long width, long height )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     long xx = XLOG2DEV(x);    
     long yy = YLOG2DEV(y);
@@ -491,55 +492,47 @@ void wxWindowDC::DrawEllipse( long x, long y, long width, long height )
     CalcBoundingBox( x + width, y + height );
 }
 
-bool wxWindowDC::CanDrawBitmap(void) const
+bool wxWindowDC::CanDrawBitmap() const
 {
-  return TRUE;
+    return TRUE;
 }
 
 void wxWindowDC::DrawIcon( const wxIcon &icon, long x, long y )
 {
-    if (!Ok()) return;
+    DrawBitmap( icon, x, y, TRUE );
+}
+
+void wxWindowDC::DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMask )
+{
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
-    if (!icon.Ok()) return;
+    if (!bitmap.Ok()) return;
   
     int xx = XLOG2DEV(x);
     int yy = YLOG2DEV(y);
   
-    GdkBitmap *mask = (GdkBitmap *) NULL;
-    if (icon.GetMask()) mask = icon.GetMask()->GetBitmap();
+    int w = bitmap.GetWidth();
+    int h = bitmap.GetHeight();
     
-    if (mask) 
+    int ww = XLOG2DEVREL(w);
+    int hh = YLOG2DEVREL(h);
+    
+    wxBitmap use_bitmap;
+    
+    if ((w != ww) || (h != hh))
     {
-        gdk_gc_set_clip_mask( m_penGC, mask );
-        gdk_gc_set_clip_origin( m_penGC, xx, yy );
+        wxImage image( bitmap );
+       image = image.Scale( ww, hh );
+       
+       use_bitmap = image.ConvertToBitmap();
     }
-  
-    GdkPixmap *pm = icon.GetPixmap();
-    gdk_draw_pixmap( m_window, m_penGC, pm, 0, 0, xx, yy, -1, -1 );
-  
-    if (mask) 
+    else
     {
-        gdk_gc_set_clip_mask( m_penGC, (GdkBitmap *) NULL );
-        gdk_gc_set_clip_origin( m_penGC, 0, 0 );
+        use_bitmap = bitmap;
     }
     
-    CalcBoundingBox( x, y );
-    int width = icon.GetWidth();
-    int height = icon.GetHeight();
-    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 (use_bitmap.GetMask()) mask = use_bitmap.GetMask()->GetBitmap();
     
     if (useMask && mask) 
     {
@@ -547,7 +540,7 @@ void wxWindowDC::DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMas
         gdk_gc_set_clip_origin( m_penGC, xx, yy );
     }
   
-    GdkPixmap *pm = bitmap.GetPixmap();
+    GdkPixmap *pm = use_bitmap.GetPixmap();
     gdk_draw_pixmap( m_window, m_penGC, pm, 0, 0, xx, yy, -1, -1 );
   
     if (useMask && mask) 
@@ -557,19 +550,20 @@ void wxWindowDC::DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMas
     }
     
     CalcBoundingBox( x, y );
-    int width = bitmap.GetWidth();
-    int height = bitmap.GetHeight();
-    CalcBoundingBox( x + width, y + height );
+    CalcBoundingBox( x + w, y + h );
 }
 
 bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
-       wxDC *source, long xsrc, long ysrc, int WXUNUSED(logical_func), bool useMask )
+       wxDC *source, long xsrc, long ysrc, int logical_func, bool useMask )
 {
-    if (!Ok()) return FALSE;
+    wxCHECK_MSG( Ok(), FALSE, "invalid window dc" );
     
     CalcBoundingBox( xdest, ydest );
     CalcBoundingBox( xdest + width, ydest + height );
     
+    int old_logical_func = m_logicalFunction;
+    SetLogicalFunction( logical_func );
+    
     wxClientDC *csrc = (wxClientDC*)source;
   
     if (csrc->m_isMemDC)
@@ -586,11 +580,11 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
     
             if (useMask && mask) 
             {
-                gdk_gc_set_clip_mask( m_textGC, mask );
-                gdk_gc_set_clip_origin( m_textGC, xx, yy );
+                gdk_gc_set_clip_mask( m_penGC, mask );
+                gdk_gc_set_clip_origin( m_penGC, xx, yy );
             }
            
-            gdk_draw_pixmap( m_window, m_textGC, pmap,
+            gdk_draw_pixmap( m_window, m_penGC, pmap,
                              source->DeviceToLogicalX(xsrc), 
                             source->DeviceToLogicalY(ysrc),
                              xx, 
@@ -600,10 +594,11 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
          
             if (useMask && mask) 
             {
-                gdk_gc_set_clip_mask( m_textGC, (GdkBitmap *) NULL );
-                gdk_gc_set_clip_origin( m_textGC, 0, 0 );
+                gdk_gc_set_clip_mask( m_penGC, (GdkBitmap *) NULL );
+                gdk_gc_set_clip_origin( m_penGC, 0, 0 );
             }
       
+            SetLogicalFunction( old_logical_func );
             return TRUE;
         }
        
@@ -618,8 +613,8 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
     
             if (useMask && mask) 
             {
-                gdk_gc_set_clip_mask( m_textGC, mask );
-                gdk_gc_set_clip_origin( m_textGC, xx, yy );
+                gdk_gc_set_clip_mask( m_penGC, mask );
+                gdk_gc_set_clip_origin( m_penGC, xx, yy );
             }
   
             gdk_draw_bitmap( m_window, m_textGC, bmap,
@@ -632,15 +627,16 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
          
             if (useMask && mask) 
             {
-                gdk_gc_set_clip_mask( m_textGC, (GdkBitmap *) NULL );
-                gdk_gc_set_clip_origin( m_textGC, 0, 0 );
+                gdk_gc_set_clip_mask( m_penGC, (GdkBitmap *) NULL );
+                gdk_gc_set_clip_origin( m_penGC, 0, 0 );
             }
       
+            SetLogicalFunction( old_logical_func );
             return TRUE;
         }
     }
 
-    gdk_window_copy_area ( m_window, m_textGC,
+    gdk_window_copy_area ( m_window, m_penGC,
                            XLOG2DEV(xdest), YLOG2DEV(ydest),
                            csrc->GetWindow(),
                            source->DeviceToLogicalX(xsrc), 
@@ -648,20 +644,13 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
                            source->DeviceToLogicalXRel(width), 
                           source->DeviceToLogicalYRel(height) );
 
-/*    
-    gdk_window_copy_area ( m_window, m_textGC,
-                           XLOG2DEV(xdest), YLOG2DEV(ydest),
-                           csrc->GetWindow(),
-                           xsrc, ysrc,
-                           width, height );
-*/
-    
-  return TRUE;
+    SetLogicalFunction( old_logical_func );
+    return TRUE;
 }
 
 void wxWindowDC::DrawText( const wxString &text, long x, long y, bool WXUNUSED(use16) )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
 
     GdkFont *font = m_font.GetInternalFont( m_scaleY );
 
@@ -696,7 +685,7 @@ void wxWindowDC::DrawText( const wxString &text, long x, long y, bool WXUNUSED(u
     CalcBoundingBox (x, y);
 }
 
-bool wxWindowDC::CanGetTextExtent(void) const
+bool wxWindowDC::CanGetTextExtent() const
 {
     return TRUE;
 }
@@ -705,7 +694,7 @@ void wxWindowDC::GetTextExtent( const wxString &string, long *width, long *heigh
                      long *descent, long *externalLeading,
                      wxFont *theFont, bool WXUNUSED(use16) )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     wxFont fontToUse = m_font;
     if (theFont) fontToUse = *theFont;
@@ -717,25 +706,25 @@ void wxWindowDC::GetTextExtent( const wxString &string, long *width, long *heigh
     if (externalLeading) (*externalLeading) = 0;  // ??
 }
 
-long wxWindowDC::GetCharWidth(void)
+long wxWindowDC::GetCharWidth()
 {
-    if (!Ok()) return 0;
+    wxCHECK_MSG( Ok(), 0, "invalid window dc" );
   
     GdkFont *font = m_font.GetInternalFont( m_scaleY );
     return long(gdk_string_width( font, "H" ) / m_scaleX);
 }
 
-long wxWindowDC::GetCharHeight(void)
+long wxWindowDC::GetCharHeight()
 {
-    if (!Ok()) return 0;
+    wxCHECK_MSG( Ok(), 0, "invalid window dc" );
   
     GdkFont *font = m_font.GetInternalFont( m_scaleY );
     return long((font->ascent + font->descent) / m_scaleY);
 }
 
-void wxWindowDC::Clear(void)
+void wxWindowDC::Clear()
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (!m_isMemDC)
     {
@@ -751,15 +740,15 @@ void wxWindowDC::Clear(void)
 
 void wxWindowDC::SetFont( const wxFont &font )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     m_font = font;
 }
 
 void wxWindowDC::SetPen( const wxPen &pen )
 {
-    if (!Ok()) return;
-
+    wxCHECK_RET( Ok(), "invalid window dc" );
+  
     if (m_pen == pen) return;
   
     m_pen = pen;
@@ -814,7 +803,7 @@ void wxWindowDC::SetPen( const wxPen &pen )
 
 void wxWindowDC::SetBrush( const wxBrush &brush )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_brush == brush) return;
   
@@ -849,11 +838,12 @@ void wxWindowDC::SetBrush( const wxBrush &brush )
     }
 }
 
-// CMB 21/7/98: Added SetBackground. Sets background brush
-// for Clear() and bg colour for shapes filled with cross-hatch brush
 void wxWindowDC::SetBackground( const wxBrush &brush )
 {
-    if (!Ok()) return;
+   // CMB 21/7/98: Added SetBackground. Sets background brush
+   // for Clear() and bg colour for shapes filled with cross-hatch brush
+   
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_backgroundBrush == brush) return;
   
@@ -893,7 +883,10 @@ void wxWindowDC::SetBackground( const wxBrush &brush )
 
 void wxWindowDC::SetLogicalFunction( int function )
 {
+    wxCHECK_RET( Ok(), "invalid window dc" );
+  
     if (m_logicalFunction == function) return;
+    
     GdkFunction mode = GDK_COPY;
     switch (function)
     {
@@ -901,6 +894,7 @@ void wxWindowDC::SetLogicalFunction( int function )
         case wxINVERT: mode = GDK_INVERT; break;
         default:       break;
     }
+    
     m_logicalFunction = function;
     gdk_gc_set_function( m_penGC, mode );
     gdk_gc_set_function( m_brushGC, mode );
@@ -909,7 +903,7 @@ void wxWindowDC::SetLogicalFunction( int function )
 
 void wxWindowDC::SetTextForeground( const wxColour &col )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_textForegroundColour == col) return;
   
@@ -922,7 +916,7 @@ void wxWindowDC::SetTextForeground( const wxColour &col )
 
 void wxWindowDC::SetTextBackground( const wxColour &col )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_textBackgroundColour == col) return;
   
@@ -935,10 +929,13 @@ void wxWindowDC::SetTextBackground( const wxColour &col )
 
 void wxWindowDC::SetBackgroundMode( int mode )
 {
+    wxCHECK_RET( Ok(), "invalid window dc" );
+  
     m_backgroundMode = mode;
 
     // CMB 21/7/98: fill style of cross-hatch brushes is affected by
     // transparent/solid background mode
+    
     if (m_brush.GetStyle() != wxSOLID && m_brush.GetStyle() != wxTRANSPARENT)
     {
         gdk_gc_set_fill( m_brushGC,
@@ -948,10 +945,13 @@ void wxWindowDC::SetBackgroundMode( int mode )
 
 void wxWindowDC::SetPalette( const wxPalette& WXUNUSED(palette) )
 {
+    wxFAIL_MSG( "wxWindowDC::SetPalette not implemented" );
 }
 
 void wxWindowDC::SetClippingRegion( long x, long y, long width, long height )
 {
+    wxCHECK_RET( Ok(), "invalid window dc" );
+  
     wxDC::SetClippingRegion( x, y, width, height );
   
     GdkRectangle rect;
@@ -967,6 +967,8 @@ void wxWindowDC::SetClippingRegion( long x, long y, long width, long height )
 
 void wxWindowDC::SetClippingRegion( const wxRegion &region  )
 {
+    wxCHECK_RET( Ok(), "invalid window dc" );
+  
     if (region.Empty())
     {
         DestroyClippingRegion();
@@ -979,8 +981,10 @@ void wxWindowDC::SetClippingRegion( const wxRegion &region  )
     gdk_gc_set_clip_region( m_bgGC, region.GetRegion() );
 }
 
-void wxWindowDC::DestroyClippingRegion(void)
+void wxWindowDC::DestroyClippingRegion()
 {
+    wxCHECK_RET( Ok(), "invalid window dc" );
+  
     wxDC::DestroyClippingRegion();
   
     gdk_gc_set_clip_rectangle( m_penGC, (GdkRectangle *) NULL );
@@ -989,7 +993,7 @@ void wxWindowDC::DestroyClippingRegion(void)
     gdk_gc_set_clip_rectangle( m_bgGC, (GdkRectangle *) NULL );
 }
 
-void wxWindowDC::SetUpDC(void)
+void wxWindowDC::SetUpDC()
 {
     Destroy();
     m_ok = TRUE;
@@ -1034,7 +1038,7 @@ void wxWindowDC::SetUpDC(void)
     }
 }
 
-void wxWindowDC::Destroy(void)
+void wxWindowDC::Destroy()
 {
     if (m_penGC) gdk_gc_unref( m_penGC );
     m_penGC = (GdkGC*) NULL;
@@ -1046,7 +1050,7 @@ void wxWindowDC::Destroy(void)
     m_bgGC = (GdkGC*) NULL;
 }
 
-GdkWindow *wxWindowDC::GetWindow(void)
+GdkWindow *wxWindowDC::GetWindow()
 {
     return m_window;
 }
@@ -1055,7 +1059,7 @@ GdkWindow *wxWindowDC::GetWindow(void)
 
 void wx_quadratic_spline(double a1, double b1, double a2, double b2,
                          double a3, double b3, double a4, double b4);
-void wx_clear_stack(void);
+void wx_clear_stack();
 int wx_spline_pop(double *x1, double *y1, double *x2, double *y2, double *x3,
         double *y3, double *x4, double *y4);
 void wx_spline_push(double x1, double y1, double x2, double y2, double x3, double y3,
@@ -1106,7 +1110,7 @@ static Stack    wx_spline_stack[SPLINE_STACK_DEPTH];
 static Stack   *wx_stack_top;
 static int      wx_stack_count;
 
-void wx_clear_stack(void)
+void wx_clear_stack()
 {
     wx_stack_top = wx_spline_stack;
     wx_stack_count = 0;
@@ -1168,6 +1172,8 @@ static void wx_spline_draw_point_array(wxDC *dc)
 
 void wxWindowDC::DrawSpline( wxList *points )
 {
+    wxCHECK_RET( Ok(), "invalid window dc" );
+  
     wxPoint *p;
     double           cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4;
     double           x1, y1, x2, y2;
@@ -1223,7 +1229,7 @@ void wxWindowDC::DrawSpline( wxList *points )
 
 IMPLEMENT_DYNAMIC_CLASS(wxPaintDC,wxWindowDC)
 
-wxPaintDC::wxPaintDC(void)
+wxPaintDC::wxPaintDC()
   : wxWindowDC()
 {
 }
@@ -1239,7 +1245,7 @@ wxPaintDC::wxPaintDC( wxWindow *win )
 
 IMPLEMENT_DYNAMIC_CLASS(wxClientDC,wxWindowDC)
 
-wxClientDC::wxClientDC(void)
+wxClientDC::wxClientDC()
   : wxWindowDC()
 {
 }
index c41cb0234890647a46007c9f5f31a75a100f6e62..e996334c006bd00330c97b8d7bc15be51b16e2a7 100644 (file)
 
 IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC,wxWindowDC)
 
-wxMemoryDC::wxMemoryDC(void) : wxWindowDC()
+wxMemoryDC::wxMemoryDC() : wxWindowDC()
 {
-  m_ok = FALSE;
+    m_ok = FALSE;
   
-  m_cmap = gtk_widget_get_default_colormap();
+    m_cmap = gtk_widget_get_default_colormap();
 }
 
 wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) ) 
   : wxWindowDC()
 {
-  m_ok = FALSE;
+    m_ok = FALSE;
   
-  m_cmap = gtk_widget_get_default_colormap();
+    m_cmap = gtk_widget_get_default_colormap();
 }
 
-wxMemoryDC::~wxMemoryDC(void)
+wxMemoryDC::~wxMemoryDC()
 {
 }
 
 void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
 {
-  m_selected = bitmap;
-  if (m_selected.Ok())
-  {
-    if (m_selected.GetPixmap())
+    m_selected = bitmap;
+    if (m_selected.Ok())
     {
-      m_window = m_selected.GetPixmap();
+        if (m_selected.GetPixmap())
+        {
+            m_window = m_selected.GetPixmap();
+        }
+        else
+        {
+            m_window = m_selected.GetBitmap();
+        }
+    
+        SetUpDC();
+    
+        m_isMemDC = TRUE;
     }
     else
-    {
-      m_window = m_selected.GetBitmap();
+    { 
+        m_ok = FALSE;
+        m_window = (GdkWindow *) NULL;
     }
-    
-    SetUpDC();
-    
-    m_isMemDC = TRUE;
-  }
-  else
-  {
-    m_ok = FALSE;
-    m_window = (GdkWindow *) NULL;
-  }
 }
 
 void wxMemoryDC::GetSize( int *width, int *height ) const
 {
-  if (m_selected.Ok())
-  {
-    if (width) (*width) = m_selected.GetWidth();
-    if (height) (*height) = m_selected.GetHeight();
-  }
-  else
-  {
-    if (width) (*width) = 0;
-    if (height) (*height) = 0;
-  }
+    if (m_selected.Ok())
+    {
+        if (width) (*width) = m_selected.GetWidth();
+        if (height) (*height) = m_selected.GetHeight();
+    }
+    else
+    {
+        if (width) (*width) = 0;
+        if (height) (*height) = 0;
+    }
 }
 
 
index 5530fdaeab85bdcfdef3d89eb4fbefdf4ab557ae..d4362ef4a4354cb9282842405c0617289cb4ec3a 100644 (file)
@@ -254,6 +254,11 @@ wxPostScriptDC::~wxPostScriptDC ()
     if (m_pstream) delete m_pstream;
 }
 
+bool wxPostScriptDC::Ok() const
+{
+  return (m_ok && m_pstream);
+}
+  
 bool wxPostScriptDC::PrinterDialog(wxWindow *parent)
 {
     wxPostScriptPrintDialog dialog( parent, _("Printer Settings"), wxPoint(150, 150), wxSize(400, 400), 
@@ -299,14 +304,14 @@ bool wxPostScriptDC::PrinterDialog(wxWindow *parent)
       m_ok = TRUE;
     }
 
-  return m_ok;
+    return m_ok;
 }
 
 void wxPostScriptDC::SetClippingRegion (long x, long y, long w, long h)
 {
-    if (m_clipping) return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
-    if (!m_pstream) return;
+    if (m_clipping) return;
 
     wxDC::SetClippingRegion( x, y, w, h );
     
@@ -326,7 +331,7 @@ void wxPostScriptDC::SetClippingRegion( const wxRegion &WXUNUSED(region) )
 
 void wxPostScriptDC::DestroyClippingRegion()
 {
-    if (!m_pstream) return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
     wxDC::DestroyClippingRegion();
     
@@ -360,7 +365,7 @@ void wxPostScriptDC::CrossHair (long WXUNUSED(x), long WXUNUSED(y))
 
 void wxPostScriptDC::DrawLine (long x1, long y1, long x2, long y2)
 {
-    if (!m_pstream) return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
     if  (m_pen.GetStyle() == wxTRANSPARENT) return;
     
@@ -379,8 +384,8 @@ void wxPostScriptDC::DrawLine (long x1, long y1, long x2, long y2)
 
 void wxPostScriptDC::DrawArc (long x1, long y1, long x2, long y2, long xc, long yc)
 {
-    if (!m_pstream) return;
-
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     long dx = x1 - xc;
     long dy = y1 - yc;
     long radius = (long) sqrt(dx*dx+dy*dy);
@@ -442,8 +447,8 @@ void wxPostScriptDC::DrawArc (long x1, long y1, long x2, long y2, long xc, long
 
 void wxPostScriptDC::DrawEllipticArc(long x,long y,long w,long h,double sa,double ea)
 {
-    if (!m_pstream) return;
-
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     if (sa>=360 || sa<=-360) sa=sa-int(sa/360)*360;
     if (ea>=360 || ea<=-360) ea=ea-int(ea/360)*360;
     if (sa<0) sa+=360;
@@ -484,7 +489,7 @@ void wxPostScriptDC::DrawEllipticArc(long x,long y,long w,long h,double sa,doubl
 
 void wxPostScriptDC::DrawPoint (long x, long y)
 {
-    if (!m_pstream)  return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
     if (m_pen.GetStyle() == wxTRANSPARENT) return;
     
@@ -500,8 +505,8 @@ void wxPostScriptDC::DrawPoint (long x, long y)
 
 void wxPostScriptDC::DrawPolygon (int n, wxPoint points[], long xoffset, long yoffset, int WXUNUSED(fillStyle))
 {
-    if (!m_pstream) return;
-  
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     if (n <= 0) return;
     
     if (m_brush.GetStyle () != wxTRANSPARENT)
@@ -550,8 +555,8 @@ void wxPostScriptDC::DrawPolygon (int n, wxPoint points[], long xoffset, long yo
 
 void wxPostScriptDC::DrawLines (int n, wxPoint points[], long xoffset, long yoffset)
 {
-    if (!m_pstream) return;
-  
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     if (m_pen.GetStyle() == wxTRANSPARENT) return;
     if (n <= 0) return;
   
@@ -577,7 +582,7 @@ void wxPostScriptDC::DrawLines (int n, wxPoint points[], long xoffset, long yoff
 
 void wxPostScriptDC::DrawRectangle (long x, long y, long width, long height)
 {
-    if (!m_pstream) return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
     if (m_brush.GetStyle () != wxTRANSPARENT)
     {
@@ -614,8 +619,8 @@ void wxPostScriptDC::DrawRectangle (long x, long y, long width, long height)
 
 void wxPostScriptDC::DrawRoundedRectangle (long x, long y, long width, long height, double radius)
 {
-    if (!m_pstream)  return;
-
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     if (radius < 0.0)
     {
         // Now, a negative radius is interpreted to mean
@@ -675,8 +680,8 @@ void wxPostScriptDC::DrawRoundedRectangle (long x, long y, long width, long heig
 
 void wxPostScriptDC::DrawEllipse (long x, long y, long width, long height)
 {
-    if (!m_pstream) return;
-  
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     if (m_brush.GetStyle () != wxTRANSPARENT)
     {
         SetBrush (m_brush);
@@ -706,6 +711,8 @@ void wxPostScriptDC::DrawEllipse (long x, long y, long width, long height)
 
 void wxPostScriptDC::DrawIcon (const wxIcon& icon, long x, long y)
 {
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     wxMemoryDC memDC;
     memDC.SelectObject( icon );
     Blit(x, y, icon.GetWidth(), icon.GetHeight(), &memDC, 0, 0);
@@ -713,6 +720,8 @@ void wxPostScriptDC::DrawIcon (const wxIcon& icon, long x, long y)
 
 void wxPostScriptDC::DrawBitmap( const wxBitmap& bitmap, long x, long y, bool useMask )
 {
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     wxMemoryDC memDC;
     memDC.SelectObject( bitmap );
     Blit( x, y, bitmap.GetWidth(), bitmap.GetHeight(), &memDC, 0, 0, useMask );
@@ -720,8 +729,8 @@ void wxPostScriptDC::DrawBitmap( const wxBitmap& bitmap, long x, long y, bool us
 
 void wxPostScriptDC::SetFont (const wxFont& font)
 {
-    if (!m_pstream) return;
-
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     if (!font.Ok())  return;
     
     m_font = font;
@@ -739,8 +748,8 @@ void wxPostScriptDC::SetFont (const wxFont& font)
 
 void wxPostScriptDC::SetPen( const wxPen& pen )
 {
-    if (!m_pstream) return;
-
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     if (!pen.Ok()) return;
     
     int oldStyle = m_pen.GetStyle();
@@ -818,8 +827,8 @@ void wxPostScriptDC::SetPen( const wxPen& pen )
 
 void wxPostScriptDC::SetBrush( const wxBrush& brush )
 {
-    if (!m_pstream)  return;
-
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     if (!brush.Ok()) return;
     
     m_brush = brush;
@@ -857,8 +866,8 @@ void wxPostScriptDC::SetBrush( const wxBrush& brush )
 
 void wxPostScriptDC::DrawText( const wxString& text, long x, long y, bool WXUNUSED(use16bit) )
 {
-    if (!m_pstream)  return;
-
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     SetFont( m_font );
 
     if (m_textForegroundColour.Ok ())
@@ -952,7 +961,7 @@ void wxPostScriptDC::SetLogicalFunction (int WXUNUSED(function))
 
 void wxPostScriptDC::DrawSpline( wxList *points )
 {
-    if (!m_pstream) return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
     SetPen( m_pen );
 
@@ -1015,6 +1024,8 @@ long wxPostScriptDC::GetCharWidth ()
 
 void wxPostScriptDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
 {
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     m_signX = (xLeftRight ? 1 : -1);
     m_signY = (yBottomUp  ? 1 : -1);
     
@@ -1023,15 +1034,19 @@ void wxPostScriptDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
 
 void wxPostScriptDC::SetDeviceOrigin( long x, long y )
 {
-  int h = 0;
-  int w = 0;
-  GetSize( &w, &h );
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
+    int h = 0;
+    int w = 0;
+    GetSize( &w, &h );
   
-  wxDC::SetDeviceOrigin( x, h-y );
+    wxDC::SetDeviceOrigin( x, h-y );
 }
 
 void wxPostScriptDC::GetSize(int* width, int* height) const
 {
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     const char *paperType = wxThePrintSetupData->GetPaperName();
     
     if (!paperType) paperType = _("A4 210 x 297 mm");
@@ -1042,18 +1057,20 @@ void wxPostScriptDC::GetSize(int* width, int* height) const
     
     if (paper)
     {
-        *width = paper->widthPixels;
-        *height = paper->heightPixels;
+        if (width) *width = paper->widthPixels;
+        if (height) *height = paper->heightPixels;
     }
     else
     {
-        *width = 595;
-        *height = 842;
+        if (width) *width = 595;
+        if (height) *height = 842;
     }
 }
 
 bool wxPostScriptDC::StartDoc (const wxString& message)
 {
+    wxCHECK_MSG( Ok(), FALSE, "invalid postscript dc" );
+    
     if (m_filename == "")
     {
         m_filename = wxGetTempFileName("ps");
@@ -1092,7 +1109,7 @@ bool wxPostScriptDC::StartDoc (const wxString& message)
 
 void wxPostScriptDC::EndDoc ()
 {
-    if (!m_pstream)  return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
     if (m_clipping)
     {
@@ -1249,7 +1266,7 @@ void wxPostScriptDC::EndDoc ()
 
 void wxPostScriptDC::StartPage ()
 {
-    if (!m_pstream)  return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
     *m_pstream << "%%Page: " << (wxPageNumber++) << "\n";
     
@@ -1285,7 +1302,7 @@ void wxPostScriptDC::StartPage ()
 
 void wxPostScriptDC::EndPage ()
 {
-    if (!m_pstream)  return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
     *m_pstream << "showpage\n";
 }
@@ -1293,6 +1310,8 @@ void wxPostScriptDC::EndPage ()
 bool wxPostScriptDC::Blit (long xdest, long ydest, long fwidth, long fheight,
       wxDC *source, long xsrc, long ysrc, int WXUNUSED(rop), bool WXUNUSED(useMask))
 {
+    wxCHECK_MSG( Ok(), FALSE, "invalid postscript dc" );
+    
     return TRUE;
 }
 
@@ -1586,13 +1605,13 @@ void wxPostScriptDC::GetSizeMM(long *width, long *height) const
     
     if (paper)
     {
-        *width = paper->widthMM;
-        *height = paper->heightMM;
+        if (width) *width = paper->widthMM;
+        if (height) *height = paper->heightMM;
     }
     else
     {
-       *width = 210;
-       *height = 297;
+       if (width) *width = 210;
+       if (height) *height = 297;
     }
 }
 
index 4bab18b3795c48549117ccc45ee8ed865fa1c31e..bdb29ad1bd4c3c841b8d3fea980630510af6db30 100644 (file)
@@ -245,51 +245,53 @@ IMPLEMENT_DYNAMIC_CLASS(wxScreenDC,wxPaintDC)
 
 wxScreenDC::wxScreenDC(void)
 {
-  m_ok = FALSE;
-  m_window = (GdkWindow *) NULL;
-  m_cmap = gdk_colormap_get_system();
+    m_ok = FALSE;
+    m_window = (GdkWindow *) NULL;
+    m_cmap = gdk_colormap_get_system();
   
-  if (sm_overlayWindow)
-  {
-    m_window = sm_overlayWindow;
-    m_deviceOriginX = - sm_overlayWindowX;
-    m_deviceOriginY = - sm_overlayWindowY;
-  }
-  else
-    m_window = GDK_ROOT_PARENT();
+    if (sm_overlayWindow)
+    {
+        m_window = sm_overlayWindow;
+        m_deviceOriginX = - sm_overlayWindowX;
+        m_deviceOriginY = - sm_overlayWindowY;
+    }
+    else
+    {
+       m_window = GDK_ROOT_PARENT();
+    }
   
-  SetUpDC();
+    SetUpDC();
   
-  gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
-  gdk_gc_set_subwindow( m_brushGC, GDK_INCLUDE_INFERIORS );
-  gdk_gc_set_subwindow( m_textGC, GDK_INCLUDE_INFERIORS );
-  gdk_gc_set_subwindow( m_bgGC, GDK_INCLUDE_INFERIORS );
+    gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
+    gdk_gc_set_subwindow( m_brushGC, GDK_INCLUDE_INFERIORS );
+    gdk_gc_set_subwindow( m_textGC, GDK_INCLUDE_INFERIORS );
+    gdk_gc_set_subwindow( m_bgGC, GDK_INCLUDE_INFERIORS );
 }
 
 wxScreenDC::~wxScreenDC(void)
 {
-  EndDrawingOnTop();
+    EndDrawingOnTop();
 }
 
 bool wxScreenDC::StartDrawingOnTop( wxWindow *window )
 {
-  if (!window) return StartDrawingOnTop();
+    if (!window) return StartDrawingOnTop();
   
-  int x = 0;
-  int y = 0;
-  window->GetPosition( &x, &y );
-  int w = 0;
-  int h = 0;
-  window->GetSize( &w, &h );
-  window->ClientToScreen( &x, &y );
+    int x = 0;
+    int y = 0;
+    window->GetPosition( &x, &y );
+    int w = 0;
+    int h = 0;
+    window->GetSize( &w, &h );
+    window->ClientToScreen( &x, &y );
   
-  wxRect rect;
-  rect.x = x;
-  rect.y = y;
-  rect.width = 0;
-  rect.height = 0;
+    wxRect rect;
+    rect.x = x;
+    rect.y = y;
+    rect.width = 0;
+    rect.height = 0;
   
-  return StartDrawingOnTop( &rect );
+    return StartDrawingOnTop( &rect );
 }
 
 bool wxScreenDC::StartDrawingOnTop( wxRect *rect )
@@ -329,12 +331,12 @@ bool wxScreenDC::StartDrawingOnTop( wxRect *rect )
 
 bool wxScreenDC::EndDrawingOnTop(void)
 {
-  if (sm_overlayWindow) gdk_window_destroy( sm_overlayWindow );
+    if (sm_overlayWindow) gdk_window_destroy( sm_overlayWindow );
   
-  sm_overlayWindow = NULL;
-  sm_overlayWindowX = 0;
-  sm_overlayWindowY = 0;
+    sm_overlayWindow = NULL;
+    sm_overlayWindowX = 0;
+    sm_overlayWindowY = 0;
   
-  return TRUE;
+    return TRUE;
 }
 
index 631a12eff8d5308bb38e787e03e4fa7393573b95..0e7eec9b1bc11f1a5446e56674979962eb3455cf 100644 (file)
@@ -21,6 +21,7 @@
 #include "wx/settings.h"
 #include "wx/resource.h"
 #include "wx/module.h"
+#include "wx/image.h"
 
 #include "unistd.h"
 
index 476a09919fec79fcb657e508e39af4f929508e31..f92b14637702d1082ace2f247c1839e198d18898 100644 (file)
@@ -16,6 +16,7 @@
 #include "wx/filefn.h"
 #include "gdk/gdkprivate.h"
 #include "gdk/gdkx.h"
+#include "wx/image.h"
 
 //-----------------------------------------------------------------------------
 // wxMask
@@ -151,6 +152,8 @@ wxBitmap::wxBitmap( char **bits )
   
     M_BMPDATA->m_pixmap = gdk_pixmap_create_from_xpm_d( parent, &mask, NULL, (gchar **) bits );
     
+    wxCHECK_RET( M_BMPDATA->m_pixmap, "couldn't create pixmap" );
+    
     if (mask)
     {
         M_BMPDATA->m_mask = new wxMask();
@@ -195,6 +198,8 @@ wxBitmap::wxBitmap( const char bits[], int width, int height, int WXUNUSED(depth
     M_BMPDATA->m_height = height;
     M_BMPDATA->m_bpp = 1;
 
+    wxCHECK_RET( M_BMPDATA->m_bitmap, "couldn't create bitmap" );
+      
     if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
 }
   
@@ -246,33 +251,6 @@ int wxBitmap::GetDepth(void) const
     return M_BMPDATA->m_bpp;
 }
 
-void wxBitmap::SetHeight( int height )
-{
-    if (!Ok()) return;
-  
-    wxFAIL_MSG( "wxBitmap::SetHeight not implemented" );
-  
-    M_BMPDATA->m_height = height;
-}
-
-void wxBitmap::SetWidth( int width )
-{
-    if (!Ok()) return;
-  
-    wxFAIL_MSG( "wxBitmap::SetWidth not implemented" );
-  
-    M_BMPDATA->m_width = width;
-}
-
-void wxBitmap::SetDepth( int depth )
-{
-    if (!Ok()) return;
-  
-    wxFAIL_MSG( "wxBitmap::SetDepth not implemented" );
-  
-    M_BMPDATA->m_bpp = depth;
-}
-
 wxMask *wxBitmap::GetMask(void) const
 {
     wxCHECK_MSG( Ok(), (wxMask *) NULL, "invalid bitmap" );
@@ -295,7 +273,7 @@ bool wxBitmap::SaveFile( const wxString &name, int type, wxPalette *WXUNUSED(pal
   
     if (type == wxBITMAP_TYPE_PNG)
     {
-        wxImage image = ConvertToImage();
+        wxImage image( *this );
        if (image.Ok()) return image.SaveFile( name, type );
     }
     
@@ -330,13 +308,13 @@ bool wxBitmap::LoadFile( const wxString &name, int type )
     {
         wxImage image;
         image.LoadFile( name, type );
-        if (image.Ok()) *this = wxBitmap( image );
+        if (image.Ok()) *this = image.ConvertToBitmap();
     }
     else if (type == wxBITMAP_TYPE_BMP)
     {
         wxImage image;
         image.LoadFile( name, type );
-        if (image.Ok()) *this = wxBitmap( image );
+        if (image.Ok()) *this = image.ConvertToBitmap();
     }
     else 
         return FALSE;
@@ -351,6 +329,34 @@ wxPalette *wxBitmap::GetPalette(void) const
     return M_BMPDATA->m_palette;
 }
 
+void wxBitmap::SetHeight( int height )
+{
+    if (!m_refData) m_refData = new wxBitmapRefData();
+
+    M_BMPDATA->m_height = height;
+}
+
+void wxBitmap::SetWidth( int width )
+{
+    if (!m_refData) m_refData = new wxBitmapRefData();
+
+    M_BMPDATA->m_width = width;
+}
+
+void wxBitmap::SetDepth( int depth )
+{
+    if (!m_refData) m_refData = new wxBitmapRefData();
+
+    M_BMPDATA->m_bpp = depth;
+}
+
+void wxBitmap::SetPixmap( GdkPixmap *pixmap )
+{
+    if (!m_refData) m_refData = new wxBitmapRefData();
+
+    M_BMPDATA->m_pixmap = pixmap;
+}
+
 GdkPixmap *wxBitmap::GetPixmap(void) const
 {
     wxCHECK_MSG( Ok(), (GdkPixmap *) NULL, "invalid bitmap" );
@@ -365,44 +371,48 @@ GdkBitmap *wxBitmap::GetBitmap(void) const
     return M_BMPDATA->m_bitmap;
 }
   
-wxBitmap::wxBitmap( const wxImage &image )
+//-----------------------------------------------------------------------------
+// wxImage
+//-----------------------------------------------------------------------------
+
+wxBitmap wxImage::ConvertToBitmap() const
 {
-    if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
-  
-    if (!image.Ok()) return;
+    wxBitmap bitmap;
 
-    m_refData = new wxBitmapRefData();
+    wxCHECK_MSG( Ok(), bitmap, "invalid image" );
 
-    M_BMPDATA->m_height = image.GetHeight();
-    M_BMPDATA->m_width = image.GetWidth();
-    int width = image.GetWidth();
-    int height = image.GetHeight();
+    int width = GetWidth();
+    int height = GetHeight();
   
+    bitmap.SetHeight( height );
+    bitmap.SetWidth( width );
+    
     // Create picture
   
     GdkImage *data_image = 
       gdk_image_new( GDK_IMAGE_FASTEST, gdk_visual_get_system(), width, height );
   
-    M_BMPDATA->m_pixmap = 
-      gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, -1 );
+    bitmap.SetPixmap( gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, -1 ) );
 
     // Create mask
   
     GdkImage *mask_image = (GdkImage*) NULL;
   
-    if (image.HasMask())
+    if (HasMask())
     {
         unsigned char *mask_data = (unsigned char*)malloc( ((width >> 3)+8) * height );
   
         mask_image =  gdk_image_new_bitmap( gdk_visual_get_system(), mask_data, width, height );
   
-        M_BMPDATA->m_mask = new wxMask();
-        M_BMPDATA->m_mask->m_bitmap = gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, 1 );
+       wxMask *mask = new wxMask();
+       mask->m_bitmap = gdk_pixmap_new( (GdkWindow*)&gdk_root_parent, width, height, 1 );
+       
+       bitmap.SetMask( mask );
     }
   
     // Retrieve depth  
   
-    GdkVisual *visual = gdk_window_get_visual( M_BMPDATA->m_pixmap );
+    GdkVisual *visual = gdk_window_get_visual( bitmap.GetPixmap() );
     if (visual == NULL) visual = gdk_window_get_visual( (GdkWindow*) &gdk_root_parent );
     int bpp = visual->depth;
     if ((bpp == 16) && (visual->red_mask != 0xf800)) bpp = 15;
@@ -424,11 +434,11 @@ wxBitmap::wxBitmap( const wxImage &image )
         else if ((visual->green_mask > visual->blue_mask) && (visual->blue_mask > visual->red_mask))  b_o = GBR;
     }
   
-    int r_mask = image.GetMaskRed();
-    int g_mask = image.GetMaskGreen();
-    int b_mask = image.GetMaskBlue();
+    int r_mask = GetMaskRed();
+    int g_mask = GetMaskGreen();
+    int b_mask = GetMaskBlue();
   
-    unsigned char* data = image.GetData();
+    unsigned char* data = GetData();
   
     int index = 0;
     for (int y = 0; y < height; y++)
@@ -442,7 +452,7 @@ wxBitmap::wxBitmap( const wxImage &image )
             int b = data[index];
            index++;
        
-           if (image.HasMask())
+           if (HasMask())
            {
                if ((r == r_mask) && (b == b_mask) && (g == g_mask))
                    gdk_image_put_pixel( mask_image, x, y, 1 );
@@ -506,40 +516,59 @@ wxBitmap::wxBitmap( const wxImage &image )
         
     // Blit picture
   
-    GdkGC *data_gc = gdk_gc_new( M_BMPDATA->m_pixmap );
+    GdkGC *data_gc = gdk_gc_new( bitmap.GetPixmap() );
   
-    gdk_draw_image( M_BMPDATA->m_pixmap, data_gc, data_image, 0, 0, 0, 0, width, height );
+    gdk_draw_image( bitmap.GetPixmap(), data_gc, data_image, 0, 0, 0, 0, width, height );
   
     gdk_image_destroy( data_image );
     gdk_gc_unref( data_gc );
   
     // Blit mask
   
-    if (image.HasMask())
+    if (HasMask())
     {
-        GdkGC *mask_gc = gdk_gc_new( M_BMPDATA->m_mask->m_bitmap );
+        GdkGC *mask_gc = gdk_gc_new( bitmap.GetMask()->GetBitmap() );
   
-        gdk_draw_image( M_BMPDATA->m_mask->m_bitmap, mask_gc, mask_image, 0, 0, 0, 0, width, height );
+        gdk_draw_image( bitmap.GetMask()->GetBitmap(), mask_gc, mask_image, 0, 0, 0, 0, width, height );
   
         gdk_image_destroy( mask_image );
         gdk_gc_unref( mask_gc );
     }
+    
+    return bitmap;
 }
 
-wxImage wxBitmap::ConvertToImage() const
+wxImage::wxImage( const wxBitmap &bitmap )
 {
-    wxImage image;
-
-    wxCHECK_MSG( Ok(), image, "invalid bitmap" );
+    wxCHECK_RET( bitmap.Ok(), "invalid bitmap" );
   
-    GdkImage *gdk_image = gdk_image_get( M_BMPDATA->m_pixmap, 0, 0, M_BMPDATA->m_width, M_BMPDATA->m_height );
-  
-    if (!gdk_image) return image;
+    GdkImage *gdk_image = gdk_image_get( bitmap.GetPixmap(), 
+                                         0, 0, 
+                                        bitmap.GetWidth(), bitmap.GetHeight() );
+    
+    wxCHECK_RET( gdk_image, "couldn't create image" );
   
-    image.Create( M_BMPDATA->m_width, M_BMPDATA->m_height );
-    char unsigned *data = image.GetData();
+    Create( bitmap.GetWidth(), bitmap.GetHeight() );
+    char unsigned *data = GetData();
+    
+    if (!data)
+    {
+        gdk_image_destroy( gdk_image );
+        wxFAIL_MSG( "couldn't create image" );
+       return;
+    }
+    
+    GdkImage *gdk_image_mask = (GdkImage*) NULL;
+    if (bitmap.GetMask())
+    {
+        gdk_image_mask = gdk_image_get( bitmap.GetMask()->GetBitmap(), 
+                                       0, 0, 
+                                       bitmap.GetWidth(), bitmap.GetHeight() );
 
-    GdkVisual *visual = gdk_window_get_visual( M_BMPDATA->m_pixmap );
+       SetMaskColour( 16, 16, 16 );  // anything unlikely and dividable
+    }
+  
+    GdkVisual *visual = gdk_window_get_visual( bitmap.GetPixmap() );
     if (visual == NULL) visual = gdk_window_get_visual( (GdkWindow*) &gdk_root_parent );
     int bpp = visual->depth;
     if ((bpp == 16) && (visual->red_mask != 0xf800)) bpp = 15;
@@ -547,9 +576,9 @@ wxImage wxBitmap::ConvertToImage() const
     GdkColormap *cmap = gtk_widget_get_default_colormap();
   
     long pos = 0;
-    for (int j = 0; j < M_BMPDATA->m_height; j++)
+    for (int j = 0; j < bitmap.GetHeight(); j++)
     {
-        for (int i = 0; i < M_BMPDATA->m_width; i++)
+        for (int i = 0; i < bitmap.GetWidth(); i++)
         {
             int pixel = gdk_image_get_pixel( gdk_image, i, j );
             if (bpp <= 8)
@@ -574,13 +603,23 @@ wxImage wxBitmap::ConvertToImage() const
                 data[pos+2] = pixel & 0xff;
             }
       
+           if (gdk_image_mask)
+           {
+               int mask_pixel = gdk_image_get_pixel( gdk_image_mask, i, j );
+               if (mask_pixel == 0)
+               {
+                    data[pos] = 16;
+                    data[pos+1] = 16;
+                    data[pos+2] = 16;
+              }
+           }
+       
             pos += 3;
         }
     }
   
     gdk_image_destroy( gdk_image );
-  
-    return image;
+    if (gdk_image_mask) gdk_image_destroy( gdk_image_mask );
 }
 
 
index d782330da8f0f624b504af663c3ed1188618d1e3..44fe792814d64d4d95e4331081e6a7534cd778d9 100644 (file)
 
 IMPLEMENT_ABSTRACT_CLASS(wxDC,wxObject)
 
-wxDC::wxDC(void)
+wxDC::wxDC()
 {
-  m_ok = FALSE;
-  m_optimize = FALSE;
-  m_autoSetting = FALSE;
-  m_colour = TRUE;
-  m_clipping = FALSE;
+    m_ok = FALSE;
+    m_optimize = FALSE;
+    m_autoSetting = FALSE;
+    m_colour = TRUE;
+    m_clipping = FALSE;
   
-  m_mm_to_pix_x = 1.0;
-  m_mm_to_pix_y = 1.0;
+    m_mm_to_pix_x = 1.0;
+    m_mm_to_pix_y = 1.0;
   
-  m_logicalOriginX = 0;
-  m_logicalOriginY = 0;
-  m_deviceOriginX = 0;
-  m_deviceOriginY = 0;
+    m_logicalOriginX = 0;
+    m_logicalOriginY = 0;
+    m_deviceOriginX = 0;
+    m_deviceOriginY = 0;
   
-  m_logicalScaleX = 1.0;
-  m_logicalScaleY = 1.0;
-  m_userScaleX = 1.0;
-  m_userScaleY = 1.0;
-  m_scaleX = 1.0;
-  m_scaleY = 1.0;
+    m_logicalScaleX = 1.0;
+    m_logicalScaleY = 1.0;
+    m_userScaleX = 1.0;
+    m_userScaleY = 1.0;
+    m_scaleX = 1.0;
+    m_scaleY = 1.0;
   
-  m_mappingMode = MM_TEXT;
-  m_needComputeScaleX = FALSE;
-  m_needComputeScaleY = FALSE;
+    m_mappingMode = MM_TEXT;
+    m_needComputeScaleX = FALSE;
+    m_needComputeScaleY = FALSE;
   
-  m_signX = 1;  // default x-axis left to right
-  m_signY = 1;  // default y-axis top down
+    m_signX = 1;  // default x-axis left to right
+    m_signY = 1;  // default y-axis top down
 
-  m_maxX = m_maxY = -100000;
-  m_minY = m_minY =  100000;
+    m_maxX = m_maxY = -100000;
+    m_minY = m_minY =  100000;
 
-  m_logicalFunction = wxCOPY;
+    m_logicalFunction = wxCOPY;
 //  m_textAlignment = wxALIGN_TOP_LEFT;
-  m_backgroundMode = wxTRANSPARENT;
+    m_backgroundMode = wxTRANSPARENT;
   
-  m_textForegroundColour = *wxBLACK;
-  m_textBackgroundColour = *wxWHITE;
-  m_pen = *wxBLACK_PEN;
-  m_font = *wxNORMAL_FONT;
-  m_brush = *wxTRANSPARENT_BRUSH;
-  m_backgroundBrush = *wxWHITE_BRUSH;
+    m_textForegroundColour = *wxBLACK;
+    m_textBackgroundColour = *wxWHITE;
+    m_pen = *wxBLACK_PEN;
+    m_font = *wxNORMAL_FONT;
+    m_brush = *wxTRANSPARENT_BRUSH;
+    m_backgroundBrush = *wxWHITE_BRUSH;
   
 //  m_palette = wxAPP_COLOURMAP;
 }
 
-wxDC::~wxDC(void)
+wxDC::~wxDC()
 {
 }
 
-bool wxDC::Ok(void) const 
+bool wxDC::Ok() const 
 { 
-  wxASSERT_MSG( m_ok, "invalid display context" );
-  return m_ok; 
+    return m_ok; 
 }
 
 void wxDC::DrawArc( long WXUNUSED(x1), long WXUNUSED(y1), long WXUNUSED(x2), long WXUNUSED(y2), 
@@ -95,277 +94,280 @@ void wxDC::DrawArc( long WXUNUSED(x1), long WXUNUSED(y1), long WXUNUSED(x2), lon
 
 void wxDC::DrawPoint( wxPoint& point ) 
 { 
-  DrawPoint( point.x, point.y ); 
+    DrawPoint( point.x, point.y ); 
 }
 
 void wxDC::DrawPolygon( wxList *list, long xoffset, long yoffset, int fillStyle )
 {
-  int n = list->Number();
-  wxPoint *points = new wxPoint[n];
+    int n = list->Number();
+    wxPoint *points = new wxPoint[n];
 
-  int i = 0;
-  for( wxNode *node = list->First(); node; node = node->Next() )
-  {
-    wxPoint *point = (wxPoint *)node->Data();
-    points[i].x = point->x;
-    points[i++].y = point->y;
-  }
-  DrawPolygon( n, points, xoffset, yoffset, fillStyle );
-  delete[] points;
+    int i = 0;
+    for( wxNode *node = list->First(); node; node = node->Next() )
+    {
+        wxPoint *point = (wxPoint *)node->Data();
+        points[i].x = point->x;
+        points[i++].y = point->y;
+    }
+    
+    DrawPolygon( n, points, xoffset, yoffset, fillStyle );
+    delete[] points;
 }
 
 void wxDC::DrawLines( wxList *list, long xoffset, long yoffset )
 {
-  int n = list->Number();
-  wxPoint *points = new wxPoint[n];
+    int n = list->Number();
+    wxPoint *points = new wxPoint[n];
 
-  int i = 0;
-  for( wxNode *node = list->First(); node; node = node->Next() ) 
-  {
-    wxPoint *point = (wxPoint *)node->Data();
-    points[i].x = point->x;
-    points[i++].y = point->y;
-  }
-  DrawLines( n, points, xoffset, yoffset );
-  delete []points;
+    int i = 0;
+    for( wxNode *node = list->First(); node; node = node->Next() ) 
+    {
+        wxPoint *point = (wxPoint *)node->Data();
+        points[i].x = point->x;
+        points[i++].y = point->y;
+    }
+    
+    DrawLines( n, points, xoffset, yoffset );
+    delete []points;
 }
 
 void wxDC::DrawSpline( long x1, long y1, long x2, long y2, long x3, long y3 )
 {
-  wxList list;
-  list.Append( (wxObject*)new wxPoint(x1, y1) );
-  list.Append( (wxObject*)new wxPoint(x2, y2) );
-  list.Append( (wxObject*)new wxPoint(x3, y3) );
-  DrawSpline(&list);
-  wxNode *node = list.First();
-  while (node)
-  {
-    wxPoint *p = (wxPoint*)node->Data();
-    delete p;
-    node = node->Next();
-  }
+    wxList list;
+    list.Append( (wxObject*)new wxPoint(x1, y1) );
+    list.Append( (wxObject*)new wxPoint(x2, y2) );
+    list.Append( (wxObject*)new wxPoint(x3, y3) );
+    DrawSpline(&list);
+    wxNode *node = list.First();
+    while (node)
+    {
+        wxPoint *p = (wxPoint*)node->Data();
+        delete p;
+        node = node->Next();
+    }
 }
 
 void wxDC::DrawSpline( int n, wxPoint points[] )
 {
-  wxList list;
-  for (int i = 0; i < n; i++) list.Append( (wxObject*)&points[i] );
-  DrawSpline( &list );
+    wxList list;
+    for (int i = 0; i < n; i++) list.Append( (wxObject*)&points[i] );
+    DrawSpline( &list );
 }
 
 void wxDC::SetClippingRegion( long x, long y, long width, long height )
 {
-  m_clipping = TRUE;
-  m_clipX1 = x;
-  m_clipY1 = y;
-  m_clipX2 = x + width;
-  m_clipY2 = y + height;
+    m_clipping = TRUE;
+    m_clipX1 = x;
+    m_clipY1 = y;
+    m_clipX2 = x + width;
+    m_clipY2 = y + height;
 }
 
-void wxDC::DestroyClippingRegion(void)
+void wxDC::DestroyClippingRegion()
 {
-  m_clipping = FALSE;
+    m_clipping = FALSE;
 }
 
 void wxDC::GetClippingBox( long *x, long *y, long *width, long *height ) const
 {
-  if (m_clipping)
-  {
-    if (x) *x = m_clipX1;
-    if (y) *y = m_clipY1;
-    if (width) *width = (m_clipX2 - m_clipX1);
-    if (height) *height = (m_clipY2 - m_clipY1);
-  }
-  else
-   *x = *y = *width = *height = 0;
+    if (m_clipping)
+    {
+        if (x) *x = m_clipX1;
+        if (y) *y = m_clipY1;
+        if (width) *width = (m_clipX2 - m_clipX1);
+        if (height) *height = (m_clipY2 - m_clipY1);
+    }
+    else
+    {
+        *x = *y = *width = *height = 0;
+    }
 }
 
 void wxDC::GetSize( int* width, int* height ) const
 {
-  *width = m_maxX-m_minX;
-  *height = m_maxY-m_minY;
+    if (width) *width = m_maxX-m_minX;
+    if (height) *height = m_maxY-m_minY;
 }
 
 void wxDC::GetSizeMM( long* width, long* height ) const
 {
-  int w = 0;
-  int h = 0;
-  GetSize( &w, &h );
-  *width = long( double(w) / (m_scaleX*m_mm_to_pix_x) );
-  *height = long( double(h) / (m_scaleY*m_mm_to_pix_y) );
+    int w = 0;
+    int h = 0;
+    GetSize( &w, &h );
+    if (width) *width = long( double(w) / (m_scaleX*m_mm_to_pix_x) );
+    if (height) *height = long( double(h) / (m_scaleY*m_mm_to_pix_y) );
 }
 
 void wxDC::SetTextForeground( const wxColour &col )
 {
-  if (!Ok()) return;
-  m_textForegroundColour = col;
+    m_textForegroundColour = col;
 }
 
 void wxDC::SetTextBackground( const wxColour &col )
 {
-  if (!Ok()) return;
-  m_textBackgroundColour = col;
+    m_textBackgroundColour = col;
 }
 
 void wxDC::SetMapMode( int mode )
 {
-  switch (mode) 
-  {
-    case MM_TWIPS:
-      SetLogicalScale( twips2mm*m_mm_to_pix_x, twips2mm*m_mm_to_pix_y );
-      break;
-    case MM_POINTS:
-      SetLogicalScale( pt2mm*m_mm_to_pix_x, pt2mm*m_mm_to_pix_y );
-      break;
-    case MM_METRIC:
-      SetLogicalScale( m_mm_to_pix_x, m_mm_to_pix_y );
-      break;
-    case MM_LOMETRIC:
-      SetLogicalScale( m_mm_to_pix_x/10.0, m_mm_to_pix_y/10.0 );
-      break;
-    default:
-    case MM_TEXT:
-      SetLogicalScale( 1.0, 1.0 );
-      break;
-  }
-  if (mode != MM_TEXT)
-  {
-    m_needComputeScaleX = TRUE;
-    m_needComputeScaleY = TRUE;
-  }
+    switch (mode) 
+    {
+        case MM_TWIPS:
+          SetLogicalScale( twips2mm*m_mm_to_pix_x, twips2mm*m_mm_to_pix_y );
+          break;
+        case MM_POINTS:
+          SetLogicalScale( pt2mm*m_mm_to_pix_x, pt2mm*m_mm_to_pix_y );
+          break;
+        case MM_METRIC:
+          SetLogicalScale( m_mm_to_pix_x, m_mm_to_pix_y );
+          break;
+        case MM_LOMETRIC:
+          SetLogicalScale( m_mm_to_pix_x/10.0, m_mm_to_pix_y/10.0 );
+          break;
+        default:
+        case MM_TEXT:
+          SetLogicalScale( 1.0, 1.0 );
+          break;
+    }
+/*  we don't do this mega optimisation
+    if (mode != MM_TEXT)
+    {
+        m_needComputeScaleX = TRUE;
+        m_needComputeScaleY = TRUE;
+    }
+*/
 }
 
 void wxDC::SetUserScale( double x, double y )
 {
-  // allow negative ? -> no
-  m_userScaleX = x;
-  m_userScaleY = y;
-  ComputeScaleAndOrigin();
+    // allow negative ? -> no
+    m_userScaleX = x;
+    m_userScaleY = y;
+    ComputeScaleAndOrigin();
 }
 
 void wxDC::GetUserScale( double *x, double *y )
 {
-  if (x) *x = m_userScaleX;
-  if (y) *y = m_userScaleY;
+    if (x) *x = m_userScaleX;
+    if (y) *y = m_userScaleY;
 }
 
 void wxDC::SetLogicalScale( double x, double y )
 {
-  // allow negative ?
-  m_logicalScaleX = x;
-  m_logicalScaleY = y;
-  ComputeScaleAndOrigin();
+    // allow negative ?
+    m_logicalScaleX = x;
+    m_logicalScaleY = y;
+    ComputeScaleAndOrigin();
 }
 
 void wxDC::GetLogicalScale( double *x, double *y )
 {
-  if (x) *x = m_logicalScaleX;
-  if (y) *y = m_logicalScaleY;
+    if (x) *x = m_logicalScaleX;
+    if (y) *y = m_logicalScaleY;
 }
 
 void wxDC::SetLogicalOrigin( long x, long y )
 {
-  m_logicalOriginX = x * m_signX;   // is this still correct ?
-  m_logicalOriginY = y * m_signY;
-  ComputeScaleAndOrigin();
+    m_logicalOriginX = x * m_signX;   // is this still correct ?
+    m_logicalOriginY = y * m_signY;
+    ComputeScaleAndOrigin();
 }
 
 void wxDC::GetLogicalOrigin( long *x, long *y )
 {
-  if (x) *x = m_logicalOriginX;
-  if (y) *y = m_logicalOriginY;
+    if (x) *x = m_logicalOriginX;
+    if (y) *y = m_logicalOriginY;
 }
 
 void wxDC::SetDeviceOrigin( long x, long y )
 {
-  m_deviceOriginX = x;
-  m_deviceOriginY = y;
-  ComputeScaleAndOrigin();
+    // only wxPostScripDC has m_signX = -1, we override SetDeviceOrigin there
+    m_deviceOriginX = x;  
+    m_deviceOriginY = y;
+    ComputeScaleAndOrigin();
 }
 
 void wxDC::GetDeviceOrigin( long *x, long *y )
 {
-  if (x) *x = m_deviceOriginX;
-  if (y) *y = m_deviceOriginY;
+    if (x) *x = m_deviceOriginX;
+    if (y) *y = m_deviceOriginY;
 }
 
 void wxDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
 {
-  m_signX = (xLeftRight ?  1 : -1);
-  m_signY = (yBottomUp  ? -1 :  1);
-  ComputeScaleAndOrigin();
+    // only wxPostScripDC has m_signX = -1, we override SetAxisOrientation there
+    m_signX = (xLeftRight ?  1 : -1);
+    m_signY = (yBottomUp  ? -1 :  1);
+    ComputeScaleAndOrigin();
 }
 
 long wxDC::DeviceToLogicalX(long x) const
 {
-  return XDEV2LOG(x);
+    return XDEV2LOG(x);
 }
 
 long wxDC::DeviceToLogicalY(long y) const
 {
-  return YDEV2LOG(y);
+    return YDEV2LOG(y);
 }
 
 long wxDC::DeviceToLogicalXRel(long x) const
 {
-  return XDEV2LOGREL(x);
+    return XDEV2LOGREL(x);
 }
 
 long wxDC::DeviceToLogicalYRel(long y) const
 {
-  return YDEV2LOGREL(y);
+    return YDEV2LOGREL(y);
 }
 
 long wxDC::LogicalToDeviceX(long x) const
 {
-  return XLOG2DEV(x);
+    return XLOG2DEV(x);
 }
 
 long wxDC::LogicalToDeviceY(long y) const
 {
-  return YLOG2DEV(y);
+    return YLOG2DEV(y);
 }
 
 long wxDC::LogicalToDeviceXRel(long x) const
 {
-  return XLOG2DEVREL(x);
+    return XLOG2DEVREL(x);
 }
 
 long wxDC::LogicalToDeviceYRel(long y) const
 {
-  return YLOG2DEVREL(y);
+    return YLOG2DEVREL(y);
 }
     
 void wxDC::CalcBoundingBox( long x, long y )
 {
-  if (x < m_minX) m_minX = x;
-  if (y < m_minY) m_minY = y;
-  if (x > m_maxX) m_maxX = x;
-  if (y > m_maxY) m_maxY = y;
+    if (x < m_minX) m_minX = x;
+    if (y < m_minY) m_minY = y;
+    if (x > m_maxX) m_maxX = x;
+    if (y > m_maxY) m_maxY = y;
 }
 
-void wxDC::ComputeScaleAndOrigin(void)
+void wxDC::ComputeScaleAndOrigin()
 {
-  // CMB: copy scale to see if it changes
-  double origScaleX = m_scaleX;
-  double origScaleY = m_scaleY;
+    // CMB: copy scale to see if it changes
+    double origScaleX = m_scaleX;
+    double origScaleY = m_scaleY;
 
-  m_scaleX = m_logicalScaleX * m_userScaleX;
-  m_scaleY = m_logicalScaleY * m_userScaleY;
+    m_scaleX = m_logicalScaleX * m_userScaleX;
+    m_scaleY = m_logicalScaleY * m_userScaleY;
 
-  // CMB: if scale has changed call SetPen to recalulate the line width 
-  if (m_scaleX != origScaleX || m_scaleY != origScaleY)
-  {
-    // this is a bit artificial, but we need to force wxDC to think
-    // the pen has changed
-      // Using this code, wxDC will ignore the new settings
-      // so it's complete non-sense, Robert Roebling TODO!!
-        // It even gives an Assert, Robert Roebling
+    // CMB: if scale has changed call SetPen to recalulate the line width 
+    if (m_scaleX != origScaleX || m_scaleY != origScaleY)
+    {
+      // this is a bit artificial, but we need to force wxDC to think
+      // the pen has changed
+        // It gives an Assert, Robert Roebling
 /*     
-    wxPen* pen = GetPen();
-    wxPen tempPen;
-    m_pen = tempPen;
-    SetPen(pen);
+      wxPen pen = m_pen;
+      m_pen = wxNullPen;
+      SetPen( pen );
 */
   }
 }
index 3bf445ef645c8d561ef13a4960be7e20c7fc2894..0b2a1391cd461bebb77b194273181aa41e7530d3 100644 (file)
@@ -13,6 +13,7 @@
 
 #include "wx/dcclient.h"
 #include "wx/dcmemory.h"
+#include "wx/image.h"
 #include <math.h>
 
 //-----------------------------------------------------------------------------
@@ -84,7 +85,7 @@ void gdk_draw_bitmap   (GdkDrawable  *drawable,
 
 IMPLEMENT_DYNAMIC_CLASS(wxWindowDC,wxDC)
 
-wxWindowDC::wxWindowDC(void)
+wxWindowDC::wxWindowDC()
 {
     m_penGC = (GdkGC *) NULL;
     m_brushGC = (GdkGC *) NULL;
@@ -118,7 +119,7 @@ wxWindowDC::wxWindowDC( wxWindow *window )
     
 }
 
-wxWindowDC::~wxWindowDC(void)
+wxWindowDC::~wxWindowDC()
 {
     Destroy();
 }
@@ -137,7 +138,7 @@ bool wxWindowDC::GetPixel( long WXUNUSED(x1), long WXUNUSED(y1), wxColour *WXUNU
 
 void wxWindowDC::DrawLine( long x1, long y1, long x2, long y2 )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_pen.GetStyle() != wxTRANSPARENT)
     {
@@ -151,7 +152,7 @@ void wxWindowDC::DrawLine( long x1, long y1, long x2, long y2 )
 
 void wxWindowDC::CrossHair( long x, long y )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_pen.GetStyle() != wxTRANSPARENT)
     {
@@ -167,7 +168,7 @@ void wxWindowDC::CrossHair( long x, long y )
 
 void wxWindowDC::DrawArc( long x1, long y1, long x2, long y2, double xc, double yc )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     long xx1 = XLOG2DEV(x1); 
     long yy1 = YLOG2DEV(y1);
@@ -217,7 +218,7 @@ void wxWindowDC::DrawArc( long x1, long y1, long x2, long y2, double xc, double
 
 void wxWindowDC::DrawEllipticArc( long x, long y, long width, long height, double sa, double ea )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     long xx = XLOG2DEV(x);    
     long yy = YLOG2DEV(y);
@@ -242,7 +243,7 @@ void wxWindowDC::DrawEllipticArc( long x, long y, long width, long height, doubl
 
 void wxWindowDC::DrawPoint( long x, long y )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_pen.GetStyle() != wxTRANSPARENT)
         gdk_draw_point( m_window, m_penGC, XLOG2DEV(x), YLOG2DEV(y) );
@@ -252,7 +253,7 @@ void wxWindowDC::DrawPoint( long x, long y )
 
 void wxWindowDC::DrawLines( int n, wxPoint points[], long xoffset, long yoffset )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_pen.GetStyle() == wxTRANSPARENT) return;
     if (n <= 0) return;
@@ -273,7 +274,7 @@ void wxWindowDC::DrawLines( int n, wxPoint points[], long xoffset, long yoffset
 
 void wxWindowDC::DrawLines( wxList *points, long xoffset, long yoffset )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_pen.GetStyle() == wxTRANSPARENT) return;
   
@@ -300,9 +301,9 @@ void wxWindowDC::DrawLines( wxList *points, long xoffset, long yoffset )
 
 void wxWindowDC::DrawPolygon( int n, wxPoint points[], long xoffset, long yoffset, int WXUNUSED(fillStyle) )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
-    if (!n) return;
+    if (n <= 0) return;
     
     GdkPoint *gdkpoints = new GdkPoint[n+1];
     int i;
@@ -334,10 +335,10 @@ void wxWindowDC::DrawPolygon( int n, wxPoint points[], long xoffset, long yoffse
 
 void wxWindowDC::DrawPolygon( wxList *lines, long xoffset, long yoffset, int WXUNUSED(fillStyle))
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     int n = lines->Number();
-    if (!n) return;
+    if (n <= 0) return;
     
     GdkPoint *gdkpoints = new GdkPoint[n];
     wxNode *node = lines->First();
@@ -375,7 +376,7 @@ void wxWindowDC::DrawPolygon( wxList *lines, long xoffset, long yoffset, int WXU
 
 void wxWindowDC::DrawRectangle( long x, long y, long width, long height )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
 
     long xx = XLOG2DEV(x);
     long yy = YLOG2DEV(y);
@@ -401,7 +402,7 @@ void wxWindowDC::DrawRectangle( long x, long y, long width, long height )
 
 void wxWindowDC::DrawRoundedRectangle( long x, long y, long width, long height, double radius )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (radius < 0.0) radius = - radius * ((width < height) ? width : height);
   
@@ -470,7 +471,7 @@ void wxWindowDC::DrawRoundedRectangle( long x, long y, long width, long height,
 
 void wxWindowDC::DrawEllipse( long x, long y, long width, long height )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     long xx = XLOG2DEV(x);    
     long yy = YLOG2DEV(y);
@@ -491,55 +492,47 @@ void wxWindowDC::DrawEllipse( long x, long y, long width, long height )
     CalcBoundingBox( x + width, y + height );
 }
 
-bool wxWindowDC::CanDrawBitmap(void) const
+bool wxWindowDC::CanDrawBitmap() const
 {
-  return TRUE;
+    return TRUE;
 }
 
 void wxWindowDC::DrawIcon( const wxIcon &icon, long x, long y )
 {
-    if (!Ok()) return;
+    DrawBitmap( icon, x, y, TRUE );
+}
+
+void wxWindowDC::DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMask )
+{
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
-    if (!icon.Ok()) return;
+    if (!bitmap.Ok()) return;
   
     int xx = XLOG2DEV(x);
     int yy = YLOG2DEV(y);
   
-    GdkBitmap *mask = (GdkBitmap *) NULL;
-    if (icon.GetMask()) mask = icon.GetMask()->GetBitmap();
+    int w = bitmap.GetWidth();
+    int h = bitmap.GetHeight();
     
-    if (mask) 
+    int ww = XLOG2DEVREL(w);
+    int hh = YLOG2DEVREL(h);
+    
+    wxBitmap use_bitmap;
+    
+    if ((w != ww) || (h != hh))
     {
-        gdk_gc_set_clip_mask( m_penGC, mask );
-        gdk_gc_set_clip_origin( m_penGC, xx, yy );
+        wxImage image( bitmap );
+       image = image.Scale( ww, hh );
+       
+       use_bitmap = image.ConvertToBitmap();
     }
-  
-    GdkPixmap *pm = icon.GetPixmap();
-    gdk_draw_pixmap( m_window, m_penGC, pm, 0, 0, xx, yy, -1, -1 );
-  
-    if (mask) 
+    else
     {
-        gdk_gc_set_clip_mask( m_penGC, (GdkBitmap *) NULL );
-        gdk_gc_set_clip_origin( m_penGC, 0, 0 );
+        use_bitmap = bitmap;
     }
     
-    CalcBoundingBox( x, y );
-    int width = icon.GetWidth();
-    int height = icon.GetHeight();
-    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 (use_bitmap.GetMask()) mask = use_bitmap.GetMask()->GetBitmap();
     
     if (useMask && mask) 
     {
@@ -547,7 +540,7 @@ void wxWindowDC::DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMas
         gdk_gc_set_clip_origin( m_penGC, xx, yy );
     }
   
-    GdkPixmap *pm = bitmap.GetPixmap();
+    GdkPixmap *pm = use_bitmap.GetPixmap();
     gdk_draw_pixmap( m_window, m_penGC, pm, 0, 0, xx, yy, -1, -1 );
   
     if (useMask && mask) 
@@ -557,19 +550,20 @@ void wxWindowDC::DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMas
     }
     
     CalcBoundingBox( x, y );
-    int width = bitmap.GetWidth();
-    int height = bitmap.GetHeight();
-    CalcBoundingBox( x + width, y + height );
+    CalcBoundingBox( x + w, y + h );
 }
 
 bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
-       wxDC *source, long xsrc, long ysrc, int WXUNUSED(logical_func), bool useMask )
+       wxDC *source, long xsrc, long ysrc, int logical_func, bool useMask )
 {
-    if (!Ok()) return FALSE;
+    wxCHECK_MSG( Ok(), FALSE, "invalid window dc" );
     
     CalcBoundingBox( xdest, ydest );
     CalcBoundingBox( xdest + width, ydest + height );
     
+    int old_logical_func = m_logicalFunction;
+    SetLogicalFunction( logical_func );
+    
     wxClientDC *csrc = (wxClientDC*)source;
   
     if (csrc->m_isMemDC)
@@ -586,11 +580,11 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
     
             if (useMask && mask) 
             {
-                gdk_gc_set_clip_mask( m_textGC, mask );
-                gdk_gc_set_clip_origin( m_textGC, xx, yy );
+                gdk_gc_set_clip_mask( m_penGC, mask );
+                gdk_gc_set_clip_origin( m_penGC, xx, yy );
             }
            
-            gdk_draw_pixmap( m_window, m_textGC, pmap,
+            gdk_draw_pixmap( m_window, m_penGC, pmap,
                              source->DeviceToLogicalX(xsrc), 
                             source->DeviceToLogicalY(ysrc),
                              xx, 
@@ -600,10 +594,11 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
          
             if (useMask && mask) 
             {
-                gdk_gc_set_clip_mask( m_textGC, (GdkBitmap *) NULL );
-                gdk_gc_set_clip_origin( m_textGC, 0, 0 );
+                gdk_gc_set_clip_mask( m_penGC, (GdkBitmap *) NULL );
+                gdk_gc_set_clip_origin( m_penGC, 0, 0 );
             }
       
+            SetLogicalFunction( old_logical_func );
             return TRUE;
         }
        
@@ -618,8 +613,8 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
     
             if (useMask && mask) 
             {
-                gdk_gc_set_clip_mask( m_textGC, mask );
-                gdk_gc_set_clip_origin( m_textGC, xx, yy );
+                gdk_gc_set_clip_mask( m_penGC, mask );
+                gdk_gc_set_clip_origin( m_penGC, xx, yy );
             }
   
             gdk_draw_bitmap( m_window, m_textGC, bmap,
@@ -632,15 +627,16 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
          
             if (useMask && mask) 
             {
-                gdk_gc_set_clip_mask( m_textGC, (GdkBitmap *) NULL );
-                gdk_gc_set_clip_origin( m_textGC, 0, 0 );
+                gdk_gc_set_clip_mask( m_penGC, (GdkBitmap *) NULL );
+                gdk_gc_set_clip_origin( m_penGC, 0, 0 );
             }
       
+            SetLogicalFunction( old_logical_func );
             return TRUE;
         }
     }
 
-    gdk_window_copy_area ( m_window, m_textGC,
+    gdk_window_copy_area ( m_window, m_penGC,
                            XLOG2DEV(xdest), YLOG2DEV(ydest),
                            csrc->GetWindow(),
                            source->DeviceToLogicalX(xsrc), 
@@ -648,20 +644,13 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
                            source->DeviceToLogicalXRel(width), 
                           source->DeviceToLogicalYRel(height) );
 
-/*    
-    gdk_window_copy_area ( m_window, m_textGC,
-                           XLOG2DEV(xdest), YLOG2DEV(ydest),
-                           csrc->GetWindow(),
-                           xsrc, ysrc,
-                           width, height );
-*/
-    
-  return TRUE;
+    SetLogicalFunction( old_logical_func );
+    return TRUE;
 }
 
 void wxWindowDC::DrawText( const wxString &text, long x, long y, bool WXUNUSED(use16) )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
 
     GdkFont *font = m_font.GetInternalFont( m_scaleY );
 
@@ -696,7 +685,7 @@ void wxWindowDC::DrawText( const wxString &text, long x, long y, bool WXUNUSED(u
     CalcBoundingBox (x, y);
 }
 
-bool wxWindowDC::CanGetTextExtent(void) const
+bool wxWindowDC::CanGetTextExtent() const
 {
     return TRUE;
 }
@@ -705,7 +694,7 @@ void wxWindowDC::GetTextExtent( const wxString &string, long *width, long *heigh
                      long *descent, long *externalLeading,
                      wxFont *theFont, bool WXUNUSED(use16) )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     wxFont fontToUse = m_font;
     if (theFont) fontToUse = *theFont;
@@ -717,25 +706,25 @@ void wxWindowDC::GetTextExtent( const wxString &string, long *width, long *heigh
     if (externalLeading) (*externalLeading) = 0;  // ??
 }
 
-long wxWindowDC::GetCharWidth(void)
+long wxWindowDC::GetCharWidth()
 {
-    if (!Ok()) return 0;
+    wxCHECK_MSG( Ok(), 0, "invalid window dc" );
   
     GdkFont *font = m_font.GetInternalFont( m_scaleY );
     return long(gdk_string_width( font, "H" ) / m_scaleX);
 }
 
-long wxWindowDC::GetCharHeight(void)
+long wxWindowDC::GetCharHeight()
 {
-    if (!Ok()) return 0;
+    wxCHECK_MSG( Ok(), 0, "invalid window dc" );
   
     GdkFont *font = m_font.GetInternalFont( m_scaleY );
     return long((font->ascent + font->descent) / m_scaleY);
 }
 
-void wxWindowDC::Clear(void)
+void wxWindowDC::Clear()
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (!m_isMemDC)
     {
@@ -751,15 +740,15 @@ void wxWindowDC::Clear(void)
 
 void wxWindowDC::SetFont( const wxFont &font )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     m_font = font;
 }
 
 void wxWindowDC::SetPen( const wxPen &pen )
 {
-    if (!Ok()) return;
-
+    wxCHECK_RET( Ok(), "invalid window dc" );
+  
     if (m_pen == pen) return;
   
     m_pen = pen;
@@ -814,7 +803,7 @@ void wxWindowDC::SetPen( const wxPen &pen )
 
 void wxWindowDC::SetBrush( const wxBrush &brush )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_brush == brush) return;
   
@@ -849,11 +838,12 @@ void wxWindowDC::SetBrush( const wxBrush &brush )
     }
 }
 
-// CMB 21/7/98: Added SetBackground. Sets background brush
-// for Clear() and bg colour for shapes filled with cross-hatch brush
 void wxWindowDC::SetBackground( const wxBrush &brush )
 {
-    if (!Ok()) return;
+   // CMB 21/7/98: Added SetBackground. Sets background brush
+   // for Clear() and bg colour for shapes filled with cross-hatch brush
+   
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_backgroundBrush == brush) return;
   
@@ -893,7 +883,10 @@ void wxWindowDC::SetBackground( const wxBrush &brush )
 
 void wxWindowDC::SetLogicalFunction( int function )
 {
+    wxCHECK_RET( Ok(), "invalid window dc" );
+  
     if (m_logicalFunction == function) return;
+    
     GdkFunction mode = GDK_COPY;
     switch (function)
     {
@@ -901,6 +894,7 @@ void wxWindowDC::SetLogicalFunction( int function )
         case wxINVERT: mode = GDK_INVERT; break;
         default:       break;
     }
+    
     m_logicalFunction = function;
     gdk_gc_set_function( m_penGC, mode );
     gdk_gc_set_function( m_brushGC, mode );
@@ -909,7 +903,7 @@ void wxWindowDC::SetLogicalFunction( int function )
 
 void wxWindowDC::SetTextForeground( const wxColour &col )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_textForegroundColour == col) return;
   
@@ -922,7 +916,7 @@ void wxWindowDC::SetTextForeground( const wxColour &col )
 
 void wxWindowDC::SetTextBackground( const wxColour &col )
 {
-    if (!Ok()) return;
+    wxCHECK_RET( Ok(), "invalid window dc" );
   
     if (m_textBackgroundColour == col) return;
   
@@ -935,10 +929,13 @@ void wxWindowDC::SetTextBackground( const wxColour &col )
 
 void wxWindowDC::SetBackgroundMode( int mode )
 {
+    wxCHECK_RET( Ok(), "invalid window dc" );
+  
     m_backgroundMode = mode;
 
     // CMB 21/7/98: fill style of cross-hatch brushes is affected by
     // transparent/solid background mode
+    
     if (m_brush.GetStyle() != wxSOLID && m_brush.GetStyle() != wxTRANSPARENT)
     {
         gdk_gc_set_fill( m_brushGC,
@@ -948,10 +945,13 @@ void wxWindowDC::SetBackgroundMode( int mode )
 
 void wxWindowDC::SetPalette( const wxPalette& WXUNUSED(palette) )
 {
+    wxFAIL_MSG( "wxWindowDC::SetPalette not implemented" );
 }
 
 void wxWindowDC::SetClippingRegion( long x, long y, long width, long height )
 {
+    wxCHECK_RET( Ok(), "invalid window dc" );
+  
     wxDC::SetClippingRegion( x, y, width, height );
   
     GdkRectangle rect;
@@ -967,6 +967,8 @@ void wxWindowDC::SetClippingRegion( long x, long y, long width, long height )
 
 void wxWindowDC::SetClippingRegion( const wxRegion &region  )
 {
+    wxCHECK_RET( Ok(), "invalid window dc" );
+  
     if (region.Empty())
     {
         DestroyClippingRegion();
@@ -979,8 +981,10 @@ void wxWindowDC::SetClippingRegion( const wxRegion &region  )
     gdk_gc_set_clip_region( m_bgGC, region.GetRegion() );
 }
 
-void wxWindowDC::DestroyClippingRegion(void)
+void wxWindowDC::DestroyClippingRegion()
 {
+    wxCHECK_RET( Ok(), "invalid window dc" );
+  
     wxDC::DestroyClippingRegion();
   
     gdk_gc_set_clip_rectangle( m_penGC, (GdkRectangle *) NULL );
@@ -989,7 +993,7 @@ void wxWindowDC::DestroyClippingRegion(void)
     gdk_gc_set_clip_rectangle( m_bgGC, (GdkRectangle *) NULL );
 }
 
-void wxWindowDC::SetUpDC(void)
+void wxWindowDC::SetUpDC()
 {
     Destroy();
     m_ok = TRUE;
@@ -1034,7 +1038,7 @@ void wxWindowDC::SetUpDC(void)
     }
 }
 
-void wxWindowDC::Destroy(void)
+void wxWindowDC::Destroy()
 {
     if (m_penGC) gdk_gc_unref( m_penGC );
     m_penGC = (GdkGC*) NULL;
@@ -1046,7 +1050,7 @@ void wxWindowDC::Destroy(void)
     m_bgGC = (GdkGC*) NULL;
 }
 
-GdkWindow *wxWindowDC::GetWindow(void)
+GdkWindow *wxWindowDC::GetWindow()
 {
     return m_window;
 }
@@ -1055,7 +1059,7 @@ GdkWindow *wxWindowDC::GetWindow(void)
 
 void wx_quadratic_spline(double a1, double b1, double a2, double b2,
                          double a3, double b3, double a4, double b4);
-void wx_clear_stack(void);
+void wx_clear_stack();
 int wx_spline_pop(double *x1, double *y1, double *x2, double *y2, double *x3,
         double *y3, double *x4, double *y4);
 void wx_spline_push(double x1, double y1, double x2, double y2, double x3, double y3,
@@ -1106,7 +1110,7 @@ static Stack    wx_spline_stack[SPLINE_STACK_DEPTH];
 static Stack   *wx_stack_top;
 static int      wx_stack_count;
 
-void wx_clear_stack(void)
+void wx_clear_stack()
 {
     wx_stack_top = wx_spline_stack;
     wx_stack_count = 0;
@@ -1168,6 +1172,8 @@ static void wx_spline_draw_point_array(wxDC *dc)
 
 void wxWindowDC::DrawSpline( wxList *points )
 {
+    wxCHECK_RET( Ok(), "invalid window dc" );
+  
     wxPoint *p;
     double           cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4;
     double           x1, y1, x2, y2;
@@ -1223,7 +1229,7 @@ void wxWindowDC::DrawSpline( wxList *points )
 
 IMPLEMENT_DYNAMIC_CLASS(wxPaintDC,wxWindowDC)
 
-wxPaintDC::wxPaintDC(void)
+wxPaintDC::wxPaintDC()
   : wxWindowDC()
 {
 }
@@ -1239,7 +1245,7 @@ wxPaintDC::wxPaintDC( wxWindow *win )
 
 IMPLEMENT_DYNAMIC_CLASS(wxClientDC,wxWindowDC)
 
-wxClientDC::wxClientDC(void)
+wxClientDC::wxClientDC()
   : wxWindowDC()
 {
 }
index c41cb0234890647a46007c9f5f31a75a100f6e62..e996334c006bd00330c97b8d7bc15be51b16e2a7 100644 (file)
 
 IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC,wxWindowDC)
 
-wxMemoryDC::wxMemoryDC(void) : wxWindowDC()
+wxMemoryDC::wxMemoryDC() : wxWindowDC()
 {
-  m_ok = FALSE;
+    m_ok = FALSE;
   
-  m_cmap = gtk_widget_get_default_colormap();
+    m_cmap = gtk_widget_get_default_colormap();
 }
 
 wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) ) 
   : wxWindowDC()
 {
-  m_ok = FALSE;
+    m_ok = FALSE;
   
-  m_cmap = gtk_widget_get_default_colormap();
+    m_cmap = gtk_widget_get_default_colormap();
 }
 
-wxMemoryDC::~wxMemoryDC(void)
+wxMemoryDC::~wxMemoryDC()
 {
 }
 
 void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
 {
-  m_selected = bitmap;
-  if (m_selected.Ok())
-  {
-    if (m_selected.GetPixmap())
+    m_selected = bitmap;
+    if (m_selected.Ok())
     {
-      m_window = m_selected.GetPixmap();
+        if (m_selected.GetPixmap())
+        {
+            m_window = m_selected.GetPixmap();
+        }
+        else
+        {
+            m_window = m_selected.GetBitmap();
+        }
+    
+        SetUpDC();
+    
+        m_isMemDC = TRUE;
     }
     else
-    {
-      m_window = m_selected.GetBitmap();
+    { 
+        m_ok = FALSE;
+        m_window = (GdkWindow *) NULL;
     }
-    
-    SetUpDC();
-    
-    m_isMemDC = TRUE;
-  }
-  else
-  {
-    m_ok = FALSE;
-    m_window = (GdkWindow *) NULL;
-  }
 }
 
 void wxMemoryDC::GetSize( int *width, int *height ) const
 {
-  if (m_selected.Ok())
-  {
-    if (width) (*width) = m_selected.GetWidth();
-    if (height) (*height) = m_selected.GetHeight();
-  }
-  else
-  {
-    if (width) (*width) = 0;
-    if (height) (*height) = 0;
-  }
+    if (m_selected.Ok())
+    {
+        if (width) (*width) = m_selected.GetWidth();
+        if (height) (*height) = m_selected.GetHeight();
+    }
+    else
+    {
+        if (width) (*width) = 0;
+        if (height) (*height) = 0;
+    }
 }
 
 
index 5530fdaeab85bdcfdef3d89eb4fbefdf4ab557ae..d4362ef4a4354cb9282842405c0617289cb4ec3a 100644 (file)
@@ -254,6 +254,11 @@ wxPostScriptDC::~wxPostScriptDC ()
     if (m_pstream) delete m_pstream;
 }
 
+bool wxPostScriptDC::Ok() const
+{
+  return (m_ok && m_pstream);
+}
+  
 bool wxPostScriptDC::PrinterDialog(wxWindow *parent)
 {
     wxPostScriptPrintDialog dialog( parent, _("Printer Settings"), wxPoint(150, 150), wxSize(400, 400), 
@@ -299,14 +304,14 @@ bool wxPostScriptDC::PrinterDialog(wxWindow *parent)
       m_ok = TRUE;
     }
 
-  return m_ok;
+    return m_ok;
 }
 
 void wxPostScriptDC::SetClippingRegion (long x, long y, long w, long h)
 {
-    if (m_clipping) return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
-    if (!m_pstream) return;
+    if (m_clipping) return;
 
     wxDC::SetClippingRegion( x, y, w, h );
     
@@ -326,7 +331,7 @@ void wxPostScriptDC::SetClippingRegion( const wxRegion &WXUNUSED(region) )
 
 void wxPostScriptDC::DestroyClippingRegion()
 {
-    if (!m_pstream) return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
     wxDC::DestroyClippingRegion();
     
@@ -360,7 +365,7 @@ void wxPostScriptDC::CrossHair (long WXUNUSED(x), long WXUNUSED(y))
 
 void wxPostScriptDC::DrawLine (long x1, long y1, long x2, long y2)
 {
-    if (!m_pstream) return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
     if  (m_pen.GetStyle() == wxTRANSPARENT) return;
     
@@ -379,8 +384,8 @@ void wxPostScriptDC::DrawLine (long x1, long y1, long x2, long y2)
 
 void wxPostScriptDC::DrawArc (long x1, long y1, long x2, long y2, long xc, long yc)
 {
-    if (!m_pstream) return;
-
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     long dx = x1 - xc;
     long dy = y1 - yc;
     long radius = (long) sqrt(dx*dx+dy*dy);
@@ -442,8 +447,8 @@ void wxPostScriptDC::DrawArc (long x1, long y1, long x2, long y2, long xc, long
 
 void wxPostScriptDC::DrawEllipticArc(long x,long y,long w,long h,double sa,double ea)
 {
-    if (!m_pstream) return;
-
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     if (sa>=360 || sa<=-360) sa=sa-int(sa/360)*360;
     if (ea>=360 || ea<=-360) ea=ea-int(ea/360)*360;
     if (sa<0) sa+=360;
@@ -484,7 +489,7 @@ void wxPostScriptDC::DrawEllipticArc(long x,long y,long w,long h,double sa,doubl
 
 void wxPostScriptDC::DrawPoint (long x, long y)
 {
-    if (!m_pstream)  return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
     if (m_pen.GetStyle() == wxTRANSPARENT) return;
     
@@ -500,8 +505,8 @@ void wxPostScriptDC::DrawPoint (long x, long y)
 
 void wxPostScriptDC::DrawPolygon (int n, wxPoint points[], long xoffset, long yoffset, int WXUNUSED(fillStyle))
 {
-    if (!m_pstream) return;
-  
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     if (n <= 0) return;
     
     if (m_brush.GetStyle () != wxTRANSPARENT)
@@ -550,8 +555,8 @@ void wxPostScriptDC::DrawPolygon (int n, wxPoint points[], long xoffset, long yo
 
 void wxPostScriptDC::DrawLines (int n, wxPoint points[], long xoffset, long yoffset)
 {
-    if (!m_pstream) return;
-  
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     if (m_pen.GetStyle() == wxTRANSPARENT) return;
     if (n <= 0) return;
   
@@ -577,7 +582,7 @@ void wxPostScriptDC::DrawLines (int n, wxPoint points[], long xoffset, long yoff
 
 void wxPostScriptDC::DrawRectangle (long x, long y, long width, long height)
 {
-    if (!m_pstream) return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
     if (m_brush.GetStyle () != wxTRANSPARENT)
     {
@@ -614,8 +619,8 @@ void wxPostScriptDC::DrawRectangle (long x, long y, long width, long height)
 
 void wxPostScriptDC::DrawRoundedRectangle (long x, long y, long width, long height, double radius)
 {
-    if (!m_pstream)  return;
-
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     if (radius < 0.0)
     {
         // Now, a negative radius is interpreted to mean
@@ -675,8 +680,8 @@ void wxPostScriptDC::DrawRoundedRectangle (long x, long y, long width, long heig
 
 void wxPostScriptDC::DrawEllipse (long x, long y, long width, long height)
 {
-    if (!m_pstream) return;
-  
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     if (m_brush.GetStyle () != wxTRANSPARENT)
     {
         SetBrush (m_brush);
@@ -706,6 +711,8 @@ void wxPostScriptDC::DrawEllipse (long x, long y, long width, long height)
 
 void wxPostScriptDC::DrawIcon (const wxIcon& icon, long x, long y)
 {
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     wxMemoryDC memDC;
     memDC.SelectObject( icon );
     Blit(x, y, icon.GetWidth(), icon.GetHeight(), &memDC, 0, 0);
@@ -713,6 +720,8 @@ void wxPostScriptDC::DrawIcon (const wxIcon& icon, long x, long y)
 
 void wxPostScriptDC::DrawBitmap( const wxBitmap& bitmap, long x, long y, bool useMask )
 {
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     wxMemoryDC memDC;
     memDC.SelectObject( bitmap );
     Blit( x, y, bitmap.GetWidth(), bitmap.GetHeight(), &memDC, 0, 0, useMask );
@@ -720,8 +729,8 @@ void wxPostScriptDC::DrawBitmap( const wxBitmap& bitmap, long x, long y, bool us
 
 void wxPostScriptDC::SetFont (const wxFont& font)
 {
-    if (!m_pstream) return;
-
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     if (!font.Ok())  return;
     
     m_font = font;
@@ -739,8 +748,8 @@ void wxPostScriptDC::SetFont (const wxFont& font)
 
 void wxPostScriptDC::SetPen( const wxPen& pen )
 {
-    if (!m_pstream) return;
-
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     if (!pen.Ok()) return;
     
     int oldStyle = m_pen.GetStyle();
@@ -818,8 +827,8 @@ void wxPostScriptDC::SetPen( const wxPen& pen )
 
 void wxPostScriptDC::SetBrush( const wxBrush& brush )
 {
-    if (!m_pstream)  return;
-
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     if (!brush.Ok()) return;
     
     m_brush = brush;
@@ -857,8 +866,8 @@ void wxPostScriptDC::SetBrush( const wxBrush& brush )
 
 void wxPostScriptDC::DrawText( const wxString& text, long x, long y, bool WXUNUSED(use16bit) )
 {
-    if (!m_pstream)  return;
-
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     SetFont( m_font );
 
     if (m_textForegroundColour.Ok ())
@@ -952,7 +961,7 @@ void wxPostScriptDC::SetLogicalFunction (int WXUNUSED(function))
 
 void wxPostScriptDC::DrawSpline( wxList *points )
 {
-    if (!m_pstream) return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
     SetPen( m_pen );
 
@@ -1015,6 +1024,8 @@ long wxPostScriptDC::GetCharWidth ()
 
 void wxPostScriptDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
 {
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     m_signX = (xLeftRight ? 1 : -1);
     m_signY = (yBottomUp  ? 1 : -1);
     
@@ -1023,15 +1034,19 @@ void wxPostScriptDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
 
 void wxPostScriptDC::SetDeviceOrigin( long x, long y )
 {
-  int h = 0;
-  int w = 0;
-  GetSize( &w, &h );
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
+    int h = 0;
+    int w = 0;
+    GetSize( &w, &h );
   
-  wxDC::SetDeviceOrigin( x, h-y );
+    wxDC::SetDeviceOrigin( x, h-y );
 }
 
 void wxPostScriptDC::GetSize(int* width, int* height) const
 {
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
+    
     const char *paperType = wxThePrintSetupData->GetPaperName();
     
     if (!paperType) paperType = _("A4 210 x 297 mm");
@@ -1042,18 +1057,20 @@ void wxPostScriptDC::GetSize(int* width, int* height) const
     
     if (paper)
     {
-        *width = paper->widthPixels;
-        *height = paper->heightPixels;
+        if (width) *width = paper->widthPixels;
+        if (height) *height = paper->heightPixels;
     }
     else
     {
-        *width = 595;
-        *height = 842;
+        if (width) *width = 595;
+        if (height) *height = 842;
     }
 }
 
 bool wxPostScriptDC::StartDoc (const wxString& message)
 {
+    wxCHECK_MSG( Ok(), FALSE, "invalid postscript dc" );
+    
     if (m_filename == "")
     {
         m_filename = wxGetTempFileName("ps");
@@ -1092,7 +1109,7 @@ bool wxPostScriptDC::StartDoc (const wxString& message)
 
 void wxPostScriptDC::EndDoc ()
 {
-    if (!m_pstream)  return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
     if (m_clipping)
     {
@@ -1249,7 +1266,7 @@ void wxPostScriptDC::EndDoc ()
 
 void wxPostScriptDC::StartPage ()
 {
-    if (!m_pstream)  return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
     *m_pstream << "%%Page: " << (wxPageNumber++) << "\n";
     
@@ -1285,7 +1302,7 @@ void wxPostScriptDC::StartPage ()
 
 void wxPostScriptDC::EndPage ()
 {
-    if (!m_pstream)  return;
+    wxCHECK_RET( Ok(), "invalid postscript dc" );
     
     *m_pstream << "showpage\n";
 }
@@ -1293,6 +1310,8 @@ void wxPostScriptDC::EndPage ()
 bool wxPostScriptDC::Blit (long xdest, long ydest, long fwidth, long fheight,
       wxDC *source, long xsrc, long ysrc, int WXUNUSED(rop), bool WXUNUSED(useMask))
 {
+    wxCHECK_MSG( Ok(), FALSE, "invalid postscript dc" );
+    
     return TRUE;
 }
 
@@ -1586,13 +1605,13 @@ void wxPostScriptDC::GetSizeMM(long *width, long *height) const
     
     if (paper)
     {
-        *width = paper->widthMM;
-        *height = paper->heightMM;
+        if (width) *width = paper->widthMM;
+        if (height) *height = paper->heightMM;
     }
     else
     {
-       *width = 210;
-       *height = 297;
+       if (width) *width = 210;
+       if (height) *height = 297;
     }
 }
 
index 4bab18b3795c48549117ccc45ee8ed865fa1c31e..bdb29ad1bd4c3c841b8d3fea980630510af6db30 100644 (file)
@@ -245,51 +245,53 @@ IMPLEMENT_DYNAMIC_CLASS(wxScreenDC,wxPaintDC)
 
 wxScreenDC::wxScreenDC(void)
 {
-  m_ok = FALSE;
-  m_window = (GdkWindow *) NULL;
-  m_cmap = gdk_colormap_get_system();
+    m_ok = FALSE;
+    m_window = (GdkWindow *) NULL;
+    m_cmap = gdk_colormap_get_system();
   
-  if (sm_overlayWindow)
-  {
-    m_window = sm_overlayWindow;
-    m_deviceOriginX = - sm_overlayWindowX;
-    m_deviceOriginY = - sm_overlayWindowY;
-  }
-  else
-    m_window = GDK_ROOT_PARENT();
+    if (sm_overlayWindow)
+    {
+        m_window = sm_overlayWindow;
+        m_deviceOriginX = - sm_overlayWindowX;
+        m_deviceOriginY = - sm_overlayWindowY;
+    }
+    else
+    {
+       m_window = GDK_ROOT_PARENT();
+    }
   
-  SetUpDC();
+    SetUpDC();
   
-  gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
-  gdk_gc_set_subwindow( m_brushGC, GDK_INCLUDE_INFERIORS );
-  gdk_gc_set_subwindow( m_textGC, GDK_INCLUDE_INFERIORS );
-  gdk_gc_set_subwindow( m_bgGC, GDK_INCLUDE_INFERIORS );
+    gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
+    gdk_gc_set_subwindow( m_brushGC, GDK_INCLUDE_INFERIORS );
+    gdk_gc_set_subwindow( m_textGC, GDK_INCLUDE_INFERIORS );
+    gdk_gc_set_subwindow( m_bgGC, GDK_INCLUDE_INFERIORS );
 }
 
 wxScreenDC::~wxScreenDC(void)
 {
-  EndDrawingOnTop();
+    EndDrawingOnTop();
 }
 
 bool wxScreenDC::StartDrawingOnTop( wxWindow *window )
 {
-  if (!window) return StartDrawingOnTop();
+    if (!window) return StartDrawingOnTop();
   
-  int x = 0;
-  int y = 0;
-  window->GetPosition( &x, &y );
-  int w = 0;
-  int h = 0;
-  window->GetSize( &w, &h );
-  window->ClientToScreen( &x, &y );
+    int x = 0;
+    int y = 0;
+    window->GetPosition( &x, &y );
+    int w = 0;
+    int h = 0;
+    window->GetSize( &w, &h );
+    window->ClientToScreen( &x, &y );
   
-  wxRect rect;
-  rect.x = x;
-  rect.y = y;
-  rect.width = 0;
-  rect.height = 0;
+    wxRect rect;
+    rect.x = x;
+    rect.y = y;
+    rect.width = 0;
+    rect.height = 0;
   
-  return StartDrawingOnTop( &rect );
+    return StartDrawingOnTop( &rect );
 }
 
 bool wxScreenDC::StartDrawingOnTop( wxRect *rect )
@@ -329,12 +331,12 @@ bool wxScreenDC::StartDrawingOnTop( wxRect *rect )
 
 bool wxScreenDC::EndDrawingOnTop(void)
 {
-  if (sm_overlayWindow) gdk_window_destroy( sm_overlayWindow );
+    if (sm_overlayWindow) gdk_window_destroy( sm_overlayWindow );
   
-  sm_overlayWindow = NULL;
-  sm_overlayWindowX = 0;
-  sm_overlayWindowY = 0;
+    sm_overlayWindow = NULL;
+    sm_overlayWindowX = 0;
+    sm_overlayWindowY = 0;
   
-  return TRUE;
+    return TRUE;
 }