]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/window.cpp
Added wxYieldIfNeeded
[wxWidgets.git] / src / mac / window.cpp
index fe831d3d08291e2fe51395551dd4546f34fc9db4..6c4f516f71d7b30ec7b8d950081303a60137f4f3 100644 (file)
@@ -23,6 +23,8 @@
 #include "wx/layout.h"
 #include "wx/dialog.h"
 #include "wx/listbox.h"
+#include "wx/scrolbar.h"
+#include "wx/statbox.h"
 #include "wx/button.h"
 #include "wx/settings.h"
 #include "wx/msgdlg.h"
@@ -31,7 +33,7 @@
 #include "wx/tabctrl.h"
 #include "wx/tooltip.h"
 // TODO remove the line below, just for lookup-up convenience CS
-#include "wx/mac/window.h"
+#include "wx/window.h"
 
 #include "wx/menuitem.h"
 #include "wx/log.h"
@@ -437,8 +439,8 @@ void wxWindow::DoGetClientSize(int *x, int *y) const
     *x = m_width ;
     *y = m_height ;
 
-       *x -= 2 * MacGetBorderSize(  ) ;
-       *y -= 2 * MacGetBorderSize(  ) ;
+       *x -= MacGetLeftBorderSize(  )  + MacGetRightBorderSize(  ) ;
+       *y -= MacGetTopBorderSize(  ) + MacGetBottomBorderSize( );
        
   if ( (m_vScrollBar && m_vScrollBar->IsShown()) || (m_hScrollBar  && m_hScrollBar->IsShown()) )
   {
@@ -627,7 +629,7 @@ void wxWindow::DoSetSize(int x, int y, int width, int height, int sizeFlags)
 
 wxPoint wxWindow::GetClientAreaOrigin() const
 {
-    return wxPoint(MacGetBorderSize(  ) , MacGetBorderSize(  ) );
+    return wxPoint(MacGetLeftBorderSize(  ) , MacGetTopBorderSize(  ) );
 }
 
 // Makes an adjustment to the window position (for example, a frame that has
@@ -725,7 +727,7 @@ void wxWindow::GetTextExtent(const wxString& string, int *x, int *y,
     if ( !fontToUse )
         fontToUse = &m_font;
         
-    wxClientDC dc( this ) ;
+    wxClientDC dc( (wxWindow*) this ) ;
     long lx,ly,ld,le ;
     dc.GetTextExtent( string , &lx , &ly , &ld, &le, fontToUse ) ;
     if ( externalLeading )
@@ -999,8 +1001,8 @@ void  wxWindow::MacCreateRealWindow( const wxString& title,
 
        // translate the window attributes in the appropriate window class and attributes
 
-       WindowClass wclass  ;
-       WindowAttributes attr  ;
+       WindowClass wclass = 0;
+       WindowAttributes attr = kWindowNoAttributes ;
        
        if ( HasFlag(wxTINY_CAPTION_HORIZ) ||  HasFlag(wxTINY_CAPTION_VERT) )
        {
@@ -1037,8 +1039,6 @@ void  wxWindow::MacCreateRealWindow( const wxString& title,
                wclass = kModalWindowClass ;
        }
        
-       attr = kWindowNoAttributes ;
-       
        if ( HasFlag( wxMINIMIZE_BOX ) || HasFlag( wxMAXIMIZE_BOX ) )
        {
                attr |= kWindowFullZoomAttribute ;
@@ -1271,36 +1271,26 @@ void wxWindow::MacOnScroll(wxScrollEvent &event )
            wevent.SetOrientation(event.GetOrientation());
            wevent.m_eventObject = this;
        
-           switch ( event.m_eventType )
-           {
-           case wxEVT_SCROLL_TOP:
+       if (event.m_eventType == wxEVT_SCROLL_TOP) {
                wevent.m_eventType = wxEVT_SCROLLWIN_TOP;
-               break;
-       
-           case wxEVT_SCROLL_BOTTOM:
+           } else
+       if (event.m_eventType == wxEVT_SCROLL_BOTTOM) {
                wevent.m_eventType = wxEVT_SCROLLWIN_BOTTOM;
-               break;
-       
-           case wxEVT_SCROLL_LINEUP:
+           } else
+       if (event.m_eventType == wxEVT_SCROLL_LINEUP) {
                wevent.m_eventType = wxEVT_SCROLLWIN_LINEUP;
-               break;
-       
-           case wxEVT_SCROLL_LINEDOWN:
+           } else
+       if (event.m_eventType == wxEVT_SCROLL_LINEDOWN) {
                wevent.m_eventType = wxEVT_SCROLLWIN_LINEDOWN;
-               break;
-       
-           case wxEVT_SCROLL_PAGEUP:
+           } else
+       if (event.m_eventType == wxEVT_SCROLL_PAGEUP) {
                wevent.m_eventType = wxEVT_SCROLLWIN_PAGEUP;
-               break;
-       
-           case wxEVT_SCROLL_PAGEDOWN:
+           } else
+       if (event.m_eventType == wxEVT_SCROLL_PAGEDOWN) {
                wevent.m_eventType = wxEVT_SCROLLWIN_PAGEDOWN;
-               break;
-       
-           case wxEVT_SCROLL_THUMBTRACK:
+           } else
+       if (event.m_eventType == wxEVT_SCROLL_THUMBTRACK) {
                wevent.m_eventType = wxEVT_SCROLLWIN_THUMBTRACK;
-               break;
-       
            }
                
            GetEventHandler()->ProcessEvent(wevent);
@@ -1427,8 +1417,8 @@ void wxWindow::DoSetClientSize(int width, int height)
                if ( height != -1 && m_vScrollBar )
                        height += MAC_SCROLLBAR_SIZE ;
 
-               width += 2 * MacGetBorderSize(  ) ;
-               height += 2 * MacGetBorderSize(  ) ;
+               width += MacGetLeftBorderSize(  ) + MacGetRightBorderSize( ) ;
+               height += MacGetTopBorderSize(  ) + MacGetBottomBorderSize( ) ;
 
                DoSetSize( -1 , -1 , width , height ) ;
        }
@@ -1453,7 +1443,8 @@ bool wxWindow::MacGetWindowFromPointSub( const wxPoint &point , wxWindow** outWi
        for (wxNode *node = GetChildren().First(); node; node = node->Next())
        {
                wxWindow *child = (wxWindow*)node->Data();
-               if ( child->GetMacRootWindow() == window )
+               // added the m_isShown test --dmazzoni
+               if ( child->GetMacRootWindow() == window && child->m_isShown )
                {
                        if (child->MacGetWindowFromPointSub(newPoint , outWin ))
                                return TRUE;
@@ -1472,9 +1463,12 @@ bool wxWindow::MacGetWindowFromPoint( const wxPoint &screenpoint , wxWindow** ou
        {
                        wxPoint point( screenpoint ) ;
                        wxWindow* win = wxFindWinFromMacWindow( window ) ;
+                       if ( win )
+                       {
                        win->ScreenToClient( point ) ;
                        return win->MacGetWindowFromPointSub( point , outWin ) ;
        }
+       }
        return FALSE ;
 }
 
@@ -1917,8 +1911,8 @@ void wxWindow::MacRepositionScrollBars()
        int width = m_width ; 
        int height = m_height ;
 
-       width -= 2 * MacGetBorderSize() ;
-       height -= 2 * MacGetBorderSize() ;
+       width -= MacGetLeftBorderSize() + MacGetRightBorderSize();
+       height -= MacGetTopBorderSize() + MacGetBottomBorderSize();
        
        wxPoint vPoint(width-MAC_SCROLLBAR_SIZE, 0) ;
        wxSize vSize(MAC_SCROLLBAR_SIZE, height - adjust) ;
@@ -2193,7 +2187,47 @@ void wxWindow::MacGetPortClientParams(Point* localOrigin, Rect* clipRect, Window
        SectRect(clipRect, &myClip, clipRect);
 }
 
-long wxWindow::MacGetBorderSize( ) const
+long wxWindow::MacGetLeftBorderSize( ) const
+{
+       if( m_macWindowData )
+               return 0 ;
+
+    if (m_windowStyle & wxRAISED_BORDER || m_windowStyle & wxSUNKEN_BORDER )
+    {
+               return 2 ;
+    }
+    else if (  m_windowStyle &wxDOUBLE_BORDER)
+    {
+               return 2 ;
+    }
+    else if (m_windowStyle &wxSIMPLE_BORDER)
+    {
+       return 1 ;
+    }
+       return 0 ;
+}
+
+long wxWindow::MacGetRightBorderSize( ) const
+{
+       if( m_macWindowData )
+               return 0 ;
+
+    if (m_windowStyle & wxRAISED_BORDER || m_windowStyle & wxSUNKEN_BORDER )
+    {
+               return 3 ;
+    }
+    else if (  m_windowStyle &wxDOUBLE_BORDER)
+    {
+               return 3 ;
+    }
+    else if (m_windowStyle &wxSIMPLE_BORDER)
+    {
+       return 3 ;
+    }
+       return 0 ;
+}
+
+long wxWindow::MacGetTopBorderSize( ) const
 {
        if( m_macWindowData )
                return 0 ;
@@ -2213,6 +2247,26 @@ long wxWindow::MacGetBorderSize( ) const
        return 0 ;
 }
 
+long wxWindow::MacGetBottomBorderSize( ) const
+{
+       if( m_macWindowData )
+               return 0 ;
+
+    if (m_windowStyle & wxRAISED_BORDER || m_windowStyle & wxSUNKEN_BORDER )
+    {
+               return 3 ;
+    }
+    else if (  m_windowStyle &wxDOUBLE_BORDER)
+    {
+               return 3 ;
+    }
+    else if (m_windowStyle &wxSIMPLE_BORDER)
+    {
+       return 3 ;
+    }
+       return 0 ;
+}
+
 long wxWindow::MacRemoveBordersFromStyle( long style ) 
 {
        return style & ~( wxDOUBLE_BORDER | wxSUNKEN_BORDER | wxRAISED_BORDER | wxBORDER | wxSTATIC_BORDER ) ;
@@ -2369,7 +2423,8 @@ wxWindow* wxFindWindowAtPointer(wxPoint& pt)
 // Get the current mouse position.
 wxPoint wxGetMousePosition()
 {
-    wxFAIL_MSG(_("Not implemented"));
-    return wxPoint;
+    int x, y;
+    wxGetMousePosition(& x, & y);
+    return wxPoint(x, y);
 }