From 940a2361da8f51ab2547f1b7bfd42dc1c8645642 Mon Sep 17 00:00:00 2001 From: David Doan Date: Thu, 7 Dec 2023 21:57:21 -0500 Subject: added a GUI --- src/utils/aspectratiowidget/aspectratiowidget.hpp | 66 +++++++++++++++++++++++ src/utils/sceneparser.cpp | 2 +- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 src/utils/aspectratiowidget/aspectratiowidget.hpp (limited to 'src/utils') diff --git a/src/utils/aspectratiowidget/aspectratiowidget.hpp b/src/utils/aspectratiowidget/aspectratiowidget.hpp new file mode 100644 index 0000000..9a5f81c --- /dev/null +++ b/src/utils/aspectratiowidget/aspectratiowidget.hpp @@ -0,0 +1,66 @@ +#ifndef ASPECTRATIOWIDGET_HPP +#define ASPECTRATIOWIDGET_HPP + +#include +#include + +class AspectRatioWidget : public QWidget +{ + Q_OBJECT +public: + AspectRatioWidget(QWidget *parent = 0) : QWidget(parent) + { + m_layout = new QHBoxLayout(); + m_layout->setSpacing(0); + m_layout->setContentsMargins(0, 0, 0, 0); + setLayout(m_layout); + } + + // the widget we want to keep the ratio + void setAspectWidget(QWidget* widget, const double ratio = 1.0) { + m_aspect_widget = widget; + m_layout->addWidget(widget); + m_ratio = ratio; + } + void setRatio(const double ratio) { + m_ratio = ratio; + applyAspectRatio(); + } + +protected: + void resizeEvent(QResizeEvent *event) { + (void)event; + applyAspectRatio(); + } + +public slots: + void applyAspectRatio() { + int w = this->width(); + int h = this->height(); + double aspect = static_cast(h)/static_cast(w); + + if(aspect < m_ratio) // parent is too wide + { + int target_width = static_cast(static_cast(h)/m_ratio); + m_aspect_widget->setMaximumWidth(target_width); + m_aspect_widget->setMaximumHeight(h); + + } + else // parent is too high + { + int target_heigth = static_cast(static_cast(w)*m_ratio); + m_aspect_widget->setMaximumHeight(target_heigth); + m_aspect_widget->setMaximumWidth(w); + } + } + +private: + QHBoxLayout* m_layout; + + QWidget* m_aspect_widget; + + double m_ratio; +}; + +#endif // ASPECTRATIOWINDOW_H + diff --git a/src/utils/sceneparser.cpp b/src/utils/sceneparser.cpp index 74c605a..99c4f55 100644 --- a/src/utils/sceneparser.cpp +++ b/src/utils/sceneparser.cpp @@ -58,7 +58,7 @@ void initTree(SceneNode* currentNode, std::vector *shapes, std: for(auto primitive : currentNode->primitives) { - primitive->material.textureData = loadTextureFromFile(QString::fromStdString(primitive->material.textureMap.filename)); + // primitive->material.textureData = loadTextureFromFile(QString::fromStdString(primitive->material.textureMap.filename)); RenderShapeData rsd = {*primitive, currentCTM, glm::inverse(currentCTM)}; shapes->push_back(rsd); } -- cgit v1.2.3-70-g09d2