X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2f1ae4143271ae63a17e052a1a471d16e9cd8c44..22e0ea84c89c61cceb3deb2b62145afa047a0dff:/src/mac/window.cpp diff --git a/src/mac/window.cpp b/src/mac/window.cpp index 3dd198b369..6c4f516f71 100644 --- a/src/mac/window.cpp +++ b/src/mac/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 ; @@ -1246,6 +1246,20 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect) InvalWindowRgn( GetMacRootWindow() , updateRgn ) ; DisposeRgn( updateRgn ) ; } + + for (wxNode *node = GetChildren().First(); node; node = node->Next()) + { + wxWindow *child = (wxWindow*)node->Data(); + if (child == m_vScrollBar) continue; + if (child == m_hScrollBar) continue; + if (child->IsTopLevel()) continue; + int x,y; + child->GetPosition( &x, &y ); + int w,h; + child->GetSize( &w, &h ); + child->SetSize( x+dx, y+dy, w, h ); + } + } void wxWindow::MacOnScroll(wxScrollEvent &event ) @@ -1257,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); @@ -1413,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 ) ; } @@ -1439,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; @@ -1458,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 ; } @@ -1741,6 +1749,7 @@ void wxWindow::MacRedraw( RgnHandle updatergn , long time) RgnHandle newupdate = NewRgn() ; wxSize point = GetClientSize() ; wxPoint origin = GetClientAreaOrigin() ; + SetRectRgn( newupdate , origin.x , origin.y , origin.x + point.x , origin.y+point.y ) ; SectRgn( newupdate , m_macUpdateRgn , newupdate ) ; OffsetRgn( newupdate , -origin.x , -origin.y ) ; @@ -1754,13 +1763,10 @@ void wxWindow::MacRedraw( RgnHandle updatergn , long time) event.SetEventObject(this); GetEventHandler()->ProcessEvent(event); } - { - } - RgnHandle childupdate = NewRgn() ; - + for (wxNode *node = GetChildren().First(); node; node = node->Next()) { wxWindow *child = (wxWindow*)node->Data(); @@ -1905,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) ; @@ -2181,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 ; @@ -2201,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 ) ; @@ -2344,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); +} +