#include "app_icon.h" #include #include #include #include #include #include #include namespace { QPixmap renderIconPixmap(int size) { QPixmap pixmap(size, size); pixmap.fill(Qt::transparent); QPainter painter(&pixmap); painter.setRenderHint(QPainter::Antialiasing, true); const qreal s = static_cast(size); const QRectF badgeRect(0.06 * s, 0.06 * s, 0.88 * s, 0.88 * s); const qreal badgeRadius = 0.19 * s; QLinearGradient badgeGradient(badgeRect.topLeft(), badgeRect.bottomRight()); badgeGradient.setColorAt(0.0, QColor(QStringLiteral("#0B1220"))); badgeGradient.setColorAt(1.0, QColor(QStringLiteral("#111827"))); QPainterPath badgePath; badgePath.addRoundedRect(badgeRect, badgeRadius, badgeRadius); painter.fillPath(badgePath, badgeGradient); const QPointF center(0.5 * s, 0.5 * s); const QRectF orbitRect(0.14 * s, 0.26 * s, 0.72 * s, 0.44 * s); // Draw orbit behind monitor first. QPen orbitBackPen(QColor(QStringLiteral("#38BDF8"))); orbitBackPen.setWidthF(0.06 * s); orbitBackPen.setCapStyle(Qt::RoundCap); painter.setPen(orbitBackPen); painter.setBrush(Qt::NoBrush); QTransform orbitTransform; orbitTransform.translate(center.x(), center.y()); orbitTransform.rotate(-20.0); orbitTransform.translate(-center.x(), -center.y()); painter.setTransform(orbitTransform); painter.drawEllipse(orbitRect); painter.resetTransform(); const QRectF monitorRect(0.2 * s, 0.2 * s, 0.6 * s, 0.44 * s); const QRectF screenRect(0.24 * s, 0.24 * s, 0.52 * s, 0.34 * s); const QRectF standStemRect(0.46 * s, 0.64 * s, 0.08 * s, 0.1 * s); const QRectF standBaseRect(0.34 * s, 0.74 * s, 0.32 * s, 0.08 * s); QPainterPath monitorPath; monitorPath.addRoundedRect(monitorRect, 0.07 * s, 0.07 * s); painter.fillPath(monitorPath, QColor(QStringLiteral("#1F2937"))); painter.setPen(QPen(QColor(QStringLiteral("#4B5563")), 0.016 * s)); painter.drawPath(monitorPath); QLinearGradient screenGradient(screenRect.topLeft(), screenRect.bottomRight()); screenGradient.setColorAt(0.0, QColor(QStringLiteral("#22D3EE"))); screenGradient.setColorAt(0.55, QColor(QStringLiteral("#38BDF8"))); screenGradient.setColorAt(1.0, QColor(QStringLiteral("#0EA5E9"))); painter.fillRect(screenRect, screenGradient); painter.setPen(Qt::NoPen); painter.setBrush(QColor(QStringLiteral("#9CA3AF"))); painter.drawRoundedRect(standStemRect, 0.02 * s, 0.02 * s); painter.setBrush(QColor(QStringLiteral("#6B7280"))); painter.drawRoundedRect(standBaseRect, 0.03 * s, 0.03 * s); // Orbit front segment over monitor for depth. QPen orbitFrontPen(QColor(QStringLiteral("#A3E635"))); orbitFrontPen.setWidthF(0.06 * s); orbitFrontPen.setCapStyle(Qt::RoundCap); painter.setPen(orbitFrontPen); painter.setBrush(Qt::NoBrush); painter.setTransform(orbitTransform); painter.drawArc(orbitRect, 212 * 16, 126 * 16); painter.drawArc(orbitRect, 6 * 16, 24 * 16); painter.resetTransform(); // Small indicator star. painter.setPen(Qt::NoPen); painter.setBrush(QColor(QStringLiteral("#E5E7EB"))); painter.drawEllipse(QPointF(0.77 * s, 0.2 * s), 0.02 * s, 0.02 * s); return pixmap; } } QIcon createOrbitHubAppIcon() { QIcon icon; const int sizes[] = {16, 24, 32, 48, 64, 128, 256}; for (const int size : sizes) { icon.addPixmap(renderIconPixmap(size)); } return icon; }