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 }