From dc34ce10d22d346f66a3690715be4238faff727e Mon Sep 17 00:00:00 2001 From: Romain Goyet Date: Wed, 15 Jun 2016 13:28:55 +0200 Subject: [PATCH] Escher: Fix absoluteDrawingArea It needed to compute the absoluteOrigin independently Change-Id: I5aadf4f03da1af965285fc5ae675ddcfbcd34ed0 --- escher/include/escher/view.h | 1 + escher/src/view.cpp | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/escher/include/escher/view.h b/escher/include/escher/view.h index 576b2711a..3efeb4970 100644 --- a/escher/include/escher/view.h +++ b/escher/include/escher/view.h @@ -58,6 +58,7 @@ protected: KDRect m_frame; private: void redraw(KDRect rect); + KDPoint absoluteOrigin() const; KDRect absoluteDrawingArea() const; bool m_needsRedraw; diff --git a/escher/src/view.cpp b/escher/src/view.cpp index dac345005..fa002dcb2 100644 --- a/escher/src/view.cpp +++ b/escher/src/view.cpp @@ -133,15 +133,24 @@ KDRect View::bounds() const { return bounds; } +KDPoint View::absoluteOrigin() const { + if (m_superview == nullptr) { + assert(this == (View *)window()); + return m_frame.origin; + } else { + return KDPointTranslate(m_frame.origin, m_superview->absoluteOrigin()); + } +} + KDRect View::absoluteDrawingArea() const { if (m_superview == nullptr) { + assert(this == (View *)window()); return m_frame; } else { KDRect parentDrawingArea = m_superview->absoluteDrawingArea(); KDRect absoluteFrame = m_frame; - absoluteFrame.x += parentDrawingArea.x; - absoluteFrame.y += parentDrawingArea.y; + absoluteFrame.origin = absoluteOrigin(); return KDRectIntersection(absoluteFrame, parentDrawingArea); }