@ -26,11 +26,17 @@ class Spinner:
self . _spinner_texture = gui_app . load_texture_from_image ( os . path . join ( BASEDIR , " selfdrive/assets/img_spinner_track.png " ) , TEXTURE_SIZE , TEXTURE_SIZE )
self . _rotation = 0.0
self . _text : str = " "
self . _progress : int | None = None
self . _lock = threading . Lock ( )
def set_text ( self , text : str ) - > None :
with self . _lock :
self . _text = text
if text . isdigit ( ) :
self . _progress = clamp ( int ( text ) , 0 , 100 )
self . _text = " "
else :
self . _progress = None
self . _text = text
def render ( self ) :
center = rl . Vector2 ( gui_app . width / 2.0 , gui_app . height / 2.0 )
@ -49,23 +55,21 @@ class Spinner:
rl . draw_texture_v ( self . _comma_texture , comma_position , rl . WHITE )
# Display progress bar or text based on user input
text = None
y_pos = rl . get_screen_height ( ) - MARGIN - PROGRESS_BAR_HEIGHT
with self . _lock :
progress = self . _progress
text = self . _text
if text :
y_pos = rl . get_screen_height ( ) - MARGIN - PROGRESS_BAR_HEIGHT
if text . isdigit ( ) :
progress = clamp ( int ( text ) , 0 , 100 )
bar = rl . Rectangle ( center . x - PROGRESS_BAR_WIDTH / 2.0 , y_pos , PROGRESS_BAR_WIDTH , PROGRESS_BAR_HEIGHT )
rl . draw_rectangle_rounded ( bar , 1 , 10 , DARKGRAY )
if progress is not None :
bar = rl . Rectangle ( center . x - PROGRESS_BAR_WIDTH / 2.0 , y_pos , PROGRESS_BAR_WIDTH , PROGRESS_BAR_HEIGHT )
rl . draw_rectangle_rounded ( bar , 1 , 10 , DARKGRAY )
bar . width * = progress / 100.0
rl . draw_rectangle_rounded ( bar , 1 , 10 , rl . WHITE )
els e :
text_size = rl . measure_text_ex ( gui_app . font ( ) , text , FONT_SIZE , 1.0 )
rl . draw_text_ex ( gui_app . font ( ) , text ,
rl . Vector2 ( center . x - text_size . x / 2 , y_pos ) , FONT_SIZE , 1.0 , rl . WHITE )
bar . width * = progress / 100.0
rl . draw_rectangle_rounded ( bar , 1 , 10 , rl . WHITE )
elif t ext :
text_size = rl . measure_text_ex ( gui_app . font ( ) , text , FONT_SIZE , 1.0 )
rl . draw_text_ex ( gui_app . font ( ) , text ,
rl . Vector2 ( center . x - text_size . x / 2 , y_pos ) , FONT_SIZE , 1.0 , rl . WHITE )
if __name__ == " __main__ " :