qt: Add support for Haiku

* OpenAL backend is enabled by default on Haiku
* bswap include now makes use of builtins if they exist
* Use a local fgetws method for Haiku to avoid crashes
* OpenGL renderers are completely disabled on Haiku (they do not work)
* Software renderer is a widget, not a window on Haiku (fixes blank screen)
* Add option to disable System MIDI at compile time
This commit is contained in:
Cacodemon345
2022-03-11 12:03:54 +06:00
parent 1791ccdeb6
commit c1f9d35de8
17 changed files with 337 additions and 33 deletions

View File

@@ -28,9 +28,13 @@ extern "C" {
}
SoftwareRenderer::SoftwareRenderer(QWidget *parent)
#ifdef __HAIKU__
: QWidget(parent)
#else
: QRasterWindow(parent->windowHandle())
#endif
{
parentWidget = parent;
RendererCommon::parentWidget = parent;
images[0] = std::make_unique<QImage>(QSize(2048, 2048), QImage::Format_RGB32);
images[1] = std::make_unique<QImage>(QSize(2048, 2048), QImage::Format_RGB32);
@@ -38,6 +42,9 @@ SoftwareRenderer::SoftwareRenderer(QWidget *parent)
buf_usage = std::vector<std::atomic_flag>(2);
buf_usage[0].clear();
buf_usage[1].clear();
#ifdef __HAIKU__
this->setMouseTracking(true);
#endif
}
void SoftwareRenderer::paintEvent(QPaintEvent* event) {
@@ -60,13 +67,22 @@ void SoftwareRenderer::onBlit(int buf_idx, int x, int y, int w, int h) {
void SoftwareRenderer::resizeEvent(QResizeEvent *event) {
onResize(width(), height());
#ifdef __HAIKU__
QWidget::resizeEvent(event);
#else
QRasterWindow::resizeEvent(event);
#endif
}
bool SoftwareRenderer::event(QEvent *event)
{
bool res = false;
if (!eventDelegate(event, res)) return QRasterWindow::event(event);
if (!eventDelegate(event, res))
#ifdef __HAIKU__
return QWidget::event(event);
#else
return QRasterWindow::event(event);
#endif
return res;
}