diff --git a/extras/the jucer/src/ui/jucer_EditingPanelBase.cpp b/extras/the jucer/src/ui/jucer_EditingPanelBase.cpp index ddbc608dc5..3cdf62f668 100644 --- a/extras/the jucer/src/ui/jucer_EditingPanelBase.cpp +++ b/extras/the jucer/src/ui/jucer_EditingPanelBase.cpp @@ -27,6 +27,37 @@ #include "jucer_EditingPanelBase.h" #include "jucer_JucerDocumentHolder.h" +//============================================================================== +class EditingPanelBase::MagnifierComponent : public Component +{ +public: + MagnifierComponent (Component* content_) + : scaleFactor (1.0), content (content_) + { + addAndMakeVisible (content); + childBoundsChanged (content); + } + + void childBoundsChanged (Component* child) + { + const Rectangle childArea (getLocalArea (child, child->getLocalBounds())); + setSize (childArea.getWidth(), childArea.getHeight()); + } + + double getScaleFactor() const { return scaleFactor; } + + void setScaleFactor (double newScale) + { + scaleFactor = newScale; + content->setTransform (AffineTransform::scale ((float) scaleFactor, + (float) scaleFactor)); + } + +private: + double scaleFactor; + ScopedPointer content; +}; + //============================================================================== class ZoomingViewport : public Viewport { @@ -137,7 +168,7 @@ EditingPanelBase::EditingPanelBase (JucerDocument& document_, addAndMakeVisible (viewport = new ZoomingViewport (this)); addAndMakeVisible (propsPanel); - viewport->setViewedComponent (magnifier = new MagnifierComponent (editor, true)); + viewport->setViewedComponent (magnifier = new MagnifierComponent (editor)); } EditingPanelBase::~EditingPanelBase() @@ -175,7 +206,7 @@ void EditingPanelBase::visibilityChanged() JucerDocumentHolder* const cdh = dynamic_cast (getParentComponent()->getParentComponent()); if (cdh != 0) - cdh->setViewportToLastPos (viewport); + cdh->setViewportToLastPos (viewport, *this); resized(); } @@ -187,7 +218,7 @@ void EditingPanelBase::visibilityChanged() JucerDocumentHolder* const cdh = dynamic_cast (getParentComponent()->getParentComponent()); if (cdh != 0) - cdh->storeLastViewportPos (viewport); + cdh->storeLastViewportPos (viewport, *this); } } @@ -208,12 +239,12 @@ void EditingPanelBase::setZoom (double newScale) void EditingPanelBase::setZoom (double newScale, int anchorX, int anchorY) { - Point anchor (viewport->relativePositionToOtherComponent (editor, Point (anchorX, anchorY))); + Point anchor (editor->getLocalPoint (viewport, Point (anchorX, anchorY))); magnifier->setScaleFactor (newScale); resized(); - anchor = editor->relativePositionToOtherComponent (viewport, anchor); + anchor = viewport->getLocalPoint (editor, anchor); viewport->setViewPosition (jlimit (0, jmax (0, viewport->getViewedComponent()->getWidth() - viewport->getViewWidth()), viewport->getViewPositionX() + anchor.getX() - anchorX), @@ -223,7 +254,7 @@ void EditingPanelBase::setZoom (double newScale, int anchorX, int anchorY) void EditingPanelBase::xyToTargetXY (int& x, int& y) const { - Point pos (relativePositionToOtherComponent (editor, Point (x, y))); + Point pos (editor->getLocalPoint (this, Point (x, y))); x = pos.getX(); y = pos.getY(); } diff --git a/extras/the jucer/src/ui/jucer_EditingPanelBase.h b/extras/the jucer/src/ui/jucer_EditingPanelBase.h index bab0c105bc..a3349c7865 100644 --- a/extras/the jucer/src/ui/jucer_EditingPanelBase.h +++ b/extras/the jucer/src/ui/jucer_EditingPanelBase.h @@ -64,6 +64,8 @@ public: void dragKeyHeldDown (bool isKeyDown); + class MagnifierComponent; + //============================================================================== juce_UseDebuggingNewOperator diff --git a/extras/the jucer/src/ui/jucer_JucerDocumentHolder.cpp b/extras/the jucer/src/ui/jucer_JucerDocumentHolder.cpp index 14a87259af..5e6d84e0ee 100644 --- a/extras/the jucer/src/ui/jucer_JucerDocumentHolder.cpp +++ b/extras/the jucer/src/ui/jucer_JucerDocumentHolder.cpp @@ -576,21 +576,18 @@ void JucerDocumentHolder::showGraphics (PaintRoutine* routine) } //============================================================================== -void JucerDocumentHolder::setViewportToLastPos (Viewport* vp) +void JucerDocumentHolder::setViewportToLastPos (Viewport* vp, EditingPanelBase& editor) { vp->setViewPosition (lastViewportX, lastViewportY); - - MagnifierComponent* magnifier = dynamic_cast (vp->getViewedComponent()); - magnifier->setScaleFactor (currentZoomLevel); + editor.setZoom (currentZoomLevel); } -void JucerDocumentHolder::storeLastViewportPos (Viewport* vp) +void JucerDocumentHolder::storeLastViewportPos (Viewport* vp, EditingPanelBase& editor) { lastViewportX = vp->getViewPositionX(); lastViewportY = vp->getViewPositionY(); - MagnifierComponent* magnifier = dynamic_cast (vp->getViewedComponent()); - currentZoomLevel = magnifier->getScaleFactor(); + currentZoomLevel = editor.getZoom(); } void JucerDocumentHolder::setZoom (double scale) diff --git a/extras/the jucer/src/ui/jucer_JucerDocumentHolder.h b/extras/the jucer/src/ui/jucer_JucerDocumentHolder.h index d59759eb12..1a760f4945 100644 --- a/extras/the jucer/src/ui/jucer_JucerDocumentHolder.h +++ b/extras/the jucer/src/ui/jucer_JucerDocumentHolder.h @@ -54,8 +54,8 @@ public: void showLayout(); void showGraphics (PaintRoutine* routine); - void setViewportToLastPos (Viewport* vp); - void storeLastViewportPos (Viewport* vp); + void setViewportToLastPos (Viewport* vp, EditingPanelBase& editor); + void storeLastViewportPos (Viewport* vp, EditingPanelBase& editor); const Image createComponentLayerSnapshot() const;