* @brief Generates a square shadow corner tile fading from opaque (inner) to transparent (outer). */
| 96 | * @brief Generates a square shadow corner tile fading from opaque (inner) to transparent (outer). |
| 97 | */ |
| 98 | QImage generateShadowCorner(int size) |
| 99 | { |
| 100 | QImage tile(size, size, QImage::Format_ARGB32_Premultiplied); |
| 101 | tile.fill(Qt::transparent); |
| 102 | |
| 103 | const qreal invSize = size > 0 ? 1.0 / static_cast<qreal>(size) : 0.0; |
| 104 | for (int y = 0; y < size; ++y) { |
| 105 | for (int x = 0; x < size; ++x) { |
| 106 | const qreal dx = static_cast<qreal>(size - x - 1); |
| 107 | const qreal dy = static_cast<qreal>(size - y - 1); |
| 108 | const qreal dist = qSqrt(dx * dx + dy * dy); |
| 109 | |
| 110 | qreal alpha = 1.0 - qMin(dist * invSize, 1.0); |
| 111 | alpha = alpha * alpha * (3.0 - 2.0 * alpha); |
| 112 | alpha *= CSD::ShadowOpacity; |
| 113 | tile.setPixelColor(x, y, QColor(0, 0, 0, qRound(alpha * 255))); |
| 114 | } |
| 115 | } |
| 116 | |
| 117 | return tile; |
| 118 | } |
| 119 | |
| 120 | /** |
| 121 | * @brief Builds the (2r+1)^2 9-slice atlas: corner tiles + 1px edge gradients + transparent center. |
no test coverage detected