소스 검색

Merge pull request #50261 from Razoric480/cache-color-picker-presets

Add cache to ColorPicker for color presets
Rémi Verschelde 4 년 전
부모
커밋
47e5fed485
2개의 변경된 파일14개의 추가작업 그리고 3개의 파일을 삭제
  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/window.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()) {
-				PackedColorArray saved_presets = EditorSettings::get_singleton()->get_project_metadata("color_picker", "presets", PackedColorArray());
+				if (preset_cache.is_empty()) {
+					PackedColorArray saved_presets = EditorSettings::get_singleton()->get_project_metadata("color_picker", "presets", PackedColorArray());
+					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;
@@ -413,6 +421,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();
 
@@ -427,6 +436,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

@@ -58,6 +58,7 @@ public:
 private:
 	static Ref<Shader> wheel_shader;
 	static Ref<Shader> circle_shader;
+	static List<Color> preset_cache;
 
 	Control *screen = nullptr;
 	Control *uv_edit = memnew(Control);