File indexing completed on 2024-05-12 03:45:46

0001 /*
0002     SPDX-FileCopyrightText: 2016 Artem Fedoskin <afedoskin3@gmail.com>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "rectnode.h"
0007 
0008 #include <QSGFlatColorMaterial>
0009 #include <QSGGeometryNode>
0010 
0011 RectNode::RectNode(bool filled)
0012 {
0013     m_geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 0);
0014     m_geometry->allocate(4);
0015     setGeometry(m_geometry);
0016     setFlag(QSGNode::OwnsGeometry);
0017 
0018     m_material = new QSGFlatColorMaterial;
0019     setMaterial(m_material);
0020     setFlag(QSGNode::OwnsMaterial);
0021 
0022     setFilled(filled);
0023 }
0024 
0025 void RectNode::setRect(int x, int y, int w, int h)
0026 {
0027     QSGGeometry::Point2D *vertex = m_geometry->vertexDataAsPoint2D();
0028     vertex[0].set(x, y);
0029     vertex[1].set(x + w, y);
0030     vertex[2].set(x + w, y + h);
0031     vertex[3].set(x, y + h);
0032     markDirty(QSGNode::DirtyGeometry);
0033 }
0034 
0035 void RectNode::setColor(const QColor &color)
0036 {
0037     if (m_material->color() != color)
0038     {
0039         m_material->setColor(color);
0040         markDirty(QSGNode::DirtyMaterial);
0041     }
0042 }
0043 
0044 void RectNode::setFilled(bool filled)
0045 {
0046     m_filled = filled;
0047     if (filled)
0048     {
0049         m_geometry->setDrawingMode(GL_TRIANGLE_FAN);
0050     }
0051     else
0052     {
0053         m_geometry->setDrawingMode(GL_LINE_LOOP);
0054     }
0055 }