]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/window_osx.cpp
Define SPI_GETCARETWIDTH ourselves if it's not defined.
[wxWidgets.git] / src / osx / window_osx.cpp
index 3adbc2c67e1a918c9feccc6f9b9b1ae1bd9967e9..6fe7e14929b71efe8f54c99a40fb0331c13bedb0 100644 (file)
 #endif
 
 #if wxUSE_DRAG_AND_DROP
-#include "wx/dnd.h"
+    #include "wx/dnd.h"
 #endif
 
 #include "wx/graphics.h"
 
 #if wxOSX_USE_CARBON
-#include "wx/osx/uma.h"
+    #include "wx/osx/uma.h"
 #else
-#include "wx/osx/private.h"
+    #include "wx/osx/private.h"
 #endif
 
 #define MAC_SCROLLBAR_SIZE 15
@@ -301,6 +301,11 @@ wxOSXWidgetImpl* wxWindowMac::GetPeer() const
     return m_peer == kOSXNoWidgetImpl ? NULL : m_peer ; 
 }
 
+bool wxWindowMac::ShouldCreatePeer() const
+{
+    return m_peer != kOSXNoWidgetImpl;
+}
+
 void wxWindowMac::DontCreatePeer()
 {
     m_peer = kOSXNoWidgetImpl;
@@ -444,7 +449,8 @@ void wxWindowMac::MacChildAdded()
 #endif
 }
 
