Changeset View
Changeset View
Standalone View
Standalone View
src/shadowedrectangle.cpp
- This file was added.
1 | /* | ||||
---|---|---|---|---|---|
2 | * SPDX-FileCopyrightText: 2020 Arjen Hiemstra <ahiemstra@heimr.nl> | ||||
3 | * | ||||
4 | * SPDX-License-Identifier: LGPL-2.0-or-later | ||||
5 | */ | ||||
6 | | ||||
7 | #include "shadowedrectangle.h" | ||||
8 | | ||||
9 | #include "scenegraph/shadowedrectanglenode.h" | ||||
10 | | ||||
11 | class ShadowedRectangle::Private | ||||
12 | { | ||||
13 | public: | ||||
14 | qreal size = 0.0; | ||||
15 | qreal radius = 0.0; | ||||
16 | qreal xOffset = 0.0; | ||||
17 | qreal yOffset = 0.0; | ||||
18 | QColor color = Qt::white; | ||||
19 | QColor shadowColor = Qt::black; | ||||
20 | }; | ||||
21 | | ||||
22 | ShadowedRectangle::ShadowedRectangle(QQuickItem *parentItem) | ||||
23 | : QQuickItem(parentItem), d(new Private) | ||||
24 | { | ||||
25 | setFlag(QQuickItem::ItemHasContents, true); | ||||
26 | } | ||||
27 | | ||||
28 | ShadowedRectangle::~ShadowedRectangle() | ||||
29 | { | ||||
30 | } | ||||
31 | | ||||
32 | qreal ShadowedRectangle::size() const | ||||
33 | { | ||||
34 | return d->size; | ||||
35 | } | ||||
36 | | ||||
37 | void ShadowedRectangle::setSize(qreal newSize) | ||||
38 | { | ||||
39 | if (newSize == d->size) { | ||||
40 | return; | ||||
41 | } | ||||
42 | | ||||
43 | d->size = newSize; | ||||
44 | update(); | ||||
45 | Q_EMIT sizeChanged(); | ||||
46 | } | ||||
47 | | ||||
48 | qreal ShadowedRectangle::radius() const | ||||
49 | { | ||||
50 | return d->radius; | ||||
51 | } | ||||
52 | | ||||
53 | void ShadowedRectangle::setRadius(qreal newRadius) | ||||
54 | { | ||||
55 | if (newRadius == d->radius) { | ||||
56 | return; | ||||
57 | } | ||||
58 | | ||||
59 | d->radius = newRadius; | ||||
60 | update(); | ||||
61 | Q_EMIT radiusChanged(); | ||||
62 | } | ||||
63 | | ||||
64 | qreal ShadowedRectangle::xOffset() const | ||||
65 | { | ||||
66 | return d->xOffset; | ||||
67 | } | ||||
68 | | ||||
69 | void ShadowedRectangle::setXOffset(qreal newXOffset) | ||||
70 | { | ||||
71 | if (newXOffset == d->xOffset) { | ||||
72 | return; | ||||
73 | } | ||||
74 | | ||||
75 | d->xOffset = newXOffset; | ||||
76 | update(); | ||||
77 | Q_EMIT xOffsetChanged(); | ||||
78 | } | ||||
79 | | ||||
80 | qreal ShadowedRectangle::yOffset() const | ||||
81 | { | ||||
82 | return d->yOffset; | ||||
83 | } | ||||
84 | | ||||
85 | void ShadowedRectangle::setYOffset(qreal newYOffset) | ||||
86 | { | ||||
87 | if (newYOffset == d->yOffset) { | ||||
88 | return; | ||||
89 | } | ||||
90 | | ||||
91 | d->yOffset = newYOffset; | ||||
92 | update(); | ||||
93 | Q_EMIT yOffsetChanged(); | ||||
94 | } | ||||
95 | | ||||
96 | QColor ShadowedRectangle::color() const | ||||
97 | { | ||||
98 | return d->color; | ||||
99 | } | ||||
100 | | ||||
101 | void ShadowedRectangle::setColor(const QColor & newColor) | ||||
102 | { | ||||
103 | if (newColor == d->color) { | ||||
104 | return; | ||||
105 | } | ||||
106 | | ||||
107 | d->color = newColor; | ||||
108 | update(); | ||||
109 | Q_EMIT colorChanged(); | ||||
110 | } | ||||
111 | | ||||
112 | QColor ShadowedRectangle::shadowColor() const | ||||
113 | { | ||||
114 | return d->shadowColor; | ||||
115 | } | ||||
116 | | ||||
117 | void ShadowedRectangle::setShadowColor(const QColor &newShadowColor) | ||||
118 | { | ||||
119 | if (newShadowColor == d->shadowColor) { | ||||
120 | return; | ||||
121 | } | ||||
122 | | ||||
123 | d->shadowColor = newShadowColor; | ||||
124 | update(); | ||||
125 | Q_EMIT shadowColorChanged(); | ||||
126 | } | ||||
127 | | ||||
128 | QSGNode *ShadowedRectangle::updatePaintNode(QSGNode *node, QQuickItem::UpdatePaintNodeData *data) | ||||
129 | { | ||||
130 | Q_UNUSED(data); | ||||
131 | | ||||
132 | if (!node) { | ||||
133 | node = new ShadowedRectangleNode; | ||||
134 | } | ||||
135 | | ||||
136 | auto elevatedNode = static_cast<ShadowedRectangleNode*>(node); | ||||
137 | elevatedNode->setRect(boundingRect()); | ||||
138 | elevatedNode->setSize(d->size); | ||||
139 | elevatedNode->setRadius(d->radius); | ||||
140 | elevatedNode->setOffset(QVector2D{float(d->xOffset), float(d->yOffset)}); | ||||
141 | elevatedNode->setColor(d->color); | ||||
142 | elevatedNode->setShadowColor(d->shadowColor); | ||||
143 | elevatedNode->updateGeometry(); | ||||
144 | | ||||
145 | return elevatedNode; | ||||
146 | } |