Visuals - Custom Onroad UI - Steering Wheel Icon - Live Rotation

This commit is contained in:
FrogAi
2024-06-08 07:27:56 -07:00
parent 8a3495b2dc
commit 4347767ef6
4 changed files with 22 additions and 4 deletions
+15 -3
View File
@@ -4,15 +4,19 @@
#include "selfdrive/ui/qt/util.h"
void drawIcon(QPainter &p, const QPoint &center, const QPixmap &img, const QBrush &bg, float opacity) {
void drawIcon(QPainter &p, const QPoint &center, const QPixmap &img, const QBrush &bg, float opacity, const int angle) {
p.setRenderHint(QPainter::Antialiasing);
p.setOpacity(1.0); // bg dictates opacity of ellipse
p.setPen(Qt::NoPen);
p.setBrush(bg);
p.drawEllipse(center, btn_size / 2, btn_size / 2);
p.save();
p.translate(center);
p.rotate(angle);
p.setOpacity(opacity);
p.drawPixmap(center - QPoint(img.width() / 2, img.height() / 2), img);
p.drawPixmap(-QPoint(img.width() / 2, img.height() / 2), img);
p.setOpacity(1.0);
p.restore();
}
// ExperimentalButton
@@ -63,8 +67,16 @@ void ExperimentalButton::updateState(const UIState &s) {
conditionalExperimental = scene.conditional_experimental;
conditionalStatus = scene.conditional_status;
navigateOnOpenpilot = scene.navigate_on_openpilot;
rotatingWheel = scene.rotating_wheel;
trafficModeActive = scene.traffic_mode_active;
wheelIcon = scene.wheel_icon;
if (rotatingWheel && steeringAngleDeg != scene.steering_angle_deg) {
update();
steeringAngleDeg = scene.steering_angle_deg;
} else if (!rotatingWheel) {
steeringAngleDeg = 0;
}
}
void ExperimentalButton::paintEvent(QPaintEvent *event) {
@@ -84,7 +96,7 @@ void ExperimentalButton::paintEvent(QPaintEvent *event) {
(navigateOnOpenpilot ? bg_colors[STATUS_NAVIGATION_ACTIVE] : QColor(0, 0, 0, 166)))))) :
QColor(0, 0, 0, 166);
drawIcon(p, QPoint(btn_size / 2, btn_size / 2), img, QColor(0, 0, 0, 166), (isDown() || !engageable) ? 0.6 : 1.0);
drawIcon(p, QPoint(btn_size / 2, btn_size / 2), img, QColor(0, 0, 0, 166), (isDown() || !engageable) ? 0.6 : 1.0, steeringAngleDeg);
}
// MapSettingsButton
+3 -1
View File
@@ -28,9 +28,11 @@ private:
bool alwaysOnLateralActive;
bool conditionalExperimental;
bool navigateOnOpenpilot;
bool rotatingWheel;
bool trafficModeActive;
int conditionalStatus;
int steeringAngleDeg;
int wheelIcon;
QMap<int, QPixmap> wheelImages;
@@ -51,7 +53,7 @@ private:
QPixmap settings_img;
};
void drawIcon(QPainter &p, const QPoint &center, const QPixmap &img, const QBrush &bg, float opacity);
void drawIcon(QPainter &p, const QPoint &center, const QPixmap &img, const QBrush &bg, float opacity, const int angle = 0);
// FrogPilot buttons
class DistanceButton : public QPushButton {
+2
View File
@@ -224,6 +224,7 @@ static void update_state(UIState *s) {
scene.parked = carState.getGearShifter() == cereal::CarState::GearShifter::PARK;
scene.reverse = carState.getGearShifter() == cereal::CarState::GearShifter::REVERSE;
scene.standstill = carState.getStandstill() && !scene.reverse;
scene.steering_angle_deg = -carState.getSteeringAngleDeg();
}
if (sm.updated("controlsState")) {
auto controlsState = sm["controlsState"].getControlsState();
@@ -321,6 +322,7 @@ void ui_update_frogpilot_params(UIState *s, Params &params) {
scene.dynamic_pedals_on_ui = scene.pedals_on_ui && params.getBool("DynamicPedalsOnUI");
scene.static_pedals_on_ui = scene.pedals_on_ui && params.getBool("StaticPedalsOnUI");
scene.road_name_ui = custom_onroad_ui && params.getBool("RoadNameUI");
scene.rotating_wheel = custom_onroad_ui && params.getBool("RotatingWheel");
scene.wheel_icon = custom_onroad_ui ? params.getInt("WheelIcon") : 0;
scene.disable_smoothing_mtsc = params.getBool("MTSCEnabled") && params.getBool("DisableMTSCSmoothing");
+2
View File
@@ -150,6 +150,7 @@ typedef struct UIScene {
bool reverse_cruise_ui;
bool right_hand_drive;
bool road_name_ui;
bool rotating_wheel;
bool show_aol_status_bar;
bool show_cem_status_bar;
bool show_slc_offset;
@@ -181,6 +182,7 @@ typedef struct UIScene {
int conditional_speed;
int conditional_speed_lead;
int conditional_status;
int steering_angle_deg;
int tethering_config;
int wheel_icon;