]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/toplevel.cpp
guard code for mac / quickdraw
[wxWidgets.git] / src / mac / carbon / toplevel.cpp
index 135bf7aa619d2d66e4b0a689996c687e8372c46a..6f7d25249998a6f080cb8412780cdd237befed34 100644 (file)
@@ -961,7 +961,7 @@ bool wxTopLevelWindowMac::Create(wxWindow *parent,
 
     DoMacCreateRealWindow( parent, title, pos , size , style , name ) ;
 
-    SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE));
+    SetBackgroundColour(wxColour(wxMacCreateCGColorFromHITheme(kThemeBrushDialogBackgroundActive)));
 
     if (GetExtraStyle() & wxFRAME_EX_METAL)
         MacSetMetalAppearance(true);
@@ -1063,15 +1063,18 @@ wxPoint wxTopLevelWindowMac::GetClientAreaOrigin() const
     return wxPoint(0, 0) ;
 }
 
-void  wxTopLevelWindowMac::MacSetBackgroundBrush( const wxBrush &brush )
+bool wxTopLevelWindowMac::SetBackgroundColour(const wxColour& col )
 {
-    wxTopLevelWindowBase::MacSetBackgroundBrush( brush ) ;
-
-    if ( m_macBackgroundBrush.Ok() && m_macBackgroundBrush.GetStyle() != wxTRANSPARENT && m_macBackgroundBrush.MacGetBrushKind() == kwxMacBrushTheme )
-    {
-        SetThemeWindowBackground( (WindowRef) m_macWindow , m_macBackgroundBrush.MacGetTheme() , false ) ;
-    }
-}
+    if ( !wxTopLevelWindowBase::SetBackgroundColour(col) && m_hasBgCol )
+        return false ;
+    
+    if ( col == wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) )
+        SetThemeWindowBackground( (WindowRef) m_macWindow,  kThemeBrushDocumentWindowBackground, false ) ;
+    else if ( col == wxSystemSettings::GetColour( wxSYS_COLOUR_3DFACE ) )
+        SetThemeWindowBackground( (WindowRef) m_macWindow,  kThemeBrushDialogBackgroundActive, false ) ;
+    // TODO BETTER THEME SUPPORT
+    return true;
+}    
 
 void wxTopLevelWindowMacInstallTopLevelWindowEventHandler(WindowRef window, EventHandlerRef* handler, void *ref)
 {
@@ -1366,7 +1369,6 @@ void wxTopLevelWindowMac::MacActivate( long timestamp , bool WXUNUSED(inIsActiva
         s_macDeactivateWindow = NULL;
 
     MacDelayedDeactivation(timestamp);
-    MacPropagateHiliteChanged() ;
 }
 
 void wxTopLevelWindowMac::SetTitle(const wxString& title)
@@ -1414,11 +1416,148 @@ bool wxTopLevelWindowMac::Show(bool show)
            ::TransitionWindow( (WindowRef)m_macWindow, kWindowZoomTransitionEffect, kWindowHideTransitionAction, NULL );
     }
 
-    MacPropagateVisibilityChanged() ;
-
     return true ;
 }
 
