QmlDesigner: Tweak context menu design

- Margins are changed for the context menu.
- There should be more space between action text and shortcuts in
  the context menu.

Task-number: QDS-8969
Change-Id: I345b3197bb702c5704a8d91d65dcb7d96f2697b4
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Ali Kianian
2023-01-31 13:29:19 +02:00
parent 5368330534
commit 4108ba874a

View File

@@ -422,14 +422,31 @@ QSize ManhattanStyle::sizeFromContents(ContentsType type, const QStyleOption *op
case CT_MenuItem: case CT_MenuItem:
if (isQmlEditorMenu(widget)) { if (isQmlEditorMenu(widget)) {
if (const auto mbi = qstyleoption_cast<const QStyleOptionMenuItem *>(option)) { if (const auto mbi = qstyleoption_cast<const QStyleOptionMenuItem *>(option)) {
const int leftMargin = pixelMetric(QStyle::PM_LayoutLeftMargin, option, widget);
const int rightMargin = pixelMetric(QStyle::PM_LayoutRightMargin, option, widget);
const int horizontalSpacing = pixelMetric(QStyle::PM_LayoutHorizontalSpacing, option, widget); const int horizontalSpacing = pixelMetric(QStyle::PM_LayoutHorizontalSpacing, option, widget);
const int iconHeight = pixelMetric(QStyle::PM_SmallIconSize, option, widget) + horizontalSpacing; const int iconHeight = pixelMetric(QStyle::PM_SmallIconSize, option, widget) + horizontalSpacing;
int width = horizontalSpacing; int width = leftMargin + rightMargin;
if (mbi->menuHasCheckableItems || mbi->maxIconWidth) if (mbi->menuHasCheckableItems || mbi->maxIconWidth)
width += iconHeight + horizontalSpacing; width += iconHeight + horizontalSpacing;
if (!mbi->text.isEmpty()) if (!mbi->text.isEmpty()) {
width += option->fontMetrics.boundingRect(mbi->text).width() + horizontalSpacing; QString itemText = mbi->text;
QString shortcutText;
int tabIndex = itemText.indexOf("\t");
if (tabIndex > -1) {
shortcutText = itemText.mid(tabIndex + 1);
itemText = itemText.left(tabIndex);
}
if (itemText.size())
width += option->fontMetrics.boundingRect(itemText).width() + horizontalSpacing;
if (shortcutText.size()) {
QSize shortcutSize = ManhattanShortcut(mbi, shortcutText).getSize();
width += shortcutSize.width() + 2 * horizontalSpacing;
}
}
if (mbi->menuItemType == QStyleOptionMenuItem::SubMenu) if (mbi->menuItemType == QStyleOptionMenuItem::SubMenu)
width += iconHeight + horizontalSpacing; width += iconHeight + horizontalSpacing;
@@ -439,7 +456,8 @@ QSize ManhattanStyle::sizeFromContents(ContentsType type, const QStyleOption *op
switch (mbi->menuItemType) { switch (mbi->menuItemType) {
case QStyleOptionMenuItem::Normal: case QStyleOptionMenuItem::Normal:
case QStyleOptionMenuItem::DefaultItem: case QStyleOptionMenuItem::DefaultItem:
newSize += QSize(0, 5); case QStyleOptionMenuItem::SubMenu:
newSize.setHeight(19);
break; break;
default: default:
newSize += QSize(0, 7); newSize += QSize(0, 7);
@@ -503,13 +521,22 @@ int ManhattanStyle::pixelMetric(PixelMetric metric, const QStyleOption *option,
case PM_DockWidgetHandleExtent: case PM_DockWidgetHandleExtent:
case PM_DockWidgetSeparatorExtent: case PM_DockWidgetSeparatorExtent:
return 1; return 1;
case PM_LayoutLeftMargin:
case PM_LayoutRightMargin:
if (isQmlEditorMenu(widget))
retval = 7;
break;
case PM_LayoutHorizontalSpacing: case PM_LayoutHorizontalSpacing:
if (isQmlEditorMenu(widget)) if (isQmlEditorMenu(widget))
retval = 5; retval = 12;
break; break;
case PM_MenuHMargin: case PM_MenuHMargin:
if (isQmlEditorMenu(widget)) if (isQmlEditorMenu(widget))
retval = 12; retval = 5;
break;
case PM_SubMenuOverlap:
if (isQmlEditorMenu(widget))
retval = 10;
break; break;
case PM_MenuPanelWidth: case PM_MenuPanelWidth:
case PM_MenuBarHMargin: case PM_MenuBarHMargin:
@@ -1164,14 +1191,19 @@ void ManhattanStyle::drawControlForQmlEditor(ControlElement element,
const bool isDisabled = !(mbi->state & State_Enabled); const bool isDisabled = !(mbi->state & State_Enabled);
const bool isCheckable = mbi->checkType != QStyleOptionMenuItem::NotCheckable; const bool isCheckable = mbi->checkType != QStyleOptionMenuItem::NotCheckable;
const bool isChecked = isCheckable ? mbi->checked : false; const bool isChecked = isCheckable ? mbi->checked : false;
int startMargin = pixelMetric(QStyle::PM_LayoutLeftMargin, option, widget);
int endMargin = pixelMetric(QStyle::PM_LayoutRightMargin, option, widget);
int forwardX = 0; int forwardX = 0;
if (option->direction == Qt::RightToLeft)
std::swap(startMargin, endMargin);
QStyleOptionMenuItem item = *mbi; QStyleOptionMenuItem item = *mbi;
if (isActive) { if (isActive) {
painter->fillRect(item.rect, creatorTheme()->color(Theme::DSinteraction)); painter->fillRect(item.rect, creatorTheme()->color(Theme::DSinteraction));
} }
forwardX += horizontalSpacing; forwardX += startMargin;
if (item.menuItemType == QStyleOptionMenuItem::Separator) { if (item.menuItemType == QStyleOptionMenuItem::Separator) {
int commonHeight = item.rect.center().y(); int commonHeight = item.rect.center().y();
@@ -1262,7 +1294,7 @@ void ManhattanStyle::drawControlForQmlEditor(ControlElement element,
: PE_IndicatorArrowLeft; : PE_IndicatorArrowLeft;
QSize elSize(iconHeight, iconHeight); QSize elSize(iconHeight, iconHeight);
int xOffset = iconHeight; int xOffset = iconHeight + endMargin;
int yOffset = (item.rect.height() - iconHeight) / 2; int yOffset = (item.rect.height() - iconHeight) / 2;
QRect dropRect(item.rect.topRight(), elSize); QRect dropRect(item.rect.topRight(), elSize);
dropRect.adjust(-xOffset, yOffset, -xOffset, yOffset); dropRect.adjust(-xOffset, yOffset, -xOffset, yOffset);
@@ -1277,7 +1309,7 @@ void ManhattanStyle::drawControlForQmlEditor(ControlElement element,
QPixmap pix = ManhattanShortcut(&item, shortcutText).getPixmap(); QPixmap pix = ManhattanShortcut(&item, shortcutText).getPixmap();
if (pix.width()) { if (pix.width()) {
int xOffset = pix.width() + iconHeight/2; int xOffset = pix.width() + (iconHeight / 2) + endMargin;
QRect shortcutRect = item.rect.translated({item.rect.width() - xOffset, 0}); QRect shortcutRect = item.rect.translated({item.rect.width() - xOffset, 0});
shortcutRect.setSize({pix.width(), item.rect.height()}); shortcutRect.setSize({pix.width(), item.rect.height()});
shortcutRect = visualRect(item.direction, shortcutRect = visualRect(item.direction,