aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/context2d/qquickcontext2d.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/items/context2d/qquickcontext2d.cpp')
-rw-r--r--src/quick/items/context2d/qquickcontext2d.cpp279
1 files changed, 144 insertions, 135 deletions
diff --git a/src/quick/items/context2d/qquickcontext2d.cpp b/src/quick/items/context2d/qquickcontext2d.cpp
index 1c021e7dc6..b2117d3eb9 100644
--- a/src/quick/items/context2d/qquickcontext2d.cpp
+++ b/src/quick/items/context2d/qquickcontext2d.cpp
@@ -1,31 +1,37 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtQuick module of the Qt Toolkit.
**
-** $QT_BEGIN_LICENSE:LGPL21$
+** $QT_BEGIN_LICENSE:LGPL$
** 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 http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 or version 3 as published by the Free
-** Software Foundation and appearing in the file LICENSE.LGPLv21 and
-** LICENSE.LGPLv3 included in the packaging of this file. Please review the
-** following information to ensure the GNU Lesser General Public License
-** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
**
-** As a special exception, The Qt Company gives you certain additional
-** rights. These rights are described in The Qt Company LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or 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.GPL2 and 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-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
@@ -51,6 +57,7 @@
#include <private/qv4domerrors_p.h>
#include <private/qv4engine_p.h>
#include <private/qv4object_p.h>
+#include <private/qv4qobjectwrapper_p.h>
#include <private/qquickwindow_p.h>
#include <private/qv4value_p.h>
@@ -59,7 +66,8 @@
#include <private/qv4scopedvalue_p.h>
#include <QtCore/qmath.h>
-#include <QtCore/qnumeric.h>
+#include <QtCore/qvector.h>
+#include <QtCore/private/qnumeric_p.h>
#include <QtCore/QRunnable>
#include <QtGui/qguiapplication.h>
#include <QtGui/qopenglframebufferobject.h>
@@ -194,7 +202,7 @@ QColor qt_color_from_string(const QV4::Value &name)
return QColor();
}
-static int qParseFontSizeFromToken(const QString &fontSizeToken, bool &ok)
+static int qParseFontSizeFromToken(const QStringRef &fontSizeToken, bool &ok)
{
ok = false;
float size = fontSizeToken.trimmed().toFloat(&ok);
@@ -210,20 +218,20 @@ static int qParseFontSizeFromToken(const QString &fontSizeToken, bool &ok)
\c true if successful. If the font size is invalid, \c false is returned
and a warning is printed.
*/
-static bool qSetFontSizeFromToken(QFont &font, const QString &fontSizeToken)
+static bool qSetFontSizeFromToken(QFont &font, const QStringRef &fontSizeToken)
{
- const QString trimmedToken = fontSizeToken.trimmed();
- const QString unitStr = trimmedToken.right(2);
- const QString value = trimmedToken.left(trimmedToken.size() - 2);
+ const QStringRef trimmedToken = fontSizeToken.trimmed();
+ const QStringRef unitStr = trimmedToken.right(2);
+ const QStringRef value = trimmedToken.left(trimmedToken.size() - 2);
bool ok = false;
int size = 0;
- if (unitStr == QStringLiteral("px")) {
+ if (unitStr == QLatin1String("px")) {
size = qParseFontSizeFromToken(value, ok);
if (ok) {
font.setPixelSize(size);
return true;
}
- } else if (unitStr == QStringLiteral("pt")) {
+ } else if (unitStr == QLatin1String("pt")) {
size = qParseFontSizeFromToken(value, ok);
if (ok) {
font.setPointSize(size);
@@ -240,7 +248,7 @@ static bool qSetFontSizeFromToken(QFont &font, const QString &fontSizeToken)
each family is separated by spaces. Families with spaces in their name
must be quoted.
*/
-static QStringList qExtractFontFamiliesFromString(const QString &fontFamiliesString)
+static QStringList qExtractFontFamiliesFromString(const QStringRef &fontFamiliesString)
{
QStringList extractedFamilies;
int quoteIndex = -1;
@@ -253,7 +261,7 @@ static QStringList qExtractFontFamiliesFromString(const QString &fontFamiliesStr
} else {
if (ch == fontFamiliesString.at(quoteIndex)) {
// Found the matching quote. +1/-1 because we don't want the quote as part of the name.
- const QString family = fontFamiliesString.mid(quoteIndex + 1, index - quoteIndex - 1);
+ const QString family = fontFamiliesString.mid(quoteIndex + 1, index - quoteIndex - 1).toString();
extractedFamilies.push_back(family);
currentFamily.clear();
quoteIndex = -1;
@@ -300,7 +308,7 @@ static QStringList qExtractFontFamiliesFromString(const QString &fontFamiliesStr
*/
static bool qSetFontFamilyFromTokens(QFont &font, const QStringList &fontFamilyTokens)
{
- foreach (const QString &fontFamilyToken, fontFamilyTokens) {
+ for (const QString &fontFamilyToken : fontFamilyTokens) {
QFontDatabase fontDatabase;
if (fontDatabase.hasFamily(fontFamilyToken)) {
font.setFamily(fontFamilyToken);
@@ -362,9 +370,9 @@ static QFont qt_font_from_string(const QString& fontString, const QFont &current
// We know that font-size must be specified and it must be before font-family
// (which could potentially have "px" or "pt" in its name), so extract it now.
- int fontSizeEnd = fontString.indexOf(QStringLiteral("px"));
+ int fontSizeEnd = fontString.indexOf(QLatin1String("px"));
if (fontSizeEnd == -1)
- fontSizeEnd = fontString.indexOf(QStringLiteral("pt"));
+ fontSizeEnd = fontString.indexOf(QLatin1String("pt"));
if (fontSizeEnd == -1) {
qWarning().nospace() << "Context2D: Invalid font size unit in font string.";
return currentFont;
@@ -384,16 +392,17 @@ static QFont qt_font_from_string(const QString& fontString, const QFont &current
fontSizeEnd += 3;
QFont newFont;
- if (!qSetFontSizeFromToken(newFont, fontString.mid(fontSizeStart, fontSizeEnd - fontSizeStart)))
+ if (!qSetFontSizeFromToken(newFont, fontString.midRef(fontSizeStart, fontSizeEnd - fontSizeStart)))
return currentFont;
// We don't want to parse the size twice, so remove it now.
QString remainingFontString = fontString;
remainingFontString.remove(fontSizeStart, fontSizeEnd - fontSizeStart);
+ QStringRef remainingFontStringRef(&remainingFontString);
// Next, we have to take any font families out, as QString::split() will ruin quoted family names.
- const QString fontFamiliesString = remainingFontString.mid(fontSizeStart);
- remainingFontString.chop(remainingFontString.length() - fontSizeStart);
+ const QStringRef fontFamiliesString = remainingFontStringRef.mid(fontSizeStart);
+ remainingFontStringRef.truncate(fontSizeStart);
QStringList fontFamilies = qExtractFontFamiliesFromString(fontFamiliesString);
if (fontFamilies.isEmpty()) {
return currentFont;
@@ -402,16 +411,16 @@ static QFont qt_font_from_string(const QString& fontString, const QFont &current
return currentFont;
// Now that we've removed the messy parts, we can split the font string on spaces.
- const QString trimmedTokensStr = remainingFontString.trimmed();
+ const QStringRef trimmedTokensStr = remainingFontStringRef.trimmed();
if (trimmedTokensStr.isEmpty()) {
// No optional properties.
return newFont;
}
- const QStringList tokens = trimmedTokensStr.split(QLatin1Char(' '));
+ const auto tokens = trimmedTokensStr.split(QLatin1Char(' '));
int usedTokens = NoTokens;
// Optional properties can be in any order, but font-size and font-family must be last.
- foreach (const QString &token, tokens) {
+ for (const QStringRef &token : tokens) {
if (token.compare(QLatin1String("normal")) == 0) {
if (!(usedTokens & FontStyle) || !(usedTokens & FontVariant) || !(usedTokens & FontWeight)) {
// Could be font-style, font-variant or font-weight.
@@ -763,53 +772,53 @@ void qt_image_boxblur(QImage& image, int radius, bool quality)
static QPainter::CompositionMode qt_composite_mode_from_string(const QString &compositeOperator)
{
- if (compositeOperator == QStringLiteral("source-over")) {
+ if (compositeOperator == QLatin1String("source-over")) {
return QPainter::CompositionMode_SourceOver;
- } else if (compositeOperator == QStringLiteral("source-out")) {
+ } else if (compositeOperator == QLatin1String("source-out")) {
return QPainter::CompositionMode_SourceOut;
- } else if (compositeOperator == QStringLiteral("source-in")) {
+ } else if (compositeOperator == QLatin1String("source-in")) {
return QPainter::CompositionMode_SourceIn;
- } else if (compositeOperator == QStringLiteral("source-atop")) {
+ } else if (compositeOperator == QLatin1String("source-atop")) {
return QPainter::CompositionMode_SourceAtop;
- } else if (compositeOperator == QStringLiteral("destination-atop")) {
+ } else if (compositeOperator == QLatin1String("destination-atop")) {
return QPainter::CompositionMode_DestinationAtop;
- } else if (compositeOperator == QStringLiteral("destination-in")) {
+ } else if (compositeOperator == QLatin1String("destination-in")) {
return QPainter::CompositionMode_DestinationIn;
- } else if (compositeOperator == QStringLiteral("destination-out")) {
+ } else if (compositeOperator == QLatin1String("destination-out")) {
return QPainter::CompositionMode_DestinationOut;
- } else if (compositeOperator == QStringLiteral("destination-over")) {
+ } else if (compositeOperator == QLatin1String("destination-over")) {
return QPainter::CompositionMode_DestinationOver;
- } else if (compositeOperator == QStringLiteral("lighter")) {
+ } else if (compositeOperator == QLatin1String("lighter")) {
return QPainter::CompositionMode_Lighten;
- } else if (compositeOperator == QStringLiteral("copy")) {
+ } else if (compositeOperator == QLatin1String("copy")) {
return QPainter::CompositionMode_Source;
- } else if (compositeOperator == QStringLiteral("xor")) {
+ } else if (compositeOperator == QLatin1String("xor")) {
return QPainter::CompositionMode_Xor;
- } else if (compositeOperator == QStringLiteral("qt-clear")) {
+ } else if (compositeOperator == QLatin1String("qt-clear")) {
return QPainter::CompositionMode_Clear;
- } else if (compositeOperator == QStringLiteral("qt-destination")) {
+ } else if (compositeOperator == QLatin1String("qt-destination")) {
return QPainter::CompositionMode_Destination;
- } else if (compositeOperator == QStringLiteral("qt-multiply")) {
+ } else if (compositeOperator == QLatin1String("qt-multiply")) {
return QPainter::CompositionMode_Multiply;
- } else if (compositeOperator == QStringLiteral("qt-screen")) {
+ } else if (compositeOperator == QLatin1String("qt-screen")) {
return QPainter::CompositionMode_Screen;
- } else if (compositeOperator == QStringLiteral("qt-overlay")) {
+ } else if (compositeOperator == QLatin1String("qt-overlay")) {
return QPainter::CompositionMode_Overlay;
- } else if (compositeOperator == QStringLiteral("qt-darken")) {
+ } else if (compositeOperator == QLatin1String("qt-darken")) {
return QPainter::CompositionMode_Darken;
- } else if (compositeOperator == QStringLiteral("qt-lighten")) {
+ } else if (compositeOperator == QLatin1String("qt-lighten")) {
return QPainter::CompositionMode_Lighten;
- } else if (compositeOperator == QStringLiteral("qt-color-dodge")) {
+ } else if (compositeOperator == QLatin1String("qt-color-dodge")) {
return QPainter::CompositionMode_ColorDodge;
- } else if (compositeOperator == QStringLiteral("qt-color-burn")) {
+ } else if (compositeOperator == QLatin1String("qt-color-burn")) {
return QPainter::CompositionMode_ColorBurn;
- } else if (compositeOperator == QStringLiteral("qt-hard-light")) {
+ } else if (compositeOperator == QLatin1String("qt-hard-light")) {
return QPainter::CompositionMode_HardLight;
- } else if (compositeOperator == QStringLiteral("qt-soft-light")) {
+ } else if (compositeOperator == QLatin1String("qt-soft-light")) {
return QPainter::CompositionMode_SoftLight;
- } else if (compositeOperator == QStringLiteral("qt-difference")) {
+ } else if (compositeOperator == QLatin1String("qt-difference")) {
return QPainter::CompositionMode_Difference;
- } else if (compositeOperator == QStringLiteral("qt-exclusion")) {
+ } else if (compositeOperator == QLatin1String("qt-exclusion")) {
return QPainter::CompositionMode_Exclusion;
}
return QPainter::CompositionMode_SourceOver;
@@ -932,7 +941,7 @@ static QV4::ReturnedValue qt_create_image_data(qreal w, qreal h, QV4::ExecutionE
pixelData->d()->image = QImage(w, h, QImage::Format_ARGB32);
pixelData->d()->image.fill(0x00000000);
} else {
- Q_ASSERT(image.width() == int(w) && image.height() == int(h));
+ Q_ASSERT(image.width() == qRound(w) && image.height() == qRound(h));
pixelData->d()->image = image.format() == QImage::Format_ARGB32 ? image : image.convertToFormat(QImage::Format_ARGB32);
}
@@ -1250,9 +1259,9 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_globalAlpha(QV4::CallContext *c
QV4::Scoped<QQuickJSContext2D> r(scope, ctx->thisObject().as<QQuickJSContext2D>());
CHECK_CONTEXT_SETTER(r)
- double globalAlpha = ctx->argc() ? ctx->args()[0].toNumber() : qSNaN();
+ double globalAlpha = ctx->argc() ? ctx->args()[0].toNumber() : qt_qnan();
- if (!qIsFinite(globalAlpha))
+ if (!qt_is_finite(globalAlpha))
return QV4::Encode::undefined();
if (globalAlpha >= 0.0 && globalAlpha <= 1.0 && r->d()->context->state.globalAlpha != globalAlpha) {
@@ -1308,7 +1317,7 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_globalCompositeOperation(QV4::C
QString mode = ctx->args()[0].toQString();
QPainter::CompositionMode cm = qt_composite_mode_from_string(mode);
- if (cm == QPainter::CompositionMode_SourceOver && mode != QStringLiteral("source-over"))
+ if (cm == QPainter::CompositionMode_SourceOver && mode != QLatin1String("source-over"))
return QV4::Encode::undefined();
if (cm != r->d()->context->state.globalCompositeOperation) {
@@ -1425,10 +1434,10 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_fillRule(QV4::CallContext *ctx)
QV4::ScopedValue value(scope, ctx->argument(0));
- if ((value->isString() && value->toQString() == QStringLiteral("WindingFill"))
+ if ((value->isString() && value->toQString() == QLatin1String("WindingFill"))
|| (value->isInt32() && value->integerValue() == Qt::WindingFill)) {
r->d()->context->state.fillRule = Qt::WindingFill;
- } else if ((value->isString() && value->toQStringNoThrow() == QStringLiteral("OddEvenFill"))
+ } else if ((value->isString() && value->toQStringNoThrow() == QLatin1String("OddEvenFill"))
|| (value->isInt32() && value->integerValue() == Qt::OddEvenFill)) {
r->d()->context->state.fillRule = Qt::OddEvenFill;
} else {
@@ -1536,10 +1545,10 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_createLinearGradient(QV4::
qreal x1 = ctx->args()[2].toNumber();
qreal y1 = ctx->args()[3].toNumber();
- if (!qIsFinite(x0)
- || !qIsFinite(y0)
- || !qIsFinite(x1)
- || !qIsFinite(y1)) {
+ if (!qt_is_finite(x0)
+ || !qt_is_finite(y0)
+ || !qt_is_finite(x1)
+ || !qt_is_finite(y1)) {
V4THROW_DOM(DOMEXCEPTION_NOT_SUPPORTED_ERR, "createLinearGradient(): Incorrect arguments")
}
QQuickContext2DEngineData *ed = engineData(scope.engine);
@@ -1581,12 +1590,12 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_createRadialGradient(QV4::
qreal y1 = ctx->args()[4].toNumber();
qreal r1 = ctx->args()[5].toNumber();
- if (!qIsFinite(x0)
- || !qIsFinite(y0)
- || !qIsFinite(x1)
- || !qIsFinite(r0)
- || !qIsFinite(r1)
- || !qIsFinite(y1)) {
+ if (!qt_is_finite(x0)
+ || !qt_is_finite(y0)
+ || !qt_is_finite(x1)
+ || !qt_is_finite(r0)
+ || !qt_is_finite(r1)
+ || !qt_is_finite(y1)) {
V4THROW_DOM(DOMEXCEPTION_NOT_SUPPORTED_ERR, "createRadialGradient(): Incorrect arguments")
}
@@ -1628,11 +1637,11 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_createConicalGradient(QV4:
qreal x = ctx->args()[0].toNumber();
qreal y = ctx->args()[1].toNumber();
qreal angle = DEGREES(ctx->args()[2].toNumber());
- if (!qIsFinite(x) || !qIsFinite(y)) {
+ if (!qt_is_finite(x) || !qt_is_finite(y)) {
V4THROW_DOM(DOMEXCEPTION_NOT_SUPPORTED_ERR, "createConicalGradient(): Incorrect arguments");
}
- if (!qIsFinite(angle)) {
+ if (!qt_is_finite(angle)) {
V4THROW_DOM(DOMEXCEPTION_INDEX_SIZE_ERR, "createConicalGradient(): Incorrect arguments");
}
@@ -1724,16 +1733,16 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_createPattern(QV4::CallCon
pattern->d()->brush.setTextureImage(patternTexture);
QString repetition = ctx->args()[1].toQStringNoThrow();
- if (repetition == QStringLiteral("repeat") || repetition.isEmpty()) {
+ if (repetition == QLatin1String("repeat") || repetition.isEmpty()) {
pattern->d()->patternRepeatX = true;
pattern->d()->patternRepeatY = true;
- } else if (repetition == QStringLiteral("repeat-x")) {
+ } else if (repetition == QLatin1String("repeat-x")) {
pattern->d()->patternRepeatX = true;
pattern->d()->patternRepeatY = false;
- } else if (repetition == QStringLiteral("repeat-y")) {
+ } else if (repetition == QLatin1String("repeat-y")) {
pattern->d()->patternRepeatX = false;
pattern->d()->patternRepeatY = true;
- } else if (repetition == QStringLiteral("no-repeat")) {
+ } else if (repetition == QLatin1String("no-repeat")) {
pattern->d()->patternRepeatX = false;
pattern->d()->patternRepeatY = false;
} else {
@@ -1787,11 +1796,11 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_lineCap(QV4::CallContext *ctx)
QString lineCap = ctx->args()[0].toQString();
Qt::PenCapStyle cap;
- if (lineCap == QStringLiteral("round"))
+ if (lineCap == QLatin1String("round"))
cap = Qt::RoundCap;
- else if (lineCap == QStringLiteral("butt"))
+ else if (lineCap == QLatin1String("butt"))
cap = Qt::FlatCap;
- else if (lineCap == QStringLiteral("square"))
+ else if (lineCap == QLatin1String("square"))
cap = Qt::SquareCap;
else
return QV4::Encode::undefined();
@@ -1846,11 +1855,11 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_lineJoin(QV4::CallContext *ctx)
QString lineJoin = ctx->args()[0].toQString();
Qt::PenJoinStyle join;
- if (lineJoin == QStringLiteral("round"))
+ if (lineJoin == QLatin1String("round"))
join = Qt::RoundJoin;
- else if (lineJoin == QStringLiteral("bevel"))
+ else if (lineJoin == QLatin1String("bevel"))
join = Qt::BevelJoin;
- else if (lineJoin == QStringLiteral("miter"))
+ else if (lineJoin == QLatin1String("miter"))
join = Qt::SvgMiterJoin;
else
return QV4::Encode::undefined();
@@ -1883,7 +1892,7 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_lineWidth(QV4::CallContext *ctx
qreal w = ctx->argc() ? ctx->args()[0].toNumber() : -1;
- if (w > 0 && qIsFinite(w) && w != r->d()->context->state.lineWidth) {
+ if (w > 0 && qt_is_finite(w) && w != r->d()->context->state.lineWidth) {
r->d()->context->state.lineWidth = w;
r->d()->context->buffer()->setLineWidth(w);
}
@@ -1912,7 +1921,7 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_miterLimit(QV4::CallContext *ct
qreal ml = ctx->argc() ? ctx->args()[0].toNumber() : -1;
- if (ml > 0 && qIsFinite(ml) && ml != r->d()->context->state.miterLimit) {
+ if (ml > 0 && qt_is_finite(ml) && ml != r->d()->context->state.miterLimit) {
r->d()->context->state.miterLimit = ml;
r->d()->context->buffer()->setMiterLimit(ml);
}
@@ -1941,7 +1950,7 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_shadowBlur(QV4::CallContext *ct
qreal blur = ctx->argc() ? ctx->args()[0].toNumber() : -1;
- if (blur > 0 && qIsFinite(blur) && blur != r->d()->context->state.shadowBlur) {
+ if (blur > 0 && qt_is_finite(blur) && blur != r->d()->context->state.shadowBlur) {
r->d()->context->state.shadowBlur = blur;
r->d()->context->buffer()->setShadowBlur(blur);
}
@@ -2000,8 +2009,8 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_shadowOffsetX(QV4::CallContext
QV4::Scoped<QQuickJSContext2D> r(scope, ctx->thisObject());
CHECK_CONTEXT_SETTER(r)
- qreal offsetX = ctx->argc() ? ctx->args()[0].toNumber() : qSNaN();
- if (qIsFinite(offsetX) && offsetX != r->d()->context->state.shadowOffsetX) {
+ qreal offsetX = ctx->argc() ? ctx->args()[0].toNumber() : qt_qnan();
+ if (qt_is_finite(offsetX) && offsetX != r->d()->context->state.shadowOffsetX) {
r->d()->context->state.shadowOffsetX = offsetX;
r->d()->context->buffer()->setShadowOffsetX(offsetX);
}
@@ -2028,8 +2037,8 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_shadowOffsetY(QV4::CallContext
QV4::Scoped<QQuickJSContext2D> r(scope, ctx->thisObject());
CHECK_CONTEXT_SETTER(r)
- qreal offsetY = ctx->argc() ? ctx->args()[0].toNumber() : qSNaN();
- if (qIsFinite(offsetY) && offsetY != r->d()->context->state.shadowOffsetY) {
+ qreal offsetY = ctx->argc() ? ctx->args()[0].toNumber() : qt_qnan();
+ if (qt_is_finite(offsetY) && offsetY != r->d()->context->state.shadowOffsetY) {
r->d()->context->state.shadowOffsetY = offsetY;
r->d()->context->buffer()->setShadowOffsetY(offsetY);
}
@@ -2159,7 +2168,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_arc(QV4::CallContext *ctx)
qreal radius = ctx->args()[2].toNumber();
- if (qIsFinite(radius) && radius < 0)
+ if (qt_is_finite(radius) && radius < 0)
V4THROW_DOM(DOMEXCEPTION_INDEX_SIZE_ERR, "Incorrect argument radius");
r->d()->context->arc(ctx->args()[0].toNumber(),
@@ -2205,7 +2214,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_arcTo(QV4::CallContext *ct
if (ctx->argc() >= 5) {
qreal radius = ctx->args()[4].toNumber();
- if (qIsFinite(radius) && radius < 0)
+ if (qt_is_finite(radius) && radius < 0)
V4THROW_DOM(DOMEXCEPTION_INDEX_SIZE_ERR, "Incorrect argument radius");
r->d()->context->arcTo(ctx->args()[0].toNumber(),
@@ -2268,7 +2277,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_bezierCurveTo(QV4::CallCon
qreal x = ctx->args()[4].toNumber();
qreal y = ctx->args()[5].toNumber();
- if (!qIsFinite(cp1x) || !qIsFinite(cp1y) || !qIsFinite(cp2x) || !qIsFinite(cp2y) || !qIsFinite(x) || !qIsFinite(y))
+ if (!qt_is_finite(cp1x) || !qt_is_finite(cp1y) || !qt_is_finite(cp2x) || !qt_is_finite(cp2y) || !qt_is_finite(x) || !qt_is_finite(y))
return ctx->thisObject().asReturnedValue();
r->d()->context->bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
@@ -2364,7 +2373,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_lineTo(QV4::CallContext *c
qreal x = ctx->args()[0].toNumber();
qreal y = ctx->args()[1].toNumber();
- if (!qIsFinite(x) || !qIsFinite(y))
+ if (!qt_is_finite(x) || !qt_is_finite(y))
return ctx->thisObject().asReturnedValue();
r->d()->context->lineTo(x, y);
@@ -2388,7 +2397,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_moveTo(QV4::CallContext *c
qreal x = ctx->args()[0].toNumber();
qreal y = ctx->args()[1].toNumber();
- if (!qIsFinite(x) || !qIsFinite(y))
+ if (!qt_is_finite(x) || !qt_is_finite(y))
return ctx->thisObject().asReturnedValue();
r->d()->context->moveTo(x, y);
}
@@ -2414,7 +2423,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_quadraticCurveTo(QV4::Call
qreal x = ctx->args()[2].toNumber();
qreal y = ctx->args()[3].toNumber();
- if (!qIsFinite(cpx) || !qIsFinite(cpy) || !qIsFinite(x) || !qIsFinite(y))
+ if (!qt_is_finite(cpx) || !qt_is_finite(cpy) || !qt_is_finite(x) || !qt_is_finite(y))
return ctx->thisObject().asReturnedValue();
r->d()->context->quadraticCurveTo(cpx, cpy, x, y);
@@ -2498,7 +2507,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_text(QV4::CallContext *ctx
qreal x = ctx->args()[1].toNumber();
qreal y = ctx->args()[2].toNumber();
- if (!qIsFinite(x) || !qIsFinite(y))
+ if (!qt_is_finite(x) || !qt_is_finite(y))
return ctx->thisObject().asReturnedValue();
r->d()->context->text(ctx->args()[0].toQStringNoThrow(), x, y);
}
@@ -2727,15 +2736,15 @@ QV4::ReturnedValue QQuickJSContext2D::method_set_textBaseline(QV4::CallContext *
QString textBaseline = s->toQString();
QQuickContext2D::TextBaseLineType tb;
- if (textBaseline == QStringLiteral("alphabetic"))
+ if (textBaseline == QLatin1String("alphabetic"))
tb = QQuickContext2D::Alphabetic;
- else if (textBaseline == QStringLiteral("hanging"))
+ else if (textBaseline == QLatin1String("hanging"))
tb = QQuickContext2D::Hanging;
- else if (textBaseline == QStringLiteral("top"))
+ else if (textBaseline == QLatin1String("top"))
tb = QQuickContext2D::Top;
- else if (textBaseline == QStringLiteral("bottom"))
+ else if (textBaseline == QLatin1String("bottom"))
tb = QQuickContext2D::Bottom;
- else if (textBaseline == QStringLiteral("middle"))
+ else if (textBaseline == QLatin1String("middle"))
tb = QQuickContext2D::Middle;
else
return QV4::Encode::undefined();
@@ -2763,7 +2772,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_fillText(QV4::CallContext
if (ctx->argc() >= 3) {
qreal x = ctx->args()[1].toNumber();
qreal y = ctx->args()[2].toNumber();
- if (!qIsFinite(x) || !qIsFinite(y))
+ if (!qt_is_finite(x) || !qt_is_finite(y))
return ctx->thisObject().asReturnedValue();
QPainterPath textPath = r->d()->context->createTextGlyphs(x, y, ctx->args()[0].toQStringNoThrow());
r->d()->context->buffer()->fill(textPath);
@@ -2962,14 +2971,14 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_drawImage(QV4::CallContext
return ctx->thisObject().asReturnedValue();
}
- if (!qIsFinite(sx)
- || !qIsFinite(sy)
- || !qIsFinite(sw)
- || !qIsFinite(sh)
- || !qIsFinite(dx)
- || !qIsFinite(dy)
- || !qIsFinite(dw)
- || !qIsFinite(dh))
+ if (!qt_is_finite(sx)
+ || !qt_is_finite(sy)
+ || !qt_is_finite(sw)
+ || !qt_is_finite(sh)
+ || !qt_is_finite(dx)
+ || !qt_is_finite(dy)
+ || !qt_is_finite(dw)
+ || !qt_is_finite(dh))
return ctx->thisObject().asReturnedValue();
if (sx < 0
@@ -3190,7 +3199,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_createImageData(QV4::CallC
qreal w = ctx->args()[0].toNumber();
qreal h = ctx->args()[1].toNumber();
- if (!qIsFinite(w) || !qIsFinite(h))
+ if (!qt_is_finite(w) || !qt_is_finite(h))
V4THROW_DOM(DOMEXCEPTION_NOT_SUPPORTED_ERR, "createImageData(): invalid arguments");
if (w > 0 && h > 0)
@@ -3216,7 +3225,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_getImageData(QV4::CallCont
qreal y = ctx->args()[1].toNumber();
qreal w = ctx->args()[2].toNumber();
qreal h = ctx->args()[3].toNumber();
- if (!qIsFinite(x) || !qIsFinite(y) || !qIsFinite(w) || !qIsFinite(h))
+ if (!qt_is_finite(x) || !qt_is_finite(y) || !qt_is_finite(w) || !qt_is_finite(h))
V4THROW_DOM(DOMEXCEPTION_NOT_SUPPORTED_ERR, "getImageData(): Invalid arguments");
if (w <= 0 || h <= 0)
@@ -3248,7 +3257,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_putImageData(QV4::CallCont
qreal dy = ctx->args()[2].toNumber();
qreal w, h, dirtyX, dirtyY, dirtyWidth, dirtyHeight;
- if (!qIsFinite(dx) || !qIsFinite(dy))
+ if (!qt_is_finite(dx) || !qt_is_finite(dy))
V4THROW_DOM(DOMEXCEPTION_NOT_SUPPORTED_ERR, "putImageData() : Invalid arguments");
QV4::Scoped<QQuickJSContext2DImageData> imageData(scope, arg0);
@@ -3266,7 +3275,7 @@ QV4::ReturnedValue QQuickJSContext2DPrototype::method_putImageData(QV4::CallCont
dirtyWidth = ctx->args()[5].toNumber();
dirtyHeight = ctx->args()[6].toNumber();
- if (!qIsFinite(dirtyX) || !qIsFinite(dirtyY) || !qIsFinite(dirtyWidth) || !qIsFinite(dirtyHeight))
+ if (!qt_is_finite(dirtyX) || !qt_is_finite(dirtyY) || !qt_is_finite(dirtyWidth) || !qt_is_finite(dirtyHeight))
V4THROW_DOM(DOMEXCEPTION_NOT_SUPPORTED_ERR, "putImageData() : Invalid arguments");
@@ -3353,7 +3362,7 @@ QV4::ReturnedValue QQuickContext2DStyle::gradient_proto_addColorStop(QV4::CallCo
} else {
color = qt_color_from_string(ctx->args()[1]);
}
- if (pos < 0.0 || pos > 1.0 || !qIsFinite(pos)) {
+ if (pos < 0.0 || pos > 1.0 || !qt_is_finite(pos)) {
V4THROW_DOM(DOMEXCEPTION_INDEX_SIZE_ERR, "CanvasGradient: parameter offset out of range");
}
@@ -3373,7 +3382,7 @@ void QQuickContext2D::scale(qreal x, qreal y)
if (!state.invertibleCTM)
return;
- if (!qIsFinite(x) || !qIsFinite(y))
+ if (!qt_is_finite(x) || !qt_is_finite(y))
return;
QTransform newTransform = state.matrix;
@@ -3394,7 +3403,7 @@ void QQuickContext2D::rotate(qreal angle)
if (!state.invertibleCTM)
return;
- if (!qIsFinite(angle))
+ if (!qt_is_finite(angle))
return;
QTransform newTransform =state.matrix;
@@ -3415,7 +3424,7 @@ void QQuickContext2D::shear(qreal h, qreal v)
if (!state.invertibleCTM)
return;
- if (!qIsFinite(h) || !qIsFinite(v))
+ if (!qt_is_finite(h) || !qt_is_finite(v))
return ;
QTransform newTransform = state.matrix;
@@ -3436,7 +3445,7 @@ void QQuickContext2D::translate(qreal x, qreal y)
if (!state.invertibleCTM)
return;
- if (!qIsFinite(x) || !qIsFinite(y))
+ if (!qt_is_finite(x) || !qt_is_finite(y))
return ;
QTransform newTransform = state.matrix;
@@ -3457,7 +3466,7 @@ void QQuickContext2D::transform(qreal a, qreal b, qreal c, qreal d, qreal e, qre
if (!state.invertibleCTM)
return;
- if (!qIsFinite(a) || !qIsFinite(b) || !qIsFinite(c) || !qIsFinite(d) || !qIsFinite(e) || !qIsFinite(f))
+ if (!qt_is_finite(a) || !qt_is_finite(b) || !qt_is_finite(c) || !qt_is_finite(d) || !qt_is_finite(e) || !qt_is_finite(f))
return;
QTransform transform(a, b, c, d, e, f);
@@ -3474,7 +3483,7 @@ void QQuickContext2D::transform(qreal a, qreal b, qreal c, qreal d, qreal e, qre
void QQuickContext2D::setTransform(qreal a, qreal b, qreal c, qreal d, qreal e, qreal f)
{
- if (!qIsFinite(a) || !qIsFinite(b) || !qIsFinite(c) || !qIsFinite(d) || !qIsFinite(e) || !qIsFinite(f))
+ if (!qt_is_finite(a) || !qt_is_finite(b) || !qt_is_finite(c) || !qt_is_finite(d) || !qt_is_finite(e) || !qt_is_finite(f))
return;
QTransform ctm = state.matrix;
@@ -3531,7 +3540,7 @@ void QQuickContext2D::fillRect(qreal x, qreal y, qreal w, qreal h)
if (!state.invertibleCTM)
return;
- if (!qIsFinite(x) || !qIsFinite(y) || !qIsFinite(w) || !qIsFinite(h))
+ if (!qt_is_finite(x) || !qt_is_finite(y) || !qt_is_finite(w) || !qt_is_finite(h))
return;
buffer()->fillRect(QRectF(x, y, w, h));
@@ -3542,7 +3551,7 @@ void QQuickContext2D::strokeRect(qreal x, qreal y, qreal w, qreal h)
if (!state.invertibleCTM)
return;
- if (!qIsFinite(x) || !qIsFinite(y) || !qIsFinite(w) || !qIsFinite(h))
+ if (!qt_is_finite(x) || !qt_is_finite(y) || !qt_is_finite(w) || !qt_is_finite(h))
return;
buffer()->strokeRect(QRectF(x, y, w, h));
@@ -3553,7 +3562,7 @@ void QQuickContext2D::clearRect(qreal x, qreal y, qreal w, qreal h)
if (!state.invertibleCTM)
return;
- if (!qIsFinite(x) || !qIsFinite(y) || !qIsFinite(w) || !qIsFinite(h))
+ if (!qt_is_finite(x) || !qt_is_finite(y) || !qt_is_finite(w) || !qt_is_finite(h))
return;
buffer()->clearRect(QRectF(x, y, w, h));
@@ -3564,7 +3573,7 @@ void QQuickContext2D::drawText(const QString& text, qreal x, qreal y, bool fill)
if (!state.invertibleCTM)
return;
- if (!qIsFinite(x) || !qIsFinite(y))
+ if (!qt_is_finite(x) || !qt_is_finite(y))
return;
QPainterPath textPath = createTextGlyphs(x, y, text);
@@ -3710,7 +3719,7 @@ void QQuickContext2D::arcTo(qreal x1, qreal y1,
if (!state.invertibleCTM)
return;
- if (!qIsFinite(x1) || !qIsFinite(y1) || !qIsFinite(x2) || !qIsFinite(y2) || !qIsFinite(radius))
+ if (!qt_is_finite(x1) || !qt_is_finite(y1) || !qt_is_finite(x2) || !qt_is_finite(y2) || !qt_is_finite(radius))
return;
QPointF st(x1, y1);
@@ -3728,7 +3737,7 @@ void QQuickContext2D::rect(qreal x, qreal y, qreal w, qreal h)
{
if (!state.invertibleCTM)
return;
- if (!qIsFinite(x) || !qIsFinite(y) || !qIsFinite(w) || !qIsFinite(h))
+ if (!qt_is_finite(x) || !qt_is_finite(y) || !qt_is_finite(w) || !qt_is_finite(h))
return;
if (!w && !h) {
@@ -3745,7 +3754,7 @@ void QQuickContext2D::roundedRect(qreal x, qreal y,
if (!state.invertibleCTM)
return;
- if (!qIsFinite(x) || !qIsFinite(y) || !qIsFinite(w) || !qIsFinite(h) || !qIsFinite(xr) || !qIsFinite(yr))
+ if (!qt_is_finite(x) || !qt_is_finite(y) || !qt_is_finite(w) || !qt_is_finite(h) || !qt_is_finite(xr) || !qt_is_finite(yr))
return;
if (!w && !h) {
@@ -3761,7 +3770,7 @@ void QQuickContext2D::ellipse(qreal x, qreal y,
if (!state.invertibleCTM)
return;
- if (!qIsFinite(x) || !qIsFinite(y) || !qIsFinite(w) || !qIsFinite(h))
+ if (!qt_is_finite(x) || !qt_is_finite(y) || !qt_is_finite(w) || !qt_is_finite(h))
return;
if (!w && !h) {
@@ -3787,7 +3796,7 @@ void QQuickContext2D::arc(qreal xc, qreal yc, qreal radius, qreal sar, qreal ear
if (!state.invertibleCTM)
return;
- if (!qIsFinite(xc) || !qIsFinite(yc) || !qIsFinite(sar) || !qIsFinite(ear) || !qIsFinite(radius))
+ if (!qt_is_finite(xc) || !qt_is_finite(yc) || !qt_is_finite(sar) || !qt_is_finite(ear) || !qt_is_finite(radius))
return;
if (sar == ear)
@@ -3926,13 +3935,13 @@ bool QQuickContext2D::isPointInPath(qreal x, qreal y) const
if (!m_path.elementCount())
return false;
- if (!qIsFinite(x) || !qIsFinite(y))
+ if (!qt_is_finite(x) || !qt_is_finite(y))
return false;
QPointF point(x, y);
QTransform ctm = state.matrix;
QPointF p = ctm.inverted().map(point);
- if (!qIsFinite(p.x()) || !qIsFinite(p.y()))
+ if (!qt_is_finite(p.x()) || !qt_is_finite(p.y()))
return false;
const_cast<QQuickContext2D *>(this)->m_path.setFillRule(state.fillRule);