Signed-off-by: falkTX <falktx@falktx.com>popup-tests
| @@ -0,0 +1,32 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2025 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 | |||
| * permission notice appear in all copies. | |||
| * | |||
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||
| * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||
| * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||
| * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||
| * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||
| * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||
| */ | |||
| #ifndef DGL_WEB_VIEW_HPP_INCLUDED | |||
| #define DGL_WEB_VIEW_HPP_INCLUDED | |||
| #include "Base.hpp" | |||
| START_NAMESPACE_DGL | |||
| #include "../distrho/extra/WebViewImpl.hpp" | |||
| #if defined(HAVE_X11) && defined(DISTRHO_OS_LINUX) | |||
| int dpf_webview_start(int argc, char* argv[]); | |||
| #endif | |||
| END_NAMESPACE_DGL | |||
| #endif // DGL_WEB_VIEW_HPP_INCLUDED | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2024 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2025 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 | |||
| @@ -23,6 +23,10 @@ | |||
| # include "FileBrowserDialog.hpp" | |||
| #endif | |||
| #ifdef DGL_USE_WEB_VIEW | |||
| # include "WebView.hpp" | |||
| #endif | |||
| #include <vector> | |||
| #ifdef DISTRHO_NAMESPACE | |||
| @@ -407,6 +411,27 @@ public: | |||
| bool openFileBrowser(const DGL_NAMESPACE::FileBrowserOptions& options = FileBrowserOptions()); | |||
| #endif | |||
| #ifdef DGL_USE_WEB_VIEW | |||
| /** | |||
| Create a new web view. | |||
| The web view will be added on top of this window. | |||
| This means it will draw on top of whatever is below it, | |||
| something to take into consideration if mixing regular widgets with web views. | |||
| Provided metrics in @p options must have scale factor pre-applied. | |||
| @p url: The URL to open, assumed to be in encoded form (e.g spaces converted to %20) | |||
| @p options: Extra options, optional | |||
| */ | |||
| bool createWebView(const char* url, const DGL_NAMESPACE::WebViewOptions& options = WebViewOptions()); | |||
| /** | |||
| Evaluate/run JavaScript on the web view. | |||
| */ | |||
| void evaluateJS(const char* js); | |||
| #endif | |||
| /** | |||
| Request repaint of this window, for the entire area. | |||
| */ | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2024 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2025 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 | |||
| @@ -421,6 +421,20 @@ bool Window::openFileBrowser(const FileBrowserOptions& options) | |||
| } | |||
| #endif | |||
| #ifdef DGL_USE_WEB_VIEW | |||
| bool Window::createWebView(const char* const url, const DGL_NAMESPACE::WebViewOptions& options) | |||
| { | |||
| return pData->createWebView(url, options); | |||
| } | |||
| void Window::evaluateJS(const char* const js) | |||
| { | |||
| DISTRHO_SAFE_ASSERT_RETURN(pData->webViewHandle != nullptr,); | |||
| webViewEvaluateJS(pData->webViewHandle, js); | |||
| } | |||
| #endif | |||
| void Window::repaint() noexcept | |||
| { | |||
| if (pData->view == nullptr) | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2024 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2025 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 | |||
| @@ -128,6 +128,9 @@ Window::PrivateData::PrivateData(Application& a, Window* const s) | |||
| filenameToRenderInto(nullptr), | |||
| #ifdef DGL_USE_FILE_BROWSER | |||
| fileBrowserHandle(nullptr), | |||
| #endif | |||
| #ifdef DGL_USE_WEB_VIEW | |||
| webViewHandle(nullptr), | |||
| #endif | |||
| modal() | |||
| { | |||
| @@ -158,6 +161,9 @@ Window::PrivateData::PrivateData(Application& a, Window* const s, PrivateData* c | |||
| filenameToRenderInto(nullptr), | |||
| #ifdef DGL_USE_FILE_BROWSER | |||
| fileBrowserHandle(nullptr), | |||
| #endif | |||
| #ifdef DGL_USE_WEB_VIEW | |||
| webViewHandle(nullptr), | |||
| #endif | |||
| modal(ppData) | |||
| { | |||
| @@ -190,6 +196,9 @@ Window::PrivateData::PrivateData(Application& a, Window* const s, | |||
| filenameToRenderInto(nullptr), | |||
| #ifdef DGL_USE_FILE_BROWSER | |||
| fileBrowserHandle(nullptr), | |||
| #endif | |||
| #ifdef DGL_USE_WEB_VIEW | |||
| webViewHandle(nullptr), | |||
| #endif | |||
| modal() | |||
| { | |||
| @@ -225,6 +234,9 @@ Window::PrivateData::PrivateData(Application& a, Window* const s, | |||
| filenameToRenderInto(nullptr), | |||
| #ifdef DGL_USE_FILE_BROWSER | |||
| fileBrowserHandle(nullptr), | |||
| #endif | |||
| #ifdef DGL_USE_WEB_VIEW | |||
| webViewHandle(nullptr), | |||
| #endif | |||
| modal() | |||
| { | |||
| @@ -245,6 +257,10 @@ Window::PrivateData::~PrivateData() | |||
| #ifdef DGL_USE_FILE_BROWSER | |||
| if (fileBrowserHandle != nullptr) | |||
| fileBrowserClose(fileBrowserHandle); | |||
| #endif | |||
| #ifdef DGL_USE_WEB_VIEW | |||
| if (webViewHandle != nullptr) | |||
| webViewDestroy(webViewHandle); | |||
| #endif | |||
| puglHide(view); | |||
| appData->oneWindowClosed(); | |||
| @@ -392,13 +408,21 @@ void Window::PrivateData::hide() | |||
| if (modal.enabled) | |||
| stopModal(); | |||
| #ifdef DGL_USE_FILE_BROWSER | |||
| #ifdef DGL_USE_FILE_BROWSER | |||
| if (fileBrowserHandle != nullptr) | |||
| { | |||
| fileBrowserClose(fileBrowserHandle); | |||
| fileBrowserHandle = nullptr; | |||
| } | |||
| #endif | |||
| #endif | |||
| #ifdef DGL_USE_WEB_VIEW | |||
| if (webViewHandle != nullptr) | |||
| { | |||
| webViewDestroy(webViewHandle); | |||
| webViewHandle = nullptr; | |||
| } | |||
| #endif | |||
| puglHide(view); | |||
| @@ -441,6 +465,11 @@ void Window::PrivateData::idleCallback() | |||
| fileBrowserHandle = nullptr; | |||
| } | |||
| #endif | |||
| #ifdef DGL_USE_WEB_VIEW | |||
| if (webViewHandle != nullptr) | |||
| webViewIdle(webViewHandle); | |||
| #endif | |||
| } | |||
| // ----------------------------------------------------------------------- | |||
| @@ -477,7 +506,7 @@ bool Window::PrivateData::removeIdleCallback(IdleCallback* const callback) | |||
| #ifdef DGL_USE_FILE_BROWSER | |||
| // ----------------------------------------------------------------------- | |||
| // file handling | |||
| // file browser dialog | |||
| bool Window::PrivateData::openFileBrowser(const FileBrowserOptions& options) | |||
| { | |||
| @@ -500,6 +529,32 @@ bool Window::PrivateData::openFileBrowser(const FileBrowserOptions& options) | |||
| } | |||
| #endif // DGL_USE_FILE_BROWSER | |||
| #ifdef DGL_USE_WEB_VIEW | |||
| // ----------------------------------------------------------------------- | |||
| // file browser dialog | |||
| bool Window::PrivateData::createWebView(const char* const url, const DGL_NAMESPACE::WebViewOptions& options) | |||
| { | |||
| if (webViewHandle != nullptr) | |||
| webViewDestroy(webViewHandle); | |||
| const PuglRect rect = puglGetFrame(view); | |||
| uint initialWidth = static_cast<uint>(rect.width) - options.offset.x; | |||
| uint initialHeight = static_cast<uint>(rect.height) - options.offset.y; | |||
| webViewOffset = Point<int>(options.offset.x, options.offset.y); | |||
| webViewHandle = webViewCreate(url, | |||
| puglGetNativeView(view), | |||
| initialWidth, | |||
| initialHeight, | |||
| autoScaling ? autoScaleFactor : scaleFactor, | |||
| options); | |||
| return webViewHandle != nullptr; | |||
| } | |||
| #endif // DGL_USE_WEB_VIEW | |||
| // ----------------------------------------------------------------------- | |||
| // modal handling | |||
| @@ -599,6 +654,14 @@ void Window::PrivateData::onPuglConfigure(const uint width, const uint height) | |||
| const uint uwidth = d_roundToUnsignedInt(width / autoScaleFactor); | |||
| const uint uheight = d_roundToUnsignedInt(height / autoScaleFactor); | |||
| #ifdef DGL_USE_WEB_VIEW | |||
| if (webViewHandle != nullptr) | |||
| webViewResize(webViewHandle, | |||
| uwidth - webViewOffset.getX(), | |||
| uheight - webViewOffset.getY(), | |||
| autoScaling ? autoScaleFactor : scaleFactor); | |||
| #endif | |||
| self->onReshape(uwidth, uheight); | |||
| #ifndef DPF_TEST_WINDOW_CPP | |||
| @@ -1,6 +1,6 @@ | |||
| /* | |||
| * DISTRHO Plugin Framework (DPF) | |||
| * Copyright (C) 2012-2024 Filipe Coelho <falktx@falktx.com> | |||
| * Copyright (C) 2012-2025 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 | |||
| @@ -95,6 +95,12 @@ struct Window::PrivateData : IdleCallback { | |||
| DGL_NAMESPACE::FileBrowserHandle fileBrowserHandle; | |||
| #endif | |||
| #ifdef DGL_USE_WEB_VIEW | |||
| /** Handle for web view operations. */ | |||
| DGL_NAMESPACE::WebViewHandle webViewHandle; | |||
| DGL_NAMESPACE::Point<int> webViewOffset; | |||
| #endif | |||
| /** Modal window setup. */ | |||
| struct Modal { | |||
| PrivateData* parent; // parent of this window (so we can become modal) | |||
| @@ -169,10 +175,15 @@ struct Window::PrivateData : IdleCallback { | |||
| bool removeIdleCallback(IdleCallback* callback); | |||
| #ifdef DGL_USE_FILE_BROWSER | |||
| // file handling | |||
| // file browser dialog | |||
| bool openFileBrowser(const DGL_NAMESPACE::FileBrowserOptions& options); | |||
| #endif | |||
| #ifdef DGL_USE_WEB_VIEW | |||
| // web view | |||
| bool createWebView(const char* url, const DGL_NAMESPACE::WebViewOptions& options); | |||
| #endif | |||
| static void renderToPicture(const char* filename, const GraphicsContext& context, uint width, uint height); | |||
| // modal handling | |||
| @@ -110,16 +110,25 @@ | |||
| # endif | |||
| #endif | |||
| #ifndef DGL_FILE_BROWSER_DISABLED | |||
| #ifdef DGL_USE_FILE_BROWSER | |||
| # define DGL_FILE_BROWSER_DIALOG_HPP_INCLUDED | |||
| # define FILE_BROWSER_DIALOG_DGL_NAMESPACE | |||
| # define FILE_BROWSER_DIALOG_NAMESPACE DGL_NAMESPACE | |||
| # define DGL_FILE_BROWSER_DIALOG_HPP_INCLUDED | |||
| START_NAMESPACE_DGL | |||
| # include "../../distrho/extra/FileBrowserDialogImpl.hpp" | |||
| END_NAMESPACE_DGL | |||
| # include "../../distrho/extra/FileBrowserDialogImpl.cpp" | |||
| #endif | |||
| #ifdef DGL_USE_WEB_VIEW | |||
| # define DGL_WEB_VIEW_HPP_INCLUDED | |||
| # define WEB_VIEW_DGL_NAMESPACE | |||
| START_NAMESPACE_DGL | |||
| # include "../../distrho/extra/WebViewImpl.hpp" | |||
| END_NAMESPACE_DGL | |||
| # include "../../distrho/extra/WebViewImpl.cpp" | |||
| #endif | |||
| #if defined(DGL_USING_X11) && defined(DGL_X11_WINDOW_ICON_NAME) | |||
| extern const ulong* DGL_X11_WINDOW_ICON_NAME; | |||
| #endif | |||