From df260dd72472ff789ea02523ac1be62e4d842a77 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Tue, 15 Nov 2022 19:28:46 +0800 Subject: [PATCH] ENH:dark mode of imgui part Change-Id: I42975f9004be1a348db83f1a5790490dbc444c9d --- resources/images/mmu_segmentation_dark.svg | 6 + resources/images/notification_close_dark.svg | 14 + .../images/notification_close_hover_dark.svg | 13 + .../notification_documentation_dark.svg | 10 + .../notification_documentation_hover_dark.svg | 10 + .../images/notification_minimalize_dark.svg | 4 + .../notification_minimalize_hover_dark.svg | 4 + .../images/notification_preferences_dark.svg | 4 + .../notification_preferences_hover_dark.svg | 4 + resources/images/notification_right_dark.svg | 4 + .../images/notification_right_hover_dark.svg | 4 + resources/images/one_layer_arrow.svg | 3 - resources/images/one_layer_off_dark.svg | 8 + resources/images/one_layer_off_hover_dark.svg | 8 + resources/images/one_layer_on_dark.svg | 12 + resources/images/one_layer_on_hover_dark.svg | 12 + resources/images/plate_arrange_dark.svg | 4 + resources/images/plate_arrange_hover_dark.svg | 4 + resources/images/plate_close_dark.svg | 8 + resources/images/plate_close_hover_dark.svg | 4 + resources/images/plate_locked_dark.svg | 4 + resources/images/plate_locked_hover_dark.svg | 4 + resources/images/plate_orient_dark.svg | 10 + resources/images/plate_orient_hover_dark.svg | 10 + .../images/plate_set_bedtype_changed_dark.svg | 9 + .../plate_set_bedtype_changed_hover_dark.svg | 9 + resources/images/plate_set_bedtype_dark.svg | 9 + .../images/plate_set_bedtype_hover_dark.svg | 9 + resources/images/plate_unlocked_dark.svg | 4 + .../images/plate_unlocked_hover_dark.svg | 4 + resources/images/reset_hover.svg | 4 - resources/images/reset_normal.svg | 4 - resources/images/split_objects_dark.svg | 5 + resources/images/split_parts_dark.svg | 6 + resources/images/text_B_dark.svg | 3 + resources/images/text_B_hover.svg | 4 - resources/images/text_B_press.svg | 4 - resources/images/text_T_dark.svg | 5 + resources/images/text_T_hover.svg | 5 - resources/images/text_T_press.svg | 5 - resources/images/toolbar_add_plate_dark.svg | 14 + resources/images/toolbar_arrange_dark.svg | 7 + resources/images/toolbar_assemble_dark.svg | 6 + resources/images/toolbar_background_dark.png | Bin 0 -> 423 bytes resources/images/toolbar_cut_dark.svg | 5 + resources/images/toolbar_flatten_dark.svg | 6 + resources/images/toolbar_move_dark.svg | 7 + resources/images/toolbar_open_dark.svg | 9 + resources/images/toolbar_orient_dark.svg | 10 + resources/images/toolbar_rotate_dark.svg | 12 + resources/images/toolbar_scale_dark.svg | 12 + resources/images/toolbar_seam_dark.svg | 7 + resources/images/toolbar_support_dark.svg | 12 + resources/images/toolbar_text_dark.svg | 4 + .../toolbar_variable_layer_height_dark.svg | 7 + src/imgui/imconfig.h | 12 + src/slic3r/GUI/3DBed.cpp | 5 +- src/slic3r/GUI/GCodeViewer.cpp | 10 +- src/slic3r/GUI/GLCanvas3D.cpp | 91 +++++-- src/slic3r/GUI/GLCanvas3D.hpp | 2 + src/slic3r/GUI/GLTexture.cpp | 56 ++-- src/slic3r/GUI/GLToolbar.cpp | 3 - src/slic3r/GUI/GLToolbar.hpp | 1 + src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp | 9 +- .../GUI/Gizmos/GLGizmoMmuSegmentation.cpp | 7 +- src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp | 7 +- src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp | 8 +- src/slic3r/GUI/Gizmos/GLGizmoText.cpp | 95 +++++-- src/slic3r/GUI/Gizmos/GLGizmoText.hpp | 2 + src/slic3r/GUI/Gizmos/GLGizmosManager.cpp | 50 ++-- src/slic3r/GUI/Gizmos/GLGizmosManager.hpp | 9 +- src/slic3r/GUI/HintNotification.cpp | 28 +- src/slic3r/GUI/IMSlider.cpp | 38 +-- src/slic3r/GUI/IMSlider.hpp | 7 +- src/slic3r/GUI/ImGuiWrapper.cpp | 239 +++++++++++++----- src/slic3r/GUI/ImGuiWrapper.hpp | 2 + src/slic3r/GUI/NotificationManager.cpp | 33 ++- src/slic3r/GUI/NotificationManager.hpp | 2 + src/slic3r/GUI/PartPlate.cpp | 74 +++--- src/slic3r/GUI/PartPlate.hpp | 3 + src/slic3r/GUI/Plater.cpp | 6 +- 81 files changed, 877 insertions(+), 297 deletions(-) create mode 100644 resources/images/mmu_segmentation_dark.svg create mode 100644 resources/images/notification_close_dark.svg create mode 100644 resources/images/notification_close_hover_dark.svg create mode 100644 resources/images/notification_documentation_dark.svg create mode 100644 resources/images/notification_documentation_hover_dark.svg create mode 100644 resources/images/notification_minimalize_dark.svg create mode 100644 resources/images/notification_minimalize_hover_dark.svg create mode 100644 resources/images/notification_preferences_dark.svg create mode 100644 resources/images/notification_preferences_hover_dark.svg create mode 100644 resources/images/notification_right_dark.svg create mode 100644 resources/images/notification_right_hover_dark.svg delete mode 100644 resources/images/one_layer_arrow.svg create mode 100644 resources/images/one_layer_off_dark.svg create mode 100644 resources/images/one_layer_off_hover_dark.svg create mode 100644 resources/images/one_layer_on_dark.svg create mode 100644 resources/images/one_layer_on_hover_dark.svg create mode 100644 resources/images/plate_arrange_dark.svg create mode 100644 resources/images/plate_arrange_hover_dark.svg create mode 100644 resources/images/plate_close_dark.svg create mode 100644 resources/images/plate_close_hover_dark.svg create mode 100644 resources/images/plate_locked_dark.svg create mode 100644 resources/images/plate_locked_hover_dark.svg create mode 100644 resources/images/plate_orient_dark.svg create mode 100644 resources/images/plate_orient_hover_dark.svg create mode 100644 resources/images/plate_set_bedtype_changed_dark.svg create mode 100644 resources/images/plate_set_bedtype_changed_hover_dark.svg create mode 100644 resources/images/plate_set_bedtype_dark.svg create mode 100644 resources/images/plate_set_bedtype_hover_dark.svg create mode 100644 resources/images/plate_unlocked_dark.svg create mode 100644 resources/images/plate_unlocked_hover_dark.svg delete mode 100644 resources/images/reset_hover.svg delete mode 100644 resources/images/reset_normal.svg create mode 100644 resources/images/split_objects_dark.svg create mode 100644 resources/images/split_parts_dark.svg create mode 100644 resources/images/text_B_dark.svg delete mode 100644 resources/images/text_B_hover.svg delete mode 100644 resources/images/text_B_press.svg create mode 100644 resources/images/text_T_dark.svg delete mode 100644 resources/images/text_T_hover.svg delete mode 100644 resources/images/text_T_press.svg create mode 100644 resources/images/toolbar_add_plate_dark.svg create mode 100644 resources/images/toolbar_arrange_dark.svg create mode 100644 resources/images/toolbar_assemble_dark.svg create mode 100644 resources/images/toolbar_background_dark.png create mode 100644 resources/images/toolbar_cut_dark.svg create mode 100644 resources/images/toolbar_flatten_dark.svg create mode 100644 resources/images/toolbar_move_dark.svg create mode 100644 resources/images/toolbar_open_dark.svg create mode 100644 resources/images/toolbar_orient_dark.svg create mode 100644 resources/images/toolbar_rotate_dark.svg create mode 100644 resources/images/toolbar_scale_dark.svg create mode 100644 resources/images/toolbar_seam_dark.svg create mode 100644 resources/images/toolbar_support_dark.svg create mode 100644 resources/images/toolbar_text_dark.svg create mode 100644 resources/images/toolbar_variable_layer_height_dark.svg diff --git a/resources/images/mmu_segmentation_dark.svg b/resources/images/mmu_segmentation_dark.svg new file mode 100644 index 000000000..aba5bf386 --- /dev/null +++ b/resources/images/mmu_segmentation_dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/images/notification_close_dark.svg b/resources/images/notification_close_dark.svg new file mode 100644 index 000000000..ab0dd789e --- /dev/null +++ b/resources/images/notification_close_dark.svg @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/resources/images/notification_close_hover_dark.svg b/resources/images/notification_close_hover_dark.svg new file mode 100644 index 000000000..68c49e8a3 --- /dev/null +++ b/resources/images/notification_close_hover_dark.svg @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/resources/images/notification_documentation_dark.svg b/resources/images/notification_documentation_dark.svg new file mode 100644 index 000000000..8cfd77fa2 --- /dev/null +++ b/resources/images/notification_documentation_dark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/resources/images/notification_documentation_hover_dark.svg b/resources/images/notification_documentation_hover_dark.svg new file mode 100644 index 000000000..a51e95f5f --- /dev/null +++ b/resources/images/notification_documentation_hover_dark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/resources/images/notification_minimalize_dark.svg b/resources/images/notification_minimalize_dark.svg new file mode 100644 index 000000000..1eb4bc2ea --- /dev/null +++ b/resources/images/notification_minimalize_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/notification_minimalize_hover_dark.svg b/resources/images/notification_minimalize_hover_dark.svg new file mode 100644 index 000000000..85899b8ff --- /dev/null +++ b/resources/images/notification_minimalize_hover_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/notification_preferences_dark.svg b/resources/images/notification_preferences_dark.svg new file mode 100644 index 000000000..04df80433 --- /dev/null +++ b/resources/images/notification_preferences_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/notification_preferences_hover_dark.svg b/resources/images/notification_preferences_hover_dark.svg new file mode 100644 index 000000000..04edc9984 --- /dev/null +++ b/resources/images/notification_preferences_hover_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/notification_right_dark.svg b/resources/images/notification_right_dark.svg new file mode 100644 index 000000000..3f22075e0 --- /dev/null +++ b/resources/images/notification_right_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/notification_right_hover_dark.svg b/resources/images/notification_right_hover_dark.svg new file mode 100644 index 000000000..fc6cf708e --- /dev/null +++ b/resources/images/notification_right_hover_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/one_layer_arrow.svg b/resources/images/one_layer_arrow.svg deleted file mode 100644 index 1e8e4e53b..000000000 --- a/resources/images/one_layer_arrow.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/resources/images/one_layer_off_dark.svg b/resources/images/one_layer_off_dark.svg new file mode 100644 index 000000000..c5390625f --- /dev/null +++ b/resources/images/one_layer_off_dark.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/images/one_layer_off_hover_dark.svg b/resources/images/one_layer_off_hover_dark.svg new file mode 100644 index 000000000..d89bc3261 --- /dev/null +++ b/resources/images/one_layer_off_hover_dark.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/images/one_layer_on_dark.svg b/resources/images/one_layer_on_dark.svg new file mode 100644 index 000000000..0ba3476fc --- /dev/null +++ b/resources/images/one_layer_on_dark.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/resources/images/one_layer_on_hover_dark.svg b/resources/images/one_layer_on_hover_dark.svg new file mode 100644 index 000000000..bece417f6 --- /dev/null +++ b/resources/images/one_layer_on_hover_dark.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/resources/images/plate_arrange_dark.svg b/resources/images/plate_arrange_dark.svg new file mode 100644 index 000000000..04b66eaee --- /dev/null +++ b/resources/images/plate_arrange_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/plate_arrange_hover_dark.svg b/resources/images/plate_arrange_hover_dark.svg new file mode 100644 index 000000000..9b060b705 --- /dev/null +++ b/resources/images/plate_arrange_hover_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/plate_close_dark.svg b/resources/images/plate_close_dark.svg new file mode 100644 index 000000000..7d546a6c3 --- /dev/null +++ b/resources/images/plate_close_dark.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/images/plate_close_hover_dark.svg b/resources/images/plate_close_hover_dark.svg new file mode 100644 index 000000000..47525ae39 --- /dev/null +++ b/resources/images/plate_close_hover_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/plate_locked_dark.svg b/resources/images/plate_locked_dark.svg new file mode 100644 index 000000000..69d586fab --- /dev/null +++ b/resources/images/plate_locked_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/plate_locked_hover_dark.svg b/resources/images/plate_locked_hover_dark.svg new file mode 100644 index 000000000..1df119e75 --- /dev/null +++ b/resources/images/plate_locked_hover_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/plate_orient_dark.svg b/resources/images/plate_orient_dark.svg new file mode 100644 index 000000000..a2e1cf756 --- /dev/null +++ b/resources/images/plate_orient_dark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/resources/images/plate_orient_hover_dark.svg b/resources/images/plate_orient_hover_dark.svg new file mode 100644 index 000000000..2f141d332 --- /dev/null +++ b/resources/images/plate_orient_hover_dark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/resources/images/plate_set_bedtype_changed_dark.svg b/resources/images/plate_set_bedtype_changed_dark.svg new file mode 100644 index 000000000..0496fd615 --- /dev/null +++ b/resources/images/plate_set_bedtype_changed_dark.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/images/plate_set_bedtype_changed_hover_dark.svg b/resources/images/plate_set_bedtype_changed_hover_dark.svg new file mode 100644 index 000000000..fcea2f7c9 --- /dev/null +++ b/resources/images/plate_set_bedtype_changed_hover_dark.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/images/plate_set_bedtype_dark.svg b/resources/images/plate_set_bedtype_dark.svg new file mode 100644 index 000000000..74c19f4dd --- /dev/null +++ b/resources/images/plate_set_bedtype_dark.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/images/plate_set_bedtype_hover_dark.svg b/resources/images/plate_set_bedtype_hover_dark.svg new file mode 100644 index 000000000..f90a67e4c --- /dev/null +++ b/resources/images/plate_set_bedtype_hover_dark.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/images/plate_unlocked_dark.svg b/resources/images/plate_unlocked_dark.svg new file mode 100644 index 000000000..13c562d55 --- /dev/null +++ b/resources/images/plate_unlocked_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/plate_unlocked_hover_dark.svg b/resources/images/plate_unlocked_hover_dark.svg new file mode 100644 index 000000000..140fa1d7d --- /dev/null +++ b/resources/images/plate_unlocked_hover_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/reset_hover.svg b/resources/images/reset_hover.svg deleted file mode 100644 index e16408625..000000000 --- a/resources/images/reset_hover.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/resources/images/reset_normal.svg b/resources/images/reset_normal.svg deleted file mode 100644 index 3d5073378..000000000 --- a/resources/images/reset_normal.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/resources/images/split_objects_dark.svg b/resources/images/split_objects_dark.svg new file mode 100644 index 000000000..71acf8dff --- /dev/null +++ b/resources/images/split_objects_dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/split_parts_dark.svg b/resources/images/split_parts_dark.svg new file mode 100644 index 000000000..80ed05593 --- /dev/null +++ b/resources/images/split_parts_dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/images/text_B_dark.svg b/resources/images/text_B_dark.svg new file mode 100644 index 000000000..5fa0f1bbd --- /dev/null +++ b/resources/images/text_B_dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/images/text_B_hover.svg b/resources/images/text_B_hover.svg deleted file mode 100644 index 2242afa38..000000000 --- a/resources/images/text_B_hover.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/resources/images/text_B_press.svg b/resources/images/text_B_press.svg deleted file mode 100644 index 5333b0ef6..000000000 --- a/resources/images/text_B_press.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/resources/images/text_T_dark.svg b/resources/images/text_T_dark.svg new file mode 100644 index 000000000..af85448da --- /dev/null +++ b/resources/images/text_T_dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/text_T_hover.svg b/resources/images/text_T_hover.svg deleted file mode 100644 index 2a7880cee..000000000 --- a/resources/images/text_T_hover.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/resources/images/text_T_press.svg b/resources/images/text_T_press.svg deleted file mode 100644 index 9d1da57e2..000000000 --- a/resources/images/text_T_press.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/resources/images/toolbar_add_plate_dark.svg b/resources/images/toolbar_add_plate_dark.svg new file mode 100644 index 000000000..70b91e854 --- /dev/null +++ b/resources/images/toolbar_add_plate_dark.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/resources/images/toolbar_arrange_dark.svg b/resources/images/toolbar_arrange_dark.svg new file mode 100644 index 000000000..9654b5d9a --- /dev/null +++ b/resources/images/toolbar_arrange_dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/images/toolbar_assemble_dark.svg b/resources/images/toolbar_assemble_dark.svg new file mode 100644 index 000000000..f39b428d2 --- /dev/null +++ b/resources/images/toolbar_assemble_dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/images/toolbar_background_dark.png b/resources/images/toolbar_background_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..43d4a65f1a14d5467a27d37b438d4c204b320bae GIT binary patch literal 423 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBIU7$G$B+ufx0ehV859H<6iu(|f8$^3$Y-=6 u{atj*T-R9)g-k~{1=Jnpj55#zq1K|9X~#q6Y#m^@GI+ZBxvX + + + + diff --git a/resources/images/toolbar_flatten_dark.svg b/resources/images/toolbar_flatten_dark.svg new file mode 100644 index 000000000..136d2a29d --- /dev/null +++ b/resources/images/toolbar_flatten_dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/images/toolbar_move_dark.svg b/resources/images/toolbar_move_dark.svg new file mode 100644 index 000000000..e19211eed --- /dev/null +++ b/resources/images/toolbar_move_dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/images/toolbar_open_dark.svg b/resources/images/toolbar_open_dark.svg new file mode 100644 index 000000000..116f4b4ff --- /dev/null +++ b/resources/images/toolbar_open_dark.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/images/toolbar_orient_dark.svg b/resources/images/toolbar_orient_dark.svg new file mode 100644 index 000000000..96e642f15 --- /dev/null +++ b/resources/images/toolbar_orient_dark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/resources/images/toolbar_rotate_dark.svg b/resources/images/toolbar_rotate_dark.svg new file mode 100644 index 000000000..952e4cb62 --- /dev/null +++ b/resources/images/toolbar_rotate_dark.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/resources/images/toolbar_scale_dark.svg b/resources/images/toolbar_scale_dark.svg new file mode 100644 index 000000000..16bbd23f2 --- /dev/null +++ b/resources/images/toolbar_scale_dark.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/resources/images/toolbar_seam_dark.svg b/resources/images/toolbar_seam_dark.svg new file mode 100644 index 000000000..4adf5a33e --- /dev/null +++ b/resources/images/toolbar_seam_dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/images/toolbar_support_dark.svg b/resources/images/toolbar_support_dark.svg new file mode 100644 index 000000000..a381f7716 --- /dev/null +++ b/resources/images/toolbar_support_dark.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/resources/images/toolbar_text_dark.svg b/resources/images/toolbar_text_dark.svg new file mode 100644 index 000000000..02fc94be9 --- /dev/null +++ b/resources/images/toolbar_text_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/toolbar_variable_layer_height_dark.svg b/resources/images/toolbar_variable_layer_height_dark.svg new file mode 100644 index 000000000..8cc6a3654 --- /dev/null +++ b/resources/images/toolbar_variable_layer_height_dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/imgui/imconfig.h b/src/imgui/imconfig.h index 56e90af95..1ee33d098 100644 --- a/src/imgui/imconfig.h +++ b/src/imgui/imconfig.h @@ -139,16 +139,21 @@ namespace ImGui const wchar_t EjectHoverButton = 0x13; const wchar_t CancelButton = 0x14; const wchar_t CancelHoverButton = 0x15; + const wchar_t CloseNotifDarkButton = 0x16; + const wchar_t CloseNotifHoverDarkButton = 0x17; // const wchar_t VarLayerHeightMarker = 0x16; const wchar_t RightArrowButton = 0x18; const wchar_t RightArrowHoverButton = 0x19; const wchar_t PreferencesButton = 0x1A; const wchar_t PreferencesHoverButton = 0x1B; + const wchar_t DocumentationDarkButton = 0x1C; + const wchar_t DocumentationHoverDarkButton = 0x1D; // const wchar_t SinkingObjectMarker = 0x1C; // const wchar_t CustomSupportsMarker = 0x1D; // const wchar_t CustomSeamMarker = 0x1E; // const wchar_t MmuSegmentationMarker = 0x1F; + // Do not forget use following letters only in wstring //BBS use 08xx to avoid unicode character which may be used const wchar_t DocumentationButton = 0x0800; @@ -167,6 +172,13 @@ namespace ImGui const wchar_t SphereButtonIcon = 0x0816; const wchar_t GapFillIcon = 0x0817; + const wchar_t MinimalizeDarkButton = 0x081C; + const wchar_t MinimalizeHoverDarkButton = 0x081D; + const wchar_t RightArrowDarkButton = 0x081E; + const wchar_t RightArrowHoverDarkButton = 0x081F; + const wchar_t PreferencesDarkButton = 0x0820; + const wchar_t PreferencesHoverDarkButton = 0x0821; + // void MyFunction(const char* name, const MyMatrix44& v); } diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp index 31f34e263..1e30be5f2 100644 --- a/src/slic3r/GUI/3DBed.cpp +++ b/src/slic3r/GUI/3DBed.cpp @@ -22,6 +22,7 @@ static const float GROUND_Z = -0.04f; static const std::array DEFAULT_MODEL_COLOR = { 0.3255f, 0.337f, 0.337f, 1.0f }; +static const std::array DEFAULT_MODEL_COLOR_DARK = { 0.255f, 0.255f, 0.283f, 1.0f }; static const std::array PICKING_MODEL_COLOR = { 0.0f, 0.0f, 0.0f, 1.0f }; namespace Slic3r { @@ -334,7 +335,7 @@ void Bed3D::render_internal(GLCanvas3D& canvas, bool bottom, float scale_factor, glsafe(::glEnable(GL_DEPTH_TEST)); - m_model.set_color(-1, DEFAULT_MODEL_COLOR); + m_model.set_color(-1, wxGetApp().app_config->get("dark_color_mode") == "1" ? DEFAULT_MODEL_COLOR_DARK : DEFAULT_MODEL_COLOR); switch (m_type) { @@ -651,7 +652,7 @@ void Bed3D::render_model() const GLModel* model = const_cast(&m_model); if (model->get_filename() != m_model_filename && model->init_from_file(m_model_filename)) { - model->set_color(-1, DEFAULT_MODEL_COLOR); + model->set_color(-1, wxGetApp().app_config->get("dark_color_mode") == "1" ? DEFAULT_MODEL_COLOR_DARK : DEFAULT_MODEL_COLOR); update_model_offset(); } diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 2b7d5c74c..8b2561529 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -330,9 +330,8 @@ void GCodeViewer::SequentialView::Marker::render(int canvas_width, int canvas_he static float last_window_width = 0.0f; static size_t last_text_length = 0; - static const ImU32 text_name_clr = IM_COL32(38, 46, 48, 255); - static const ImU32 text_value_clr = IM_COL32(144, 144, 144, 255); - static const ImU32 window_bg_clr = IM_COL32(255, 255, 255, 255); + const ImU32 text_name_clr = wxGetApp().app_config->get("dark_color_mode") == "1" ? IM_COL32(255, 255, 255, 0.88 * 255) : IM_COL32(38, 46, 48, 255); + const ImU32 text_value_clr = wxGetApp().app_config->get("dark_color_mode") == "1" ? IM_COL32(255, 255, 255, 0.4 * 255) : IM_COL32(144, 144, 144, 255); auto it = std::find_if(moves.begin(), moves.end(), [&curr_line_id](auto move) { return move.gcode_id == curr_line_id; @@ -347,7 +346,6 @@ void GCodeViewer::SequentialView::Marker::render(int canvas_width, int canvas_he imgui.push_toolbar_style(m_scale); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0, 4.0 * m_scale)); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(20.0 * m_scale, 6.0 * m_scale)); - ImGui::PushStyleColor(ImGuiCol_WindowBg, window_bg_clr); ImGui::PushStyleColor(ImGuiCol_ButtonHovered, text_name_clr); ImGui::PushStyleColor(ImGuiCol_Text, text_value_clr); imgui.begin(std::string("ExtruderPosition"), ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar); @@ -465,9 +463,9 @@ void GCodeViewer::SequentialView::Marker::render(int canvas_width, int canvas_he } imgui.end(); - imgui.pop_toolbar_style(); ImGui::PopStyleVar(2); - ImGui::PopStyleColor(3); + ImGui::PopStyleColor(2); + imgui.pop_toolbar_style(); } void GCodeViewer::SequentialView::GCodeWindow::load_gcode(const std::string& filename, std::vector &&lines_ends) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 76420081b..5cfd85d22 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -78,7 +78,9 @@ static const float SLIDER_RIGHT_MARGIN = 105.0f; static const float SLIDER_BOTTOM_MARGIN = 90.0f; float GLCanvas3D::DEFAULT_BG_LIGHT_COLOR[3] = { 0.906f, 0.906f, 0.906f }; +float GLCanvas3D::DEFAULT_BG_LIGHT_COLOR_DARK[3] = { 0.329f, 0.329f, 0.353f }; float GLCanvas3D::ERROR_BG_LIGHT_COLOR[3] = { 0.753f, 0.192f, 0.039f }; +float GLCanvas3D::ERROR_BG_LIGHT_COLOR_DARK[3] = { 0.753f, 0.192f, 0.039f }; void GLCanvas3D::update_render_colors() { @@ -241,8 +243,10 @@ void GLCanvas3D::LayersEditing::render_variable_layer_height_dialog(const GLCanv if (imgui.button(_L("Adaptive"))) wxPostEvent((wxEvtHandler*)canvas.get_wxglcanvas(), Event(EVT_GLCANVAS_ADAPTIVE_LAYER_HEIGHT_PROFILE, m_adaptive_quality)); ImGui::SameLine(); - float text_align = ImGui::GetCursorPosX(); + static float text_align = ImGui::GetCursorPosX(); ImGui::AlignTextToFramePadding(); + text_align = std::max(text_align, ImGui::GetCursorPosX()); + ImGui::SetCursorPosX(text_align); imgui.text(_L("Quality / Speed")); if (ImGui::IsItemHovered()) { //ImGui::BeginTooltip(); @@ -250,22 +254,28 @@ void GLCanvas3D::LayersEditing::render_variable_layer_height_dialog(const GLCanv //ImGui::EndTooltip(); } ImGui::SameLine(); - float slider_align = ImGui::GetCursorPosX(); + static float slider_align = ImGui::GetCursorPosX(); ImGui::PushItemWidth(sliders_width); m_adaptive_quality = std::clamp(m_adaptive_quality, 0.0f, 1.f); + slider_align = std::max(slider_align, ImGui::GetCursorPosX()); + ImGui::SetCursorPosX(slider_align); imgui.bbl_slider_float_style("##adaptive_slider", &m_adaptive_quality, 0.0f, 1.f, "%.2f"); ImGui::SameLine(); - float input_align = ImGui::GetCursorPosX(); + static float input_align = ImGui::GetCursorPosX(); ImGui::PushItemWidth(input_box_width); + input_align = std::max(input_align, ImGui::GetCursorPosX()); + ImGui::SetCursorPosX(input_align); ImGui::BBLDragFloat("##adaptive_input", &m_adaptive_quality, 0.05f, 0.0f, 0.0f, "%.2f"); if (imgui.button(_L("Smooth"))) wxPostEvent((wxEvtHandler*)canvas.get_wxglcanvas(), HeightProfileSmoothEvent(EVT_GLCANVAS_SMOOTH_LAYER_HEIGHT_PROFILE, m_smooth_params)); ImGui::SameLine(); + text_align = std::max(text_align, ImGui::GetCursorPosX()); ImGui::SetCursorPosX(text_align); ImGui::AlignTextToFramePadding(); imgui.text(_L("Radius")); ImGui::SameLine(); + slider_align = std::max(slider_align, ImGui::GetCursorPosX()); ImGui::SetCursorPosX(slider_align); ImGui::PushItemWidth(sliders_width); int radius = (int)m_smooth_params.radius; @@ -282,6 +292,7 @@ void GLCanvas3D::LayersEditing::render_variable_layer_height_dialog(const GLCanv ImGui::PopStyleColor(4); ImGui::PopStyleVar(); ImGui::SameLine(); + input_align = std::max(input_align, ImGui::GetCursorPosX()); ImGui::SetCursorPosX(input_align); ImGui::PushItemWidth(input_box_width); ImGui::PushStyleColor(ImGuiCol_BorderActive, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); @@ -5658,8 +5669,10 @@ bool GLCanvas3D::_init_main_toolbar() if (!m_main_toolbar.is_enabled()) return true; + bool dark_mode = wxGetApp().app_config->get("dark_color_mode") == "1"; + BackgroundTexture::Metadata background_data; - background_data.filename = "toolbar_background.png"; + background_data.filename = dark_mode ? "toolbar_background_dark.png" : "toolbar_background.png"; background_data.left = 16; background_data.top = 16; background_data.right = 16; @@ -5696,10 +5709,12 @@ bool GLCanvas3D::_init_main_toolbar() m_main_toolbar.set_separator_size(5); m_main_toolbar.set_gap_size(4); + m_main_toolbar.del_all_item(); + GLToolbarItem::Data item; item.name = "add"; - item.icon_filename = "toolbar_open.svg"; + item.icon_filename = dark_mode ? "toolbar_open_dark.svg" : "toolbar_open.svg"; item.tooltip = _utf8(L("Add")) + " [" + GUI::shortkey_ctrl_prefix() + "I]"; item.sprite_id = 0; item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_ADD)); }; @@ -5708,7 +5723,7 @@ bool GLCanvas3D::_init_main_toolbar() return false; item.name = "addplate"; - item.icon_filename = "toolbar_add_plate.svg"; + item.icon_filename = dark_mode ? "toolbar_add_plate_dark.svg" : "toolbar_add_plate.svg"; item.tooltip = _utf8(L("Add plate")); item.sprite_id++; item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_ADD_PLATE)); }; @@ -5717,7 +5732,7 @@ bool GLCanvas3D::_init_main_toolbar() return false; item.name = "orient"; - item.icon_filename = "toolbar_orient.svg"; + item.icon_filename = dark_mode ? "toolbar_orient_dark.svg" : "toolbar_orient.svg"; item.tooltip = _utf8(L("Auto orient")); item.sprite_id++; item.left.render_callback = nullptr; @@ -5737,7 +5752,7 @@ bool GLCanvas3D::_init_main_toolbar() return false; item.name = "arrange"; - item.icon_filename = "toolbar_arrange.svg"; + item.icon_filename = dark_mode ? "toolbar_arrange_dark.svg" : "toolbar_arrange.svg"; item.tooltip = _utf8(L("Arrange all objects")) + " [A]\n" + _utf8(L("Arrange objects on selected plates")) + " [Shift+A]"; item.sprite_id++; item.left.action_callback = []() {}; @@ -5761,7 +5776,7 @@ bool GLCanvas3D::_init_main_toolbar() return false; item.name = "splitobjects"; - item.icon_filename = "split_objects.svg"; + item.icon_filename = dark_mode ? "split_objects_dark.svg" : "split_objects.svg"; item.tooltip = _utf8(L("Split to objects")); item.sprite_id++; item.left.render_callback = nullptr; @@ -5772,7 +5787,7 @@ bool GLCanvas3D::_init_main_toolbar() return false; item.name = "splitvolumes"; - item.icon_filename = "split_parts.svg"; + item.icon_filename = dark_mode ? "split_parts_dark.svg" : "split_parts.svg"; item.tooltip = _utf8(L("Split to parts")); item.sprite_id++; item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_SPLIT_VOLUMES)); }; @@ -5782,7 +5797,7 @@ bool GLCanvas3D::_init_main_toolbar() return false; item.name = "layersediting"; - item.icon_filename = "toolbar_variable_layer_height.svg"; + item.icon_filename = dark_mode ? "toolbar_variable_layer_height_dark.svg" : "toolbar_variable_layer_height.svg"; item.tooltip = _utf8(L("Variable layer height")); item.sprite_id++; item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_LAYERSEDITING)); }; @@ -5839,8 +5854,10 @@ bool GLCanvas3D::_init_assemble_view_toolbar() if (!m_assemble_view_toolbar.is_enabled()) return true; + bool dark_mode = wxGetApp().app_config->get("dark_color_mode") == "1"; + BackgroundTexture::Metadata background_data; - background_data.filename = "toolbar_background.png"; + background_data.filename = dark_mode ? "toolbar_background_dark.png" : "toolbar_background.png"; background_data.left = 16; background_data.top = 16; background_data.right = 16; @@ -5861,6 +5878,8 @@ bool GLCanvas3D::_init_assemble_view_toolbar() m_assemble_view_toolbar.set_separator_size(10); m_assemble_view_toolbar.set_gap_size(4); + m_assemble_view_toolbar.del_all_item(); + GLToolbarItem::Data item; item.name = "assembly_view"; item.icon_filename = "toolbar_assemble.svg"; @@ -5894,9 +5913,10 @@ bool GLCanvas3D::_init_separator_toolbar() if (!m_separator_toolbar.is_enabled()) return true; + bool dark_mode = wxGetApp().app_config->get("dark_color_mode") == "1"; BackgroundTexture::Metadata background_data; - background_data.filename = "toolbar_background.png"; + background_data.filename = dark_mode ? "toolbar_background_dark.png" : "toolbar_background.png"; background_data.left = 0; background_data.top = 0; background_data.right = 0; @@ -5915,6 +5935,8 @@ bool GLCanvas3D::_init_separator_toolbar() m_separator_toolbar.set_vertical_orientation(GLToolbar::Layout::VO_Top); m_separator_toolbar.set_border(5.0f); + m_separator_toolbar.del_all_item(); + GLToolbarItem::Data sperate_item; sperate_item.name = "start_seperator"; sperate_item.icon_filename = "seperator.svg"; @@ -6246,18 +6268,21 @@ void GLCanvas3D::_render_background() const ::glBegin(GL_QUADS); + float* background_color = wxGetApp().app_config->get("dark_color_mode") == "1" ? DEFAULT_BG_LIGHT_COLOR_DARK : DEFAULT_BG_LIGHT_COLOR; + float* error_background_color = wxGetApp().app_config->get("dark_color_mode") == "1" ? ERROR_BG_LIGHT_COLOR_DARK : ERROR_BG_LIGHT_COLOR; + if (use_error_color) - ::glColor3fv(ERROR_BG_LIGHT_COLOR); + ::glColor3fv(error_background_color); else - ::glColor3fv(DEFAULT_BG_LIGHT_COLOR); + ::glColor3fv(background_color); ::glVertex2f(-1.0f, -1.0f); ::glVertex2f(1.0f, -1.0f); if (use_error_color) - ::glColor3fv(ERROR_BG_LIGHT_COLOR); + ::glColor3fv(error_background_color); else - ::glColor3fv(DEFAULT_BG_LIGHT_COLOR); + ::glColor3fv(background_color); ::glVertex2f(1.0f, 1.0f); ::glVertex2f(-1.0f, 1.0f); @@ -6668,13 +6693,35 @@ void GLCanvas3D::_render_overlays() m_gizmos.set_overlay_icon_size(gizmo_size); #endif // ENABLE_RETINA_GL - _render_separator_toolbar_right(); - _render_separator_toolbar_left(); - _render_main_toolbar(); + static bool last_dark_mode_tatus = wxGetApp().app_config->get("dark_color_mode") == "1"; + bool dark_mode_status = wxGetApp().app_config->get("dark_color_mode") == "1"; + if (dark_mode_status != last_dark_mode_tatus) { + last_dark_mode_tatus = dark_mode_status; + // reset svg + _init_toolbars(); + m_gizmos.init(); + // re-generate icon texture + m_separator_toolbar.set_icon_dirty(); + _render_separator_toolbar_right(); + m_separator_toolbar.set_icon_dirty(); + _render_separator_toolbar_left(); + m_main_toolbar.set_icon_dirty(); + _render_main_toolbar(); + wxGetApp().plater()->get_collapse_toolbar().set_icon_dirty(); + _render_collapse_toolbar(); + m_assemble_view_toolbar.set_icon_dirty(); + _render_assemble_view_toolbar(); + m_gizmos.set_icon_dirty(); + } + else { + _render_separator_toolbar_right(); + _render_separator_toolbar_left(); + _render_main_toolbar(); + _render_collapse_toolbar(); + _render_assemble_view_toolbar(); + } //BBS: GUI refactor: GLToolbar _render_imgui_select_plate_toolbar(); - _render_collapse_toolbar(); - _render_assemble_view_toolbar(); _render_return_toolbar(); // BBS //_render_view_toolbar(); diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index b442c4af8..79ccaa36c 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -200,7 +200,9 @@ class GLCanvas3D static float DEFAULT_BG_LIGHT_COLOR[3]; + static float DEFAULT_BG_LIGHT_COLOR_DARK[3]; static float ERROR_BG_LIGHT_COLOR[3]; + static float ERROR_BG_LIGHT_COLOR_DARK[3]; static void update_render_colors(); static void load_render_colors(); diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp index e45795e36..d02a4c803 100644 --- a/src/slic3r/GUI/GLTexture.cpp +++ b/src/slic3r/GUI/GLTexture.cpp @@ -26,7 +26,7 @@ #include "nanosvg/nanosvgrast.h" #include "libslic3r/Utils.hpp" - +#include "GUI_App.hpp" namespace Slic3r { namespace GUI { @@ -244,6 +244,8 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vectorget("dark_color_mode") == "1"; + // every tile needs to have a 1px border around it to avoid artifacts when linear sampling on its edges unsigned int sprite_size_px_ex = sprite_size_px + 1; @@ -262,14 +264,23 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vector data(n_pixels * 4, 0); std::vector sprite_data(sprite_bytes, 0); - std::vector sprite_white_only_data(sprite_bytes, 0); - std::vector sprite_gray_only_data(sprite_bytes, 0); + std::vector sprite_white_only_data(sprite_bytes, 0); // normal + std::vector sprite_gray_only_data(sprite_bytes, 0); // disable std::vector output_data(sprite_bytes, 0); //BBS - std::vector pressed_data(sprite_bytes, 0); + std::vector pressed_data(sprite_bytes, 0); // (gizmo) pressed std::vector disable_data(sprite_bytes, 0); - std::vector hover_data(sprite_bytes, 0); + std::vector hover_data(sprite_bytes, 0); // hover + + const unsigned char pressed_color[3] = {255, 255, 255}; + const unsigned char hover_color[3] = {255, 255, 255}; + const unsigned char normal_color[3] = {43, 52, 54}; + const unsigned char disable_color[3] = {200, 200, 200}; + const unsigned char pressed_color_dark[3] = {60, 60, 65}; + const unsigned char hover_color_dark[3] = {60, 60, 65}; + const unsigned char normal_color_dark[3] = {182, 182, 182}; + const unsigned char disable_color_dark[3] = {76, 76, 85}; NSVGrasterizer* rast = nsvgCreateRasterizer(); if (rast == nullptr) { @@ -299,12 +310,13 @@ bool GLTexture::load_from_svg_files_as_sprites_array(const std::vectortext(m_desc.at("tool_type")); + bool dark_mode = wxGetApp().app_config->get("dark_color_mode") == "1"; std::array tool_icons = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon, ImGui::FillButtonIcon, ImGui::GapFillIcon }; std::array tool_tips = { _L("Circle"), _L("Sphere"), _L("Fill"), _L("Gap Fill") }; for (int i = 0; i < tool_icons.size(); i++) { @@ -256,9 +257,9 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); if (m_current_tool == tool_icons[i]) { - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); // r, g, b, a - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_Button, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); // r, g, b, a + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); @@ -284,7 +285,7 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l } } - m_imgui->checkbox(m_desc["on_overhangs_only"], m_paint_on_overhangs_only); + m_imgui->bbl_checkbox(m_desc["on_overhangs_only"], m_paint_on_overhangs_only); if (ImGui::IsItemHovered()) m_imgui->tooltip(format_wxstr(_L("Allows painting only on facets selected by: \"%1%\""), m_desc["highlight_by_angle"]), max_tooltip_width); ImGui::Separator(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp index 72cf456ba..46838c223 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp @@ -464,6 +464,7 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott m_imgui->text(m_desc.at("tool_type")); + bool dark_mode = wxGetApp().app_config->get("dark_color_mode") == "1"; std::array tool_icons = { ImGui::CircleButtonIcon,ImGui::SphereButtonIcon, ImGui::TriangleButtonIcon, ImGui::HeightRangeIcon, ImGui::FillButtonIcon, ImGui::GapFillIcon }; std::array tool_tips = { _L("Circle"), _L("Sphere"), _L("Triangle"), _L("Height Range"), _L("Fill"), _L("Gap Fill") }; for (int i = 0; i < tool_icons.size(); i++) { @@ -473,9 +474,9 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.5f)); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); if (m_current_tool == tool_icons[i]) { - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); // r, g, b, a - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_Button, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); // r, g, b, a + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp index c62ca77d6..4c28f08a2 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp @@ -207,6 +207,7 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) ImGui::AlignTextToFramePadding(); m_imgui->text(m_desc.at("cursor_type")); + bool dark_mode = wxGetApp().app_config->get("dark_color_mode") == "1"; std::array tool_icons = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon}; std::array tool_tips = { _L("Circle"), _L("Sphere")}; for (int i = 0; i < tool_icons.size(); i++) { @@ -216,9 +217,9 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.3f)); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); if (m_current_tool == tool_icons[i]) { - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); // r, g, b, a - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_Button, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); // r, g, b, a + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp index 83a832ca8..3ef8ccd3e 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp @@ -236,7 +236,7 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi ImGuiWindowFlags_NoCollapse; m_imgui->begin(on_get_name(), flag); - m_imgui->text_colored(ImVec4(0.15f, 0.18f, 0.19f, 1.00f), tr_mesh_name + ":"); + m_imgui->text(tr_mesh_name + ":"); // BBS: somehow the calculated utf8 width is too narrow, have to add 35 here ImGui::SameLine(text_left_width + space_size); std::string name = m_volume->name; @@ -244,7 +244,7 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi name = name.substr(0, m_gui_cfg->max_char_in_name - 3) + "..."; m_imgui->text_colored(ImVec4(0.42f, 0.42f, 0.42f, 1.00f), name); - m_imgui->text_colored(ImVec4(0.15f, 0.18f, 0.19f, 1.00f), tr_triangles + ":"); + m_imgui->text(tr_triangles + ":"); ImGui::SameLine(text_left_width + space_size); size_t orig_triangle_count = m_volume->mesh().its.indices.size(); @@ -361,22 +361,26 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.15f, 0.18f, 0.19f, 1.00f)); m_imgui->disabled_begin(is_worker_running || ! is_result_ready); + m_imgui->push_confirm_button_style(); if (m_imgui->bbl_button(_L("Apply"))) { apply_simplify(); } else if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled) && is_worker_running) { ImGui::SetTooltip("%s", _u8L("Can't apply when proccess preview.").c_str()); } + m_imgui->pop_confirm_button_style(); m_imgui->disabled_end(); // state !settings ImGui::SameLine(); m_imgui->disabled_begin(is_cancelling); + m_imgui->push_cancel_button_style(); if (m_imgui->bbl_button(_L("Cancel"))) { close(); } else if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled) && is_cancelling) ImGui::SetTooltip("%s", _u8L("Operation already cancelling. Please wait few seconds.").c_str()); + m_imgui->pop_cancel_button_style(); m_imgui->disabled_end(); // state cancelling ImGui::PopStyleVar(3); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp index 018fff3a5..044101dbf 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp @@ -68,17 +68,65 @@ void GLGizmoText::on_render_for_picking() // TODO: } -void GLGizmoText::push_combo_style(const float scale) -{ - ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0f * scale); - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f * scale); - ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BG); - ImGui::PushStyleColor(ImGuiCol_BorderActive, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_HeaderHovered, ImVec4(0.00f, 0.68f, 0.26f, 0.0f)); - ImGui::PushStyleColor(ImGuiCol_HeaderActive, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); - ImGui::PushStyleColor(ImGuiCol_Header, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); - ImGui::PushStyleColor(ImGuiCol_ScrollbarBg, ImGuiWrapper::COL_WINDOW_BG); - ImGui::PushStyleColor(ImGuiCol_Button, { 1.00f, 1.00f, 1.00f, 0.0f }); +void GLGizmoText::push_button_style(bool pressed) { + if (wxGetApp().app_config->get("dark_color_mode") == "1") { + if (pressed) { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(43 / 255.f, 64 / 255.f, 54 / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(43 / 255.f, 64 / 255.f, 54 / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(43 / 255.f, 64 / 255.f, 54 / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.f, 174 / 255.f, 66 / 255.f, 1.f)); + } + else { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(45.f / 255.f, 45.f / 255.f, 49.f / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(84 / 255.f, 84 / 255.f, 90 / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(84 / 255.f, 84 / 255.f, 90 / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(45.f / 255.f, 45.f / 255.f, 49.f / 255.f, 1.f)); + } + } + else { + if (pressed) { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(219 / 255.f, 253 / 255.f, 231 / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(219 / 255.f, 253 / 255.f, 231 / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(219 / 255.f, 253 / 255.f, 231 / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.f, 174 / 255.f, 66 / 255.f, 1.f)); + } + else { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(1.f, 1.f, 1.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(238 / 255.f, 238 / 255.f, 238 / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(238 / 255.f, 238 / 255.f, 238 / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(1.f, 1.f, 1.f, 1.f)); + } + + } +} + +void GLGizmoText::pop_button_style() { + ImGui::PopStyleColor(4); +} + +void GLGizmoText::push_combo_style(const float scale) { + if (wxGetApp().app_config->get("dark_color_mode") == "1") { + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f * scale); + ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BG_DARK); + ImGui::PushStyleColor(ImGuiCol_BorderActive, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_HeaderHovered, ImVec4(0.00f, 0.68f, 0.26f, 0.0f)); + ImGui::PushStyleColor(ImGuiCol_HeaderActive, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_Header, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_ScrollbarBg, ImGuiWrapper::COL_WINDOW_BG_DARK); + ImGui::PushStyleColor(ImGuiCol_Button, { 1.00f, 1.00f, 1.00f, 0.0f }); + } + else { + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f * scale); + ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BG); + ImGui::PushStyleColor(ImGuiCol_BorderActive, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_HeaderHovered, ImVec4(0.00f, 0.68f, 0.26f, 0.0f)); + ImGui::PushStyleColor(ImGuiCol_HeaderActive, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_Header, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_ScrollbarBg, ImGuiWrapper::COL_WINDOW_BG); + ImGui::PushStyleColor(ImGuiCol_Button, { 1.00f, 1.00f, 1.00f, 0.0f }); + } } void GLGizmoText::pop_combo_style() @@ -116,12 +164,9 @@ void GLGizmoText::on_render_input_window(float x, float y, float bottom_limit) float input_size = input_text_size - button_size * 2 - ImGui::GetStyle().ItemSpacing.x * 4; ImTextureID normal_B = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TEXT_B); - ImTextureID press_B_hover = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TEXT_B_HOVER); - ImTextureID press_B_press = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TEXT_B_PRESS); - ImTextureID normal_T = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TEXT_T); - ImTextureID press_T_hover = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TEXT_T_HOVER); - ImTextureID press_T_press = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TEXT_T_PRESS); + ImTextureID normal_B_dark = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TEXT_B_DARK); + ImTextureID normal_T_dark = m_parent.get_gizmos_manager().get_icon_texture_id(GLGizmosManager::MENU_ICON_NAME::IC_TEXT_T_DARK); // adjust window position to avoid overlap the view toolbar if (last_h != win_h || last_y != y) { @@ -174,12 +219,20 @@ void GLGizmoText::on_render_input_window(float x, float y, float bottom_limit) if (m_font_size < 3.0f)m_font_size = 3.0f; ImGui::SameLine(); - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {0.0,0.0}); - ImGui::BBLImageButton(normal_B,press_B_hover,press_B_press,{button_size,button_size},m_bold); + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f * currt_scale); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {1.0f * currt_scale, 1.0f * currt_scale }); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 2.0f * currt_scale); + push_button_style(m_bold); + bool dark_mode = wxGetApp().app_config->get("dark_color_mode") == "1"; + if (ImGui::ImageButton(dark_mode ? normal_B_dark : normal_B, { button_size - 2 * ImGui::GetStyle().FramePadding.x, button_size - 2 * ImGui::GetStyle().FramePadding.y })) + m_bold = !m_bold; + pop_button_style(); ImGui::SameLine(); - ImGui::BBLImageButton(normal_T,press_T_hover,press_T_press,{button_size,button_size},m_italic); - ImGui::PopStyleVar(2); + push_button_style(m_italic); + if (ImGui::ImageButton(dark_mode ? normal_T_dark : normal_T, { button_size - 2 * ImGui::GetStyle().FramePadding.x, button_size - 2 * ImGui::GetStyle().FramePadding.y })) + m_italic = !m_italic; + pop_button_style(); + ImGui::PopStyleVar(3); ImGui::AlignTextToFramePadding(); m_imgui->text(_L("Thickness")); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoText.hpp b/src/slic3r/GUI/Gizmos/GLGizmoText.hpp index 257571743..49ee350f5 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoText.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoText.hpp @@ -34,6 +34,8 @@ protected: virtual void on_render_for_picking() override; void push_combo_style(const float scale); void pop_combo_style(); + void push_button_style(bool pressed); + void pop_button_style(); virtual void on_set_state() override; virtual CommonGizmosDataID on_get_requirements() const override; virtual void on_render_input_window(float x, float y, float bottom_limit); diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index df59dff67..a07423baa 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -125,7 +125,8 @@ bool GLGizmosManager::init() bool result = init_icon_textures(); if (!result) return result; - m_background_texture.metadata.filename = "toolbar_background.png"; + bool dark_mode = wxGetApp().app_config->get("dark_color_mode") == "1"; + m_background_texture.metadata.filename = dark_mode ? "toolbar_background_dark.png" : "toolbar_background.png"; m_background_texture.metadata.left = 16; m_background_texture.metadata.top = 16; m_background_texture.metadata.right = 16; @@ -139,16 +140,17 @@ bool GLGizmosManager::init() // Order of gizmos in the vector must match order in EType! //BBS: GUI refactor: add obj manipulation + m_gizmos.clear(); unsigned int sprite_id = 0; - m_gizmos.emplace_back(new GLGizmoMove3D(m_parent, "toolbar_move.svg", EType::Move, &m_object_manipulation)); - m_gizmos.emplace_back(new GLGizmoRotate3D(m_parent, "toolbar_rotate.svg", EType::Rotate, &m_object_manipulation)); - m_gizmos.emplace_back(new GLGizmoScale3D(m_parent, "toolbar_scale.svg", EType::Scale, &m_object_manipulation)); - m_gizmos.emplace_back(new GLGizmoFlatten(m_parent, "toolbar_flatten.svg", EType::Flatten)); - m_gizmos.emplace_back(new GLGizmoAdvancedCut(m_parent, "toolbar_cut.svg", EType::Cut)); - m_gizmos.emplace_back(new GLGizmoFdmSupports(m_parent, "toolbar_support.svg", EType::FdmSupports)); - m_gizmos.emplace_back(new GLGizmoSeam(m_parent, "toolbar_seam.svg", EType::Seam)); - m_gizmos.emplace_back(new GLGizmoText(m_parent, "toolbar_text.svg", EType::Text)); - m_gizmos.emplace_back(new GLGizmoMmuSegmentation(m_parent, "mmu_segmentation.svg", EType::MmuSegmentation)); + m_gizmos.emplace_back(new GLGizmoMove3D(m_parent, dark_mode ? "toolbar_move_dark.svg" : "toolbar_move.svg", EType::Move, &m_object_manipulation)); + m_gizmos.emplace_back(new GLGizmoRotate3D(m_parent, dark_mode ? "toolbar_rotate_dark.svg" : "toolbar_rotate.svg", EType::Rotate, &m_object_manipulation)); + m_gizmos.emplace_back(new GLGizmoScale3D(m_parent, dark_mode ? "toolbar_scale_dark.svg" : "toolbar_scale.svg", EType::Scale, &m_object_manipulation)); + m_gizmos.emplace_back(new GLGizmoFlatten(m_parent, dark_mode ? "toolbar_flatten_dark.svg" : "toolbar_flatten.svg", EType::Flatten)); + m_gizmos.emplace_back(new GLGizmoAdvancedCut(m_parent, dark_mode ? "toolbar_cut_dark.svg" : "toolbar_cut.svg", EType::Cut)); + m_gizmos.emplace_back(new GLGizmoFdmSupports(m_parent, dark_mode ? "toolbar_support_dark.svg" : "toolbar_support.svg", EType::FdmSupports)); + m_gizmos.emplace_back(new GLGizmoSeam(m_parent, dark_mode ? "toolbar_seam_dark.svg" : "toolbar_seam.svg", EType::Seam)); + m_gizmos.emplace_back(new GLGizmoText(m_parent, dark_mode ? "toolbar_text_dark.svg" : "toolbar_text.svg", EType::Text)); + m_gizmos.emplace_back(new GLGizmoMmuSegmentation(m_parent, dark_mode ? "mmu_segmentation_dark.svg" : "mmu_segmentation.svg", EType::MmuSegmentation)); m_gizmos.emplace_back(new GLGizmoSimplify(m_parent, "reduce_triangles.svg", EType::Simplify)); //m_gizmos.emplace_back(new GLGizmoSlaSupports(m_parent, "sla_supports.svg", sprite_id++)); //m_gizmos.emplace_back(new GLGizmoFaceDetector(m_parent, "face recognition.svg", sprite_id++)); @@ -203,30 +205,20 @@ bool GLGizmosManager::init_icon_textures() else return false; - if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/text_B_hover.svg", 20, 20, texture_id)) - icon_list.insert(std::make_pair((int)IC_TEXT_B_HOVER, texture_id)); - else - return false; - - if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/text_B_press.svg", 20, 20, texture_id)) - icon_list.insert(std::make_pair((int)IC_TEXT_B_PRESS, texture_id)); - else - return false; + if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/text_B_dark.svg", 20, 20, texture_id)) + icon_list.insert(std::make_pair((int)IC_TEXT_B_DARK, texture_id)); + else + return false; if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/text_T.svg", 20, 20, texture_id)) icon_list.insert(std::make_pair((int)IC_TEXT_T, texture_id)); else return false; - if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/text_T_hover.svg", 20, 20, texture_id)) - icon_list.insert(std::make_pair((int)IC_TEXT_T_HOVER, texture_id)); - else - return false; - - if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/text_T_press.svg", 20, 20, texture_id)) - icon_list.insert(std::make_pair((int)IC_TEXT_T_PRESS, texture_id)); - else - return false; + if (IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/text_T_dark.svg", 20, 20, texture_id)) + icon_list.insert(std::make_pair((int)IC_TEXT_T_DARK, texture_id)); + else + return false; return true; } @@ -653,7 +645,7 @@ void GLGizmosManager::render_current_gizmo_for_picking_pass() const m_gizmos[m_current]->render_for_picking(); } -void GLGizmosManager::render_overlay() const +void GLGizmosManager::render_overlay() { if (!m_enabled) return; diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp index fd2fe7cb7..2dcbc6365 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp @@ -153,11 +153,9 @@ public: IC_TOOLBAR_TOOLTIP, IC_TOOLBAR_TOOLTIP_HOVER, IC_TEXT_B, - IC_TEXT_B_HOVER, - IC_TEXT_B_PRESS, + IC_TEXT_B_DARK, IC_TEXT_T, - IC_TEXT_T_HOVER, - IC_TEXT_T_PRESS, + IC_TEXT_T_DARK, IC_NAME_COUNT, }; @@ -209,6 +207,7 @@ public: bool is_enabled() const { return m_enabled; } void set_enabled(bool enable) { m_enabled = enable; } + void set_icon_dirty() { m_icons_texture_dirty = true; } void set_overlay_icon_size(float size); void set_overlay_scale(float scale); @@ -284,7 +283,7 @@ public: void render_painter_gizmo() const; void render_painter_assemble_view() const; - void render_overlay() const; + void render_overlay(); void render_arrow(const GLCanvas3D& parent, EType highlighted_type) const; diff --git a/src/slic3r/GUI/HintNotification.cpp b/src/slic3r/GUI/HintNotification.cpp index be0745bc8..b517e547b 100644 --- a/src/slic3r/GUI/HintNotification.cpp +++ b/src/slic3r/GUI/HintNotification.cpp @@ -929,17 +929,17 @@ void NotificationManager::HintNotification::render_close_button(ImGuiWrapper& im ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(.0f, .0f, .0f, .0f)); - std::string button_text; - button_text = ImGui::CloseNotifButton; + std::wstring button_text; + button_text = m_is_dark_mode ? ImGui::CloseNotifDarkButton : ImGui::CloseNotifButton; - ImVec2 button_pic_size = ImGui::CalcTextSize(button_text.c_str()); + ImVec2 button_pic_size = ImGui::CalcTextSize(into_u8(button_text).c_str()); ImVec2 button_size(button_pic_size.x * 1.25f, button_pic_size.y * 1.25f); m_close_b_w = button_size.y; if (ImGui::IsMouseHoveringRect(ImVec2(win_pos.x - win_size.x / 10.f, win_pos.y + win_size.y / 2 - button_pic_size.y), ImVec2(win_pos.x, win_pos.y + win_size.y / 2 + button_pic_size.y), true)) { - button_text = ImGui::CloseNotifHoverButton; + button_text = m_is_dark_mode ? ImGui::CloseNotifHoverDarkButton : ImGui::CloseNotifHoverButton; if (ImGui::IsMouseClicked(ImGuiMouseButton_Left)) close(); } @@ -973,13 +973,13 @@ void NotificationManager::HintNotification::render_preferences_button(ImGuiWrapp push_style_color(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f), m_state == EState::FadingOut, m_current_fade_opacity); push_style_color(ImGuiCol_TextSelectedBg, ImVec4(0, .75f, .75f, 1.f), m_state == EState::FadingOut, m_current_fade_opacity); - std::string button_text; - button_text = ImGui::PreferencesButton; + std::wstring button_text; + button_text = m_is_dark_mode ? ImGui::PreferencesDarkButton : ImGui::PreferencesButton; //hover if (ImGui::IsMouseHoveringRect(ImVec2(win_pos_x - m_window_width / 15.f, win_pos_y + m_window_height - 1.5f * m_line_height), ImVec2(win_pos_x, win_pos_y + m_window_height), true)) { - button_text = ImGui::PreferencesHoverButton; + button_text = m_is_dark_mode ? ImGui::PreferencesHoverDarkButton : ImGui::PreferencesHoverButton; // tooltip ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BACKGROUND); ImGui::PushStyleColor(ImGuiCol_Border, { 0,0,0,0 }); @@ -991,7 +991,7 @@ void NotificationManager::HintNotification::render_preferences_button(ImGuiWrapp ImGui::PopStyleVar(); } - ImVec2 button_pic_size = ImGui::CalcTextSize(button_text.c_str()); + ImVec2 button_pic_size = ImGui::CalcTextSize(into_u8(button_text).c_str()); ImVec2 button_size(button_pic_size.x * 1.25f, button_pic_size.y * 1.25f); ImGui::SetCursorPosX(m_window_width - m_line_height * 1.75f); ImGui::SetCursorPosY(m_window_height - button_size.y - m_close_b_w / 4.f); @@ -1016,16 +1016,16 @@ void NotificationManager::HintNotification::render_right_arrow_button(ImGuiWrapp push_style_color(ImGuiCol_TextSelectedBg, ImVec4(0, .75f, .75f, 1.f), m_state == EState::FadingOut, m_current_fade_opacity); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(.0f, .0f, .0f, .0f)); - std::string button_text; - button_text = ImGui::RightArrowButton; + std::wstring button_text; + button_text = m_is_dark_mode ? ImGui::RightArrowDarkButton : ImGui::RightArrowButton; - ImVec2 button_pic_size = ImGui::CalcTextSize(button_text.c_str()); + ImVec2 button_pic_size = ImGui::CalcTextSize(into_u8(button_text).c_str()); ImVec2 button_size(button_pic_size.x * 1.25f, button_pic_size.y * 1.25f); if (ImGui::IsMouseHoveringRect(ImVec2(win_pos_x - m_window_width / 7.5f, win_pos_y + m_window_height - 1.5f * m_line_height), ImVec2(win_pos_x - m_window_width / 15.f, win_pos_y + m_window_height), true)) { - button_text = ImGui::RightArrowHoverButton; + button_text = m_is_dark_mode ? ImGui::RightArrowHoverDarkButton : ImGui::RightArrowHoverButton; // tooltip ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BACKGROUND); ImGui::PushStyleColor(ImGuiCol_Border, { 0,0,0,0 }); @@ -1068,7 +1068,7 @@ void NotificationManager::HintNotification::render_documentation_button(ImGuiWra ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(.0f, .0f, .0f, .0f)); std::wstring button_text; - button_text = ImGui::DocumentationButton; + button_text = m_is_dark_mode ? ImGui::DocumentationDarkButton : ImGui::DocumentationButton; std::string placeholder_text; placeholder_text = ImGui::EjectButton; @@ -1078,7 +1078,7 @@ void NotificationManager::HintNotification::render_documentation_button(ImGuiWra ImVec2(win_pos.x - m_line_height * 2.5f, win_pos.y + win_size.y / 2 + button_pic_size.y), true)) { - button_text = ImGui::DocumentationHoverButton; + button_text = m_is_dark_mode ? ImGui::DocumentationHoverDarkButton : ImGui::DocumentationHoverButton; // tooltip ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BACKGROUND); ImGui::PushStyleColor(ImGuiCol_Border, { 0,0,0,0 }); diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index e9e07d353..ce3fae90a 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -453,13 +453,14 @@ bool IMSlider::init_texture() bool result = true; if (!is_horizontal()) { // BBS init image texture id - result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/reset_normal.svg", 20, 20, m_reset_normal_id); - result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/reset_hover.svg", 20, 20, m_reset_hover_id); result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/one_layer_on.svg", 24, 24, m_one_layer_on_id); result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/one_layer_on_hover.svg", 28, 28, m_one_layer_on_hover_id); result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/one_layer_off.svg", 28, 28, m_one_layer_off_id); result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/one_layer_off_hover.svg", 28, 28, m_one_layer_off_hover_id); - result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/one_layer_arrow.svg", 28, 28, m_one_layer_arrow_id); + result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/one_layer_on_dark.svg", 24, 24, m_one_layer_on_dark_id); + result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/one_layer_on_hover_dark.svg", 28, 28, m_one_layer_on_hover_dark_id); + result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/one_layer_off_dark.svg", 28, 28, m_one_layer_off_dark_id); + result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/one_layer_off_hover_dark.svg", 28, 28, m_one_layer_off_hover_dark_id); result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/im_gcode_pause.svg", 14, 14, m_pause_icon_id); result &= IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/im_slider_delete.svg", 14, 14, m_delete_icon_id); } @@ -723,8 +724,8 @@ bool IMSlider::switch_one_layer_mode() } void IMSlider::draw_background(const ImRect& groove) { - const ImU32 bg_rect_col = IM_COL32(255, 255, 255, 255); - const ImU32 groove_col = IM_COL32(206, 206, 206, 255); + const ImU32 bg_rect_col = wxGetApp().app_config->get("dark_color_mode") == "1" ? IM_COL32(65, 65, 71, 255) : IM_COL32(255, 255, 255, 255); + const ImU32 groove_col = wxGetApp().app_config->get("dark_color_mode") == "1" ? IM_COL32(45, 45, 49, 255) : IM_COL32(206, 206, 206, 255); if (is_horizontal() || m_ticks.empty()) { ImVec2 groove_padding = ImVec2(2.0f, 2.0f) * m_scale; @@ -773,9 +774,9 @@ bool IMSlider::horizontal_slider(const char* str_id, int* value, int v_min, int float triangle_offsets[3] = {-3.5f * m_scale, 3.5f * m_scale, -6.06f * m_scale}; - const ImU32 white_bg = IM_COL32(255, 255, 255, 255); + const ImU32 white_bg = wxGetApp().app_config->get("dark_color_mode") == "1" ? IM_COL32(65, 65, 71, 255) : IM_COL32(255, 255, 255, 255); const ImU32 handle_clr = IM_COL32(0, 174, 66, 255); - const ImU32 handle_border_clr = IM_COL32(248, 248, 248, 255); + const ImU32 handle_border_clr = wxGetApp().app_config->get("dark_color_mode") == "1" ? IM_COL32(65, 65, 71, 255) : IM_COL32(248, 248, 248, 255); // calc groove size ImVec2 groove_start = ImVec2(pos.x + handle_dummy_width, pos.y + size.y - groove_y - bottom_dummy); @@ -836,7 +837,7 @@ void IMSlider::draw_colored_band(const ImRect& groove, const ImRect& slideable_r if (m_ticks.empty()) return; - const ImU32 blank_col = IM_COL32(255, 255, 255, 255); + const ImU32 blank_col = wxGetApp().app_config->get("dark_color_mode") == "1" ? IM_COL32(65, 65, 71, 255) : IM_COL32(255, 255, 255, 255); ImVec2 blank_padding = ImVec2(6.0f, 5.0f) * m_scale; float blank_width = 1.0f * m_scale; @@ -909,8 +910,7 @@ void IMSlider::draw_ticks(const ImRect& slideable_region) { ImVec2 icon_size = ImVec2(14.0f, 14.0f) * m_scale; const ImU32 tick_clr = IM_COL32(144, 144, 144, 255); - const ImU32 tick_hover_box_clr = IM_COL32(219, 253, 231, 255); - const ImU32 delete_btn_clr = IM_COL32(144, 144, 144, 255); + const ImU32 tick_hover_box_clr = wxGetApp().app_config->get("dark_color_mode") == "1" ? IM_COL32(65, 65, 71, 255) : IM_COL32(219, 253, 231, 255); auto get_tick_pos = [this, slideable_region](int tick) { @@ -1011,10 +1011,9 @@ bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower ImVec2 text_content_size; ImVec2 text_size; - const ImU32 white_bg = IM_COL32(255, 255, 255, 255); + const ImU32 white_bg = wxGetApp().app_config->get("dark_color_mode") == "1" ? IM_COL32(65, 65, 71, 255) : IM_COL32(255, 255, 255, 255); const ImU32 handle_clr = IM_COL32(0, 174, 66, 255); - const ImU32 handle_border_clr = IM_COL32(248, 248, 248, 255); - const ImU32 delete_btn_clr = IM_COL32(144, 144, 144, 255); + const ImU32 handle_border_clr = wxGetApp().app_config->get("dark_color_mode") == "1" ? IM_COL32(65, 65, 71, 255) : IM_COL32(248, 248, 248, 255); // calc slider groove size ImVec2 groove_start = ImVec2(pos.x + size.x - groove_x - right_dummy, pos.y + text_dummy_height); @@ -1264,8 +1263,13 @@ bool IMSlider::render(int canvas_width, int canvas_height) ImGui::Spacing(); ImGui::SameLine((VERTICAL_SLIDER_SIZE.x - ONE_LAYER_OFFSET.x) * scale * m_scale); - ImTextureID normal_id = is_one_layer() ? m_one_layer_on_id : m_one_layer_off_id; - ImTextureID hover_id = is_one_layer() ? m_one_layer_on_hover_id : m_one_layer_off_hover_id; + bool dark_mode = wxGetApp().app_config->get("dark_color_mode") == "1"; + ImTextureID normal_id = dark_mode ? + is_one_layer() ? m_one_layer_on_dark_id : m_one_layer_off_dark_id : + is_one_layer() ? m_one_layer_on_id : m_one_layer_off_id; + ImTextureID hover_id = dark_mode ? + is_one_layer() ? m_one_layer_on_hover_dark_id : m_one_layer_off_hover_dark_id : + is_one_layer() ? m_one_layer_on_hover_id : m_one_layer_off_hover_id; if (ImGui::ImageButton3(normal_id, hover_id, ImVec2(28 * m_scale, 28 * m_scale))) { switch_one_layer_mode(); } @@ -1320,7 +1324,7 @@ void IMSlider::render_input_custom_gcode() ImGui::NewLine(); ImGui::SameLine(ImGui::GetStyle().WindowPadding.x * 14); imgui.push_confirm_button_style(); - if (imgui.bbl_button(_L("OK"))) { + if (imgui.bbl_button(_L("OK")) || ImGui::IsKeyDown(ImGui::GetKeyIndex(ImGuiKey_Enter))) { m_show_custom_gcode_window = false; add_custom_gcode(m_custom_gcode); move_to_center = true; @@ -1330,7 +1334,7 @@ void IMSlider::render_input_custom_gcode() ImGui::SameLine(); imgui.push_cancel_button_style(); - if (imgui.bbl_button(_L("Cancel"))) { + if (imgui.bbl_button(_L("Cancel")) || ImGui::IsKeyDown(ImGui::GetKeyIndex(ImGuiKey_Escape))) { m_show_custom_gcode_window = false; move_to_center = true; set_focus_when_appearing = true; diff --git a/src/slic3r/GUI/IMSlider.hpp b/src/slic3r/GUI/IMSlider.hpp index cb6a6ccc2..eb0bb02f6 100644 --- a/src/slic3r/GUI/IMSlider.hpp +++ b/src/slic3r/GUI/IMSlider.hpp @@ -341,13 +341,14 @@ private: int m_selected_tick_value = -1; /* BBS slider images */ - void *m_reset_normal_id; - void *m_reset_hover_id; void *m_one_layer_on_id; void *m_one_layer_on_hover_id; - void *m_one_layer_arrow_id; void *m_one_layer_off_id; void *m_one_layer_off_hover_id; + void* m_one_layer_on_dark_id; + void* m_one_layer_on_hover_dark_id; + void* m_one_layer_off_dark_id; + void* m_one_layer_off_hover_dark_id; void *m_pause_icon_id; void *m_delete_icon_id; diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 911e659fb..3195f0440 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -38,6 +38,7 @@ #include "nanosvg/nanosvg.h" #include "nanosvg/nanosvgrast.h" #include "OpenGLManager.hpp" +#include "GUI_App.hpp" namespace Slic3r { namespace GUI { @@ -66,6 +67,13 @@ static const std::map font_icons = { {ImGui::FoldButtonIcon , "im_fold" }, {ImGui::UnfoldButtonIcon , "im_unfold" }, {ImGui::SphereButtonIcon , "toolbar_modifier_sphere" }, + // dark mode icon + {ImGui::MinimalizeDarkButton , "notification_minimalize_dark" }, + {ImGui::MinimalizeHoverDarkButton , "notification_minimalize_hover_dark" }, + {ImGui::RightArrowDarkButton , "notification_right_dark" }, + {ImGui::RightArrowHoverDarkButton , "notification_right_hover_dark" }, + {ImGui::PreferencesDarkButton , "notification_preferences_dark" }, + {ImGui::PreferencesHoverDarkButton , "notification_preferences_hover_dark"}, }; static const std::map font_icons_large = { @@ -87,6 +95,11 @@ static const std::map font_icons_large = { {ImGui::DocumentationButton , "notification_documentation" }, {ImGui::DocumentationHoverButton, "notification_documentation_hover"}, //{ImGui::InfoMarker , "notification_info" }, + // dark mode icon + {ImGui::CloseNotifDarkButton , "notification_close_dark" }, + {ImGui::CloseNotifHoverDarkButton , "notification_close_hover_dark" }, + {ImGui::DocumentationDarkButton , "notification_documentation_dark" }, + {ImGui::DocumentationHoverDarkButton, "notification_documentation_hover_dark"}, }; static const std::map font_icons_extra_large = { @@ -109,9 +122,11 @@ const ImVec4 ImGuiWrapper::COL_BLUE_LIGHT = ImVec4(0.122f, 0.557f, 0.918f const ImVec4 ImGuiWrapper::COL_GREEN_LIGHT = ImVec4(0.86f, 0.99f, 0.91f, 1.0f); const ImVec4 ImGuiWrapper::COL_HOVER = { 0.933f, 0.933f, 0.933f, 1.0f }; const ImVec4 ImGuiWrapper::COL_ACTIVE = { 0.675f, 0.675f, 0.675f, 1.0f }; -const ImVec4 ImGuiWrapper::COL_SEPARATOR = { 0.93f, 0.93f, 0.93f,1.0f }; +const ImVec4 ImGuiWrapper::COL_SEPARATOR = { 0.93f, 0.93f, 0.93f, 1.0f }; +const ImVec4 ImGuiWrapper::COL_SEPARATOR_DARK = { 0.24f, 0.24f, 0.27f, 1.0f }; const ImVec4 ImGuiWrapper::COL_TITLE_BG = { 0.745f, 0.745f, 0.745f, 1.0f }; -const ImVec4 ImGuiWrapper::COL_WINDOW_BG = { 1.000f, 1.000f, 1.000f, 0.95f }; +const ImVec4 ImGuiWrapper::COL_WINDOW_BG = { 1.000f, 1.000f, 1.000f, 1.0f }; +const ImVec4 ImGuiWrapper::COL_WINDOW_BG_DARK = { 45 / 255.f, 45 / 255.f, 49 / 255.f, 1.f }; int ImGuiWrapper::TOOLBAR_WINDOW_FLAGS = ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove @@ -1667,50 +1682,88 @@ std::vector ImGuiWrapper::load_svg(const std::string& bitmap_name return data; } - //BBS void ImGuiWrapper::push_toolbar_style(const float scale) { - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f * scale); - ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(20.0f, 10.0f) * scale); - ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 3.0f * scale); - ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f); - ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 2.0f * scale); - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(10.0f, 10.0f) * scale); - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(50/255.0f, 58/255.0f, 61/255.0f, 1.00f)); // 1 - ImGui::PushStyleColor(ImGuiCol_WindowBg, ImGuiWrapper::COL_WINDOW_BG); // 2 - ImGui::PushStyleColor(ImGuiCol_TitleBg, ImGuiWrapper::COL_TITLE_BG); // 3 - ImGui::PushStyleColor(ImGuiCol_TitleBgActive, ImGuiWrapper::COL_TITLE_BG); // 4 - ImGui::PushStyleColor(ImGuiCol_Separator, ImGuiWrapper::COL_SEPARATOR); // 5 - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); // 6 - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImGuiWrapper::COL_HOVER); // 7 - ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(238 / 255.0f, 238 / 255.0f, 238 / 255.0f, 1.00f)); // 8 - ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(238/255.0f, 238/255.0f, 238/255.0f, 1.00f)); // 9 - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(238/255.0f, 238/255.0f, 238/255.0f, 0.00f)); // 10 - ImGui::PushStyleColor(ImGuiCol_TextSelectedBg, COL_GREEN_LIGHT); // 11 - ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(1.00f, 1.00f, 1.00f, 1.00f));//12 - ImGui::PushStyleColor(ImGuiCol_ScrollbarGrab, ImVec4(0.42f, 0.42f, 0.42f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabHovered, ImVec4(0.93f, 0.93f, 0.93f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabActive, ImVec4(0.93f, 0.93f, 0.93f, 1.00f)); + if (wxGetApp().app_config->get("dark_color_mode") == "1") { + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(20.0f, 10.0f) * scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 3.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 2.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(10.0f, 10.0f) * scale); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 1.0f, 1.0f, 0.88f)); // 1 + ImGui::PushStyleColor(ImGuiCol_WindowBg, ImGuiWrapper::COL_WINDOW_BG_DARK); // 2 + ImGui::PushStyleColor(ImGuiCol_TitleBg, ImGuiWrapper::COL_TITLE_BG); // 3 + ImGui::PushStyleColor(ImGuiCol_TitleBgActive, ImGuiWrapper::COL_TITLE_BG); // 4 + ImGui::PushStyleColor(ImGuiCol_Separator, ImGuiWrapper::COL_SEPARATOR_DARK); // 5 + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(62 / 255.0f, 62 / 255.0f, 69 / 255.0f, 1.00f)); // 6 + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(73 / 255.0f, 73 / 255.0f, 78 / 255.0f, 1.00f)); // 7 + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(73 / 255.0f, 73 / 255.0f, 78 / 255.0f, 1.00f)); // 8 + ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(84 / 255.0f, 84 / 255.0f, 90 / 255.0f, 1.00f)); // 9 + ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(62 / 255.0f, 62 / 255.0f, 69 / 255.0f, 1.00f)); // 10 + ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(238 / 255.0f, 238 / 255.0f, 238 / 255.0f, 0.00f)); // 11 + ImGui::PushStyleColor(ImGuiCol_TextSelectedBg, ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f)); // 12 + ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); // 13 + ImGui::PushStyleColor(ImGuiCol_ScrollbarGrab, ImVec4(0.42f, 0.42f, 0.42f, 1.00f)); // 14 + ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabHovered, ImVec4(0.93f, 0.93f, 0.93f, 1.00f)); // 15 + ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabActive, ImVec4(0.93f, 0.93f, 0.93f, 1.00f)); // 16 + } + else { + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(20.0f, 10.0f) * scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 3.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 2.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(10.0f, 10.0f) * scale); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(50 / 255.0f, 58 / 255.0f, 61 / 255.0f, 1.00f)); // 1 + ImGui::PushStyleColor(ImGuiCol_WindowBg, ImGuiWrapper::COL_WINDOW_BG); // 2 + ImGui::PushStyleColor(ImGuiCol_TitleBg, ImGuiWrapper::COL_TITLE_BG); // 3 + ImGui::PushStyleColor(ImGuiCol_TitleBgActive, ImGuiWrapper::COL_TITLE_BG); // 4 + ImGui::PushStyleColor(ImGuiCol_Separator, ImGuiWrapper::COL_SEPARATOR); // 5 + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); // 6 + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImGuiWrapper::COL_HOVER); // 7 + ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(238 / 255.0f, 238 / 255.0f, 238 / 255.0f, 1.00f)); // 8 + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); // 9 + ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(238 / 255.0f, 238 / 255.0f, 238 / 255.0f, 1.00f)); // 10 + ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(238 / 255.0f, 238 / 255.0f, 238 / 255.0f, 0.00f)); // 11 + ImGui::PushStyleColor(ImGuiCol_TextSelectedBg, COL_GREEN_LIGHT); // 12 + ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(1.00f, 1.00f, 1.00f, 1.00f));//13 + ImGui::PushStyleColor(ImGuiCol_ScrollbarGrab, ImVec4(0.42f, 0.42f, 0.42f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabHovered, ImVec4(0.93f, 0.93f, 0.93f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabActive, ImVec4(0.93f, 0.93f, 0.93f, 1.00f)); + } } void ImGuiWrapper::pop_toolbar_style() { // size in push toolbar style - ImGui::PopStyleColor(15); + ImGui::PopStyleColor(16); ImGui::PopStyleVar(6); } void ImGuiWrapper::push_menu_style(const float scale) { - ImGuiWrapper::push_toolbar_style(scale); - ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(10.0f, 10.0f) * scale); - ImGui::PushStyleVar(ImGuiStyleVar_PopupRounding, 4.0f * scale); - ImGui::PushStyleVar(ImGuiStyleVar_PopupBorderSize, 0.0f); - ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BG); - ImGui::PushStyleColor(ImGuiCol_Header, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); - ImGui::PushStyleColor(ImGuiCol_HeaderHovered, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); - ImGui::PushStyleColor(ImGuiCol_HeaderActive, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); + if (wxGetApp().app_config->get("dark_color_mode") == "1") { + ImGuiWrapper::push_toolbar_style(scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(10.0f, 10.0f) * scale); + ImGui::PushStyleVar(ImGuiStyleVar_PopupRounding, 4.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_PopupBorderSize, 0.0f); + ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BG_DARK); + ImGui::PushStyleColor(ImGuiCol_Header, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_HeaderHovered, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_HeaderActive, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); + } + else { + ImGuiWrapper::push_toolbar_style(scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(10.0f, 10.0f) * scale); + ImGui::PushStyleVar(ImGuiStyleVar_PopupRounding, 4.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_PopupBorderSize, 0.0f); + ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BG); + ImGui::PushStyleColor(ImGuiCol_Header, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_HeaderHovered, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_HeaderActive, ImVec4(0.00f, 0.68f, 0.26f, 1.0f)); + } } void ImGuiWrapper::pop_menu_style() { @@ -1720,25 +1773,48 @@ void ImGuiWrapper::pop_menu_style() } void ImGuiWrapper::push_common_window_style(const float scale) { - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f * scale); - ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(20.0f, 10.0f) * scale); - ImGui::PushStyleVar(ImGuiStyleVar_WindowTitleAlign, ImVec2(0.05f, 0.50f) * scale); - ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 3.0f * scale); - ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f); - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(38 / 255.0f, 46 / 255.0f, 48 / 255.0f, 1.00f)); // 1 - ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); // 2 - ImGui::PushStyleColor(ImGuiCol_TitleBg, ImVec4(245 / 255.0f, 245 / 255.0f, 245 / 255.0f, 1.00f)); // 3 - ImGui::PushStyleColor(ImGuiCol_TitleBgActive, ImVec4(245 / 255.0f, 245 / 255.0f, 245 / 255.0f, 1.00f)); // 4 - ImGui::PushStyleColor(ImGuiCol_Separator, ImGuiWrapper::COL_SEPARATOR); // 5 - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); // 6 - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); // 7 - ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); // 8 - ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(238 / 255.0f, 238 / 255.0f, 238 / 255.0f, 1.00f)); // 9 - ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(238 / 255.0f, 238 / 255.0f, 238 / 255.0f, 1.00f)); // 10 - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(238 / 255.0f, 238 / 255.0f, 238 / 255.0f, 0.00f)); // 11 - ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); // 12 - ImGui::PushStyleColor(ImGuiCol_TextSelectedBg, ImGuiWrapper::COL_GREEN_LIGHT); // 13 - ImGui::PushStyleColor(ImGuiCol_PlotHistogram, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); // 14 + if (wxGetApp().app_config->get("dark_color_mode") == "1") { + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(20.0f, 10.0f) * scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowTitleAlign, ImVec2(0.05f, 0.50f) * scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 3.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 1.0f, 1.0f, 0.88f)); // 1 + ImGui::PushStyleColor(ImGuiCol_WindowBg, ImGuiWrapper::COL_WINDOW_BG_DARK); // 2 + ImGui::PushStyleColor(ImGuiCol_TitleBg, ImVec4(54 / 255.0f, 54 / 255.0f, 60 / 255.0f, 1.00f)); // 3 + ImGui::PushStyleColor(ImGuiCol_TitleBgActive, ImVec4(54 / 255.0f, 54 / 255.0f, 60 / 255.0f, 1.00f)); // 4 + ImGui::PushStyleColor(ImGuiCol_Separator, ImGuiWrapper::COL_SEPARATOR_DARK); // 5 + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); // 6 + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); // 7 + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); // 8 + ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(84 / 255.0f, 84 / 255.0f, 90 / 255.0f, 1.00f)); // 9 + ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(62 / 255.0f, 62 / 255.0f, 69 / 255.0f, 1.00f)); // 10 + ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(238 / 255.0f, 238 / 255.0f, 238 / 255.0f, 0.00f)); // 11 + ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); // 12 + ImGui::PushStyleColor(ImGuiCol_TextSelectedBg, ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f)); // 13 + ImGui::PushStyleColor(ImGuiCol_PlotHistogram, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); // 14 + } + else { + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(20.0f, 10.0f) * scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowTitleAlign, ImVec2(0.05f, 0.50f) * scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 3.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(38 / 255.0f, 46 / 255.0f, 48 / 255.0f, 1.00f)); // 1 + ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); // 2 + ImGui::PushStyleColor(ImGuiCol_TitleBg, ImVec4(245 / 255.0f, 245 / 255.0f, 245 / 255.0f, 1.00f)); // 3 + ImGui::PushStyleColor(ImGuiCol_TitleBgActive, ImVec4(245 / 255.0f, 245 / 255.0f, 245 / 255.0f, 1.00f)); // 4 + ImGui::PushStyleColor(ImGuiCol_Separator, ImGuiWrapper::COL_SEPARATOR); // 5 + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); // 6 + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); // 7 + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); // 8 + ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(238 / 255.0f, 238 / 255.0f, 238 / 255.0f, 1.00f)); // 9 + ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(238 / 255.0f, 238 / 255.0f, 238 / 255.0f, 1.00f)); // 10 + ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(238 / 255.0f, 238 / 255.0f, 238 / 255.0f, 0.00f)); // 11 + ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); // 12 + ImGui::PushStyleColor(ImGuiCol_TextSelectedBg, ImGuiWrapper::COL_GREEN_LIGHT); // 13 + ImGui::PushStyleColor(ImGuiCol_PlotHistogram, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); // 14 + } } void ImGuiWrapper::pop_common_window_style() { @@ -1747,33 +1823,62 @@ void ImGuiWrapper::pop_common_window_style() { } void ImGuiWrapper::push_confirm_button_style() { - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f / 255.f, 174.f / 255.f, 66.f / 255.f, 1.f)); - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(61.f / 255.f, 203.f / 255.f, 115.f / 255.f, 1.f)); - ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(27.f / 255.f, 136.f / 255.f, 68.f / 255.f, 1.f)); - ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(1.f, 1.f, 1.f, 1.f)); - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); + if (wxGetApp().app_config->get("dark_color_mode") == "1") { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f / 255.f, 174.f / 255.f, 66.f / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.f / 255.f, 174.f / 255.f, 66.f / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(61.f / 255.f, 203.f / 255.f, 115.f / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(27.f / 255.f, 136.f / 255.f, 68.f / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(1.f, 1.f, 1.f, 0.88f)); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 0.88f)); + } + else { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f / 255.f, 174.f / 255.f, 66.f / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.f / 255.f, 174.f / 255.f, 66.f / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(61.f / 255.f, 203.f / 255.f, 115.f / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(27.f / 255.f, 136.f / 255.f, 68.f / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(1.f, 1.f, 1.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); + } } void ImGuiWrapper::pop_confirm_button_style() { - ImGui::PopStyleColor(5); + ImGui::PopStyleColor(6); } void ImGuiWrapper::push_cancel_button_style() { - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(255.f / 255.f, 255.f / 255.f, 255.f / 255.f, 1.f)); - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(238.f / 255.f, 238.f / 255.f, 238.f / 255.f, 1.f)); - ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(206.f / 255.f, 206.f / 255.f, 206.f / 255.f, 1.f)); - ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(0.f, 0.f, 0.f, 1.f)); - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(38.f / 255.0f, 46.f / 255.0f, 48.f / 255.0f, 1.00f)); + if (wxGetApp().app_config->get("dark_color_mode") == "1") { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.f, 0.f, 0.f)); + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(1.f, 1.f, 1.f, 0.64f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(73 / 255.f, 73 / 255.f, 78 / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(129 / 255.f, 129 / 255.f, 131 / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(1.f, 1.f, 1.f, 0.64f)); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 0.64f)); + } + else { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(1.f, 1.f, 1.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(38 / 255.f, 46 / 255.f, 48 / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(238.f / 255.f, 238.f / 255.f, 238.f / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(206.f / 255.f, 206.f / 255.f, 206.f / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(0.f, 0.f, 0.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(38.f / 255.0f, 46.f / 255.0f, 48.f / 255.0f, 1.00f)); + } } void ImGuiWrapper::pop_cancel_button_style() { - ImGui::PopStyleColor(5); + ImGui::PopStyleColor(6); } void ImGuiWrapper::push_button_disable_style() { - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(206.f / 255.f, 206.f / 255.f, 206.f / 255.f, 1.f)); - ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(206.f / 255.f, 206.f / 255.f, 206.f / 255.f, 1.f)); - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); + if (wxGetApp().app_config->get("dark_color_mode") == "1") { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(54 / 255.f, 54 / 255.f, 60 / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(54 / 255.f, 54 / 255.f, 60 / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 0.4f)); + } + else { + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(206.f / 255.f, 206.f / 255.f, 206.f / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(206.f / 255.f, 206.f / 255.f, 206.f / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); + } } void ImGuiWrapper::pop_button_disable_style() { diff --git a/src/slic3r/GUI/ImGuiWrapper.hpp b/src/slic3r/GUI/ImGuiWrapper.hpp index defbf1633..3696d58bb 100644 --- a/src/slic3r/GUI/ImGuiWrapper.hpp +++ b/src/slic3r/GUI/ImGuiWrapper.hpp @@ -191,7 +191,9 @@ public: static const ImVec4 COL_ACTIVE; static const ImVec4 COL_TITLE_BG; static const ImVec4 COL_WINDOW_BG; + static const ImVec4 COL_WINDOW_BG_DARK; static const ImVec4 COL_SEPARATOR; + static const ImVec4 COL_SEPARATOR_DARK; //BBS static void push_toolbar_style(const float scale); diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index 77887ccf2..9694ec50f 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -161,6 +161,7 @@ NotificationManager::PopNotification::PopNotification(const NotificationData &n, void NotificationManager::PopNotification::use_bbl_theme() { + bool dark_mode = wxGetApp().app_config->get("dark_color_mode") == "1"; ImGuiStyle &OldStyle = ImGui::GetStyle(); m_DefaultTheme.mWindowPadding = OldStyle.WindowPadding; @@ -188,9 +189,13 @@ void NotificationManager::PopNotification::use_bbl_theme() // OldStyle.Colors[ImGuiCol_WindowBg] = m_WindowBkgColor; // OldStyle.Colors[ImGuiCol_Text] = m_TextColor; - push_style_color(ImGuiCol_Border, m_CurrentColor, true, m_current_fade_opacity); + m_WindowBkgColor = dark_mode ? ImVec4(45 / 255.f, 45 / 255.f, 49 / 255.f, 1.f) : ImVec4(1, 1, 1, 1); + m_TextColor = dark_mode ? ImVec4(1, 1, 1, 0.4f) : ImVec4(.2f, .2f, .2f, 1.0f); + m_HyperTextColor = dark_mode ? ImVec4(0.03, 0.6, 0.18, 1) : ImVec4(0.03, 0.6, 0.18, 1); + dark_mode ? push_style_color(ImGuiCol_Border, {62 / 255.f, 62 / 255.f, 69 / 255.f, 1.f}, true, m_current_fade_opacity) : push_style_color(ImGuiCol_Border, m_CurrentColor, true, m_current_fade_opacity); push_style_color(ImGuiCol_WindowBg, m_WindowBkgColor, true, m_current_fade_opacity); push_style_color(ImGuiCol_Text, m_TextColor, true, m_current_fade_opacity); + ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, m_WindowRadius / 4); } @@ -202,6 +207,7 @@ void NotificationManager::PopNotification::restore_default_theme() OldStyle.WindowRounding = m_DefaultTheme.mWindowRound; ImGui::PopStyleColor(3); + ImGui::PopStyleVar(); //OldStyle.Colors[ImGuiCol_WindowBg] = m_DefaultTheme.mWindowBkg; // OldStyle.Colors[ImGuiCol_Text] = m_DefaultTheme.mTextColor; // OldStyle.Colors[ImGuiCol_Border] = m_DefaultTheme.mBorderColor; @@ -273,6 +279,8 @@ void NotificationManager::PopNotification::render(GLCanvas3D& canvas, float init use_bbl_theme(); + m_is_dark_mode = wxGetApp().app_config->get("dark_color_mode") == "1"; + if (imgui.begin(name, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse)) { ImVec2 win_size = ImGui::GetWindowSize(); @@ -541,8 +549,8 @@ void NotificationManager::PopNotification::render_close_button(ImGuiWrapper& img ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(.0f, .0f, .0f, .0f)); - std::string button_text; - button_text = ImGui::CloseNotifButton; + std::wstring button_text; + button_text = m_is_dark_mode ? ImGui::CloseNotifDarkButton : ImGui::CloseNotifButton; //button_text = ImGui::PreferencesButton; //if (ImGui::IsMouseHoveringRect(ImVec2(win_pos.x - win_size.x / 10.f, win_pos.y), @@ -550,9 +558,9 @@ void NotificationManager::PopNotification::render_close_button(ImGuiWrapper& img // true)) if (ImGui::IsMouseHoveringRect(ImVec2(win_pos.x - win_size.x / 10.f, win_pos.y), ImVec2(win_pos.x, win_pos.y + 2 * m_line_height+10),true)) { - button_text = ImGui::CloseNotifHoverButton; + button_text = m_is_dark_mode ? ImGui::CloseNotifHoverDarkButton : ImGui::CloseNotifHoverButton; } - ImVec2 button_pic_size = ImGui::CalcTextSize(button_text.c_str()); + ImVec2 button_pic_size = ImGui::CalcTextSize(into_u8(button_text).c_str()); ImVec2 button_size(button_pic_size.x * 1.25f, button_pic_size.y * 1.25f); ImGui::SetCursorPosX(win_size.x - m_line_height * 2.75f); //ImGui::SetCursorPosY(win_size.y / 2 - button_size.y); @@ -587,12 +595,11 @@ void NotificationManager::PopNotification::render_close_button(ImGuiWrapper& img void NotificationManager::PopNotification::bbl_render_left_sign(ImGuiWrapper &imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) { ImDrawList *draw_list = ImGui::GetWindowDrawList(); - - ImVec2 round_rect_pos = ImVec2(win_pos_x - win_size_x, win_pos_y); - ImVec2 round_rect_size = ImVec2(m_WindowRadius * 2, win_size_y); + ImVec2 round_rect_pos = ImVec2(win_pos_x - win_size_x + ImGui::GetStyle().WindowBorderSize, win_pos_y + ImGui::GetStyle().WindowBorderSize); + ImVec2 round_rect_size = ImVec2(m_WindowRadius * 2, win_size_y - 2 * ImGui::GetStyle().WindowBorderSize); ImVec2 rect_pos = round_rect_pos + ImVec2(m_WindowRadius, 0); - ImVec2 rect_size = ImVec2(m_WindowRadius + 2 * wxGetApp().plater()->get_current_canvas3D()->get_scale(), win_size_y); + ImVec2 rect_size = ImVec2(round_rect_size.x / 2, round_rect_size.y); ImU32 clr = ImGui::GetColorU32(ImVec4(m_CurrentColor.x, m_CurrentColor.y, m_CurrentColor.z, m_current_fade_opacity)); @@ -626,15 +633,15 @@ void NotificationManager::PopNotification::render_minimize_button(ImGuiWrapper& //button - if part if treggered - std::string button_text; - button_text = ImGui::MinimalizeButton; + std::wstring button_text; + button_text = m_is_dark_mode ? ImGui::MinimalizeDarkButton : ImGui::MinimalizeButton; if (ImGui::IsMouseHoveringRect(ImVec2(win_pos_x - m_window_width / 10.f, win_pos_y + m_window_height - 2 * m_line_height + 1), ImVec2(win_pos_x, win_pos_y + m_window_height), true)) { - button_text = ImGui::MinimalizeHoverButton; + button_text = m_is_dark_mode ? ImGui::MinimalizeHoverDarkButton : ImGui::MinimalizeHoverButton; } - ImVec2 button_pic_size = ImGui::CalcTextSize(button_text.c_str()); + ImVec2 button_pic_size = ImGui::CalcTextSize(into_u8(button_text).c_str()); ImVec2 button_size(button_pic_size.x * 1.25f, button_pic_size.y * 1.25f); ImGui::SetCursorPosX(m_window_width - m_line_height * 1.8f); ImGui::SetCursorPosY(m_window_height - button_size.y - 5); diff --git a/src/slic3r/GUI/NotificationManager.hpp b/src/slic3r/GUI/NotificationManager.hpp index 00947b233..799f4005e 100644 --- a/src/slic3r/GUI/NotificationManager.hpp +++ b/src/slic3r/GUI/NotificationManager.hpp @@ -395,6 +395,8 @@ private: void reset_timer() { m_notification_start = GLCanvas3D::timestamp_now(); m_state = EState::Shown; } void set_Multiline(bool Multi) { m_multiline = Multi; } + bool m_is_dark_mode = false; + protected: // Call after every size change virtual void init(); diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 0ff7c3ac4..0e00716ec 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -64,9 +64,12 @@ class Bed3D; std::array PartPlate::SELECT_COLOR = { 0.2666f, 0.2784f, 0.2784f, 1.0f }; //{ 0.4196f, 0.4235f, 0.4235f, 1.0f }; std::array PartPlate::UNSELECT_COLOR = { 0.82f, 0.82f, 0.82f, 1.0f }; +std::array PartPlate::UNSELECT_DARK_COLOR = { 0.384f, 0.384f, 0.412f, 1.0f }; std::array PartPlate::DEFAULT_COLOR = { 0.5f, 0.5f, 0.5f, 1.0f }; std::array PartPlate::LINE_TOP_COLOR = { 0.89f, 0.89f, 0.89f, 1.0f }; +std::array PartPlate::LINE_TOP_DARK_COLOR = { 0.431f, 0.431f, 0.463f, 1.0f }; std::array PartPlate::LINE_TOP_SEL_COLOR = { 0.5294f, 0.5451, 0.5333f, 1.0f}; +std::array PartPlate::LINE_TOP_SEL_DARK_COLOR = { 0.298f, 0.298f, 0.3333f, 1.0f}; std::array PartPlate::LINE_BOTTOM_COLOR = { 0.8f, 0.8f, 0.8f, 0.4f }; std::array PartPlate::HEIGHT_LIMIT_TOP_COLOR = { 0.6f, 0.6f, 1.0f, 1.0f }; std::array PartPlate::HEIGHT_LIMIT_BOTTOM_COLOR = { 0.4f, 0.4f, 1.0f, 1.0f }; @@ -393,7 +396,7 @@ void PartPlate::render_background(bool force_default_color) const { glsafe(::glColor4fv(PartPlate::SELECT_COLOR.data())); } else { - glsafe(::glColor4fv(PartPlate::UNSELECT_COLOR.data())); + glsafe(wxGetApp().app_config->get("dark_color_mode") == "1" ? ::glColor4fv(PartPlate::UNSELECT_DARK_COLOR.data()) : ::glColor4fv(PartPlate::UNSELECT_COLOR.data())); } } else { @@ -593,14 +596,15 @@ void PartPlate::render_exclude_area(bool force_default_color) const { void PartPlate::render_grid(bool bottom) const { //glsafe(::glEnable(GL_MULTISAMPLE)); // draw grid + bool dark_mode = wxGetApp().app_config->get("dark_color_mode") == "1"; glsafe(::glLineWidth(1.0f * m_scale_factor)); if (bottom) glsafe(::glColor4fv(LINE_BOTTOM_COLOR.data())); else { if (m_selected) - glsafe(::glColor4fv(LINE_TOP_SEL_COLOR.data())); + glsafe(dark_mode ? ::glColor4fv(LINE_TOP_SEL_DARK_COLOR.data()) : ::glColor4fv(LINE_TOP_SEL_COLOR.data())); else - glsafe(::glColor4fv(LINE_TOP_COLOR.data())); + glsafe(dark_mode ? ::glColor4fv(LINE_TOP_DARK_COLOR.data()) : ::glColor4fv(LINE_TOP_COLOR.data())); } glsafe(::glVertexPointer(3, GL_FLOAT, m_gridlines.get_vertex_data_size(), (GLvoid*)m_gridlines.get_vertices_data())); glsafe(::glDrawArrays(GL_LINES, 0, (GLsizei)m_gridlines.get_vertices_count())); @@ -2347,118 +2351,119 @@ Vec2d PartPlateList::compute_shape_position(int index, int cols) //generate icon textures void PartPlateList::generate_icon_textures() { + bool dark_mode = wxGetApp().app_config->get("dark_color_mode") == "1"; // use higher resolution images if graphic card and opengl version allow GLint max_tex_size = OpenGLManager::get_gl_info().get_max_tex_size(); std::string path = resources_dir() + "/images/"; std::string file_name; - if (m_del_texture.get_id() == 0) + //if (m_del_texture.get_id() == 0) { - file_name = path + "plate_close.svg"; + file_name = path + (dark_mode ? "plate_close_dark.svg" : "plate_close.svg"); if (!m_del_texture.load_from_svg_file(file_name, true, false, false, max_tex_size / 8)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } } - if (m_del_hovered_texture.get_id() == 0) + //if (m_del_hovered_texture.get_id() == 0) { - file_name = path + "plate_close_hover.svg"; + file_name = path + (dark_mode ? "plate_close_hover_dark.svg" : "plate_close_hover.svg"); if (!m_del_hovered_texture.load_from_svg_file(file_name, true, false, false, max_tex_size / 8)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } } - if (m_arrange_texture.get_id() == 0) + //if (m_arrange_texture.get_id() == 0) { - file_name = path + "plate_arrange.svg"; + file_name = path + (dark_mode ? "plate_arrange_dark.svg" : "plate_arrange.svg"); if (!m_arrange_texture.load_from_svg_file(file_name, true, false, false, max_tex_size / 8)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } } - if (m_arrange_hovered_texture.get_id() == 0) + //if (m_arrange_hovered_texture.get_id() == 0) { - file_name = path + "plate_arrange_hover.svg"; + file_name = path + (dark_mode ? "plate_arrange_hover_dark.svg" : "plate_arrange_hover.svg"); if (!m_arrange_hovered_texture.load_from_svg_file(file_name, true, false, false, max_tex_size / 8)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } } - if (m_orient_texture.get_id() == 0) + //if (m_orient_texture.get_id() == 0) { - file_name = path + "plate_orient.svg"; + file_name = path + (dark_mode ? "plate_orient_dark.svg" : "plate_orient.svg"); if (!m_orient_texture.load_from_svg_file(file_name, true, false, false, max_tex_size / 8)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } } - if (m_orient_hovered_texture.get_id() == 0) + //if (m_orient_hovered_texture.get_id() == 0) { - file_name = path + "plate_orient_hover.svg"; + file_name = path + (dark_mode ? "plate_orient_hover_dark.svg" : "plate_orient_hover.svg"); if (!m_orient_hovered_texture.load_from_svg_file(file_name, true, false, false, max_tex_size / 8)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } } - if (m_locked_texture.get_id() == 0) + //if (m_locked_texture.get_id() == 0) { - file_name = path + "plate_locked.svg"; + file_name = path + (dark_mode ? "plate_locked_dark.svg" : "plate_locked.svg"); if (!m_locked_texture.load_from_svg_file(file_name, true, false, false, max_tex_size / 8)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } } - if (m_locked_hovered_texture.get_id() == 0) + //if (m_locked_hovered_texture.get_id() == 0) { - file_name = path + "plate_locked_hover.svg"; + file_name = path + (dark_mode ? "plate_locked_hover_dark.svg" : "plate_locked_hover.svg"); if (!m_locked_hovered_texture.load_from_svg_file(file_name, true, false, false, max_tex_size / 8)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } } - if (m_lockopen_texture.get_id() == 0) + //if (m_lockopen_texture.get_id() == 0) { - file_name = path + "plate_unlocked.svg"; + file_name = path + (dark_mode ? "plate_unlocked_dark.svg" : "plate_unlocked.svg"); if (!m_lockopen_texture.load_from_svg_file(file_name, true, false, false, max_tex_size / 8)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } } - if (m_lockopen_hovered_texture.get_id() == 0) + //if (m_lockopen_hovered_texture.get_id() == 0) { - file_name = path + "plate_unlocked_hover.svg"; + file_name = path + (dark_mode ? "plate_unlocked_hover_dark.svg" : "plate_unlocked_hover.svg"); if (!m_lockopen_hovered_texture.load_from_svg_file(file_name, true, false, false, max_tex_size / 8)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } } - if (m_bedtype_texture.get_id() == 0) + //if (m_bedtype_texture.get_id() == 0) { - file_name = path + "plate_set_bedtype.svg"; + file_name = path + (dark_mode ? "plate_set_bedtype_dark.svg" : "plate_set_bedtype.svg"); if (!m_bedtype_texture.load_from_svg_file(file_name, true, false, false, max_tex_size / 8)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } } - if (m_bedtype_changed_texture.get_id() == 0) + //if (m_bedtype_changed_texture.get_id() == 0) { - file_name = path + "plate_set_bedtype_changed.svg"; + file_name = path + (dark_mode ? "plate_set_bedtype_changed_dark.svg" : "plate_set_bedtype_changed.svg"); if (!m_bedtype_changed_texture.load_from_svg_file(file_name, true, false, false, max_tex_size / 8)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } } - if (m_bedtype_hovered_texture.get_id() == 0) + //if (m_bedtype_hovered_texture.get_id() == 0) { - file_name = path + "plate_set_bedtype_hover.svg"; + file_name = path + (dark_mode ? "plate_set_bedtype_hover_dark.svg" : "plate_set_bedtype_hover.svg"); if (!m_bedtype_hovered_texture.load_from_svg_file(file_name, true, false, false, max_tex_size / 8)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } } - if (m_bedtype_changed_hovered_texture.get_id() == 0) + //if (m_bedtype_changed_hovered_texture.get_id() == 0) { - file_name = path + "plate_set_bedtype_changed_hover.svg"; + file_name = path + (dark_mode ? "plate_set_bedtype_changed_hover_dark.svg" : "plate_set_bedtype_changed_hover.svg"); if (!m_bedtype_changed_hovered_texture.load_from_svg_file(file_name, true, false, false, max_tex_size / 8)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } @@ -3753,7 +3758,12 @@ void PartPlateList::render(bool bottom, bool only_current, bool only_body, int h plate_hover_action = hover_id % PartPlate::GRABBER_COUNT; } - if (m_del_texture.get_id() == 0) + static bool last_dark_mode_tatus = wxGetApp().app_config->get("dark_color_mode") == "1"; + bool dark_mode_status = wxGetApp().app_config->get("dark_color_mode") == "1"; + if (dark_mode_status != last_dark_mode_tatus) { + last_dark_mode_tatus = dark_mode_status; + generate_icon_textures(); + }else if(m_del_texture.get_id() == 0) generate_icon_textures(); for (it = m_plate_list.begin(); it != m_plate_list.end(); it++) { int current_index = (*it)->get_index(); diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index 6b3173724..e15c4c55e 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -191,10 +191,13 @@ public: static std::array SELECT_COLOR; static std::array UNSELECT_COLOR; + static std::array UNSELECT_DARK_COLOR; static std::array DEFAULT_COLOR; static std::array LINE_BOTTOM_COLOR; static std::array LINE_TOP_COLOR; + static std::array LINE_TOP_DARK_COLOR; static std::array LINE_TOP_SEL_COLOR; + static std::array LINE_TOP_SEL_DARK_COLOR; static std::array HEIGHT_LIMIT_BOTTOM_COLOR; static std::array HEIGHT_LIMIT_TOP_COLOR; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 602c05262..8f7b66b3e 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -6381,8 +6381,10 @@ bool Plater::priv::init_collapse_toolbar() // already initialized return true; + bool dark_mode = wxGetApp().app_config->get("dark_color_mode") == "1"; + BackgroundTexture::Metadata background_data; - background_data.filename = "toolbar_background.png"; + background_data.filename = dark_mode ? "toolbar_background_dark.png" : "toolbar_background.png"; background_data.left = 16; background_data.top = 16; background_data.right = 16; @@ -6398,6 +6400,8 @@ bool Plater::priv::init_collapse_toolbar() collapse_toolbar.set_separator_size(5); collapse_toolbar.set_gap_size(2); + collapse_toolbar.del_all_item(); + GLToolbarItem::Data item; item.name = "collapse_sidebar";