diff --git a/effects/internal/transformeffect.cpp b/effects/internal/transformeffect.cpp index 0b7466dd5..352e0a6e6 100644 --- a/effects/internal/transformeffect.cpp +++ b/effects/internal/transformeffect.cpp @@ -119,24 +119,52 @@ TransformEffect::TransformEffect(Clip* c, const EffectMeta* em) : Effect(c, em) // set defaults uniform_scale_field->set_bool_value(true); blend_mode_box->set_combo_index(0); + set = false; refresh(); } +void adjust_field(EffectField* field, double old_offset, double new_offset) { + if (field->keyframes.size() > 0) { + for (int i=0;ikeyframes.size();i++) { + field->keyframes[i].data = field->keyframes.at(i).data.toDouble() - old_offset + new_offset; + } + } else { + field->set_current_data(field->get_current_data().toDouble() - old_offset + new_offset); + } +} + void TransformEffect::refresh() { if (parent_clip != NULL && parent_clip->sequence != NULL) { - double default_pos_x = parent_clip->sequence->width/2; - double default_pos_y = parent_clip->sequence->height/2; + double new_default_pos_x = parent_clip->sequence->width/2; + double new_default_pos_y = parent_clip->sequence->height/2; + + /*if (set) { + adjust_field(position_x, default_pos_x, new_default_pos_x); + adjust_field(position_y, default_pos_y, new_default_pos_y); + }*/ + + default_pos_x = new_default_pos_x; + default_pos_y = new_default_pos_y; position_x->set_double_default_value(default_pos_x); position_y->set_double_default_value(default_pos_y); scale_x->set_double_default_value(100); scale_y->set_double_default_value(100); - default_anchor_x = parent_clip->getWidth()/2; - default_anchor_y = parent_clip->getHeight()/2; + int new_default_anchor_x = parent_clip->getWidth()/2; + int new_default_anchor_y = parent_clip->getHeight()/2; - if (default_anchor_x == 0) default_anchor_x = default_pos_x; - if (default_anchor_y == 0) default_anchor_y = default_pos_y; + if (new_default_anchor_x == 0) new_default_anchor_x = default_pos_x; + if (new_default_anchor_y == 0) new_default_anchor_y = default_pos_y; + + // adjust anchors for new size + if (set) { + adjust_field(anchor_x_box, default_anchor_x, new_default_anchor_x); + adjust_field(anchor_y_box, default_anchor_y, new_default_anchor_y); + } + + default_anchor_x = new_default_anchor_x; + default_anchor_y = new_default_anchor_y; anchor_x_box->set_double_default_value(default_anchor_x); anchor_y_box->set_double_default_value(default_anchor_y); @@ -157,6 +185,8 @@ void TransformEffect::refresh() { left_center_gizmo->x_field_multi1 = -x_percent_multipler; right_center_gizmo->x_field_multi1 = x_percent_multipler; rotate_gizmo->x_field_multi1 = x_percent_multipler; + + set = true; } } diff --git a/effects/internal/transformeffect.h b/effects/internal/transformeffect.h index c198ffb0a..c20ff6a6d 100644 --- a/effects/internal/transformeffect.h +++ b/effects/internal/transformeffect.h @@ -39,6 +39,9 @@ private: int default_anchor_x; int default_anchor_y; + double default_pos_x; + double default_pos_y; + bool set; }; #endif // TRANSFORMEFFECT_H