1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Drawable: Fix transformations by recalculating them on bounds change

This commit is contained in:
attila 2023-10-09 09:46:12 +02:00
parent 6c3ba087f2
commit 365d87ae11
2 changed files with 33 additions and 2 deletions

View file

@ -141,7 +141,6 @@ void Drawable::setBoundsToEnclose (Rectangle<float> area)
auto newBounds = smallestIntegerContainer + parentOrigin;
originRelativeToComponent = -smallestIntegerContainer.getPosition();
setBounds (newBounds);
updateTransform();
}
//==============================================================================

View file

@ -26,6 +26,33 @@
namespace juce
{
#ifndef DOXYGEN
namespace detail
{
class BoundsChangeListener final : private ComponentListener
{
public:
BoundsChangeListener (Component& c, std::function<void()> cb)
: callback (std::move (cb)),
componentListenerGuard { [comp = &c, this] { comp->removeComponentListener (this); } }
{
jassert (callback != nullptr);
c.addComponentListener (this);
}
private:
void componentMovedOrResized (Component&, bool, bool) override
{
callback();
}
std::function<void()> callback;
ErasedScopeGuard componentListenerGuard;
};
} // namespace detail
#endif
//==============================================================================
/**
The base class for objects which can draw themselves, e.g. polygons, images, etc.
@ -220,11 +247,16 @@ protected:
AffineTransform drawableTransform;
void nonConstDraw (Graphics&, float opacity, const AffineTransform&);
void updateTransform();
Drawable (const Drawable&);
Drawable& operator= (const Drawable&);
JUCE_LEAK_DETECTOR (Drawable)
private:
void updateTransform();
detail::BoundsChangeListener boundsChangeListener { *this, [this] { updateTransform(); } };
};
} // namespace juce