Skip to content

Commit

Permalink
[Emscripten] Fix coordinates of mouse events
Browse files Browse the repository at this point in the history
  • Loading branch information
chnoblouch committed Jun 27, 2024
1 parent cdd8086 commit 852659a
Showing 1 changed file with 33 additions and 26 deletions.
59 changes: 33 additions & 26 deletions apps/source/platforms/emscripten/AppEmscripten.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include <SLAssetLoader.h>

#include <emscripten.h>
#include <emscripten/em_asm.h>
#include <emscripten/html5.h>
#include <emscripten/val.h>

Expand Down Expand Up @@ -60,6 +61,7 @@ static EM_BOOL onTouchStart(int eventType, const EmscriptenTouchEvent*
static EM_BOOL onTouchEnd(int eventType, const EmscriptenTouchEvent* touchEvent, void* userData);
static EM_BOOL onTouchMove(int eventType, const EmscriptenTouchEvent* touchEvent, void* userData);
static const char* onUnload(int eventType, const void* reserved, void* userData);
static SLint convertToCanvasCoordinate(SLint coordinate);
static SLKey mapKeyToSLKey(unsigned long key);
static SLKey mapModifiersToSLModifiers(bool shiftDown, bool ctrlDown, bool altDown);
static SLKey mapModifiersToSLModifiers(const EmscriptenMouseEvent* mouseEvent);
Expand Down Expand Up @@ -231,8 +233,8 @@ static EMSCRIPTEN_RESULT onMousePressed(int eventType,
const EmscriptenMouseEvent* mouseEvent,
void* userData)
{
SLint x = mouseX;
SLint y = mouseY;
SLint x = convertToCanvasCoordinate(mouseEvent->targetX);
SLint y = convertToCanvasCoordinate(mouseEvent->targetY);
SLKey modifiers = mapModifiersToSLModifiers(mouseEvent);

startX = x;
Expand Down Expand Up @@ -274,8 +276,8 @@ static EM_BOOL onMouseReleased(int eventType,
const EmscriptenMouseEvent* mouseEvent,
void* userData)
{
SLint x = mouseX;
SLint y = mouseY;
SLint x = convertToCanvasCoordinate(mouseEvent->targetX);
SLint y = convertToCanvasCoordinate(mouseEvent->targetY);
SLKey modifiers = mapModifiersToSLModifiers(mouseEvent);

startX = -1;
Expand Down Expand Up @@ -314,8 +316,8 @@ static EM_BOOL onMouseDoubleClicked(int eventType,
const EmscriptenMouseEvent* mouseEvent,
void* userData)
{
SLint x = mouseX;
SLint y = mouseY;
SLint x = convertToCanvasCoordinate(mouseEvent->targetX);
SLint y = convertToCanvasCoordinate(mouseEvent->targetY);
SLKey modifiers = mapModifiersToSLModifiers(mouseEvent);

switch (mouseEvent->button)
Expand Down Expand Up @@ -351,8 +353,8 @@ static EM_BOOL onMouseMove(int eventType,
const EmscriptenMouseEvent* mouseEvent,
void* userData)
{
mouseX = (int)mouseEvent->targetX;
mouseY = (int)mouseEvent->targetY;
mouseX = convertToCanvasCoordinate(mouseEvent->targetX);
mouseY = convertToCanvasCoordinate(mouseEvent->targetY);

if (mouseEvent->altKey && mouseEvent->ctrlKey)
slTouch2Move(svIndex,
Expand Down Expand Up @@ -415,8 +417,8 @@ static EM_BOOL onTouchStart(int eventType,
{
if (touchEvent->numTouches == 1)
{
mouseX = (int)touchEvent->touches[0].clientX;
mouseY = (int)touchEvent->touches[0].clientY;
mouseX = convertToCanvasCoordinate(touchEvent->touches[0].clientX);
mouseY = convertToCanvasCoordinate(touchEvent->touches[0].clientY);
slMouseDown(svIndex,
MB_left,
mouseX,
Expand All @@ -426,10 +428,10 @@ static EM_BOOL onTouchStart(int eventType,
}
else if (touchEvent->numTouches == 2)
{
int x0 = (int)touchEvent->touches[0].clientX;
int y0 = (int)touchEvent->touches[0].clientY;
int x1 = (int)touchEvent->touches[1].clientX;
int y1 = (int)touchEvent->touches[1].clientY;
int x0 = convertToCanvasCoordinate(touchEvent->touches[0].clientX);
int y0 = convertToCanvasCoordinate(touchEvent->touches[0].clientY);
int x1 = convertToCanvasCoordinate(touchEvent->touches[1].clientX);
int y1 = convertToCanvasCoordinate(touchEvent->touches[1].clientY);
slTouch2Down(svIndex, x0, y0, x1, y1);
}

Expand All @@ -445,8 +447,8 @@ static EM_BOOL onTouchEnd(int eventType,
{
if (touchEvent->numTouches == 1)
{
mouseX = (int)touchEvent->touches[0].clientX;
mouseY = (int)touchEvent->touches[0].clientY;
mouseX = convertToCanvasCoordinate(touchEvent->touches[0].clientX);
mouseY = convertToCanvasCoordinate(touchEvent->touches[0].clientY);
slMouseUp(svIndex,
MB_left,
mouseX,
Expand All @@ -473,10 +475,10 @@ static EM_BOOL onTouchEnd(int eventType,
}
else if (touchEvent->numTouches == 2)
{
int x0 = (int)touchEvent->touches[0].clientX;
int y0 = (int)touchEvent->touches[0].clientY;
int x1 = (int)touchEvent->touches[1].clientX;
int y1 = (int)touchEvent->touches[1].clientY;
int x0 = convertToCanvasCoordinate(touchEvent->touches[0].clientX);
int y0 = convertToCanvasCoordinate(touchEvent->touches[0].clientY);
int x1 = convertToCanvasCoordinate(touchEvent->touches[1].clientX);
int y1 = convertToCanvasCoordinate(touchEvent->touches[1].clientY);
slTouch2Up(svIndex, x0, y0, x1, y1);
}

Expand All @@ -489,16 +491,16 @@ static EM_BOOL onTouchMove(int eventType,
{
if (touchEvent->numTouches == 1)
{
mouseX = (int)touchEvent->touches[0].clientX;
mouseY = (int)touchEvent->touches[0].clientY;
mouseX = convertToCanvasCoordinate(touchEvent->touches[0].clientX);
mouseY = convertToCanvasCoordinate(touchEvent->touches[0].clientY);
slMouseMove(svIndex, mouseX, mouseY);
}
else if (touchEvent->numTouches == 2)
{
int x0 = (int)touchEvent->touches[0].clientX;
int y0 = (int)touchEvent->touches[0].clientY;
int x1 = (int)touchEvent->touches[1].clientX;
int y1 = (int)touchEvent->touches[1].clientY;
int x0 = convertToCanvasCoordinate(touchEvent->touches[0].clientX);
int y0 = convertToCanvasCoordinate(touchEvent->touches[0].clientY);
int x1 = convertToCanvasCoordinate(touchEvent->touches[1].clientX);
int y1 = convertToCanvasCoordinate(touchEvent->touches[1].clientY);
slTouch2Move(svIndex, x0, y0, x1, y1);
}

Expand All @@ -518,6 +520,11 @@ static const char* onUnload(int eventType,
return nullptr;
}
//-----------------------------------------------------------------------------
static SLint convertToCanvasCoordinate(SLint coordinate)
{
return (SLint)((double)coordinate * EM_ASM_DOUBLE(return window.devicePixelRatio));
}
//-----------------------------------------------------------------------------
static SLKey mapKeyToSLKey(unsigned long key)
{
switch (key)
Expand Down

0 comments on commit 852659a

Please sign in to comment.