// RCS-ID: $Id$
// Copyright: (c) Ryan Norton
// 2007, Software 2000 Ltd.
-// Licence: wxWidgets licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/wxprec.h"
}ClassicCursor;
///////////////////////////////////////////////////////////////////////////
-// This is a direct copy from src/mac/carbon/cursor.cpp and should be
+// This is a direct copy from src/osx/carbon/cursor.cpp and should be
// changed to use common code if we plan on keeping it this way.
// Note that this is basically an array of classic 'CURS' resources.
} ;
-// End of data copied from src/mac/carbon/cursor.cpp
+// End of data copied from src/osx/carbon/cursor.cpp
///////////////////////////////////////////////////////////////////////////
/* NSCursorCreateWithPrivateId
return theCursor;
}
-// TODO: Remove in trunk.. needed for 2.8
-NSCursor* wxGetStockCursor( short sIndex )
-{
- wxLogDebug("Please do not call wxGetStockCursor.");
- return NSCursorCreateWithPrivateId(sIndex);
-}
-
wxCursorRefData::wxCursorRefData() :
m_width(32), m_height(32), m_hCursor(nil)
{
return -1;
}
+// Keep an array of stock cursors so they can share wxCursorRefData and thus
+// wxObject::IsSameAs will return true.
+// They will obviously be destroyed at static destruction time which should
+// theoretically be fine.
+static wxCursor s_stockCursors[wxCURSOR_MAX];
+
// Cursors by stock number (enum wxStockCursor)
wxCursor::wxCursor(int stock_cursor_id)
{
+ // We default-constructed wxObject so our m_refData == NULL
+ if(stock_cursor_id >= 0 && stock_cursor_id < wxCURSOR_MAX)
+ {
+ // Attempt to reference an existing stock cursor
+ Ref(s_stockCursors[stock_cursor_id]);
+ }
+ // If we succeeded in getting an existing stock cursor, we're done.
+ if(m_refData != NULL)
+ return;
+
m_refData = new wxCursorRefData;
M_CURSORDATA->m_hCursor = nil;
{
int privateId;
if( (privateId = GetPrivateCursorIdForStockCursor(stock_cursor_id)) >= 0)
- { // wxGetStockCursor is not a get method but an alloc method.
+ {
M_CURSORDATA->m_hCursor = NSCursorCreateWithPrivateId(privateId);
}
}
// Stage 3: Give up, complain, and use a normal arrow
if(M_CURSORDATA->m_hCursor == nil)
{
- wxLogDebug("Could not find suitable cursor for wxStockCursor = %d. Using normal pointer.", stock_cursor_id);
+ wxLogDebug(wxT("Could not find suitable cursor for wxStockCursor = %d. Using normal pointer."), stock_cursor_id);
M_CURSORDATA->m_hCursor = [[NSCursor arrowCursor] retain];
}
// This should never happen as the arrowCursor should always exist.
wxASSERT(M_CURSORDATA->m_hCursor != nil);
+
+ // Store ourself as the new stock cursor for this ID so that future
+ // calls will share the same ref data.
+ if(stock_cursor_id >= 0 && stock_cursor_id < wxCURSOR_MAX)
+ {
+ s_stockCursors[stock_cursor_id] = *this;
+ }
}
wxCursor::~wxCursor()