From e6e34882915ed835814e8df773039ca2dd96b087 Mon Sep 17 00:00:00 2001 From: Omar Date: Thu, 10 Oct 2019 20:57:16 +0200 Subject: [PATCH] add web pen pressure --- webgl/src/main.cpp | 62 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/webgl/src/main.cpp b/webgl/src/main.cpp index bf8301d..065584b 100644 --- a/webgl/src/main.cpp +++ b/webgl/src/main.cpp @@ -64,6 +64,47 @@ std::string UtilityGetString(uintptr_t s) return *reinterpret_cast(s); } +kEventSource StringToType(const std::string& type) +{ + if (type == "pen") + return kEventSource::Stylus; + else if (type == "touch") + return kEventSource::Touch; + return kEventSource::Mouse; +} + +int ConvertButtonType(int js_button) +{ + if (js_button == 0) + return 0; + else if (js_button == 2) + return 1; + return 0; +} + +void CanvasOnPointerDown(std::string type, float x, float y, float f, int button) +{ + app.ui_task_async([=]{ + if (button == 0 || button == 2) + app.mouse_down(ConvertButtonType(button), x, y, f, StringToType(type), false); + }); +} + +void CanvasOnPointerUp(std::string type, float x, float y, int button) +{ + app.ui_task_async([=]{ + if (button == 0 || button == 2) + app.mouse_up(ConvertButtonType(button), x, y, StringToType(type), false); + }); +} + +void CanvasOnPointerMove(std::string type, float x, float y, float f) +{ + app.ui_task_async([=]{ + app.mouse_move(x, y, f, StringToType(type), false); + }); +} + EMSCRIPTEN_BINDINGS(TaskCallback_bind) { class_>("TaskCallbackOpen"); class_>("TaskCallbackSave"); @@ -72,6 +113,9 @@ EMSCRIPTEN_BINDINGS(TaskCallback_bind) { function("TaskCallback_open_call", &TaskCallback_open_call); function("TaskCallback_open_delete", &TaskCallback_open_delete); function("UtilityGetString", &UtilityGetString); + function("CanvasOnPointerDown", &CanvasOnPointerDown); + function("CanvasOnPointerUp", &CanvasOnPointerUp); + function("CanvasOnPointerMove", &CanvasOnPointerMove); } extern "C" { @@ -118,6 +162,7 @@ int main() wnd = glfwCreateWindow(1024, 768, "PanoPainter", nullptr, nullptr); glfwMakeContextCurrent(wnd); +/* glfwSetCursorPosCallback(wnd, [](GLFWwindow* wnd, double x, double y){ g_cursor_pos = glm::vec2(x, y); app.ui_task_async([=]{ @@ -132,6 +177,7 @@ int main() app.mouse_up(button, g_cursor_pos.x, g_cursor_pos.y, kEventSource::Mouse, false); }); }); +*/ glfwSetWindowSizeCallback(wnd, [](GLFWwindow* wnd, int width, int height){ app.ui_task_async([=]{ app.resize(width, height); @@ -149,6 +195,22 @@ int main() }, true); }); + EM_ASM ( + Module.canvas.onpointermove = function(event) { + f = event.pointerType == "pen" ? event.pressure : 1.0; + Module.CanvasOnPointerMove(event.pointerType, event.layerX, event.layerY, f); + }; + Module.canvas.onpointerdown = function(event) { + console.log(event); + f = event.pointerType == "pen" ? event.pressure : 1.0; + Module.CanvasOnPointerDown(event.pointerType, event.layerX, event.layerY, f, event.button); + }; + Module.canvas.onpointerup = function(event) { + Module.CanvasOnPointerUp(event.pointerType, event.layerX, event.layerY, event.button); + }; + Module.canvas.style.touchAction = 'none'; + ); + printf("GL version: %s\n", glGetString(GL_VERSION)); printf("GL vendor: %s\n", glGetString(GL_VENDOR)); printf("GL renderer: %s\n", glGetString(GL_RENDERER));