Software renderer no longer uses QRasterWindow

This commit is contained in:
Cacodemon345
2025-09-19 14:50:30 +06:00
parent 84e4a29528
commit f1bfe48832
2 changed files with 40 additions and 5 deletions

View File

@@ -21,6 +21,7 @@
#include "qt_softwarerenderer.hpp"
#include <QApplication>
#include <QPainter>
#include <QResizeEvent>
extern "C" {
#include <86box/86box.h>
@@ -31,7 +32,7 @@ SoftwareRenderer::SoftwareRenderer(QWidget *parent)
#ifdef __HAIKU__
: QWidget(parent)
#else
: QRasterWindow(parent->windowHandle())
: QWindow(parent->windowHandle()), m_backingStore(new QBackingStore(this))
#endif
{
RendererCommon::parentWidget = parent;
@@ -47,12 +48,30 @@ SoftwareRenderer::SoftwareRenderer(QWidget *parent)
#endif
}
#ifdef __HAIKU__
void
SoftwareRenderer::paintEvent(QPaintEvent *event)
{
(void) event;
onPaint(this);
}
#endif
void
SoftwareRenderer::render()
{
if (!isExposed())
return;
QRect rect(0, 0, width(), height());
m_backingStore->beginPaint(rect);
QPaintDevice *device = m_backingStore->paintDevice();
onPaint(device);
m_backingStore->endPaint();
m_backingStore->flush(rect);
}
void
SoftwareRenderer::onBlit(int buf_idx, int x, int y, int w, int h)
@@ -70,7 +89,11 @@ SoftwareRenderer::onBlit(int buf_idx, int x, int y, int w, int h)
if (source != origSource)
onResize(this->width(), this->height());
#ifdef __HAIKU__
update();
#else
render();
#endif
}
void
@@ -80,7 +103,8 @@ SoftwareRenderer::resizeEvent(QResizeEvent *event)
#ifdef __HAIKU__
QWidget::resizeEvent(event);
#else
QRasterWindow::resizeEvent(event);
QWindow::resizeEvent(event);
m_backingStore->resize(event->size());
#endif
}
@@ -92,7 +116,7 @@ SoftwareRenderer::event(QEvent *event)
#ifdef __HAIKU__
return QWidget::event(event);
#else
return QRasterWindow::event(event);
return QWindow::event(event);
#endif
return res;
}
@@ -112,6 +136,9 @@ SoftwareRenderer::onPaint(QPaintDevice *device)
#endif
painter.setCompositionMode(QPainter::CompositionMode_Plus);
painter.drawImage(destination, *images[cur_image], source);
#ifndef __HAIKU__
painter.end();
#endif
}
std::vector<std::tuple<uint8_t *, std::atomic_flag *>>