Created
March 29, 2019 20:08
-
-
Save DustVoice/44fbc972f6d0a67717fb057ae9ee82ec to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "AdditionalFuncs.h" | |
#include "Callback.h" | |
#include "DefaultLookAndFeel.h" | |
#include "JuceHeader.h" | |
#include "WindowManager.h" | |
class CommuniCare_Client : public JUCEApplication | |
{ | |
public: | |
CommuniCare_Client() {} | |
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 backButtonPressed() override | |
{ | |
Callback::call(Callback::BackPressCallback); | |
} | |
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>(); | |
windowManager = make_unique<WindowManager>(); | |
viewport = make_unique<Viewport>(); | |
viewport->setViewedComponent(windowManager.get(), false); | |
viewport->setScrollBarsShown(true, false, true, false); | |
viewport->setScrollOnDragEnabled(true); | |
#if JUCE_IOS || JUCE_ANDROID | |
displayArea = Desktop::getInstance().getDisplays().getMainDisplay().totalArea; | |
#else | |
displayArea = Rectangle<int>(0, 0, 500, 800); | |
#endif | |
int minDim = min(displayArea.getWidth(), displayArea.getHeight()); | |
int maxDim = max(displayArea.getWidth(), displayArea.getHeight()); | |
if (AdditionalFuncs::isUpright()) | |
{ | |
viewport->setSize(minDim, maxDim); | |
} | |
else | |
{ | |
viewport->setSize(maxDim, minDim); | |
} | |
windowManager->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)); | |
} | |
void resized() override | |
{ | |
#if JUCE_IOS || JUCE_ANDROID | |
if (viewport != nullptr && windowManager != nullptr && !lockResize) | |
{ | |
lockResize = true; | |
int minDim = min(displayArea.getWidth(), displayArea.getHeight()); | |
int maxDim = max(displayArea.getWidth(), displayArea.getHeight()); | |
if (AdditionalFuncs::isUpright()) | |
{ | |
viewport->setSize(minDim, maxDim); | |
} | |
else | |
{ | |
viewport->setSize(maxDim, minDim); | |
} | |
windowManager->setSize(viewport->getWidth() - (viewport->isVerticalScrollBarShown() ? viewport->getScrollBarThickness() : 0), viewport->getHeight() - (viewport->isHorizontalScrollBarShown() ? viewport->getScrollBarThickness() : 0) + 200); | |
Timer::callAfterDelay(500, [this] () { this->lockResize = false; }); | |
} | |
#endif | |
} | |
private: | |
Rectangle<int> displayArea; | |
bool lockResize = false; | |
unique_ptr<DefaultLookAndFeel> defaultLookAndFeel; | |
unique_ptr<Viewport> viewport; | |
unique_ptr<WindowManager> windowManager; | |
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MainWindow) | |
}; | |
private: | |
unique_ptr<MainWindow> mainWindow; | |
unique_ptr<OpenGLContext> openGlContext; | |
}; | |
START_JUCE_APPLICATION(CommuniCare_Client) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment