LMMS
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//==============================================================================
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
Definition juce_ComponentBoundsConstrainer.h:44
void setBoundsForComponent(Component *component, Rectangle< int > bounds, bool isStretchingTop, bool isStretchingLeft, bool isStretchingBottom, bool isStretchingRight)
Definition juce_ComponentBoundsConstrainer.cpp:98
Point< int > mouseDownWithinTarget
Definition juce_ComponentDragger.h:96
ComponentDragger()
Definition juce_ComponentDragger.cpp:29
void dragComponent(Component *componentToDrag, const MouseEvent &e, ComponentBoundsConstrainer *constrainer)
Definition juce_ComponentDragger.cpp:42
void startDraggingComponent(Component *componentToDrag, const MouseEvent &e)
Definition juce_ComponentDragger.cpp:33
virtual ~ComponentDragger()
Definition juce_ComponentDragger.cpp:30
Definition juce_Component.h:36
Point< int > getLocalPoint(const Component *sourceComponent, Point< int > pointRelativeToSourceComponent) const
Definition juce_Component.cpp:1136
Rectangle< int > getBounds() const noexcept
Definition juce_Component.h:304
bool isOnDesktop() const noexcept
Definition juce_Component.cpp:796
void setBounds(int x, int y, int width, int height)
Definition juce_Component.cpp:1147
Definition juce_MouseEvent.h:39
constexpr Point< int > roundToInt() const noexcept
Definition juce_Point.h:240
* e
Definition inflate.c:1404
#define jassert(expression)
Definition carla_juce.cpp:31