From 29c0377f07f4942f9957ea87d59c252148dc9e5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Fri, 1 Jun 2018 15:13:30 +0200 Subject: WebAssembly for QtBase MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is the squashed diff from wip/webassembly to dev. Done-with: Peng Wu Done-with: Sami Enne Done-with: Morten Johan Sørvig Started-by: Andrew Knight Change-Id: I6562433c0a38d6ec49ab675e0f104f2665f3392d Reviewed-by: Lorn Potter Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/plugins/platforms/wasm/qwasmcursor.cpp | 131 +++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 src/plugins/platforms/wasm/qwasmcursor.cpp (limited to 'src/plugins/platforms/wasm/qwasmcursor.cpp') diff --git a/src/plugins/platforms/wasm/qwasmcursor.cpp b/src/plugins/platforms/wasm/qwasmcursor.cpp new file mode 100644 index 0000000000..54804a55b3 --- /dev/null +++ b/src/plugins/platforms/wasm/qwasmcursor.cpp @@ -0,0 +1,131 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwasmcursor.h" + +#include + +#include + +void QWasmCursor::changeCursor(QCursor *windowCursor, QWindow *window) +{ + if (windowCursor == nullptr) + return; + + // FIXME: The HTML5 plugin sets the cursor on the native canvas; when using multiple windows + // multiple cursors need to be managed taking mouse postion and stacking into account. + Q_UNUSED(window); + + // Bitmap and custom cursors are not implemented (will fall back to "auto") + if (windowCursor->shape() == Qt::BitmapCursor || windowCursor->shape() >= Qt::CustomCursor) + qWarning() << "QWasmCursor: bitmap and custom cursors are not supported"; + + QByteArray htmlCursorName = cursorShapeToHtml(windowCursor->shape()); + + if (htmlCursorName.isEmpty()) + htmlCursorName = "auto"; + + // Set cursor on the main canvas + EM_ASM_ARGS({ + if (Module['canvas']) { + Module['canvas'].style['cursor'] = Pointer_stringify($0); + } + }, htmlCursorName.constData()); +} + +QByteArray QWasmCursor::cursorShapeToHtml(Qt::CursorShape shape) +{ + QByteArray cursorName; + + switch (shape) { + case Qt::ArrowCursor: + cursorName = "default"; + break; + case Qt::UpArrowCursor: + break; + case Qt::CrossCursor: + cursorName = "crosshair"; + break; + case Qt::WaitCursor: + cursorName = "wait"; + break; + case Qt::IBeamCursor: + cursorName = "text"; + break; + case Qt::SizeVerCursor: + cursorName = "ns-resize"; + break; + case Qt::SizeHorCursor: + cursorName = "ew-resize"; + break; + case Qt::SizeBDiagCursor: + cursorName = "nesw-resize"; + break; + case Qt::SizeFDiagCursor: + cursorName = "nwse-resize"; + break; + case Qt::SizeAllCursor: + break; // no equivalent? + case Qt::BlankCursor: + cursorName = "none"; + break; + case Qt::SplitVCursor: + cursorName = "row-resize"; + break; + case Qt::SplitHCursor: + cursorName = "col-resize"; + break; + case Qt::PointingHandCursor: + cursorName = "pointer"; + break; + case Qt::ForbiddenCursor: + cursorName = "not-allowed"; + break; + case Qt::WhatsThisCursor: + cursorName = "help"; + break; + case Qt::BusyCursor: + cursorName = "wait"; + break; + case Qt::OpenHandCursor: + break; // no equivalent? + case Qt::ClosedHandCursor: + break; // no equivalent? + case Qt::DragCopyCursor: + break; // no equivalent? + case Qt::DragMoveCursor: + break; // no equivalent? + case Qt::DragLinkCursor: + break; // no equivalent? + default: + break; + } + + return cursorName; +} -- cgit v1.2.3