JUCE_Template/Source/Main.cpp

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)