diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cea968..b235a3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,13 @@ - Локальная сборка помечается версией `0.0.0-dev` (реальную версию в релизные билды подставляет CI из тега) — самосборный билд больше не выдаёт себя за релизный. +### Исправлено +- **Иконки режимов «Эко» и «Тихий» были перепутаны местами** с самых первых версий: Эко рисовался + луной со звёздами, Тихий — листом. Теперь как задумано: **лист — Эко** (экономия), **луна — + Тихий** (тишина). Поменялись местами и рисунок, и анимация (покачивание листа ↔ мерцание звёзд), + и акцент ячейки в панели (зелёный ↔ сизый) — в панели, OSD и трее. Первопричина была в + двусмысленной строке спецификации иконок «лист (эко/тихий)» — она переписана однозначно (XIC-14). + ## [0.7.0] — 2026-07-28 ### Добавлено diff --git a/assets/svg/osd/perf-eco.svg b/assets/svg/osd/perf-eco.svg index 0602202..f468b42 100644 --- a/assets/svg/osd/perf-eco.svg +++ b/assets/svg/osd/perf-eco.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/assets/svg/osd/perf-eco-moon.svg b/assets/svg/osd/perf-quiet-moon.svg similarity index 100% rename from assets/svg/osd/perf-eco-moon.svg rename to assets/svg/osd/perf-quiet-moon.svg diff --git a/assets/svg/osd/perf-eco-star1.svg b/assets/svg/osd/perf-quiet-star1.svg similarity index 100% rename from assets/svg/osd/perf-eco-star1.svg rename to assets/svg/osd/perf-quiet-star1.svg diff --git a/assets/svg/osd/perf-eco-star2.svg b/assets/svg/osd/perf-quiet-star2.svg similarity index 100% rename from assets/svg/osd/perf-eco-star2.svg rename to assets/svg/osd/perf-quiet-star2.svg diff --git a/assets/svg/osd/perf-quiet.svg b/assets/svg/osd/perf-quiet.svg index f468b42..0602202 100644 --- a/assets/svg/osd/perf-quiet.svg +++ b/assets/svg/osd/perf-quiet.svg @@ -1 +1,8 @@ - \ No newline at end of file + + + + + + + + diff --git a/assets/svg/tray/tray-perf-eco.svg b/assets/svg/tray/tray-perf-eco.svg index 698dcca..79871f5 100644 --- a/assets/svg/tray/tray-perf-eco.svg +++ b/assets/svg/tray/tray-perf-eco.svg @@ -1,4 +1 @@ - - - + \ No newline at end of file diff --git a/assets/svg/tray/tray-perf-quiet.svg b/assets/svg/tray/tray-perf-quiet.svg index 79871f5..698dcca 100644 --- a/assets/svg/tray/tray-perf-quiet.svg +++ b/assets/svg/tray/tray-perf-quiet.svg @@ -1 +1,4 @@ - \ No newline at end of file + + + diff --git a/docs/08-icon-assets-spec.md b/docs/08-icon-assets-spec.md index a643263..a440980 100644 --- a/docs/08-icon-assets-spec.md +++ b/docs/08-icon-assets-spec.md @@ -37,6 +37,18 @@ | `mode-turbo.svg` | **Молния** (турбо) | одна молния | | `mode-full.svg` | **Две молнии** (полная мощность) | две отдельные, читаемые как две | +> ⚠️ Формулировка «лист (эко/тихий)» выше — историческая и **двусмысленная**: из-за неё Эко и +> Тихий разъехались по иконкам и приехали в релиз перепутанными (исправлено XIC-14). Актуальный +> маппинг — однозначный, файлы называются по режиму: +> +> | Режим | Рисунок | Файлы (`assets/svg/`) | Анимация | Акцент ячейки | +> |---|---|---|---|---| +> | **Эко** | **лист** | `osd/perf-eco.svg`, `tray/tray-perf-eco.svg` | покачивание от ветерка (`DrawLeafSway`) | зелёный | +> | **Тихий** | **луна со звёздами** | `osd/perf-quiet.svg` (+ части `perf-quiet-moon/-star1/-star2`), `tray/tray-perf-quiet.svg` | мерцание звёзд в противофазе (`DrawMoonTwinkle`) | сизый | +> +> Мнемоника: лист = экономия, луна = тишина/сон. Составные части (`-moon`, `-star1/2`) нужны +> потому, что звёзды мерцают отдельно от луны — они всегда называются по тому же режиму, что и база. + ### База / трей | Файл | Что | Заметки | |------|-----|---------| diff --git a/docs/10-colors.md b/docs/10-colors.md index 4ff7733..2efc7b1 100644 --- a/docs/10-colors.md +++ b/docs/10-colors.md @@ -45,7 +45,7 @@ ### Зелёный — батарея/эко | Hex | Material | Где | |---|---|---| -| `#8BC34A` | Light Green 500 | лист «Эко»/сбережения | +| `#8BC34A` | Light Green 500 | лист «Эко»/сбережения (акцент ячейки Эко — зелёный; у «Тихого» луна и сизый `125,160,185`) | | `#4CAF50` | Green 500 | уровень заряда, «здоровье» | | `#558B2F` | Light Green 800 | тёмная зелень | diff --git a/src/Ui/ModeUi.cs b/src/Ui/ModeUi.cs index 02c4b82..309b3ec 100644 --- a/src/Ui/ModeUi.cs +++ b/src/Ui/ModeUi.cs @@ -8,8 +8,8 @@ internal static class ModeUi /// Акцент ячейки режима в панели (палитра docs/10-colors.md). public static Color Accent(PerfMode m) => m switch { - PerfMode.Eco => Color.FromArgb(125, 160, 185), // сизый - PerfMode.Quiet => FlyoutPalette.Green, + PerfMode.Eco => FlyoutPalette.Green, // лист + PerfMode.Quiet => Color.FromArgb(125, 160, 185), // сизый — под луну PerfMode.Auto => FlyoutPalette.Blue, PerfMode.Turbo => FlyoutPalette.Orange, PerfMode.FullSpeed => FlyoutPalette.Red, diff --git a/src/Ui/OsdForm.cs b/src/Ui/OsdForm.cs index 4ada0b0..8f46652 100644 --- a/src/Ui/OsdForm.cs +++ b/src/Ui/OsdForm.cs @@ -187,10 +187,10 @@ private void DrawBase(Graphics g, OsdKind kind, RectangleF r) switch (kind) { case OsdKind.Auto: SvgIcons.DrawGauge(g, r, NeedleAngle()); return; - case OsdKind.Quiet: SvgIcons.DrawLeafSway(g, r, _gaugeT, 1f); return; + case OsdKind.Quiet: SvgIcons.DrawMoonTwinkle(g, r, _gaugeT, 1f); return; case OsdKind.Turbo: SvgIcons.DrawBoltPulse(g, r, _gaugeT, 1f); return; case OsdKind.Full: SvgIcons.DrawRocket(g, r, _gaugeT, 1f); return; - case OsdKind.Eco: SvgIcons.DrawMoonTwinkle(g, r, _gaugeT, 1f); return; + case OsdKind.Eco: SvgIcons.DrawLeafSway(g, r, _gaugeT, 1f); return; case OsdKind.Charging: SvgIcons.DrawChargingPulse(g, r, _gaugeT); return; case OsdKind.Travel: SvgIcons.DrawTravelPulse(g, r, _gaugeT); return; } diff --git a/src/Ui/QuickPanelForm.cs b/src/Ui/QuickPanelForm.cs index 45885ce..421eafc 100644 --- a/src/Ui/QuickPanelForm.cs +++ b/src/Ui/QuickPanelForm.cs @@ -582,8 +582,8 @@ private void DrawModeIconAnimated(Graphics g, PerfMode m, RectangleF r, float op { switch (m) { - case PerfMode.Eco: SvgIcons.DrawMoonTwinkle(g, r, _gaugeT, k, opacity, saturation); break; - case PerfMode.Quiet: SvgIcons.DrawLeafSway(g, r, _gaugeT, k, opacity, saturation); break; + case PerfMode.Eco: SvgIcons.DrawLeafSway(g, r, _gaugeT, k, opacity, saturation); break; + case PerfMode.Quiet: SvgIcons.DrawMoonTwinkle(g, r, _gaugeT, k, opacity, saturation); break; case PerfMode.Auto: SvgIcons.DrawGauge(g, r, k * OsdForm.SweepAngle(_gaugeT), opacity, saturation); break; case PerfMode.Turbo: SvgIcons.DrawBoltPulse(g, r, _gaugeT, k, opacity, saturation); break; case PerfMode.FullSpeed: SvgIcons.DrawRocket(g, r, _gaugeT, k, opacity, saturation); break; diff --git a/src/Ui/SvgIcons.cs b/src/Ui/SvgIcons.cs index 9dce8e2..6ceae18 100644 --- a/src/Ui/SvgIcons.cs +++ b/src/Ui/SvgIcons.cs @@ -35,14 +35,14 @@ public static class SvgIcons public const string PerfAuto = "perf-auto"; public const string PerfAutoDial = "perf-auto-dial"; // спидометр без стрелки public const string PerfAutoNeedle = "perf-auto-needle"; // стрелка, пивот в центре - public const string PerfEco = "perf-eco"; + public const string PerfEco = "perf-eco"; // лист (экономия) public const string PerfFull = "perf-full"; public const string PerfFullBody = "perf-full-body"; // ракета без пламени public const string PerfFullFlame = "perf-full-flame"; // пламя отдельно - public const string PerfEcoMoon = "perf-eco-moon"; // луна без звёзд - public const string PerfEcoStar1 = "perf-eco-star1"; // звёзды по одной — - public const string PerfEcoStar2 = "perf-eco-star2"; // мерцают в противофазе - public const string PerfQuiet = "perf-quiet"; + public const string PerfQuietMoon = "perf-quiet-moon"; // луна без звёзд + public const string PerfQuietStar1 = "perf-quiet-star1"; // звёзды по одной — + public const string PerfQuietStar2 = "perf-quiet-star2"; // мерцают в противофазе + public const string PerfQuiet = "perf-quiet"; // луна со звёздами (тишина) public const string PerfTurbo = "perf-turbo"; public const string RefreshRate = "refresh-rate"; // монитор со стрелками — авто-герцовка вкл public const string RefreshRateOff = "refresh-rate-off"; // то же серым — авто-герцовка выкл @@ -151,7 +151,7 @@ private static void DrawBitmap(Graphics g, Bitmap bmp, RectangleF dest, float al g.DrawImage(bmp, pts, src, GraphicsUnit.Pixel, attrs); } - /// Лист (Тихий): покачивание вокруг основания черешка, как от ветерка. + /// Лист (Эко): покачивание вокруг основания черешка, как от ветерка. public static void DrawLeafSway(Graphics g, RectangleF r, float t, float k, float opacity = 1f, float saturation = 1f) { int size = (int)Math.Round(Math.Min(r.Width, r.Height)); @@ -160,7 +160,7 @@ public static void DrawLeafSway(Graphics g, RectangleF r, float t, float k, floa float px = dest.X + dest.Width * 0.25f, py = dest.Y + dest.Height * 0.84f; // основание черешка var st = g.Save(); g.TranslateTransform(px, py); g.RotateTransform(ang); g.TranslateTransform(-px, -py); - DrawBitmap(g, Render(PerfQuiet, size), dest, opacity, 1f, saturation); + DrawBitmap(g, Render(PerfEco, size), dest, opacity, 1f, saturation); g.Restore(st); } @@ -194,16 +194,16 @@ public static void DrawRocket(Graphics g, RectangleF r, float t, float k, float DrawBitmap(g, Render(PerfFullBody, size), body, opacity, 1f, saturation); } - /// Луна (Эко): звёзды мерцают в противофазе. + /// Луна (Тихий): звёзды мерцают в противофазе. public static void DrawMoonTwinkle(Graphics g, RectangleF r, float t, float k, float opacity = 1f, float saturation = 1f) { int size = (int)Math.Round(Math.Min(r.Width, r.Height)); var dest = CenteredDest(r, size); - DrawBitmap(g, Render(PerfEcoMoon, size), dest, opacity, 1f, saturation); + DrawBitmap(g, Render(PerfQuietMoon, size), dest, opacity, 1f, saturation); float a1 = 1f - 0.7f * k * (0.5f + 0.5f * MathF.Sin(t * 2.1f)); float a2 = 1f - 0.7f * k * (0.5f + 0.5f * MathF.Sin(t * 2.1f + 2.2f)); - DrawBitmap(g, Render(PerfEcoStar1, size), dest, opacity * a1, 1f, saturation); - DrawBitmap(g, Render(PerfEcoStar2, size), dest, opacity * a2, 1f, saturation); + DrawBitmap(g, Render(PerfQuietStar1, size), dest, opacity * a1, 1f, saturation); + DrawBitmap(g, Render(PerfQuietStar2, size), dest, opacity * a2, 1f, saturation); } /// Батарея на зарядке: молния внутри мягко пульсирует.