11namespace tracktion {
inline namespace engine
14static bool isDialogOpen()
16 auto& mm = *juce::ModalComponentManager::getInstance();
17 if (mm.getNumModalComponents() > 0)
28PluginWindowState::PluginWindowState (Edit& e)
31 windowLocked (engine.getPluginManager().areGUIsLockedByDefault())
35void PluginWindowState::deleteWindow()
40void PluginWindowState::incRefCount()
42 TRACKTION_ASSERT_MESSAGE_THREAD
47void PluginWindowState::decRefCount()
49 TRACKTION_ASSERT_MESSAGE_THREAD
54void PluginWindowState::showWindowExplicitly()
56 TRACKTION_ASSERT_MESSAGE_THREAD
57 wasExplicitlyClosed =
false;
62void PluginWindowState::closeWindowExplicitly()
64 TRACKTION_ASSERT_MESSAGE_THREAD
66 if (pluginWindow && pluginWindow->isVisible())
68 wasExplicitlyClosed =
true;
74bool PluginWindowState::isWindowShowing()
const
76 return pluginWindow !=
nullptr && pluginWindow->isVisible();
79void PluginWindowState::recreateWindowIfShowing()
85void PluginWindowState::hideWindowForShutdown()
91void PluginWindowState::pickDefaultWindowBounds()
93 lastWindowBounds = { 100, 100, 600, 500 };
95 if (
auto focused = juce::Component::getCurrentlyFocusedComponent())
96 lastWindowBounds.setPosition (focused->getTopLevelComponent()->getPosition()
100void PluginWindowState::showWindow()
108 const auto displayRects = []
112 for (
auto rect :
juce::Desktop::getInstance().getDisplays().getRectangleList (true))
113 trimmedDisplays.addWithoutMerging (rect.withTrimmedLeft (100).withTrimmedRight (100).withTrimmedBottom (100));
115 return trimmedDisplays;
120 if (lastWindowBounds.isEmpty() || ! windowBoundsIsOnScreen)
121 pickDefaultWindowBounds();
124 pluginWindow = engine.getUIBehaviour().createPluginWindow (*
this);
126 if (oldFocus !=
nullptr)
127 oldFocus->grabKeyboardFocus();
133 pluginWindow->setVisible (
true);
134 pluginWindow->toFront (
false);
140 bool isShowing = isWindowShowing();
148 closeWindowExplicitly();
150 showWindowExplicitly();
152 else if (! (isShowing || engine.getPluginManager().doubleClickToOpenWindows()))
154 showWindowExplicitly();
158void PluginWindowState::timerCallback()
162 if (windowShowerCount > 0)
164 if ((pluginWindow ==
nullptr || ! pluginWindow->isVisible())
165 && ! (engine.getPluginManager().doubleClickToOpenWindows() || wasExplicitlyClosed))
168 else if (! windowLocked)
int getNumberOfClicks() const noexcept
bool intersectsRectangle(RectangleType rectangleToCheck) const noexcept
static Time JUCE_CALLTYPE getCurrentTime() noexcept
static int getNumTopLevelWindows() noexcept
static TopLevelWindow * getTopLevelWindow(int index) noexcept