LMMS
Loading...
Searching...
No Matches
juce_ToolbarItemComponent.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{
35public:
43
44 void paint (Graphics& g) override
45 {
47 {
49 && tc->getEditingMode() == ToolbarItemComponent::editableOnToolbar)
50 {
52 g.drawRect (getLocalBounds(), jmin (2, (getWidth() - 1) / 2,
53 (getHeight() - 1) / 2));
54 }
55 }
56 }
57
58 void mouseDown (const MouseEvent& e) override
59 {
60 isDragging = false;
61
63 {
64 tc->dragOffsetX = e.x;
65 tc->dragOffsetY = e.y;
66 }
67 }
68
69 void mouseDrag (const MouseEvent& e) override
70 {
71 if (e.mouseWasDraggedSinceMouseDown() && ! isDragging)
72 {
73 isDragging = true;
74
76 {
77 dnd->startDragging (Toolbar::toolbarDragDescriptor, getParentComponent(), ScaledImage(), true, nullptr, &e.source);
78
80 {
81 tc->isBeingDragged = true;
82
83 if (tc->getEditingMode() == ToolbarItemComponent::editableOnToolbar)
84 tc->setVisible (false);
85 }
86 }
87 }
88 }
89
90 void mouseUp (const MouseEvent&) override
91 {
92 isDragging = false;
93
95 {
96 tc->isBeingDragged = false;
97
98 if (Toolbar* const tb = tc->getToolbar())
99 tb->updateAllItemPositions (true);
100 else if (tc->getEditingMode() == ToolbarItemComponent::editableOnToolbar)
101 delete tc;
102 }
103 }
104
105 void parentSizeChanged() override
106 {
108 }
109
110private:
111 //==============================================================================
113
118
120};
121
122
123//==============================================================================
125 const String& labelText,
126 const bool isBeingUsedAsAButton_)
127 : Button (labelText),
128 itemId (itemId_),
130 toolbarStyle (Toolbar::iconsOnly),
131 dragOffsetX (0),
132 dragOffsetY (0),
133 isActive (true),
135 isBeingUsedAsAButton (isBeingUsedAsAButton_)
136{
137 // Your item ID can't be 0!
138 jassert (itemId_ != 0);
139}
140
145
147{
148 return dynamic_cast<Toolbar*> (getParentComponent());
149}
150
152{
153 const Toolbar* const t = getToolbar();
154 return t != nullptr && t->isVertical();
155}
156
158{
159 if (toolbarStyle != newStyle)
160 {
161 toolbarStyle = newStyle;
162 repaint();
163 resized();
164 }
165}
166
167void ToolbarItemComponent::paintButton (Graphics& g, const bool over, const bool down)
168{
170 getLookAndFeel().paintToolbarButtonBackground (g, getWidth(), getHeight(),
171 over, down, *this);
172
174 {
175 auto indent = contentArea.getX();
176 auto y = indent;
177 auto h = getHeight() - indent * 2;
178
180 {
181 y = contentArea.getBottom() + indent / 2;
182 h -= contentArea.getHeight();
183 }
184
185 getLookAndFeel().paintToolbarButtonLabel (g, indent, y, getWidth() - indent * 2, h,
186 getButtonText(), *this);
187 }
188
189 if (! contentArea.isEmpty())
190 {
192
193 g.reduceClipRegion (contentArea);
194 g.setOrigin (contentArea.getPosition());
195
196 paintButtonArea (g, contentArea.getWidth(), contentArea.getHeight(), over, down);
197 }
198}
199
201{
203 {
204 const int indent = jmin (proportionOfWidth (0.08f),
205 proportionOfHeight (0.08f));
206
207 contentArea = Rectangle<int> (indent, indent,
208 getWidth() - indent * 2,
210 : (getHeight() - indent * 2));
211 }
212 else
213 {
214 contentArea = {};
215 }
216
218}
219
221{
222 if (mode != newMode)
223 {
224 mode = newMode;
225 repaint();
226
227 if (mode == normalMode)
228 {
229 overlayComp.reset();
230 }
231 else if (overlayComp == nullptr)
232 {
235 overlayComp->parentSizeChanged();
236 }
237
238 resized();
239 }
240}
241
242//==============================================================================
243std::unique_ptr<AccessibilityHandler> ToolbarItemComponent::createAccessibilityHandler()
244{
245 const auto shouldItemBeAccessible = (itemId != ToolbarItemFactory::separatorBarId
248
249 if (! shouldItemBeAccessible)
251
252 return std::make_unique<ButtonAccessibilityHandler> (*this, AccessibilityRole::button);
253}
254
255} // namespace juce
Type jmin(const Type a, const Type b)
Definition MathsFunctions.h:60
#define noexcept
Definition DistrhoDefines.h:72
Button(const String &buttonName)
Definition juce_Button.cpp:76
const String & getButtonText() const
Definition juce_Button.h:67
int proportionOfWidth(float proportion) const noexcept
Definition juce_Component.cpp:1111
void setRepaintsOnMouseActivity(bool shouldRepaint) noexcept
Definition juce_Component.cpp:1881
bool isMouseOverOrDragging(bool includeChildren=false) const
Definition juce_Component.cpp:3191
Component * getParentComponent() const noexcept
Definition juce_Component.h:804
int proportionOfHeight(float proportion) const noexcept
Definition juce_Component.cpp:1112
int getHeight() const noexcept
Definition juce_Component.h:274
void addAndMakeVisible(Component *child, int zOrder=-1)
Definition juce_Component.cpp:1554
void setAlwaysOnTop(bool shouldStayOnTop)
Definition juce_Component.cpp:1074
void setMouseCursor(const MouseCursor &cursorType)
Definition juce_Component.cpp:1859
void repaint()
Definition juce_Component.cpp:1917
Component() noexcept
Definition juce_Component.cpp:517
void setBounds(int x, int y, int width, int height)
Definition juce_Component.cpp:1147
Colour findColour(int colourID, bool inheritFromParent=false) const
Definition juce_Component.cpp:2219
static std::unique_ptr< AccessibilityHandler > createIgnoredAccessibilityHandler(Component &)
Definition juce_Component.cpp:3292
int getWidth() const noexcept
Definition juce_Component.h:271
LookAndFeel & getLookAndFeel() const noexcept
Definition juce_Component.cpp:2173
Rectangle< int > getLocalBounds() const noexcept
Definition juce_Component.cpp:2283
int getParentWidth() const noexcept
Definition juce_Component.cpp:1114
int getParentHeight() const noexcept
Definition juce_Component.cpp:1120
Definition juce_DragAndDropContainer.h:51
static DragAndDropContainer * findParentDragContainerFor(Component *childComponent)
Definition juce_DragAndDropContainer.cpp:547
Definition juce_GraphicsContext.h:660
Definition juce_GraphicsContext.h:45
@ DraggingHandCursor
Definition juce_MouseCursor.h:57
Definition juce_MouseEvent.h:39
Definition juce_Rectangle.h:67
Definition juce_ScaledImage.h:45
Definition juce_String.h:53
@ editingModeOutlineColourId
Definition juce_Toolbar.h:249
static const char *const toolbarDragDescriptor
Definition juce_Toolbar.h:312
ToolbarItemStyle
Definition juce_Toolbar.h:168
@ textOnly
Definition juce_Toolbar.h:171
@ iconsWithText
Definition juce_Toolbar.h:170
@ iconsOnly
Definition juce_Toolbar.h:169
Definition juce_ToolbarItemComponent.cpp:34
ToolbarItemComponent * getToolbarItemComponent() const noexcept
Definition juce_ToolbarItemComponent.cpp:114
void mouseDown(const MouseEvent &e) override
Definition juce_ToolbarItemComponent.cpp:58
ItemDragAndDropOverlayComponent()
Definition juce_ToolbarItemComponent.cpp:36
void paint(Graphics &g) override
Definition juce_ToolbarItemComponent.cpp:44
void mouseDrag(const MouseEvent &e) override
Definition juce_ToolbarItemComponent.cpp:69
bool isDragging
Definition juce_ToolbarItemComponent.cpp:112
void mouseUp(const MouseEvent &) override
Definition juce_ToolbarItemComponent.cpp:90
void parentSizeChanged() override
Definition juce_ToolbarItemComponent.cpp:105
virtual void contentAreaChanged(const Rectangle< int > &newBounds)=0
const int itemId
Definition juce_ToolbarItemComponent.h:198
int dragOffsetX
Definition juce_ToolbarItemComponent.h:202
Toolbar * getToolbar() const
Definition juce_ToolbarItemComponent.cpp:146
int dragOffsetY
Definition juce_ToolbarItemComponent.h:202
~ToolbarItemComponent() override
Definition juce_ToolbarItemComponent.cpp:141
ToolbarEditingMode
Definition juce_ToolbarItemComponent.h:162
@ editableOnToolbar
Definition juce_ToolbarItemComponent.h:164
@ normalMode
Definition juce_ToolbarItemComponent.h:163
virtual void paintButtonArea(Graphics &g, int width, int height, bool isMouseOver, bool isMouseDown)=0
void setEditingMode(const ToolbarEditingMode newMode)
Definition juce_ToolbarItemComponent.cpp:220
bool isActive
Definition juce_ToolbarItemComponent.h:203
friend class Toolbar
Definition juce_ToolbarItemComponent.h:192
std::unique_ptr< Component > overlayComp
Definition juce_ToolbarItemComponent.h:201
ToolbarEditingMode mode
Definition juce_ToolbarItemComponent.h:199
void paintButton(Graphics &, bool isMouseOver, bool isMouseDown) override
Definition juce_ToolbarItemComponent.cpp:167
std::unique_ptr< AccessibilityHandler > createAccessibilityHandler() override
Definition juce_ToolbarItemComponent.cpp:243
bool isBeingDragged
Definition juce_ToolbarItemComponent.h:203
Toolbar::ToolbarItemStyle toolbarStyle
Definition juce_ToolbarItemComponent.h:200
ToolbarItemComponent(int itemId, const String &labelText, bool isBeingUsedAsAButton)
Definition juce_ToolbarItemComponent.cpp:124
Rectangle< int > contentArea
Definition juce_ToolbarItemComponent.h:204
virtual void setStyle(const Toolbar::ToolbarItemStyle &newStyle)
Definition juce_ToolbarItemComponent.cpp:157
bool isToolbarVertical() const
Definition juce_ToolbarItemComponent.cpp:151
void resized() override
Definition juce_ToolbarItemComponent.cpp:200
bool isBeingUsedAsAButton
Definition juce_ToolbarItemComponent.h:203
@ flexibleSpacerId
Definition juce_ToolbarItemFactory.h:62
@ separatorBarId
Definition juce_ToolbarItemFactory.h:58
@ spacerId
Definition juce_ToolbarItemFactory.h:60
virtual ~ToolbarItemFactory()
Definition juce_ToolbarItemComponent.cpp:30
ToolbarItemFactory()
Definition juce_ToolbarItemComponent.cpp:29
* e
Definition inflate.c:1404
struct huft * t
Definition inflate.c:943
int y
Definition inflate.c:1588
int g
Definition inflate.c:1573
#define jassert(expression)
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)
Definition carla_juce.cpp:31
constexpr Type jmin(Type a, Type b)
Definition juce_MathsFunctions.h:106
@ button
Definition juce_AccessibilityRole.h:38
#define true
Definition ordinals.h:82
#define false
Definition ordinals.h:83
uch h[RAND_HEAD_LEN]
Definition crypt.c:459
ss
Definition zipinfo.c:2292
#define const
Definition zconf.h:137