From a9599ff4edfdc0186b2f5ae3bd22f25cdeb686d1 Mon Sep 17 00:00:00 2001 From: Tobias Markmann Date: Thu, 18 Aug 2016 18:06:27 +0200 Subject: Tweak grid selection dialog rendering Recent testing on Debian 8 showed two rendering issues: 1. CE_MenuBarItem in the selected state shows drawing artifacts for our drawing size with Debian's default style. 2. CE_SizeGrip shows drawing artifacts unless it's drawn at position (0,0). Removed size grip as the resizability signification is also provided by the description text. Cells are drawn as simple squares in the palette's highlight color. Test-Information: Verified that there are no artifacts and the dialog is usable on Debian 8, Windows 8 and OS X 10.11.6. Change-Id: I9eaf1e1fd34d035ec3dffcb0dc29efca40d6da24 diff --git a/Swift/QtUI/Trellis/QtGridSelectionDialog.cpp b/Swift/QtUI/Trellis/QtGridSelectionDialog.cpp index 6bddb34..f03d0ec 100644 --- a/Swift/QtUI/Trellis/QtGridSelectionDialog.cpp +++ b/Swift/QtUI/Trellis/QtGridSelectionDialog.cpp @@ -11,9 +11,7 @@ #include #include #include -#include -#include -#include +#include namespace Swift { @@ -106,18 +104,16 @@ void QtGridSelectionDialog::mousePressEvent(QMouseEvent*) { void QtGridSelectionDialog::paintEvent(QPaintEvent*) { QPainter painter(this); - QStyleOptionMenuItem option; - option.state = QStyle::State_Enabled | QStyle::State_Selected | QStyle::State_Sunken; - option.menuRect = QRect(QPoint(0,0), frameSize); - // draw grid + QRect gridCell = QRect(QPoint(0,0), frameSize); + painter.setBrush(palette().highlight()); + painter.setPen(Qt::NoPen); for (int x = 0; x < currentGridSize.width(); x++) { for (int y = 0; y < currentGridSize.height(); y++) { int xPos = horizontalMargin + (x * (frameSize.width() + padding)); int yPos = verticalMargin + (y * (frameSize.height() + padding)); - option.menuRect.moveTo(QPoint(xPos, yPos)); - option.rect = option.menuRect; - style()->drawControl(QStyle::CE_MenuBarItem, &option, &painter, nullptr); + gridCell.moveTo(QPoint(xPos, yPos)); + painter.drawRect(gridCell); } } @@ -126,15 +122,10 @@ void QtGridSelectionDialog::paintEvent(QPaintEvent*) { auto descriptionBB = fontMetrics.boundingRect(QRect(0,0, width() - 2 * horizontalMargin,0), Qt::AlignHCenter | Qt::AlignTop | Qt::TextWordWrap, descriptionText, 0, 0); QStyleOption opt; + opt.initFrom(this); int textY = verticalMargin + (currentGridSize.height() * (frameSize.height() + padding)); int textX = (size().width() - descriptionBB.width()) / 2; style()->drawItemText(&painter, QRect(textX, textY, descriptionBB.width(), descriptionBB.height()), Qt::AlignHCenter | Qt::AlignTop | Qt::TextWordWrap, opt.palette, true, descriptionText, foregroundRole()); - - // draw size grip at bottom right corner; - QStyleOptionSizeGrip sizeGripOption; - sizeGripOption.init(this); - sizeGripOption.corner = Qt::BottomRightCorner; - style()->drawControl(QStyle::CE_SizeGrip, &sizeGripOption, &painter, this); } void QtGridSelectionDialog::showEvent(QShowEvent*) { -- cgit v0.10.2-6-g49f6