moving more things to common API between carbon and cocoa, adapting WidthDefault etc, removing dependencies from wxClientDC from text measuring ops on wxWindow

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56108 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2008-10-06 10:35:36 +00:00
parent 63052a509d
commit f55d9f749b
5 changed files with 97 additions and 76 deletions

View File

@@ -79,50 +79,6 @@
#define wxMAC_DEBUG_REDRAW 0
#endif
WX_DECLARE_HASH_MAP(WXWidget, wxWindow*, wxPointerHash, wxPointerEqual, MacControlMap);
static MacControlMap wxWinMacControlList;
wxWindowMac *wxFindWindowFromWXWidget(WXWidget inControl )
{
MacControlMap::iterator node = wxWinMacControlList.find(inControl);
return (node == wxWinMacControlList.end()) ? NULL : node->second;
}
void wxAssociateWindowWithWXWidget(WXWidget inControl, wxWindow *control)
{
// adding NULL ControlRef is (first) surely a result of an error and
// (secondly) breaks native event processing
wxCHECK_RET( inControl != (WXWidget) NULL, wxT("attempt to add a NULL WindowRef to window list") );
wxWinMacControlList[inControl] = control;
}
void wxRemoveWXWidgetAssociation(wxWindow *control)
{
// iterate over all the elements in the class
// is the iterator stable ? as we might have two associations pointing to the same wxWindow
// we should go on...
bool found = true ;
while ( found )
{
found = false ;
MacControlMap::iterator it;
for ( it = wxWinMacControlList.begin(); it != wxWinMacControlList.end(); ++it )
{
if ( it->second == control )
{
wxWinMacControlList.erase(it);
found = true ;
break;
}
}
}
}
// ---------------------------------------------------------------------------
// Carbon Events
// ---------------------------------------------------------------------------
@@ -842,11 +798,11 @@ wxWidgetImplType* wxWidgetImpl::CreateUserPane( wxWindowMac* wxpeer, wxWindowMac
}
void wxMacControl::MacInstallEventHandler( ControlRef control, wxWindowMac* wxPeer )
void wxMacControl::InstallEventHandler( WXWidget control )
{
wxAssociateWindowWithWXWidget( (WXWidget) control , wxPeer ) ;
::InstallControlEventHandler( control , GetwxMacWindowEventHandlerUPP(),
GetEventTypeCount(eventList), eventList, wxPeer, NULL);
wxWidgetImpl::Associate( control ? control : (WXWidget) m_controlRef , this ) ;
::InstallControlEventHandler( control ? (ControlRef) control : m_controlRef , GetwxMacWindowEventHandlerUPP(),
GetEventTypeCount(eventList), eventList, GetWXPeer(), NULL);
}
IMPLEMENT_DYNAMIC_CLASS( wxMacControl , wxWidgetImpl )
@@ -869,7 +825,7 @@ wxMacControl::~wxMacControl()
wxASSERT_MSG( m_controlRef != NULL , wxT("Control Handle already NULL, Dispose called twice ?") );
wxASSERT_MSG( IsValidControlHandle(m_controlRef) , wxT("Invalid Control Handle (maybe already released) in Dispose") );
wxRemoveWXWidgetAssociation( m_wxPeer) ;
wxWidgetImpl::RemoveAssociations( this ) ;
// we cannot check the ref count here anymore, as autorelease objects might delete their refs later
// we can have situations when being embedded, where the control gets deleted behind our back, so only
// CFRelease if we are safe