diff options
| author | TryTwo <taolas@gmail.com> | 2024-05-14 13:07:17 -0700 |
|---|---|---|
| committer | TryTwo <taolas@gmail.com> | 2024-05-25 17:09:21 -0700 |
| commit | b7b0842d2faf9396e7f06bd6ad714289bff4876e (patch) | |
| tree | 0214d9b6d2d8d197ba6d634941e5d0f3574671d3 /Source/Core/DolphinQt/Debugger/BreakpointWidget.cpp | |
| parent | d96840f8086280eaac1e959d79ed3d8432127d90 (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.cpp | 38 |
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); |