+bool wxTopLevelWindowMac::ShowWithEffect(wxShowEffect effect,
+                            unsigned timeout,
+                            wxDirection dir)
+{
+    // TODO factor common code
+    if ( !wxTopLevelWindowBase::Show(true) )
+        return false;
+    WindowTransitionEffect transition = 0 ;
+    switch( effect )
+    {
+        case wxSHOW_EFFECT_ROLL :
+        case wxSHOW_EFFECT_SLIDE :
+            transition = kWindowGenieTransitionEffect;
+            break;
+        case wxSHOW_EFFECT_BLEND :
+            transition = kWindowFadeTransitionEffect;
+            break;
+        case wxSHOW_EFFECT_EXPAND :
+        default :
+            // having sheets would be fine, but this might lead to a repositioning
+#if 0
+            if ( GetParent() )
+                transition = kWindowSheetTransitionEffect;
+            else
+#endif
+                transition = kWindowZoomTransitionEffect;
+            break;
+    }
+    
+    TransitionWindowOptions options;
+    options.version = 0;
+    options.duration = timeout / 1000.0;
+    options.window = transition == kWindowSheetTransitionEffect ? (WindowRef) GetParent()->MacGetTopLevelWindowRef() :0;
+    options.userData = 0;
+    
+    wxSize size = wxGetDisplaySize();
+    Rect bounds;
+    GetWindowBounds( (WindowRef)m_macWindow, kWindowStructureRgn, &bounds );
+    CGRect hiBounds = CGRectMake( bounds.left, bounds.top, bounds.right - bounds.left, bounds.bottom - bounds.top );
+
+    if ( dir & wxRIGHT )
+    {
+        hiBounds.origin.x = size.x;
+        hiBounds.size.width = 0;
+    }
+    if ( dir & wxUP )
+    {
+        hiBounds.origin.y = 0;
+        hiBounds.size.height = 0;
+    }
+    if ( dir & wxDOWN )
+    {
+        hiBounds.origin.y = size.y;
+        hiBounds.size.height = 0;
+    }
+    if ( dir & wxLEFT )
+    {
+        hiBounds.origin.x = 0;
+        hiBounds.size.width = 0;
+    }
+    
+    ::TransitionWindowWithOptions( (WindowRef)m_macWindow, transition, kWindowShowTransitionAction, transition == kWindowGenieTransitionEffect ? &hiBounds : NULL  ,  
+                                  false, &options );
+
+    ::SelectWindow( (WindowRef)m_macWindow ) ;
+    
+    // because apps expect a size event to occur at this moment
+    wxSizeEvent event(GetSize() , m_windowId);
+    event.SetEventObject(this);
+    GetEventHandler()->ProcessEvent(event);
+    
+    return true;
+}
+
+bool wxTopLevelWindowMac::HideWithEffect(wxShowEffect effect,
+                            unsigned timeout ,
+                            wxDirection dir )
+{
+    if ( !wxTopLevelWindowBase::Show(false) )
+        return false;
+    
+    WindowTransitionEffect transition = 0 ;
+    switch( effect )
+    {
+        case wxSHOW_EFFECT_ROLL :
+        case wxSHOW_EFFECT_SLIDE :
+            transition = kWindowGenieTransitionEffect;
+            break;
+        case wxSHOW_EFFECT_BLEND :
+            transition = kWindowFadeTransitionEffect;
+            break;
+        case wxSHOW_EFFECT_EXPAND :
+        default:
+#if 0
+            if ( GetParent() )
+                transition = kWindowSheetTransitionEffect;
+            else
+#endif
+                transition = kWindowZoomTransitionEffect;
+            break;
+    }
+    TransitionWindowOptions options;
+    options.version = 0;
+    options.duration = timeout / 1000.0;
+    options.window = transition == kWindowSheetTransitionEffect ? (WindowRef) GetParent()->MacGetTopLevelWindowRef() :0;
+    options.userData = 0;
+    
+    wxSize size = wxGetDisplaySize();
+    Rect bounds;
+    GetWindowBounds( (WindowRef)m_macWindow, kWindowStructureRgn, &bounds );
+    CGRect hiBounds = CGRectMake( bounds.left, bounds.top, bounds.right - bounds.left, bounds.bottom - bounds.top );
+    
+    if ( dir & wxRIGHT )
+    {
+        hiBounds.origin.x = size.x;
+        hiBounds.size.width = 0;
+    }
+    if ( dir & wxUP )
+    {
+        hiBounds.origin.y = 0;
+        hiBounds.size.height = 0;
+    }
+    if ( dir & wxDOWN )
+    {
+        hiBounds.origin.y = size.y;
+        hiBounds.size.height = 0;
+    }
+    if ( dir & wxLEFT )
+    {
+        hiBounds.origin.x = 0;
+        hiBounds.size.width = 0;
+    }
+    ::TransitionWindowWithOptions( (WindowRef)m_macWindow, transition, kWindowHideTransitionAction, transition == kWindowGenieTransitionEffect ? &hiBounds : NULL  ,  
+                                  false, &options );
+
+    return true;
+}
+
 bool wxTopLevelWindowMac::ShowFullScreen(bool show, long style)
 {
     if ( show )