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; }