decoupled ui from effect row
This commit is contained in:
+37
-37
@@ -120,15 +120,15 @@ void GraphView::set_view_to_selection() {
|
||||
double min_dbl = DBL_MAX;
|
||||
double max_dbl = DBL_MIN;
|
||||
for (int i=0;i<selected_keys.size();i++) {
|
||||
const EffectKeyframe& key = row->field(selected_keys_fields.at(i))->keyframes.at(selected_keys.at(i));
|
||||
const EffectKeyframe& key = row->Field(selected_keys_fields.at(i))->keyframes.at(selected_keys.at(i));
|
||||
min_time = qMin(key.time, min_time);
|
||||
max_time = qMax(key.time, max_time);
|
||||
min_dbl = qMin(key.data.toDouble(), min_dbl);
|
||||
max_dbl = qMax(key.data.toDouble(), max_dbl);
|
||||
}
|
||||
|
||||
min_time -= row->parent_effect->parent_clip->clip_in();
|
||||
max_time -= row->parent_effect->parent_clip->clip_in();
|
||||
min_time -= row->GetParentEffect()->parent_clip->clip_in();
|
||||
max_time -= row->GetParentEffect()->parent_clip->clip_in();
|
||||
|
||||
set_view_to_rect(min_time, min_dbl, max_time, max_dbl);
|
||||
}
|
||||
@@ -142,9 +142,9 @@ void GraphView::set_view_to_all() {
|
||||
long max_time = LONG_MIN;
|
||||
double min_dbl = DBL_MAX;
|
||||
double max_dbl = DBL_MIN;
|
||||
for (int i=0;i<row->fieldCount();i++) {
|
||||
for (int j=0;j<row->field(i)->keyframes.size();j++) {
|
||||
const EffectKeyframe& key = row->field(i)->keyframes.at(j);
|
||||
for (int i=0;i<row->FieldCount();i++) {
|
||||
for (int j=0;j<row->Field(i)->keyframes.size();j++) {
|
||||
const EffectKeyframe& key = row->Field(i)->keyframes.at(j);
|
||||
min_time = qMin(key.time, min_time);
|
||||
max_time = qMax(key.time, max_time);
|
||||
min_dbl = qMin(key.data.toDouble(), min_dbl);
|
||||
@@ -153,8 +153,8 @@ void GraphView::set_view_to_all() {
|
||||
}
|
||||
}
|
||||
if (can_set) {
|
||||
min_time -= row->parent_effect->parent_clip->clip_in();
|
||||
max_time -= row->parent_effect->parent_clip->clip_in();
|
||||
min_time -= row->GetParentEffect()->parent_clip->clip_in();
|
||||
max_time -= row->GetParentEffect()->parent_clip->clip_in();
|
||||
|
||||
set_view_to_rect(min_time, min_dbl, max_time, max_dbl);
|
||||
}
|
||||
@@ -242,8 +242,8 @@ void GraphView::paintEvent(QPaintEvent *) {
|
||||
QPen line_pen;
|
||||
line_pen.setWidth(kBezierLineSize);
|
||||
|
||||
for (int i=row->fieldCount()-1;i>=0;i--) {
|
||||
EffectField* field = row->field(i);
|
||||
for (int i=row->FieldCount()-1;i>=0;i--) {
|
||||
EffectField* field = row->Field(i);
|
||||
|
||||
if (field->type() == EffectField::EFFECT_FIELD_DOUBLE && field_visibility.at(i)) {
|
||||
// sort keyframes by time
|
||||
@@ -259,7 +259,7 @@ void GraphView::paintEvent(QPaintEvent *) {
|
||||
int key_x = get_screen_x(key.time);
|
||||
int key_y = get_screen_y(key.data.toDouble());
|
||||
|
||||
line_pen.setColor(get_curve_color(i, row->fieldCount()));
|
||||
line_pen.setColor(get_curve_color(i, row->FieldCount()));
|
||||
p.setPen(line_pen);
|
||||
if (j == 0) {
|
||||
p.drawLine(0, key_y, key_x, key_y);
|
||||
@@ -385,8 +385,8 @@ void GraphView::mousePressEvent(QMouseEvent *event) {
|
||||
update_ui(false);
|
||||
click_add_proc = true;
|
||||
} else {
|
||||
for (int i=0;i<row->fieldCount();i++) {
|
||||
EffectField* field = row->field(i);
|
||||
for (int i=0;i<row->FieldCount();i++) {
|
||||
EffectField* field = row->Field(i);
|
||||
if (field->type() == EffectField::EFFECT_FIELD_DOUBLE && field_visibility.at(i)) {
|
||||
for (int j=0;j<field->keyframes.size();j++) {
|
||||
const EffectKeyframe& key = field->keyframes.at(j);
|
||||
@@ -488,8 +488,8 @@ void GraphView::mouseMoveEvent(QMouseEvent *event) {
|
||||
selected_keys.resize(rect_select_offset);
|
||||
selected_keys_fields.resize(rect_select_offset);
|
||||
|
||||
for (int i=0;i<row->fieldCount();i++) {
|
||||
EffectField* f = row->field(i);
|
||||
for (int i=0;i<row->FieldCount();i++) {
|
||||
EffectField* f = row->Field(i);
|
||||
for (int j=0;j<f->keyframes.size();j++) {
|
||||
bool already_selected = false;
|
||||
for (int k=0;k<selected_keys.size();k++) {
|
||||
@@ -514,11 +514,11 @@ void GraphView::mouseMoveEvent(QMouseEvent *event) {
|
||||
switch (current_handle) {
|
||||
case kBezierHandleNone:
|
||||
for (int i=0;i<selected_keys.size();i++) {
|
||||
row->field(selected_keys_fields.at(i))->keyframes[selected_keys.at(i)].time = qRound(selected_keys_old_vals.at(i) + (double(event->pos().x() - start_x)/x_zoom));
|
||||
row->Field(selected_keys_fields.at(i))->keyframes[selected_keys.at(i)].time = qRound(selected_keys_old_vals.at(i) + (double(event->pos().x() - start_x)/x_zoom));
|
||||
if (event->modifiers() & Qt::ShiftModifier) {
|
||||
row->field(selected_keys_fields.at(i))->keyframes[selected_keys.at(i)].data = selected_keys_old_doubles.at(i);
|
||||
row->Field(selected_keys_fields.at(i))->keyframes[selected_keys.at(i)].data = selected_keys_old_doubles.at(i);
|
||||
} else {
|
||||
row->field(selected_keys_fields.at(i))->keyframes[selected_keys.at(i)].data = qRound(selected_keys_old_doubles.at(i) + (double(start_y - event->pos().y())/y_zoom));
|
||||
row->Field(selected_keys_fields.at(i))->keyframes[selected_keys.at(i)].data = qRound(selected_keys_old_doubles.at(i) + (double(start_y - event->pos().y())/y_zoom));
|
||||
}
|
||||
}
|
||||
moved_keys = true;
|
||||
@@ -551,7 +551,7 @@ void GraphView::mouseMoveEvent(QMouseEvent *event) {
|
||||
}
|
||||
}
|
||||
|
||||
EffectKeyframe& key = row->field(handle_field)->keyframes[handle_index];
|
||||
EffectKeyframe& key = row->Field(handle_field)->keyframes[handle_index];
|
||||
key.pre_handle_x = qMin(0.0, new_pre_handle_x);
|
||||
key.pre_handle_y = new_pre_handle_y;
|
||||
key.post_handle_x = qMax(0.0, new_post_handle_x);
|
||||
@@ -569,9 +569,9 @@ void GraphView::mouseMoveEvent(QMouseEvent *event) {
|
||||
|
||||
bool hovering_key = false;
|
||||
|
||||
for (int i=0;i<row->fieldCount();i++) {
|
||||
for (int j=0;j<row->field(i)->keyframes.size();j++) {
|
||||
const EffectKeyframe& key = row->field(i)->keyframes.at(j);
|
||||
for (int i=0;i<row->FieldCount();i++) {
|
||||
for (int j=0;j<row->Field(i)->keyframes.size();j++) {
|
||||
const EffectKeyframe& key = row->Field(i)->keyframes.at(j);
|
||||
int key_x = get_screen_x(key.time);
|
||||
int key_y = get_screen_y(key.data.toDouble());
|
||||
QRect test_rect(
|
||||
@@ -603,8 +603,8 @@ void GraphView::mouseMoveEvent(QMouseEvent *event) {
|
||||
}
|
||||
|
||||
if (!hovering_key) {
|
||||
for (int i=0;i<row->fieldCount();i++) {
|
||||
EffectField* f = row->field(i);
|
||||
for (int i=0;i<row->FieldCount();i++) {
|
||||
EffectField* f = row->Field(i);
|
||||
if (field_visibility.at(i)) {
|
||||
QVector<int> sorted_keys = sort_keys_from_field(f);
|
||||
|
||||
@@ -708,7 +708,7 @@ void GraphView::mouseReleaseEvent(QMouseEvent *) {
|
||||
switch (current_handle) {
|
||||
case kBezierHandleNone:
|
||||
for (int i=0;i<selected_keys.size();i++) {
|
||||
EffectKeyframe& key = row->field(selected_keys_fields.at(i))->keyframes[selected_keys.at(i)];
|
||||
EffectKeyframe& key = row->Field(selected_keys_fields.at(i))->keyframes[selected_keys.at(i)];
|
||||
ca->append(new SetLong(&key.time, selected_keys_old_vals.at(i), key.time));
|
||||
ca->append(new SetQVariant(&key.data, selected_keys_old_doubles.at(i), key.data));
|
||||
}
|
||||
@@ -716,7 +716,7 @@ void GraphView::mouseReleaseEvent(QMouseEvent *) {
|
||||
case kBezierHandlePre:
|
||||
case kBezierHandlePost:
|
||||
{
|
||||
EffectKeyframe& key = row->field(handle_field)->keyframes[handle_index];
|
||||
EffectKeyframe& key = row->Field(handle_field)->keyframes[handle_index];
|
||||
ca->append(new SetDouble(&key.pre_handle_x, old_pre_handle_x, key.pre_handle_x));
|
||||
ca->append(new SetDouble(&key.pre_handle_y, old_pre_handle_y, key.pre_handle_y));
|
||||
ca->append(new SetDouble(&key.post_handle_x, old_post_handle_x, key.post_handle_x));
|
||||
@@ -831,11 +831,11 @@ void GraphView::set_row(EffectRow *r) {
|
||||
emit selection_changed(false, -1);
|
||||
row = r;
|
||||
if (row != nullptr) {
|
||||
field_visibility.resize(row->fieldCount());
|
||||
for (int i=0;i<row->fieldCount();i++) {
|
||||
field_visibility[i] = row->field(i)->IsEnabled();
|
||||
field_visibility.resize(row->FieldCount());
|
||||
for (int i=0;i<row->FieldCount();i++) {
|
||||
field_visibility[i] = row->Field(i)->IsEnabled();
|
||||
}
|
||||
visible_in = row->parent_effect->parent_clip->timeline_in();
|
||||
visible_in = row->GetParentEffect()->parent_clip->timeline_in();
|
||||
set_view_to_all();
|
||||
} else {
|
||||
update();
|
||||
@@ -847,7 +847,7 @@ void GraphView::set_selected_keyframe_type(int type) {
|
||||
if (selected_keys.size() > 0) {
|
||||
ComboAction* ca = new ComboAction();
|
||||
for (int i=0;i<selected_keys.size();i++) {
|
||||
EffectKeyframe& key = row->field(selected_keys_fields.at(i))->keyframes[selected_keys.at(i)];
|
||||
EffectKeyframe& key = row->Field(selected_keys_fields.at(i))->keyframes[selected_keys.at(i)];
|
||||
ca->append(new SetInt(&key.type, type));
|
||||
}
|
||||
olive::UndoStack.push(ca);
|
||||
@@ -864,7 +864,7 @@ void GraphView::delete_selected_keys() {
|
||||
if (row != nullptr) {
|
||||
QVector<EffectField*> fields;
|
||||
for (int i=0;i<selected_keys_fields.size();i++) {
|
||||
fields.append(row->field(selected_keys_fields.at(i)));
|
||||
fields.append(row->Field(selected_keys_fields.at(i)));
|
||||
}
|
||||
delete_keyframes(fields, selected_keys);
|
||||
}
|
||||
@@ -874,8 +874,8 @@ void GraphView::select_all() {
|
||||
if (row != nullptr) {
|
||||
selected_keys.clear();
|
||||
selected_keys_fields.clear();
|
||||
for (int i=0;i<row->fieldCount();i++) {
|
||||
EffectField* field = row->field(i);
|
||||
for (int i=0;i<row->FieldCount();i++) {
|
||||
EffectField* field = row->Field(i);
|
||||
for (int j=0;j<field->keyframes.size();j++) {
|
||||
selected_keys.append(j);
|
||||
selected_keys_fields.append(i);
|
||||
@@ -903,7 +903,7 @@ void GraphView::set_zoom(double xz, double yz) {
|
||||
|
||||
int GraphView::get_screen_x(double d) {
|
||||
if (row != nullptr) {
|
||||
d -= row->parent_effect->parent_clip->clip_in();
|
||||
d -= row->GetParentEffect()->parent_clip->clip_in();
|
||||
}
|
||||
return qRound((d*x_zoom) - x_scroll);
|
||||
}
|
||||
@@ -915,7 +915,7 @@ int GraphView::get_screen_y(double d) {
|
||||
long GraphView::get_value_x(int i) {
|
||||
long frame = qRound((i + x_scroll)/x_zoom);
|
||||
if (row != nullptr) {
|
||||
frame += row->parent_effect->parent_clip->clip_in();
|
||||
frame += row->GetParentEffect()->parent_clip->clip_in();
|
||||
}
|
||||
return frame;
|
||||
}
|
||||
@@ -931,7 +931,7 @@ void GraphView::selection_update() {
|
||||
int selected_key_type = -1;
|
||||
|
||||
for (int i=0;i<selected_keys.size();i++) {
|
||||
const EffectKeyframe& key = row->field(selected_keys_fields.at(i))->keyframes.at(selected_keys.at(i));
|
||||
const EffectKeyframe& key = row->Field(selected_keys_fields.at(i))->keyframes.at(selected_keys.at(i));
|
||||
selected_keys_old_vals.append(key.time);
|
||||
selected_keys_old_doubles.append(key.data.toDouble());
|
||||
|
||||
|
||||
+24
-24
@@ -27,35 +27,35 @@
|
||||
|
||||
// routine for drawing a keyframe onscreen
|
||||
void draw_keyframe(QPainter &p, int type, int x, int y, bool darker, int r, int g, int b) {
|
||||
if (darker) {
|
||||
r *= 0.625;
|
||||
g *= 0.625;
|
||||
b *= 0.625;
|
||||
}
|
||||
p.setPen(QColor(0, 0, 0));
|
||||
p.setBrush(QColor(r, g, b));
|
||||
if (darker) {
|
||||
r *= 0.625;
|
||||
g *= 0.625;
|
||||
b *= 0.625;
|
||||
}
|
||||
p.setPen(QColor(0, 0, 0));
|
||||
p.setBrush(QColor(r, g, b));
|
||||
|
||||
switch (type) {
|
||||
case EFFECT_KEYFRAME_LINEAR:
|
||||
{
|
||||
QPoint points[KEYFRAME_POINT_COUNT] = {QPoint(x-KEYFRAME_SIZE, y), QPoint(x, y-KEYFRAME_SIZE), QPoint(x+KEYFRAME_SIZE, y), QPoint(x, y+KEYFRAME_SIZE)};
|
||||
p.drawPolygon(points, KEYFRAME_POINT_COUNT);
|
||||
}
|
||||
break;
|
||||
case EFFECT_KEYFRAME_BEZIER:
|
||||
p.drawEllipse(QPoint(x, y), KEYFRAME_SIZE, KEYFRAME_SIZE);
|
||||
break;
|
||||
case EFFECT_KEYFRAME_HOLD:
|
||||
p.drawRect(QRect(x - KEYFRAME_SIZE, y - KEYFRAME_SIZE, KEYFRAME_SIZE*2, KEYFRAME_SIZE*2));
|
||||
break;
|
||||
}
|
||||
switch (type) {
|
||||
case EFFECT_KEYFRAME_LINEAR:
|
||||
{
|
||||
QPoint points[KEYFRAME_POINT_COUNT] = {QPoint(x-KEYFRAME_SIZE, y), QPoint(x, y-KEYFRAME_SIZE), QPoint(x+KEYFRAME_SIZE, y), QPoint(x, y+KEYFRAME_SIZE)};
|
||||
p.drawPolygon(points, KEYFRAME_POINT_COUNT);
|
||||
}
|
||||
break;
|
||||
case EFFECT_KEYFRAME_BEZIER:
|
||||
p.drawEllipse(QPoint(x, y), KEYFRAME_SIZE, KEYFRAME_SIZE);
|
||||
break;
|
||||
case EFFECT_KEYFRAME_HOLD:
|
||||
p.drawRect(QRect(x - KEYFRAME_SIZE, y - KEYFRAME_SIZE, KEYFRAME_SIZE*2, KEYFRAME_SIZE*2));
|
||||
break;
|
||||
}
|
||||
|
||||
p.setBrush(Qt::NoBrush);
|
||||
p.setBrush(Qt::NoBrush);
|
||||
}
|
||||
|
||||
// adjusts keyframe's internal time (in clip time) to timeline time
|
||||
long adjust_row_keyframe(EffectRow* row, long time, long visible_in) {
|
||||
return time
|
||||
- row->parent_effect->parent_clip->clip_in()
|
||||
+ (row->parent_effect->parent_clip->timeline_in() - visible_in);
|
||||
- row->GetParentEffect()->parent_clip->clip_in()
|
||||
+ (row->GetParentEffect()->parent_clip->timeline_in() - visible_in);
|
||||
}
|
||||
|
||||
+29
-18
@@ -119,13 +119,22 @@ void KeyframeView::paintEvent(QPaintEvent*) {
|
||||
for (int j=0;j<e->row_count();j++) {
|
||||
EffectRow* row = e->row(j);
|
||||
|
||||
// TODO address this
|
||||
|
||||
/*
|
||||
|
||||
ClickableLabel* label = row->label;
|
||||
QWidget* contents = e->container->contents;
|
||||
|
||||
QVector<long> key_times;
|
||||
int keyframe_y = label->y() + (label->height()>>1) + mapFrom(panel_effect_controls, contents->mapTo(panel_effect_controls, contents->pos())).y() - e->container->title_bar->height()/* - y_scroll*/;
|
||||
for (int l=0;l<row->fieldCount();l++) {
|
||||
EffectField* f = row->field(l);
|
||||
|
||||
int keyframe_y = label->y()
|
||||
+ (label->height()>>1)
|
||||
+ mapFrom(panel_effect_controls, contents->mapTo(panel_effect_controls, contents->pos())).y()
|
||||
- e->container->title_bar->height();
|
||||
|
||||
for (int l=0;l<row->FieldCount();l++) {
|
||||
EffectField* f = row->Field(l);
|
||||
for (int k=0;k<f->keyframes.size();k++) {
|
||||
if (!key_times.contains(f->keyframes.at(k).time)) {
|
||||
bool keyframe_selected = keyframeIsSelected(f, k);
|
||||
@@ -133,8 +142,8 @@ void KeyframeView::paintEvent(QPaintEvent*) {
|
||||
|
||||
// see if any other keyframes have this time
|
||||
int appearances = 0;
|
||||
for (int m=0;m<row->fieldCount();m++) {
|
||||
EffectField* compf = row->field(m);
|
||||
for (int m=0;m<row->FieldCount();m++) {
|
||||
EffectField* compf = row->Field(m);
|
||||
for (int n=0;n<compf->keyframes.size();n++) {
|
||||
if (f->keyframes.at(k).time == compf->keyframes.at(n).time) {
|
||||
appearances++;
|
||||
@@ -142,8 +151,8 @@ void KeyframeView::paintEvent(QPaintEvent*) {
|
||||
}
|
||||
}
|
||||
|
||||
if (appearances != row->fieldCount()) {
|
||||
QColor cc = get_curve_color(l, row->fieldCount());
|
||||
if (appearances != row->FieldCount()) {
|
||||
QColor cc = get_curve_color(l, row->FieldCount());
|
||||
draw_keyframe(p, f->keyframes.at(k).type, getScreenPointFromFrame(panel_effect_controls->zoom, keyframe_frame) - x_scroll, keyframe_y, keyframe_selected, cc.red(), cc.green(), cc.blue());
|
||||
} else {
|
||||
draw_keyframe(p, f->keyframes.at(k).type, getScreenPointFromFrame(panel_effect_controls->zoom, keyframe_frame) - x_scroll, keyframe_y, keyframe_selected);
|
||||
@@ -156,6 +165,8 @@ void KeyframeView::paintEvent(QPaintEvent*) {
|
||||
|
||||
rows.append(row);
|
||||
rowY.append(keyframe_y);
|
||||
|
||||
*/
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -252,10 +263,10 @@ void KeyframeView::mousePressEvent(QMouseEvent *event) {
|
||||
|
||||
row->FocusRow();
|
||||
|
||||
for (int k=0;k<row->fieldCount();k++) {
|
||||
EffectField* f = row->field(k);
|
||||
for (int k=0;k<row->FieldCount();k++) {
|
||||
EffectField* f = row->Field(k);
|
||||
for (int j=0;j<f->keyframes.size();j++) {
|
||||
long eval_keyframe_time = f->keyframes.at(j).time-row->parent_effect->parent_clip->clip_in()+(row->parent_effect->parent_clip->timeline_in()-visible_in);
|
||||
long eval_keyframe_time = f->keyframes.at(j).time-row->GetParentEffect()->parent_clip->clip_in()+(row->GetParentEffect()->parent_clip->timeline_in()-visible_in);
|
||||
if (eval_keyframe_time >= frame_min && eval_keyframe_time <= frame_max) {
|
||||
long eval_frame_diff = qAbs(eval_keyframe_time - drag_frame_start);
|
||||
if (keyframe_index == -1 || eval_frame_diff < frame_diff) {
|
||||
@@ -273,7 +284,7 @@ void KeyframeView::mousePressEvent(QMouseEvent *event) {
|
||||
bool already_selected = false;
|
||||
keys_selected = false;
|
||||
if (keyframe_index > -1) {
|
||||
already_selected = keyframeIsSelected(rows.at(row_index)->field(field_index), keyframe_index);
|
||||
already_selected = keyframeIsSelected(rows.at(row_index)->Field(field_index), keyframe_index);
|
||||
} else {
|
||||
select_rect = true;
|
||||
}
|
||||
@@ -283,14 +294,14 @@ void KeyframeView::mousePressEvent(QMouseEvent *event) {
|
||||
selected_keyframes.clear();
|
||||
}
|
||||
if (keyframe_index > -1) {
|
||||
selected_fields.append(rows.at(row_index)->field(field_index));
|
||||
selected_fields.append(rows.at(row_index)->Field(field_index));
|
||||
selected_keyframes.append(keyframe_index);
|
||||
|
||||
// find other field with keyframes at the same time
|
||||
long comp_time = rows.at(row_index)->field(field_index)->keyframes.at(keyframe_index).time;
|
||||
for (int i=0;i<rows.at(row_index)->fieldCount();i++) {
|
||||
long comp_time = rows.at(row_index)->Field(field_index)->keyframes.at(keyframe_index).time;
|
||||
for (int i=0;i<rows.at(row_index)->FieldCount();i++) {
|
||||
if (i != field_index) {
|
||||
EffectField* f = rows.at(row_index)->field(i);
|
||||
EffectField* f = rows.at(row_index)->Field(i);
|
||||
for (int j=0;j<f->keyframes.size();j++) {
|
||||
if (f->keyframes.at(j).time == comp_time) {
|
||||
selected_fields.append(f);
|
||||
@@ -353,8 +364,8 @@ void KeyframeView::mouseMoveEvent(QMouseEvent* event) {
|
||||
for (int i=0;i<rowY.size();i++) {
|
||||
if (rowY.at(i) >= min_row && rowY.at(i) <= max_row) {
|
||||
EffectRow* row = rows.at(i);
|
||||
for (int k=0;k<row->fieldCount();k++) {
|
||||
EffectField* field = row->field(k);
|
||||
for (int k=0;k<row->FieldCount();k++) {
|
||||
EffectField* field = row->Field(k);
|
||||
for (int j=0;j<field->keyframes.size();j++) {
|
||||
long keyframe_frame = adjust_row_keyframe(row, field->keyframes.at(j).time, visible_in);
|
||||
if (!keyframeIsSelected(field, j) && keyframe_frame >= min_frame && keyframe_frame <= max_frame) {
|
||||
@@ -376,7 +387,7 @@ void KeyframeView::mouseMoveEvent(QMouseEvent* event) {
|
||||
if (panel_timeline->snapping) {
|
||||
for (int i=0;i<selected_keyframes.size();i++) {
|
||||
EffectField* field = selected_fields.at(i);
|
||||
Clip* c = field->GetParentRow()->parent_effect->parent_clip;
|
||||
Clip* c = field->GetParentRow()->GetParentEffect()->parent_clip;
|
||||
long key_time = old_key_vals.at(i) + frame_diff - c->clip_in() + c->timeline_in();
|
||||
long key_eval = key_time;
|
||||
if (panel_timeline->snap_to_point(olive::ActiveSequence->playhead, &key_eval)) {
|
||||
|
||||
Reference in New Issue
Block a user