OpenShot Library | libopenshot 0.3.3
Loading...
Searching...
No Matches
VideoRenderWidget.cpp
Go to the documentation of this file.
1
9// Copyright (c) 2008-2019 OpenShot Studios, LLC
10//
11// SPDX-License-Identifier: LGPL-3.0-or-later
12
13#include "VideoRenderWidget.h"
14#include <QWidget>
15#include <QImage>
16#include <QPainter>
17#include <QPaintEvent>
18#include <QSizePolicy>
19#include <QPalette>
20
21
23 : QWidget(parent), renderer(new VideoRenderer(this))
24{
25 QPalette p = palette();
26 p.setColor(QPalette::Window, Qt::black);
27 setPalette(p);
28 setAttribute(Qt::WA_OpaquePaintEvent);
29 setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
30
31 // init aspect ratio settings (default values)
32 aspect_ratio.num = 16;
33 aspect_ratio.den = 9;
34 pixel_ratio.num = 1;
35 pixel_ratio.den = 1;
36
37 connect(renderer, SIGNAL(present(const QImage &)), this, SLOT(present(const QImage &)));
38}
39
43
45{
46 return renderer;
47}
48
50{
51 aspect_ratio = new_aspect_ratio;
52 pixel_ratio = new_pixel_ratio;
53}
54
55QRect VideoRenderWidget::centeredViewport(int width, int height)
56{
57 // calculate aspect ratio
58 float aspectRatio = aspect_ratio.ToFloat() * pixel_ratio.ToFloat();
59 int heightFromWidth = (int) (width / aspectRatio);
60 int widthFromHeight = (int) (height * aspectRatio);
61
62 if (heightFromWidth <= height) {
63 return QRect(0,(height - heightFromWidth) / 2, width, heightFromWidth);
64 } else {
65 return QRect((width - widthFromHeight) / 2.0, 0, widthFromHeight, height);
66 }
67}
68
69void VideoRenderWidget::paintEvent(QPaintEvent *event)
70{
71 QPainter painter(this);
72
73 // maintain aspect ratio
74 painter.fillRect(event->rect(), palette().window());
75 painter.setViewport(centeredViewport(width(), height()));
76 painter.drawImage(QRect(0, 0, width(), height()), image);
77
78}
79
80void VideoRenderWidget::present(const QImage &m)
81{
82 image = m;
83 repaint();
84}
Header file for Video RendererWidget class.
QRect centeredViewport(int width, int height)
VideoRenderer * GetRenderer() const
void paintEvent(QPaintEvent *event)
void SetAspectRatio(openshot::Fraction new_aspect_ratio, openshot::Fraction new_pixel_ratio)
VideoRenderWidget(QWidget *parent=0)
This class represents a fraction.
Definition Fraction.h:30
int num
Numerator for the fraction.
Definition Fraction.h:32
float ToFloat()
Return this fraction as a float (i.e. 1/2 = 0.5)
Definition Fraction.cpp:35
int den
Denominator for the fraction.
Definition Fraction.h:33