| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #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;
- }
|