bool ResizableWindow::restoreWindowStateFromString (const String& s) { StringArray tokens; tokens.addTokens (s, false); tokens.removeEmptyStrings(); tokens.trim(); const bool fs = tokens[0].startsWithIgnoreCase ("fs"); const int firstCoord = fs ? 1 : 0; if (tokens.size() != firstCoord + 4) return false; Rectangle<int> newPos (tokens[firstCoord].getIntValue(), tokens[firstCoord + 1].getIntValue(), tokens[firstCoord + 2].getIntValue(), tokens[firstCoord + 3].getIntValue()); if (newPos.isEmpty()) return false; ComponentPeer* const peer = isOnDesktop() ? getPeer() : nullptr; if (peer != nullptr) peer->getFrameSize().addTo (newPos); { Desktop& desktop = Desktop::getInstance(); RectangleList allMonitors (desktop.getDisplays().getRectangleList (true)); allMonitors.clipTo (newPos); const Rectangle<int> onScreenArea (allMonitors.getBounds()); if (onScreenArea.getWidth() * onScreenArea.getHeight() < 32 * 32) { const Rectangle<int> screen (desktop.getDisplays().getDisplayContaining (newPos.getCentre()).userArea); newPos.setSize (jmin (newPos.getWidth(), screen.getWidth()), jmin (newPos.getHeight(), screen.getHeight())); newPos.setPosition (jlimit (screen.getX(), screen.getRight() - newPos.getWidth(), newPos.getX()), jlimit (screen.getY(), screen.getBottom() - newPos.getHeight(), newPos.getY())); } } if (peer != nullptr) { peer->getFrameSize().subtractFrom (newPos); peer->setNonFullScreenBounds (newPos); } lastNonFullScreenPos = newPos; setFullScreen (fs); if (! fs) setBoundsConstrained (newPos); return true; }
void ResizableWindow::setResizeLimits (const int newMinimumWidth, const int newMinimumHeight, const int newMaximumWidth, const int newMaximumHeight) noexcept { // if you've set up a custom constrainer then these settings won't have any effect.. jassert (constrainer == &defaultConstrainer || constrainer == nullptr); if (constrainer == nullptr) setConstrainer (&defaultConstrainer); defaultConstrainer.setSizeLimits (newMinimumWidth, newMinimumHeight, newMaximumWidth, newMaximumHeight); setBoundsConstrained (getBounds()); }
void AudioProcessorEditor::setResizeLimits (int newMinimumWidth, int newMinimumHeight, int newMaximumWidth, int newMaximumHeight) noexcept { // if you've set up a custom constrainer then these settings won't have any effect.. jassert (constrainer == &defaultConstrainer || constrainer == nullptr); const bool shouldEnableResize = (newMinimumWidth != newMaximumWidth || newMinimumHeight != newMaximumHeight); const bool shouldHaveCornerResizer = (shouldEnableResize != resizable || resizableCorner != nullptr); setResizable (shouldEnableResize, shouldHaveCornerResizer); if (constrainer == nullptr) setConstrainer (&defaultConstrainer); defaultConstrainer.setSizeLimits (newMinimumWidth, newMinimumHeight, newMaximumWidth, newMaximumHeight); setBoundsConstrained (getBounds()); }
//============================================================================== StandaloneFilterWindow::StandaloneFilterWindow (const String& title, const Colour& backgroundColour) : DocumentWindow (title, backgroundColour, DocumentWindow::minimiseButton | DocumentWindow::closeButton), filter (0), deviceManager (0), optionsButton (0) { setTitleBarButtonsRequired (DocumentWindow::minimiseButton | DocumentWindow::closeButton, false); PropertySet* const globalSettings = getGlobalSettings(); optionsButton = new TextButton (T("options")); Component::addAndMakeVisible (optionsButton); optionsButton->addButtonListener (this); optionsButton->setTriggeredOnMouseDown (true); JUCE_TRY { filter = createPluginFilter(); if (filter != 0) { deviceManager = new AudioFilterStreamingDeviceManager(); deviceManager->setFilter (filter); XmlElement* savedState = 0; if (globalSettings != 0) savedState = globalSettings->getXmlValue (T("audioSetup")); deviceManager->initialise (filter->getNumInputChannels(), filter->getNumOutputChannels(), savedState, true); delete savedState; if (globalSettings != 0) { JUCE_NAMESPACE::MemoryBlock data; if (data.fromBase64Encoding (globalSettings->getValue (T("filterState"))) && data.getSize() > 0) { filter->setStateInformation (data.getData(), data.getSize()); } } setContentComponent (filter->createEditorIfNeeded(), true, true); const int x = globalSettings->getIntValue (T("windowX"), -100); const int y = globalSettings->getIntValue (T("windowY"), -100); if (x != -100 && y != -100) setBoundsConstrained (x, y, getWidth(), getHeight()); else centreWithSize (getWidth(), getHeight()); } } JUCE_CATCH_ALL if (deviceManager == 0) { jassertfalse // Your filter didn't create correctly! In a standalone app that's not too great. JUCEApplication::quit(); } }