X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b9b1d6c8ddc0e923c368529efb0e011edeec44e6..d10e22fe8ad283f37b1809349028ffc282e393ce:/src/os2/cursor.cpp diff --git a/src/os2/cursor.cpp b/src/os2/cursor.cpp index df148e17a3..24fbc16ea1 100644 --- a/src/os2/cursor.cpp +++ b/src/os2/cursor.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: cursor.cpp +// Name: src/os2/cursor.cpp // Purpose: wxCursor class // Author: David Webster // Modified by: @@ -12,18 +12,19 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" -#ifndef WX_PRECOMP -#include -#include "wx/setup.h" -#include "wx/list.h" -#include "wx/utils.h" -#include "wx/app.h" #include "wx/cursor.h" -#include "wx/icon.h" + +#ifndef WX_PRECOMP + #include + #include "wx/list.h" + #include "wx/utils.h" + #include "wx/app.h" + #include "wx/icon.h" + #include "wx/image.h" #endif #include "wx/os2/private.h" -#include "wx/image.h" +#include "wx/os2/wxrsc.h" #include "assert.h" @@ -34,47 +35,53 @@ wxCursorRefData::wxCursorRefData(void) m_nWidth = 32; m_nHeight = 32; m_hCursor = 0 ; - m_destroyCursor = FALSE; + m_bDestroyCursor = false; } -wxCursorRefData::~wxCursorRefData(void) +void wxCursorRefData::Free() { -// if ( m_hCursor && m_destroyCursor) -// ::DestroyCursor((HICON) m_hCursor); -} + if (m_hCursor) + { + if (m_bDestroyCursor) + ::WinDestroyPointer((HPOINTER)m_hCursor); + m_hCursor = 0; + } +} // end of wxCursorRefData::Free // Cursors wxCursor::wxCursor(void) { } -wxCursor::wxCursor(const char WXUNUSED(bits)[], int WXUNUSED(width), int WXUNUSED(height), - int WXUNUSED(hotSpotX), int WXUNUSED(hotSpotY), const char WXUNUSED(maskBits)[]) +wxCursor::wxCursor(const char WXUNUSED(bits)[], + int WXUNUSED(width), + int WXUNUSED(height), + int WXUNUSED(hotSpotX), + int WXUNUSED(hotSpotY), + const char WXUNUSED(maskBits)[]) { } -wxCursor::wxCursor( - const wxImage& rImage -) +wxCursor::wxCursor(const wxImage& rImage) { - wxImage vImage32 = rImage.Scale(32,32); - int nWidth = vImage32.GetWidth(); - int nHeight = vImage32.GetHeight(); + wxImage vImage32 = rImage.Scale(32,32); + int nWidth = vImage32.GetWidth(); + int nHeight = vImage32.GetHeight(); // // Need a bitmap handle somehow // - HBITMAP hBitmap = wxBitmap(vImage32).GetHBITMAP(); - int nHotSpotX = vImage32.GetOptionInt(wxCUR_HOTSPOT_X); - int nHotSpotY = vImage32.GetOptionInt(wxCUR_HOTSPOT_Y); + HBITMAP hBitmap = wxBitmap(vImage32).GetHBITMAP(); + int nHotSpotX = vImage32.GetOptionInt(wxIMAGE_OPTION_CUR_HOTSPOT_X); + int nHotSpotY = vImage32.GetOptionInt(wxIMAGE_OPTION_CUR_HOTSPOT_Y); if (nHotSpotX < 0 || nHotSpotX >= nWidth) - nHotSpotX = 0; + nHotSpotX = 0; if (nHotSpotY < 0 || nHotSpotY >= nHeight) - nHotSpotY = 0; + nHotSpotY = 0; - wxCursorRefData* pRefData = new wxCursorRefData; + wxCursorRefData* pRefData = new wxCursorRefData; m_refData = pRefData; pRefData->m_hCursor = (WXHCURSOR) ::WinCreatePointer( HWND_DESKTOP @@ -86,180 +93,215 @@ wxCursor::wxCursor( } // end of wxCursor::wxCursor -wxCursor::wxCursor(const wxString& cursor_file, long flags, int hotSpotX, int hotSpotY) +wxCursor::wxCursor( const wxString& WXUNUSED(rsCursorFile), + long lFlags, + int WXUNUSED(nHotSpotX), + int WXUNUSED(nHotSpotY) ) { - m_refData = new wxCursorRefData; - - M_CURSORDATA->m_destroyCursor = FALSE; - M_CURSORDATA->m_hCursor = 0; -// TODO: -/* - M_CURSORDATA->m_bOK = FALSE; - if (flags & wxBITMAP_TYPE_CUR_RESOURCE) - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadImage(wxGetInstance(), cursor_file, IMAGE_CURSOR, 0, 0, 0); - if (M_CURSORDATA->m_hCursor) - M_CURSORDATA->m_ok = TRUE; - else - M_CURSORDATA->m_ok = FALSE; - } - else if (flags & wxBITMAP_TYPE_CUR) - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadImage(wxGetInstance(), cursor_file, IMAGE_CURSOR, 0, 0, LR_LOADFROMFILE); - } - else if (flags & wxBITMAP_TYPE_ICO) - { - } - else if (flags & wxBITMAP_TYPE_BMP) - { - } -*/ -} + wxCursorRefData* pRefData = new wxCursorRefData; -// Cursors by stock number -wxCursor::wxCursor(int cursor_type) -{ - m_refData = new wxCursorRefData; -// TODO: -/* - switch (cursor_type) - { - case wxCURSOR_WAIT: - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor((HINSTANCE) NULL, IDC_WAIT); - break; - case wxCURSOR_IBEAM: - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor((HINSTANCE) NULL, IDC_IBEAM); - break; - case wxCURSOR_CROSS: - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor((HINSTANCE) NULL, IDC_CROSS); - break; - case wxCURSOR_SIZENWSE: - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor((HINSTANCE) NULL, IDC_SIZENWSE); - break; - case wxCURSOR_SIZENESW: - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor((HINSTANCE) NULL, IDC_SIZENESW); - break; - case wxCURSOR_SIZEWE: - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor((HINSTANCE) NULL, IDC_SIZEWE); - break; - case wxCURSOR_SIZENS: - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor((HINSTANCE) NULL, IDC_SIZENS); - break; - case wxCURSOR_CHAR: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor((HINSTANCE) NULL, IDC_ARROW); - break; - } - case wxCURSOR_HAND: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), wxT("wxCURSOR_HAND")); - break; - } - case wxCURSOR_BULLSEYE: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), wxT("wxCURSOR_BULLSEYE")); - break; - } - case wxCURSOR_PENCIL: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), wxT("wxCURSOR_PENCIL")); - break; - } - case wxCURSOR_MAGNIFIER: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), wxT("wxCURSOR_MAGNIFIER")); - break; - } - case wxCURSOR_NO_ENTRY: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), wxT("wxCURSOR_NO_ENTRY")); - break; - } - case wxCURSOR_LEFT_BUTTON: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor((HINSTANCE) NULL, IDC_ARROW); - break; - } - case wxCURSOR_RIGHT_BUTTON: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor((HINSTANCE) NULL, IDC_ARROW); - break; - } - case wxCURSOR_MIDDLE_BUTTON: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor((HINSTANCE) NULL, IDC_ARROW); - break; - } - case wxCURSOR_SIZING: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), wxT("wxCURSOR_SIZING")); - break; - } - case wxCURSOR_WATCH: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), wxT("wxCURSOR_WATCH")); - break; - } - case wxCURSOR_SPRAYCAN: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), wxT("wxCURSOR_ROLLER")); - break; - } - case wxCURSOR_PAINT_BRUSH: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), wxT("wxCURSOR_PBRUSH")); - break; - } - case wxCURSOR_POINT_LEFT: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), wxT("wxCURSOR_PLEFT")); - break; - } - case wxCURSOR_POINT_RIGHT: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), wxT("wxCURSOR_PRIGHT")); - break; - } - case wxCURSOR_QUESTION_ARROW: - { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), wxT("wxCURSOR_QARROW")); - break; - } - case wxCURSOR_BLANK: + pRefData = new wxCursorRefData; + m_refData = pRefData; + pRefData->m_bDestroyCursor = false; + if (lFlags == wxBITMAP_TYPE_CUR_RESOURCE) { - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor(wxGetInstance(), wxT("wxCURSOR_BLANK")); - break; + pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP + ,0 + ,(ULONG)lFlags // if OS/2 this should be the resource Id + ); } - default: - case wxCURSOR_ARROW: - M_CURSORDATA->m_hCursor = (WXHCURSOR) LoadCursor((HINSTANCE) NULL, IDC_ARROW); - break; - } -*/ -} +} // end of wxCursor::wxCursor -wxCursor::~wxCursor(void) +// Cursors by stock number +wxCursor::wxCursor(int nCursorType) { -// FreeResource(TRUE); -} + wxCursorRefData* pRefData = new wxCursorRefData; -bool wxCursor::FreeResource(bool WXUNUSED(force)) -{ -// if (M_CURSORDATA && M_CURSORDATA->m_hCursor && M_CURSORDATA->m_destroyCursor) -// { -// DestroyCursor((HCURSOR) M_CURSORDATA->m_hCursor); -// M_CURSORDATA->m_hCursor = 0; -// } - return TRUE; -} + m_refData = pRefData; + switch (nCursorType) + { + case wxCURSOR_ARROWWAIT: + pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP + ,(ULONG)SPTR_WAIT + ,FALSE + ); + break; -void wxCursor::SetHCURSOR(WXHCURSOR cursor) -{ - if ( !M_CURSORDATA ) - m_refData = new wxCursorRefData; + case wxCURSOR_WATCH: + case wxCURSOR_WAIT: + pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP + ,(ULONG)SPTR_WAIT + ,FALSE + ); + break; - M_CURSORDATA->m_hCursor = cursor; -} + case wxCURSOR_IBEAM: + pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP + ,(ULONG)SPTR_TEXT + ,FALSE + ); + break; + + case wxCURSOR_CROSS: + pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP + ,(ULONG)SPTR_MOVE + ,FALSE + ); + break; + + case wxCURSOR_SIZENWSE: + pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP + ,(ULONG)SPTR_SIZENWSE + ,FALSE + ); + break; + + case wxCURSOR_SIZENESW: + pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP + ,(ULONG)SPTR_SIZENESW + ,FALSE + ); + break; + + case wxCURSOR_SIZEWE: + pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP + ,(ULONG)SPTR_SIZEWE + ,FALSE + ); + break; + + case wxCURSOR_SIZENS: + pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP + ,(ULONG)SPTR_SIZENS + ,FALSE + ); + break; + + case wxCURSOR_CHAR: + pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP + ,(ULONG)SPTR_ARROW + ,FALSE + ); + break; + + case wxCURSOR_HAND: + pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP + ,0 + ,(ULONG)wxCURSOR_HAND + ); + break; + + case wxCURSOR_BULLSEYE: + pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP + ,0 + ,(ULONG)wxCURSOR_BULLSEYE + ); + break; + + case wxCURSOR_PENCIL: + pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP + ,0 + ,(ULONG)wxCURSOR_PENCIL + ); + break; + + case wxCURSOR_MAGNIFIER: + pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP + ,0 + ,(ULONG)wxCURSOR_MAGNIFIER + ); + break; + + case wxCURSOR_NO_ENTRY: + pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP + ,(ULONG)SPTR_ILLEGAL + ,FALSE + ); + break; + + case wxCURSOR_LEFT_BUTTON: + pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP + ,(ULONG)SPTR_ARROW + ,FALSE + ); + break; + + case wxCURSOR_RIGHT_BUTTON: + pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP + ,(ULONG)SPTR_ARROW + ,FALSE + ); + break; + + case wxCURSOR_MIDDLE_BUTTON: + pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP + ,(ULONG)SPTR_ARROW + ,FALSE + ); + break; + + case wxCURSOR_SIZING: + pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP + ,(ULONG)SPTR_SIZE + ,FALSE + ); + break; + + case wxCURSOR_SPRAYCAN: + pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP + ,0 + ,(ULONG)WXCURSOR_ROLLER + ); + break; + + case wxCURSOR_PAINT_BRUSH: + pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP + ,0 + ,(ULONG)WXCURSOR_PBRUSH + ); + break; + + case wxCURSOR_POINT_LEFT: + pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP + ,0 + ,(ULONG)WXCURSOR_PLEFT + ); + break; + + case wxCURSOR_POINT_RIGHT: + pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP + ,0 + ,(ULONG)WXCURSOR_PRIGHT + ); + break; + + case wxCURSOR_QUESTION_ARROW: + pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP + ,0 + ,(ULONG)WXCURSOR_QARROW + ); + break; + + case wxCURSOR_BLANK: + pRefData->m_hCursor = (WXHCURSOR) ::WinLoadPointer( HWND_DESKTOP + ,0 + ,(ULONG)WXCURSOR_BLANK + ); + break; + + default: + case wxCURSOR_ARROW: + pRefData->m_hCursor = (WXHCURSOR) ::WinQuerySysPointer( HWND_DESKTOP + ,(ULONG)SPTR_ARROW + ,FALSE + ); + break; + } + // + // No need to destroy the stock cursors + // + ((wxCursorRefData *)m_refData)->m_bDestroyCursor = false; +} // end of wxCursor::wxCursor // Global cursor setting void wxSetCursor(const wxCursor& cursor) @@ -274,4 +316,3 @@ void wxSetCursor(const wxCursor& cursor) (*g_globalCursor) = cursor; } } -