From ff86b537e03c64178b69db91a5b715cbbd6e164f Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Mon, 8 Sep 2025 17:46:05 +0200 Subject: [PATCH] Core: Fix alpha-transparency issue in face color override. (#23532) * Core: Fix alpha-transparency issue in face color override. * Fix color picker opening wrongly with alpha reversed --- src/Gui/Selection/SoFCSelectionContext.cpp | 16 ++++++++++++---- src/Gui/TaskElementColors.cpp | 3 ++- 2 files changed, 14 insertions(+), 5 deletions(-) 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" +