X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fcwindowtool.C;h=026aa32003c605075a1929435ab5370073a57d78;hp=4730d81de975816b71ab68391508ba2cf40f33b7;hb=21c2e6b36d6a96c2f662a89459d607b5a387f4eb;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd diff --git a/cinelerra-5.1/cinelerra/cwindowtool.C b/cinelerra-5.1/cinelerra/cwindowtool.C index 4730d81d..026aa320 100644 --- a/cinelerra-5.1/cinelerra/cwindowtool.C +++ b/cinelerra-5.1/cinelerra/cwindowtool.C @@ -19,6 +19,9 @@ * */ +#include +#include + #include "automation.h" #include "cicolors.h" #include "clip.h" @@ -457,10 +460,6 @@ void CWindowCropGUI::update() } - - - - CWindowEyedropGUI::CWindowEyedropGUI(MWindow *mwindow, CWindowTool *thread) : CWindowToolGUI(mwindow, thread, @@ -590,28 +589,27 @@ const _CVD Camera_Crv_Smooth = { FloatAuto::SMOOTH, true, "tan_smooth", - _("\"smooth\" Curve on current Camera Keyframes") + N_("\"smooth\" Curve on current Camera Keyframes") }; const _CVD Camera_Crv_Linear = { FloatAuto::LINEAR, true, "tan_linear", - _("\"linear\" Curve on current Camera Keyframes") + N_("\"linear\" Curve on current Camera Keyframes") }; const _CVD Projector_Crv_Smooth = { FloatAuto::SMOOTH, false, "tan_smooth", - _("\"smooth\" Curve on current Projector Keyframes") + N_("\"smooth\" Curve on current Projector Keyframes") }; const _CVD Projector_Crv_Linear = { FloatAuto::LINEAR, false, "tan_linear", - _("\"linear\" Curve on current Projector Keyframes") + N_("\"linear\" Curve on current Projector Keyframes") }; - // Implementation Class für Keyframe Curve Mode buttons // // This button reflects the state of the "current" keyframe @@ -639,7 +637,7 @@ CWindowCurveToggle::CWindowCurveToggle(_CVD mode, MWindow *mwindow, CWindowToolG { this->gui = gui; this->mwindow = mwindow; - set_tooltip(cfg.tooltip); + set_tooltip(_(cfg.tooltip)); } void CWindowCurveToggle::check_toggle_state(FloatAuto *x, FloatAuto *y, FloatAuto *z) @@ -675,10 +673,6 @@ int CWindowCurveToggle::handle_event() } - - - - CWindowCameraGUI::CWindowCameraGUI(MWindow *mwindow, CWindowTool *thread) : CWindowToolGUI(mwindow, thread, @@ -1120,21 +1114,6 @@ int CWindowCameraBottom::handle_event() } - - - - - - - - - - - - - - - CWindowProjectorGUI::CWindowProjectorGUI(MWindow *mwindow, CWindowTool *thread) : CWindowToolGUI(mwindow, thread, @@ -1330,44 +1309,6 @@ void CWindowProjectorGUI::update() } } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CWindowProjectorLeft::CWindowProjectorLeft(MWindow *mwindow, CWindowProjectorGUI *gui, int x, int y) : BC_Button(x, y, mwindow->theme->get_image_set("left_justify")) { @@ -1576,12 +1517,6 @@ int CWindowProjectorBottom::handle_event() } - - - - - - CWindowMaskMode::CWindowMaskMode(MWindow *mwindow, CWindowToolGUI *gui, int x, int y, const char *text) : BC_PopupMenu(x, y, 220, text, 1) @@ -1679,6 +1614,7 @@ int CWindowMaskDelete::handle_event() Track *track; MaskPoint *point; SubMask *mask; + int total_points = 0; // Get existing keyframe ((CWindowMaskGUI*)gui)->get_keyframe(track, autos, keyframe, mask, point, 0); @@ -1705,6 +1641,8 @@ int CWindowMaskDelete::handle_event() 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 @@ -1713,8 +1651,6 @@ int CWindowMaskDelete::handle_event() { SubMask *submask = current->get_submask(mwindow->edl->session->cwindow_mask); - - for(int i = mwindow->cwindow->gui->affected_point; i < submask->points.total - 1; i++) @@ -1727,7 +1663,7 @@ int CWindowMaskDelete::handle_event() 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; @@ -1735,6 +1671,9 @@ int CWindowMaskDelete::handle_event() 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(); @@ -1860,6 +1799,47 @@ int CWindowMaskNumber::handle_event() } +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; +} + + @@ -1898,7 +1878,7 @@ int CWindowMaskFeather::handle_event() mask, point, create_it); if(track) - { + { #ifdef USE_KEYFRAME_SPANNING // Create temp keyframe MaskAuto temp_keyframe(mwindow->edl, autos); @@ -1949,7 +1929,7 @@ int CWindowMaskValue::handle_event() #else int create_it = 1; #endif - + mwindow->undo->update_undo_before(_("mask value"), this); ((CWindowMaskGUI*)gui)->get_keyframe(track, autos, keyframe, mask, point, create_it); @@ -2001,6 +1981,30 @@ int CWindowMaskBeforePlugins::handle_event() } +CWindowDisableOpenGLMasking::CWindowDisableOpenGLMasking(CWindowToolGUI *gui, int x, int y) + : BC_CheckBox(x, y, 1, _("Disable OpenGL masking")) +{ + this->gui = gui; +} + +int CWindowDisableOpenGLMasking::handle_event() +{ + Track *track; + MaskAutos *autos; + MaskAuto *keyframe; + SubMask *mask; + MaskPoint *point; + ((CWindowMaskGUI*)gui)->get_keyframe(track, autos, keyframe, mask, point, 1); + + if (keyframe) { + keyframe->disable_opengl_masking = get_value(); + gui->update_preview(); + } + return 1; +} + + + @@ -2012,15 +2016,19 @@ CWindowMaskGUI::CWindowMaskGUI(MWindow *mwindow, CWindowTool *thread) thread, _(PROGRAM_NAME ": Mask"), 330, - 280) + 310) { 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(); } @@ -2044,6 +2052,11 @@ void CWindowMaskGUI::create_objects() 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, @@ -2067,19 +2080,16 @@ void CWindowMaskGUI::create_objects() x = 10; y += this->y->get_h() + margin; - add_subwindow(title = new BC_Title(x, y, _("Press Ctrl to move a point"))); + add_subwindow(title = new BC_Title(x, y, _("Press Shift to move an end point"))); y += title->get_h() + margin; - add_subwindow(title = new BC_Title(x, y, _("Press Alt to translate the mask"))); + add_subwindow(title = new BC_Title(x, y, _("Press Ctrl to move a control point"))); y += title->get_h() + margin; - add_subwindow(title = new BC_Title(x, y, _("Press Shift to edit bezier curve"))); - + add_subwindow(title = new BC_Title(x, y, _("Press Alt to translate the mask"))); y += 30; -// add_subwindow(title = new BC_Title(x, y, _("Apply mask before plugins:"))); - add_subwindow(this->apply_before_plugins = new CWindowMaskBeforePlugins(this, - 10, - y)); -// this->apply_before_plugins->create_objects(); + add_subwindow(this->apply_before_plugins = new CWindowMaskBeforePlugins(this, 10, y)); + y += this->apply_before_plugins->get_h() + margin; + add_subwindow(this->disable_opengl_masking = new CWindowDisableOpenGLMasking(this, 10, y)); update(); unlock_window(); @@ -2147,10 +2157,12 @@ void CWindowMaskGUI::update() feather->update((int64_t)autos->get_feather(position_i, PLAY_FORWARD)); value->update((int64_t)autos->get_value(position_i, PLAY_FORWARD)); apply_before_plugins->update((int64_t)keyframe->apply_before_plugins); + disable_opengl_masking->update((int64_t)keyframe->disable_opengl_masking); } } -//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");