Implement platform-specific coordinate conversion functions
Generic wxDC::DeviceToLogical{X|Y}() and wxDC::LogicalToDevice{X|Y}() functions don't take into account transformations applied with wxDC::SetTransformMatrix() so conversion results are invalid if wxDC is transformed with both e.g. wxDC::SetUserScale() and wxDC::SetTransformMatrix(). We need to implement functions in wxDCImpl and its platform-specific derivates to do this conversion with taking into account all applied transformations. See #18916.
This commit is contained in:
@@ -121,6 +121,10 @@ public:
|
||||
virtual void ResetTransformMatrix() wxOVERRIDE;
|
||||
#endif // wxUSE_DC_TRANSFORM_MATRIX
|
||||
|
||||
// coordinates conversions and transforms
|
||||
virtual wxPoint DeviceToLogical(wxCoord x, wxCoord y) const wxOVERRIDE;
|
||||
virtual wxPoint LogicalToDevice(wxCoord x, wxCoord y) const wxOVERRIDE;
|
||||
|
||||
// the true implementations
|
||||
virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col,
|
||||
wxFloodFillStyle style = wxFLOOD_SURFACE) wxOVERRIDE;
|
||||
@@ -225,6 +229,7 @@ protected:
|
||||
bool m_logicalFunctionSupported;
|
||||
wxGraphicsMatrix m_matrixOriginal;
|
||||
wxGraphicsMatrix m_matrixCurrent;
|
||||
wxGraphicsMatrix m_matrixCurrentInv;
|
||||
#if wxUSE_DC_TRANSFORM_MATRIX
|
||||
wxAffineMatrix2D m_matrixExtTransform;
|
||||
#endif // wxUSE_DC_TRANSFORM_MATRIX
|
||||
|
Reference in New Issue
Block a user