diff options
Diffstat (limited to 'qtmips_gui/lcddisplaydock.cpp')
-rw-r--r-- | qtmips_gui/lcddisplaydock.cpp | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/qtmips_gui/lcddisplaydock.cpp b/qtmips_gui/lcddisplaydock.cpp index 6517f4a..1109efd 100644 --- a/qtmips_gui/lcddisplaydock.cpp +++ b/qtmips_gui/lcddisplaydock.cpp @@ -40,9 +40,17 @@ #include "lcddisplaydock.h" #include "lcddisplayview.h" -LcdDisplayDock::LcdDisplayDock(QWidget *parent, QSettings *settings) : QDockWidget(parent) { +LcdDisplayDock::LcdDisplayDock(QWidget *parent, QSettings *settings) : Super(parent) { lcd_display_widget = new LcdDisplayView(this); - setWidget(lcd_display_widget); + QWidget *fill_widget = new QWidget(this); + + layout = new QBoxLayout(QBoxLayout::LeftToRight, fill_widget); + // add spacer, then your widget, then spacer + layout->addItem(new QSpacerItem(0, 0)); + layout->addWidget(lcd_display_widget); + layout->addItem(new QSpacerItem(0, 0)); + fill_widget->setLayout(layout); + setWidget(fill_widget); setObjectName("LCD Display"); setWindowTitle("LCD Display"); @@ -54,4 +62,41 @@ LcdDisplayDock::~LcdDisplayDock() { void LcdDisplayDock::setup(machine::LcdDisplay *lcd_display) { lcd_display_widget->setup(lcd_display); + update_layout(width(), height()); +} + +void LcdDisplayDock::update_layout(int w, int h) { + // Keeping aspect ratio based on + // https://stackoverflow.com/questions/30005540/keeping-the-aspect-ratio-of-a-sub-classed-qwidget-during-resize + + float thisAspectRatio = (float)w / h; + int widgetStretch, outerStretch; + float arWidth = lcd_display_widget->fb_width(); // aspect ratio width + float arHeight = lcd_display_widget->fb_height(); // aspect ratio height + + if ((arWidth == 0) || (arHeight == 0)) { + outerStretch = 0; + widgetStretch = 1; + } else if (thisAspectRatio > (arWidth/arHeight)) { // too wide + layout->setDirection(QBoxLayout::LeftToRight); + widgetStretch = height() * (arWidth/arHeight); // i.e., my width + outerStretch = (width() - widgetStretch) / 2 + 0.5; + } else { // too tall + layout->setDirection(QBoxLayout::TopToBottom); + widgetStretch = width() * (arHeight/arWidth); // i.e., my height + outerStretch = (height() - widgetStretch) / 2 + 0.5; + } + + layout->setStretch(0, outerStretch); + layout->setStretch(1, widgetStretch); + layout->setStretch(2, outerStretch); +} + +void LcdDisplayDock::resizeEvent(QResizeEvent *event) { + // Keeping aspect ratio based on + // https://stackoverflow.com/questions/30005540/keeping-the-aspect-ratio-of-a-sub-classed-qwidget-during-resize + + update_layout(event->size().width(), event->size().height()); + + Super::resizeEvent(event); } |