Add cache to color picker for presets
This prevents loading from the project metadata more than once, significantly saving performance with nodes that have color pickers.
This commit is contained in:
parent
56d7126864
commit
94a464f555
2 changed files with 15 additions and 4 deletions
|
@ -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,12 +59,18 @@ void ColorPicker::_notification(int p_what) {
|
|||
|
||||
#ifdef TOOLS_ENABLED
|
||||
if (Engine::get_singleton()->is_editor_hint()) {
|
||||
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++) {
|
||||
add_preset(saved_presets[i]);
|
||||
preset_cache.push_back(saved_presets[i]);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < preset_cache.size(); i++) {
|
||||
presets.push_back(preset_cache[i]);
|
||||
}
|
||||
preset->update();
|
||||
}
|
||||
#endif
|
||||
} break;
|
||||
case NOTIFICATION_PARENTED: {
|
||||
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue