diff --git a/src/Mod/Sketcher/Gui/TaskSketcherConstraints.ui b/src/Mod/Sketcher/Gui/TaskSketcherConstraints.ui index 59a18a1f27..0e322aa4f9 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherConstraints.ui +++ b/src/Mod/Sketcher/Gui/TaskSketcherConstraints.ui @@ -128,6 +128,12 @@ 0 + + + 24 + 24 + + 0 diff --git a/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp b/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp index 107450f7f7..95d88cf886 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp +++ b/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp @@ -222,9 +222,9 @@ public: // limitation of not knowing about padding, border and margin boxes of stylesheets // thus being unable to provide proper sizeHint for stylesheets to render correctly if (role == Qt::DecorationRole) { - int size = listWidget()->style()->pixelMetric(QStyle::PM_ListViewIconSize); + auto size = listWidget()->iconSize(); - return QIcon(QPixmap(QSize(size, size))); + return QIcon(QPixmap(size)); } return QListWidgetItem::data(role); @@ -246,6 +246,22 @@ public: } } + bool isGeometryPreselected(Sketcher::PointPos pos) const + { + switch (pos) { + case Sketcher::PointPos::none: + return hovered == SubElementType::edge; + case Sketcher::PointPos::start: + return hovered == SubElementType::start; + case Sketcher::PointPos::end: + return hovered == SubElementType::end; + case Sketcher::PointPos::mid: + return hovered == SubElementType::mid; + default: + return false; + } + } + Sketcher::SketchObject* getSketchObject() const { return sketchView->getSketchObject(); @@ -943,9 +959,16 @@ void ElementItemDelegate::drawSubControl(SubControl element, auto drawSelectIcon = [&](Sketcher::PointPos pos) { auto icon = ElementWidgetIcons::getIcon(item->GeometryType, pos, item->State); - auto opacity = 0.4f; - if (isHovered) { + auto isOptionSelected = option.state & QStyle::State_Selected; + auto isOptionHovered = option.state & QStyle::State_MouseOver; + + // items that user is not interacting with should be fully opaque + // only if item is partially selected (so only one part of geometry) + // the rest should be dimmed out + auto opacity = isOptionHovered || isOptionSelected ? 0.4 : 1.0; + + if (item->isGeometryPreselected(pos)) { opacity = 0.8f; } diff --git a/src/Mod/Sketcher/Gui/TaskSketcherElements.ui b/src/Mod/Sketcher/Gui/TaskSketcherElements.ui index 3e394b7d6c..4ff1609321 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherElements.ui +++ b/src/Mod/Sketcher/Gui/TaskSketcherElements.ui @@ -102,6 +102,12 @@ 0 + + + 24 + 24 + + 0