Merge pull request #29109 from RandomShaper/fix_onion_skinning
Fix onion skinning
This commit is contained in:
commit
c088386c5b
|
@ -1431,6 +1431,7 @@ void AnimationPlayerEditor::_prepare_onion_layers_2() {
|
||||||
new_state["show_rulers"] = false;
|
new_state["show_rulers"] = false;
|
||||||
new_state["show_guides"] = false;
|
new_state["show_guides"] = false;
|
||||||
new_state["show_helpers"] = false;
|
new_state["show_helpers"] = false;
|
||||||
|
new_state["show_zoom_control"] = false;
|
||||||
// TODO: Save/restore only affected entries
|
// TODO: Save/restore only affected entries
|
||||||
CanvasItemEditor::get_singleton()->set_state(new_state);
|
CanvasItemEditor::get_singleton()->set_state(new_state);
|
||||||
}
|
}
|
||||||
|
@ -1483,7 +1484,7 @@ void AnimationPlayerEditor::_prepare_onion_layers_2() {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
player->seek(pos, true);
|
player->seek(pos, true);
|
||||||
get_tree()->flush_transform_notifications(); // Needed for transforms of Spatials
|
get_tree()->flush_transform_notifications(); // Needed for transforms of Spatials
|
||||||
values_backup.update_skeletons(); // Needed for Skeletons
|
values_backup.update_skeletons(); // Needed for Skeletons (2D & 3D)
|
||||||
|
|
||||||
VS::get_singleton()->viewport_set_active(onion.captures[cidx], true);
|
VS::get_singleton()->viewport_set_active(onion.captures[cidx], true);
|
||||||
VS::get_singleton()->viewport_set_parent_viewport(root_vp, onion.captures[cidx]);
|
VS::get_singleton()->viewport_set_parent_viewport(root_vp, onion.captures[cidx]);
|
||||||
|
|
|
@ -4009,6 +4009,7 @@ void CanvasItemEditor::_popup_callback(int p_op) {
|
||||||
show_rulers = !show_rulers;
|
show_rulers = !show_rulers;
|
||||||
int idx = view_menu->get_popup()->get_item_index(SHOW_RULERS);
|
int idx = view_menu->get_popup()->get_item_index(SHOW_RULERS);
|
||||||
view_menu->get_popup()->set_item_checked(idx, show_rulers);
|
view_menu->get_popup()->set_item_checked(idx, show_rulers);
|
||||||
|
_update_scrollbars();
|
||||||
viewport->update();
|
viewport->update();
|
||||||
} break;
|
} break;
|
||||||
case SHOW_GUIDES: {
|
case SHOW_GUIDES: {
|
||||||
|
@ -4531,6 +4532,7 @@ Dictionary CanvasItemEditor::get_state() const {
|
||||||
state["show_rulers"] = show_rulers;
|
state["show_rulers"] = show_rulers;
|
||||||
state["show_guides"] = show_guides;
|
state["show_guides"] = show_guides;
|
||||||
state["show_helpers"] = show_helpers;
|
state["show_helpers"] = show_helpers;
|
||||||
|
state["show_zoom_control"] = zoom_hb->is_visible();
|
||||||
state["show_edit_locks"] = show_edit_locks;
|
state["show_edit_locks"] = show_edit_locks;
|
||||||
state["snap_rotation"] = snap_rotation;
|
state["snap_rotation"] = snap_rotation;
|
||||||
state["snap_relative"] = snap_relative;
|
state["snap_relative"] = snap_relative;
|
||||||
|
@ -4541,6 +4543,7 @@ Dictionary CanvasItemEditor::get_state() const {
|
||||||
|
|
||||||
void CanvasItemEditor::set_state(const Dictionary &p_state) {
|
void CanvasItemEditor::set_state(const Dictionary &p_state) {
|
||||||
|
|
||||||
|
bool update_scrollbars = false;
|
||||||
Dictionary state = p_state;
|
Dictionary state = p_state;
|
||||||
if (state.has("zoom")) {
|
if (state.has("zoom")) {
|
||||||
zoom = p_state["zoom"];
|
zoom = p_state["zoom"];
|
||||||
|
@ -4549,7 +4552,7 @@ void CanvasItemEditor::set_state(const Dictionary &p_state) {
|
||||||
if (state.has("ofs")) {
|
if (state.has("ofs")) {
|
||||||
view_offset = p_state["ofs"];
|
view_offset = p_state["ofs"];
|
||||||
previous_update_view_offset = view_offset;
|
previous_update_view_offset = view_offset;
|
||||||
_update_scrollbars();
|
update_scrollbars = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state.has("grid_offset")) {
|
if (state.has("grid_offset")) {
|
||||||
|
@ -4637,6 +4640,7 @@ void CanvasItemEditor::set_state(const Dictionary &p_state) {
|
||||||
show_rulers = state["show_rulers"];
|
show_rulers = state["show_rulers"];
|
||||||
int idx = view_menu->get_popup()->get_item_index(SHOW_RULERS);
|
int idx = view_menu->get_popup()->get_item_index(SHOW_RULERS);
|
||||||
view_menu->get_popup()->set_item_checked(idx, show_rulers);
|
view_menu->get_popup()->set_item_checked(idx, show_rulers);
|
||||||
|
update_scrollbars = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state.has("show_guides")) {
|
if (state.has("show_guides")) {
|
||||||
|
@ -4657,6 +4661,11 @@ void CanvasItemEditor::set_state(const Dictionary &p_state) {
|
||||||
view_menu->get_popup()->set_item_checked(idx, show_edit_locks);
|
view_menu->get_popup()->set_item_checked(idx, show_edit_locks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (state.has("show_zoom_control")) {
|
||||||
|
// This one is not user-controllable, but instrumentable
|
||||||
|
zoom_hb->set_visible(state["show_zoom_control"]);
|
||||||
|
}
|
||||||
|
|
||||||
if (state.has("snap_rotation")) {
|
if (state.has("snap_rotation")) {
|
||||||
snap_rotation = state["snap_rotation"];
|
snap_rotation = state["snap_rotation"];
|
||||||
int idx = snap_config_menu->get_popup()->get_item_index(SNAP_USE_ROTATION);
|
int idx = snap_config_menu->get_popup()->get_item_index(SNAP_USE_ROTATION);
|
||||||
|
@ -4681,6 +4690,9 @@ void CanvasItemEditor::set_state(const Dictionary &p_state) {
|
||||||
skeleton_menu->get_popup()->set_item_checked(idx, skeleton_show_bones);
|
skeleton_menu->get_popup()->set_item_checked(idx, skeleton_show_bones);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (update_scrollbars) {
|
||||||
|
_update_scrollbars();
|
||||||
|
}
|
||||||
viewport->update();
|
viewport->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,9 @@ class Bone2D : public Node2D {
|
||||||
GDCLASS(Bone2D, Node2D)
|
GDCLASS(Bone2D, Node2D)
|
||||||
|
|
||||||
friend class Skeleton2D;
|
friend class Skeleton2D;
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
friend class AnimatedValuesBackup;
|
||||||
|
#endif
|
||||||
|
|
||||||
Bone2D *parent_bone;
|
Bone2D *parent_bone;
|
||||||
Skeleton2D *skeleton;
|
Skeleton2D *skeleton;
|
||||||
|
@ -71,6 +74,9 @@ class Skeleton2D : public Node2D {
|
||||||
GDCLASS(Skeleton2D, Node2D);
|
GDCLASS(Skeleton2D, Node2D);
|
||||||
|
|
||||||
friend class Bone2D;
|
friend class Bone2D;
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
friend class AnimatedValuesBackup;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct Bone {
|
struct Bone {
|
||||||
bool operator<(const Bone &p_bone) const {
|
bool operator<(const Bone &p_bone) const {
|
||||||
|
|
|
@ -37,12 +37,20 @@
|
||||||
|
|
||||||
#ifdef TOOLS_ENABLED
|
#ifdef TOOLS_ENABLED
|
||||||
#include "editor/editor_settings.h"
|
#include "editor/editor_settings.h"
|
||||||
|
#include "scene/2d/skeleton_2d.h"
|
||||||
|
|
||||||
void AnimatedValuesBackup::update_skeletons() {
|
void AnimatedValuesBackup::update_skeletons() {
|
||||||
|
|
||||||
for (int i = 0; i < entries.size(); i++) {
|
for (int i = 0; i < entries.size(); i++) {
|
||||||
if (entries[i].bone_idx != -1) {
|
if (entries[i].bone_idx != -1) {
|
||||||
|
// 3D bone
|
||||||
Object::cast_to<Skeleton>(entries[i].object)->notification(Skeleton::NOTIFICATION_UPDATE_SKELETON);
|
Object::cast_to<Skeleton>(entries[i].object)->notification(Skeleton::NOTIFICATION_UPDATE_SKELETON);
|
||||||
|
} else {
|
||||||
|
Bone2D *bone = Object::cast_to<Bone2D>(entries[i].object);
|
||||||
|
if (bone && bone->skeleton) {
|
||||||
|
// 2D bone
|
||||||
|
bone->skeleton->_update_transform();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue