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.
		
		
		
		
			
				
					67 lines
				
				1.9 KiB
			
		
		
			
		
	
	
					67 lines
				
				1.9 KiB
			| 
								 
											2 years ago
										 
									 | 
							
								#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();
							 | 
						||
| 
								 | 
							
								}
							 |