diff --git a/src/servers/app/Layer.cpp b/src/servers/app/Layer.cpp index 167d19933b..f4f3da0079 100644 --- a/src/servers/app/Layer.cpp +++ b/src/servers/app/Layer.cpp @@ -1019,8 +1019,31 @@ Layer::ResizeBy(float x, float y) BPoint Layer::BoundsOrigin() const { - // TODO: add origin from previous states - return fLayerData->Origin(); + BPoint origin(0,0); + float scale = Scale(); + + LayerData *ld = fLayerData; + do { + origin += ld->Origin(); + } while ((ld = ld->prevState)); + + origin.x *= scale; + origin.y *= scale; + + return origin; +} + +float +Layer::Scale() const +{ + float scale = 1.0f; + + LayerData *ld = fLayerData; + do { + scale += ld->Scale(); + } while ((ld = ld->prevState)); + + return scale; } //! Converts the passed point to parent coordinates diff --git a/src/servers/app/Layer.h b/src/servers/app/Layer.h index 13d49286ad..e3e1a28bb1 100644 --- a/src/servers/app/Layer.h +++ b/src/servers/app/Layer.h @@ -131,6 +131,7 @@ class Layer { virtual void ResizeBy(float x, float y); BPoint BoundsOrigin() const; // BoundsFrameDiff()? + float Scale() const; BPoint ConvertToParent(BPoint pt); BRect ConvertToParent(BRect rect);