X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b95edd4708105589d03267b5932f3a42e89b0d06..fb35f0c79ca42d888391f0394dec56d04cf71890:/src/msw/dc.cpp diff --git a/src/msw/dc.cpp b/src/msw/dc.cpp index 0a75fced54..293626093c 100644 --- a/src/msw/dc.cpp +++ b/src/msw/dc.cpp @@ -468,16 +468,17 @@ void wxDC::Clear() ::SetWindowOrgEx(GetHdc(), (int)m_logicalOriginX, (int)m_logicalOriginY, NULL); } -void wxDC::DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, int style) +bool wxDC::DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, int style) { #ifdef __WXMICROWIN__ - if (!GetHDC()) return; + if (!GetHDC()) return FALSE; #endif - if ( !::ExtFloodFill(GetHdc(), XLOG2DEV(x), YLOG2DEV(y), + bool success = (0 != ::ExtFloodFill(GetHdc(), XLOG2DEV(x), YLOG2DEV(y), col.GetPixel(), style == wxFLOOD_SURFACE ? FLOODFILLSURFACE - : FLOODFILLBORDER) ) + : FLOODFILLBORDER) ) ; + if (!success) { // quoting from the MSDN docs: // @@ -495,6 +496,8 @@ void wxDC::DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, int style) } CalcBoundingBox(x, y); + + return success; } bool wxDC::DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const @@ -1923,8 +1926,30 @@ void wxDC::DoGetSizeMM(int *w, int *h) const if (!GetHDC()) return; #endif - if ( w ) *w = ::GetDeviceCaps(GetHdc(), HORZSIZE); - if ( h ) *h = ::GetDeviceCaps(GetHdc(), VERTSIZE); + // if we implement it in terms of DoGetSize() instead of directly using the + // results returned by GetDeviceCaps(HORZ/VERTSIZE) as was done before, it + // will also work for wxWindowDC and wxClientDC even though their size is + // not the same as the total size of the screen + int wPixels, hPixels; + DoGetSize(&wPixels, &hPixels); + + if ( w ) + { + int wTotal = ::GetDeviceCaps(GetHdc(), HORZRES); + + wxCHECK_RET( wTotal, _T("0 width device?") ); + + *w = (wPixels * ::GetDeviceCaps(GetHdc(), HORZSIZE)) / wTotal; + } + + if ( h ) + { + int hTotal = ::GetDeviceCaps(GetHdc(), VERTRES); + + wxCHECK_RET( hTotal, _T("0 height device?") ); + + *h = (hPixels * ::GetDeviceCaps(GetHdc(), VERTSIZE)) / hTotal; + } } wxSize wxDC::GetPPI() const