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); }