Visuals - Custom Onroad UI - Steering Wheel Icon - Live Rotation
This commit is contained in:
parent
9c7a043300
commit
159f53d20c
@ -18,15 +18,19 @@
|
|||||||
#include "selfdrive/ui/qt/maps/map_panel.h"
|
#include "selfdrive/ui/qt/maps/map_panel.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void drawIcon(QPainter &p, const QPoint ¢er, const QPixmap &img, const QBrush &bg, float opacity) {
|
static void drawIcon(QPainter &p, const QPoint ¢er, const QPixmap &img, const QBrush &bg, float opacity, const int angle = 0) {
|
||||||
p.setRenderHint(QPainter::Antialiasing);
|
p.setRenderHint(QPainter::Antialiasing);
|
||||||
p.setOpacity(1.0); // bg dictates opacity of ellipse
|
p.setOpacity(1.0); // bg dictates opacity of ellipse
|
||||||
p.setPen(Qt::NoPen);
|
p.setPen(Qt::NoPen);
|
||||||
p.setBrush(bg);
|
p.setBrush(bg);
|
||||||
p.drawEllipse(center, btn_size / 2, btn_size / 2);
|
p.drawEllipse(center, btn_size / 2, btn_size / 2);
|
||||||
|
p.save();
|
||||||
|
p.translate(center);
|
||||||
|
p.rotate(angle);
|
||||||
p.setOpacity(opacity);
|
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.setOpacity(1.0);
|
||||||
|
p.restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
OnroadWindow::OnroadWindow(QWidget *parent) : QWidget(parent), scene(uiState()->scene) {
|
OnroadWindow::OnroadWindow(QWidget *parent) : QWidget(parent), scene(uiState()->scene) {
|
||||||
@ -318,7 +322,15 @@ void ExperimentalButton::updateState(const UIState &s) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FrogPilot variables
|
// FrogPilot variables
|
||||||
|
rotatingWheel = scene.rotating_wheel;
|
||||||
wheelIcon = scene.wheel_icon;
|
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) {
|
void ExperimentalButton::paintEvent(QPaintEvent *event) {
|
||||||
@ -338,7 +350,7 @@ void ExperimentalButton::paintEvent(QPaintEvent *event) {
|
|||||||
(scene.navigate_on_openpilot ? bg_colors[STATUS_NAVIGATION_ACTIVE] : QColor(0, 0, 0, 166)))))) :
|
(scene.navigate_on_openpilot ? bg_colors[STATUS_NAVIGATION_ACTIVE] : QColor(0, 0, 0, 166)))))) :
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -107,6 +107,9 @@ private:
|
|||||||
|
|
||||||
QMap<int, QPixmap> wheelImages;
|
QMap<int, QPixmap> wheelImages;
|
||||||
|
|
||||||
|
bool rotatingWheel;
|
||||||
|
|
||||||
|
int steeringAngleDeg;
|
||||||
int wheelIcon;
|
int wheelIcon;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -224,6 +224,7 @@ static void update_state(UIState *s) {
|
|||||||
scene.blind_spot_right = carState.getRightBlindspot();
|
scene.blind_spot_right = carState.getRightBlindspot();
|
||||||
scene.parked = carState.getGearShifter() == cereal::CarState::GearShifter::PARK;
|
scene.parked = carState.getGearShifter() == cereal::CarState::GearShifter::PARK;
|
||||||
scene.standstill = carState.getStandstill();
|
scene.standstill = carState.getStandstill();
|
||||||
|
scene.steering_angle_deg = -carState.getSteeringAngleDeg();
|
||||||
}
|
}
|
||||||
if (sm.updated("controlsState")) {
|
if (sm.updated("controlsState")) {
|
||||||
auto controlsState = sm["controlsState"].getControlsState();
|
auto controlsState = sm["controlsState"].getControlsState();
|
||||||
@ -310,6 +311,7 @@ void ui_update_frogpilot_params(UIState *s) {
|
|||||||
scene.dynamic_pedals_on_ui = scene.pedals_on_ui && params.getBool("DynamicPedalsOnUI");
|
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.static_pedals_on_ui = scene.pedals_on_ui && params.getBool("StaticPedalsOnUI");
|
||||||
scene.road_name_ui = custom_onroad_ui && params.getBool("RoadNameUI");
|
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.wheel_icon = custom_onroad_ui ? params.getInt("WheelIcon") : 0;
|
||||||
|
|
||||||
scene.disable_smoothing_mtsc = params.getBool("MTSCEnabled") && params.getBool("DisableMTSCSmoothing");
|
scene.disable_smoothing_mtsc = params.getBool("MTSCEnabled") && params.getBool("DisableMTSCSmoothing");
|
||||||
|
@ -211,6 +211,7 @@ typedef struct UIScene {
|
|||||||
bool reverse_cruise_ui;
|
bool reverse_cruise_ui;
|
||||||
bool right_hand_drive;
|
bool right_hand_drive;
|
||||||
bool road_name_ui;
|
bool road_name_ui;
|
||||||
|
bool rotating_wheel;
|
||||||
bool show_aol_status_bar;
|
bool show_aol_status_bar;
|
||||||
bool show_cem_status_bar;
|
bool show_cem_status_bar;
|
||||||
bool show_slc_offset;
|
bool show_slc_offset;
|
||||||
@ -242,6 +243,7 @@ typedef struct UIScene {
|
|||||||
int conditional_speed;
|
int conditional_speed;
|
||||||
int conditional_speed_lead;
|
int conditional_speed_lead;
|
||||||
int conditional_status;
|
int conditional_status;
|
||||||
|
int steering_angle_deg;
|
||||||
int wheel_icon;
|
int wheel_icon;
|
||||||
|
|
||||||
QPolygonF track_adjacent_vertices[6];
|
QPolygonF track_adjacent_vertices[6];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user