Imported Upstream version 0.13.2+dsfg1
This commit is contained in:
commit
fb3990e9e5
2036 changed files with 287360 additions and 0 deletions
88
obs/qt-display.cpp
Normal file
88
obs/qt-display.cpp
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
#include "qt-display.hpp"
|
||||
#include "qt-wrappers.hpp"
|
||||
#include "display-helpers.hpp"
|
||||
#include <QWindow>
|
||||
#include <QScreen>
|
||||
#include <QResizeEvent>
|
||||
#include <QShowEvent>
|
||||
|
||||
OBSQTDisplay::OBSQTDisplay(QWidget *parent, Qt::WindowFlags flags)
|
||||
: QWidget(parent, flags)
|
||||
{
|
||||
setAttribute(Qt::WA_PaintOnScreen);
|
||||
setAttribute(Qt::WA_StaticContents);
|
||||
setAttribute(Qt::WA_NoSystemBackground);
|
||||
setAttribute(Qt::WA_OpaquePaintEvent);
|
||||
setAttribute(Qt::WA_DontCreateNativeAncestors);
|
||||
setAttribute(Qt::WA_NativeWindow);
|
||||
|
||||
auto windowVisible = [this] (bool visible)
|
||||
{
|
||||
if (!visible)
|
||||
return;
|
||||
|
||||
if (!display) {
|
||||
CreateDisplay();
|
||||
} else {
|
||||
QSize size = GetPixelSize(this);
|
||||
obs_display_resize(display, size.width(), size.height());
|
||||
}
|
||||
};
|
||||
|
||||
auto sizeChanged = [this] (QScreen*)
|
||||
{
|
||||
CreateDisplay();
|
||||
|
||||
QSize size = GetPixelSize(this);
|
||||
obs_display_resize(display, size.width(), size.height());
|
||||
};
|
||||
|
||||
connect(windowHandle(), &QWindow::visibleChanged, windowVisible);
|
||||
connect(windowHandle(), &QWindow::screenChanged, sizeChanged);
|
||||
}
|
||||
|
||||
void OBSQTDisplay::CreateDisplay()
|
||||
{
|
||||
if (display || !windowHandle()->isExposed())
|
||||
return;
|
||||
|
||||
QSize size = GetPixelSize(this);
|
||||
|
||||
gs_init_data info = {};
|
||||
info.cx = size.width();
|
||||
info.cy = size.height();
|
||||
info.format = GS_RGBA;
|
||||
info.zsformat = GS_ZS_NONE;
|
||||
|
||||
QTToGSWindow(winId(), info.window);
|
||||
|
||||
display = obs_display_create(&info);
|
||||
|
||||
emit DisplayCreated(this);
|
||||
}
|
||||
|
||||
void OBSQTDisplay::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
QWidget::resizeEvent(event);
|
||||
|
||||
CreateDisplay();
|
||||
|
||||
if (isVisible() && display) {
|
||||
QSize size = GetPixelSize(this);
|
||||
obs_display_resize(display, size.width(), size.height());
|
||||
}
|
||||
|
||||
emit DisplayResized();
|
||||
}
|
||||
|
||||
void OBSQTDisplay::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
CreateDisplay();
|
||||
|
||||
QWidget::paintEvent(event);
|
||||
}
|
||||
|
||||
QPaintEngine *OBSQTDisplay::paintEngine() const
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue