Fix SetDeviceClippingRegion for wxSVGFileDC

Device-based coordinates should be converted to logical coordinates
before they are passed to SetClippingRegion().
This commit is contained in:
Artur Wieczorek
2021-07-26 20:33:40 +02:00
parent b1206a6d50
commit 74833ac435
2 changed files with 9 additions and 5 deletions

View File

@@ -239,11 +239,7 @@ private:
wxCoord* externalLeading = NULL,
const wxFont* theFont = NULL) const wxOVERRIDE;
virtual void DoSetDeviceClippingRegion(const wxRegion& region) wxOVERRIDE
{
DoSetClippingRegion(region.GetBox().x, region.GetBox().y,
region.GetBox().width, region.GetBox().height);
}
virtual void DoSetDeviceClippingRegion(const wxRegion& region) wxOVERRIDE;
virtual void DoSetClippingRegion(wxCoord x, wxCoord y,
wxCoord w, wxCoord h) wxOVERRIDE;

View File

@@ -1159,6 +1159,14 @@ void wxSVGFileDCImpl::DoGradientFillConcentric(const wxRect& rect,
CalcBoundingBox(rect.x + rect.width, rect.y + rect.height);
}
void wxSVGFileDCImpl::DoSetDeviceClippingRegion(const wxRegion& region)
{
wxRect clipBox = region.GetBox();
wxPoint logPos = DeviceToLogical(clipBox.x, clipBox.y);
wxSize logDim = DeviceToLogicalRel(clipBox.width, clipBox.height);
DoSetClippingRegion(logPos.x, logPos.y, logDim.x, logDim.y);
}
void wxSVGFileDCImpl::DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
{
// We need to have box definition in the standard form with (x,y)