#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/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)