-
This commit is contained in:
@@ -24,6 +24,14 @@
|
||||
rkt-webview-call-js
|
||||
rkt-webview-move
|
||||
rkt-webview-resize
|
||||
rkt-webview-show
|
||||
rkt-webview-hide
|
||||
rkt-webview-show-normal
|
||||
rkt-webview-maximize
|
||||
rkt-webview-minimize
|
||||
rkt-webview-window-state
|
||||
rkt-webview-set-title!
|
||||
rkt-webview-present
|
||||
rkt-webview-exit
|
||||
rkt-webview-valid?
|
||||
rkt-webview-open-devtools
|
||||
@@ -35,70 +43,95 @@
|
||||
|
||||
(define lib-type 'release)
|
||||
|
||||
(define-runtime-path lib-dir ".")
|
||||
; (if (eq? (system-type 'os*) 'windows)
|
||||
; "..\\lib"
|
||||
; "../lib"))
|
||||
(define os (system-type 'os*))
|
||||
(define supported-os '(windows linux))
|
||||
|
||||
(define libname (let ((os (system-type 'os*)))
|
||||
(cond ((eq? os 'windows) (format "rktwebview.dll"))
|
||||
((eq? os 'linux) (format "librktwebview.so"))
|
||||
(else (error (format "OS ~a not supported" os)))))
|
||||
(unless (ormap (λ (o) (eq? os o)) supported-os)
|
||||
(error (format "OS currently not supported: ~a. Supported: ~a." os supported-os)))
|
||||
|
||||
(define-runtime-path lib-dir "lib")
|
||||
|
||||
(define libraries-to-preload
|
||||
(cond
|
||||
([eq? os 'windows]
|
||||
'(Qt6Core.dll
|
||||
Qt6Positioning.dll
|
||||
Qt6Gui.dll
|
||||
Qt6Widgets.dll
|
||||
Qt6Svg.dll
|
||||
Qt6Network.dll
|
||||
Qt6OpenGL.dll
|
||||
Qt6PrintSupport.dll
|
||||
Qt6Qml.dll
|
||||
Qt6QmlModels.dll
|
||||
Qt6QmlWorkerScript.dll
|
||||
Qt6QmlMeta.dll
|
||||
Qt6Quick.dll
|
||||
Qt6QuickWidgets.dll
|
||||
Qt6WebChannel.dll
|
||||
Qt6WebEngineCore.dll
|
||||
Qt6WebEngineWidgets.dll
|
||||
))
|
||||
([eq? os 'linux]
|
||||
'())
|
||||
)
|
||||
)
|
||||
;(set! libname "../rktwebview/build/Release/rktwebview.dll")
|
||||
;(set! libname "../rktwebview/build/Release/librktwebview.so")
|
||||
(if (eq? (system-type 'os*) 'windows)
|
||||
(set! libname "..\\rktwebview_qt\\build\\Release\\rktwebview_qt.dll")
|
||||
(set! libname "../rktwebview_qt/build/Release/librktwebview_qt.so"))
|
||||
|
||||
(set! libname "rktwebview_qt.dll")
|
||||
(current-directory (build-path lib-dir "..\\rktwebview_qt\\build\\Release"))
|
||||
(define ffi-library
|
||||
(cond
|
||||
([eq? os 'windows] 'rktwebview_qt.dll)
|
||||
([eq? os 'linux] 'librktwebview_qt.so)
|
||||
)
|
||||
)
|
||||
|
||||
;(define webview-lib-file (normalize-path (build-path lib-dir libname)))
|
||||
|
||||
(define webview-lib-file libname)
|
||||
(displayln (format "~a - ~a" (current-directory) webview-lib-file))
|
||||
(define (libname lib-symbol)
|
||||
(build-path lib-dir (symbol->string os) (symbol->string lib-symbol)))
|
||||
|
||||
; c:\qt\6.10.2\msvc2022_64\bin\windeployqt.exe rktwebview_qt_test.exe
|
||||
(putenv "QT_PLUGIN_PATH" (path->string (current-directory)))
|
||||
(putenv "QTWEBENGINEPROCESS_PATH"
|
||||
"c:\\devel\\racket\\racket-webview\\rktwebview_qt\\build\\Release\\QtWebEngineProcess.exe")
|
||||
(putenv "QTWEBENGINE_RESOURCES_PATH"
|
||||
"c:\\devel\\racket\\racket-webview\\rktwebview_qt\\build\\Release\\resources")
|
||||
(putenv "QTWEBENGINE_LOCALES_PATH"
|
||||
"c:\\devel\\racket\\racket-webview\\rktwebview_qt\\build\\Release\\translations\\qtwebengine_locales")
|
||||
(when (eq? os 'windows)
|
||||
(putenv "QT_PLUGIN_PATH"
|
||||
(path->string (build-path lib-dir (symbol->string os))))
|
||||
(putenv "QTWEBENGINEPROCESS_PATH"
|
||||
(path->string (build-path lib-dir (symbol->string os) "QtWebEngineProcess.exe")))
|
||||
(putenv "QTWEBENGINE_RESOURCES_PATH"
|
||||
(path->string (build-path lib-dir (symbol->string os) "resources")))
|
||||
(putenv "QTWEBENGINE_LOCALES_PATH"
|
||||
(path->string (build-path lib-dir (symbol->string os) "translations" "qtwebengine_locales")))
|
||||
)
|
||||
|
||||
(define libs '(Qt6Core.dll
|
||||
Qt6Positioning.dll
|
||||
;Qt6Concurrent.dll
|
||||
Qt6Gui.dll
|
||||
Qt6Widgets.dll
|
||||
;qwindows.dll
|
||||
Qt6Svg.dll
|
||||
Qt6Network.dll
|
||||
Qt6OpenGL.dll
|
||||
;Qt6OpenGLWidgets.dll
|
||||
Qt6PrintSupport.dll
|
||||
Qt6Qml.dll
|
||||
;Qt6Xml.dll
|
||||
Qt6QmlModels.dll
|
||||
Qt6QmlWorkerScript.dll
|
||||
Qt6QmlMeta.dll
|
||||
Qt6Quick.dll
|
||||
Qt6QuickWidgets.dll
|
||||
Qt6WebChannel.dll
|
||||
Qt6WebEngineCore.dll
|
||||
;Qt6WebEngineQuick.dll
|
||||
Qt6WebEngineWidgets.dll
|
||||
))
|
||||
(for-each (λ (l)
|
||||
(let ((lib (symbol->string l)))
|
||||
(displayln (format "~a: ~a" lib (ffi-lib lib)))))
|
||||
libs)
|
||||
;;; Preload libraries
|
||||
|
||||
(for-each (λ (lib-symbol)
|
||||
(let ((load-lib (libname lib-symbol)))
|
||||
(ffi-lib load-lib)))
|
||||
libraries-to-preload)
|
||||
|
||||
;;; Actual FFI integration
|
||||
|
||||
(define webview-lib-file (libname ffi-library))
|
||||
(define webview-lib
|
||||
(with-handlers ([exn:fail?
|
||||
(λ (exp)
|
||||
(cond
|
||||
([eq? os 'linux]
|
||||
(error (format
|
||||
(string-append "Cannot load ~a.\n"
|
||||
"Make sure you installed Qt6on your system\n"
|
||||
"e.g. on debian 'sudo apt install libqt6webenginewidgets6'\n"
|
||||
"\n"
|
||||
"Exception:\n\n~a")
|
||||
ffi-library exp)))
|
||||
(else (error
|
||||
(format "Cannot load ~a for os ~a\n\nException:\n\n~a"
|
||||
ffi-library os exp))))
|
||||
)
|
||||
])
|
||||
(ffi-lib webview-lib-file)))
|
||||
|
||||
(define webview-lib (ffi-lib webview-lib-file))
|
||||
(define-ffi-definer define-rktwebview webview-lib)
|
||||
|
||||
;;; Callbacks from the OS library
|
||||
|
||||
(define callback-box (box '()))
|
||||
(define (applier thunk)
|
||||
(thunk))
|
||||
@@ -117,7 +150,19 @@
|
||||
no_delegate_for_context = 5
|
||||
move_failed = 12
|
||||
resize_failed = 13
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(define _rkt_window_state_t
|
||||
(_enum '(invalid = -1
|
||||
normal = 0
|
||||
minimized = 1
|
||||
maximized = 2
|
||||
hidden = 3
|
||||
normal_active = 16
|
||||
maximized_active = 18
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -170,7 +215,7 @@
|
||||
|
||||
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_open_devtools(int wv);
|
||||
(define-rktwebview rkt_webview_open_devtools
|
||||
(_fun _int -> _int))
|
||||
(_fun _int -> _rkt_result_t))
|
||||
|
||||
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_destroy_event(rkt_event_t e);
|
||||
(define-rktwebview rkt_webview_destroy_event
|
||||
@@ -184,10 +229,41 @@
|
||||
(define-rktwebview rkt_webview_resize
|
||||
(_fun _int _int _int -> _rkt_result_t))
|
||||
|
||||
(define-syntax def-rkt-wv
|
||||
(syntax-rules ()
|
||||
((_ name)
|
||||
(define-rktwebview name
|
||||
(_fun _int -> _rkt_result_t)))))
|
||||
|
||||
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_hide(rktwebview_t w);
|
||||
(def-rkt-wv rkt_webview_hide)
|
||||
|
||||
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_show(rktwebview_t w);
|
||||
(def-rkt-wv rkt_webview_show)
|
||||
|
||||
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_show_normal(rktwebview_t w);
|
||||
(def-rkt-wv rkt_webview_show_normal)
|
||||
|
||||
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_present(rktwebview_t w);
|
||||
(def-rkt-wv rkt_webview_present)
|
||||
|
||||
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_maximize(rktwebview_t w);
|
||||
(def-rkt-wv rkt_webview_maximize)
|
||||
|
||||
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_minimize(rktwebview_t w);
|
||||
(def-rkt-wv rkt_webview_minimize)
|
||||
|
||||
;RKTWEBVIEW_QT_EXPORT bool rkt_webview_valid(rktwebview_t wv);
|
||||
(define-rktwebview rkt_webview_valid
|
||||
(_fun _int -> _int))
|
||||
|
||||
;RKTWEBVIEW_QT_EXPORT window_state_t rkt_webview_window_state(rktwebview_t w);
|
||||
(define-rktwebview rkt_webview_window_state
|
||||
(_fun _int -> _rkt_window_state_t))
|
||||
|
||||
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_set_title(rktwebview_t wv, const char *title);
|
||||
(define-rktwebview rkt_webview_set_title
|
||||
(_fun _int _string/utf-8 -> _rkt_result_t))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Initialize and start library
|
||||
@@ -274,11 +350,14 @@
|
||||
(define (rkt-webview-set-html! wv html)
|
||||
(rkt_webview_set_html (rkt-wv-win wv) html))
|
||||
|
||||
(define (rkt-webview-set-title! wv title)
|
||||
(rkt_webview_set_title (rkt-wv-win wv) title))
|
||||
|
||||
(define (rkt-webview-run-js wv js)
|
||||
(rkt_webview_run_js (rkt-wv-win wv) js))
|
||||
|
||||
(define (rkt-webview-call-js wv js)
|
||||
(let* ((r (rkt_webview_call_js (rkt-wv-win) js))
|
||||
(let* ((r (rkt_webview_call_js (rkt-wv-win wv) js))
|
||||
(value (cast (rkt_js_result_t-value r) _pointer _string*/utf-8))
|
||||
(result (rkt_js_result_t-result r)))
|
||||
(rkt_webview_destroy_js_result r)
|
||||
@@ -290,6 +369,20 @@
|
||||
(define (rkt-webview-move wv x y)
|
||||
(rkt_webview_move (rkt-wv-win wv) x y))
|
||||
|
||||
(define-syntax def-rkt-wrapper-wv
|
||||
(syntax-rules ()
|
||||
((_ name c-name)
|
||||
(define (name wv)
|
||||
(c-name (rkt-wv-win wv))))))
|
||||
|
||||
(def-rkt-wrapper-wv rkt-webview-show rkt_webview_show)
|
||||
(def-rkt-wrapper-wv rkt-webview-hide rkt_webview_hide)
|
||||
(def-rkt-wrapper-wv rkt-webview-show-normal rkt_webview_show_normal)
|
||||
(def-rkt-wrapper-wv rkt-webview-minimize rkt_webview_minimize)
|
||||
(def-rkt-wrapper-wv rkt-webview-maximize rkt_webview_maximize)
|
||||
(def-rkt-wrapper-wv rkt-webview-present rkt_webview_present)
|
||||
(def-rkt-wrapper-wv rkt-webview-window-state rkt_webview_window_state)
|
||||
|
||||
(define (rkt-webview-open-devtools wv)
|
||||
(rkt_webview_open_devtools (rkt-wv-win wv)))
|
||||
|
||||
@@ -309,5 +402,10 @@
|
||||
open-windows))
|
||||
(stop-event-processing))
|
||||
|
||||
|
||||
|
||||
(plumber-add-flush! (current-plumber)
|
||||
(λ (handle)
|
||||
(rkt-webview-exit)))
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user