Internal
Public Access
Milestone 8 UX: folder tree workflows, about dialog, and app icon polish
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
#include "app_icon.h"
|
||||
|
||||
#include <QBrush>
|
||||
#include <QColor>
|
||||
#include <QLinearGradient>
|
||||
#include <QPainter>
|
||||
#include <QPainterPath>
|
||||
#include <QPen>
|
||||
#include <QPixmap>
|
||||
|
||||
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<qreal>(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;
|
||||
}
|
||||
Reference in New Issue
Block a user