wasm: Specify event targets by CSS selectors; Support emsdk >= 1.39.5
DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR is now on by default, which means that functions like emscripten_set_keydown_callback() now expects CSS selectors (e.g. "#canvas_id" instead of "canvas_id"). In addition, Module.canvas is no more. Add a deprecation warning in case someone is setting it and expects Qt to use it. (qtloader.js sets qtCanvasElements instead). This bumps the minimum supported emsdk version to 1.39.5. Change-Id: I38abb2a191076ea04581c29552657ee3e0b87dbc Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
This commit is contained in:
parent
27d35a3ed0
commit
c6da278271
@ -339,8 +339,7 @@ QWasmEventTranslator::QWasmEventTranslator(QWasmScreen *screen)
|
||||
|
||||
void QWasmEventTranslator::initEventHandlers()
|
||||
{
|
||||
QByteArray _canvasId = screen()->canvasId().toUtf8();
|
||||
const char *canvasId = _canvasId.constData();
|
||||
QByteArray canvasSelector = "#" + screen()->canvasId().toUtf8();
|
||||
|
||||
// The Platform Detect: expand coverage and move as needed
|
||||
enum Platform {
|
||||
@ -364,21 +363,21 @@ void QWasmEventTranslator::initEventHandlers()
|
||||
}
|
||||
}
|
||||
|
||||
emscripten_set_keydown_callback(canvasId, (void *)this, 1, &keyboard_cb);
|
||||
emscripten_set_keyup_callback(canvasId, (void *)this, 1, &keyboard_cb);
|
||||
emscripten_set_keydown_callback(canvasSelector.constData(), (void *)this, 1, &keyboard_cb);
|
||||
emscripten_set_keyup_callback(canvasSelector.constData(), (void *)this, 1, &keyboard_cb);
|
||||
|
||||
emscripten_set_mousedown_callback(canvasId, (void *)this, 1, &mouse_cb);
|
||||
emscripten_set_mouseup_callback(canvasId, (void *)this, 1, &mouse_cb);
|
||||
emscripten_set_mousemove_callback(canvasId, (void *)this, 1, &mouse_cb);
|
||||
emscripten_set_mousedown_callback(canvasSelector.constData(), (void *)this, 1, &mouse_cb);
|
||||
emscripten_set_mouseup_callback(canvasSelector.constData(), (void *)this, 1, &mouse_cb);
|
||||
emscripten_set_mousemove_callback(canvasSelector.constData(), (void *)this, 1, &mouse_cb);
|
||||
|
||||
emscripten_set_focus_callback(canvasId, (void *)this, 1, &focus_cb);
|
||||
emscripten_set_focus_callback(canvasSelector.constData(), (void *)this, 1, &focus_cb);
|
||||
|
||||
emscripten_set_wheel_callback(canvasId, (void *)this, 1, &wheel_cb);
|
||||
emscripten_set_wheel_callback(canvasSelector.constData(), (void *)this, 1, &wheel_cb);
|
||||
|
||||
emscripten_set_touchstart_callback(canvasId, (void *)this, 1, &touchCallback);
|
||||
emscripten_set_touchend_callback(canvasId, (void *)this, 1, &touchCallback);
|
||||
emscripten_set_touchmove_callback(canvasId, (void *)this, 1, &touchCallback);
|
||||
emscripten_set_touchcancel_callback(canvasId, (void *)this, 1, &touchCallback);
|
||||
emscripten_set_touchstart_callback(canvasSelector.constData(), (void *)this, 1, &touchCallback);
|
||||
emscripten_set_touchend_callback(canvasSelector.constData(), (void *)this, 1, &touchCallback);
|
||||
emscripten_set_touchmove_callback(canvasSelector.constData(), (void *)this, 1, &touchCallback);
|
||||
emscripten_set_touchcancel_callback(canvasSelector.constData(), (void *)this, 1, &touchCallback);
|
||||
}
|
||||
|
||||
template <typename Event>
|
||||
|
@ -108,9 +108,8 @@ QWasmIntegration::QWasmIntegration()
|
||||
s_instance = this;
|
||||
|
||||
// We expect that qtloader.js has populated Module.qtCanvasElements with one or more canvases.
|
||||
// Also check Module.canvas, which may be set if the emscripen or a custom loader is used.
|
||||
emscripten::val qtCanvaseElements = val::module_property("qtCanvasElements");
|
||||
emscripten::val canvas = val::module_property("canvas");
|
||||
emscripten::val canvas = val::module_property("canvas"); // TODO: remove for Qt 6.0
|
||||
|
||||
if (!qtCanvaseElements.isUndefined()) {
|
||||
int screenCount = qtCanvaseElements["length"].as<int>();
|
||||
@ -119,7 +118,9 @@ QWasmIntegration::QWasmIntegration()
|
||||
QString canvasId = QWasmString::toQString(canvas["id"]);
|
||||
addScreen(canvasId);
|
||||
}
|
||||
} else if (!canvas.isUndefined()){
|
||||
} else if (!canvas.isUndefined()) {
|
||||
qWarning() << "Module.canvas is deprecated. A future version of Qt will stop reading this property. "
|
||||
<< "Instead, set Module.qtCanvasElements to be an array of canvas elements, or use qtloader.js.";
|
||||
QString canvasId = QWasmString::toQString(canvas["id"]);
|
||||
addScreen(canvasId);
|
||||
}
|
||||
@ -139,7 +140,7 @@ QWasmIntegration::QWasmIntegration()
|
||||
integration->resizeAllScreens();
|
||||
return 0;
|
||||
};
|
||||
emscripten_set_resize_callback(nullptr, nullptr, 1, onWindowResize);
|
||||
emscripten_set_resize_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, nullptr, 1, onWindowResize);
|
||||
}
|
||||
|
||||
QWasmIntegration::~QWasmIntegration()
|
||||
|
@ -106,7 +106,8 @@ EMSCRIPTEN_WEBGL_CONTEXT_HANDLE QWasmOpenGLContext::createEmscriptenContext(cons
|
||||
attributes.depth = useDepthStencil;
|
||||
attributes.stencil = useDepthStencil;
|
||||
|
||||
EMSCRIPTEN_WEBGL_CONTEXT_HANDLE context = emscripten_webgl_create_context(canvasId.toUtf8().constData(), &attributes);
|
||||
QByteArray convasSelector = "#" + canvasId.toUtf8();
|
||||
EMSCRIPTEN_WEBGL_CONTEXT_HANDLE context = emscripten_webgl_create_context(convasSelector.constData(), &attributes);
|
||||
|
||||
return context;
|
||||
}
|
||||
|
@ -178,10 +178,10 @@ void QWasmScreen::updateQScreenAndCanvasRenderSize()
|
||||
// Setting the render size to a value larger than the CSS size enables high-dpi
|
||||
// rendering.
|
||||
|
||||
QByteArray canvasId = m_canvasId.toUtf8();
|
||||
QByteArray canvasSelector = "#" + m_canvasId.toUtf8();
|
||||
double css_width;
|
||||
double css_height;
|
||||
emscripten_get_element_css_size(canvasId.constData(), &css_width, &css_height);
|
||||
emscripten_get_element_css_size(canvasSelector.constData(), &css_width, &css_height);
|
||||
QSizeF cssSize(css_width, css_height);
|
||||
|
||||
QSizeF canvasSize = cssSize * devicePixelRatio();
|
||||
|
Loading…
x
Reference in New Issue
Block a user