diff --git a/selfdrive/ui/qt/offroad/driverview.cc b/selfdrive/ui/qt/offroad/driverview.cc index f7954c6827..693a0253b4 100644 --- a/selfdrive/ui/qt/offroad/driverview.cc +++ b/selfdrive/ui/qt/offroad/driverview.cc @@ -3,33 +3,62 @@ #include #include +#include "selfdrive/ui/qt/qt_window.h" #include "selfdrive/ui/qt/util.h" const int FACE_IMG_SIZE = 130; -DriverViewWindow::DriverViewWindow(QWidget* parent) : CameraWidget("camerad", VISION_STREAM_DRIVER, true, parent) { +DriverViewWindow::DriverViewWindow(QWidget* parent) : QWidget(parent) { + setAttribute(Qt::WA_OpaquePaintEvent); + layout = new QStackedLayout(this); + layout->setStackingMode(QStackedLayout::StackAll); + + cameraView = new CameraWidget("camerad", VISION_STREAM_DRIVER, true, this); + layout->addWidget(cameraView); + + scene = new DriverViewScene(this); + connect(cameraView, &CameraWidget::vipcThreadFrameReceived, scene, &DriverViewScene::frameUpdated); + layout->addWidget(scene); + layout->setCurrentWidget(scene); + + QObject::connect(device(), &Device::interactiveTimeout, this, &DriverViewWindow::closeView); +} + +void DriverViewWindow::closeView() { + if (isVisible()) { + cameraView->stopVipcThread(); + emit done(); + } +} + +void DriverViewWindow::mouseReleaseEvent(QMouseEvent* e) { + closeView(); +} + +DriverViewScene::DriverViewScene(QWidget* parent) : QWidget(parent) { face_img = loadPixmap("../assets/img_driver_face_static.png", {FACE_IMG_SIZE, FACE_IMG_SIZE}); - QObject::connect(device(), &Device::interactiveTimeout, this, &DriverViewWindow::done); - QObject::connect(this, &CameraWidget::clicked, this, &DriverViewWindow::done); } -void DriverViewWindow::showEvent(QShowEvent* event) { +void DriverViewScene::showEvent(QShowEvent* event) { + frame_updated = false; params.putBool("IsDriverViewEnabled", true); device()->resetInteractiveTimeout(60); - CameraWidget::showEvent(event); } -void DriverViewWindow::hideEvent(QHideEvent* event) { +void DriverViewScene::hideEvent(QHideEvent* event) { params.putBool("IsDriverViewEnabled", false); - stopVipcThread(); } -void DriverViewWindow::paintGL() { - CameraWidget::paintGL(); +void DriverViewScene::frameUpdated() { + frame_updated = true; + update(); +} +void DriverViewScene::paintEvent(QPaintEvent* event) { QPainter p(this); + // startup msg - if (frames.empty()) { + if (!frame_updated) { p.setPen(Qt::white); p.setRenderHint(QPainter::TextAntialiasing); p.setFont(InterFont(100, QFont::Bold)); @@ -41,7 +70,7 @@ void DriverViewWindow::paintGL() { cereal::DriverStateV2::Reader driver_state = sm["driverStateV2"].getDriverStateV2(); cereal::DriverStateV2::DriverData::Reader driver_data; - bool is_rhd = driver_state.getWheelOnRightProb() > 0.5; + is_rhd = driver_state.getWheelOnRightProb() > 0.5; driver_data = is_rhd ? driver_state.getRightDriverData() : driver_state.getLeftDriverData(); bool face_detected = driver_data.getFaceProb() > 0.7; diff --git a/selfdrive/ui/qt/offroad/driverview.h b/selfdrive/ui/qt/offroad/driverview.h index 155e4ede32..8bfc7a4b7b 100644 --- a/selfdrive/ui/qt/offroad/driverview.h +++ b/selfdrive/ui/qt/offroad/driverview.h @@ -1,21 +1,44 @@ #pragma once +#include + #include "selfdrive/ui/qt/widgets/cameraview.h" -class DriverViewWindow : public CameraWidget { +class DriverViewScene : public QWidget { Q_OBJECT public: - explicit DriverViewWindow(QWidget *parent); + explicit DriverViewScene(QWidget *parent); -signals: - void done(); +public slots: + void frameUpdated(); protected: void showEvent(QShowEvent *event) override; void hideEvent(QHideEvent *event) override; - void paintGL() override; + void paintEvent(QPaintEvent *event) override; +private: Params params; QPixmap face_img; + bool is_rhd = false; + bool frame_updated = false; +}; + +class DriverViewWindow : public QWidget { + Q_OBJECT + +public: + explicit DriverViewWindow(QWidget *parent); + +signals: + void done(); + +protected: + void mouseReleaseEvent(QMouseEvent* e) override; + void closeView(); + + CameraWidget *cameraView; + DriverViewScene *scene; + QStackedLayout *layout; }; diff --git a/selfdrive/ui/translations/main_de.ts b/selfdrive/ui/translations/main_de.ts index 8c9cf7127a..d1820fd423 100644 --- a/selfdrive/ui/translations/main_de.ts +++ b/selfdrive/ui/translations/main_de.ts @@ -302,7 +302,7 @@ - DriverViewWindow + DriverViewScene camera starting Kamera startet diff --git a/selfdrive/ui/translations/main_fr.ts b/selfdrive/ui/translations/main_fr.ts index c464df88e1..79c4ae5596 100644 --- a/selfdrive/ui/translations/main_fr.ts +++ b/selfdrive/ui/translations/main_fr.ts @@ -302,7 +302,7 @@ - DriverViewWindow + DriverViewScene camera starting démarrage de la caméra diff --git a/selfdrive/ui/translations/main_ja.ts b/selfdrive/ui/translations/main_ja.ts index e5ab4c25be..16595f8ebf 100644 --- a/selfdrive/ui/translations/main_ja.ts +++ b/selfdrive/ui/translations/main_ja.ts @@ -302,7 +302,7 @@ - DriverViewWindow + DriverViewScene camera starting カメラを起動しています diff --git a/selfdrive/ui/translations/main_ko.ts b/selfdrive/ui/translations/main_ko.ts index 6ca34242d7..cbd8e668ac 100644 --- a/selfdrive/ui/translations/main_ko.ts +++ b/selfdrive/ui/translations/main_ko.ts @@ -302,7 +302,7 @@ - DriverViewWindow + DriverViewScene camera starting 카메라 시작중 diff --git a/selfdrive/ui/translations/main_pt-BR.ts b/selfdrive/ui/translations/main_pt-BR.ts index 7df3a51660..a55d31034e 100644 --- a/selfdrive/ui/translations/main_pt-BR.ts +++ b/selfdrive/ui/translations/main_pt-BR.ts @@ -302,7 +302,7 @@ - DriverViewWindow + DriverViewScene camera starting câmera iniciando diff --git a/selfdrive/ui/translations/main_th.ts b/selfdrive/ui/translations/main_th.ts index ba10c91585..abc6210956 100644 --- a/selfdrive/ui/translations/main_th.ts +++ b/selfdrive/ui/translations/main_th.ts @@ -302,7 +302,7 @@ - DriverViewWindow + DriverViewScene camera starting กำลังเปิดกล้อง diff --git a/selfdrive/ui/translations/main_tr.ts b/selfdrive/ui/translations/main_tr.ts index 691de7501a..febded8f59 100644 --- a/selfdrive/ui/translations/main_tr.ts +++ b/selfdrive/ui/translations/main_tr.ts @@ -302,7 +302,7 @@ - DriverViewWindow + DriverViewScene camera starting kamera başlatılıyor diff --git a/selfdrive/ui/translations/main_zh-CHS.ts b/selfdrive/ui/translations/main_zh-CHS.ts index e0eb9b576e..040dae0b30 100644 --- a/selfdrive/ui/translations/main_zh-CHS.ts +++ b/selfdrive/ui/translations/main_zh-CHS.ts @@ -302,7 +302,7 @@ - DriverViewWindow + DriverViewScene camera starting 正在启动相机 diff --git a/selfdrive/ui/translations/main_zh-CHT.ts b/selfdrive/ui/translations/main_zh-CHT.ts index 978343b1ae..57d9f91fec 100644 --- a/selfdrive/ui/translations/main_zh-CHT.ts +++ b/selfdrive/ui/translations/main_zh-CHT.ts @@ -302,7 +302,7 @@ - DriverViewWindow + DriverViewScene camera starting 開啟相機中