::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:
//
}
CalcBoundingBox(x, y);
+
+ return success;
}
bool wxDC::DoGetPixel(wxCoord x, wxCoord y, wxColour *col) 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