diff --git a/dgl/Makefile b/dgl/Makefile index da7a5e95..a58b90b1 100644 --- a/dgl/Makefile +++ b/dgl/Makefile @@ -54,6 +54,10 @@ OBJS_common = \ $(BUILD_DIR)/dgl/Window.cpp.o \ $(BUILD_DIR)/dgl/WindowPrivateData.cpp.o +ifeq ($(WINDOWS)$(USE_WEB_VIEW),truetrue) +OBJS_common += $(BUILD_DIR)/dgl/WebViewWin32.cpp.o +endif + # --------------------------------------------------------------------------------------------------------------------- OBJS_cairo = $(OBJS_common) \ @@ -201,6 +205,11 @@ $(BUILD_DIR)/dgl/pugl.mm.o: src/pugl.mm @echo "Compiling $<" $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) $(PUGL_EXTRA_FLAGS) -c -ObjC++ -o $@ +$(BUILD_DIR)/dgl/WebViewWin32.cpp.o: src/WebViewWin32.cpp + -@mkdir -p $(BUILD_DIR)/dgl + @echo "Compiling $<" + $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -std=gnu++17 -c -o $@ + # --------------------------------------------------------------------------------------------------------------------- $(BUILD_DIR)/dgl/%.cpp.cairo.o: src/%.cpp diff --git a/dgl/src/WebViewWin32.cpp b/dgl/src/WebViewWin32.cpp new file mode 100644 index 00000000..9b3f380c --- /dev/null +++ b/dgl/src/WebViewWin32.cpp @@ -0,0 +1,23 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2025 Filipe Coelho + * + * 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. + */ + +// Include CHOC separately because it requires C++17 + +#define DISTRHO_WEB_VIEW_INCLUDE_IMPLEMENTATION +#define WEB_VIEW_NAMESPACE DGL_NAMESPACE +#define WEB_VIEW_DGL_NAMESPACE +#include "../WebView.hpp" +#include "../../distrho/extra/WebViewWin32.hpp" diff --git a/distrho/DistrhoUI_win32.cpp b/distrho/DistrhoUI_win32.cpp index 562a414d..74c09f4d 100644 --- a/distrho/DistrhoUI_win32.cpp +++ b/distrho/DistrhoUI_win32.cpp @@ -22,6 +22,7 @@ #if DISTRHO_UI_WEB_VIEW # define DISTRHO_WEB_VIEW_INCLUDE_IMPLEMENTATION +# define WEB_VIEW_NAMESPACE DISTRHO_NAMESPACE # include "extra/WebView.hpp" # include "extra/WebViewWin32.hpp" #endif diff --git a/distrho/extra/WebViewWin32.hpp b/distrho/extra/WebViewWin32.hpp index 4b005e2b..03049cc3 100644 --- a/distrho/extra/WebViewWin32.hpp +++ b/distrho/extra/WebViewWin32.hpp @@ -1,6 +1,6 @@ /* * DISTRHO Plugin Framework (DPF) - * Copyright (C) 2012-2024 Filipe Coelho + * Copyright (C) 2012-2025 Filipe Coelho * * 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 @@ -26,13 +26,26 @@ START_NAMESPACE_DISTRHO class WebView; -WebView* webview_choc_create(const WebViewOptions& opts); +END_NAMESPACE_DISTRHO + +#ifdef WEB_VIEW_DGL_NAMESPACE +START_NAMESPACE_DGL +using DISTRHO_NAMESPACE::WebView; +#else +START_NAMESPACE_DISTRHO +#endif + +WebView* webview_choc_create(const WEB_VIEW_NAMESPACE::WebViewOptions& opts); void webview_choc_destroy(WebView*); void* webview_choc_handle(WebView*); void webview_choc_eval(WebView*, const char* js); void webview_choc_navigate(WebView*, const char* url); +#ifdef WEB_VIEW_DGL_NAMESPACE +END_NAMESPACE_DGL +#else END_NAMESPACE_DISTRHO +#endif // -------------------------------------------------------------------------------------------------------------------- @@ -41,9 +54,13 @@ END_NAMESPACE_DISTRHO # define WC_ERR_INVALID_CHARS 0 # include "choc/choc_WebView.h" +#ifdef WEB_VIEW_DGL_NAMESPACE +START_NAMESPACE_DGL +#else START_NAMESPACE_DISTRHO +#endif -WebView* webview_choc_create(const WebViewOptions& opts) +WebView* webview_choc_create(const WEB_VIEW_NAMESPACE::WebViewOptions& opts) { WebView::Options wopts; wopts.acceptsFirstMouseClick = true; @@ -52,7 +69,7 @@ WebView* webview_choc_create(const WebViewOptions& opts) std::unique_ptr webview = std::make_unique(wopts); DISTRHO_SAFE_ASSERT_RETURN(webview->loadedOK(), nullptr); - if (const WebViewMessageCallback callback = opts.callback) + if (const WEB_VIEW_NAMESPACE::WebViewMessageCallback callback = opts.callback) { webview->addInitScript("function postMessage(m){window.chrome.webview.postMessage(m);}"); @@ -94,7 +111,11 @@ void webview_choc_navigate(WebView* const webview, const char* const url) webview->navigate(url); } +#ifdef WEB_VIEW_DGL_NAMESPACE +END_NAMESPACE_DGL +#else END_NAMESPACE_DISTRHO +#endif #endif // DISTRHO_WEB_VIEW_INCLUDE_IMPLEMENTATION