Properly update range and valid key range when keys are in/out of view, fixes #19433
This commit is contained in:
parent
30491a88f3
commit
66871322b9
1 changed files with 30 additions and 30 deletions
|
@ -732,29 +732,6 @@ void AnimationTimelineEdit::_notification(int p_what) {
|
|||
if (l <= 0)
|
||||
l = 0.001; //avoid crashor
|
||||
|
||||
int end_px = (l - get_value()) * scale;
|
||||
int begin_px = -get_value() * scale;
|
||||
Color notimecol = get_color("dark_color_2", "Editor");
|
||||
Color timecolor = color;
|
||||
timecolor.a = 0.2;
|
||||
Color linecolor = color;
|
||||
linecolor.a = 0.2;
|
||||
|
||||
{
|
||||
|
||||
draw_rect(Rect2(Point2(get_name_limit(), 0), Point2(zoomw - 1, h)), notimecol);
|
||||
|
||||
if (begin_px < zoomw && end_px > 0) {
|
||||
|
||||
if (begin_px < 0)
|
||||
begin_px = 0;
|
||||
if (end_px > zoomw)
|
||||
end_px = zoomw;
|
||||
|
||||
draw_rect(Rect2(Point2(get_name_limit() + begin_px, 0), Point2(end_px - begin_px - 1, h)), timecolor);
|
||||
}
|
||||
}
|
||||
|
||||
Ref<Texture> hsize_icon = get_icon("Hsize", "EditorIcons");
|
||||
hsize_rect = Rect2(get_name_limit() - hsize_icon->get_width() - 2 * EDSCALE, (get_size().height - hsize_icon->get_height()) / 2, hsize_icon->get_width(), hsize_icon->get_height());
|
||||
draw_texture(hsize_icon, hsize_rect.position);
|
||||
|
@ -770,17 +747,17 @@ void AnimationTimelineEdit::_notification(int p_what) {
|
|||
if (animation->track_get_key_count(i) > 0) {
|
||||
|
||||
float beg = animation->track_get_key_time(i, 0);
|
||||
if (animation->track_get_type(i) == Animation::TYPE_BEZIER) {
|
||||
/*if (animation->track_get_type(i) == Animation::TYPE_BEZIER) {
|
||||
beg += animation->bezier_track_get_key_in_handle(i, 0).x;
|
||||
}
|
||||
}* not worth it since they have no use */
|
||||
|
||||
if (beg < time_min)
|
||||
time_min = beg;
|
||||
|
||||
float end = animation->track_get_key_time(i, animation->track_get_key_count(i) - 1);
|
||||
if (animation->track_get_type(i) == Animation::TYPE_BEZIER) {
|
||||
/*if (animation->track_get_type(i) == Animation::TYPE_BEZIER) {
|
||||
end += animation->bezier_track_get_key_out_handle(i, animation->track_get_key_count(i) - 1).x;
|
||||
}
|
||||
} not worth it since they have no use */
|
||||
|
||||
if (end > time_max)
|
||||
time_max = end;
|
||||
|
@ -806,6 +783,29 @@ void AnimationTimelineEdit::_notification(int p_what) {
|
|||
|
||||
set_page(zoomw / scale);
|
||||
|
||||
int end_px = (l - get_value()) * scale;
|
||||
int begin_px = -get_value() * scale;
|
||||
Color notimecol = get_color("dark_color_2", "Editor");
|
||||
Color timecolor = color;
|
||||
timecolor.a = 0.2;
|
||||
Color linecolor = color;
|
||||
linecolor.a = 0.2;
|
||||
|
||||
{
|
||||
|
||||
draw_rect(Rect2(Point2(get_name_limit(), 0), Point2(zoomw - 1, h)), notimecol);
|
||||
|
||||
if (begin_px < zoomw && end_px > 0) {
|
||||
|
||||
if (begin_px < 0)
|
||||
begin_px = 0;
|
||||
if (end_px > zoomw)
|
||||
end_px = zoomw;
|
||||
|
||||
draw_rect(Rect2(Point2(get_name_limit() + begin_px, 0), Point2(end_px - begin_px - 1, h)), timecolor);
|
||||
}
|
||||
}
|
||||
|
||||
Color color_time_sec = color;
|
||||
Color color_time_dec = color;
|
||||
color_time_dec.a *= 0.5;
|
||||
|
@ -964,7 +964,7 @@ void AnimationTimelineEdit::_gui_input(const Ref<InputEvent> &p_event) {
|
|||
if (!panning_timeline && mb->get_button_index() == BUTTON_LEFT) {
|
||||
int x = mb->get_position().x - get_name_limit();
|
||||
|
||||
float ofs = x / get_zoom_scale();
|
||||
float ofs = x / get_zoom_scale() + get_value();
|
||||
emit_signal("timeline_changed", ofs, false);
|
||||
dragging_timeline = true;
|
||||
}
|
||||
|
@ -997,7 +997,7 @@ void AnimationTimelineEdit::_gui_input(const Ref<InputEvent> &p_event) {
|
|||
}
|
||||
if (dragging_timeline) {
|
||||
int x = mm->get_position().x - get_name_limit();
|
||||
float ofs = x / get_zoom_scale();
|
||||
float ofs = x / get_zoom_scale() + get_value();
|
||||
emit_signal("timeline_changed", ofs, false);
|
||||
}
|
||||
if (panning_timeline) {
|
||||
|
@ -1941,7 +1941,6 @@ void AnimationTrackEdit::_gui_input(const Ref<InputEvent> &p_event) {
|
|||
offset = offset * scale + limit;
|
||||
rect.position.x += offset;
|
||||
|
||||
print_line("rect: " + rect + " pos: " + pos);
|
||||
if (rect.has_point(pos)) {
|
||||
|
||||
if (is_key_selectable_by_distance()) {
|
||||
|
@ -3391,6 +3390,7 @@ void AnimationTrackEditor::_update_tracks() {
|
|||
|
||||
void AnimationTrackEditor::_animation_changed() {
|
||||
|
||||
timeline->update();
|
||||
timeline->update_values();
|
||||
if (block_animation_update) {
|
||||
for (int i = 0; i < track_edits.size(); i++) {
|
||||
|
|
Loading…
Reference in a new issue