gpu: decode RELEASE_MEM directly from the driver's native packet

This commit is contained in:
nmzik
2026-10-23 21:11:07 +02:00
parent 227f12ee4b
commit bf5dd62eea
10 changed files with 121 additions and 356 deletions
+77
View File
@@ -0,0 +1,77 @@
#ifndef GAME_LIST_TREE_WIDGET_H
#define GAME_LIST_TREE_WIDGET_H
#include "gameContent.h"
#include <QPaintEvent>
#include <QPainter>
#include <QPalette>
#include <QPixmap>
#include <QPoint>
#include <QResizeEvent>
#include <QString>
#include <QTreeWidget>
class GameListTreeWidget: public QTreeWidget {
public:
explicit GameListTreeWidget(QWidget* parent = nullptr): QTreeWidget(parent) {
setAutoFillBackground(false);
viewport()->setAutoFillBackground(false);
}
void SetBackgroundImage(const QString& key) {
if (m_path == key) {
return;
}
m_path = key;
m_source = QPixmap();
if (!key.isEmpty()) {
m_source.loadFromData(GameContent::ReadFile(key, QStringLiteral("sce_sys/pic0.png"),
GameContent::MaxImageSize));
}
UpdateScaledBackground();
viewport()->update();
}
protected:
void resizeEvent(QResizeEvent* event) override {
QTreeWidget::resizeEvent(event);
UpdateScaledBackground();
}
void paintEvent(QPaintEvent* event) override {
{
QPainter painter(viewport());
if (m_scaled.isNull()) {
painter.fillRect(event->rect(), palette().brush(QPalette::Base));
} else {
painter.drawPixmap(m_scaled_pos, m_scaled);
auto overlay = palette().color(QPalette::Base);
overlay.setAlpha(185);
painter.fillRect(event->rect(), overlay);
}
}
QTreeWidget::paintEvent(event);
}
private:
void UpdateScaledBackground() {
m_scaled = QPixmap();
if (m_source.isNull() || viewport()->size().isEmpty()) {
return;
}
m_scaled = m_source.scaled(viewport()->size(), Qt::KeepAspectRatioByExpanding,
Qt::FastTransformation);
m_scaled_pos = QPoint((viewport()->width() - m_scaled.width()) / 2,
(viewport()->height() - m_scaled.height()) / 2);
}
QString m_path;
QPixmap m_source;
QPixmap m_scaled;
QPoint m_scaled_pos;
};
#endif // GAME_LIST_TREE_WIDGET_H