diff --git a/src/Gui/Selection/SoFCSelectionContext.cpp b/src/Gui/Selection/SoFCSelectionContext.cpp index 241d2d488f..de17b97ee3 100644 --- a/src/Gui/Selection/SoFCSelectionContext.cpp +++ b/src/Gui/Selection/SoFCSelectionContext.cpp @@ -149,11 +149,19 @@ bool SoFCSelectionContextEx::setColors( return true; } -uint32_t SoFCSelectionContextEx::packColor(const Base::Color &c, bool &hasTransparency) { - float trans = std::max(trans0,c.a); - if(trans>0) +uint32_t SoFCSelectionContextEx::packColor(const Base::Color& c, bool& hasTransparency) +{ + // Convert Base::Color's alpha (opacity) to transparency for Coin3D. + float transparency = 1.0f - c.a; + + // Apply any external transparency override (e.g., from picking). + float final_transparency = std::max(trans0, transparency); + + if (final_transparency > 0.0f) { hasTransparency = true; - return SbColor(c.r,c.g,c.b).getPackedValue(trans); + } + + return SbColor(c.r, c.g, c.b).getPackedValue(final_transparency); } bool SoFCSelectionContextEx::applyColor(int idx, std::vector &packedColors, bool &hasTransparency) { diff --git a/src/Gui/TaskElementColors.cpp b/src/Gui/TaskElementColors.cpp index c11eb8d99b..7ff313927b 100644 --- a/src/Gui/TaskElementColors.cpp +++ b/src/Gui/TaskElementColors.cpp @@ -173,7 +173,7 @@ public: } auto color = v.second; QColor c; - c.setRgbF(color.r, color.g, color.b, 1.0 - color.a); + c.setRgbF(color.r, color.g, color.b, color.a); px.fill(c); auto item = new QListWidgetItem( QIcon(px), @@ -636,3 +636,4 @@ bool TaskElementColors::reject() } #include "moc_TaskElementColors.cpp" +