Skip to content

Instantly share code, notes, and snippets.

@DustVoice
Created March 29, 2019 20:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DustVoice/44fbc972f6d0a67717fb057ae9ee82ec to your computer and use it in GitHub Desktop.
Save DustVoice/44fbc972f6d0a67717fb057ae9ee82ec to your computer and use it in GitHub Desktop.
#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