110 lines
3.4 KiB
C++
110 lines
3.4 KiB
C++
#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<MainWindow>(getApplicationName());
|
|
|
|
openGlContext = make_unique<OpenGLContext>();
|
|
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<DefaultLookAndFeel>(LookAndFeel_V4::getLightColourScheme());
|
|
#else
|
|
defaultLookAndFeel = make_unique<DefaultLookAndFeel>(LookAndFeel_V4::getDarkColourScheme());
|
|
#endif
|
|
LookAndFeel::setDefaultLookAndFeel(defaultLookAndFeel.get());
|
|
|
|
viewport = make_unique<Viewport>();
|
|
defaultComponent = make_unique<Component>();
|
|
|
|
viewport->setViewedComponent(defaultComponent.get(), false);
|
|
viewport->setScrollBarsShown(true, false, true, false);
|
|
viewport->setScrollOnDragEnabled(true);
|
|
|
|
#if JUCE_IOS || JUCE_ANDROID
|
|
Rectangle<int> area = Desktop::getInstance().getDisplays().getMainDisplay().totalArea;
|
|
#else
|
|
Rectangle<int> area = Rectangle<int>(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> defaultLookAndFeel;
|
|
|
|
unique_ptr<Viewport> viewport;
|
|
|
|
unique_ptr<Component> defaultComponent;
|
|
|
|
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MainWindow)
|
|
};
|
|
|
|
private:
|
|
unique_ptr<MainWindow> mainWindow;
|
|
|
|
unique_ptr<OpenGLContext> openGlContext;
|
|
};
|
|
|
|
START_JUCE_APPLICATION(MainApplication)
|