-void wxWindowMac::MacPostControlCreate(const wxPoint& WXUNUSED(pos), const wxSize& size)
+void wxWindowMac::MacPostControlCreate(const wxPoint& WXUNUSED(pos),
+                                       const wxSize& WXUNUSED(size))
 {
     // todo remove if refactoring works correctly
 #if 0
@@ -475,7 +481,7 @@ void wxWindowMac::DoSetWindowVariant( wxWindowVariant variant )
 {
     // Don't assert, in case we set the window variant before
     // the window is created
-    // wxASSERT( GetPeer()->Ok() ) ;
+    // wxASSERT( GetPeer()->IsOk() ) ;
 
     m_windowVariant = variant ;
 
@@ -483,39 +489,6 @@ void wxWindowMac::DoSetWindowVariant( wxWindowVariant variant )
         return;
 
     GetPeer()->SetControlSize( variant );
-#if wxOSX_USE_CARBON
-    ControlSize size ;
-
-    // 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;
-            break ;
-
-        case wxWINDOW_VARIANT_SMALL :
-            size = kControlSizeSmall;
-            break ;
-
-        case wxWINDOW_VARIANT_MINI :
-            // not always defined in the headers
-            size = 3 ;
-            break ;
-
-        case wxWINDOW_VARIANT_LARGE :
-            size = kControlSizeLarge;
-            break ;
-
-        default:
-            wxFAIL_MSG(wxT("unexpected window variant"));
-            break ;
-    }
-    GetPeer()->SetData<ControlSize>(kControlEntireControl, kControlSizeTag, &size ) ;
-#endif
-
 
     switch ( variant )
     {
@@ -588,7 +561,7 @@ bool wxWindowMac::SetBackgroundColour(const wxColour& col )
 {
     if (m_growBox)
     {
-        if ( m_backgroundColour.Ok() )
+        if ( m_backgroundColour.IsOk() )
             m_growBox->SetBackgroundColour(m_backgroundColour);
         else
             m_growBox->SetBackgroundColour(*wxWHITE);
@@ -654,10 +627,8 @@ void wxWindowMac::SetDropTarget(wxDropTarget *pDropTarget)
     delete m_dropTarget;
 
     m_dropTarget = pDropTarget;
-    if ( m_dropTarget != NULL )
-    {
-        // TODO:
-    }
+
+    GetPeer()->SetDropTarget(m_dropTarget) ;
 }
 
 #endif
@@ -897,7 +868,7 @@ bool wxWindowMac::SetCursor(const wxCursor& cursor)
             return false ;
     }
 
-    wxASSERT_MSG( m_cursor.Ok(),
+    wxASSERT_MSG( m_cursor.IsOk(),
         wxT("cursor must be valid after call to the base version"));
 
     if ( GetPeer() != NULL )
@@ -1064,6 +1035,7 @@ void wxWindowMac::DoMoveWindow(int x, int y, int width, int height)
         if ( doResize )
         {
             MacRepositionScrollBars() ;
+            MacOnInternalSize();
             wxSize size(actualWidth, actualHeight);
             wxSizeEvent event(size, m_windowId);
             event.SetEventObject(this);
@@ -1147,6 +1119,7 @@ void wxWindowMac::DoSetSize(int x, int y, int width, int height, int sizeFlags)
 
         if (sizeFlags & wxSIZE_FORCE_EVENT)
         {
+            MacOnInternalSize();
             wxSizeEvent event( wxSize(width,height), GetId() );
             event.SetEventObject( this );
             HandleWindowEvent( event );
@@ -1251,12 +1224,18 @@ wxString wxWindowMac::GetLabel() const
 
 bool wxWindowMac::Show(bool show)
 {
+    if ( !show )
+        MacInvalidateBorders();
+    
     if ( !wxWindowBase::Show(show) )
         return false;
 
     if ( GetPeer() )
         GetPeer()->SetVisibility( show ) ;
 
+    if ( show )
+        MacInvalidateBorders();
+
 #ifdef __WXOSX_IPHONE__
     // only when there's no native event support
     if ( !IsTopLevel() )
@@ -1383,27 +1362,23 @@ void wxWindowMac::Refresh(bool WXUNUSED(eraseBack), const wxRect *rect)
 
     if ( !IsShownOnScreen() )
         return ;
+    
+    if ( IsFrozen() )
+        return;
 
     GetPeer()->SetNeedsDisplay( rect ) ;
 }
 
 void wxWindowMac::DoFreeze()
 {
-#if wxOSX_USE_CARBON
     if ( GetPeer() && GetPeer()->IsOk() )
         GetPeer()->SetDrawingEnabled( false ) ;
-#endif
 }
 
 void wxWindowMac::DoThaw()
 {
-#if wxOSX_USE_CARBON
     if ( GetPeer() && GetPeer()->IsOk() )
-    {
         GetPeer()->SetDrawingEnabled( true ) ;
-        GetPeer()->InvalidateWithChildren() ;
-    }
-#endif
 }
 
 wxWindow *wxGetActiveWindow()
@@ -1560,7 +1535,7 @@ void  wxWindowMac::MacPaintGrowBox()
         CGRect cgrect = CGRectMake( rect.right - size , rect.bottom - size , size , size ) ;
         CGContextSaveGState( cgContext );
 
-        if ( m_backgroundColour.Ok() )
+        if ( m_backgroundColour.IsOk() )
         {
             CGContextSetFillColorWithColor( cgContext, m_backgroundColour.GetCGColor() );
         }
@@ -1573,7 +1548,7 @@ void  wxWindowMac::MacPaintGrowBox()
 #else
         if (m_growBox)
         {
-             if ( m_backgroundColour.Ok() )
+             if ( m_backgroundColour.IsOk() )
                  m_growBox->SetBackgroundColour(m_backgroundColour);
              else
                  m_growBox->SetBackgroundColour(*wxWHITE);
@@ -1597,15 +1572,11 @@ void wxWindowMac::MacPaintBorders( int WXUNUSED(leftOrigin) , int WXUNUSED(right
     GetPeer()->GetSize( tw, th );
     GetPeer()->GetPosition( tx, ty );
 
-    Rect rect  = { ty,tx, ty+th, tx+tw };
-
 #if wxOSX_USE_COCOA_OR_CARBON
 
-    InsetRect( &rect, -1 , -1 ) ;
-
     {
-        CGRect cgrect = CGRectMake( rect.left , rect.top , rect.right - rect.left ,
-            rect.bottom - rect.top ) ;
+        CGRect cgrect = CGRectMake( tx-1 , ty-1 , tw+2 ,
+            th+2 ) ;
 
         CGContextRef cgContext = (CGContextRef) GetParent()->MacGetCGContextRef() ;
         wxASSERT( cgContext ) ;
@@ -1683,6 +1654,7 @@ void wxWindowMac::DoUpdateScrollbarVisibility()
     MacRepositionScrollBars() ;
     if ( triggerSizeEvent )
     {
+        MacOnInternalSize();
         wxSizeEvent event(GetSize(), m_windowId);
         event.SetEventObject(this);
         HandleWindowEvent(event);
@@ -1831,18 +1803,18 @@ bool wxWindowMac::MacSetupCursor( const wxPoint& pt )
             // if the user code caught EVT_SET_CURSOR() and returned nothing from
             // it - this is a way to say that our cursor shouldn't be used for this
             // point
-            if ( !processedEvtSetCursor && m_cursor.Ok() )
+            if ( !processedEvtSetCursor && m_cursor.IsOk() )
                 cursor = m_cursor ;
 
             if ( !wxIsBusy() && !GetParent() )
                 cursor = *wxSTANDARD_CURSOR ;
         }
 
-        if ( cursor.Ok() )
+        if ( cursor.IsOk() )
             cursor.MacInstall() ;
     }
 
-    return cursor.Ok() ;
+    return cursor.IsOk() ;
 }
 
 wxString wxWindowMac::MacGetToolTipString( wxPoint &WXUNUSED(pt) )
@@ -2102,6 +2074,11 @@ bool wxWindowMac::MacDoRedraw( long time )
     }
 
     m_updateRegion = formerUpdateRgn;
+
+    wxNonOwnedWindow* top = MacGetTopLevelWindow();
+    if (top)
+        top->WindowWasPainted() ;
+    
     return handled;
 }
 
@@ -2520,7 +2497,7 @@ Rect wxMacGetBoundsForControl( wxWindowMac* window , const wxPoint& pos , const
     int x, y, w, h ;
 
     window->MacGetBoundsForControl( pos , size , x , y, w, h , adjustForOrigin ) ;
-    Rect bounds = { y, x, y + h, x + w };
+    Rect bounds = { static_cast<short>(y), static_cast<short>(x), static_cast<short>(y + h), static_cast<short>(x + w) };
 
     return bounds ;
 }
@@ -2603,33 +2580,34 @@ bool wxWindowMac::IsShownOnScreen() const
 
 #if wxUSE_HOTKEY && wxOSX_USE_COCOA_OR_CARBON
 
-OSStatus wxHotKeyHandler(EventHandlerCallRef nextHandler,EventRef event, void *userData)
+OSStatus
+wxHotKeyHandler(EventHandlerCallRef WXUNUSED(nextHandler),
+                EventRef event,
+                void* WXUNUSED(userData))
 {
     EventHotKeyID hotKeyId;
 
     GetEventParameter( event, kEventParamDirectObject, typeEventHotKeyID, NULL, sizeof(hotKeyId), NULL, &hotKeyId);
 
-    for ( int i = 0; i < s_hotkeys.size(); ++i )
+    for ( unsigned i = 0; i < s_hotkeys.size(); ++i )
     {
-        if ( s_hotkeys[i].keyId == hotKeyId.id )
+        if ( s_hotkeys[i].keyId == static_cast<int>(hotKeyId.id) )
         {
             unsigned char charCode ;
             UInt32 keyCode ;
             UInt32 modifiers ;
-            Point where ;
             UInt32 when = EventTimeToTicks( GetEventTime( event ) ) ;
 
             GetEventParameter( event, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof(char), NULL, &charCode );
             GetEventParameter( event, kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &keyCode );
             GetEventParameter( event, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modifiers );
-            GetEventParameter( event, kEventParamMouseLocation, typeQDPoint, NULL, sizeof(Point), NULL, &where );
             
             UInt32 keymessage = (keyCode << 8) + charCode;
             
             wxKeyEvent wxevent(wxEVT_HOTKEY);
             wxevent.SetId(hotKeyId.id);
             wxTheApp->MacCreateKeyEvent( wxevent, s_hotkeys[i].window , keymessage , 
-                                        modifiers , when , where.h , where.v , 0 ) ;
+                                        modifiers , when , 0 ) ;
             
             s_hotkeys[i].window->HandleWindowEvent(wxevent);
         }
@@ -2640,7 +2618,7 @@ OSStatus wxHotKeyHandler(EventHandlerCallRef nextHandler,EventRef event, void *u
 
 bool wxWindowMac::RegisterHotKey(int hotkeyId, int modifiers, int keycode)
 {
-    for ( int i = 0; i < s_hotkeys.size(); ++i )
+    for ( unsigned i = 0; i < s_hotkeys.size(); ++i )
     {
         if ( s_hotkeys[i].keyId == hotkeyId )
         {
@@ -2666,9 +2644,9 @@ bool wxWindowMac::RegisterHotKey(int hotkeyId, int modifiers, int keycode)
         mac_modifiers |= optionKey;
     if ( modifiers & wxMOD_SHIFT )
         mac_modifiers |= shiftKey;
-    if ( modifiers & wxMOD_CONTROL )
+    if ( modifiers & wxMOD_RAW_CONTROL )
         mac_modifiers |= controlKey;
-    if ( modifiers & wxMOD_META )
+    if ( modifiers & wxMOD_CONTROL )
         mac_modifiers |= cmdKey;
     
     EventHotKeyRef hotKeyRef;
@@ -2699,7 +2677,7 @@ bool wxWindowMac::RegisterHotKey(int hotkeyId, int modifiers, int keycode)
 
 bool wxWindowMac::UnregisterHotKey(int hotkeyId)
 {
-    for ( int i = s_hotkeys.size()-1; i>=0; -- i )
+    for ( int i = ((int)s_hotkeys.size())-1; i>=0; -- i )
     {
         if ( s_hotkeys[i].keyId == hotkeyId )
         {
@@ -2872,3 +2850,7 @@ bool wxWidgetImpl::NeedsFrame() const
 {
     return m_needsFrame;
 }
+
+void wxWidgetImpl::SetDrawingEnabled(bool WXUNUSED(enabled))
+{
+}
\ No newline at end of file