1 /*
2 	SPDX-FileCopyrightText: 2011 Graeme Gott <graeme@gottcode.org>
3 
4 	SPDX-License-Identifier: GPL-3.0-or-later
5 */
6 
7 #include "beveled_rect.h"
8 
9 #include <QPainter>
10 
11 //-----------------------------------------------------------------------------
12 
BeveledRect(int size,QGraphicsItem * parent)13 BeveledRect::BeveledRect(int size, QGraphicsItem* parent)
14 	: QGraphicsItem(parent)
15 	, m_size(size)
16 	, m_steps(5)
17 {
18 }
19 
20 //-----------------------------------------------------------------------------
21 
boundingRect() const22 QRectF BeveledRect::boundingRect() const
23 {
24 	return QRectF(0, 0, m_size, m_size);
25 }
26 
27 //-----------------------------------------------------------------------------
28 
paint(QPainter * painter,const QStyleOptionGraphicsItem * option,QWidget * widget)29 void BeveledRect::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
30 {
31 	Q_UNUSED(option);
32 	Q_UNUSED(widget);
33 
34 	painter->save();
35 
36 	painter->setPen(Qt::NoPen);
37 
38 	for (int i = 0; i < m_steps; ++i) {
39 		painter->setBrush(m_colors[i]);
40 		painter->drawRoundedRect(m_rects[i], 5, 5);
41 	}
42 
43 	painter->restore();
44 }
45 
46 //-----------------------------------------------------------------------------
47 
setColor(const QColor & color,bool bevel)48 void BeveledRect::setColor(const QColor& color, bool bevel)
49 {
50 	if (bevel) {
51 		m_steps = 5;
52 
53 		m_rects[0] = QRectF(0, 0, m_size, m_size);
54 		m_colors[0] = color.darker();
55 
56 		m_rects[1] = QRectF(0.5, 0.5, m_size - 1, m_size - 1);
57 		m_colors[1] = color.darker(168);
58 
59 		m_rects[2] = QRectF(1, 1, m_size - 2, m_size - 2);
60 		m_colors[2] = color.darker(127);
61 
62 		m_rects[3] = QRectF(1.5, 1.5, m_size - 3, m_size - 3);
63 		m_colors[3] = color.darker(106);
64 
65 		m_rects[4] = QRectF(2, 2, m_size - 4, m_size - 4);
66 		m_colors[4] = color;
67 	} else {
68 		m_steps = 1;
69 
70 		m_rects[0] = QRectF(0, 0, m_size, m_size);
71 		m_colors[0] = color;
72 	}
73 
74 	update();
75 }
76 
77 //-----------------------------------------------------------------------------
78