From 95c63e25344d808c73089e1661c8b5878fe56aa1 Mon Sep 17 00:00:00 2001 From: Tartare Date: Wed, 20 Aug 2025 11:12:54 +0800 Subject: [PATCH] FIX: Persist custom colors in default filament color picker Saved colors now reappear when reopening the picker. jira: STUDIO-14100 Change-Id: I0348a177fcacb83779cf8c9c21151df5ccfd3e8d (cherry picked from commit 7c21048b510ea993520e74d7068d17f0a879315f) --- src/slic3r/GUI/wxExtensions.cpp | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp index b2a52bb8ff..23ed10c7d6 100644 --- a/src/slic3r/GUI/wxExtensions.cpp +++ b/src/slic3r/GUI/wxExtensions.cpp @@ -4,7 +4,6 @@ #include #include - #include #include "GUI.hpp" @@ -19,6 +18,7 @@ #include "Widgets/Label.hpp" #include "../Utils/WxFontUtils.hpp" #include "FilamentBitmapUtils.hpp" +#include "../Utils/ColorSpaceConvert.hpp" #ifndef __linux__ // msw_menuitem_bitmaps is used for MSW and OSX static std::map msw_menuitem_bitmaps; @@ -583,14 +583,38 @@ std::vector> read_color_pack(std::vector c wxColourData show_sys_picker_dialog(wxWindow *parent, const wxColourData &clr_data) { - wxColourData data; + wxColourData data = clr_data; data.SetChooseFull(true); - data.SetColour(clr_data.GetColour()); + + // Load custom colors from config (support both "r,g,b,a" and "#RRGGBB" formats) + std::vector colors = Slic3r::GUI::wxGetApp().app_config->get_custom_color_from_config(); + for (int i = 0; i < (int)colors.size(); i++) { + wxColour c; + if (colors[i].find(',') != std::string::npos) + c = string_to_wxColor(colors[i]); + else + c = wxColour(colors[i]); + if (c.IsOk()) + data.SetCustomColour(i, c); + } + wxColourDialog dialog(parent, &data); dialog.SetTitle(_L("Please choose the filament colour")); + if (dialog.ShowModal() == wxID_OK) { data = dialog.GetColourData(); + + // Save custom colors to config (use RGBA string format for consistency) + std::vector colors; + colors.resize(CUSTOM_COLOR_COUNT); + for (int i = 0; i < CUSTOM_COLOR_COUNT; i++) { + wxColour custom_clr = data.GetCustomColour(i); + if (custom_clr.IsOk()) + colors[i] = color_to_string(custom_clr); + } + Slic3r::GUI::wxGetApp().app_config->save_custom_color_to_config(colors); } + return data; }