X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/30c841c84dce46690499567141b98ffcf5a61b6a..75d9e502238df95fa53c0030b1fac0d4f43e4025:/src/dfb/dcclient.cpp diff --git a/src/dfb/dcclient.cpp b/src/dfb/dcclient.cpp index 149067554f..a10dd02b9e 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); @@ -74,6 +80,11 @@ wxIDirectFBSurfacePtr CreateDummySurface(wxWindow *win, const wxRect *rect) wxLogTrace(TRACE_PAINT, _T("%p ('%s'): creating dummy DC surface"), win, win->GetName().c_str()); wxSize size(rect ? rect->GetSize() : win->GetSize()); + + // we can't create a surface of 0 size but the size of the window may be 0, + // so ensure that we have at least a single pixel to draw on + size.IncTo(wxSize(1, 1)); + return win->GetDfbSurface()->CreateCompatible ( size, @@ -179,7 +190,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: