summaryrefslogtreecommitdiff
path: root/Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp
diff options
context:
space:
mode:
authorTryTwo <taolas@gmail.com>2024-05-14 13:07:17 -0700
committerTryTwo <taolas@gmail.com>2024-05-25 17:09:21 -0700
commitb7b0842d2faf9396e7f06bd6ad714289bff4876e (patch)
tree0214d9b6d2d8d197ba6d634941e5d0f3574671d3 /Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp
parentd96840f8086280eaac1e959d79ed3d8432127d90 (diff)
BreakpointWidget: Fix Qt centering issues with a Custom Delegate
Diffstat (limited to 'Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp')
-rw-r--r--Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp b/Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp
index 955c134724..e0d34d74f8 100644
--- a/Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp
+++ b/Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp
@@ -3,9 +3,13 @@
#include "DolphinQt/Debugger/BreakpointWidget.h"
+#include <QApplication>
#include <QHeaderView>
#include <QMenu>
+#include <QPainter>
#include <QSignalBlocker>
+#include <QStyleOptionViewItem>
+#include <QStyledItemDelegate>
#include <QTableWidget>
#include <QToolBar>
#include <QVBoxLayout>
@@ -36,6 +40,39 @@ enum CustomRole
};
}
+// Fix icons not centering properly in a QTableWidget.
+class CustomDelegate : public QStyledItemDelegate
+{
+public:
+ CustomDelegate(BreakpointWidget* parent) : QStyledItemDelegate(parent) {}
+
+private:
+ void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
+ {
+ Q_ASSERT(index.isValid());
+
+ // Fetch normal drawing logic.
+ QStyleOptionViewItem opt = option;
+ initStyleOption(&opt, index);
+
+ // Disable drawing icon the normal way.
+ opt.icon = QIcon();
+ opt.decorationSize = QSize(0, 0);
+
+ // Default draw command for paint.
+ QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &opt, painter, 0);
+
+ // Draw pixmap at the center of the tablewidget cell
+ QPixmap pix = qvariant_cast<QPixmap>(index.data(Qt::DecorationRole));
+ if (!pix.isNull())
+ {
+ const QRect r = option.rect;
+ const QPoint p = QPoint((r.width() - pix.width()) / 2, (r.height() - pix.height()) / 2);
+ painter->drawPixmap(r.topLeft() + p, pix);
+ }
+ }
+};
+
BreakpointWidget::BreakpointWidget(QWidget* parent)
: QDockWidget(parent), m_system(Core::System::GetInstance())
{
@@ -88,6 +125,7 @@ void BreakpointWidget::CreateWidgets()
m_toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
m_table = new QTableWidget;
+ m_table->setItemDelegate(new CustomDelegate(this));
m_table->setTabKeyNavigation(false);
m_table->setContentsMargins(0, 0, 0, 0);
m_table->setColumnCount(6);