211 lines
4.4 KiB
C++
211 lines
4.4 KiB
C++
#include "rktwebview_internal.h"
|
|
|
|
#include <malloc.h>
|
|
#include <string.h>
|
|
#include <chrono>
|
|
#include <stdint.h>
|
|
//#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include "rktwebview_qt.h"
|
|
#include "webviewapp.h"
|
|
|
|
uint64_t current_ms() {
|
|
using namespace std::chrono;
|
|
return duration_cast<milliseconds>(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);
|
|
}
|
|
|
|
rkt_js_result_t *rkt_webview_choose_dir(rktwebview_t w, const char *title, const char *base_dir)
|
|
{
|
|
rkt_webview_init();
|
|
return handler->rktChooseDir(w, title, base_dir);
|
|
}
|
|
|
|
rkt_js_result_t *rkt_webview_file_open(rktwebview_t w, const char *title, const char *base_dir, const char *permitted_exts)
|
|
{
|
|
rkt_webview_init();
|
|
return handler->rktFileOpen(w, title, base_dir, permitted_exts);
|
|
}
|
|
|
|
rkt_js_result_t *rkt_webview_file_save(rktwebview_t w, const char *title, const char *base_dir, const char *permitted_exts)
|
|
{
|
|
rkt_webview_init();
|
|
return handler->rktFileSave(w, title, base_dir, permitted_exts);
|
|
}
|
|
|
|
void rkt_webview_set_ou_token(rktwebview_t wv, const char *token)
|
|
{
|
|
rkt_webview_init();
|
|
handler->rktSetOUToken(wv, token);
|
|
}
|