@ -57,45 +57,16 @@ void DriverViewScene::paintEvent(QPaintEvent* event) {
return ;
}
const int width = 4 * height ( ) / 3 ;
const int width = 2 * height ( ) ;
const QRect rect2 = { rect ( ) . center ( ) . x ( ) - width / 2 , rect ( ) . top ( ) , width , rect ( ) . height ( ) } ;
const QRect valid_rect = { is_rhd ? rect2 . right ( ) - rect2 . height ( ) / 2 : rect2 . left ( ) , rect2 . top ( ) , rect2 . height ( ) / 2 , rect2 . height ( ) } ;
// blackout
const QColor bg ( 0 , 0 , 0 , 140 ) ;
const QRect & blackout_rect = Hardware : : TICI ( ) ? rect ( ) : rect2 ;
p . fillRect ( blackout_rect . adjusted ( 0 , 0 , valid_rect . left ( ) - blackout_rect . right ( ) , 0 ) , bg ) ;
p . fillRect ( blackout_rect . adjusted ( valid_rect . right ( ) - blackout_rect . left ( ) , 0 , 0 , 0 ) , bg ) ;
if ( Hardware : : TICI ( ) ) {
p . fillRect ( blackout_rect . adjusted ( valid_rect . left ( ) - blackout_rect . left ( ) + 1 , 0 , valid_rect . right ( ) - blackout_rect . right ( ) - 1 , - valid_rect . height ( ) * 7 / 10 ) , bg ) ; // top dz
}
// face bounding box
cereal : : DriverState : : Reader driver_state = sm [ " driverState " ] . getDriverState ( ) ;
bool face_detected = driver_state . getFaceProb ( ) > 0.5 ;
if ( face_detected ) {
auto fxy_list = driver_state . getFacePosition ( ) ;
auto std_list = driver_state . getFaceOrientationStd ( ) ;
float face_x = fxy_list [ 0 ] ;
float face_y = fxy_list [ 1 ] ;
float face_std = std : : max ( std_list [ 0 ] , std_list [ 1 ] ) ;
float alpha = 0.7 ;
if ( face_std > 0.08 ) {
alpha = std : : max ( 0.7 - ( face_std - 0.08 ) * 7 , 0.0 ) ;
}
const int box_size = 0.6 * rect2 . height ( ) / 2 ;
const float rhd_offset = 0.05 ; // lhd is shifted, so rhd is not mirrored
int fbox_x = valid_rect . center ( ) . x ( ) + ( is_rhd ? ( face_x + rhd_offset ) : - face_x ) * valid_rect . width ( ) ;
int fbox_y = valid_rect . center ( ) . y ( ) + face_y * valid_rect . height ( ) ;
p . setPen ( QPen ( QColor ( 255 , 255 , 255 , alpha * 255 ) , 10 ) ) ;
p . drawRoundedRect ( fbox_x - box_size / 2 , fbox_y - box_size / 2 , box_size , box_size , 35.0 , 35.0 ) ;
}
// icon
const int img_offset = 3 0;
const int img_x = is_rhd ? rect2 . right ( ) - FACE_IMG_SIZE - img_offset : rect2 . left ( ) + img_offset ;
const int img_offset = 60 ;
const int img_x = rect2 . left ( ) + img_offset ;
const int img_y = rect2 . bottom ( ) - FACE_IMG_SIZE - img_offset ;
p . setOpacity ( face_detected ? 1.0 : 0.3 ) ;
p . setOpacity ( face_detected ? 1.0 : 0.2 ) ;
p . drawPixmap ( img_x , img_y , face_img ) ;
}