#include "rktwebview_internal.h" #include #include #include #include //#include #include #include "rktwebview_qt.h" #include "webviewapp.h" uint64_t current_ms() { using namespace std::chrono; return duration_cast(system_clock::now().time_since_epoch()).count(); } ///////////////////////////////////////////////////////////////////// // Main C Interface ///////////////////////////////////////////////////////////////////// //static int pipefd[2]; //static bool started = false; //static pid_t webview_process; //static bool cannot_fork_or_pipe = false; Rktwebview_qt *handler = nullptr; void rkt_webview_init() { if (handler == nullptr) { handler = new Rktwebview_qt(&handler); handler->doEvents(); } } int rkt_webview_create(rktwebview_t parent, event_cb_t js_event_cb) { rkt_webview_init(); return handler->rktWebViewCreate(parent, js_event_cb); } void rkt_webview_close(rktwebview_t wv) { rkt_webview_init(); handler->rktWebViewClose(wv); } result_t rkt_webview_set_url(rktwebview_t wv, const char *url) { rkt_webview_init(); result_t r = handler->rktSetUrl(wv, url); return r; } result_t rkt_webview_set_html(rktwebview_t wv, const char *url) { rkt_webview_init(); result_t r = handler->rktSetHtml(wv, url); return r; } result_t rkt_webview_run_js(rktwebview_t wv, const char *js) { rkt_webview_init(); result_t r = handler->rktRunJs(wv, js); return r; } rkt_js_result_t *rkt_webview_call_js(rktwebview_t wv, const char *js) { rkt_webview_init(); rkt_js_result_t *r = handler->rktCallJs(wv, js); return r; } result_t rkt_webview_open_devtools(rktwebview_t wv) { rkt_webview_init(); result_t r = handler->rktOpenDevtools(wv); return r; } void rkt_webview_process_events(int for_ms) { rkt_webview_init(); uint64_t start_ms = current_ms(); uint64_t end_ms = start_ms + for_ms; while (current_ms() < end_ms) { QThread::usleep(500); // sleep 0.5 ms handler->doEvents(); } } result_t rkt_webview_destroy_event(rkt_event_t *e) { free(e->event); free(e); return result_t::oke; } result_t rkt_webview_destroy_js_result(rkt_js_result_t *r) { free(r->value); free(r); return result_t::oke; } result_t rkt_webview_move(rktwebview_t wv, int x, int y) { rkt_webview_init(); result_t r = handler->rktMove(wv, x, y); return r; } result_t rkt_webview_resize(rktwebview_t wv, int width, int height) { rkt_webview_init(); result_t r = handler->rktResize(wv, width, height); return r; } bool rkt_webview_valid(rktwebview_t wv) { rkt_webview_init(); return handler->rktValid(wv); } result_t rkt_webview_hide(rktwebview_t w) { rkt_webview_init(); return handler->rktHideWindow(w); } result_t rkt_webview_show(rktwebview_t w) { rkt_webview_init(); return handler->rktShowWindow(w); } result_t rkt_webview_present(rktwebview_t w) { rkt_webview_init(); return handler->rktPresentWindow(w); } result_t rkt_webview_maximize(rktwebview_t w) { rkt_webview_init(); return handler->rktMaximizeWindow(w); } result_t rkt_webview_minimize(rktwebview_t w) { rkt_webview_init(); return handler->rktMinimizeWindow(w); } result_t rkt_webview_show_normal(rktwebview_t w) { rkt_webview_init(); return handler->rktShowNormalWindow(w); } window_state_t rkt_webview_window_state(rktwebview_t w) { rkt_webview_init(); return handler->rktWindowState(w); } result_t rkt_webview_set_title(rktwebview_t wv, const char *title) { rkt_webview_init(); return handler->rktWindowSetTitle(wv, title); }