Track *track;
MaskPoint *point;
SubMask *mask;
+ int total_points = 0;
// Get existing keyframe
((CWindowMaskGUI*)gui)->get_keyframe(track, autos, keyframe, mask, point, 0);
submask->points.remove_object(
submask->points.values[submask->points.total - 1]);
}
+ total_points = submask->points.total;
+
// Commit change to span of keyframes
((MaskAutos*)track->automation->autos[AUTOMATION_MASK])->update_parameter(&temp_keyframe);
#else
{
SubMask *submask = current->get_submask(mwindow->edl->session->cwindow_mask);
-
-
for(int i = mwindow->cwindow->gui->affected_point;
i < submask->points.total - 1;
i++)
submask->points.remove_object(
submask->points.values[submask->points.total - 1]);
}
-
+ total_points = submask->points.total;
if(current == (MaskAuto*)autos->default_auto)
current = (MaskAuto*)autos->first;
current = (MaskAuto*)NEXT;
}
#endif
+ if( mwindow->cwindow->gui->affected_point >= total_points )
+ mwindow->cwindow->gui->affected_point =
+ total_points > 0 ? total_points-1 : 0;
gui->update();
gui->update_preview();
}
+CWindowMaskAffectedPoint::CWindowMaskAffectedPoint(MWindow *mwindow,
+ CWindowToolGUI *gui, int x, int y)
+ : BC_TumbleTextBox(gui,
+ (int64_t)mwindow->cwindow->gui->affected_point,
+ (int64_t)0, INT64_MAX, x, y, 100)
+{
+ this->mwindow = mwindow;
+ this->gui = gui;
+}
+
+CWindowMaskAffectedPoint::~CWindowMaskAffectedPoint()
+{
+}
+
+int CWindowMaskAffectedPoint::handle_event()
+{
+ int total_points = 0;
+ int affected_point = atol(get_text());
+ Track *track = mwindow->cwindow->calculate_affected_track();
+ if(track) {
+ MaskAutos *autos = (MaskAutos*)track->automation->autos[AUTOMATION_MASK];
+ MaskAuto *keyframe = (MaskAuto*)mwindow->cwindow->calculate_affected_auto(autos, 0);
+ if( keyframe ) {
+ SubMask *mask = keyframe->get_submask(mwindow->edl->session->cwindow_mask);
+ total_points = mask->points.size();
+ }
+ }
+ int active_point = affected_point;
+ if( affected_point >= total_points )
+ affected_point = total_points - 1;
+ else if( affected_point < 0 )
+ affected_point = 0;
+ if( active_point != affected_point )
+ update((int64_t)affected_point);
+ mwindow->cwindow->gui->affected_point = affected_point;
+ gui->update();
+ gui->update_preview();
+ return 1;
+}
+
+
{
this->mwindow = mwindow;
this->thread = thread;
+ number = 0;
+ active_point = 0;
+ feather = 0;
}
CWindowMaskGUI::~CWindowMaskGUI()
{
lock_window("CWindowMaskGUI::~CWindowMaskGUI");
delete number;
+ delete active_point;
delete feather;
unlock_window();
}
add_subwindow(value = new CWindowMaskValue(mwindow, this, x + title->get_w() + margin, y));
y += value->get_h() + margin;
add_subwindow(delete_point = new CWindowMaskDelete(mwindow, this, x, y));
+ int x1 = x + delete_point->get_w() + 2*margin;
+ add_subwindow(title = new BC_Title(x1, y, _("Point:")));
+ x1 += title->get_w() + margin;
+ active_point = new CWindowMaskAffectedPoint(mwindow, this, x1, y);
+ active_point->create_objects();
y += delete_point->get_h() + margin;
add_subwindow(title = new BC_Title(x, y, _("Mask number:")));
number = new CWindowMaskNumber(mwindow,
apply_before_plugins->update((int64_t)keyframe->apply_before_plugins);
}
}
-//printf("CWindowMaskGUI::update 1\n");
+//printf("CWindowMaskGUI::update 1\n");
+ active_point->update((int64_t)mwindow->cwindow->gui->affected_point);
number->update((int64_t)mwindow->edl->session->cwindow_mask);
//printf("CWindowMaskGUI::update 1\n");