X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/399754a6836ef144bd354982b25fab43f548414e..3087eaea04bb4f8fe6aef1c649fe86fa1691894a:/src/dfb/dcclient.cpp diff --git a/src/dfb/dcclient.cpp b/src/dfb/dcclient.cpp index 5436d3e20d..c4bd27fc69 100644 --- a/src/dfb/dcclient.cpp +++ b/src/dfb/dcclient.cpp @@ -27,6 +27,7 @@ #ifndef WX_PRECOMP #include "wx/window.h" + #include "wx/nonownedwnd.h" #endif #include "wx/dfb/private.h" @@ -58,6 +59,11 @@ static wxRect GetUncoveredWindowArea(wxWindow *win) // coordinates; this will remove parts of 'r' that are outside of the // parent's area: wxRect rp(GetUncoveredWindowArea(parent)); + + // normal windows cannot extend out of its parent's client area: + if ( !win->CanBeOutsideClientArea() ) + rp.Intersect(parent->GetClientRect()); + rp.Offset(-win->GetPosition()); rp.Offset(-parent->GetClientAreaOrigin()); r.Intersect(rp); @@ -96,6 +102,8 @@ void wxWindowDC::InitForWin(wxWindow *win, const wxRect *rect) { wxCHECK_RET( win, _T("invalid window") ); + m_win = win; + // obtain the surface used for painting: wxPoint origin; wxIDirectFBSurfacePtr surface; @@ -154,6 +162,7 @@ void wxWindowDC::InitForWin(wxWindow *win, const wxRect *rect) } else { + m_winRect = r; DFBRectangle dfbrect = { r.x, r.y, r.width, r.height }; surface = win->GetDfbSurface()->GetSubSurface(&dfbrect); @@ -176,7 +185,7 @@ void wxWindowDC::InitForWin(wxWindow *win, const wxRect *rect) r.x, r.y, r.GetRight(), r.GetBottom(), origin.x, origin.y); - Init(surface); + DFBInit(surface); SetFont(win->GetFont()); // offset coordinates to account for subsurface's origin coordinates: @@ -195,6 +204,10 @@ wxWindowDC::~wxWindowDC() if ( m_shouldFlip ) { + // paint overlays on top of the surface being drawn to by this DC + // before showing anything on the screen: + m_win->PaintOverlays(m_winRect); + DFBSurfaceCapabilities caps = DSCAPS_NONE; surface->GetCapabilities(&caps); if ( caps & DSCAPS_DOUBLE )