1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        src/os2/cursor.cpp 
   3 // Purpose:     wxCursor class 
   4 // Author:      David Webster 
   8 // Copyright:   (c) David Webster 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 // For compilers that support precompilation, includes "wx.h". 
  13 #include "wx/wxprec.h" 
  15 #include "wx/cursor.h" 
  26 #include "wx/os2/private.h" 
  27 #include "wx/os2/wxrsc.h" 
  31 IMPLEMENT_DYNAMIC_CLASS(wxCursor
, wxBitmap
) 
  33 wxCursorRefData::wxCursorRefData(void) 
  38   m_bDestroyCursor 
= false; 
  41 void wxCursorRefData::Free() 
  46             ::WinDestroyPointer((HPOINTER
)m_hCursor
); 
  49 } // end of wxCursorRefData::Free 
  52 wxCursor::wxCursor(void) 
  56 wxCursor::wxCursor(const char WXUNUSED(bits
)[], 
  59                    int WXUNUSED(hotSpotX
), 
  60                    int WXUNUSED(hotSpotY
), 
  61                    const char WXUNUSED(maskBits
)[]) 
  65 wxCursor::wxCursor(const wxImage
& rImage
) 
  67     wxImage  vImage32 
= rImage
.Scale(32,32); 
  68     int      nWidth   
= vImage32
.GetWidth(); 
  69     int      nHeight  
= vImage32
.GetHeight(); 
  72     // Need a bitmap handle somehow 
  74     HBITMAP  hBitmap 
= wxBitmap(vImage32
).GetHBITMAP(); 
  75     int      nHotSpotX 
= vImage32
.GetOptionInt(wxIMAGE_OPTION_CUR_HOTSPOT_X
); 
  76     int      nHotSpotY 
= vImage32
.GetOptionInt(wxIMAGE_OPTION_CUR_HOTSPOT_Y
); 
  78     if (nHotSpotX 
< 0 || nHotSpotX 
>= nWidth
) 
  80     if (nHotSpotY 
< 0 || nHotSpotY 
>= nHeight
) 
  84     wxCursorRefData
* pRefData 
= new wxCursorRefData
; 
  87     pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinCreatePointer( HWND_DESKTOP
 
  94 } // end of wxCursor::wxCursor 
  96 wxCursor::wxCursor( const wxString
& WXUNUSED(rsCursorFile
), 
  98                     int WXUNUSED(nHotSpotX
), 
  99                     int WXUNUSED(nHotSpotY
) ) 
 101     wxCursorRefData
* pRefData 
= new wxCursorRefData
; 
 103     pRefData 
= new wxCursorRefData
; 
 104     m_refData 
= pRefData
; 
 105     pRefData
->m_bDestroyCursor 
= false; 
 106     if (lFlags 
== wxBITMAP_TYPE_CUR_RESOURCE
) 
 108         pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinLoadPointer( HWND_DESKTOP
 
 110                                                            ,(ULONG
)lFlags 
// if OS/2 this should be the resource Id 
 113 } // end of wxCursor::wxCursor 
 115 // Cursors by stock number 
 116 wxCursor::wxCursor(int nCursorType
) 
 118     wxCursorRefData
*                pRefData 
= new wxCursorRefData
; 
 120     m_refData 
= pRefData
; 
 123         case wxCURSOR_ARROWWAIT
: 
 124             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinQuerySysPointer( HWND_DESKTOP
 
 132             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinQuerySysPointer( HWND_DESKTOP
 
 139             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinQuerySysPointer( HWND_DESKTOP
 
 146             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinQuerySysPointer( HWND_DESKTOP
 
 152         case wxCURSOR_SIZENWSE
: 
 153             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinQuerySysPointer( HWND_DESKTOP
 
 154                                                                    ,(ULONG
)SPTR_SIZENWSE
 
 159         case wxCURSOR_SIZENESW
: 
 160             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinQuerySysPointer( HWND_DESKTOP
 
 161                                                                    ,(ULONG
)SPTR_SIZENESW
 
 166         case wxCURSOR_SIZEWE
: 
 167             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinQuerySysPointer( HWND_DESKTOP
 
 173         case wxCURSOR_SIZENS
: 
 174             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinQuerySysPointer( HWND_DESKTOP
 
 181             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinQuerySysPointer( HWND_DESKTOP
 
 188             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinLoadPointer( HWND_DESKTOP
 
 190                                                                ,(ULONG
)wxCURSOR_HAND
 
 194         case wxCURSOR_BULLSEYE
: 
 195             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinLoadPointer( HWND_DESKTOP
 
 197                                                                ,(ULONG
)wxCURSOR_BULLSEYE
 
 201         case wxCURSOR_PENCIL
: 
 202             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinLoadPointer( HWND_DESKTOP
 
 204                                                                ,(ULONG
)wxCURSOR_PENCIL
 
 208         case wxCURSOR_MAGNIFIER
: 
 209             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinLoadPointer( HWND_DESKTOP
 
 211                                                                ,(ULONG
)wxCURSOR_MAGNIFIER
 
 215         case wxCURSOR_NO_ENTRY
: 
 216             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinQuerySysPointer( HWND_DESKTOP
 
 222         case wxCURSOR_LEFT_BUTTON
: 
 223             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinQuerySysPointer( HWND_DESKTOP
 
 229         case wxCURSOR_RIGHT_BUTTON
: 
 230             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinQuerySysPointer( HWND_DESKTOP
 
 236         case wxCURSOR_MIDDLE_BUTTON
: 
 237             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinQuerySysPointer( HWND_DESKTOP
 
 243         case wxCURSOR_SIZING
: 
 244             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinQuerySysPointer( HWND_DESKTOP
 
 250         case wxCURSOR_SPRAYCAN
: 
 251             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinLoadPointer( HWND_DESKTOP
 
 253                                                               ,(ULONG
)WXCURSOR_ROLLER
 
 257         case wxCURSOR_PAINT_BRUSH
: 
 258             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinLoadPointer( HWND_DESKTOP
 
 260                                                                ,(ULONG
)WXCURSOR_PBRUSH
 
 264         case wxCURSOR_POINT_LEFT
: 
 265             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinLoadPointer( HWND_DESKTOP
 
 267                                                                ,(ULONG
)WXCURSOR_PLEFT
 
 271         case wxCURSOR_POINT_RIGHT
: 
 272             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinLoadPointer( HWND_DESKTOP
 
 274                                                                ,(ULONG
)WXCURSOR_PRIGHT
 
 278         case wxCURSOR_QUESTION_ARROW
: 
 279             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinLoadPointer( HWND_DESKTOP
 
 281                                                                ,(ULONG
)WXCURSOR_QARROW
 
 286             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinLoadPointer( HWND_DESKTOP
 
 288                                                                ,(ULONG
)WXCURSOR_BLANK
 
 294             pRefData
->m_hCursor 
= (WXHCURSOR
) ::WinQuerySysPointer( HWND_DESKTOP
 
 301     // No need to destroy the stock cursors 
 303     ((wxCursorRefData 
*)m_refData
)->m_bDestroyCursor 
= false; 
 304 } // end of wxCursor::wxCursor 
 306 // Global cursor setting 
 307 void wxSetCursor(const wxCursor
& cursor
) 
 309     extern wxCursor 
*g_globalCursor
; 
 311     if ( cursor
.Ok() && cursor
.GetHCURSOR() ) 
 313 //        ::SetCursor((HCURSOR) cursor.GetHCURSOR()); 
 315         if ( g_globalCursor 
) 
 316             (*g_globalCursor
) = cursor
;