25 #ifndef JUCE_ANIMATEDPOSITION_H_INCLUDED 26 #define JUCE_ANIMATEDPOSITION_H_INCLUDED 50 template <
typename Behaviour>
55 : position(), grabbedPos(), releaseVelocity(),
56 range (-
std::numeric_limits<double>::
max(),
57 std::numeric_limits<double>::
max())
78 grabbedPos = position;
87 void drag (
double deltaFromStartOfDrag)
89 moveTo (grabbedPos + deltaFromStartOfDrag);
103 void nudge (
double deltaFromCurrentPosition)
106 moveTo (position + deltaFromCurrentPosition);
123 setPositionAndSendChange (newPosition);
154 double position, grabbedPos, releaseVelocity;
156 Time lastUpdate, lastDrag;
159 static double getSpeed (
const Time last,
double lastPos,
160 const Time now,
double newPos)
162 const double elapsedSecs =
jmax (0.005, (now - last).inSeconds());
163 const double v = (newPos - lastPos) / elapsedSecs;
164 return std::abs (v) > 0.2 ? v : 0.0;
167 void moveTo (
double newPos)
170 releaseVelocity = getSpeed (lastDrag, position, now, newPos);
171 behaviour.releasedWithVelocity (newPos, releaseVelocity);
174 setPositionAndSendChange (newPos);
177 void setPositionAndSendChange (
double newPosition)
179 newPosition = range.
clipValue (newPosition);
181 if (position != newPosition)
183 position = newPosition;
188 void timerCallback()
override 192 const double elapsed =
jlimit (0.001, 0.020, (now - lastUpdate).inSeconds());
195 const double newPos = behaviour.getNextPosition (position, elapsed);
197 if (behaviour.isStopped (newPos))
202 setPositionAndSendChange (newPos);
209 #endif // JUCE_ANIMATEDPOSITION_H_INCLUDED AnimatedPosition()
Definition: juce_AnimatedPosition.h:54
double getPosition() const noexcept
Definition: juce_AnimatedPosition.h:111
#define noexcept
Definition: juce_CompilerSupport.h:141
virtual ~Listener()
Definition: juce_AnimatedPosition.h:134
Definition: juce_Time.h:41
void setPosition(double newPosition)
Definition: juce_AnimatedPosition.h:120
Definition: juce_Range.h:44
void setLimits(Range< double > newRange)
Definition: juce_AnimatedPosition.h:62
Behaviour behaviour
Definition: juce_AnimatedPosition.h:150
ValueType clipValue(const ValueType value) const noexcept
Definition: juce_Range.h:218
void addListener(Listener *listener)
Definition: juce_AnimatedPosition.h:141
void startTimerHz(int timerFrequencyHz) noexcept
Definition: juce_Timer.cpp:335
Definition: juce_ListenerList.h:69
Type jmax(const Type a, const Type b)
Definition: juce_core.h:101
void endDrag()
Definition: juce_AnimatedPosition.h:95
void removeListener(Listener *listener)
Definition: juce_AnimatedPosition.h:144
void nudge(double deltaFromCurrentPosition)
Definition: juce_AnimatedPosition.h:103
void stopTimer() noexcept
Definition: juce_Timer.cpp:343
Type jlimit(const Type lowerLimit, const Type upperLimit, const Type valueToConstrain) noexcept
Definition: juce_MathsFunctions.h:220
void call(void(ListenerClass::*callbackFunction)())
Definition: juce_ListenerList.h:146
static Time JUCE_CALLTYPE getCurrentTime() noexcept
Definition: juce_Time.cpp:213
Definition: juce_Timer.h:52
#define max(x, y)
Definition: os.h:79
Definition: juce_AnimatedPosition.h:51
Definition: juce_AnimatedPosition.h:131
void beginDrag()
Definition: juce_AnimatedPosition.h:76
void drag(double deltaFromStartOfDrag)
Definition: juce_AnimatedPosition.h:87
virtual void positionChanged(AnimatedPosition &, double newPosition)=0