// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "renderarea.h" #include #include //! [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 &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] painter.save(); transformPainter(painter); drawShape(painter); painter.restore(); //! [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]