X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/de6185e212ebc37ff11ff70278e3c4f68419b097..12bb29f5432174ecbd65549bda832d70d34a98ae:/src/motif/cursor.cpp diff --git a/src/motif/cursor.cpp b/src/motif/cursor.cpp index fdcb917d39..56b1b840ca 100644 --- a/src/motif/cursor.cpp +++ b/src/motif/cursor.cpp @@ -21,12 +21,9 @@ #ifndef WX_PRECOMP #include "wx/app.h" #include "wx/utils.h" -#endif - -#include "wx/window.h" - -#if wxUSE_IMAGE + #include "wx/window.h" #include "wx/image.h" + #include "wx/log.h" #endif #ifdef __VMS__ @@ -53,15 +50,21 @@ WX_DECLARE_LIST(wxXCursor, wxXCursorList); #include "wx/listimpl.cpp" WX_DEFINE_LIST(wxXCursorList) -class WXDLLEXPORT wxCursorRefData: public wxObjectRefData +class WXDLLEXPORT wxCursorRefData: public wxGDIRefData { - friend class WXDLLEXPORT wxCursor; public: wxCursorRefData(); - ~wxCursorRefData(); + virtual ~wxCursorRefData(); wxXCursorList m_cursors; // wxXCursor objects, one per display wxStockCursor m_cursorId; // wxWidgets standard cursor id + +private: + // There is no way to copy m_cursor so we can't implement a copy ctor + // properly. + wxDECLARE_NO_COPY_CLASS(wxCursorRefData); + + friend class wxCursor; }; #define M_CURSORDATA ((wxCursorRefData *)m_refData) @@ -242,16 +245,20 @@ void wxCursor::Create(WXPixmap pixmap, WXPixmap mask_pixmap, } wxCursor::wxCursor(const char bits[], int width, int height, - int hotSpotX, int hotSpotY, const char maskBits[]) + int hotSpotX, int hotSpotY, const char maskBits[] , + const wxColour* WXUNUSED(fg), const wxColour* WXUNUSED(bg) ) { Create(bits, width, height, hotSpotX, hotSpotY, maskBits); } -wxCursor::wxCursor(const wxString& name, long flags, int hotSpotX, int hotSpotY) +wxCursor::wxCursor(const wxString& name, wxBitmapType type, + int hotSpotX, int hotSpotY) { // Must be an XBM file - if (flags != wxBITMAP_TYPE_XBM) + if (type != wxBITMAP_TYPE_XBM) { + wxLogError("Invalid cursor bitmap type '%d'", type); return; + } m_refData = new wxCursorRefData; @@ -263,7 +270,7 @@ wxCursor::wxCursor(const wxString& name, long flags, int hotSpotX, int hotSpotY) int screen_num = DefaultScreen (dpy); int value = XReadBitmapFile (dpy, RootWindow (dpy, screen_num), - wxConstCast(name.c_str(), char), + name.mb_str(), &w, &h, &pixmap, &hotX, &hotY); if (value == BitmapSuccess) @@ -287,7 +294,7 @@ wxCursor::wxCursor(const wxString& name, long flags, int hotSpotX, int hotSpotY) } // Cursors by stock number -wxCursor::wxCursor(wxStockCursor id) +void wxCursor::InitFromStock(wxStockCursor id) { m_refData = new wxCursorRefData; M_CURSORDATA->m_cursorId = id; @@ -297,9 +304,17 @@ wxCursor::~wxCursor() { } -bool wxCursor::Ok() const +wxGDIRefData *wxCursor::CreateGDIRefData() const { - return m_refData != NULL; + return new wxCursorRefData; +} + +wxGDIRefData * +wxCursor::CloneGDIRefData(const wxGDIRefData * WXUNUSED(data)) const +{ + wxFAIL_MSG( wxS("Cloning cursors is not implemented in wxMotif.") ); + + return new wxCursorRefData; } // Motif-specific: create/get a cursor for the current display @@ -451,7 +466,7 @@ wxXSetBusyCursor (wxWindow * win, const wxCursor * cursor) else { // Restore old cursor - if (win->GetCursor().Ok()) + if (win->GetCursor().IsOk()) attrs.cursor = (Cursor) win->GetCursor().GetXCursor(display); else attrs.cursor = None;