mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-02-23 17:13:51 +08:00
ui/map: use overlay widget to simplify code and improve rendering performance (#28800)
* move widgets into overlay * adjust margin * add spacing
This commit is contained in:
@@ -25,14 +25,20 @@ const QString ICON_SUFFIX = ".png";
|
||||
MapWindow::MapWindow(const QMapboxGLSettings &settings) : m_settings(settings), velocity_filter(0, 10, 0.05) {
|
||||
QObject::connect(uiState(), &UIState::uiUpdate, this, &MapWindow::updateState);
|
||||
|
||||
map_overlay = new QWidget (this);
|
||||
map_overlay->setAttribute(Qt::WA_TranslucentBackground, true);
|
||||
QVBoxLayout *overlay_layout = new QVBoxLayout(map_overlay);
|
||||
overlay_layout->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
// Instructions
|
||||
map_instructions = new MapInstructions(this);
|
||||
QObject::connect(this, &MapWindow::instructionsChanged, map_instructions, &MapInstructions::updateInstructions);
|
||||
QObject::connect(this, &MapWindow::distanceChanged, map_instructions, &MapInstructions::updateDistance);
|
||||
map_instructions->setFixedWidth(width());
|
||||
map_instructions->setVisible(false);
|
||||
|
||||
map_eta = new MapETA(this);
|
||||
map_eta->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||
map_eta->setFixedHeight(120);
|
||||
|
||||
// Settings button
|
||||
QSize icon_size(120, 120);
|
||||
@@ -41,22 +47,28 @@ MapWindow::MapWindow(const QMapboxGLSettings &settings) : m_settings(settings),
|
||||
|
||||
settings_btn = new QPushButton(directions_icon, "", this);
|
||||
settings_btn->setIconSize(icon_size);
|
||||
settings_btn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
settings_btn->setStyleSheet(R"(
|
||||
QPushButton {
|
||||
background-color: #96000000;
|
||||
border-radius: 50px;
|
||||
padding: 24px;
|
||||
margin-left: 30px;
|
||||
}
|
||||
QPushButton:pressed {
|
||||
background-color: #D9000000;
|
||||
}
|
||||
)");
|
||||
settings_btn->show(); // force update
|
||||
settings_btn->move(UI_BORDER_SIZE, 1080 - UI_BORDER_SIZE*3 - settings_btn->height());
|
||||
QObject::connect(settings_btn, &QPushButton::clicked, [=]() {
|
||||
emit openSettings();
|
||||
});
|
||||
|
||||
overlay_layout->addWidget(map_instructions);
|
||||
overlay_layout->addStretch(1);
|
||||
overlay_layout->addWidget(settings_btn, Qt::AlignLeft);
|
||||
overlay_layout->addSpacing(UI_BORDER_SIZE);
|
||||
overlay_layout->addWidget(map_eta);
|
||||
|
||||
auto last_gps_position = coordinate_from_param("LastGPSPosition");
|
||||
if (last_gps_position.has_value()) {
|
||||
last_position = *last_gps_position;
|
||||
@@ -202,17 +214,8 @@ void MapWindow::updateState(const UIState &s) {
|
||||
clearRoute();
|
||||
}
|
||||
|
||||
// TODO: only move if position should change
|
||||
// don't move while map isn't visible
|
||||
if (isVisible()) {
|
||||
auto pos = 1080 - UI_BORDER_SIZE*2 - settings_btn->height() - UI_BORDER_SIZE;
|
||||
if (map_eta->isVisible()) {
|
||||
settings_btn->move(UI_BORDER_SIZE, pos - map_eta->height());
|
||||
settings_btn->setIcon(settings_icon);
|
||||
} else {
|
||||
settings_btn->move(UI_BORDER_SIZE, pos);
|
||||
settings_btn->setIcon(directions_icon);
|
||||
}
|
||||
settings_btn->setIcon(map_eta->isVisible() ? settings_icon : directions_icon);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -234,8 +237,7 @@ void MapWindow::updateState(const UIState &s) {
|
||||
|
||||
void MapWindow::resizeGL(int w, int h) {
|
||||
m_map->resize(size() / MAP_SCALE);
|
||||
map_instructions->setFixedWidth(width());
|
||||
map_eta->setGeometry(0, height() - 120, w, 120);
|
||||
map_overlay->setFixedSize(width(), height());
|
||||
}
|
||||
|
||||
void MapWindow::initializeGL() {
|
||||
@@ -406,12 +408,7 @@ MapInstructions::MapInstructions(QWidget * parent) : QWidget(parent) {
|
||||
main_layout->addLayout(layout);
|
||||
}
|
||||
|
||||
setStyleSheet(R"(
|
||||
* {
|
||||
color: white;
|
||||
font-family: "Inter";
|
||||
}
|
||||
)");
|
||||
setStyleSheet("color:white");
|
||||
|
||||
QPalette pal = palette();
|
||||
pal.setColor(QPalette::Background, QColor(0, 0, 0, 150));
|
||||
@@ -467,11 +464,6 @@ void MapInstructions::noError() {
|
||||
}
|
||||
|
||||
void MapInstructions::updateInstructions(cereal::NavInstruction::Reader instruction) {
|
||||
// Word wrap widgets need fixed width
|
||||
primary->setFixedWidth(width() - 250);
|
||||
secondary->setFixedWidth(width() - 250);
|
||||
|
||||
|
||||
// Show instruction text
|
||||
QString primary_str = QString::fromStdString(instruction.getManeuverPrimaryText());
|
||||
QString secondary_str = QString::fromStdString(instruction.getManeuverSecondaryText());
|
||||
@@ -545,8 +537,7 @@ void MapInstructions::updateInstructions(cereal::NavInstruction::Reader instruct
|
||||
}
|
||||
lane_widget->setVisible(has_lanes);
|
||||
|
||||
show();
|
||||
resize(sizeHint());
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -105,6 +105,7 @@ private:
|
||||
FirstOrderFilter velocity_filter;
|
||||
bool locationd_valid = false;
|
||||
|
||||
QWidget *map_overlay;
|
||||
MapInstructions* map_instructions;
|
||||
MapETA* map_eta;
|
||||
QPushButton *settings_btn;
|
||||
|
||||
Reference in New Issue
Block a user