Windows11Style: Misc cleanup for drawControl(CE_ItemViewItem)
Cleanup CE_ItemViewItem branch in drawControl(): - use local rect instead rect, vopt->rect or option->rect for consistency - move out viewItemPosition comparisons into local booleans - fix coding style - merge two QPainter::drawLine() calls into one Task-number: QTBUG-131585 Change-Id: I7cd2f96a2a733a55d5e7fb5956c59bd043317cb2 Reviewed-by: Wladimir Leuschner <wladimir.leuschner@qt.io> (cherry picked from commit 44edab7c84be101025dc6f9a74f87944ea3a22e9) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> (cherry picked from commit 37effa5dd3b7345ceff38f55ce5b563d2748962c)
This commit is contained in:
parent
78387c078d
commit
94fe6f04f1
@ -994,8 +994,11 @@ void QWindows11Style::drawPrimitive(PrimitiveElement element, const QStyleOption
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case QStyle::PE_PanelItemViewRow:
|
case PE_PanelItemViewRow:
|
||||||
if (const QStyleOptionViewItem *vopt = qstyleoption_cast<const QStyleOptionViewItem *>(option)) {
|
if (const QStyleOptionViewItem *vopt = qstyleoption_cast<const QStyleOptionViewItem *>(option)) {
|
||||||
|
const QRect &rect = vopt->rect;
|
||||||
|
const bool isRtl = option->direction == Qt::RightToLeft;
|
||||||
|
|
||||||
painter->setPen(Qt::NoPen);
|
painter->setPen(Qt::NoPen);
|
||||||
if (vopt->features & QStyleOptionViewItem::Alternate)
|
if (vopt->features & QStyleOptionViewItem::Alternate)
|
||||||
painter->setBrush(vopt->palette.alternateBase());
|
painter->setBrush(vopt->palette.alternateBase());
|
||||||
@ -1007,11 +1010,14 @@ void QWindows11Style::drawPrimitive(PrimitiveElement element, const QStyleOption
|
|||||||
painter->setBrush(WINUI3Colors[colorSchemeIndex][subtleHighlightColor]);
|
painter->setBrush(WINUI3Colors[colorSchemeIndex][subtleHighlightColor]);
|
||||||
painter->setPen(Qt::NoPen);
|
painter->setPen(Qt::NoPen);
|
||||||
painter->drawRoundedRect(vopt->rect.marginsRemoved(QMargins(0,2,-2,2)),2,2);
|
painter->drawRoundedRect(vopt->rect.marginsRemoved(QMargins(0,2,-2,2)),2,2);
|
||||||
const int offset = qobject_cast<const QTreeView *>(widget) ? 2 : 0;
|
|
||||||
if (vopt->viewItemPosition == QStyleOptionViewItem::Beginning && option->state & State_Selected) {
|
if (vopt->viewItemPosition == QStyleOptionViewItem::Beginning && option->state & State_Selected) {
|
||||||
painter->setPen(QPen(option->palette.accent().color()));
|
painter->setPen(QPen(option->palette.accent().color()));
|
||||||
painter->drawLine(option->rect.x(),option->rect.y()+offset,option->rect.x(),option->rect.y() + option->rect.height()-2);
|
const auto xPos = isRtl ? rect.right() - 1 : rect.left();
|
||||||
painter->drawLine(option->rect.x()+1,option->rect.y()+2,option->rect.x()+1,option->rect.y() + option->rect.height()-2);
|
const QLineF lines[2] = {
|
||||||
|
QLineF(xPos, rect.y() + 2, xPos, rect.y() + rect.height() - 2),
|
||||||
|
QLineF(xPos + 1, rect.y() + 2, xPos + 1, rect.y() + rect.height() - 2),
|
||||||
|
};
|
||||||
|
painter->drawLines(lines, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1644,28 +1650,35 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case QStyle::CE_ItemViewItem: {
|
case CE_ItemViewItem: {
|
||||||
if (const QStyleOptionViewItem *vopt = qstyleoption_cast<const QStyleOptionViewItem *>(option)) {
|
if (const QStyleOptionViewItem *vopt = qstyleoption_cast<const QStyleOptionViewItem *>(option)) {
|
||||||
if (const QAbstractItemView *view = qobject_cast<const QAbstractItemView *>(widget)) {
|
if (const QAbstractItemView *view = qobject_cast<const QAbstractItemView *>(widget)) {
|
||||||
QRect checkRect = proxy()->subElementRect(SE_ItemViewItemCheckIndicator, vopt, widget);
|
QRect checkRect = proxy()->subElementRect(SE_ItemViewItemCheckIndicator, vopt, widget);
|
||||||
QRect iconRect = proxy()->subElementRect(SE_ItemViewItemDecoration, vopt, widget);
|
QRect iconRect = proxy()->subElementRect(SE_ItemViewItemDecoration, vopt, widget);
|
||||||
QRect textRect = proxy()->subElementRect(SE_ItemViewItemText, vopt, widget);
|
QRect textRect = proxy()->subElementRect(SE_ItemViewItemText, vopt, widget);
|
||||||
|
|
||||||
QRect rect = vopt->rect;
|
const QRect &rect = vopt->rect;
|
||||||
|
const bool isRtl = option->direction == Qt::RightToLeft;
|
||||||
|
bool onlyOne = vopt->viewItemPosition == QStyleOptionViewItem::OnlyOne ||
|
||||||
|
vopt->viewItemPosition == QStyleOptionViewItem::Invalid;
|
||||||
|
bool isFirst = vopt->viewItemPosition == QStyleOptionViewItem::Beginning;
|
||||||
|
bool isLast = vopt->viewItemPosition == QStyleOptionViewItem::End;
|
||||||
|
|
||||||
painter->setPen(highContrastTheme == true ? vopt->palette.buttonText().color() : WINUI3Colors[colorSchemeIndex][frameColorLight]);
|
painter->setPen(highContrastTheme == true ? vopt->palette.buttonText().color() : WINUI3Colors[colorSchemeIndex][frameColorLight]);
|
||||||
if (vopt->viewItemPosition == QStyleOptionViewItem::OnlyOne || vopt->viewItemPosition == QStyleOptionViewItem::Invalid) {
|
if (isFirst) {
|
||||||
} else if (vopt->viewItemPosition == QStyleOptionViewItem::Beginning) {
|
painter->drawLine(rect.topRight() + QPointF(0.5, 0.0),
|
||||||
painter->drawLine(QPointF(option->rect.topRight()) + QPointF(0.5,0.0),
|
rect.bottomRight() + QPointF(0.5, 0.0));
|
||||||
QPointF(option->rect.bottomRight()) + QPointF(0.5,0.0));
|
} else if (isLast) {
|
||||||
} else if (vopt->viewItemPosition == QStyleOptionViewItem::End) {
|
painter->drawLine(rect.topLeft() - QPointF(0.5, 0.0),
|
||||||
painter->drawLine(QPointF(option->rect.topLeft()) - QPointF(0.5,0.0),
|
rect.bottomLeft() - QPointF(0.5, 0.0));
|
||||||
QPointF(option->rect.bottomLeft()) - QPointF(0.5,0.0));
|
|
||||||
} else {
|
} else {
|
||||||
painter->drawLine(QPointF(option->rect.topRight()) + QPointF(0.5,0.0),
|
const QLineF lines[2] = {
|
||||||
QPointF(option->rect.bottomRight()) + QPointF(0.5,0.0));
|
QLineF(rect.topRight() + QPointF(0.5, 0.0),
|
||||||
painter->drawLine(QPointF(option->rect.topLeft()) - QPointF(0.5,0.0),
|
rect.bottomRight() + QPointF(0.5, 0.0)),
|
||||||
QPointF(option->rect.bottomLeft()) - QPointF(0.5,0.0));
|
QLineF(rect.topLeft() - QPointF(0.5, 0.0),
|
||||||
|
rect.bottomLeft() - QPointF(0.5, 0.0)),
|
||||||
|
};
|
||||||
|
painter->drawLines(lines, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool isTreeView = qobject_cast<const QTreeView *>(widget);
|
const bool isTreeView = qobject_cast<const QTreeView *>(widget);
|
||||||
@ -1685,14 +1698,17 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
|
|||||||
}
|
}
|
||||||
painter->setPen(Qt::NoPen);
|
painter->setPen(Qt::NoPen);
|
||||||
|
|
||||||
if (vopt->viewItemPosition == QStyleOptionViewItem::OnlyOne || vopt->viewItemPosition == QStyleOptionViewItem::Invalid) {
|
if (onlyOne) {
|
||||||
painter->drawRoundedRect(vopt->rect.marginsRemoved(QMargins(2,2,2,2)),secondLevelRoundingRadius,secondLevelRoundingRadius);
|
painter->drawRoundedRect(rect.marginsRemoved(QMargins(2, 2, 2, 2)),
|
||||||
} else if (vopt->viewItemPosition == QStyleOptionViewItem::Beginning) {
|
secondLevelRoundingRadius, secondLevelRoundingRadius);
|
||||||
painter->drawRoundedRect(rect.marginsRemoved(QMargins(2,2,0,2)),secondLevelRoundingRadius,secondLevelRoundingRadius);
|
} else if (isFirst) {
|
||||||
} else if (vopt->viewItemPosition == QStyleOptionViewItem::End) {
|
painter->drawRoundedRect(rect.marginsRemoved(QMargins(2, 2, 0, 2)),
|
||||||
painter->drawRoundedRect(vopt->rect.marginsRemoved(QMargins(0,2,2,2)),secondLevelRoundingRadius,secondLevelRoundingRadius);
|
secondLevelRoundingRadius, secondLevelRoundingRadius);
|
||||||
|
} else if (isLast) {
|
||||||
|
painter->drawRoundedRect(rect.marginsRemoved(QMargins(0, 2, 2, 2)),
|
||||||
|
secondLevelRoundingRadius, secondLevelRoundingRadius);
|
||||||
} else {
|
} else {
|
||||||
painter->drawRect(vopt->rect.marginsRemoved(QMargins(0,2,0,2)));
|
painter->drawRect(rect.marginsRemoved(QMargins(0, 2, 0, 2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// draw the check mark
|
// draw the check mark
|
||||||
@ -1724,20 +1740,20 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
|
|||||||
QIcon::State state = vopt->state & QStyle::State_Open ? QIcon::On : QIcon::Off;
|
QIcon::State state = vopt->state & QStyle::State_Open ? QIcon::On : QIcon::Off;
|
||||||
vopt->icon.paint(painter, iconRect, vopt->decorationAlignment, mode, state);
|
vopt->icon.paint(painter, iconRect, vopt->decorationAlignment, mode, state);
|
||||||
|
|
||||||
|
if (!view || !view->isPersistentEditorOpen(vopt->index)) {
|
||||||
painter->setPen(QPen(option->palette.text().color()));
|
painter->setPen(QPen(option->palette.text().color()));
|
||||||
if (!view || !view->isPersistentEditorOpen(vopt->index))
|
|
||||||
d->viewItemDrawText(painter, vopt, textRect);
|
d->viewItemDrawText(painter, vopt, textRect);
|
||||||
if (vopt->state & State_Selected
|
}
|
||||||
&& (vopt->viewItemPosition == QStyleOptionViewItem::Beginning
|
if (vopt->state & State_Selected && (isFirst || onlyOne)) {
|
||||||
|| vopt->viewItemPosition == QStyleOptionViewItem::OnlyOne
|
|
||||||
|| vopt->viewItemPosition == QStyleOptionViewItem::Invalid)) {
|
|
||||||
if (const QListView *lv = qobject_cast<const QListView *>(widget);
|
if (const QListView *lv = qobject_cast<const QListView *>(widget);
|
||||||
lv && lv->viewMode() != QListView::IconMode) {
|
lv && lv->viewMode() != QListView::IconMode) {
|
||||||
painter->setPen(QPen(vopt->palette.accent().color()));
|
painter->setPen(QPen(vopt->palette.accent().color()));
|
||||||
painter->drawLine(option->rect.x(), option->rect.y() + 2,
|
const auto xPos = isRtl ? rect.right() - 1 : rect.left();
|
||||||
option->rect.x(),option->rect.y() + option->rect.height() - 2);
|
const QLineF lines[2] = {
|
||||||
painter->drawLine(option->rect.x() + 1, option->rect.y() + 2,
|
QLineF(xPos, rect.y() + 2, xPos, rect.y() + rect.height() - 2),
|
||||||
option->rect.x() + 1,option->rect.y() + option->rect.height() - 2);
|
QLineF(xPos + 1, rect.y() + 2, xPos + 1, rect.y() + rect.height() - 2),
|
||||||
|
};
|
||||||
|
painter->drawLines(lines, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user