#include "DefaultLookAndFeel.h" #include "JuceHeader.h" class MainApplication : public JUCEApplication { public: MainApplication() {} const String getApplicationName() override { return ProjectInfo::projectName; } const String getApplicationVersion() override { return ProjectInfo::versionString; } bool moreThanOneInstanceAllowed() override { return true; } void initialise(const String& commandLine) override { mainWindow = make_unique(getApplicationName()); openGlContext = make_unique(); openGlContext->attachTo(*mainWindow); } void shutdown() override { openGlContext->detach(); openGlContext = nullptr; mainWindow = nullptr; } void systemRequestedQuit() override { quit(); } void anotherInstanceStarted(const String& commandLine) override { } class MainWindow : public DocumentWindow { public: MainWindow(String name) : DocumentWindow(name, Desktop::getInstance().getDefaultLookAndFeel().findColour(ResizableWindow::backgroundColourId), DocumentWindow::allButtons) { #ifdef JUCE_TITLE_BAR setUsingNativeTitleBar(false); #else setUsingNativeTitleBar(true); #endif #ifdef USE_LIGHT_COLORSCHEME defaultLookAndFeel = make_unique(LookAndFeel_V4::getLightColourScheme()); #else defaultLookAndFeel = make_unique(LookAndFeel_V4::getDarkColourScheme()); #endif LookAndFeel::setDefaultLookAndFeel(defaultLookAndFeel.get()); viewport = make_unique(); defaultComponent = make_unique(); viewport->setViewedComponent(defaultComponent.get(), false); viewport->setScrollBarsShown(true, false, true, false); viewport->setScrollOnDragEnabled(true); #if JUCE_IOS || JUCE_ANDROID Rectangle area = Desktop::getInstance().getDisplays().getMainDisplay().totalArea; #else Rectangle area = Rectangle(0, 0, 500, 800); #endif viewport->setSize(area.getWidth(), area.getHeight()); defaultComponent->setSize(viewport->getWidth() - (viewport->isVerticalScrollBarShown() ? viewport->getScrollBarThickness() : 0), viewport->getHeight() - (viewport->isHorizontalScrollBarShown() ? viewport->getScrollBarThickness() : 0) + 200); setContentOwned(viewport.get(), true); #if JUCE_IOS || JUCE_ANDROID setFullScreen(true); #else setResizable(true, true); centreWithSize(viewport->getWidth(), viewport->getHeight()); #endif setVisible(true); } void closeButtonPressed() override { JUCEApplication::getInstance()->systemRequestedQuit(); } void paint(Graphics& g) override { g.fillAll(getLookAndFeel().findColour(ResizableWindow::backgroundColourId)); } private: unique_ptr defaultLookAndFeel; unique_ptr viewport; unique_ptr defaultComponent; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MainWindow) }; private: unique_ptr mainWindow; unique_ptr openGlContext; }; START_JUCE_APPLICATION(MainApplication)