You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							65 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
	
	
							65 lines
						
					
					
						
							1.7 KiB
						
					
					
				| #include "selfdrive/ui/qt/onroad/onroad_home.h"
 | |
| 
 | |
| #include <QPainter>
 | |
| #include <QStackedLayout>
 | |
| 
 | |
| #include "selfdrive/ui/qt/util.h"
 | |
| 
 | |
| OnroadWindow::OnroadWindow(QWidget *parent) : QWidget(parent) {
 | |
|   QVBoxLayout *main_layout  = new QVBoxLayout(this);
 | |
|   main_layout->setMargin(UI_BORDER_SIZE);
 | |
|   QStackedLayout *stacked_layout = new QStackedLayout;
 | |
|   stacked_layout->setStackingMode(QStackedLayout::StackAll);
 | |
|   main_layout->addLayout(stacked_layout);
 | |
| 
 | |
|   nvg = new AnnotatedCameraWidget(VISION_STREAM_ROAD, this);
 | |
| 
 | |
|   QWidget * split_wrapper = new QWidget;
 | |
|   split = new QHBoxLayout(split_wrapper);
 | |
|   split->setContentsMargins(0, 0, 0, 0);
 | |
|   split->setSpacing(0);
 | |
|   split->addWidget(nvg);
 | |
| 
 | |
|   if (getenv("DUAL_CAMERA_VIEW")) {
 | |
|     CameraWidget *arCam = new CameraWidget("camerad", VISION_STREAM_ROAD, this);
 | |
|     split->insertWidget(0, arCam);
 | |
|   }
 | |
| 
 | |
|   stacked_layout->addWidget(split_wrapper);
 | |
| 
 | |
|   alerts = new OnroadAlerts(this);
 | |
|   alerts->setAttribute(Qt::WA_TransparentForMouseEvents, true);
 | |
|   stacked_layout->addWidget(alerts);
 | |
| 
 | |
|   // setup stacking order
 | |
|   alerts->raise();
 | |
| 
 | |
|   setAttribute(Qt::WA_OpaquePaintEvent);
 | |
|   QObject::connect(uiState(), &UIState::uiUpdate, this, &OnroadWindow::updateState);
 | |
|   QObject::connect(uiState(), &UIState::offroadTransition, this, &OnroadWindow::offroadTransition);
 | |
| }
 | |
| 
 | |
| void OnroadWindow::updateState(const UIState &s) {
 | |
|   if (!s.scene.started) {
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   alerts->updateState(s);
 | |
|   nvg->updateState(s);
 | |
| 
 | |
|   QColor bgColor = bg_colors[s.status];
 | |
|   if (bg != bgColor) {
 | |
|     // repaint border
 | |
|     bg = bgColor;
 | |
|     update();
 | |
|   }
 | |
| }
 | |
| 
 | |
| void OnroadWindow::offroadTransition(bool offroad) {
 | |
|   alerts->clear();
 | |
| }
 | |
| 
 | |
| void OnroadWindow::paintEvent(QPaintEvent *event) {
 | |
|   QPainter p(this);
 | |
|   p.fillRect(rect(), QColor(bg.red(), bg.green(), bg.blue(), 255));
 | |
| }
 | |
| 
 |