summaryrefslogtreecommitdiff
path: root/editor
diff options
context:
space:
mode:
Diffstat (limited to 'editor')
-rw-r--r--editor/editor_inspector.cpp4
-rw-r--r--editor/editor_node.cpp3
-rw-r--r--editor/editor_properties_array_dict.cpp43
-rw-r--r--editor/editor_resource_picker.cpp3
-rw-r--r--editor/plugins/bit_map_editor_plugin.cpp86
-rw-r--r--editor/plugins/bit_map_editor_plugin.h64
-rw-r--r--editor/plugins/editor_preview_plugins.cpp31
-rw-r--r--editor/plugins/editor_preview_plugins.h11
8 files changed, 205 insertions, 40 deletions
diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp
index bd9b0ae1c8..5d47b87fbf 100644
--- a/editor/editor_inspector.cpp
+++ b/editor/editor_inspector.cpp
@@ -3515,7 +3515,9 @@ void EditorInspector::_notification(int p_what) {
get_v_scroll_bar()->call_deferred(SNAME("set_value"), update_scroll_request);
update_scroll_request = -1;
}
- if (refresh_countdown > 0) {
+ if (update_tree_pending) {
+ refresh_countdown = float(EditorSettings::get_singleton()->get("docks/property_editor/auto_refresh_interval"));
+ } else if (refresh_countdown > 0) {
refresh_countdown -= get_process_delta_time();
if (refresh_countdown <= 0) {
for (const KeyValue<StringName, List<EditorProperty *>> &F : editor_property_map) {
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index 3cc4821f95..6f3c45727a 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -134,6 +134,7 @@
#include "editor/plugins/asset_library_editor_plugin.h"
#include "editor/plugins/audio_stream_editor_plugin.h"
#include "editor/plugins/audio_stream_randomizer_editor_plugin.h"
+#include "editor/plugins/bit_map_editor_plugin.h"
#include "editor/plugins/camera_3d_editor_plugin.h"
#include "editor/plugins/canvas_item_editor_plugin.h"
#include "editor/plugins/collision_polygon_2d_editor_plugin.h"
@@ -7066,6 +7067,7 @@ EditorNode::EditorNode() {
add_editor_plugin(memnew(TextControlEditorPlugin));
add_editor_plugin(memnew(ControlEditorPlugin));
add_editor_plugin(memnew(GradientTexture2DEditorPlugin));
+ add_editor_plugin(memnew(BitMapEditorPlugin));
for (int i = 0; i < EditorPlugins::get_plugin_count(); i++) {
add_editor_plugin(EditorPlugins::create(i));
@@ -7084,6 +7086,7 @@ EditorNode::EditorNode() {
resource_preview->add_preview_generator(Ref<EditorMeshPreviewPlugin>(memnew(EditorMeshPreviewPlugin)));
resource_preview->add_preview_generator(Ref<EditorBitmapPreviewPlugin>(memnew(EditorBitmapPreviewPlugin)));
resource_preview->add_preview_generator(Ref<EditorFontPreviewPlugin>(memnew(EditorFontPreviewPlugin)));
+ resource_preview->add_preview_generator(Ref<EditorGradientPreviewPlugin>(memnew(EditorGradientPreviewPlugin)));
{
Ref<StandardMaterial3DConversionPlugin> spatial_mat_convert;
diff --git a/editor/editor_properties_array_dict.cpp b/editor/editor_properties_array_dict.cpp
index f59ba66862..ffbe50285c 100644
--- a/editor/editor_properties_array_dict.cpp
+++ b/editor/editor_properties_array_dict.cpp
@@ -209,46 +209,13 @@ void EditorPropertyArray::_object_id_selected(const StringName &p_property, Obje
void EditorPropertyArray::update_property() {
Variant array = get_edited_object()->get(get_edited_property());
- String arrtype = "";
- switch (array_type) {
- case Variant::ARRAY: {
- arrtype = "Array";
- } break;
-
- // Arrays.
- case Variant::PACKED_BYTE_ARRAY: {
- arrtype = "PackedByteArray";
- } break;
- case Variant::PACKED_INT32_ARRAY: {
- arrtype = "PackedInt32Array";
- } break;
- case Variant::PACKED_FLOAT32_ARRAY: {
- arrtype = "PackedFloat32Array";
- } break;
- case Variant::PACKED_INT64_ARRAY: {
- arrtype = "PackedInt64Array";
- } break;
- case Variant::PACKED_FLOAT64_ARRAY: {
- arrtype = "PackedFloat64Array";
- } break;
- case Variant::PACKED_STRING_ARRAY: {
- arrtype = "PackedStringArray";
- } break;
- case Variant::PACKED_VECTOR2_ARRAY: {
- arrtype = "PackedVector2Array";
- } break;
- case Variant::PACKED_VECTOR3_ARRAY: {
- arrtype = "PackedVector3Array";
- } break;
- case Variant::PACKED_COLOR_ARRAY: {
- arrtype = "PackedColorArray";
- } break;
- default: {
- }
+ String array_type_name = Variant::get_type_name(array_type);
+ if (array_type == Variant::ARRAY && subtype != Variant::NIL) {
+ array_type_name = vformat("%s[%s]", array_type_name, Variant::get_type_name(subtype));
}
if (array.get_type() == Variant::NIL) {
- edit->set_text(String("(Nil) ") + arrtype);
+ edit->set_text(vformat(TTR("(Nil) %s"), array_type_name));
edit->set_pressed(false);
if (vbox) {
set_bottom_editor(nullptr);
@@ -264,7 +231,7 @@ void EditorPropertyArray::update_property() {
page_index = MIN(page_index, max_page);
int offset = page_index * page_length;
- edit->set_text(arrtype + " (size " + itos(size) + ")");
+ edit->set_text(vformat(TTR("%s (size %s)"), array_type_name, itos(size)));
bool unfolded = get_edited_object()->editor_is_section_unfolded(get_edited_property());
if (edit->is_pressed() != unfolded) {
diff --git a/editor/editor_resource_picker.cpp b/editor/editor_resource_picker.cpp
index a1d09d4df3..3c68a715c3 100644
--- a/editor/editor_resource_picker.cpp
+++ b/editor/editor_resource_picker.cpp
@@ -90,7 +90,8 @@ void EditorResourcePicker::_update_resource_preview(const String &p_path, const
if (p_preview.is_valid()) {
preview_rect->set_offset(SIDE_LEFT, assign_button->get_icon()->get_width() + assign_button->get_theme_stylebox(SNAME("normal"))->get_default_margin(SIDE_LEFT) + get_theme_constant(SNAME("h_separation"), SNAME("Button")));
- if (Ref<GradientTexture1D>(edited_resource).is_valid()) {
+ // Resource-specific stretching.
+ if (Ref<GradientTexture1D>(edited_resource).is_valid() || Ref<Gradient>(edited_resource).is_valid()) {
preview_rect->set_stretch_mode(TextureRect::STRETCH_SCALE);
assign_button->set_custom_minimum_size(Size2(1, 1));
} else {
diff --git a/editor/plugins/bit_map_editor_plugin.cpp b/editor/plugins/bit_map_editor_plugin.cpp
new file mode 100644
index 0000000000..9003c4480b
--- /dev/null
+++ b/editor/plugins/bit_map_editor_plugin.cpp
@@ -0,0 +1,86 @@
+/*************************************************************************/
+/* bit_map_editor_plugin.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "bit_map_editor_plugin.h"
+
+#include "editor/editor_scale.h"
+
+void BitMapEditor::setup(const Ref<BitMap> &p_bitmap) {
+ Ref<ImageTexture> texture;
+ texture.instantiate();
+ texture->create_from_image(p_bitmap->convert_to_image());
+ texture_rect->set_texture(texture);
+
+ size_label->set_text(vformat(String::utf8("%s×%s"), p_bitmap->get_size().width, p_bitmap->get_size().height));
+}
+
+BitMapEditor::BitMapEditor() {
+ texture_rect = memnew(TextureRect);
+ texture_rect->set_stretch_mode(TextureRect::STRETCH_KEEP_ASPECT_CENTERED);
+ texture_rect->set_texture_filter(TEXTURE_FILTER_NEAREST);
+ texture_rect->set_custom_minimum_size(Size2(0, 250) * EDSCALE);
+ add_child(texture_rect);
+
+ size_label = memnew(Label);
+ size_label->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_RIGHT);
+ add_child(size_label);
+
+ // Reduce extra padding on top and bottom of size label.
+ Ref<StyleBoxEmpty> stylebox;
+ stylebox.instantiate();
+ stylebox->set_default_margin(SIDE_RIGHT, 4 * EDSCALE);
+ size_label->add_theme_style_override("normal", stylebox);
+}
+
+///////////////////////
+
+bool EditorInspectorPluginBitMap::can_handle(Object *p_object) {
+ return Object::cast_to<BitMap>(p_object) != nullptr;
+}
+
+void EditorInspectorPluginBitMap::parse_begin(Object *p_object) {
+ BitMap *bitmap = Object::cast_to<BitMap>(p_object);
+ if (!bitmap) {
+ return;
+ }
+ Ref<BitMap> bm(bitmap);
+
+ BitMapEditor *editor = memnew(BitMapEditor);
+ editor->setup(bm);
+ add_custom_control(editor);
+}
+
+///////////////////////
+
+BitMapEditorPlugin::BitMapEditorPlugin() {
+ Ref<EditorInspectorPluginBitMap> plugin;
+ plugin.instantiate();
+ add_inspector_plugin(plugin);
+}
diff --git a/editor/plugins/bit_map_editor_plugin.h b/editor/plugins/bit_map_editor_plugin.h
new file mode 100644
index 0000000000..c883e5542f
--- /dev/null
+++ b/editor/plugins/bit_map_editor_plugin.h
@@ -0,0 +1,64 @@
+/*************************************************************************/
+/* bit_map_editor_plugin.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef BIT_MAP_PREVIEW_EDITOR_PLUGIN_H
+#define BIT_MAP_PREVIEW_EDITOR_PLUGIN_H
+
+#include "editor/editor_plugin.h"
+#include "scene/resources/bit_map.h"
+
+class BitMapEditor : public VBoxContainer {
+ GDCLASS(BitMapEditor, VBoxContainer);
+
+ TextureRect *texture_rect = nullptr;
+ Label *size_label = nullptr;
+
+public:
+ void setup(const Ref<BitMap> &p_bitmap);
+
+ BitMapEditor();
+};
+
+class EditorInspectorPluginBitMap : public EditorInspectorPlugin {
+ GDCLASS(EditorInspectorPluginBitMap, EditorInspectorPlugin);
+
+public:
+ virtual bool can_handle(Object *p_object) override;
+ virtual void parse_begin(Object *p_object) override;
+};
+
+class BitMapEditorPlugin : public EditorPlugin {
+ GDCLASS(BitMapEditorPlugin, EditorPlugin);
+
+public:
+ BitMapEditorPlugin();
+};
+
+#endif // BIT_MAP_PREVIEW_EDITOR_PLUGIN_H
diff --git a/editor/plugins/editor_preview_plugins.cpp b/editor/plugins/editor_preview_plugins.cpp
index b8556220d2..a160ca463b 100644
--- a/editor/plugins/editor_preview_plugins.cpp
+++ b/editor/plugins/editor_preview_plugins.cpp
@@ -904,3 +904,34 @@ EditorFontPreviewPlugin::~EditorFontPreviewPlugin() {
RS::get_singleton()->free(canvas);
RS::get_singleton()->free(viewport);
}
+
+////////////////////////////////////////////////////////////////////////////
+
+static const real_t GRADIENT_PREVIEW_TEXTURE_SCALE_FACTOR = 4.0;
+
+bool EditorGradientPreviewPlugin::handles(const String &p_type) const {
+ return ClassDB::is_parent_class(p_type, "Gradient");
+}
+
+bool EditorGradientPreviewPlugin::generate_small_preview_automatically() const {
+ return true;
+}
+
+Ref<Texture2D> EditorGradientPreviewPlugin::generate(const RES &p_from, const Size2 &p_size) const {
+ Ref<Gradient> gradient = p_from;
+ if (gradient.is_valid()) {
+ Ref<GradientTexture1D> ptex;
+ ptex.instantiate();
+ ptex->set_width(p_size.width * GRADIENT_PREVIEW_TEXTURE_SCALE_FACTOR * EDSCALE);
+ ptex->set_gradient(gradient);
+
+ Ref<ImageTexture> itex;
+ itex.instantiate();
+ itex->create_from_image(ptex->get_image());
+ return itex;
+ }
+ return Ref<Texture2D>();
+}
+
+EditorGradientPreviewPlugin::EditorGradientPreviewPlugin() {
+}
diff --git a/editor/plugins/editor_preview_plugins.h b/editor/plugins/editor_preview_plugins.h
index 803f03f17e..73eb90dd86 100644
--- a/editor/plugins/editor_preview_plugins.h
+++ b/editor/plugins/editor_preview_plugins.h
@@ -182,4 +182,15 @@ public:
EditorTileMapPatternPreviewPlugin();
~EditorTileMapPatternPreviewPlugin();
};
+
+class EditorGradientPreviewPlugin : public EditorResourcePreviewGenerator {
+ GDCLASS(EditorGradientPreviewPlugin, EditorResourcePreviewGenerator);
+
+public:
+ virtual bool handles(const String &p_type) const override;
+ virtual bool generate_small_preview_automatically() const override;
+ virtual Ref<Texture2D> generate(const RES &p_from, const Size2 &p_size) const override;
+
+ EditorGradientPreviewPlugin();
+};
#endif // EDITORPREVIEWPLUGINS_H