Update for bitmap, image on scaling, transparancy,

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
This commit is contained in:
Robert Roebling
1998-12-06 17:33:01 +00:00
parent c19a8a9a71
commit 4bc67cc550
28 changed files with 1254 additions and 1055 deletions
+17 -7
View File
@@ -19,7 +19,6 @@
#include "wx/object.h"
#include "wx/string.h"
#include "wx/palette.h"
#include "wx/image.h"
//-----------------------------------------------------------------------------
// classes
@@ -28,6 +27,18 @@
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;
+25 -25
View 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
{
+13 -13
View 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 );
};
+2 -2
View 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;
+5 -4
View 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; }
+17 -7
View File
@@ -19,7 +19,6 @@
#include "wx/object.h"
#include "wx/string.h"
#include "wx/palette.h"
#include "wx/image.h"
//-----------------------------------------------------------------------------
// classes
@@ -28,6 +27,18 @@
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;
+25 -25
View 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
{
+13 -13
View 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 );
};
+2 -2
View 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;
+5 -4
View 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; }
+8
View 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 );
+6 -17
View File
@@ -47,6 +47,10 @@
#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);
}
+51 -9
View 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)
+1 -1
View 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;
+1
View File
@@ -21,6 +21,7 @@
#include "wx/settings.h"
#include "wx/resource.h"
#include "wx/module.h"
#include "wx/image.h"
#include "unistd.h"
+109 -70
View 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_RET( bitmap.Ok(), "invalid bitmap" );
GdkImage *gdk_image = gdk_image_get( bitmap.GetPixmap(),
0, 0,
bitmap.GetWidth(), bitmap.GetHeight() );
wxCHECK_RET( gdk_image, "couldn't create image" );
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() );
wxCHECK_MSG( Ok(), image, "invalid bitmap" );
SetMaskColour( 16, 16, 16 ); // anything unlikely and dividable
}
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;
image.Create( M_BMPDATA->m_width, M_BMPDATA->m_height );
char unsigned *data = image.GetData();
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;
@@ -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 );
}
+183 -181
View File
File diff suppressed because it is too large Load Diff
+106 -100
View File
File diff suppressed because it is too large Load Diff
+33 -33
View File
@@ -19,62 +19,62 @@
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;
}
}
+62 -43
View 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;
}
}
+38 -36
View 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;
}
+1
View File
@@ -21,6 +21,7 @@
#include "wx/settings.h"
#include "wx/resource.h"
#include "wx/module.h"
#include "wx/image.h"
#include "unistd.h"
+109 -70
View 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_RET( bitmap.Ok(), "invalid bitmap" );
GdkImage *gdk_image = gdk_image_get( bitmap.GetPixmap(),
0, 0,
bitmap.GetWidth(), bitmap.GetHeight() );
wxCHECK_RET( gdk_image, "couldn't create image" );
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() );
wxCHECK_MSG( Ok(), image, "invalid bitmap" );
SetMaskColour( 16, 16, 16 ); // anything unlikely and dividable
}
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;
image.Create( M_BMPDATA->m_width, M_BMPDATA->m_height );
char unsigned *data = image.GetData();
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;
@@ -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 );
}
+183 -181
View File
File diff suppressed because it is too large Load Diff
+106 -100
View File
File diff suppressed because it is too large Load Diff
+33 -33
View File
@@ -19,62 +19,62 @@
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;
}
}
+62 -43
View 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;
}
}
+38 -36
View 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;
}