Browse Source

Merge pull request #50266 from Razoric480/3x-cache-color-picker-presets

[3.x] Add cache to color picker for presets
Rémi Verschelde 4 years ago
parent
commit
76f3bd52d5
2 changed files with 14 additions and 3 deletions
  1. 13 3
      scene/gui/color_picker.cpp
  2. 1 0
      scene/gui/color_picker.h

+ 13 - 3
scene/gui/color_picker.cpp

@@ -40,6 +40,8 @@
 #endif
 #include "scene/main/viewport.h"
 
+List<Color> ColorPicker::preset_cache;
+
 void ColorPicker::_notification(int p_what) {
 	switch (p_what) {
 		case NOTIFICATION_THEME_CHANGED: {
@@ -57,11 +59,17 @@ void ColorPicker::_notification(int p_what) {
 
 #ifdef TOOLS_ENABLED
 			if (Engine::get_singleton()->is_editor_hint()) {
-				PoolColorArray saved_presets = EditorSettings::get_singleton()->get_project_metadata("color_picker", "presets", PoolColorArray());
+				if (preset_cache.empty()) {
+					PoolColorArray saved_presets = EditorSettings::get_singleton()->get_project_metadata("color_picker", "presets", PoolColorArray());
+					for (int i = 0; i < saved_presets.size(); i++) {
+						preset_cache.push_back(saved_presets[i]);
+					}
+				}
 
-				for (int i = 0; i < saved_presets.size(); i++) {
-					add_preset(saved_presets[i]);
+				for (int i = 0; i < preset_cache.size(); i++) {
+					presets.push_back(preset_cache[i]);
 				}
+				preset->update();
 			}
 #endif
 		} break;
@@ -287,6 +295,7 @@ void ColorPicker::add_preset(const Color &p_color) {
 		presets.move_to_back(presets.find(p_color));
 	} else {
 		presets.push_back(p_color);
+		preset_cache.push_back(p_color);
 	}
 	preset->update();
 
@@ -301,6 +310,7 @@ void ColorPicker::add_preset(const Color &p_color) {
 void ColorPicker::erase_preset(const Color &p_color) {
 	if (presets.find(p_color)) {
 		presets.erase(presets.find(p_color));
+		preset_cache.erase(preset_cache.find(p_color));
 		preset->update();
 
 #ifdef TOOLS_ENABLED

+ 1 - 0
scene/gui/color_picker.h

@@ -47,6 +47,7 @@ class ColorPicker : public BoxContainer {
 	GDCLASS(ColorPicker, BoxContainer);
 
 private:
+	static List<Color> preset_cache;
 	Control *screen;
 	Control *uv_edit;
 	Control *w_edit;