Revision control

++ // Copyright (C) 2016 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
++
++ #include "arthurwidgets.h"
++ #include <QPainter>
++ #include <QPainterPath>
++ #include <QPalette>
++ #include <QImage>
++ #include <QtEvents>
++
++ ArthurFrame::ArthurFrame(QWidget *parent)
++ : QWidget(parent),
++ m_tile(QPixmap(128, 128))
++ {
++ m_tile.fill(Qt::white);
++ QPainter pt(&m_tile);
++ QColor color(230, 230, 230);
++ pt.fillRect(0, 0, 64, 64, color);
++ pt.fillRect(64, 64, 64, 64, color);
++ pt.end();
++ }
++
++ void ArthurFrame::paintEvent(QPaintEvent *e)
++ {
++ static QImage *static_image = nullptr;
++
++ QPainter painter;
++
++ if (preferImage()) {
++ if (!static_image || static_image->size() != size()) {
++ delete static_image;
++ static_image = new QImage(size(), QImage::Format_RGB32);
++ }
++ painter.begin(static_image);
++
++ int o = 10;
++
++ QBrush bg = palette().brush(QPalette::Window);
++ painter.fillRect(0, 0, o, o, bg);
++ painter.fillRect(width() - o, 0, o, o, bg);
++ painter.fillRect(0, height() - o, o, o, bg);
++ painter.fillRect(width() - o, height() - o, o, o, bg);
++ } else {
++ painter.begin(this);
++ }
++
++ painter.setClipRect(e->rect());
++
++ painter.setRenderHint(QPainter::Antialiasing);
++
++ QPainterPath clipPath;
++
++ QRect r = rect();
++ qreal left = r.x() + 1;
++ qreal top = r.y() + 1;
++ qreal right = r.right();
++ qreal bottom = r.bottom();
++ qreal radius2 = 8 * 2;
++
++ clipPath.moveTo(right - radius2, top);
++ clipPath.arcTo(right - radius2, top, radius2, radius2, 90, -90);
++ clipPath.arcTo(right - radius2, bottom - radius2, radius2, radius2, 0, -90);
++ clipPath.arcTo(left, bottom - radius2, radius2, radius2, 270, -90);
++ clipPath.arcTo(left, top, radius2, radius2, 180, -90);
++ clipPath.closeSubpath();
++
++ painter.save();
++ painter.setClipPath(clipPath, Qt::IntersectClip);
++
++ painter.drawTiledPixmap(rect(), m_tile);
++
++ // client painting
++
++ paint(&painter);
++
++ painter.restore();
++
++ int level = 180;
++ painter.setPen(QPen(QColor(level, level, level), 2));
++ painter.setBrush(Qt::NoBrush);
++ painter.drawPath(clipPath);
++
++ if (preferImage()) {
++ painter.end();
++ painter.begin(this);
++ painter.drawImage(e->rect(), *static_image, e->rect());
++ }
++ }