diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2009-03-23 09:18:55 (GMT) |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2009-03-23 09:18:55 (GMT) |
commit | e5fcad302d86d316390c6b0f62759a067313e8a9 (patch) | |
tree | c2afbf6f1066b6ce261f14341cf6d310e5595bc1 /tests/auto/qtessellator/testtessellator.cpp | |
download | Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.zip Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.gz Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.bz2 |
Long live Qt 4.5!
Diffstat (limited to 'tests/auto/qtessellator/testtessellator.cpp')
-rw-r--r-- | tests/auto/qtessellator/testtessellator.cpp | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/tests/auto/qtessellator/testtessellator.cpp b/tests/auto/qtessellator/testtessellator.cpp new file mode 100644 index 0000000..bd2795c --- /dev/null +++ b/tests/auto/qtessellator/testtessellator.cpp @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** 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 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, 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 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include <testtessellator.h> +#include <private/qtessellator_p.h> + +#include "math.h" + +class TestTessellator : public QTessellator +{ +public: + QVector<XTrapezoid> *traps; + void addTrap(const Trapezoid &trap); +}; + +void TestTessellator::addTrap(const Trapezoid &trap) +{ + XTrapezoid xtrap; + xtrap.top = Q27Dot5ToXFixed(trap.top); + xtrap.bottom = Q27Dot5ToXFixed(trap.bottom); + xtrap.left.p1.x = Q27Dot5ToXFixed(trap.topLeft->x); + xtrap.left.p1.y = Q27Dot5ToXFixed(trap.topLeft->y); + xtrap.left.p2.x = Q27Dot5ToXFixed(trap.bottomLeft->x); + xtrap.left.p2.y = Q27Dot5ToXFixed(trap.bottomLeft->y); + xtrap.right.p1.x = Q27Dot5ToXFixed(trap.topRight->x); + xtrap.right.p1.y = Q27Dot5ToXFixed(trap.topRight->y); + xtrap.right.p2.x = Q27Dot5ToXFixed(trap.bottomRight->x); + xtrap.right.p2.y = Q27Dot5ToXFixed(trap.bottomRight->y); + traps->append(xtrap); +} + + +void test_tesselate_polygon(QVector<XTrapezoid> *traps, const QPointF *points, int nPoints, + bool winding) +{ + TestTessellator t; + t.traps = traps; + t.setWinding(winding); + t.tessellate(points, nPoints); +} + + +void test_tessellate_polygon_convex(QVector<XTrapezoid> *traps, const QPointF *points, int nPoints, + bool winding) +{ + TestTessellator t; + t.traps = traps; + t.setWinding(winding); + t.tessellateConvex(points, nPoints); +} + + +void test_tessellate_polygon_rect(QVector<XTrapezoid> *traps, const QPointF *points, int nPoints, + bool winding) +{ + // 5 points per rect + Q_ASSERT(nPoints % 5 == 0); + + TestTessellator t; + t.traps = traps; + t.setWinding(winding); + for (int i = 0; i < nPoints / 5; ++i) { + QPointF rectA = points[5*i]; + QPointF rectB = points[5*i+1]; + QPointF rectC = points[5*i+2]; + QPointF rectD = points[5*i+3]; + + QPointF a = (rectA + rectD) * 0.5; + QPointF b = (rectB + rectC) * 0.5; + + QPointF delta = rectA - rectD; + + qreal width = sqrt(delta.x() * delta.x() + delta.y() * delta.y()); + + t.tessellateRect(a, b, width); + } +} |