18 new shapewipe transitions from rafa, rework savefile/confirm for nested edl edits
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / gwindowgui.C
index 81520f018ac0fe1e23ce3eebb2c48c2a2a86ed47..bc250716b68b3937500159f6c779b21a0499d037 100644 (file)
@@ -63,6 +63,7 @@ const char *GWindowGUI::non_auto_text[NON_AUTOMATION_TOTAL] =
        N_("Titles"),
        N_("Transitions"),
        N_("Plugin Keyframes"),
+       N_("Hard Edges"),
 };
 
 const char *GWindowGUI::auto_text[AUTOMATION_TOTAL] =
@@ -91,9 +92,9 @@ int GWindowGUI::auto_colors[AUTOMATION_TOTAL] =
        LTGREEN,
        LTBLUE,
        LTPURPLE,
-       0,
-       0,
-       0,
+       -1,
+       -1,
+       -1,
        ORANGE,
 };
 
@@ -138,6 +139,7 @@ static toggleinfo toggle_order[] =
        {1, AUTOMATION_MODE},
        {1, AUTOMATION_PAN},
        {1, AUTOMATION_MASK},
+       {-1, NON_AUTOMATION_HARD_EDGES},
        {0, -1}, // bar
        {1, AUTOMATION_CAMERA_X},
        {1, AUTOMATION_CAMERA_Y},
