rework proxy scaler, fix crop-gui coord, video_data tweak for proxy_format
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / cwindowtool.C
index 25c436afb4647b4916b77f979dacdc69fe09467d..8ba0e3b2c7bbc85cbcdf1c7f5d452f15427a18a4 100644 (file)
@@ -360,7 +360,7 @@ CWindowCoord::CWindowCoord(CWindowToolGUI *gui, int x, int y, float value, int l
 }
 
 CWindowCoord::CWindowCoord(CWindowToolGUI *gui, int x, int y, int value)
- : BC_TumbleTextBox(gui, (int64_t)value, (int64_t)-65536, (int64_t)65536, x, y, 70, 3)
+ : BC_TumbleTextBox(gui, (int64_t)value, (int64_t)-65536, (int64_t)65536, x, y, 70)
 {
        this->gui = gui;
 }
@@ -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]); id<nid; ++id )
+               add_item(new CWindowCropOpItem(this, _(crop_ops[id]), id));
+       handle_event();
+}
+
+int CWindowCropOpMode::handle_event()
+{
+       set_text(_(crop_ops[mode]));
+       return 1;
+}
+
+CWindowCropOpItem::CWindowCropOpItem(CWindowCropOpMode *popup, const char *text, int id)
+ : BC_MenuItem(text)
+{
+       this->popup = popup;
+       this->id = id;
+}
 
+int CWindowCropOpItem::handle_event()
+{
+       popup->set_text(get_text());
+       popup->mode = id;
+       return popup->handle_event();
+}
 
 
 
@@ -430,17 +473,19 @@ 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;
        x1 = new CWindowCoord(thread->tool_gui, x, y,
                mwindow->edl->session->crop_x1);
        x1->create_objects();
+       x1->set_boundaries((int64_t)0, (int64_t)65536);
        y += pad;
        width = new CWindowCoord(thread->tool_gui, x, y,
                mwindow->edl->session->crop_x2 - mwindow->edl->session->crop_x1);
        width->create_objects();
+       width->set_boundaries((int64_t)1, (int64_t)65536);
 
 
        x += x1->get_w() + 10;
@@ -458,10 +503,19 @@ void CWindowCropGUI::create_objects()
        y1 = new CWindowCoord(thread->tool_gui, x, y,
                mwindow->edl->session->crop_y1);
        y1->create_objects();
+       y1->set_boundaries((int64_t)0, (int64_t)65536);
        y += pad;
+
        height = new CWindowCoord(thread->tool_gui, x, y,
                mwindow->edl->session->crop_y2 - mwindow->edl->session->crop_y1);
        height->create_objects();
+       height->set_boundaries((int64_t)1, (int64_t)65536);
+       y += pad;
+
+       add_subwindow(crop_mode = new CWindowCropOpMode(mwindow, this,
+                               CROP_REFORMAT, x, y));
+       crop_mode->create_objects();
+
        unlock_window();
 }