X-Git-Url: https://cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fcwindowtool.C;h=a7e4f3b977302b4753db0bd2f78458abadaf2ea2;hb=33aae273918725085d841a8af927bfccd2aa9364;hp=44daadd1a6a809e62ba2d082aa7d3d8e8a719382;hpb=b350aa5a1ccbadcb5f794183c443c0738cd1e9ab;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/cwindowtool.C b/cinelerra-5.1/cinelerra/cwindowtool.C index 44daadd1..a7e4f3b9 100644 --- a/cinelerra-5.1/cinelerra/cwindowtool.C +++ b/cinelerra-5.1/cinelerra/cwindowtool.C @@ -372,20 +372,20 @@ int CWindowCoord::handle_event() } -CWindowCropOK::CWindowCropOK(MWindow *mwindow, CWindowToolGUI *gui, int x, int y) - : BC_GenericButton(x, y, _("Do it")) +CWindowCropApply::CWindowCropApply(MWindow *mwindow, CWindowCropGUI *crop_gui, int x, int y) + : BC_GenericButton(x, y, _("Apply")) { this->mwindow = mwindow; - this->gui = gui; + this->crop_gui = crop_gui; } -int CWindowCropOK::handle_event() +int CWindowCropApply::handle_event() { - mwindow->crop_video(); + mwindow->crop_video(crop_gui->crop_mode->mode); return 1; } -int CWindowCropOK::keypress_event() +int CWindowCropApply::keypress_event() { if(get_keypress() == 0xd) { @@ -395,7 +395,50 @@ int CWindowCropOK::keypress_event() return 0; } +const char *CWindowCropOpMode::crop_ops[] = { + N_("Reformat"), + N_("Resize"), + N_("Shrink"), +}; + +CWindowCropOpMode::CWindowCropOpMode(MWindow *mwindow, CWindowCropGUI *crop_gui, + int mode, int x, int y) + : BC_PopupMenu(x, y, 140, _(crop_ops[mode]), 1) +{ + this->mwindow = mwindow; + this->crop_gui = crop_gui; + this->mode = mode; +} +CWindowCropOpMode::~CWindowCropOpMode() +{ +} + +void CWindowCropOpMode::create_objects() +{ + for( int id=0,nid=sizeof(crop_ops)/sizeof(crop_ops[0]); idpopup = popup; + this->id = id; +} +int CWindowCropOpItem::handle_event() +{ + popup->set_text(get_text()); + popup->mode = id; + return popup->handle_event(); +} @@ -430,7 +473,7 @@ void CWindowCropGUI::create_objects() add_subwindow(title = new BC_Title(x, y, _("W:"))); column1 = MAX(column1, title->get_w()); y += pad; - add_subwindow(new CWindowCropOK(mwindow, thread->tool_gui, x, y)); + add_subwindow(new CWindowCropApply(mwindow, this, x, y)); x += column1 + 5; y = 10; @@ -459,9 +502,16 @@ void CWindowCropGUI::create_objects() mwindow->edl->session->crop_y1); y1->create_objects(); y += pad; + height = new CWindowCoord(thread->tool_gui, x, y, mwindow->edl->session->crop_y2 - mwindow->edl->session->crop_y1); height->create_objects(); + y += pad; + + add_subwindow(crop_mode = new CWindowCropOpMode(mwindow, this, + CROP_REFORMAT, x, y)); + crop_mode->create_objects(); + unlock_window(); } @@ -2139,6 +2189,8 @@ int CWindowMaskFeather::update_value(float v) int CWindowMaskFeather::handle_event() { float v = atof(get_text()); + if( fabsf(v) > MAX_FEATHER ) + BC_TumbleTextBox::update((float)(v>=0 ? MAX_FEATHER : -MAX_FEATHER)); gui->feather_slider->update(v); return gui->feather->update_value(v); } @@ -2165,6 +2217,8 @@ int CWindowMaskFeatherSlider::handle_event() { int sticky = 0; float v = get_value(); + if( fabsf(v) > MAX_FEATHER ) + v = v>=0 ? MAX_FEATHER : -MAX_FEATHER; if( stick && timer->get_difference() >= 250 ) stick = 0; // no events for .25 sec if( stick && (last_v * (v-last_v)) < 0 ) @@ -2177,6 +2231,7 @@ int CWindowMaskFeatherSlider::handle_event() } if( last_v ) { max *= 1.25; + if( max > MAX_FEATHER ) max = MAX_FEATHER; update(get_w(), v=last_v, -max-5, max+5); button_release_event(); } @@ -2192,7 +2247,9 @@ int CWindowMaskFeatherSlider::handle_event() int CWindowMaskFeatherSlider::update(float v) { - while( max < v ) max *= 1.25; + float vv = fabsf(v); + if( vv > MAX_FEATHER ) vv = MAX_FEATHER; + while( max < vv ) max *= 1.25; return update(get_w(), v, -max-5, max+5); } int CWindowMaskFeatherSlider::update(int r, float v, float mn, float mx)