From e88f248e3a2352155c0c81ea7462e2d97ffc28d8 Mon Sep 17 00:00:00 2001 From: Artur Wieczorek Date: Sun, 13 Sep 2020 23:54:16 +0200 Subject: [PATCH] Fix calculating bounding box We should use platform-specific functions to convert coordinates to take into account all transformations applied to wxDC (also with transform matrix). Closes #18916. --- include/wx/dc.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/include/wx/dc.h b/include/wx/dc.h index 492d4e5405..84a1bc0832 100644 --- a/include/wx/dc.h +++ b/include/wx/dc.h @@ -332,8 +332,9 @@ public: virtual void CalcBoundingBox(wxCoord x, wxCoord y) { // Bounding box is internally stored in device units. - x = LogicalToDeviceX(x); - y = LogicalToDeviceY(y); + wxPoint ptDev = LogicalToDevice(x, y); + x = ptDev.x; + y = ptDev.y; if ( m_isBBoxValid ) { if ( x < m_minX ) m_minX = x; @@ -359,10 +360,10 @@ public: } // Get bounding box in logical units. - wxCoord MinX() const { return m_isBBoxValid ? DeviceToLogicalX(m_minX) : 0; } - wxCoord MaxX() const { return m_isBBoxValid ? DeviceToLogicalX(m_maxX) : 0; } - wxCoord MinY() const { return m_isBBoxValid ? DeviceToLogicalY(m_minY) : 0; } - wxCoord MaxY() const { return m_isBBoxValid ? DeviceToLogicalY(m_maxY) : 0; } + wxCoord MinX() const { return m_isBBoxValid ? DeviceToLogical(m_minX, m_minY).x : 0; } + wxCoord MaxX() const { return m_isBBoxValid ? DeviceToLogical(m_maxX, m_maxY).x : 0; } + wxCoord MinY() const { return m_isBBoxValid ? DeviceToLogical(m_minX, m_minY).y : 0; } + wxCoord MaxY() const { return m_isBBoxValid ? DeviceToLogical(m_maxX, m_maxY).y : 0; } // setters and getters