LMMS
Loading...
Searching...
No Matches
juce_FocusOutline.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
29//==============================================================================
31{
33 : target (c), props (p)
34 {
35 setVisible (true);
36 setInterceptsMouseClicks (false, false);
37
38 if (target->isOnDesktop())
39 {
40 setSize (1, 1);
44 }
45 else if (auto* parent = target->getParentComponent())
46 {
47 auto targetIndex = parent->getIndexOfChildComponent (target);
48 parent->addChildComponent (this, targetIndex + 1);
49 }
50 }
51
52 void paint (Graphics& g) override
53 {
54 if (target != nullptr)
55 props.drawOutline (g, getWidth(), getHeight());
56 }
57
58 void resized() override
59 {
60 repaint();
61 }
62
63 float getDesktopScaleFactor() const override
64 {
65 return target != nullptr ? target->getDesktopScaleFactor()
67 }
68
69private:
72
74};
75
76//==============================================================================
77FocusOutline::FocusOutline (std::unique_ptr<OutlineWindowProperties> props)
78 : properties (std::move (props))
79{
80}
81
83{
84 if (owner != nullptr)
85 owner->removeComponentListener (this);
86
87 if (lastParentComp != nullptr)
88 lastParentComp->removeComponentListener (this);
89}
90
91void FocusOutline::setOwner (Component* componentToFollow)
92{
93 if (componentToFollow != owner)
94 {
95 if (owner != nullptr)
96 owner->removeComponentListener (this);
97
98 owner = componentToFollow;
99
100 if (owner != nullptr)
101 owner->addComponentListener (this);
102
103 updateParent();
105 }
106}
107
109{
110 if (owner == &c)
112}
113
119
121{
122 if (owner == &c)
123 {
124 updateParent();
126 }
127}
128
134
136{
137 lastParentComp = (owner != nullptr ? owner->getParentComponent()
138 : nullptr);
139}
140
142{
143 if (reentrant)
144 return;
145
146 const ScopedValueSetter<bool> setter (reentrant, true);
147
148 if (owner == nullptr)
149 {
150 outlineWindow = nullptr;
151 return;
152 }
153
154 if (owner->isShowing()
155 && owner->getWidth() > 0 && owner->getHeight() > 0)
156 {
157 if (outlineWindow == nullptr)
158 outlineWindow = std::make_unique<OutlineWindowComponent> (owner, *properties);
159
160 WeakReference<Component> deletionChecker (outlineWindow.get());
161
162 outlineWindow->setAlwaysOnTop (owner->isAlwaysOnTop());
163
164 if (deletionChecker == nullptr)
165 return;
166
167 const auto windowBounds = [this]
168 {
169 const auto bounds = properties->getOutlineBounds (*owner);
170
171 if (lastParentComp != nullptr)
172 return lastParentComp->getLocalArea (nullptr, bounds);
173
174 return bounds;
175 }();
176
177 outlineWindow->setBounds (windowBounds);
178 }
179 else
180 {
181 outlineWindow = nullptr;
182 }
183}
184
185} // namespace juce
Definition juce_Component.h:36
void setInterceptsMouseClicks(bool allowClicksOnThisComponent, bool allowClicksOnChildComponents) noexcept
Definition juce_Component.cpp:1420
int getHeight() const noexcept
Definition juce_Component.h:274
void repaint()
Definition juce_Component.cpp:1917
Component() noexcept
Definition juce_Component.cpp:517
virtual void addToDesktop(int windowStyleFlags, void *nativeWindowToAttachTo=nullptr)
Definition juce_Component.cpp:658
void setSize(int newWidth, int newHeight)
Definition juce_Component.cpp:1262
int getWidth() const noexcept
Definition juce_Component.h:271
virtual void setVisible(bool shouldBeVisible)
Definition juce_Component.cpp:575
virtual float getDesktopScaleFactor() const
Definition juce_Component.cpp:826
@ windowIsTemporary
Definition juce_ComponentPeer.h:52
@ windowIgnoresKeyPresses
Definition juce_ComponentPeer.h:71
@ windowIgnoresMouseClicks
Definition juce_ComponentPeer.h:54
bool reentrant
Definition juce_FocusOutline.h:94
void updateParent()
Definition juce_FocusOutline.cpp:135
WeakReference< Component > lastParentComp
Definition juce_FocusOutline.h:92
void componentBroughtToFront(Component &) override
Definition juce_FocusOutline.cpp:114
void setOwner(Component *componentToFollow)
Definition juce_FocusOutline.cpp:91
void componentParentHierarchyChanged(Component &) override
Definition juce_FocusOutline.cpp:120
std::unique_ptr< Component > outlineWindow
Definition juce_FocusOutline.h:91
void componentMovedOrResized(Component &, bool, bool) override
Definition juce_FocusOutline.cpp:108
WeakReference< Component > owner
Definition juce_FocusOutline.h:90
FocusOutline(std::unique_ptr< OutlineWindowProperties > props)
Definition juce_FocusOutline.cpp:77
~FocusOutline() override
Definition juce_FocusOutline.cpp:82
void componentVisibilityChanged(Component &) override
Definition juce_FocusOutline.cpp:129
void updateOutlineWindow()
Definition juce_FocusOutline.cpp:141
std::unique_ptr< OutlineWindowProperties > properties
Definition juce_FocusOutline.h:88
Definition juce_GraphicsContext.h:45
Definition juce_ScopedValueSetter.h:55
Definition juce_WeakReference.h:78
int g
Definition inflate.c:1573
static uintptr_t parent
Definition pugl.h:1644
#define JUCE_DECLARE_NON_COPYABLE(className)
Definition carla_juce.cpp:31
Definition juce_Uuid.h:141
Definition juce_FocusOutline.h:54
float getDesktopScaleFactor() const override
Definition juce_FocusOutline.cpp:63
FocusOutline::OutlineWindowProperties & props
Definition juce_FocusOutline.cpp:71
OutlineWindowComponent(Component *c, FocusOutline::OutlineWindowProperties &p)
Definition juce_FocusOutline.cpp:32
WeakReference< Component > target
Definition juce_FocusOutline.cpp:70
void resized() override
Definition juce_FocusOutline.cpp:58
void paint(Graphics &g) override
Definition juce_FocusOutline.cpp:52
uch * p
Definition crypt.c:594
return c
Definition crypt.c:175