+#if wxMAC_USE_CORE_GRAPHICS
+ m_cgContextRef = NULL ;
+#endif
+
+ // as all windows are created with WS_VISIBLE style...
+ m_isShown = true;
+
+ m_hScrollBar = NULL ;
+ m_vScrollBar = NULL ;
+ m_macBackgroundBrush = wxNullBrush ;
+
+ m_macIsUserPane = true;
+ m_clipChildren = false ;
+ m_cachedClippedRectValid = false ;
+
+ // we need a valid font for the encodings
+ wxWindowBase::SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
+}
+
+wxWindowMac::~wxWindowMac()
+{
+ SendDestroyEvent();
+
+ m_isBeingDeleted = true;
+
+ MacInvalidateBorders() ;
+
+#ifndef __WXUNIVERSAL__
+ // VS: make sure there's no wxFrame with last focus set to us:
+ for ( wxWindow *win = GetParent(); win; win = win->GetParent() )
+ {
+ wxFrame *frame = wxDynamicCast(win, wxFrame);
+ if ( frame )
+ {
+ if ( frame->GetLastFocus() == this )
+ frame->SetLastFocus((wxWindow*)NULL);
+ break;
+ }
+ }
+#endif
+
+ // destroy children before destroying this window itself
+ DestroyChildren();
+
+ // wxRemoveMacControlAssociation( this ) ;
+ // If we delete an item, we should initialize the parent panel,
+ // because it could now be invalid.
+ wxWindow *parent = GetParent() ;
+ if ( parent )
+ {
+ if (parent->GetDefaultItem() == (wxButton*) this)
+ parent->SetDefaultItem(NULL);
+ }
+
+ if ( m_peer && m_peer->Ok() )
+ {
+ // in case the callback might be called during destruction
+ wxRemoveMacControlAssociation( this) ;
+ ::RemoveEventHandler( (EventHandlerRef ) m_macControlEventHandler ) ;
+ // we currently are not using this hook
+ // ::SetControlColorProc( *m_peer , NULL ) ;
+ m_peer->Dispose() ;
+ }
+
+ if ( g_MacLastWindow == this )
+ g_MacLastWindow = NULL ;
+
+ wxFrame* frame = wxDynamicCast( wxGetTopLevelParent( this ) , wxFrame ) ;
+ if ( frame )
+ {
+ if ( frame->GetLastFocus() == this )
+ frame->SetLastFocus( NULL ) ;
+ }
+
+ // delete our drop target if we've got one
+#if wxUSE_DRAG_AND_DROP
+ if ( m_dropTarget != NULL )
+ {
+ delete m_dropTarget;
+ m_dropTarget = NULL;
+ }
+#endif
+
+ delete m_peer ;
+}
+
+WXWidget wxWindowMac::GetHandle() const
+{
+ return (WXWidget) m_peer->GetControlRef() ;
+}
+
+void wxWindowMac::MacInstallEventHandler( WXWidget control )
+{
+ wxAssociateControlWithMacControl( (ControlRef) control , this ) ;
+ InstallControlEventHandler( (ControlRef)control , GetwxMacWindowEventHandlerUPP(),
+ GetEventTypeCount(eventList), eventList, this,
+ (EventHandlerRef *)&m_macControlEventHandler);
+
+#if !TARGET_API_MAC_OSX
+ if ( (ControlRef) control == m_peer->GetControlRef() )
+ {
+ m_peer->SetData<ControlUserPaneDrawUPP>(kControlEntireControl, kControlUserPaneDrawProcTag, GetwxMacControlUserPaneDrawProc()) ;
+ m_peer->SetData<ControlUserPaneHitTestUPP>(kControlEntireControl, kControlUserPaneHitTestProcTag, GetwxMacControlUserPaneHitTestProc()) ;
+ m_peer->SetData<ControlUserPaneTrackingUPP>(kControlEntireControl, kControlUserPaneTrackingProcTag, GetwxMacControlUserPaneTrackingProc()) ;
+ m_peer->SetData<ControlUserPaneIdleUPP>(kControlEntireControl, kControlUserPaneIdleProcTag, GetwxMacControlUserPaneIdleProc()) ;
+ m_peer->SetData<ControlUserPaneKeyDownUPP>(kControlEntireControl, kControlUserPaneKeyDownProcTag, GetwxMacControlUserPaneKeyDownProc()) ;
+ m_peer->SetData<ControlUserPaneActivateUPP>(kControlEntireControl, kControlUserPaneActivateProcTag, GetwxMacControlUserPaneActivateProc()) ;
+ m_peer->SetData<ControlUserPaneFocusUPP>(kControlEntireControl, kControlUserPaneFocusProcTag, GetwxMacControlUserPaneFocusProc()) ;
+ m_peer->SetData<ControlUserPaneBackgroundUPP>(kControlEntireControl, kControlUserPaneBackgroundProcTag, GetwxMacControlUserPaneBackgroundProc()) ;
+ }
+#endif
+}
+
+// Constructor
+bool wxWindowMac::Create(wxWindowMac *parent,
+ wxWindowID id,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ const wxString& name)
+{
+ wxCHECK_MSG( parent, false, wxT("can't create wxWindowMac without parent") );
+
+ if ( !CreateBase(parent, id, pos, size, style, wxDefaultValidator, name) )
+ return false;
+
+ m_windowVariant = parent->GetWindowVariant() ;
+
+ if ( m_macIsUserPane )
+ {
+ Rect bounds = wxMacGetBoundsForControl( this , pos , size ) ;
+
+ UInt32 features = 0
+ | kControlSupportsEmbedding
+ | kControlSupportsLiveFeedback
+ | kControlGetsFocusOnClick
+// | kControlHasSpecialBackground
+// | kControlSupportsCalcBestRect
+ | kControlHandlesTracking
+ | kControlSupportsFocus
+ | kControlWantsActivate
+ | kControlWantsIdle ;
+
+ m_peer = new wxMacControl(this) ;
+ OSStatus err =::CreateUserPaneControl( MAC_WXHWND(GetParent()->MacGetTopLevelWindowRef()) , &bounds, features , m_peer->GetControlRefAddr() );
+ verify_noerr( err );
+
+ MacPostControlCreate(pos, size) ;
+ }
+
+#ifndef __WXUNIVERSAL__
+ // Don't give scrollbars to wxControls unless they ask for them
+ if ( (! IsKindOf(CLASSINFO(wxControl)) && ! IsKindOf(CLASSINFO(wxStatusBar)))
+ || (IsKindOf(CLASSINFO(wxControl)) && ((style & wxHSCROLL) || (style & wxVSCROLL))))
+ {
+ MacCreateScrollBars( style ) ;
+ }
+#endif
+
+ wxWindowCreateEvent event(this);
+ GetEventHandler()->AddPendingEvent(event);
+
+ return true;
+}
+
+void wxWindowMac::MacChildAdded()
+{
+ if ( m_vScrollBar )
+ m_vScrollBar->Raise() ;
+ if ( m_hScrollBar )
+ m_hScrollBar->Raise() ;
+}
+
+void wxWindowMac::MacPostControlCreate(const wxPoint& pos, const wxSize& size)
+{
+ wxASSERT_MSG( m_peer != NULL && m_peer->Ok() , wxT("No valid mac control") ) ;
+
+ m_peer->SetReference( (long)this ) ;
+ GetParent()->AddChild( this );
+
+ MacInstallEventHandler( (WXWidget) m_peer->GetControlRef() );
+
+ ControlRef container = (ControlRef) GetParent()->GetHandle() ;
+ wxASSERT_MSG( container != NULL , wxT("No valid mac container control") ) ;
+ ::EmbedControl( m_peer->GetControlRef() , container ) ;
+ GetParent()->MacChildAdded() ;
+
+ // adjust font, controlsize etc
+ DoSetWindowVariant( m_windowVariant ) ;
+
+ m_peer->SetLabel( wxStripMenuCodes(m_label) ) ;
+
+ if (!m_macIsUserPane)
+ SetInitialBestSize(size);
+
+ SetCursor( *wxSTANDARD_CURSOR ) ;
+}
+
+void wxWindowMac::DoSetWindowVariant( wxWindowVariant variant )
+{
+ // Don't assert, in case we set the window variant before
+ // the window is created
+ // wxASSERT( m_peer->Ok() ) ;
+
+ m_windowVariant = variant ;
+
+ if (m_peer == NULL || !m_peer->Ok())
+ return;
+
+ ControlSize size ;
+ ThemeFontID themeFont = kThemeSystemFont ;
+
+ // we will get that from the settings later
+ // and make this NORMAL later, but first
+ // we have a few calculations that we must fix
+
+ switch ( variant )
+ {
+ case wxWINDOW_VARIANT_NORMAL :
+ size = kControlSizeNormal;
+ themeFont = kThemeSystemFont ;
+ break ;
+
+ case wxWINDOW_VARIANT_SMALL :
+ size = kControlSizeSmall;
+ themeFont = kThemeSmallSystemFont ;
+ break ;
+
+ case wxWINDOW_VARIANT_MINI :
+ if (UMAGetSystemVersion() >= 0x1030 )
+ {
+ // not always defined in the headers
+ size = 3 ;
+ themeFont = 109 ;
+ }
+ else
+ {
+ size = kControlSizeSmall;
+ themeFont = kThemeSmallSystemFont ;
+ }
+ break ;
+
+ case wxWINDOW_VARIANT_LARGE :
+ size = kControlSizeLarge;
+ themeFont = kThemeSystemFont ;
+ break ;
+
+ default:
+ wxFAIL_MSG(_T("unexpected window variant"));
+ break ;
+ }
+
+ m_peer->SetData<ControlSize>(kControlEntireControl, kControlSizeTag, &size ) ;
+
+ wxFont font ;
+ font.MacCreateThemeFont( themeFont ) ;
+ SetFont( font ) ;
+}
+
+void wxWindowMac::MacUpdateControlFont()