@@ -15,9 +15,6 @@ LINK_FLAGS += $(DGL_LIBS) | |||
ifneq ($(MACOS_OLD),true) | |||
# needed by sofd right now, fix later | |||
BUILD_CXX_FLAGS += -Wno-type-limits -fpermissive | |||
# needed by stb_image | |||
BUILD_CXX_FLAGS += -Wno-misleading-indentation -Wno-shift-negative-value | |||
endif | |||
# -------------------------------------------------------------- | |||
@@ -34,6 +34,7 @@ class StandaloneWindow; | |||
class Window | |||
{ | |||
public: | |||
#ifndef DGL_FILE_BROWSER_DISABLED | |||
/** | |||
File browser options. | |||
*/ | |||
@@ -70,6 +71,7 @@ public: | |||
height(0), | |||
buttons() {} | |||
}; | |||
#endif // DGL_FILE_BROWSER_DISABLED | |||
explicit Window(Application& app); | |||
explicit Window(Application& app, Window& parent); | |||
@@ -84,7 +86,9 @@ public: | |||
void focus(); | |||
void repaint() noexcept; | |||
#ifndef DGL_FILE_BROWSER_DISABLED | |||
bool openFileBrowser(const FileBrowserOptions& options); | |||
#endif | |||
bool isVisible() const noexcept; | |||
void setVisible(bool yesNo); | |||
@@ -115,7 +119,9 @@ protected: | |||
virtual void onReshape(uint width, uint height); | |||
virtual void onClose(); | |||
#ifndef DGL_FILE_BROWSER_DISABLED | |||
virtual void fileBrowserSelected(const char* filename); | |||
#endif | |||
private: | |||
struct PrivateData; | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* DISTRHO Plugin Framework (DPF) | |||
* Copyright (C) 2012-2016 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2012-2018 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -972,8 +972,18 @@ END_NAMESPACE_DGL | |||
#undef final | |||
#if defined(__GNUC__) && (__GNUC__ >= 6) | |||
# pragma GCC diagnostic push | |||
# pragma GCC diagnostic ignored "-Wmisleading-indentation" | |||
# pragma GCC diagnostic ignored "-Wshift-negative-value" | |||
#endif | |||
extern "C" { | |||
#include "nanovg/nanovg.c" | |||
} | |||
#if defined(__GNUC__) && (__GNUC__ >= 6) | |||
# pragma GCC diagnostic pop | |||
#endif | |||
// ----------------------------------------------------------------------- |
@@ -1,6 +1,6 @@ | |||
/* | |||
* DISTRHO Plugin Framework (DPF) | |||
* Copyright (C) 2012-2016 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2012-2018 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -25,6 +25,11 @@ | |||
#include "pugl/pugl.h" | |||
#if defined(__GNUC__) && (__GNUC__ >= 7) | |||
# pragma GCC diagnostic push | |||
# pragma GCC diagnostic ignored "-Wimplicit-fallthrough" | |||
#endif | |||
#if defined(DISTRHO_OS_WINDOWS) | |||
# include "pugl/pugl_win.cpp" | |||
#elif defined(DISTRHO_OS_MAC) | |||
@@ -37,6 +42,10 @@ extern "C" { | |||
} | |||
#endif | |||
#if defined(__GNUC__) && (__GNUC__ >= 7) | |||
# pragma GCC diagnostic pop | |||
#endif | |||
#include "ApplicationPrivateData.hpp" | |||
#include "WidgetPrivateData.hpp" | |||
#include "../StandaloneWindow.hpp" | |||
@@ -123,11 +132,14 @@ struct Window::PrivateData { | |||
#if defined(DISTRHO_OS_WINDOWS) | |||
// TODO | |||
#elif defined(DISTRHO_OS_MAC) | |||
// TODO | |||
//[parentImpl->window orderWindow:NSWindowBelow relativeTo:[[mView window] windowNumber]]; | |||
[parentImpl->window orderWindow:NSWindowBelow relativeTo:[[mView window] windowNumber]]; | |||
#else | |||
XSetTransientForHint(xDisplay, xWindow, parentImpl->win); | |||
#endif | |||
return; | |||
// maybe unused | |||
(void)parentImpl; | |||
} | |||
PrivateData(Application& app, Window* const self, const intptr_t parentId) | |||
@@ -196,7 +208,9 @@ struct Window::PrivateData { | |||
puglSetSpecialFunc(fView, onSpecialCallback); | |||
puglSetReshapeFunc(fView, onReshapeCallback); | |||
puglSetCloseFunc(fView, onCloseCallback); | |||
#ifndef DGL_FILE_BROWSER_DISABLED | |||
puglSetFileSelectedFunc(fView, fileBrowserSelectedCallback); | |||
#endif | |||
puglCreateWindow(fView, nullptr); | |||
@@ -390,11 +404,7 @@ struct Window::PrivateData { | |||
SetFocus(hwnd); | |||
#elif defined(DISTRHO_OS_MAC) | |||
if (mWindow != nullptr) | |||
{ | |||
// TODO | |||
//[NSApp activateIgnoringOtherApps:YES]; | |||
//[mWindow makeKeyAndOrderFront:mWindow]; | |||
} | |||
[mWindow makeKeyWindow]; | |||
#else | |||
XRaiseWindow(xDisplay, xWindow); | |||
XSetInputFocus(xDisplay, xWindow, RevertToPointerRoot, CurrentTime); | |||
@@ -613,10 +623,17 @@ struct Window::PrivateData { | |||
void setTransientWinId(const uintptr_t winId) | |||
{ | |||
DISTRHO_SAFE_ASSERT_RETURN(winId != 0,); | |||
#if defined(DISTRHO_OS_WINDOWS) | |||
// TODO | |||
#elif defined(DISTRHO_OS_MAC) | |||
// TODO | |||
NSWindow* const window = [NSApp windowWithWindowNumber:winId]; | |||
DISTRHO_SAFE_ASSERT_RETURN(window != nullptr,); | |||
[window addChildWindow:mWindow | |||
ordered:NSWindowAbove]; | |||
[mWindow makeKeyWindow]; | |||
#else | |||
XSetTransientForHint(xDisplay, xWindow, static_cast< ::Window>(winId)); | |||
#endif | |||
@@ -1022,10 +1039,12 @@ struct Window::PrivateData { | |||
handlePtr->onPuglClose(); | |||
} | |||
#ifndef DGL_FILE_BROWSER_DISABLED | |||
static void fileBrowserSelectedCallback(PuglView* view, const char* filename) | |||
{ | |||
handlePtr->fSelf->fileBrowserSelected(filename); | |||
} | |||
#endif | |||
#undef handlePtr | |||
@@ -1085,9 +1104,10 @@ void Window::repaint() noexcept | |||
// (void)name; | |||
// } | |||
#ifndef DGL_FILE_BROWSER_DISABLED | |||
bool Window::openFileBrowser(const FileBrowserOptions& options) | |||
{ | |||
#ifdef SOFD_HAVE_X11 | |||
# ifdef SOFD_HAVE_X11 | |||
using DISTRHO_NAMESPACE::String; | |||
// -------------------------------------------------------------------------- | |||
@@ -1145,11 +1165,12 @@ bool Window::openFileBrowser(const FileBrowserOptions& options) | |||
// show | |||
return (x_fib_show(pData->xDisplay, pData->xWindow, /*options.width*/0, /*options.height*/0) == 0); | |||
#else | |||
# else | |||
// not implemented | |||
return false; | |||
#endif | |||
# endif | |||
} | |||
#endif | |||
bool Window::isVisible() const noexcept | |||
{ | |||
@@ -1280,9 +1301,21 @@ void Window::onClose() | |||
{ | |||
} | |||
#ifndef DGL_FILE_BROWSER_DISABLED | |||
void Window::fileBrowserSelected(const char*) | |||
{ | |||
} | |||
#endif | |||
bool Window::handlePluginKeyboard(const bool press, const uint key) | |||
{ | |||
return pData->handlePluginKeyboard(press, key); | |||
} | |||
bool Window::handlePluginSpecial(const bool press, const Key key) | |||
{ | |||
return pData->handlePluginSpecial(press, key); | |||
} | |||
bool Window::handlePluginKeyboard(const bool press, const uint key) | |||
{ | |||
@@ -24,6 +24,9 @@ | |||
#include "pugl_internal.h" | |||
#define PuglWindow PuglWindow ## DGL_NAMESPACE | |||
#define PuglOpenGLView PuglOpenGLView ## DGL_NAMESPACE | |||
@interface PuglWindow : NSWindow | |||
{ | |||
@public | |||
@@ -438,13 +441,11 @@ void | |||
puglLeaveContext(PuglView* view, bool flush) | |||
{ | |||
#ifdef PUGL_HAVE_GL | |||
if (view->ctx_type == PUGL_GL) { | |||
if (flush) { | |||
if (view->impl->glview->doubleBuffered) { | |||
[[view->impl->glview openGLContext] flushBuffer]; | |||
} else { | |||
glFlush(); | |||
} | |||
if (view->ctx_type == PUGL_GL && flush) { | |||
if (view->impl->glview->doubleBuffered) { | |||
[[view->impl->glview openGLContext] flushBuffer]; | |||
} else { | |||
glFlush(); | |||
} | |||
//[NSOpenGLContext clearCurrentContext]; | |||
} | |||
@@ -572,4 +573,7 @@ void* | |||
puglGetContext(PuglView* view) | |||
{ | |||
return NULL; | |||
// unused | |||
(void)view; | |||
} |
@@ -41,9 +41,11 @@ | |||
#include "pugl/pugl_internal.h" | |||
#ifndef DGL_FILE_BROWSER_DISABLED | |||
#define SOFD_HAVE_X11 | |||
#include "../sofd/libsofd.h" | |||
#include "../sofd/libsofd.c" | |||
#endif | |||
struct PuglInternalsImpl { | |||
Display* display; | |||
@@ -339,7 +341,9 @@ puglDestroy(PuglView* view) | |||
return; | |||
} | |||
#ifndef DGL_FILE_BROWSER_DISABLED | |||
x_fib_close(view->impl->display); | |||
#endif | |||
destroyContext(view); | |||
XDestroyWindow(view->impl->display, view->impl->win); | |||
@@ -477,6 +481,7 @@ puglProcessEvents(PuglView* view) | |||
while (XPending(view->impl->display) > 0) { | |||
XNextEvent(view->impl->display, &event); | |||
#ifndef DGL_FILE_BROWSER_DISABLED | |||
if (x_fib_handle_events(view->impl->display, &event)) { | |||
const int status = x_fib_status(); | |||
@@ -495,6 +500,7 @@ puglProcessEvents(PuglView* view) | |||
} | |||
break; | |||
} | |||
#endif | |||
if (event.xany.window != view->impl->win && | |||
(view->parent == 0 || event.xany.window != (Window)view->parent)) { | |||
@@ -25,10 +25,10 @@ | |||
typedef DISTRHO_NAMESPACE::ExternalWindow UIWidget; | |||
#elif DISTRHO_UI_USE_NANOVG | |||
# include "../dgl/NanoVG.hpp" | |||
typedef DGL::NanoWidget UIWidget; | |||
typedef DGL_NAMESPACE::NanoWidget UIWidget; | |||
#else | |||
# include "../dgl/Widget.hpp" | |||
typedef DGL::Widget UIWidget; | |||
typedef DGL_NAMESPACE::Widget UIWidget; | |||
#endif | |||
START_NAMESPACE_DISTRHO | |||
@@ -175,11 +175,13 @@ protected: | |||
*/ | |||
virtual void uiIdle() {} | |||
#ifndef DGL_FILE_BROWSER_DISABLED | |||
/** | |||
File browser selected function. | |||
@see Window::fileBrowserSelected(const char*) | |||
*/ | |||
virtual void uiFileBrowserSelected(const char* filename); | |||
#endif | |||
/** | |||
OpenGL window reshape function, called when parent window is resized. | |||
@@ -212,7 +214,7 @@ private: | |||
void setAbsoluteX(int) const noexcept {} | |||
void setAbsoluteY(int) const noexcept {} | |||
void setAbsolutePos(int, int) const noexcept {} | |||
void setAbsolutePos(const DGL::Point<int>&) const noexcept {} | |||
void setAbsolutePos(const DGL_NAMESPACE::Point<int>&) const noexcept {} | |||
#endif | |||
DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(UI) | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* DISTRHO Plugin Framework (DPF) | |||
* Copyright (C) 2012-2016 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2012-2018 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -33,7 +33,7 @@ | |||
# include <stdint.h> | |||
#endif | |||
#if defined(DISTRHO_OS_MAC) && ! defined(CARLA_OS_MAC) && ! (defined(DISTRHO_PROPER_CPP11_SUPPORT) && defined(__clang__)) | |||
#if defined(DISTRHO_OS_MAC) && ! defined(CARLA_OS_MAC) && ! defined(DISTRHO_PROPER_CPP11_SUPPORT) | |||
namespace std { | |||
inline float fmin(float __x, float __y) | |||
{ return __builtin_fminf(__x, __y); } | |||
@@ -125,9 +125,11 @@ void UI::sampleRateChanged(double) {} | |||
/* ------------------------------------------------------------------------------------------------------------ | |||
* UI Callbacks (optional) */ | |||
#ifndef DGL_FILE_BROWSER_DISABLED | |||
void UI::uiFileBrowserSelected(const char*) | |||
{ | |||
} | |||
#endif | |||
void UI::uiReshape(uint width, uint height) | |||
{ | |||
@@ -22,9 +22,9 @@ | |||
#ifdef HAVE_DGL | |||
# include "../../dgl/Application.hpp" | |||
# include "../../dgl/Window.hpp" | |||
using DGL::Application; | |||
using DGL::IdleCallback; | |||
using DGL::Window; | |||
using DGL_NAMESPACE::Application; | |||
using DGL_NAMESPACE::IdleCallback; | |||
using DGL_NAMESPACE::Window; | |||
#endif | |||
START_NAMESPACE_DISTRHO | |||
@@ -186,6 +186,7 @@ protected: | |||
fIsReady = true; | |||
} | |||
#ifndef DGL_FILE_BROWSER_DISABLED | |||
// custom file-browser selected | |||
void fileBrowserSelected(const char* filename) override | |||
{ | |||
@@ -193,6 +194,7 @@ protected: | |||
fUI->uiFileBrowserSelected(filename); | |||
} | |||
#endif | |||
private: | |||
UI* const fUI; | |||