Changeset View
Changeset View
Standalone View
Standalone View
src/shadowedrectangle.cpp
Show First 20 Lines • Show All 169 Lines • ▼ Show 20 Line(s) | |||||
170 | 170 | | |||
171 | void ShadowedRectangle::componentComplete() | 171 | void ShadowedRectangle::componentComplete() | ||
172 | { | 172 | { | ||
173 | QQuickItem::componentComplete(); | 173 | QQuickItem::componentComplete(); | ||
174 | 174 | | |||
175 | checkSoftwareItem(); | 175 | checkSoftwareItem(); | ||
176 | } | 176 | } | ||
177 | 177 | | |||
178 | void ShadowedRectangle::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value) | ||||
179 | { | ||||
180 | if (change == QQuickItem::ItemSceneChange && value.window) { | ||||
181 | checkSoftwareItem(); | ||||
182 | } | ||||
183 | } | ||||
184 | | ||||
185 | QSGNode *ShadowedRectangle::updatePaintNode(QSGNode *node, QQuickItem::UpdatePaintNodeData *data) | ||||
186 | { | ||||
187 | Q_UNUSED(data); | ||||
188 | | ||||
189 | if (!node) { | ||||
190 | node = new ShadowedRectangleNode{}; | ||||
191 | } | ||||
192 | | ||||
193 | auto shadowNode = static_cast<ShadowedRectangleNode*>(node); | ||||
194 | shadowNode->setBorderEnabled(m_border->isEnabled()); | ||||
195 | shadowNode->setRect(boundingRect()); | ||||
196 | shadowNode->setSize(m_shadow->size()); | ||||
197 | shadowNode->setRadius(m_radius); | ||||
198 | shadowNode->setOffset(QVector2D{float(m_shadow->xOffset()), float(m_shadow->yOffset())}); | ||||
199 | shadowNode->setColor(m_color); | ||||
200 | shadowNode->setShadowColor(m_shadow->color()); | ||||
201 | shadowNode->setBorderWidth(m_border->width()); | ||||
202 | shadowNode->setBorderColor(m_border->color()); | ||||
203 | shadowNode->updateGeometry(); | ||||
204 | return shadowNode; | ||||
205 | } | ||||
206 | | ||||
178 | void ShadowedRectangle::checkSoftwareItem() | 207 | void ShadowedRectangle::checkSoftwareItem() | ||
179 | { | 208 | { | ||
180 | if (!m_softwareItem && window() && window()->rendererInterface()->graphicsApi() == QSGRendererInterface::Software) { | 209 | if (!m_softwareItem && window() && window()->rendererInterface()->graphicsApi() == QSGRendererInterface::Software) { | ||
181 | m_softwareItem = new PaintedRectangleItem{this}; | 210 | m_softwareItem = new PaintedRectangleItem{this}; | ||
182 | 211 | | |||
183 | auto updateItem = [this]() { | 212 | auto updateItem = [this]() { | ||
184 | auto borderWidth = m_border->width(); | 213 | auto borderWidth = m_border->width(); | ||
185 | auto rect = boundingRect().adjusted(-borderWidth / 2, -borderWidth / 2, borderWidth / 2, borderWidth / 2); | 214 | auto rect = boundingRect().adjusted(-borderWidth / 2, -borderWidth / 2, borderWidth / 2, borderWidth / 2); | ||
Show All 11 Lines | |||||
197 | connect(this, &ShadowedRectangle::widthChanged, m_softwareItem, updateItem); | 226 | connect(this, &ShadowedRectangle::widthChanged, m_softwareItem, updateItem); | ||
198 | connect(this, &ShadowedRectangle::heightChanged, m_softwareItem, updateItem); | 227 | connect(this, &ShadowedRectangle::heightChanged, m_softwareItem, updateItem); | ||
199 | connect(this, &ShadowedRectangle::colorChanged, m_softwareItem, updateItem); | 228 | connect(this, &ShadowedRectangle::colorChanged, m_softwareItem, updateItem); | ||
200 | connect(this, &ShadowedRectangle::radiusChanged, m_softwareItem, updateItem); | 229 | connect(this, &ShadowedRectangle::radiusChanged, m_softwareItem, updateItem); | ||
201 | connect(m_border.get(), &BorderGroup::changed, m_softwareItem, updateItem); | 230 | connect(m_border.get(), &BorderGroup::changed, m_softwareItem, updateItem); | ||
202 | setFlag(QQuickItem::ItemHasContents, false); | 231 | setFlag(QQuickItem::ItemHasContents, false); | ||
203 | } | 232 | } | ||
204 | } | 233 | } | ||
205 | | ||||
206 | void ShadowedRectangle::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value) | | |||
207 | { | | |||
208 | if (change == QQuickItem::ItemSceneChange && value.window) { | | |||
209 | checkSoftwareItem(); | | |||
210 | } | | |||
211 | } | | |||
212 | | ||||
213 | QSGNode *ShadowedRectangle::updatePaintNode(QSGNode *node, QQuickItem::UpdatePaintNodeData *data) | | |||
214 | { | | |||
215 | Q_UNUSED(data); | | |||
216 | | ||||
217 | if (!node) { | | |||
218 | node = new ShadowedRectangleNode; | | |||
219 | } | | |||
220 | | ||||
221 | auto elevatedNode = static_cast<ShadowedRectangleNode*>(node); | | |||
222 | elevatedNode->setBorderEnabled(!qFuzzyIsNull(m_border->width())); | | |||
223 | elevatedNode->setRect(boundingRect()); | | |||
224 | elevatedNode->setSize(m_shadow->size()); | | |||
225 | elevatedNode->setRadius(m_radius); | | |||
226 | elevatedNode->setOffset(QVector2D{float(m_shadow->xOffset()), float(m_shadow->yOffset())}); | | |||
227 | elevatedNode->setColor(m_color); | | |||
228 | elevatedNode->setShadowColor(m_shadow->color()); | | |||
229 | elevatedNode->setBorderWidth(m_border->width()); | | |||
230 | elevatedNode->setBorderColor(m_border->color()); | | |||
231 | elevatedNode->updateGeometry(); | | |||
232 | | ||||
233 | return elevatedNode; | | |||
234 | } | |