JUCE-7.0.12-0-g4f43011b96 JUCE-7.0.12-0-g4f43011b96
JUCE — C++ application framework with suport for VST, VST3, LV2 audio plug-ins

« « « Anklang Documentation
Loading...
Searching...
No Matches
juce_ComponentDragger.cpp
Go to the documentation of this file.
1 /*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 By using JUCE, you agree to the terms of both the JUCE 7 End-User License
11 Agreement and JUCE Privacy Policy.
12
13 End User License Agreement: www.juce.com/juce-7-licence
14 Privacy Policy: www.juce.com/juce-privacy-policy
15
16 Or: You may also use this code under the terms of the GPL v3 (see
17 www.gnu.org/licenses).
18
19 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21 DISCLAIMED.
22
23 ==============================================================================
24*/
25
26namespace juce
27{
28
31
32//==============================================================================
33void ComponentDragger::startDraggingComponent (Component* const componentToDrag, const MouseEvent& e)
34{
35 jassert (componentToDrag != nullptr);
36 jassert (e.mods.isAnyMouseButtonDown()); // The event has to be a drag event!
37
38 if (componentToDrag != nullptr)
39 mouseDownWithinTarget = e.getEventRelativeTo (componentToDrag).getMouseDownPosition();
40}
41
42void ComponentDragger::dragComponent (Component* const componentToDrag, const MouseEvent& e,
43 ComponentBoundsConstrainer* const constrainer)
44{
45 jassert (componentToDrag != nullptr);
46 jassert (e.mods.isAnyMouseButtonDown()); // The event has to be a drag event!
47
48 if (componentToDrag != nullptr)
49 {
50 auto bounds = componentToDrag->getBounds();
51
52 // If the component is a window, multiple mouse events can get queued while it's in the same position,
53 // so their coordinates become wrong after the first one moves the window, so in that case, we'll use
54 // the current mouse position instead of the one that the event contains...
55 if (componentToDrag->isOnDesktop())
56 bounds += componentToDrag->getLocalPoint (nullptr, e.source.getScreenPosition()).roundToInt() - mouseDownWithinTarget;
57 else
58 bounds += e.getEventRelativeTo (componentToDrag).getPosition() - mouseDownWithinTarget;
59
60 if (constrainer != nullptr)
61 constrainer->setBoundsForComponent (componentToDrag, bounds, false, false, false, false);
62 else
63 componentToDrag->setBounds (bounds);
64 }
65}
66
67} // namespace juce
A class that imposes restrictions on a Component's size or position.
void setBoundsForComponent(Component *component, Rectangle< int > bounds, bool isStretchingTop, bool isStretchingLeft, bool isStretchingBottom, bool isStretchingRight)
Checks the given bounds, and then sets the component to the corrected size.
ComponentDragger()
Creates a ComponentDragger.
void dragComponent(Component *componentToDrag, const MouseEvent &e, ComponentBoundsConstrainer *constrainer)
Call this from your mouseDrag() callback to move the component.
void startDraggingComponent(Component *componentToDrag, const MouseEvent &e)
Call this from your component's mouseDown() method, to prepare for dragging.
virtual ~ComponentDragger()
Destructor.
The base class for all JUCE user-interface objects.
Point< int > getLocalPoint(const Component *sourceComponent, Point< int > pointRelativeToSourceComponent) const
Converts a point to be relative to this component's coordinate space.
Rectangle< int > getBounds() const noexcept
Returns this component's bounding box.
bool isOnDesktop() const noexcept
Returns true if this component is currently showing on the desktop.
void setBounds(int x, int y, int width, int height)
Changes the component's position and size.
bool isAnyMouseButtonDown() const noexcept
Tests for any of the mouse-button flags.
Contains position and status information about a mouse event.
const ModifierKeys mods
The key modifiers associated with the event.
MouseInputSource source
The source device that generated this event.
Point< int > getPosition() const noexcept
The position of the mouse when the event occurred.
Point< int > getMouseDownPosition() const noexcept
Returns the coordinates of the last place that a mouse was pressed.
MouseEvent getEventRelativeTo(Component *newComponent) const noexcept
Creates a version of this event that is relative to a different component.
Point< float > getScreenPosition() const noexcept
Returns the last-known screen position of this source.
constexpr Point< int > roundToInt() const noexcept
Casts this point to a Point<int> object using roundToInt() to convert the values.
Definition juce_Point.h:245
#define jassert(expression)
Platform-independent assertion macro.
JUCE Namespace.