-
This commit is contained in:
76
racket-webview-qt.rkt
Normal file
76
racket-webview-qt.rkt
Normal file
@@ -0,0 +1,76 @@
|
||||
#lang racket/base
|
||||
|
||||
(require ffi/unsafe
|
||||
ffi/unsafe/define
|
||||
ffi/unsafe/atomic
|
||||
ffi/unsafe/os-thread
|
||||
racket/async-channel
|
||||
racket/runtime-path
|
||||
racket/port
|
||||
data/queue
|
||||
json
|
||||
racket/string
|
||||
racket/path
|
||||
)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; FFI Library
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(define lib-type 'release)
|
||||
|
||||
(define-runtime-path lib-dir "lib")
|
||||
|
||||
(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)))))
|
||||
)
|
||||
;(set! libname "../rktwebview/build/Release/rktwebview.dll")
|
||||
;(set! libname "../rktwebview/build/Release/librktwebview.so")
|
||||
(set! libname "../rktwebview_qt/rktwebview_qt/build/Desktop-Release/librktwebview_qt.so")
|
||||
(define webview-lib-file (build-path lib-dir libname))
|
||||
|
||||
(define webview-lib (ffi-lib webview-lib-file))
|
||||
(define-ffi-definer define-rktwebview webview-lib)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Types
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;RKTWEBVIEW_QT_EXPORT void rkt_webview_init(int &argc, char **argv);
|
||||
(define-rktwebview rkt_webview_init
|
||||
(_fun -> _void))
|
||||
|
||||
;RKTWEBVIEW_QT_EXPORT void rkt_webview_process_events(int for_ms);
|
||||
(define-rktwebview rkt_webview_process_events
|
||||
(_fun _int -> _void))
|
||||
|
||||
;RKTWEBVIEW_QT_EXPORT int rkt_webview_create(int parent);
|
||||
(define-rktwebview rkt_webview_create
|
||||
(_fun _int -> _int))
|
||||
|
||||
;RKTWEBVIEW_QT_EXPORT void rkt_webview_close(int wv);
|
||||
(define-rktwebview rkt_webview_close
|
||||
(_fun _int -> _void))
|
||||
|
||||
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_set_url(int wv, const char *url);
|
||||
(define-rktwebview rkt_webview_set_url
|
||||
(_fun _int _string/utf-8 -> _int))
|
||||
|
||||
;RKTWEBVIEW_QT_EXPORT result_t rkt_webview_set_html(int wv, const char *html);
|
||||
|
||||
(define process-events #t)
|
||||
(define (start-event-processing)
|
||||
(thread (λ ()
|
||||
(letrec ((f (λ ()
|
||||
(rkt_webview_process_events 1)
|
||||
(sleep 0.001)
|
||||
(if process-events
|
||||
(f)
|
||||
'done))))
|
||||
(f)))))
|
||||
|
||||
(rkt_webview_init)
|
||||
(start-event-processing)
|
||||
|
||||
Reference in New Issue
Block a user