From 95f1b262a4da7b5b246ca8d64c36972f5d109c3a Mon Sep 17 00:00:00 2001 From: Artur Wieczorek Date: Mon, 26 Jul 2021 23:19:23 +0200 Subject: [PATCH] Store clipping box coordinates in device units in wxWindowDCImpl, wxGTKDCImpl Because retrieving clipping box coordinates in DoGetClippingRect() is delegated to wxDCImpl::DoGetClippingRect() we need to store coordinates in device units because such units are used internally in wxDCImpl (2bcc9382a7 ("Store clipping box coordinates in device units for generic wxDC", 2021-07-26). Stored device units are converted to the current logical units in wxDCImpl::DoGetClippingRect(). --- src/gtk/dc.cpp | 5 ++--- src/gtk/dcclient.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/gtk/dc.cpp b/src/gtk/dc.cpp index 917a98acaa..0c4349834c 100644 --- a/src/gtk/dc.cpp +++ b/src/gtk/dc.cpp @@ -619,7 +619,7 @@ void wxGTKDCImpl::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord width, wxCo wxASSERT_MSG( width >= 0 && height >= 0, "Clipping box size values cannot be negative" ); - wxRect newRegion(x, y, width, height); + wxRect newRegion(LogicalToDevice(x, y), LogicalToDeviceRel(width, height)); wxRect clipRegion; if ( m_clipping ) @@ -635,8 +635,7 @@ void wxGTKDCImpl::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord width, wxCo // 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(0, 0, dcWidth, dcHeight); clipRegion = dcRect.Intersect(newRegion); m_clipping = true; diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index fed357b468..7592de0d06 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -1919,10 +1919,10 @@ void wxWindowDCImpl::UpdateClipBox() } else { - m_clipX1 = DeviceToLogicalX(r.GetLeft()); - m_clipY1 = DeviceToLogicalY(r.GetTop()); - m_clipX2 = m_clipX1 + DeviceToLogicalXRel(r.GetWidth()); - m_clipY2 = m_clipY1 + DeviceToLogicalYRel(r.GetHeight()); + m_clipX1 = r.GetLeft(); + m_clipY1 = r.GetTop(); + m_clipX2 = r.GetRight() + 1; + m_clipY2 = r.GetBottom() + 1; } m_isClipBoxValid = true; }