X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d467e0c72da3a270592719f1e819db3c4984c0ca..22e0ea84c89c61cceb3deb2b62145afa047a0dff:/src/mac/carbon/window.cpp

diff --git a/src/mac/carbon/window.cpp b/src/mac/carbon/window.cpp
index 8c14292b7d..6c4f516f71 100644
--- a/src/mac/carbon/window.cpp
+++ b/src/mac/carbon/window.cpp
@@ -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,7 @@ 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 ;
@@ -2213,6 +2207,66 @@ long wxWindow::MacGetBorderSize( ) const
 	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 ;
+
+    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::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 ) ;
@@ -2356,3 +2410,21 @@ wxMacDrawingClientHelper::~wxMacDrawingClientHelper()
 	if ( m_formerPort != m_currentPort )
 		SetPort( m_formerPort ) ;
 }
+
+// Find the wxWindow at the current mouse position, returning the mouse
+// position.
+wxWindow* wxFindWindowAtPointer(wxPoint& pt)
+{
+    pt = wxGetMousePosition();
+    wxWindow* found = wxFindWindowAtPoint(pt);
+    return found;
+}
+
+// Get the current mouse position.
+wxPoint wxGetMousePosition()
+{
+    int x, y;
+    wxGetMousePosition(& x, & y);
+    return wxPoint(x, y);
+}
+