@ -92,6 +92,8 @@ void OnroadWindow::offroadTransition(bool offroad) { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      map  =  m ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      QObject : : connect ( m ,  & MapPanel : : mapPanelRequested ,  this ,  & OnroadWindow : : mapPanelRequested ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      QObject : : connect ( nvg - > map_settings_btn ,  & MapSettingsButton : : clicked ,  m ,  & MapPanel : : toggleMapSettings ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      nvg - > map_settings_btn - > setEnabled ( true ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      m - > setFixedWidth ( topWidget ( this ) - > width ( )  /  2  -  UI_BORDER_SIZE ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      split - > insertWidget ( 0 ,  m ) ;   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -221,17 +223,45 @@ void ExperimentalButton::paintEvent(QPaintEvent *event) { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// MapSettingsButton
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					MapSettingsButton : : MapSettingsButton ( QWidget  * parent )  :  QPushButton ( parent )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  setFixedSize ( btn_size ,  btn_size ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  settings_img  =  loadPixmap ( " ../assets/navigation/icon_directions_outlined.svg " ,  { img_size ,  img_size } ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  // hidden by default, made visible if map is created (has prime or mapbox token)
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  setVisible ( false ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  setEnabled ( false ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					void  MapSettingsButton : : paintEvent ( QPaintEvent  * event )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  QPainter  p ( this ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  p . setRenderHint ( QPainter : : Antialiasing ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  QPoint  center ( btn_size  /  2 ,  btn_size  /  2 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  p . setOpacity ( 1.0 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  p . setPen ( Qt : : NoPen ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  p . setBrush ( QColor ( 0 ,  0 ,  0 ,  166 ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  p . drawEllipse ( center ,  btn_size  /  2 ,  btn_size  /  2 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  p . setOpacity ( isDown ( )  ?  0.6  :  1.0 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  p . drawPixmap ( ( btn_size  -  img_size )  /  2 ,  ( btn_size  -  img_size )  /  2 ,  settings_img ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					// Window that shows camera view and variety of info drawn on top
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					AnnotatedCameraWidget : : AnnotatedCameraWidget ( VisionStreamType  type ,  QWidget *  parent )  :  fps_filter ( UI_FREQ ,  3 ,  1.  /  UI_FREQ ) ,  CameraWidget ( " camerad " ,  type ,  true ,  parent )  {  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  pm  =  std : : make_unique < PubMaster ,  const  std : : initializer_list < const  char  * > > ( { " uiDebug " } ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  QVBoxLayout  * main_layout   =  new  QVBoxLayout ( this ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  main_layout  =  new  QVBoxLayout ( this ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  main_layout - > setMargin ( UI_BORDER_SIZE ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  main_layout - > setSpacing ( 0 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  experimental_btn  =  new  ExperimentalButton ( this ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  main_layout - > addWidget ( experimental_btn ,  0 ,  Qt : : AlignTop  |  Qt : : AlignRight ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  map_settings_btn  =  new  MapSettingsButton ( this ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  main_layout - > addWidget ( map_settings_btn ,  0 ,  Qt : : AlignBottom  |  Qt : : AlignRight ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  dm_img  =  loadPixmap ( " ../assets/img_driver_face.png " ,  { img_size  +  5 ,  img_size  +  5 } ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -276,7 +306,7 @@ void AnnotatedCameraWidget::updateState(const UIState &s) { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  setProperty ( " speed " ,  cur_speed ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  setProperty ( " setSpeed " ,  set_speed ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  setProperty ( " speedUnit " ,  s . scene . is_metric  ?  tr ( " km/h " )  :  tr ( " mph " ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  setProperty ( " hideDM  " ,  ( cs . getAlertSize ( )  ! =  cereal : : ControlsState : : AlertSize : : NONE ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  setProperty ( " hideBottomIcons  " ,  ( cs . getAlertSize ( )  ! =  cereal : : ControlsState : : AlertSize : : NONE ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  setProperty ( " status " ,  s . status ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  // update engageability/experimental mode button
   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -288,6 +318,12 @@ void AnnotatedCameraWidget::updateState(const UIState &s) { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  setProperty ( " rightHandDM " ,  dm_state . getIsRHD ( ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  // DM icon transition
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  dm_fade_state  =  std : : clamp ( dm_fade_state + 0.2 * ( 0.5 - dmActive ) ,  0.0 ,  1.0 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  // hide map settings button for alerts and flip for right hand DM
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  if  ( map_settings_btn - > isEnabled ( ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    map_settings_btn - > setVisible ( ! hideBottomIcons ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    main_layout - > setAlignment ( map_settings_btn ,  ( rightHandDM  ?  Qt : : AlignLeft  :  Qt : : AlignRight )  |  Qt : : AlignBottom ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					void  AnnotatedCameraWidget : : drawHud ( QPainter  & p )  {  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -648,7 +684,7 @@ void AnnotatedCameraWidget::paintGL() { 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  // DMoji
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  if  ( ! hideDM   & &  ( sm . rcv_frame ( " driverStateV2 " )  >  s - > scene . started_frame ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  if  ( ! hideBottomIcons   & &  ( sm . rcv_frame ( " driverStateV2 " )  >  s - > scene . started_frame ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    update_dmonitoring ( s ,  sm [ " driverStateV2 " ] . getDriverStateV2 ( ) ,  dm_fade_state ,  rightHandDM ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    drawDriverState ( painter ,  s ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  }