diff --git a/include/wx/gtk1/bitmap.h b/include/wx/gtk1/bitmap.h index 176792f189..4bc07c3674 100644 --- a/include/wx/gtk1/bitmap.h +++ b/include/wx/gtk1/bitmap.h @@ -25,6 +25,7 @@ class WXDLLIMPEXP_FWD_CORE wxPixelDataBase; class WXDLLIMPEXP_FWD_CORE wxMask; class WXDLLIMPEXP_FWD_CORE wxBitmap; class WXDLLIMPEXP_FWD_CORE wxImage; +class WXDLLIMPEXP_FWD_CORE wxCursor; //----------------------------------------------------------------------------- // wxMask @@ -72,6 +73,7 @@ public: wxBitmap( const char* const* bits ); wxBitmap( const wxString &filename, wxBitmapType type = wxBITMAP_DEFAULT_TYPE ); wxBitmap( const wxImage& image, int depth = -1, double WXUNUSED(scale) = 1.0 ) { (void)CreateFromImage(image, depth); } + explicit wxBitmap(const wxCursor& cursor); virtual ~wxBitmap(); bool Create(int width, int height, int depth = wxBITMAP_SCREEN_DEPTH); diff --git a/include/wx/gtk1/cursor.h b/include/wx/gtk1/cursor.h index 63a743df3a..b1632ecc15 100644 --- a/include/wx/gtk1/cursor.h +++ b/include/wx/gtk1/cursor.h @@ -29,19 +29,16 @@ public: #endif #if wxUSE_IMAGE wxCursor( const wxImage & image ); + wxCursor(const char* const* xpmData); #endif + wxCursor(const wxString& name, + wxBitmapType type = wxCURSOR_DEFAULT_TYPE, + int hotSpotX = 0, int hotSpotY = 0); wxCursor( const char bits[], int width, int height, int hotSpotX=-1, int hotSpotY=-1, const char maskBits[] = NULL, const wxColour* fg = NULL, const wxColour* bg = NULL); - /* WARNING: the following ctor is missing: - - wxCursor(const wxString& name, - wxBitmapType type = wxCURSOR_DEFAULT_TYPE, - int hotSpotX = 0, int hotSpotY = 0); - */ - virtual ~wxCursor(); // implementation @@ -50,6 +47,9 @@ public: protected: void InitFromStock(wxStockCursor); +#if wxUSE_IMAGE + void InitFromImage(const wxImage& image); +#endif virtual wxGDIRefData *CreateGDIRefData() const; virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const; diff --git a/src/gtk1/bitmap.cpp b/src/gtk1/bitmap.cpp index b32ddf9a20..4bcf68f784 100644 --- a/src/gtk1/bitmap.cpp +++ b/src/gtk1/bitmap.cpp @@ -18,6 +18,7 @@ #include "wx/icon.h" #include "wx/math.h" #include "wx/image.h" + #include "wx/cursor.h" #endif // WX_PRECOMP #include "wx/filefn.h" @@ -1144,6 +1145,11 @@ wxBitmap::wxBitmap( const char bits[], int width, int height, int WXUNUSED(depth } } +wxBitmap::wxBitmap(const wxCursor& cursor) +{ + wxUnusedVar(cursor); +} + wxBitmap::~wxBitmap() { } diff --git a/src/gtk1/cursor.cpp b/src/gtk1/cursor.cpp index cf67f7e506..72a0777882 100644 --- a/src/gtk1/cursor.cpp +++ b/src/gtk1/cursor.cpp @@ -159,9 +159,38 @@ wxCursor::wxCursor(const char bits[], int width, int height, gdk_bitmap_unref( mask ); } +wxCursor::wxCursor(const wxString& cursor_file, + wxBitmapType type, + int hotSpotX, int hotSpotY) +{ +#if wxUSE_IMAGE + wxImage img; + if (!img.LoadFile(cursor_file, type)) + return; + + // eventually set the hotspot: + if (!img.HasOption(wxIMAGE_OPTION_CUR_HOTSPOT_X)) + img.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_X, hotSpotX); + if (!img.HasOption(wxIMAGE_OPTION_CUR_HOTSPOT_Y)) + img.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_Y, hotSpotY); + + InitFromImage(img); +#endif // wxUSE_IMAGE +} + #if wxUSE_IMAGE wxCursor::wxCursor( const wxImage & image ) +{ + InitFromImage(image); +} + +wxCursor::wxCursor(const char* const* xpmData) +{ + InitFromImage(wxImage(xpmData)); +} + +void wxCursor::InitFromImage( const wxImage & image ) { unsigned char * rgbBits = image.GetData(); int w = image.GetWidth() ; @@ -312,7 +341,6 @@ wxCursor::wxCursor( const wxImage & image ) delete [] bits; delete [] maskBits; } - #endif // wxUSE_IMAGE wxCursor::~wxCursor()