blob: 61204517ce3cff136bed1841c8f3889714538ab0 [file] [log] [blame]
/****************************************************************************
**
** 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 "qwasmscreen.h"
#include "qwasmstring.h"
#include <QtCore/qdebug.h>
#include <QtGui/qwindow.h>
#include <emscripten/emscripten.h>
#include <emscripten/bind.h>
using namespace emscripten;
void QWasmCursor::changeCursor(QCursor *windowCursor, QWindow *window)
{
if (!windowCursor || !window)
return;
QScreen *screen = window->screen();
if (!screen)
return;
// 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 canvas
val canvas = QWasmScreen::get(screen)->canvas();
val canvasStyle = canvas["style"];
canvasStyle.set("cursor", val(htmlCursorName.constData()));
}
QByteArray QWasmCursor::cursorShapeToHtml(Qt::CursorShape shape)
{
QByteArray cursorName;
switch (shape) {
case Qt::ArrowCursor:
cursorName = "default";
break;
case Qt::UpArrowCursor:
cursorName = "n-resize";
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:
cursorName = "move";
break;
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 = "progress";
break;
case Qt::OpenHandCursor:
cursorName = "grab";
break;
case Qt::ClosedHandCursor:
cursorName = "grabbing";
break;
case Qt::DragCopyCursor:
cursorName = "copy";
break;
case Qt::DragMoveCursor:
cursorName = "default";
break;
case Qt::DragLinkCursor:
cursorName = "alias";
break;
default:
break;
}
return cursorName;
}