/* * 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. */ #if !defined(DISTRHO_WEB_VIEW_HPP_INCLUDED) && !defined(DGL_WEB_VIEW_HPP_INCLUDED) # define DISTRHO_WEB_VIEW_INCLUDE_IMPLEMENTATION # include "WebView.hpp" #endif // -------------------------------------------------------------------------------------------------------------------- // Web View stuff START_NAMESPACE_DISTRHO class WebView; 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 // -------------------------------------------------------------------------------------------------------------------- #ifdef DISTRHO_WEB_VIEW_INCLUDE_IMPLEMENTATION # 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 WEB_VIEW_NAMESPACE::WebViewOptions& opts) { WebView::Options wopts; wopts.acceptsFirstMouseClick = true; wopts.enableDebugMode = true; std::unique_ptr webview = std::make_unique(wopts); DISTRHO_SAFE_ASSERT_RETURN(webview->loadedOK(), nullptr); if (const WEB_VIEW_NAMESPACE::WebViewMessageCallback callback = opts.callback) { webview->addInitScript("function postMessage(m){window.chrome.webview.postMessage(m);}"); void* const callbackPtr = opts.callbackPtr; webview->bind([callback, callbackPtr](const std::string& value) { char* const data = strdup(value.data()); callback(callbackPtr, data); std::free(data); }); } else { webview->addInitScript("function postMessage(m){}"); } if (opts.initialJS != nullptr) webview->addInitScript(opts.initialJS); return webview.release(); } void webview_choc_destroy(WebView* const webview) { delete webview; } void* webview_choc_handle(WebView* const webview) { return webview->getViewHandle(); } void webview_choc_eval(WebView* const webview, const char* const js) { webview->evaluateJavascript(js); } 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 // --------------------------------------------------------------------------------------------------------------------