| @@ -266,17 +266,6 @@ void Window::PrivateData::initPre(const uint width, const uint height, const boo | |||
| #endif | |||
| puglSetViewHint(view, PUGL_STENCIL_BITS, 8); | |||
| #if defined(DGL_USE_OPENGL3) || defined(DGL_USE_GLES3) | |||
| puglSetViewHint(view, PUGL_USE_COMPAT_PROFILE, PUGL_FALSE); | |||
| puglSetViewHint(view, PUGL_CONTEXT_VERSION_MAJOR, 3); | |||
| #elif defined(DGL_USE_GLES2) | |||
| puglSetViewHint(view, PUGL_USE_COMPAT_PROFILE, PUGL_FALSE); | |||
| puglSetViewHint(view, PUGL_CONTEXT_VERSION_MAJOR, 2); | |||
| #else | |||
| puglSetViewHint(view, PUGL_USE_COMPAT_PROFILE, PUGL_TRUE); | |||
| puglSetViewHint(view, PUGL_CONTEXT_VERSION_MAJOR, 2); | |||
| #endif | |||
| // PUGL_SAMPLES ?? | |||
| puglSetEventFunc(view, puglEventCallback); | |||
| @@ -32,6 +32,37 @@ | |||
| #ifndef NVG_NO_STB | |||
| #define STB_IMAGE_IMPLEMENTATION | |||
| #define stbi_convert_iphone_png_to_rgb dpf_stbi_convert_iphone_png_to_rgb | |||
| #define stbi_failure_reason dpf_stbi_failure_reason | |||
| #define stbi_hdr_to_ldr_gamma dpf_stbi_hdr_to_ldr_gamma | |||
| #define stbi_hdr_to_ldr_scale dpf_stbi_hdr_to_ldr_scale | |||
| #define stbi_image_free dpf_stbi_image_free | |||
| #define stbi_info dpf_stbi_info | |||
| #define stbi_info_from_callbacks dpf_stbi_info_from_callbacks | |||
| #define stbi_info_from_file dpf_stbi_info_from_file | |||
| #define stbi_info_from_memory dpf_stbi_info_from_memory | |||
| #define stbi_is_hdr dpf_stbi_is_hdr | |||
| #define stbi_is_hdr_from_callbacks dpf_stbi_is_hdr_from_callbacks | |||
| #define stbi_is_hdr_from_file dpf_stbi_is_hdr_from_file | |||
| #define stbi_is_hdr_from_memory dpf_stbi_is_hdr_from_memory | |||
| #define stbi_ldr_to_hdr_gamma dpf_stbi_ldr_to_hdr_gamma | |||
| #define stbi_ldr_to_hdr_scale dpf_stbi_ldr_to_hdr_scale | |||
| #define stbi_load dpf_stbi_load | |||
| #define stbi_load_from_callbacks dpf_stbi_load_from_callbacks | |||
| #define stbi_load_from_file dpf_stbi_load_from_file | |||
| #define stbi_load_from_memory dpf_stbi_load_from_memory | |||
| #define stbi_loadf dpf_stbi_loadf | |||
| #define stbi_loadf_from_callbacks dpf_stbi_loadf_from_callbacks | |||
| #define stbi_loadf_from_file dpf_stbi_loadf_from_file | |||
| #define stbi_loadf_from_memory dpf_stbi_loadf_from_memory | |||
| #define stbi_set_flip_vertically_on_load dpf_stbi_set_flip_vertically_on_load | |||
| #define stbi_set_unpremultiply_on_load dpf_stbi_set_unpremultiply_on_load | |||
| #define stbi_zlib_decode_buffer dpf_stbi_zlib_decode_buffer | |||
| #define stbi_zlib_decode_malloc dpf_stbi_zlib_decode_malloc | |||
| #define stbi_zlib_decode_malloc_guesssize dpf_stbi_zlib_decode_malloc_guesssize | |||
| #define stbi_zlib_decode_malloc_guesssize_headerflag dpf_stbi_zlib_decode_malloc_guesssize_headerflag | |||
| #define stbi_zlib_decode_noheader_buffer dpf_stbi_zlib_decode_noheader_buffer | |||
| #define stbi_zlib_decode_noheader_malloc dpf_stbi_zlib_decode_noheader_malloc | |||
| #include "stb_image.h" | |||
| #endif | |||
| @@ -44,9 +44,6 @@ | |||
| # ifdef DGL_CAIRO | |||
| # include <cairo-quartz.h> | |||
| # endif | |||
| # ifdef DGL_OPENGL | |||
| # include <OpenGL/gl.h> | |||
| # endif | |||
| # ifdef DGL_VULKAN | |||
| # import <QuartzCore/CAMetalLayer.h> | |||
| # include <vulkan/vulkan_macos.h> | |||
| @@ -204,17 +201,35 @@ bool puglBackendLeave(PuglView* const view) | |||
| void puglSetMatchingBackendForCurrentBuild(PuglView* const view) | |||
| { | |||
| #ifdef DGL_CAIRO | |||
| #ifdef DGL_CAIRO | |||
| puglSetBackend(view, puglCairoBackend()); | |||
| #endif | |||
| #ifdef DGL_OPENGL | |||
| #endif | |||
| #ifdef DGL_OPENGL | |||
| puglSetBackend(view, puglGlBackend()); | |||
| #endif | |||
| #ifdef DGL_VULKAN | |||
| #endif | |||
| #ifdef DGL_VULKAN | |||
| puglSetBackend(view, puglVulkanBackend()); | |||
| #endif | |||
| if (view->backend == nullptr) | |||
| #endif | |||
| if (view->backend != nullptr) | |||
| { | |||
| #ifdef DGL_OPENGL | |||
| #if defined(DGL_USE_OPENGL3) || defined(DGL_USE_GLES3) | |||
| puglSetViewHint(view, PUGL_USE_COMPAT_PROFILE, PUGL_FALSE); | |||
| puglSetViewHint(view, PUGL_CONTEXT_VERSION_MAJOR, 3); | |||
| #elif defined(DGL_USE_GLES2) | |||
| puglSetViewHint(view, PUGL_USE_COMPAT_PROFILE, PUGL_FALSE); | |||
| puglSetViewHint(view, PUGL_CONTEXT_VERSION_MAJOR, 2); | |||
| #else | |||
| puglSetViewHint(view, PUGL_USE_COMPAT_PROFILE, PUGL_TRUE); | |||
| puglSetViewHint(view, PUGL_CONTEXT_VERSION_MAJOR, 2); | |||
| #endif | |||
| #endif | |||
| } | |||
| else | |||
| { | |||
| puglSetBackend(view, puglStubBackend()); | |||
| } | |||
| } | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| @@ -406,12 +421,12 @@ PuglStatus puglSetSizeAndDefault(PuglView* view, uint width, uint height) | |||
| void puglOnDisplayPrepare(PuglView*) | |||
| { | |||
| #ifdef DGL_OPENGL | |||
| #ifdef DGL_OPENGL | |||
| glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | |||
| # ifndef DGL_USE_GLES | |||
| #ifndef DGL_USE_OPENGL3 | |||
| glLoadIdentity(); | |||
| # endif | |||
| #endif | |||
| #endif | |||
| #endif | |||
| } | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| @@ -419,24 +434,24 @@ void puglOnDisplayPrepare(PuglView*) | |||
| void puglFallbackOnResize(PuglView* const view) | |||
| { | |||
| #ifdef DGL_OPENGL | |||
| #ifdef DGL_OPENGL | |||
| glEnable(GL_BLEND); | |||
| glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | |||
| # ifndef DGL_USE_GLES | |||
| #ifdef DGL_USE_OPENGL3 | |||
| glViewport(0, 0, static_cast<GLsizei>(view->frame.width), static_cast<GLsizei>(view->frame.height)); | |||
| #else | |||
| glMatrixMode(GL_PROJECTION); | |||
| glLoadIdentity(); | |||
| glOrtho(0.0, static_cast<GLdouble>(view->frame.width), static_cast<GLdouble>(view->frame.height), 0.0, 0.0, 1.0); | |||
| glViewport(0, 0, static_cast<GLsizei>(view->frame.width), static_cast<GLsizei>(view->frame.height)); | |||
| glMatrixMode(GL_MODELVIEW); | |||
| glLoadIdentity(); | |||
| # else | |||
| glViewport(0, 0, static_cast<GLsizei>(view->frame.width), static_cast<GLsizei>(view->frame.height)); | |||
| # endif | |||
| #else | |||
| #endif | |||
| #else | |||
| return; | |||
| // unused | |||
| (void)view; | |||
| #endif | |||
| #endif | |||
| } | |||
| // -------------------------------------------------------------------------------------------------------------------- | |||
| @@ -297,6 +297,14 @@ bool DistrhoUIProM::onKeyboard(const KeyboardEvent& ev) | |||
| return true; | |||
| } | |||
| bool DistrhoUIProM::onMouse(const MouseEvent& ev) | |||
| { | |||
| if (ev.press) | |||
| getWindow().focus(); | |||
| return false; | |||
| } | |||
| // ----------------------------------------------------------------------- | |||
| UI* createUI() | |||
| @@ -49,6 +49,7 @@ protected: | |||
| void onDisplay() override; | |||
| bool onKeyboard(const KeyboardEvent&) override; | |||
| bool onMouse(const MouseEvent& ev) override; | |||
| private: | |||
| ScopedPointer<projectM> fPM; | |||
| @@ -16,18 +16,17 @@ | |||
| #pragma once | |||
| #include "TopLevelWidget.hpp" | |||
| #include "Color.hpp" | |||
| #include "NanoVG.hpp" | |||
| START_NAMESPACE_DGL | |||
| /** Resize handle for DPF windows, will sit on bottom-right. */ | |||
| class ResizeHandle : public TopLevelWidget | |||
| class ResizeHandle : public NanoTopLevelWidget | |||
| { | |||
| public: | |||
| /** Overloaded constructor, will fetch the window from an existing top-level widget. */ | |||
| explicit ResizeHandle(TopLevelWidget* const tlw) | |||
| : TopLevelWidget(tlw->getWindow()), | |||
| : NanoTopLevelWidget(tlw->getWindow()), | |||
| handleSize(16), | |||
| hasCursor(false), | |||
| isResizing(false) | |||
| @@ -44,22 +43,19 @@ public: | |||
| } | |||
| protected: | |||
| void onDisplay() override | |||
| void onNanoDisplay() override | |||
| { | |||
| const GraphicsContext& context(getGraphicsContext()); | |||
| const double lineWidth = 1.0 * getScaleFactor(); | |||
| glMatrixMode(GL_MODELVIEW); | |||
| glLineWidth(lineWidth); | |||
| strokeWidth(lineWidth); | |||
| // draw white lines, 1px wide | |||
| glColor3f(1.0f, 1.0f, 1.0f); | |||
| strokeColor(Color(1.0f, 1.0f, 1.0f)); | |||
| drawLine(l1); | |||
| drawLine(l2); | |||
| drawLine(l3); | |||
| // draw black lines, offset by 1px and 1px wide | |||
| glColor3f(0.0f, 0.0f, 0.0f); | |||
| strokeColor(Color(0.0f, 0.0f, 0.0f)); | |||
| Line<double> l1b(l1), l2b(l2), l3b(l3); | |||
| l1b.moveBy(lineWidth, lineWidth); | |||
| l2b.moveBy(lineWidth, lineWidth); | |||
| @@ -69,6 +65,14 @@ protected: | |||
| drawLine(l3b); | |||
| } | |||
| void drawLine(const Line<double>& line) | |||
| { | |||
| beginPath(); | |||
| moveTo(line.getStartPos().getX(), line.getStartPos().getY()); | |||
| lineTo(line.getEndPos().getX(), line.getEndPos().getY()); | |||
| stroke(); | |||
| } | |||
| bool onMouse(const MouseEvent& ev) override | |||
| { | |||
| if (ev.button != 1) | |||
| @@ -155,7 +159,7 @@ private: | |||
| void resetArea() | |||
| { | |||
| const double scaleFactor = getScaleFactor(); | |||
| const uint margin = 0.0 * scaleFactor; | |||
| const uint margin = 1.5 * scaleFactor; | |||
| const uint size = handleSize * scaleFactor; | |||
| area = Rectangle<uint>(getWidth() - size - margin, | |||
| @@ -187,25 +191,6 @@ private: | |||
| l3.setEndPos(x + offset, y + linesize + offset); | |||
| } | |||
| void drawLine(const Line<double>& line) | |||
| { | |||
| drawLine(line.getStartPos(), line.getEndPos()); | |||
| } | |||
| void drawLine(const Point<double>& posStart, const Point<double>& posEnd) | |||
| { | |||
| DISTRHO_SAFE_ASSERT_RETURN(posStart != posEnd,); | |||
| glBegin(GL_LINES); | |||
| { | |||
| glVertex2d(posStart.getX(), posStart.getY()); | |||
| glVertex2d(posEnd.getX(), posEnd.getY()); | |||
| } | |||
| glEnd(); | |||
| } | |||
| DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(ResizeHandle) | |||
| }; | |||