@@ -154,21 +156,29 @@ const char *GWindowGUI::toggle_text(toggleinfo *tp)
 {
        if( tp->isauto > 0 ) return _(auto_text[tp->ref]);
        if( !tp->isauto ) return _(non_auto_text[tp->ref]);
-       return _("XYZ");
+       switch( tp->ref ) {
+       case NONAUTOTOGGLES_CAMERA_XYZ:
+       case NONAUTOTOGGLES_PROJECTOR_XYZ:
+               return _("XYZ");
+       case NON_AUTOMATION_HARD_EDGES:
+               return _("Hard Edges");
+       }
+       return "()";
 }
 
 void GWindowGUI::calculate_extents(BC_WindowBase *gui, int *w, int *h)
 {
        int temp1, temp2, temp3, temp4, temp5, temp6, temp7;
        int current_w, current_h;
-       *w = 10;
-       *h = 10;
+       int ys5 = yS(5), ys10 = yS(10);
+       *w = xS(10);
+       *h = ys10;
 
        for( int i=0; i<(int)(sizeof(toggle_order)/sizeof(toggle_order[0])); ++i ) {
                toggleinfo *tp = &toggle_order[i];
                int ref = tp->ref;
                if( ref < 0 ) {
-                       *h += get_resources()->bar_data->get_h() + 5;
+                       *h += get_resources()->bar_data->get_h() + ys5;
                        continue;
                }
                BC_Toggle::calculate_extents(gui,
@@ -178,11 +188,11 @@ void GWindowGUI::calculate_extents(BC_WindowBase *gui, int *w, int *h)
                        toggle_text(tp), MEDIUMFONT);
                current_w += current_h;
                *w = MAX(current_w, *w);
-               *h += current_h + 5;
+               *h += current_h + ys5;
        }
 
-       *h += 10;
-       *w += 20;
+       *h += ys10;
+       *w += xS(20);
 }
 
 GWindowColorButton::GWindowColorButton(GWindowToggle *auto_toggle,
@@ -200,7 +210,6 @@ GWindowColorButton::~GWindowColorButton()
 int GWindowColorButton::handle_new_color(int color, int alpha)
 {
        this->color = color;
-       color_thread->update_lock->unlock();
        return 1;
 }
 
@@ -229,21 +238,25 @@ void GWindowColorButton::handle_done_event(int result)
 
 void GWindowGUI::create_objects()
 {
-       int x = 10, y = 10;
+       int xs10 = xS(10);
+       int ys5 = yS(5), ys10 = yS(10);
+       int x = xs10, y = ys10;
        lock_window("GWindowGUI::create_objects");
 
        for( int i=0; i<(int)(sizeof(toggle_order)/sizeof(toggle_order[0])); ++i ) {
                toggleinfo *tp = &toggle_order[i];
                int ref = tp->ref;
                if( ref < 0 ) {
-                       BC_Bar *bar = new BC_Bar(x,y,get_w()-x-10);
+                       BC_Bar *bar = new BC_Bar(x,y,get_w()-x-xs10);
                        add_tool(bar);
                        toggles[i] = 0;
-                       y += bar->get_h() + 5;
+                       y += bar->get_h() + ys5;
                        continue;
                }
                const char *label = toggle_text(tp);
-               int color = tp->isauto > 0 ? auto_colors[tp->ref] : WHITE;
+               int color = tp->isauto > 0 ?
+                       auto_colors[tp->ref] :
+                       get_resources()->text_default ;
                GWindowToggle *toggle = new GWindowToggle(this, x, y, label, color, tp);
                add_tool(toggles[i] = toggle);
                if( tp->isauto > 0 ) {
@@ -254,16 +267,17 @@ void GWindowGUI::create_objects()
                        case AUTOMATION_MASK: vframe = mwindow->theme->maskkeyframe_data;  break;
                        }
                        if( !vframe ) {
-                               int wh = toggle->get_h() - 4;
+                               int wh = toggle->get_h() - yS(4);
+                               if( wh < 1 ) wh = 1;
                                GWindowColorButton *color_button =
-                                       new GWindowColorButton(toggle, get_w()-wh-10, y+2, wh, color);
+                                       new GWindowColorButton(toggle, get_w()-wh-ys10, y+yS(2), wh, color);
                                add_tool(color_button);
                                color_button->create_objects();
                        }
                        else
-                               draw_vframe(vframe, get_w()-vframe->get_w()-10, y);
+                               draw_vframe(vframe, get_w()-vframe->get_w()-xs10, y);
                }
-               else if( tp->isauto < 0 ) {
+               else {
                        const char *accel = 0;
                        switch( ref ) {
                        case NONAUTOTOGGLES_CAMERA_XYZ:
@@ -274,13 +288,18 @@ void GWindowGUI::create_objects()
                                projector_xyz = toggle;
                                accel = _("Shift-F2");
                                break;
+                       case NON_AUTOMATION_HARD_EDGES:
+                               VFrame *vframe = mwindow->theme->hardedge_data;
+                               draw_vframe(vframe, get_w()-vframe->get_w()-xs10, y);
+                               hard_edges = toggle;
+                               break;
                        }
                         if( accel ) {
-                               int x1 = get_w() - BC_Title::calculate_w(this, accel) - 10;
+                               int x1 = get_w() - BC_Title::calculate_w(this, accel) - xs10;
                                add_subwindow(new BC_Title(x1, y, accel));
                        }
                }
-               y += toggles[i]->get_h() + 5;
+               y += toggles[i]->get_h() + ys5;
        }
        update_toggles(0);
        unlock_window();
@@ -412,13 +431,12 @@ int* GWindowGUI::get_main_value(toggleinfo *info)
 {
        if( info->isauto > 0 )
                return &mwindow->edl->session->auto_conf->autos[info->ref];
-       if( !info->isauto ) {
-               switch( info->ref ) {
-               case NON_AUTOMATION_ASSETS: return &mwindow->edl->session->show_assets;
-               case NON_AUTOMATION_TITLES: return &mwindow->edl->session->show_titles;
-               case NON_AUTOMATION_TRANSITIONS: return &mwindow->edl->session->auto_conf->transitions;
-               case NON_AUTOMATION_PLUGIN_AUTOS: return &mwindow->edl->session->auto_conf->plugins;
-               }
+       switch( info->ref ) {
+       case NON_AUTOMATION_ASSETS: return &mwindow->edl->session->show_assets;
+       case NON_AUTOMATION_TITLES: return &mwindow->edl->session->show_titles;
+       case NON_AUTOMATION_TRANSITIONS: return &mwindow->edl->session->auto_conf->transitions;
+       case NON_AUTOMATION_PLUGIN_AUTOS: return &mwindow->edl->session->auto_conf->plugins;
+       case NON_AUTOMATION_HARD_EDGES: return &mwindow->edl->session->auto_conf->hard_edges;
        }
        return 0;
 }
@@ -477,6 +495,7 @@ int GWindowToggle::handle_event()
                switch( info->ref ) {
                case NONAUTOTOGGLES_CAMERA_XYZ:     group = AUTOMATION_CAMERA_X;     break;
                case NONAUTOTOGGLES_PROJECTOR_XYZ:  group = AUTOMATION_PROJECTOR_X;  break;
+               case NON_AUTOMATION_HARD_EDGES: *gui->get_main_value(info) = value;  break;
                }
                if( group >= 0 ) {
                        gui->xyz_check(group, value);