diff options
Diffstat (limited to 'examples/widgets/painting/affine/xform.cpp')
-rw-r--r-- | examples/widgets/painting/affine/xform.cpp | 156 |
1 files changed, 47 insertions, 109 deletions
diff --git a/examples/widgets/painting/affine/xform.cpp b/examples/widgets/painting/affine/xform.cpp index d7ed2125d2..5754490eed 100644 --- a/examples/widgets/painting/affine/xform.cpp +++ b/examples/widgets/painting/affine/xform.cpp @@ -1,52 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the demonstration applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** 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. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "xform.h" #include "hoverpoints.h" @@ -58,27 +11,22 @@ const int alpha = 155; XFormView::XFormView(QWidget *parent) - : ArthurFrame(parent) + : ArthurFrame(parent), + m_pixmap(QPixmap(":res/affine/bg1.jpg")) { setAttribute(Qt::WA_MouseTracking); - m_type = VectorType; - m_rotation = 0.0; - m_scale = 1.0; - m_shear = 0.0; - - m_pixmap = QPixmap(":res/affine/bg1.jpg"); - pts = new HoverPoints(this, HoverPoints::CircleShape); - pts->setConnectionType(HoverPoints::LineConnection); - pts->setEditable(false); - pts->setPointSize(QSize(15, 15)); - pts->setShapeBrush(QBrush(QColor(151, 0, 0, alpha))); - pts->setShapePen(QPen(QColor(255, 100, 50, alpha))); - pts->setConnectionPen(QPen(QColor(151, 0, 0, 50))); - pts->setBoundingRect(QRectF(0, 0, 500, 500)); - ctrlPoints << QPointF(250, 250) << QPointF(350, 250); - pts->setPoints(ctrlPoints); - connect(pts, &HoverPoints::pointsChanged, - this,&XFormView::updateCtrlPoints); + + m_hoverPoints = new HoverPoints(this, HoverPoints::CircleShape); + m_hoverPoints->setConnectionType(HoverPoints::LineConnection); + m_hoverPoints->setEditable(false); + m_hoverPoints->setPointSize(QSize(15, 15)); + m_hoverPoints->setShapeBrush(QBrush(QColor(151, 0, 0, alpha))); + m_hoverPoints->setShapePen(QPen(QColor(255, 100, 50, alpha))); + m_hoverPoints->setConnectionPen(QPen(QColor(151, 0, 0, 50))); + m_hoverPoints->setBoundingRect(QRectF(0, 0, 500, 500)); + m_hoverPoints->setPoints(m_controlPoints); + connect(m_hoverPoints, &HoverPoints::pointsChanged, + this, &XFormView::updateControlPoints); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); } @@ -122,7 +70,7 @@ void XFormView::mousePressEvent(QMouseEvent *) void XFormView::resizeEvent(QResizeEvent *e) { - pts->setBoundingRect(rect()); + m_hoverPoints->setBoundingRect(rect()); ArthurFrame::resizeEvent(e); } @@ -145,24 +93,24 @@ void XFormView::paint(QPainter *p) p->restore(); } -void XFormView::updateCtrlPoints(const QPolygonF &points) +void XFormView::updateControlPoints(const QPolygonF &points) { - QPointF trans = points.at(0) - ctrlPoints.at(0); + QPointF trans = points.at(0) - m_controlPoints.at(0); if (qAbs(points.at(0).x() - points.at(1).x()) < 10 && qAbs(points.at(0).y() - points.at(1).y()) < 10) - pts->setPoints(ctrlPoints); + m_hoverPoints->setPoints(m_controlPoints); if (!trans.isNull()) { - ctrlPoints[0] = points.at(0); - ctrlPoints[1] += trans; - pts->setPoints(ctrlPoints); + m_controlPoints[0] = points.at(0); + m_controlPoints[1] += trans; + m_hoverPoints->setPoints(m_controlPoints); } - ctrlPoints = points; + m_controlPoints = points; - QLineF line(ctrlPoints.at(0), ctrlPoints.at(1)); + QLineF line(m_controlPoints.at(0), m_controlPoints.at(1)); m_rotation = 360 - QLineF(0, 0, 1, 0).angleTo(line); if (trans.isNull()) - emit rotationChanged(int(m_rotation*10)); + emit rotationChanged(int(m_rotation * 10)); } void XFormView::setVectorType() @@ -222,12 +170,12 @@ void XFormView::setRotation(qreal r) qreal old_rot = m_rotation; m_rotation = r; - QPointF center(pts->points().at(0)); + QPointF center(m_hoverPoints->points().at(0)); QTransform m; m.translate(center.x(), center.y()); m.rotate(m_rotation - old_rot); m.translate(-center.x(), -center.y()); - pts->setPoints(pts->points() * m); + m_hoverPoints->setPoints(m_hoverPoints->points() * m); update(); } @@ -235,12 +183,12 @@ void XFormView::setRotation(qreal r) void XFormView::timerEvent(QTimerEvent *e) { if (e->timerId() == timer.timerId()) { - QPointF center(pts->points().at(0)); + QPointF center(m_hoverPoints->points().at(0)); QTransform m; m.translate(center.x(), center.y()); m.rotate(0.2); m.translate(-center.x(), -center.y()); - pts->setPoints(pts->points() * m); + m_hoverPoints->setPoints(m_hoverPoints->points() * m); setUpdatesEnabled(false); static qreal scale_inc = 0.003; @@ -253,7 +201,7 @@ void XFormView::timerEvent(QTimerEvent *e) shear_inc = -shear_inc; setUpdatesEnabled(true); - pts->firePointChange(); + m_hoverPoints->firePointChange(); } } @@ -271,16 +219,15 @@ void XFormView::reset() emit rotationChanged(0); emit scaleChanged(1000); emit shearChanged(0); - ctrlPoints = QPolygonF(); - ctrlPoints << QPointF(250, 250) << QPointF(350, 250); - pts->setPoints(ctrlPoints); - pts->firePointChange(); + m_controlPoints = {{250, 250}, {350, 250}}; + m_hoverPoints->setPoints(m_controlPoints); + m_hoverPoints->firePointChange(); } void XFormView::drawPixmapType(QPainter *painter) { QPointF center(m_pixmap.width() / qreal(2), m_pixmap.height() / qreal(2)); - painter->translate(ctrlPoints.at(0) - center); + painter->translate(m_controlPoints.at(0) - center); painter->translate(center); painter->rotate(m_rotation); @@ -289,9 +236,11 @@ void XFormView::drawPixmapType(QPainter *painter) painter->translate(-center); painter->drawPixmap(QPointF(0, 0), m_pixmap); - painter->setPen(QPen(QColor(255, 0, 0, alpha), 0.25, Qt::SolidLine, Qt::FlatCap, Qt::BevelJoin)); + painter->setPen(QPen(QColor(255, 0, 0, alpha), 0.25, + Qt::SolidLine, Qt::FlatCap, Qt::BevelJoin)); painter->setBrush(Qt::NoBrush); - painter->drawRect(QRectF(0, 0, m_pixmap.width(), m_pixmap.height()).adjusted(-2, -2, 2, 2)); + painter->drawRect(QRectF(0, 0, m_pixmap.width(), + m_pixmap.height()).adjusted(-2, -2, 2, 2)); } void XFormView::drawTextType(QPainter *painter) @@ -306,7 +255,7 @@ void XFormView::drawTextType(QPainter *painter) QFontMetrics fm(f); QRectF br(fm.boundingRect(m_text)); QPointF center(br.center()); - painter->translate(ctrlPoints.at(0) - center); + painter->translate(m_controlPoints.at(0) - center); painter->translate(center); painter->rotate(m_rotation); @@ -316,7 +265,8 @@ void XFormView::drawTextType(QPainter *painter) painter->fillPath(path, Qt::black); - painter->setPen(QPen(QColor(255, 0, 0, alpha), 0.25, Qt::SolidLine, Qt::FlatCap, Qt::BevelJoin)); + painter->setPen(QPen(QColor(255, 0, 0, alpha), 0.25, + Qt::SolidLine, Qt::FlatCap, Qt::BevelJoin)); painter->setBrush(Qt::NoBrush); painter->drawRect(br.adjusted(-1, -1, 1, 1)); } @@ -324,7 +274,7 @@ void XFormView::drawTextType(QPainter *painter) void XFormView::drawVectorType(QPainter *painter) { QPainterPath path; - painter->translate(ctrlPoints.at(0) - QPointF(250,250)); + painter->translate(m_controlPoints.at(0) - QPointF(250,250)); painter->scale(0.77, 0.77); painter->translate(98.9154 + 30 , -217.691 - 20); @@ -339,10 +289,10 @@ void XFormView::drawVectorType(QPainter *painter) painter->setPen(Qt::NoPen); path.moveTo(120, 470); - path.lineTo(60+245, 470); - path.lineTo(60+245, 470+350); - path.lineTo(60, 470+350); - path.lineTo(60, 470+80); + path.lineTo(60 + 245, 470); + path.lineTo(60 + 245, 470 + 350); + path.lineTo(60, 470 + 350); + path.lineTo(60, 470 + 80); painter->setBrush(Qt::white); painter->drawPath(path); @@ -827,12 +777,6 @@ XFormWidget::XFormWidget(QWidget *parent) QPushButton *showSourceButton = new QPushButton(mainGroup); showSourceButton->setText(tr("Show Source")); -#if QT_CONFIG(opengl) - QPushButton *enableOpenGLButton = new QPushButton(mainGroup); - enableOpenGLButton->setText(tr("Use OpenGL")); - enableOpenGLButton->setCheckable(true); - enableOpenGLButton->setChecked(view->usesOpenGL()); -#endif QPushButton *whatsThisButton = new QPushButton(mainGroup); whatsThisButton->setText(tr("What's This?")); whatsThisButton->setCheckable(true); @@ -862,9 +806,6 @@ XFormWidget::XFormWidget(QWidget *parent) mainGroupLayout->addWidget(resetButton); mainGroupLayout->addWidget(animateButton); mainGroupLayout->addWidget(showSourceButton); -#if QT_CONFIG(opengl) - mainGroupLayout->addWidget(enableOpenGLButton); -#endif mainGroupLayout->addWidget(whatsThisButton); mainGroup->setLayout(mainGroupLayout); @@ -902,9 +843,6 @@ XFormWidget::XFormWidget(QWidget *parent) connect(view, &XFormView::descriptionEnabledChanged, view->hoverPoints(), &HoverPoints::setDisabled); connect(view, &XFormView::descriptionEnabledChanged, whatsThisButton, &QPushButton::setChecked); connect(showSourceButton, &QPushButton::clicked, view, &XFormView::showSource); -#if QT_CONFIG(opengl) - connect(enableOpenGLButton, &QPushButton::clicked, view, &XFormView::enableOpenGL); -#endif view->loadSourceFile(":res/affine/xform.cpp"); view->loadDescription(":res/affine/xform.html"); |