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