From 26862d92b233afa4ec603f59631fb530c5441fab Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 30 May 2017 17:08:37 +0100 Subject: [PATCH] Add a toggle to RDLabel to preserve the aspect ratio of its pixmap --- qrenderdoc/Widgets/Extended/RDLabel.cpp | 29 +++++++++++++++++++++++++ qrenderdoc/Widgets/Extended/RDLabel.h | 5 +++++ 2 files changed, 34 insertions(+) diff --git a/qrenderdoc/Widgets/Extended/RDLabel.cpp b/qrenderdoc/Widgets/Extended/RDLabel.cpp index 0f60819cf..4b1707bcd 100644 --- a/qrenderdoc/Widgets/Extended/RDLabel.cpp +++ b/qrenderdoc/Widgets/Extended/RDLabel.cpp @@ -60,3 +60,32 @@ void RDLabel::leaveEvent(QEvent *event) QLabel::leaveEvent(event); } + +void RDLabel::resizeEvent(QResizeEvent *event) +{ + const QPixmap *p = pixmap(); + if(m_preserveRatio && p) + { + QRect r = rect(); + + float pratio = float(p->width()) / float(p->height()); + float rratio = float(r.width()) / float(r.height()); + + if(pratio > rratio) + { + int correctHeight = int(r.width() / pratio); + + int margin = (r.height() - correctHeight) / 2; + + setContentsMargins(0, margin, 0, margin); + } + else + { + int correctWidth = int(r.height() * pratio); + + int margin = (r.width() - correctWidth) / 2; + + setContentsMargins(margin, 0, margin, 0); + } + } +} diff --git a/qrenderdoc/Widgets/Extended/RDLabel.h b/qrenderdoc/Widgets/Extended/RDLabel.h index fa85678e2..fc484bbd8 100644 --- a/qrenderdoc/Widgets/Extended/RDLabel.h +++ b/qrenderdoc/Widgets/Extended/RDLabel.h @@ -33,6 +33,8 @@ public: explicit RDLabel(QWidget *parent = 0); ~RDLabel(); + void setPreserveAspectRatio(bool preserve) { m_preserveRatio = preserve; } + bool preserveAspectRatio() { return m_preserveRatio; } signals: void clicked(QMouseEvent *event); void doubleClicked(QMouseEvent *event); @@ -46,4 +48,7 @@ protected: void mouseMoveEvent(QMouseEvent *event) override; void mouseDoubleClickEvent(QMouseEvent *event) override; void leaveEvent(QEvent *event) override; + void resizeEvent(QResizeEvent *event) override; + + bool m_preserveRatio = false; };