mirror of
				https://github.com/dolphin-emu/dolphin.git
				synced 2025-10-25 09:29:43 +00:00 
			
		
		
		
	SPDX standardizes how source code conveys its copyright and licensing information. See https://spdx.github.io/spdx-spec/1-rationale/ . SPDX tags are adopted in many large projects, including things like the Linux kernel.
		
			
				
	
	
		
			44 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2018 Dolphin Emulator Project
 | |
| // SPDX-License-Identifier: GPL-2.0-or-later
 | |
| 
 | |
| // Based on:
 | |
| // https://stackoverflow.com/questions/30005540/keeping-the-aspect-ratio-of-a-sub-classed-qwidget-during-resize
 | |
| 
 | |
| #include "DolphinQt/QtUtils/AspectRatioWidget.h"
 | |
| 
 | |
| #include <QBoxLayout>
 | |
| #include <QResizeEvent>
 | |
| 
 | |
| AspectRatioWidget::AspectRatioWidget(QWidget* widget, float width, float height, QWidget* parent)
 | |
|     : QWidget(parent), m_ar_width(width), m_ar_height(height)
 | |
| {
 | |
|   m_layout = new QBoxLayout(QBoxLayout::LeftToRight, this);
 | |
| 
 | |
|   // add spacer, then your widget, then spacer
 | |
|   m_layout->addItem(new QSpacerItem(0, 0));
 | |
|   m_layout->addWidget(widget);
 | |
|   m_layout->addItem(new QSpacerItem(0, 0));
 | |
| }
 | |
| 
 | |
| void AspectRatioWidget::resizeEvent(QResizeEvent* event)
 | |
| {
 | |
|   float aspect_ratio = static_cast<float>(event->size().width()) / event->size().height();
 | |
|   int widget_stretch, outer_stretch;
 | |
| 
 | |
|   if (aspect_ratio > (m_ar_width / m_ar_height))  // too wide
 | |
|   {
 | |
|     m_layout->setDirection(QBoxLayout::LeftToRight);
 | |
|     widget_stretch = height() * (m_ar_width / m_ar_height);  // i.e., my width
 | |
|     outer_stretch = (width() - widget_stretch) / 2 + 0.5;
 | |
|   }
 | |
|   else  // too tall
 | |
|   {
 | |
|     m_layout->setDirection(QBoxLayout::TopToBottom);
 | |
|     widget_stretch = width() * (m_ar_height / m_ar_width);  // i.e., my height
 | |
|     outer_stretch = (height() - widget_stretch) / 2 + 0.5;
 | |
|   }
 | |
| 
 | |
|   m_layout->setStretch(0, outer_stretch);
 | |
|   m_layout->setStretch(1, widget_stretch);
 | |
|   m_layout->setStretch(2, outer_stretch);
 | |
| }
 |