qcam: viewfinder_qt: Maintain aspect ratio
Keep the image aspect ratio when displaying in the viewfinder. When the window is adjusted to a size that differs in aspect ratio to the image, keep the image centered in the main window. Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
#include <QMap>
|
||||
#include <QMutexLocker>
|
||||
#include <QPainter>
|
||||
#include <QResizeEvent>
|
||||
#include <QtDebug>
|
||||
|
||||
#include "../common/image.h"
|
||||
@@ -40,7 +41,7 @@ static const QMap<libcamera::PixelFormat, QImage::Format> nativeFormats
|
||||
};
|
||||
|
||||
ViewFinderQt::ViewFinderQt(QWidget *parent)
|
||||
: QWidget(parent), buffer_(nullptr)
|
||||
: QWidget(parent), place_(rect()), buffer_(nullptr)
|
||||
{
|
||||
icon_ = QIcon(":camera-off.svg");
|
||||
}
|
||||
@@ -148,7 +149,7 @@ void ViewFinderQt::paintEvent(QPaintEvent *)
|
||||
|
||||
/* If we have an image, draw it. */
|
||||
if (!image_.isNull()) {
|
||||
painter.drawImage(rect(), image_, image_.rect());
|
||||
painter.drawImage(place_, image_, image_.rect());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -181,3 +182,14 @@ QSize ViewFinderQt::sizeHint() const
|
||||
{
|
||||
return size_.isValid() ? size_ : QSize(640, 480);
|
||||
}
|
||||
|
||||
void ViewFinderQt::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
if (!size_.isValid())
|
||||
return;
|
||||
|
||||
place_.setSize(size_.scaled(event->size(), Qt::KeepAspectRatio));
|
||||
place_.moveCenter(rect().center());
|
||||
|
||||
QWidget::resizeEvent(event);
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@ Q_SIGNALS:
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *) override;
|
||||
void resizeEvent(QResizeEvent *) override;
|
||||
QSize sizeHint() const override;
|
||||
|
||||
private:
|
||||
@@ -51,6 +52,7 @@ private:
|
||||
|
||||
libcamera::PixelFormat format_;
|
||||
QSize size_;
|
||||
QRect place_;
|
||||
|
||||
/* Camera stopped icon */
|
||||
QSize vfSize_;
|
||||
|
||||
Reference in New Issue
Block a user