forked from qt-creator/qt-creator
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:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user