[TIZI/TICI] visuals: Improved speed limit (#1713)

improved speed limit

Co-authored-by: royjr <royjr96@gmail.com>
Co-authored-by: Jason Wen <haibin.wen3@gmail.com>
This commit is contained in:
Angus Dippenaar
2026-02-24 06:22:40 +01:00
committed by GitHub
parent 111e8897be
commit 8a64cc57a9
+22 -25
View File
@@ -4,6 +4,7 @@ Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors.
This file is part of sunnypilot and is licensed under the MIT License.
See the LICENSE.md file in the root directory for more details.
"""
from dataclasses import dataclass
import math
import pyray as rl
@@ -33,7 +34,7 @@ SpeedLimitSource = custom.LongitudinalPlanSP.SpeedLimit.Source
class Colors:
WHITE = rl.WHITE
BLACK = rl.BLACK
RED = rl.RED
RED = rl.Color(235, 32, 32, 255)
GREY = rl.Color(145, 155, 149, 255)
DARK_GREY = rl.Color(77, 77, 77, 255)
SUB_BG = rl.Color(0, 0, 0, 180)
@@ -201,22 +202,17 @@ class SpeedLimitRenderer(Widget):
center = rl.Vector2(rect.x + rect.width / 2, rect.y + rect.height / 2)
radius = (rect.width + 18) / 2
white = rl.Color(255, 255, 255, int(255 * alpha))
red = rl.Color(255, 0, 0, int(255 * alpha))
if hasattr(color, 'r'):
text_color = rl.Color(color.r, color.g, color.b, int(255 * alpha))
else:
text_color = rl.Color(color[0], color[1], color[2], int(255 * alpha))
black = rl.Color(0, 0, 0, int(255 * alpha))
dark_grey = rl.Color(77, 77, 77, int(255 * alpha))
white = rl.color_alpha(Colors.WHITE, alpha)
red = rl.color_alpha(Colors.RED, alpha)
black = rl.color_alpha(Colors.BLACK, alpha)
dark_grey = rl.color_alpha(Colors.DARK_GREY, alpha)
text_color = rl.color_alpha(color, alpha)
rl.draw_circle_v(center, radius, white)
rl.draw_ring(center, radius * 0.80, radius, 0, 360, 36, red)
rl.draw_ring(center, radius * 0.75, radius, 0, 360, 36, red)
f_size = 70 if len(val) >= 3 else 85
self._draw_text_centered(self.font_bold, val, f_size, center, text_color)
font_size = 70 if len(val) >= 3 else 85
self._draw_text_centered(self.font_bold, val, font_size, center, text_color)
if sub and has_limit:
s_radius = radius * 0.4
@@ -225,22 +221,23 @@ class SpeedLimitRenderer(Widget):
rl.draw_circle_v(s_center, s_radius, black)
rl.draw_ring(s_center, s_radius - 3, s_radius, 0, 360, 36, dark_grey)
f_scale = 0.5 if len(sub) < 3 else 0.45
self._draw_text_centered(self.font_bold, sub, int(s_radius * 2 * f_scale), s_center, white)
font_scale = 0.5 if len(sub) < 3 else 0.45
self._draw_text_centered(self.font_bold, sub, int(s_radius * 2 * font_scale), s_center, white)
def _render_mutcd(self, rect, val, sub, color, has_limit, alpha=1.0):
white = rl.Color(255, 255, 255, int(255 * alpha))
black = rl.Color(0, 0, 0, int(255 * alpha))
dark_grey = rl.Color(77, 77, 77, int(255 * alpha))
if hasattr(color, 'r'):
text_color = rl.Color(color.r, color.g, color.b, int(255 * alpha))
else:
text_color = rl.Color(color[0], color[1], color[2], int(255 * alpha))
white = rl.color_alpha(Colors.WHITE, alpha)
black = rl.color_alpha(Colors.BLACK, alpha)
dark_grey = rl.color_alpha(Colors.DARK_GREY, alpha)
text_color = rl.color_alpha(color, alpha)
rl.draw_rectangle_rounded(rect, 0.35, 10, white)
inner = rl.Rectangle(rect.x + 10, rect.y + 10, rect.width - 20, rect.height - 20)
rl.draw_rectangle_rounded_lines_ex(inner, 0.35, 10, 4, black)
outer_radius = 0.35 * rect.width / 2.0
inner_radius = outer_radius - 10.0
inner_roundness = inner_radius / (inner.width / 2.0)
rl.draw_rectangle_rounded_lines_ex(inner, inner_roundness, 10, 4, black)
self._draw_text_centered(self.font_demi, "SPEED", 40, rl.Vector2(rect.x + rect.width / 2, rect.y + 40), black)
self._draw_text_centered(self.font_demi, "LIMIT", 40, rl.Vector2(rect.x + rect.width / 2, rect.y + 80), black)