X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e9576ca53db96b462ed4c0b4bdf47d64c40203e4..7ad3e9390ff6a3731acfde50938e6b36e051709c:/src/mac/cursor.cpp diff --git a/src/mac/cursor.cpp b/src/mac/cursor.cpp index 4333364c93..23b9eb4c0c 100644 --- a/src/mac/cursor.cpp +++ b/src/mac/cursor.cpp @@ -13,25 +13,49 @@ #pragma implementation "cursor.h" #endif +#include "wx/defs.h" + +#include "wx/app.h" #include "wx/cursor.h" #include "wx/icon.h" +#include "wx/mac/private.h" #if !USE_SHARED_LIBRARIES IMPLEMENT_DYNAMIC_CLASS(wxCursor, wxBitmap) #endif +const short kwxCursorHandId = 9 ; +const short kwxCursorSizeWEId = 10 ; +const short kwxCursorSizeNSId = 11 ; +#if !TARGET_CARBON +Cursor* MacArrowCursorPtr = &qd.arrow ; +CursHandle MacArrowCursor = &MacArrowCursorPtr ; +#else +bool MacArrowInstalled = false ; +Cursor MacArrow ; +Cursor* MacArrowCursorPtr = &MacArrow ; +CursHandle MacArrowCursor = &MacArrowCursorPtr ; +#endif +CursHandle gMacCurrentCursor = NULL ; + wxCursorRefData::wxCursorRefData() { - m_width = 32; m_height = 32; - -/* TODO - m_hCursor = 0 ; -*/ +#if TARGET_CARBON + if ( !MacArrowInstalled ) + { + MacArrowCursorPtr = GetQDGlobalsArrow( &MacArrow ) ; + MacArrowInstalled = true ; + } +#endif + m_width = 32; + m_height = 32; + m_hCursor = NULL ; } wxCursorRefData::~wxCursorRefData() { - // TODO: destroy cursor +// if ( m_hCursor && ( m_hCursor != MacArrowCursor ) ) +// ::ReleaseResource( (Handle) m_hCursor ) ; } // Cursors @@ -55,123 +79,152 @@ wxCursor::wxCursor(const wxString& cursor_file, long flags, int hotSpotX, int ho wxCursor::wxCursor(int cursor_type) { m_refData = new wxCursorRefData; - -/* TODO + + switch (cursor_type) { case wxCURSOR_WAIT: - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_WAIT); + M_CURSORDATA->m_hCursor = ::GetCursor(watchCursor); break; case wxCURSOR_IBEAM: - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_IBEAM); + M_CURSORDATA->m_hCursor = ::GetCursor(iBeamCursor); break; case wxCURSOR_CROSS: - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_CROSS); + M_CURSORDATA->m_hCursor = ::GetCursor(crossCursor); break; case wxCURSOR_SIZENWSE: - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_SIZENWSE); + { + wxStAppResource resload ; + M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorSizeWEId); + } break; case wxCURSOR_SIZENESW: - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_SIZENESW); + { + wxStAppResource resload ; + M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorSizeWEId); + } break; case wxCURSOR_SIZEWE: - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_SIZEWE); + { + wxStAppResource resload ; + M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorSizeWEId); + } break; case wxCURSOR_SIZENS: - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_SIZENS); + { + wxStAppResource resload ; + M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorSizeNSId); + } break; case wxCURSOR_CHAR: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_ARROW); - break; - } + { + M_CURSORDATA->m_hCursor = MacArrowCursor; + break; + } case wxCURSOR_HAND: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_HAND"); - break; - } + { + wxStAppResource resload ; + M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorHandId); + } + break; case wxCURSOR_BULLSEYE: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_BULLSEYE"); - break; - } + { + wxStAppResource resload ; + M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorHandId); + } + break; case wxCURSOR_PENCIL: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_PENCIL"); - break; - } + { + wxStAppResource resload ; + M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorHandId); + } + break; case wxCURSOR_MAGNIFIER: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_MAGNIFIER"); - break; - } + { + wxStAppResource resload ; + M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorHandId); + } + break; case wxCURSOR_NO_ENTRY: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_NO_ENTRY"); - break; - } + { + wxStAppResource resload ; + M_CURSORDATA->m_hCursor = ::GetCursor(kwxCursorHandId); + } + break; case wxCURSOR_LEFT_BUTTON: { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_ARROW); + M_CURSORDATA->m_hCursor = MacArrowCursor; break; } case wxCURSOR_RIGHT_BUTTON: { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_ARROW); + M_CURSORDATA->m_hCursor = MacArrowCursor; break; } case wxCURSOR_MIDDLE_BUTTON: { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_ARROW); + M_CURSORDATA->m_hCursor = MacArrowCursor; break; } case wxCURSOR_SIZING: { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_SIZING"); + M_CURSORDATA->m_hCursor = MacArrowCursor; break; } case wxCURSOR_WATCH: { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_WATCH"); + M_CURSORDATA->m_hCursor = ::GetCursor(watchCursor); break; } case wxCURSOR_SPRAYCAN: { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_ROLLER"); + M_CURSORDATA->m_hCursor = MacArrowCursor; break; } case wxCURSOR_PAINT_BRUSH: { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_PBRUSH"); + M_CURSORDATA->m_hCursor = MacArrowCursor; break; } case wxCURSOR_POINT_LEFT: { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_PLEFT"); + M_CURSORDATA->m_hCursor = MacArrowCursor; break; } case wxCURSOR_POINT_RIGHT: { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_PRIGHT"); + M_CURSORDATA->m_hCursor = MacArrowCursor; break; } case wxCURSOR_QUESTION_ARROW: { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_QARROW"); + M_CURSORDATA->m_hCursor = MacArrowCursor; break; } case wxCURSOR_BLANK: { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), "wxCURSOR_BLANK"); + M_CURSORDATA->m_hCursor = MacArrowCursor; break; } default: case wxCURSOR_ARROW: - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(NULL, IDC_ARROW); + M_CURSORDATA->m_hCursor = MacArrowCursor; break; - } -*/ + } +} +void wxCursor::MacInstall() const +{ + if ( m_refData && M_CURSORDATA->m_hCursor ) + { + ::SetCursor( *((CursHandle)M_CURSORDATA->m_hCursor) ) ; + gMacCurrentCursor = (CursHandle)M_CURSORDATA->m_hCursor ; + } + else + { + ::SetCursor( *MacArrowCursor ) ; + gMacCurrentCursor = NULL ; + } } wxCursor::~wxCursor() @@ -181,7 +234,7 @@ wxCursor::~wxCursor() // Global cursor setting void wxSetCursor(const wxCursor& cursor) { - // TODO (optional on platforms with no global cursor) + cursor.MacInstall() ; }