Fix determining DC area for wxDC with applied affine transformation
We need to take into account all aplied transformations (including affine transformation set with SetTransformMatrix()) while calculating entire DC area in logical coordinaates. For derived wxDC's that support affine transformations DeviceToLogical[Rel]() functions are overriden with platform-specific implementations taking into account all applied transformations (see documentation of wxDC::DeviceToLogical(), wxDC::DeviceToLogicalRel()) and they may be not equivalent to DeviceToLogical[Rel]{X|Y}().
This commit is contained in:
@@ -377,8 +377,7 @@ void wxDCImpl::DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord w, wxCoord h)
|
||||
// of required clipping box and DC surface.
|
||||
int dcWidth, dcHeight;
|
||||
DoGetSize(&dcWidth, &dcHeight);
|
||||
wxRect dcRect(DeviceToLogicalX(0), DeviceToLogicalY(0),
|
||||
DeviceToLogicalXRel(dcWidth), DeviceToLogicalYRel(dcHeight));
|
||||
wxRect dcRect(DeviceToLogical(0, 0), DeviceToLogicalRel(dcWidth, dcHeight));
|
||||
clipRegion.Intersect(dcRect);
|
||||
|
||||
m_clipping = true;
|
||||
@@ -400,10 +399,7 @@ void wxDCImpl::DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord w, wxCoord h)
|
||||
wxRect wxDCImpl::GetLogicalArea() const
|
||||
{
|
||||
const wxSize size = GetSize();
|
||||
return wxRect(DeviceToLogicalX(0),
|
||||
DeviceToLogicalY(0),
|
||||
DeviceToLogicalXRel(size.x),
|
||||
DeviceToLogicalYRel(size.y));
|
||||
return wxRect(DeviceToLogical(0, 0), DeviceToLogicalRel(size.x, size.y));
|
||||
}
|
||||
|
||||
bool wxDCImpl::DoGetClippingRect(wxRect& rect) const
|
||||
|
Reference in New Issue
Block a user