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.
		
		
		
		
		
			
		
			
				
					
					
						
							66 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
	
	
							66 lines
						
					
					
						
							1.9 KiB
						
					
					
				| #include "selfdrive/ui/tests/ui_snapshot.h"
 | |
| 
 | |
| #include <QApplication>
 | |
| #include <QCommandLineParser>
 | |
| #include <QDir>
 | |
| #include <QImage>
 | |
| #include <QPainter>
 | |
| 
 | |
| #include "selfdrive/ui/qt/home.h"
 | |
| #include "selfdrive/ui/qt/util.h"
 | |
| #include "selfdrive/ui/qt/window.h"
 | |
| #include "selfdrive/ui/ui.h"
 | |
| 
 | |
| void saveWidgetAsImage(QWidget *widget, const QString &fileName) {
 | |
|   QImage image(widget->size(), QImage::Format_ARGB32);
 | |
|   QPainter painter(&image);
 | |
|   widget->render(&painter);
 | |
|   image.save(fileName);
 | |
| }
 | |
| 
 | |
| int main(int argc, char *argv[]) {
 | |
|   initApp(argc, argv);
 | |
| 
 | |
|   QApplication app(argc, argv);
 | |
| 
 | |
|   QCommandLineParser parser;
 | |
|   parser.setApplicationDescription("Take a snapshot of the UI.");
 | |
|   parser.addHelpOption();
 | |
|   parser.addOption(QCommandLineOption(QStringList() << "o"
 | |
|                                                     << "output",
 | |
|                                       "Output image file path. The file's suffix is used to "
 | |
|                                       "determine the format. Supports PNG and JPEG formats. "
 | |
|                                       "Defaults to \"snapshot.png\".",
 | |
|                                       "file", "snapshot.png"));
 | |
|   parser.process(app);
 | |
| 
 | |
|   const QString output = parser.value("output");
 | |
|   if (output.isEmpty()) {
 | |
|     qCritical() << "No output file specified";
 | |
|     return 1;
 | |
|   }
 | |
| 
 | |
|   auto current = QDir::current();
 | |
| 
 | |
|   // change working directory to find assets
 | |
|   if (!QDir::setCurrent(QCoreApplication::applicationDirPath() + QDir::separator() + "..")) {
 | |
|     qCritical() << "Failed to set current directory";
 | |
|     return 1;
 | |
|   }
 | |
| 
 | |
|   MainWindow w;
 | |
|   w.setFixedSize(2160, 1080);
 | |
|   w.show();
 | |
|   app.installEventFilter(&w);
 | |
| 
 | |
|   // restore working directory
 | |
|   QDir::setCurrent(current.absolutePath());
 | |
| 
 | |
|   // wait for the UI to update
 | |
|   QObject::connect(uiState(), &UIState::uiUpdate, [&](const UIState &s) {
 | |
|     saveWidgetAsImage(&w, output);
 | |
|     app.quit();
 | |
|   });
 | |
| 
 | |
|   return app.exec();
 | |
| }
 | |
| 
 |