LMMS
Loading...
Searching...
No Matches
juce_ResizableWindow.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
29ResizableWindow::ResizableWindow (const String& name, bool shouldAddToDesktop)
30 : TopLevelWindow (name, shouldAddToDesktop)
31{
32 initialise (shouldAddToDesktop);
33}
34
35ResizableWindow::ResizableWindow (const String& name, Colour bkgnd, bool shouldAddToDesktop)
36 : TopLevelWindow (name, shouldAddToDesktop)
37{
38 setBackgroundColour (bkgnd);
39 initialise (shouldAddToDesktop);
40}
41
43{
44 // Don't delete or remove the resizer components yourself! They're managed by the
45 // ResizableWindow, and you should leave them alone! You may have deleted them
46 // accidentally by careless use of deleteAllChildren()..?
49
50 resizableCorner.reset();
51 resizableBorder.reset();
53
54 // have you been adding your own components directly to this window..? tut tut tut.
55 // Read the instructions for using a ResizableWindow!
57}
58
59void ResizableWindow::initialise (const bool shouldAddToDesktop)
60{
61 defaultConstrainer.setMinimumOnscreenAmounts (0x10000, 16, 24, 16);
62
63 lastNonFullScreenPos.setBounds (50, 50, 256, 256);
64
65 if (shouldAddToDesktop)
67}
68
70{
72
73 if (isResizable() && (styleFlags & ComponentPeer::windowHasTitleBar) != 0)
75
76 return styleFlags;
77}
78
79//==============================================================================
81{
83 {
84 contentComponent.deleteAndZero();
85 }
86 else
87 {
89 contentComponent = nullptr;
90 }
91}
92
93void ResizableWindow::setContent (Component* newContentComponent,
94 bool takeOwnership,
95 bool resizeToFitWhenContentChangesSize)
96{
97 if (newContentComponent != contentComponent)
98 {
100
101 contentComponent = newContentComponent;
103 }
104
105 ownsContentComponent = takeOwnership;
106 resizeToFitContent = resizeToFitWhenContentChangesSize;
107
108 if (resizeToFitWhenContentChangesSize)
110
111 resized(); // must always be called to position the new content comp
112}
113
114void ResizableWindow::setContentOwned (Component* newContentComponent, const bool resizeToFitWhenContentChangesSize)
115{
116 setContent (newContentComponent, true, resizeToFitWhenContentChangesSize);
117}
118
119void ResizableWindow::setContentNonOwned (Component* newContentComponent, const bool resizeToFitWhenContentChangesSize)
120{
121 setContent (newContentComponent, false, resizeToFitWhenContentChangesSize);
122}
123
124void ResizableWindow::setContentComponent (Component* const newContentComponent,
125 const bool deleteOldOne,
126 const bool resizeToFitWhenContentChangesSize)
127{
128 if (newContentComponent != contentComponent)
129 {
130 if (deleteOldOne)
131 {
132 contentComponent.deleteAndZero();
133 }
134 else
135 {
137 contentComponent = nullptr;
138 }
139 }
140
141 setContent (newContentComponent, true, resizeToFitWhenContentChangesSize);
142}
143
145{
146 jassert (width > 0 && height > 0); // not a great idea to give it a zero size..
147
149
150 setSize (width + border.getLeftAndRight(),
151 height + border.getTopAndBottom());
152}
153
155{
157 return {};
158
159 return BorderSize<int> ((resizableBorder != nullptr && ! isFullScreen()) ? 4 : 1);
160}
161
166
171
177
179{
180 const bool resizerHidden = isFullScreen() || isKioskMode() || isUsingNativeTitleBar();
181
182 if (resizableBorder != nullptr)
183 {
184 resizableBorder->setVisible (! resizerHidden);
185 resizableBorder->setBorderThickness (getBorderThickness());
186 resizableBorder->setSize (getWidth(), getHeight());
187 resizableBorder->toBack();
188 }
189
190 if (resizableCorner != nullptr)
191 {
192 resizableCorner->setVisible (! resizerHidden);
193
194 const int resizerSize = 18;
195 resizableCorner->setBounds (getWidth() - resizerSize,
196 getHeight() - resizerSize,
197 resizerSize, resizerSize);
198 }
199
200 if (contentComponent != nullptr)
201 {
202 // The window expects to be able to be able to manage the size and position
203 // of its content component, so you can't arbitrarily add a transform to it!
204 jassert (! contentComponent->isTransformed());
205
207 }
208
210
211 #if JUCE_DEBUG
212 hasBeenResized = true;
213 #endif
214}
215
217{
218 if ((child == contentComponent) && (child != nullptr) && resizeToFitContent)
219 {
220 // not going to look very good if this component has a zero size..
221 jassert (child->getWidth() > 0);
222 jassert (child->getHeight() > 0);
223
224 auto borders = getContentComponentBorder();
225
226 setSize (child->getWidth() + borders.getLeftAndRight(),
227 child->getHeight() + borders.getTopAndBottom());
228 }
229}
230
231
232//==============================================================================
234{
236 auto area = getLocalBounds();
237
238 repaint (area.removeFromTop (border.getTop()));
239 repaint (area.removeFromLeft (border.getLeft()));
240 repaint (area.removeFromRight (border.getRight()));
241 repaint (area.removeFromBottom (border.getBottom()));
242}
243
244//==============================================================================
245void ResizableWindow::setResizable (const bool shouldBeResizable,
246 const bool useBottomRightCornerResizer)
247{
248 if (shouldBeResizable)
249 {
250 if (useBottomRightCornerResizer)
251 {
252 resizableBorder.reset();
253
254 if (resizableCorner == nullptr)
255 {
258 resizableCorner->setAlwaysOnTop (true);
259 }
260 }
261 else
262 {
263 resizableCorner.reset();
264
265 if (resizableBorder == nullptr)
266 {
269 }
270 }
271 }
272 else
273 {
274 resizableCorner.reset();
275 resizableBorder.reset();
276 }
277
280
282 resized();
283}
284
286{
287 return resizableCorner != nullptr
288 || resizableBorder != nullptr;
289}
290
291void ResizableWindow::setResizeLimits (int newMinimumWidth,
292 int newMinimumHeight,
293 int newMaximumWidth,
294 int newMaximumHeight) noexcept
295{
296 // if you've set up a custom constrainer then these settings won't have any effect..
298
299 if (constrainer == nullptr)
301
302 defaultConstrainer.setSizeLimits (newMinimumWidth, newMinimumHeight,
303 newMaximumWidth, newMaximumHeight);
304
306}
307
308void ResizableWindow::setDraggable (bool shouldBeDraggable) noexcept
309{
310 canDrag = shouldBeDraggable;
311}
312
314{
315 if (constrainer != newConstrainer)
316 {
317 constrainer = newConstrainer;
318
319 bool useBottomRightCornerResizer = resizableCorner != nullptr;
320 bool shouldBeResizable = useBottomRightCornerResizer || resizableBorder != nullptr;
321
322 resizableCorner.reset();
323 resizableBorder.reset();
324
325 setResizable (shouldBeResizable, useBottomRightCornerResizer);
327 }
328}
329
331{
332 if (constrainer != nullptr)
333 constrainer->setBoundsForComponent (this, newBounds, false, false, false, false);
334 else
335 setBounds (newBounds);
336}
337
338//==============================================================================
340{
341 auto& lf = getLookAndFeel();
342
343 lf.fillResizableWindowBackground (g, getWidth(), getHeight(),
344 getBorderThickness(), *this);
345
346 if (! isFullScreen())
347 lf.drawResizableWindowBorder (g, getWidth(), getHeight(),
348 getBorderThickness(), *this);
349
350 #if JUCE_DEBUG
351 /* If this fails, then you've probably written a subclass with a resized()
352 callback but forgotten to make it call its parent class's resized() method.
353
354 It's important when you override methods like resized(), moved(),
355 etc., that you make sure the base class methods also get called.
356
357 Of course you shouldn't really be overriding ResizableWindow::resized() anyway,
358 because your content should all be inside the content component - and it's the
359 content component's resized() method that you should be using to do your
360 layout.
361 */
362 jassert (hasBeenResized || (getWidth() == 0 && getHeight() == 0));
363 #endif
364}
365
376
381
383{
384 auto backgroundColour = newColour;
385
387 backgroundColour = newColour.withAlpha (1.0f);
388
389 setColour (backgroundColourId, backgroundColour);
390 setOpaque (backgroundColour.isOpaque());
391 repaint();
392}
393
394//==============================================================================
396{
397 if (isOnDesktop())
398 {
399 auto* peer = getPeer();
400 return peer != nullptr && peer->isFullScreen();
401 }
402
403 return fullscreen;
404}
405
406void ResizableWindow::setFullScreen (const bool shouldBeFullScreen)
407{
408 if (shouldBeFullScreen != isFullScreen())
409 {
411 fullscreen = shouldBeFullScreen;
412
413 if (isOnDesktop())
414 {
415 if (auto* peer = getPeer())
416 {
417 // keep a copy of this intact in case the real one gets messed-up while we're un-maximising
418 auto lastPos = lastNonFullScreenPos;
419
420 peer->setFullScreen (shouldBeFullScreen);
421
422 if ((! shouldBeFullScreen) && ! lastPos.isEmpty())
423 setBounds (lastPos);
424 }
425 else
426 {
428 }
429 }
430 else
431 {
432 if (shouldBeFullScreen)
434 else
436 }
437
438 resized();
439 }
440}
441
443{
444 if (auto* peer = getPeer())
445 return peer->isMinimised();
446
447 return false;
448}
449
450void ResizableWindow::setMinimised (const bool shouldMinimise)
451{
452 if (shouldMinimise != isMinimised())
453 {
454 if (auto* peer = getPeer())
455 {
457 peer->setMinimised (shouldMinimise);
458 }
459 else
460 {
462 }
463 }
464}
465
467{
468 if (isOnDesktop())
469 if (auto* peer = getPeer())
470 return peer->isKioskMode();
471
472 return Desktop::getInstance().getKioskModeComponent() == this;
473}
474
483
489
491{
492 if (isOnDesktop())
493 if (auto* peer = getPeer())
494 peer->setConstrainer (constrainer);
495}
496
502
503//==============================================================================
505{
507 auto stateString = (isFullScreen() && ! isKioskMode() ? "fs " : "") + lastNonFullScreenPos.toString();
508
509 #if JUCE_LINUX
510 if (auto* peer = isOnDesktop() ? getPeer() : nullptr)
511 {
512 if (const auto optionalFrameSize = peer->getFrameSizeIfPresent())
513 {
514 const auto& frameSize = *optionalFrameSize;
515 stateString << " frame " << frameSize.getTop() << ' ' << frameSize.getLeft()
516 << ' ' << frameSize.getBottom() << ' ' << frameSize.getRight();
517 }
518 }
519 #endif
520
521 return stateString;
522}
523
525{
526 StringArray tokens;
527 tokens.addTokens (s, false);
528 tokens.removeEmptyStrings();
529 tokens.trim();
530
531 const bool fs = tokens[0].startsWithIgnoreCase ("fs");
532 const int firstCoord = fs ? 1 : 0;
533
534 if (tokens.size() < firstCoord + 4)
535 return false;
536
537 Rectangle<int> newPos (tokens[firstCoord].getIntValue(),
538 tokens[firstCoord + 1].getIntValue(),
539 tokens[firstCoord + 2].getIntValue(),
540 tokens[firstCoord + 3].getIntValue());
541
542 if (newPos.isEmpty())
543 return false;
544
545 auto* peer = isOnDesktop() ? getPeer() : nullptr;
546
547 if (peer != nullptr)
548 {
549 if (const auto frameSize = peer->getFrameSizeIfPresent())
550 frameSize->addTo (newPos);
551 }
552
553 #if JUCE_LINUX
554 if (peer == nullptr || ! peer->getFrameSizeIfPresent())
555 {
556 // We need to adjust for the frame size before we create a peer, as X11
557 // doesn't provide this information at construction time.
558 if (tokens[firstCoord + 4] == "frame" && tokens.size() == firstCoord + 9)
559 {
560 BorderSize<int> frame { tokens[firstCoord + 5].getIntValue(),
561 tokens[firstCoord + 6].getIntValue(),
562 tokens[firstCoord + 7].getIntValue(),
563 tokens[firstCoord + 8].getIntValue() };
564
565 newPos.setX (newPos.getX() - frame.getLeft());
566 newPos.setY (newPos.getY() - frame.getTop());
567
568 setBounds (newPos);
569 }
570 }
571 #endif
572
573 {
574 auto& desktop = Desktop::getInstance();
575 auto allMonitors = desktop.getDisplays().getRectangleList (true);
576 allMonitors.clipTo (newPos);
577 auto onScreenArea = allMonitors.getBounds();
578
579 if (onScreenArea.getWidth() * onScreenArea.getHeight() < 32 * 32)
580 {
581 auto screen = desktop.getDisplays().getDisplayForRect (newPos)->userArea;
582
583 newPos.setSize (jmin (newPos.getWidth(), screen.getWidth()),
584 jmin (newPos.getHeight(), screen.getHeight()));
585
586 newPos.setPosition (jlimit (screen.getX(), screen.getRight() - newPos.getWidth(), newPos.getX()),
587 jlimit (screen.getY(), screen.getBottom() - newPos.getHeight(), newPos.getY()));
588 }
589 }
590
591 if (peer != nullptr)
592 {
593 if (const auto frameSize = peer->getFrameSizeIfPresent())
594 frameSize->subtractFrom (newPos);
595
596 peer->setNonFullScreenBounds (newPos);
597 }
598
600
601 if (fs)
602 setBoundsConstrained (newPos);
603
604 setFullScreen (fs);
605
606 if (! fs)
607 setBoundsConstrained (newPos);
608
609 return true;
610}
611
612//==============================================================================
614{
615 if (canDrag && ! isFullScreen())
616 {
617 dragStarted = true;
618 dragger.startDraggingComponent (this, e);
619 }
620}
621
623{
624 if (dragStarted)
625 dragger.dragComponent (this, e, constrainer);
626}
627
629{
630 dragStarted = false;
631}
632
633//==============================================================================
634#if JUCE_DEBUG
635void ResizableWindow::addChildComponent (Component* const child, int zOrder)
636{
637 /* Agh! You shouldn't add components directly to a ResizableWindow - this class
638 manages its child components automatically, and if you add your own it'll cause
639 trouble. Instead, use setContentComponent() to give it a component which
640 will be automatically resized and kept in the right place - then you can add
641 subcomponents to the content comp. See the notes for the ResizableWindow class
642 for more info.
643
644 If you really know what you're doing and want to avoid this assertion, just call
645 Component::addChildComponent directly.
646 */
648
649 Component::addChildComponent (child, zOrder);
650}
651
652void ResizableWindow::addAndMakeVisible (Component* const child, int zOrder)
653{
654 /* Agh! You shouldn't add components directly to a ResizableWindow - this class
655 manages its child components automatically, and if you add your own it'll cause
656 trouble. Instead, use setContentComponent() to give it a component which
657 will be automatically resized and kept in the right place - then you can add
658 subcomponents to the content comp. See the notes for the ResizableWindow class
659 for more info.
660
661 If you really know what you're doing and want to avoid this assertion, just call
662 Component::addAndMakeVisible directly.
663 */
665
666 Component::addAndMakeVisible (child, zOrder);
667}
668#endif
669
670} // namespace juce
#define noexcept
Definition DistrhoDefines.h:72
Definition juce_BorderSize.h:42
ValueType getTop() const noexcept
Definition juce_BorderSize.h:66
ValueType getLeft() const noexcept
Definition juce_BorderSize.h:69
Definition juce_Colour.h:38
Colour withAlpha(uint8 newAlpha) const noexcept
Definition juce_Colour.cpp:317
Definition juce_ComponentBoundsConstrainer.h:44
Definition juce_Component.h:36
Component * getParentComponent() const noexcept
Definition juce_Component.h:804
int getNumChildComponents() const noexcept
Definition juce_Component.cpp:1643
int getIndexOfChildComponent(const Component *child) const noexcept
Definition juce_Component.cpp:1653
int getHeight() const noexcept
Definition juce_Component.h:274
bool isShowing() const
Definition juce_Component.cpp:634
void addAndMakeVisible(Component *child, int zOrder=-1)
Definition juce_Component.cpp:1554
void setOpaque(bool shouldBeOpaque)
Definition juce_Component.cpp:829
Rectangle< int > getBounds() const noexcept
Definition juce_Component.h:304
void repaint()
Definition juce_Component.cpp:1917
bool isOnDesktop() const noexcept
Definition juce_Component.cpp:796
void removeChildComponent(Component *childToRemove)
Definition juce_Component.cpp:1569
virtual void addToDesktop(int windowStyleFlags, void *nativeWindowToAttachTo=nullptr)
Definition juce_Component.cpp:658
void setBounds(int x, int y, int width, int height)
Definition juce_Component.cpp:1147
void setSize(int newWidth, int newHeight)
Definition juce_Component.cpp:1262
void setColour(int colourID, Colour newColour)
Definition juce_Component.cpp:2242
Colour findColour(int colourID, bool inheritFromParent=false) const
Definition juce_Component.cpp:2219
int getWidth() const noexcept
Definition juce_Component.h:271
ComponentPeer * getPeer() const
Definition juce_Component.cpp:801
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
void addChildComponent(Component *child, int zOrder=-1)
Definition juce_Component.cpp:1548
int getParentHeight() const noexcept
Definition juce_Component.cpp:1120
@ windowIsResizable
Definition juce_ComponentPeer.h:59
@ windowHasTitleBar
Definition juce_ComponentPeer.h:56
static Desktop &JUCE_CALLTYPE getInstance()
Definition juce_Desktop.cpp:50
static bool canUseSemiTransparentWindows() noexcept
Definition juce_linux_Windowing.cpp:603
Definition juce_GraphicsContext.h:45
Definition juce_MouseEvent.h:39
Definition juce_Rectangle.h:67
ValueType getHeight() const noexcept
Definition juce_Rectangle.h:136
ValueType getX() const noexcept
Definition juce_Rectangle.h:127
ValueType getWidth() const noexcept
Definition juce_Rectangle.h:133
void setX(ValueType newX) noexcept
Definition juce_Rectangle.h:195
void setPosition(Point< ValueType > newPos) noexcept
Definition juce_Rectangle.h:164
void setY(ValueType newY) noexcept
Definition juce_Rectangle.h:198
void setSize(ValueType newWidth, ValueType newHeight) noexcept
Definition juce_Rectangle.h:188
bool isEmpty() const noexcept
Definition juce_Rectangle.h:121
ValueType getY() const noexcept
Definition juce_Rectangle.h:130
Definition juce_ResizableBorderComponent.h:48
Definition juce_ResizableCornerComponent.h:42
void setResizable(bool shouldBeResizable, bool useBottomRightCornerResizer)
Definition juce_ResizableWindow.cpp:245
void setBoundsConstrained(const Rectangle< int > &newBounds)
Definition juce_ResizableWindow.cpp:330
ComponentBoundsConstrainer defaultConstrainer
Definition juce_ResizableWindow.h:398
void setFullScreen(bool shouldBeFullScreen)
Definition juce_ResizableWindow.cpp:406
Rectangle< int > lastNonFullScreenPos
Definition juce_ResizableWindow.h:397
bool resizeToFitContent
Definition juce_ResizableWindow.h:395
bool ownsContentComponent
Definition juce_ResizableWindow.h:395
bool canDrag
Definition juce_ResizableWindow.h:395
void updateLastPosIfNotFullScreen()
Definition juce_ResizableWindow.cpp:484
void setContent(Component *, bool takeOwnership, bool resizeToFit)
Definition juce_ResizableWindow.cpp:93
void mouseDown(const MouseEvent &) override
Definition juce_ResizableWindow.cpp:613
String getWindowStateAsString()
Definition juce_ResizableWindow.cpp:504
void setDraggable(bool shouldBeDraggable) noexcept
Definition juce_ResizableWindow.cpp:308
std::unique_ptr< ResizableCornerComponent > resizableCorner
Definition juce_ResizableWindow.h:384
std::unique_ptr< ResizableBorderComponent > resizableBorder
Definition juce_ResizableWindow.h:385
void resized() override
Definition juce_ResizableWindow.cpp:178
int getDesktopWindowStyleFlags() const override
Definition juce_ResizableWindow.cpp:69
bool fullscreen
Definition juce_ResizableWindow.h:395
bool isResizable() const noexcept
Definition juce_ResizableWindow.cpp:285
void mouseUp(const MouseEvent &) override
Definition juce_ResizableWindow.cpp:628
void setResizeLimits(int newMinimumWidth, int newMinimumHeight, int newMaximumWidth, int newMaximumHeight) noexcept
Definition juce_ResizableWindow.cpp:291
bool isMinimised() const
Definition juce_ResizableWindow.cpp:442
bool isKioskMode() const
Definition juce_ResizableWindow.cpp:466
void setContentOwned(Component *newContentComponent, bool resizeToFitWhenContentChangesSize)
Definition juce_ResizableWindow.cpp:114
void mouseDrag(const MouseEvent &) override
Definition juce_ResizableWindow.cpp:622
void clearContentComponent()
Definition juce_ResizableWindow.cpp:80
ComponentDragger dragger
Definition juce_ResizableWindow.h:396
void lookAndFeelChanged() override
Definition juce_ResizableWindow.cpp:366
@ backgroundColourId
Definition juce_ResizableWindow.h:312
void setBackgroundColour(Colour newColour)
Definition juce_ResizableWindow.cpp:382
void updateLastPosIfShowing()
Definition juce_ResizableWindow.cpp:475
void visibilityChanged() override
Definition juce_ResizableWindow.cpp:172
virtual BorderSize< int > getContentComponentBorder()
Definition juce_ResizableWindow.cpp:162
void paint(Graphics &) override
Definition juce_ResizableWindow.cpp:339
virtual BorderSize< int > getBorderThickness()
Definition juce_ResizableWindow.cpp:154
bool isFullScreen() const
Definition juce_ResizableWindow.cpp:395
void activeWindowStatusChanged() override
Definition juce_ResizableWindow.cpp:233
void parentSizeChanged() override
Definition juce_ResizableWindow.cpp:497
Colour getBackgroundColour() const noexcept
Definition juce_ResizableWindow.cpp:377
void setConstrainer(ComponentBoundsConstrainer *newConstrainer)
Definition juce_ResizableWindow.cpp:313
ComponentBoundsConstrainer * constrainer
Definition juce_ResizableWindow.h:399
void moved() override
Definition juce_ResizableWindow.cpp:167
Component::SafePointer< Component > contentComponent
Definition juce_ResizableWindow.h:394
bool restoreWindowStateFromString(const String &previousState)
Definition juce_ResizableWindow.cpp:524
bool dragStarted
Definition juce_ResizableWindow.h:395
void setContentNonOwned(Component *newContentComponent, bool resizeToFitWhenContentChangesSize)
Definition juce_ResizableWindow.cpp:119
~ResizableWindow() override
Definition juce_ResizableWindow.cpp:42
ResizableWindow(const String &name, bool addToDesktop)
Definition juce_ResizableWindow.cpp:29
void setContentComponent(Component *newContentComponent, bool deleteOldOne=true, bool resizeToFit=false)
Definition juce_ResizableWindow.cpp:124
void setContentComponentSize(int width, int height)
Definition juce_ResizableWindow.cpp:144
void childBoundsChanged(Component *) override
Definition juce_ResizableWindow.cpp:216
void updatePeerConstrainer()
Definition juce_ResizableWindow.cpp:490
void initialise(bool addToDesktop)
Definition juce_ResizableWindow.cpp:59
void setMinimised(bool shouldMinimise)
Definition juce_ResizableWindow.cpp:450
void addToDesktop()
Definition juce_TopLevelWindow.cpp:258
Definition juce_StringArray.h:35
void removeEmptyStrings(bool removeWhitespaceStrings=true)
Definition juce_StringArray.cpp:250
int size() const noexcept
Definition juce_StringArray.h:136
void trim()
Definition juce_StringArray.cpp:266
int addTokens(StringRef stringToTokenise, bool preserveQuotedStrings)
Definition juce_StringArray.cpp:329
Definition juce_String.h:53
void recreateDesktopWindow()
Definition juce_TopLevelWindow.cpp:249
void visibilityChanged() override
Definition juce_TopLevelWindow.cpp:186
virtual int getDesktopWindowStyleFlags() const
Definition juce_TopLevelWindow.cpp:200
bool isUsingNativeTitleBar() const noexcept
Definition juce_TopLevelWindow.cpp:181
TopLevelWindow(const String &name, bool addToDesktop)
Definition juce_TopLevelWindow.cpp:134
* e
Definition inflate.c:1404
int g
Definition inflate.c:1573
static ZCONST unsigned border[]
Definition inflate.c:749
unsigned s
Definition inflate.c:1555
static const char * name
Definition pugl.h:1582
static int int height
Definition pugl.h:1594
static int width
Definition pugl.h:1593
#define jassert(expression)
#define jassertfalse
Definition carla_juce.cpp:31
constexpr Type jmin(Type a, Type b)
Definition juce_MathsFunctions.h:106
Type jlimit(Type lowerLimit, Type upperLimit, Type valueToConstrain) noexcept
Definition juce_MathsFunctions.h:262
#define const
Definition zconf.h:137