// This file was generated with the assistance of an AI coding tool. /******************************************************************************** * * * This file is part of IfcOpenShell. * * * * IfcOpenShell is free software: you can redistribute it and/or modify * * it under the terms of the Lesser GNU General Public License as published by * * the Free Software Foundation, either version 3.0 of the License, or * * (at your option) any later version. * * * * IfcOpenShell is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * Lesser GNU General Public License for more details. * * * * You should have received a copy of the Lesser GNU General Public License * * along with this program. If not, see . * * * ********************************************************************************/ #include "SvgIcon.h" #include #include #include #include namespace ifcinterface::components::icons { QPixmap renderTintedSvgPixmap(const QString& icon_path, const QString& color, const QSize& size) { QFile file(icon_path); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { return QIcon(icon_path).pixmap(size); } QString svg = QString::fromUtf8(file.readAll()); svg.replace("currentColor", color, Qt::CaseSensitive); svg.replace(QRegularExpression(R"(stroke="[^"]*")"), QString("stroke=\"%1\"").arg(color)); svg.replace(QRegularExpression(R"(fill="none")"), "fill=\"none\""); QSvgRenderer renderer(svg.toUtf8()); QPixmap pixmap(size); pixmap.fill(Qt::transparent); QPainter painter(&pixmap); renderer.render(&painter); return pixmap; } QIcon makeTintedSvgIcon(const QString& icon_path, const QString& normal, const QString& active, const QString& disabled) { QFile file(icon_path); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { return QIcon(icon_path); } QIcon icon; icon.addPixmap(renderTintedSvgPixmap(icon_path, normal, QSize(20, 20)), QIcon::Normal, QIcon::Off); icon.addPixmap(renderTintedSvgPixmap(icon_path, active, QSize(20, 20)), QIcon::Active, QIcon::Off); icon.addPixmap(renderTintedSvgPixmap(icon_path, active, QSize(20, 20)), QIcon::Selected, QIcon::Off); icon.addPixmap(renderTintedSvgPixmap(icon_path, disabled, QSize(20, 20)), QIcon::Disabled, QIcon::Off); return icon; } QIcon makePanelSvgIcon(const QString& icon_path) { return makeTintedSvgIcon(icon_path, "#e7ebf2", "#ffffff", "#6f7988"); } QPixmap makePanelSvgPixmap(const QString& icon_path, const QSize& size) { return renderTintedSvgPixmap(icon_path, "#e7ebf2", size); } } // namespace ifcinterface::components::icons