Revision control

++ // Copyright (C) 2016 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
++
++ #include "renderarea.h"
++
++ #include <QPainter>
++ #include <QPainterStateGuard>
++ #include <QPaintEvent>
++
++ //! [0]
++ RenderArea::RenderArea(QWidget *parent)
++ : QWidget(parent)
++ {
++ QFont newFont = font();
++ newFont.setPixelSize(12);
++ setFont(newFont);
++
++ QFontMetrics fontMetrics(newFont);
++ xBoundingRect = fontMetrics.boundingRect(tr("x"));
++ yBoundingRect = fontMetrics.boundingRect(tr("y"));
++ }
++ //! [0]
++
++ //! [1]
++ void RenderArea::setOperations(const QList<Operation> &operations)
++ {
++ this->operations = operations;
++ update();
++ }
++ //! [1]
++
++ //! [2]
++ void RenderArea::setShape(const QPainterPath &shape)
++ {
++ this->shape = shape;
++ update();
++ }
++ //! [2]
++
++ //! [3]
++ QSize RenderArea::minimumSizeHint() const
++ {
++ return QSize(182, 182);
++ }
++ //! [3]
++
++ //! [4]
++ QSize RenderArea::sizeHint() const
++ {
++ return QSize(232, 232);
++ }
++ //! [4]
++
++ //! [5]
++ void RenderArea::paintEvent(QPaintEvent *event)
++ {
++ QPainter painter(this);
++ painter.setRenderHint(QPainter::Antialiasing);
++ painter.fillRect(event->rect(), QBrush(Qt::white));
++
++ painter.translate(66, 66);
++ //! [5]
++
++ //! [6]
++ {
++ QPainterStateGuard guard(&painter);
++ transformPainter(painter);
++ drawShape(painter);
++ }
++ //! [6]
++
++ //! [7]
++ drawOutline(painter);
++ //! [7]
++
++ //! [8]
++ transformPainter(painter);
++ drawCoordinates(painter);
++ }
++ //! [8]
++
++ //! [9]
++ void RenderArea::drawCoordinates(QPainter &painter)
++ {
++ painter.setPen(Qt::red);
++
++ painter.drawLine(0, 0, 50, 0);
++ painter.drawLine(48, -2, 50, 0);
++ painter.drawLine(48, 2, 50, 0);
++ painter.drawText(60 - xBoundingRect.width() / 2,
++ 0 + xBoundingRect.height() / 2, tr("x"));
++
++ painter.drawLine(0, 0, 0, 50);
++ painter.drawLine(-2, 48, 0, 50);
++ painter.drawLine(2, 48, 0, 50);
++ painter.drawText(0 - yBoundingRect.width() / 2,
++ 60 + yBoundingRect.height() / 2, tr("y"));
++ }
++ //! [9]
++
++ //! [10]
++ void RenderArea::drawOutline(QPainter &painter)
++ {
++ painter.setPen(Qt::darkGreen);
++ painter.setPen(Qt::DashLine);
++ painter.setBrush(Qt::NoBrush);
++ painter.drawRect(0, 0, 100, 100);
++ }
++ //! [10]
++
++ //! [11]
++ void RenderArea::drawShape(QPainter &painter)
++ {
++ painter.fillPath(shape, Qt::blue);
++ }
++ //! [11]
++
++ //! [12]
++ void RenderArea::transformPainter(QPainter &painter)
++ {
++ for (int i = 0; i < operations.size(); ++i) {
++ switch (operations[i]) {
++ case Translate:
++ painter.translate(50, 50);
++ break;
++ case Scale:
++ painter.scale(0.75, 0.75);
++ break;
++ case Rotate:
++ painter.rotate(60);
++ break;
++ case NoTransformation:
++ default:
++ ;
++ }
++ }
++ }
++ //! [12]