hard edges rework, add hard edge in gwdw, config.ac nv/cuda tweaks, message log warn...
authorGood Guy <good1.2guy@gmail.com>
Thu, 20 Jun 2019 22:54:10 +0000 (16:54 -0600)
committerGood Guy <good1.2guy@gmail.com>
Thu, 20 Jun 2019 22:54:10 +0000 (16:54 -0600)
39 files changed:
cinelerra-5.1/cinelerra/autoconf.C
cinelerra-5.1/cinelerra/autoconf.h
cinelerra-5.1/cinelerra/automation.inc
cinelerra-5.1/cinelerra/edits.C
cinelerra-5.1/cinelerra/gwindowgui.C
cinelerra-5.1/cinelerra/gwindowgui.h
cinelerra-5.1/cinelerra/mainerror.C
cinelerra-5.1/cinelerra/performanceprefs.C
cinelerra-5.1/cinelerra/shbtnprefs.C
cinelerra-5.1/cinelerra/shbtnprefs.h
cinelerra-5.1/cinelerra/shbtnprefs.inc
cinelerra-5.1/cinelerra/theme.C
cinelerra-5.1/cinelerra/theme.h
cinelerra-5.1/cinelerra/trackcanvas.C
cinelerra-5.1/configure.ac
cinelerra-5.1/guicast/bctextbox.C
cinelerra-5.1/guicast/bctextbox.h
cinelerra-5.1/plugins/theme_blond/blondtheme.C
cinelerra-5.1/plugins/theme_blond/data/hardedge.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blond_cv/blondcvtheme.C
cinelerra-5.1/plugins/theme_blond_cv/data/hardedge.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue/bluetheme.C
cinelerra-5.1/plugins/theme_blue/data/hardedge.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_blue_dot/bluedottheme.C
cinelerra-5.1/plugins/theme_blue_dot/data/hardedge.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_bright/brighttheme.C
cinelerra-5.1/plugins/theme_bright/data/hardedge.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_cakewalk/cakewalk.C
cinelerra-5.1/plugins/theme_cakewalk/data/hardedge.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/data/hardedge.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_hulk/hulktheme.C
cinelerra-5.1/plugins/theme_neophyte/data/hardedge.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_neophyte/neophyte.C
cinelerra-5.1/plugins/theme_pinklady/data/hardedge.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_pinklady/pinkladytheme.C
cinelerra-5.1/plugins/theme_suv/data/hardedge.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_suv/suv.C
cinelerra-5.1/plugins/theme_unflat/data/hardedge.png [new file with mode: 0644]
cinelerra-5.1/plugins/theme_unflat/unflattheme.C

index 6b5e8d7..b434d99 100644 (file)
@@ -64,6 +64,7 @@ int AutoConf::load_defaults(BC_Hash* defaults)
        }
        transitions = defaults->get("SHOW_TRANSITIONS", 1);
        plugins = defaults->get("SHOW_PLUGINS", 1);
+       hard_edges = defaults->get("SHOW_HARD_EDGES", 1);
        return 0;
 }
 
@@ -75,6 +76,7 @@ void AutoConf::load_xml(FileXML *file)
        }
        transitions = file->tag.get_property("SHOW_TRANSITIONS", 1);
        plugins = file->tag.get_property("SHOW_PLUGINS", 1);
+       hard_edges = file->tag.get_property("SHOW_HARD_EDGES", 1);
 }
 
 int AutoConf::save_defaults(BC_Hash* defaults)
@@ -85,27 +87,28 @@ int AutoConf::save_defaults(BC_Hash* defaults)
        }
        defaults->update("SHOW_TRANSITIONS", transitions);
        defaults->update("SHOW_PLUGINS", plugins);
+       defaults->update("SHOW_HARD_EDGES", hard_edges);
        return 0;
 }
 
 void AutoConf::save_xml(FileXML *file)
 {
-       for(int i = 0; i < AUTOMATION_TOTAL; i++)
-       {
+       for(int i = 0; i < AUTOMATION_TOTAL; i++) {
                file->tag.set_property(xml_titles[i], autos[i]);
        }
        file->tag.set_property("SHOW_TRANSITIONS", transitions);
        file->tag.set_property("SHOW_PLUGINS", plugins);
+       file->tag.set_property("SHOW_HARD_EDGES", hard_edges);
 }
 
 int AutoConf::set_all(int value)
 {
-       for(int i = 0; i < AUTOMATION_TOTAL; i++)
-       {
+       for(int i = 0; i < AUTOMATION_TOTAL; i++) {
                autos[i] = value;
        }
        transitions = value;
        plugins = value;
+       hard_edges = value;
        return 0;
 }
 
@@ -117,12 +120,12 @@ AutoConf& AutoConf::operator=(AutoConf &that)
 
 void AutoConf::copy_from(AutoConf *src)
 {
-       for(int i = 0; i < AUTOMATION_TOTAL; i++)
-       {
+       for(int i = 0; i < AUTOMATION_TOTAL; i++) {
                autos[i] = src->autos[i];
        }
        transitions = src->transitions;
        plugins = src->plugins;
+       hard_edges = src->hard_edges;
 }
 
 
index e5f3834..2395a19 100644 (file)
@@ -51,6 +51,7 @@ public:
 // Other viewable things
        int transitions;
        int plugins;
+       int hard_edges;
 };
 
 #endif
index 98ba2b0..f573c3e 100644 (file)
@@ -54,6 +54,7 @@ enum
        NON_AUTOMATION_TITLES,
        NON_AUTOMATION_TRANSITIONS,
        NON_AUTOMATION_PLUGIN_AUTOS,
+       NON_AUTOMATION_HARD_EDGES,
        NON_AUTOMATION_TOTAL
 };
 
index ae7ab0c..74bd416 100644 (file)
@@ -223,9 +223,7 @@ Edit* Edits::insert_new_edit(int64_t position)
 
 //printf("Edits::insert_new_edit 1\n");
        Edit *new_edit = create_edit();
-       if( current ) new_edit->hard_right = current->hard_left;
        if( current ) current = PREVIOUS;
-       if( current ) new_edit->hard_left = current->hard_right;
 //printf("Edits::insert_new_edit 1\n");
        insert_after(current, new_edit);
        new_edit->startproject = position;
@@ -247,6 +245,14 @@ Edit* Edits::split_edit(int64_t position)
        new_edit->copy_from(edit);
        new_edit->length = new_edit->startproject + new_edit->length - position;
        edit->length = position - edit->startproject;
+       if( !new_edit->length ) 
+               new_edit->hard_left = new_edit->hard_right = 0;
+       else if( !edit->length )
+               edit->hard_left = edit->hard_right = 0;
+       else {
+               new_edit->hard_right = edit->hard_right;
+               new_edit->hard_left = edit->hard_right = 0;
+       }
        new_edit->startproject = position;
        new_edit->startsource += edit->length;
 
@@ -367,13 +373,19 @@ int Edits::optimize()
 
 // delete 0 length edits
                for( current = first; !result && current; ) {
-                       Edit* next = current->next;
+                       Edit* prev = current->previous, *next = current->next;
                        if( current->length == 0 ) {
                                if( next && current->transition && !next->transition) {
                                        next->transition = current->transition;
                                        next->transition->edit = next;
                                        current->transition = 0;
                                }
+                               if( !current->silence() ) {
+                                       if( current->hard_left && next && !next->silence() )
+                                               next->hard_left = 1;
+                                       if( current->hard_right && prev && !prev->silence())
+                                               prev->hard_right = 1;
+                               }
                                delete current;
                                result = 1;
                                break;
@@ -394,7 +406,8 @@ int Edits::optimize()
                        Edit *next_edit = 0;
                        for( ; current && (next_edit=current->next); current=NEXT ) {
 // both edges are not hard edges
-                               if( current->hard_right || next_edit->hard_left ) continue;
+                               if( current->hard_right || next_edit->hard_left )
+                                       continue;
 // next edit is a glitch
                                if( is_glitch(next_edit) )
                                        break;
index 81520f0..f90a387 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] =
@@ -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,7 +156,14 @@ 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)
@@ -263,7 +272,7 @@ void GWindowGUI::create_objects()
                        else
                                draw_vframe(vframe, get_w()-vframe->get_w()-10, y);
                }
-               else if( tp->isauto < 0 ) {
+               else {
                        const char *accel = 0;
                        switch( ref ) {
                        case NONAUTOTOGGLES_CAMERA_XYZ:
@@ -274,6 +283,11 @@ 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()-10, y);
+                               hard_edges = toggle;
+                               break;
                        }
                         if( accel ) {
                                int x1 = get_w() - BC_Title::calculate_w(this, accel) - 10;
@@ -412,13 +426,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 +490,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);
index 302417c..6490c85 100644 (file)
@@ -34,6 +34,7 @@ enum {
        NONAUTOTOGGLES_TITLES,
        NONAUTOTOGGLES_TRANSITIONS,
        NONAUTOTOGGLES_PLUGIN_AUTOS,
+       NONAUTOTOGGLES_HARD_EDGES,
        NONAUTOTOGGLES_CAMERA_XYZ,
        NONAUTOTOGGLES_PROJECTOR_XYZ,
        NONAUTOTOGGLES_BAR1,
@@ -77,7 +78,7 @@ public:
 
        MWindow *mwindow;
        GWindowToggle *toggles[NONAUTOTOGGLES_COUNT + AUTOMATION_TOTAL];
-       GWindowToggle *camera_xyz, *projector_xyz;
+       GWindowToggle *camera_xyz, *projector_xyz, *hard_edges;
 };
 
 class GWindowToggle : public BC_CheckBox
index 4fdc592..c82d23a 100644 (file)
@@ -40,7 +40,7 @@ MainError* MainError::main_error = 0;
 
 
 MainErrorGUI::MainErrorGUI(MWindow *mwindow, MainError *thread, int x, int y)
- : BC_Window(_(PROGRAM_NAME ": Errors"),
+ : BC_Window(_(PROGRAM_NAME ": Messages"),
         x,
         y,
         mwindow->session->ewindow_w,
@@ -68,7 +68,7 @@ void MainErrorGUI::create_objects()
        BC_Button *button;
        add_subwindow(button = new BC_OKButton(this));
        int x = 10, y = 10;
-       add_subwindow(title = new BC_Title(x, y, _("The following errors occurred:")));
+       add_subwindow(title = new BC_Title(x, y, _("Message log:")));
        y += title->get_h() + 5;
        add_subwindow(list = new BC_ListBox(x, y,
                 get_w() - 20, button->get_y() - y - 5,
index cb19f90..c00ca73 100644 (file)
@@ -332,10 +332,19 @@ PrefsUseHWDev::PrefsUseHWDev(PreferencesWindow *pwindow,
 void PrefsUseHWDev::create_objects()
 {
        BC_PopupTextBox::create_objects();
+       set_tooltip(_("vdpau - Nvidia, Nouveau, Amdgpu\n"
+               "vaapi - Broadcom, Intel HD graphics, Radeon\n"
+               "cuda  - Nvidia + Cuda SDK"));
        hw_dev_names.append(new BC_ListBoxItem(_("none")));
+#ifdef HAVE_VAAPI
        hw_dev_names.append(new BC_ListBoxItem("vaapi"));
+#endif
+#ifdef HAVE_VDPAU
        hw_dev_names.append(new BC_ListBoxItem("vdpau"));
-       hw_dev_names.append(new BC_ListBoxItem(""));
+#endif
+#ifdef HAVE_NV
+       hw_dev_names.append(new BC_ListBoxItem("cuda"));
+#endif
        update_list(&hw_dev_names);
        update(&pwindow->thread->preferences->use_hw_dev[0]);
 }
index 2945c03..679d16f 100644 (file)
@@ -43,17 +43,22 @@ void ShBtnRun::run()
                perror("fork");
                return;
        }
-       if( pid > 0 ) {
-               int stat;  waitpid(pid, &stat, 0);
-               if( warn && stat ) {
-                       char msg[BCTEXTLEN];
-                       sprintf(msg, "%s: error exit status %d", name, stat);
-                       MainError::show_error(msg);
-               }
+       char msg[BCTEXTLEN];
+       if( !pid ) {
+               argv.append(0);
+               execvp(argv[0], &argv[0]);
                return;
        }
-       argv.append(0);
-       execvp(argv[0], &argv[0]);
+       // warn <0:always, =0:never, >0:on err
+       if( !warn ) return;
+       int stat;  waitpid(pid, &stat, 0);
+       if( !stat ) {
+               if( warn > 0 ) return;
+               sprintf(msg, "%s: completed", name);
+       }
+       else
+               sprintf(msg, "%s: error exit status %d", name, stat);
+       MainError::show_error(msg);
 }
 
 ShBtnPref::ShBtnPref(const char *nm, const char *cmds, int warn, int run_script)
@@ -223,15 +228,43 @@ ShBtnTextWindow::~ShBtnTextWindow()
 {
 }
 
+
+ShBtnErrWarnItem::ShBtnErrWarnItem(ShBtnErrWarn *popup,
+                const char *text, int warn)
+ : BC_MenuItem(text)
+{
+        this->popup = popup;
+        this->warn = warn;
+}
+
+int ShBtnErrWarnItem::handle_event()
+{
+        popup->set_text(get_text());
+       popup->st_window->warn = warn;
+        return 1;
+}
+
 ShBtnErrWarn::ShBtnErrWarn(ShBtnTextWindow *st_window, int x, int y)
- : BC_CheckBox(x, y, &st_window->warn, _("Warn on err exit"))
+ : BC_PopupMenu(x, y, 120, st_window->warn < 0 ? _("Always"):
+       !st_window->warn ? _("Never") : _("On Error"))
 {
         this->st_window = st_window;
 }
-
 ShBtnErrWarn::~ShBtnErrWarn()
 {
 }
+int ShBtnErrWarn::handle_event()
+{
+        return 0;
+}
+
+void ShBtnErrWarn::create_objects()
+{
+       add_item(new ShBtnErrWarnItem(this,_("Always"), -1));
+       add_item(new ShBtnErrWarnItem(this,_("Never"), 0));
+       add_item(new ShBtnErrWarnItem(this,_("On Error"), 1));
+}
+
 
 ShBtnRunScript::ShBtnRunScript(ShBtnTextWindow *st_window, int x, int y)
  : BC_CheckBox(x, y, &st_window->run_script, _("run /path/script.sh + argvs"))
@@ -259,7 +292,10 @@ void ShBtnTextWindow::create_objects()
         cmd_text = new BC_ScrollTextBox(this, x1, y, get_w()-x1-20, 4, pref->commands);
        cmd_text->create_objects();
        y += cmd_text->get_h() + 16;
+        add_subwindow(title = new BC_Title(x1,y, _("OnExit Notify:")));
+       x1 += title->get_w() + 10;
         add_subwindow(st_err_warn = new ShBtnErrWarn(this, x1, y));
+       st_err_warn->create_objects();
        x1 += st_err_warn->get_w() + 20;
         add_subwindow(st_run_script = new ShBtnRunScript(this, x1, y));
         y = get_h() - ShBtnTextOK::calculate_h() - 10;
index 3602220..de7050d 100644 (file)
@@ -107,12 +107,26 @@ public:
        ~ShBtnTextOK();
 };
 
-class ShBtnErrWarn : public BC_CheckBox
+class ShBtnErrWarnItem : public BC_MenuItem
+{
+public:
+       ShBtnErrWarnItem(ShBtnErrWarn *popup, const char *text, int warn);
+       ShBtnErrWarnItem();
+       int handle_event();
+
+       ShBtnErrWarn *popup;
+       int warn;
+};
+
+class ShBtnErrWarn : public BC_PopupMenu
 {
 public:
        ShBtnErrWarn(ShBtnTextWindow *st_window, int x, int y);
        ~ShBtnErrWarn();
 
+       void create_objects();
+       int handle_event();
+
        ShBtnTextWindow *st_window;
 };
 
index 1ce4093..ed62610 100644 (file)
@@ -9,6 +9,7 @@ class ShBtnDelButton;
 class ShBtnEditButton;
 class ShBtnTextDialog;
 class ShBtnTextOK;
+class ShBtnErrWarnItem;
 class ShBtnErrWarn;
 class ShBtnTextWindow;
 class ShBtnPrefItem;
index 3b5de95..4141f08 100644 (file)
@@ -140,6 +140,7 @@ Theme::Theme()
        lift_data = 0;
        maskkeyframe_data = 0;
        modekeyframe_data = 0;
+       hardedge_data = 0;
        movedn_data = 0;
        moveup_data = 0;
        newbin_data = 0;
index 1845b87..7055ee1 100644 (file)
@@ -331,6 +331,7 @@ public:
        VFrame **lift_data;
        VFrame *maskkeyframe_data;
        VFrame *modekeyframe_data;
+       VFrame *hardedge_data;
        VFrame **movedn_data;
        VFrame **moveup_data;
        VFrame **newbin_data;
index 7dbda4e..3f526fd 100644 (file)
@@ -1888,6 +1888,8 @@ void TrackCanvas::refresh_plugintoggles()
 
 void TrackCanvas::draw_hard_edges()
 {
+       if( !mwindow->edl->session->auto_conf->hard_edges )
+               return;
        int64_t x, y, w, h;
 
        for(Track *track = mwindow->edl->tracks->first; track; track = track->next) {
index 574b0db..77fe5ca 100644 (file)
@@ -867,7 +867,8 @@ if test "x$WANT_CIN_3RDPARTY" != "xno"; then
 fi
 for v in GL XFT XXF86VM OSS ALSA FIREWIRE DV DVB \
         VIDEO4LINUX2 ESOUND PACTL OPENEXR LV2 \
-        COMMERCIAL LIBZMPEG SHUTTLE SHUTTLE_USB; do
+        COMMERCIAL LIBZMPEG SHUTTLE SHUTTLE_USB \
+        VAAPI VDPAU CUDA NV; do
   eval vv="\$WANT_$v"
   if test "x$vv" != "xno"; then
     CFG_CFLAGS+=" -DHAVE_$v"
index 725bbfa..078134c 100644 (file)
@@ -2626,6 +2626,11 @@ void BC_PopupTextBox::reposition_window(int x, int y)
 //     if(flush) parent_window->flush();
 }
 
+void BC_PopupTextBox::set_tooltip(const char *text)
+{
+       listbox->set_tooltip(text);
+}
+
 
 
 BC_TumbleTextBoxText::BC_TumbleTextBoxText(BC_TumbleTextBox *popup,
index fa569fa..d586057 100644 (file)
@@ -358,6 +358,7 @@ public:
        int get_h();
        int get_show_query();
        void set_show_query(int v);
+       void set_tooltip(const char *text);
 
        void update(const char *text);
        void update_list(ArrayList<BC_ListBoxItem*> *data);
index da215d5..37e2c39 100644 (file)
@@ -97,6 +97,7 @@ BlondTheme::~BlondTheme()
        delete keyframe_data;
        delete maskkeyframe_data;
        delete modekeyframe_data;
+       delete hardedge_data;
        delete pankeyframe_data;
        delete projectorkeyframe_data;
 }
@@ -879,6 +880,7 @@ void BlondTheme::build_overlays()
        camerakeyframe_data = new VFramePng(get_image_data("camerakeyframe.png"));
        maskkeyframe_data = new VFramePng(get_image_data("maskkeyframe.png"));
        modekeyframe_data = new VFramePng(get_image_data("modekeyframe.png"));
+       hardedge_data = new VFramePng(get_image_data("hardedge.png"));
        pankeyframe_data = new VFramePng(get_image_data("pankeyframe.png"));
        projectorkeyframe_data = new VFramePng(get_image_data("projectorkeyframe.png"));
 }
diff --git a/cinelerra-5.1/plugins/theme_blond/data/hardedge.png b/cinelerra-5.1/plugins/theme_blond/data/hardedge.png
new file mode 100644 (file)
index 0000000..c3724eb
Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blond/data/hardedge.png differ
index 246aab9..6ab7a9e 100644 (file)
@@ -97,6 +97,7 @@ BlondCVTheme::~BlondCVTheme()
        delete keyframe_data;
        delete maskkeyframe_data;
        delete modekeyframe_data;
+       delete hardedge_data;
        delete pankeyframe_data;
        delete projectorkeyframe_data;
 }
@@ -1189,6 +1190,7 @@ void BlondCVTheme::build_overlays()
        camerakeyframe_data = new VFramePng(get_image_data("camerakeyframe.png"));
        maskkeyframe_data = new VFramePng(get_image_data("maskkeyframe.png"));
        modekeyframe_data = new VFramePng(get_image_data("modekeyframe.png"));
+       hardedge_data = new VFramePng(get_image_data("hardedge.png"));
        pankeyframe_data = new VFramePng(get_image_data("pankeyframe.png"));
        projectorkeyframe_data = new VFramePng(get_image_data("projectorkeyframe.png"));
 }
diff --git a/cinelerra-5.1/plugins/theme_blond_cv/data/hardedge.png b/cinelerra-5.1/plugins/theme_blond_cv/data/hardedge.png
new file mode 100644 (file)
index 0000000..c3724eb
Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blond_cv/data/hardedge.png differ
index 63216e4..ea43e59 100644 (file)
@@ -97,6 +97,7 @@ BlueDotTheme::~BlueDotTheme()
        delete keyframe_data;
        delete maskkeyframe_data;
        delete modekeyframe_data;
+       delete hardedge_data;
        delete pankeyframe_data;
        delete projectorkeyframe_data;
 }
@@ -876,6 +877,7 @@ void BlueDotTheme::build_overlays()
        camerakeyframe_data = new VFramePng(get_image_data("camerakeyframe.png"));
        maskkeyframe_data = new VFramePng(get_image_data("maskkeyframe.png"));
        modekeyframe_data = new VFramePng(get_image_data("modekeyframe.png"));
+       hardedge_data = new VFramePng(get_image_data("hardedge.png"));
        pankeyframe_data = new VFramePng(get_image_data("pankeyframe.png"));
        projectorkeyframe_data = new VFramePng(get_image_data("projectorkeyframe.png"));
 }
diff --git a/cinelerra-5.1/plugins/theme_blue/data/hardedge.png b/cinelerra-5.1/plugins/theme_blue/data/hardedge.png
new file mode 100644 (file)
index 0000000..c3724eb
Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue/data/hardedge.png differ
index 7d43a69..e55d920 100644 (file)
@@ -100,6 +100,7 @@ BlueDotTheme::~BlueDotTheme()
        delete keyframe_data;
        delete maskkeyframe_data;
        delete modekeyframe_data;
+       delete hardedge_data;
        delete pankeyframe_data;
        delete projectorkeyframe_data;
 }
@@ -1246,6 +1247,7 @@ void BlueDotTheme::build_overlays()
        camerakeyframe_data = new VFramePng(get_image_data("camerakeyframe.png"));
        maskkeyframe_data = new VFramePng(get_image_data("maskkeyframe.png"));
        modekeyframe_data = new VFramePng(get_image_data("modekeyframe.png"));
+       hardedge_data = new VFramePng(get_image_data("hardedge.png"));
        pankeyframe_data = new VFramePng(get_image_data("pankeyframe.png"));
        projectorkeyframe_data = new VFramePng(get_image_data("projectorkeyframe.png"));
 }
diff --git a/cinelerra-5.1/plugins/theme_blue_dot/data/hardedge.png b/cinelerra-5.1/plugins/theme_blue_dot/data/hardedge.png
new file mode 100644 (file)
index 0000000..c3724eb
Binary files /dev/null and b/cinelerra-5.1/plugins/theme_blue_dot/data/hardedge.png differ
index 4a2735e..cd3acc9 100644 (file)
@@ -95,6 +95,7 @@ BrightTheme::~BrightTheme()
        delete keyframe_data;
        delete maskkeyframe_data;
        delete modekeyframe_data;
+       delete hardedge_data;
        delete pankeyframe_data;
        delete projectorkeyframe_data;
 }
@@ -882,6 +883,7 @@ void BrightTheme::build_overlays()
        camerakeyframe_data = new VFramePng(get_image_data("camerakeyframe.png"));
        maskkeyframe_data = new VFramePng(get_image_data("maskkeyframe.png"));
        modekeyframe_data = new VFramePng(get_image_data("modekeyframe.png"));
+       hardedge_data = new VFramePng(get_image_data("hardedge.png"));
        pankeyframe_data = new VFramePng(get_image_data("pankeyframe.png"));
        projectorkeyframe_data = new VFramePng(get_image_data("projectorkeyframe.png"));
 }
diff --git a/cinelerra-5.1/plugins/theme_bright/data/hardedge.png b/cinelerra-5.1/plugins/theme_bright/data/hardedge.png
new file mode 100644 (file)
index 0000000..c3724eb
Binary files /dev/null and b/cinelerra-5.1/plugins/theme_bright/data/hardedge.png differ
index ac1f515..b4170ef 100644 (file)
@@ -65,6 +65,7 @@ CAKEWALKTHEME::~CAKEWALKTHEME()
  delete keyframe_data;
  delete maskkeyframe_data;
  delete modekeyframe_data;
+ delete hardedge_data;
  delete pankeyframe_data;
  delete projectorkeyframe_data;
 }
@@ -997,6 +998,7 @@ void CAKEWALKTHEME::build_overlays()
  camerakeyframe_data = new VFramePng(get_image_data("camerakeyframe.png"));
  maskkeyframe_data = new VFramePng(get_image_data("maskkeyframe.png"));
  modekeyframe_data = new VFramePng(get_image_data("modekeyframe.png"));
+ hardedge_data = new VFramePng(get_image_data("hardedge.png"));
  pankeyframe_data = new VFramePng(get_image_data("pankeyframe.png"));
  projectorkeyframe_data = new VFramePng(get_image_data("projectorkeyframe.png"));
 }
diff --git a/cinelerra-5.1/plugins/theme_cakewalk/data/hardedge.png b/cinelerra-5.1/plugins/theme_cakewalk/data/hardedge.png
new file mode 100644 (file)
index 0000000..c3724eb
Binary files /dev/null and b/cinelerra-5.1/plugins/theme_cakewalk/data/hardedge.png differ
diff --git a/cinelerra-5.1/plugins/theme_hulk/data/hardedge.png b/cinelerra-5.1/plugins/theme_hulk/data/hardedge.png
new file mode 100644 (file)
index 0000000..c3724eb
Binary files /dev/null and b/cinelerra-5.1/plugins/theme_hulk/data/hardedge.png differ
index 082b965..8222d6d 100644 (file)
@@ -98,6 +98,7 @@ HULKTHEME::~HULKTHEME()
        delete keyframe_data;
        delete maskkeyframe_data;
        delete modekeyframe_data;
+       delete hardedge_data;
        delete pankeyframe_data;
        delete projectorkeyframe_data;
 }
@@ -881,6 +882,7 @@ void HULKTHEME::build_overlays()
        camerakeyframe_data = new VFramePng(get_image_data("camerakeyframe.png"));
        maskkeyframe_data = new VFramePng(get_image_data("maskkeyframe.png"));
        modekeyframe_data = new VFramePng(get_image_data("modekeyframe.png"));
+       hardedge_data = new VFramePng(get_image_data("hardedge.png"));
        pankeyframe_data = new VFramePng(get_image_data("pankeyframe.png"));
        projectorkeyframe_data = new VFramePng(get_image_data("projectorkeyframe.png"));
 }
diff --git a/cinelerra-5.1/plugins/theme_neophyte/data/hardedge.png b/cinelerra-5.1/plugins/theme_neophyte/data/hardedge.png
new file mode 100644 (file)
index 0000000..c3724eb
Binary files /dev/null and b/cinelerra-5.1/plugins/theme_neophyte/data/hardedge.png differ
index de9d59c..3d34c83 100644 (file)
@@ -94,6 +94,7 @@ NEOPHYTETHEME::~NEOPHYTETHEME()
        delete keyframe_data;
        delete maskkeyframe_data;
        delete modekeyframe_data;
+       delete hardedge_data;
        delete pankeyframe_data;
        delete projectorkeyframe_data;
 }
@@ -1185,6 +1186,7 @@ void NEOPHYTETHEME::build_overlays()
        camerakeyframe_data = new VFramePng(get_image_data("camerakeyframe.png"));
        maskkeyframe_data = new VFramePng(get_image_data("maskkeyframe.png"));
        modekeyframe_data = new VFramePng(get_image_data("modekeyframe.png"));
+       hardedge_data = new VFramePng(get_image_data("hardedge.png"));
        pankeyframe_data = new VFramePng(get_image_data("pankeyframe.png"));
        projectorkeyframe_data = new VFramePng(get_image_data("projectorkeyframe.png"));
 }
diff --git a/cinelerra-5.1/plugins/theme_pinklady/data/hardedge.png b/cinelerra-5.1/plugins/theme_pinklady/data/hardedge.png
new file mode 100644 (file)
index 0000000..c3724eb
Binary files /dev/null and b/cinelerra-5.1/plugins/theme_pinklady/data/hardedge.png differ
index 671da39..5001762 100644 (file)
@@ -83,6 +83,7 @@ PINKLADY::~PINKLADY()
        delete keyframe_data;
        delete maskkeyframe_data;
        delete modekeyframe_data;
+       delete hardedge_data;
        delete pankeyframe_data;
        delete projectorkeyframe_data;
 }
@@ -863,6 +864,7 @@ void PINKLADY::build_overlays()
        camerakeyframe_data = new VFramePng(get_image_data("camerakeyframe.png"));
        maskkeyframe_data = new VFramePng(get_image_data("maskkeyframe.png"));
        modekeyframe_data = new VFramePng(get_image_data("modekeyframe.png"));
+       hardedge_data = new VFramePng(get_image_data("hardedge.png"));
        pankeyframe_data = new VFramePng(get_image_data("pankeyframe.png"));
        projectorkeyframe_data = new VFramePng(get_image_data("projectorkeyframe.png"));
 }
diff --git a/cinelerra-5.1/plugins/theme_suv/data/hardedge.png b/cinelerra-5.1/plugins/theme_suv/data/hardedge.png
new file mode 100644 (file)
index 0000000..c3724eb
Binary files /dev/null and b/cinelerra-5.1/plugins/theme_suv/data/hardedge.png differ
index 3c6de6f..40ad35c 100644 (file)
@@ -94,6 +94,7 @@ SUV::~SUV()
        delete keyframe_data;
        delete maskkeyframe_data;
        delete modekeyframe_data;
+       delete hardedge_data;
        delete pankeyframe_data;
        delete projectorkeyframe_data;
 }
@@ -876,6 +877,7 @@ void SUV::build_overlays()
        camerakeyframe_data = new VFramePng(get_image_data("camerakeyframe.png"));
        maskkeyframe_data = new VFramePng(get_image_data("maskkeyframe.png"));
        modekeyframe_data = new VFramePng(get_image_data("modekeyframe.png"));
+       hardedge_data = new VFramePng(get_image_data("hardedge.png"));
        pankeyframe_data = new VFramePng(get_image_data("pankeyframe.png"));
        projectorkeyframe_data = new VFramePng(get_image_data("projectorkeyframe.png"));
 }
diff --git a/cinelerra-5.1/plugins/theme_unflat/data/hardedge.png b/cinelerra-5.1/plugins/theme_unflat/data/hardedge.png
new file mode 100644 (file)
index 0000000..c3724eb
Binary files /dev/null and b/cinelerra-5.1/plugins/theme_unflat/data/hardedge.png differ
index def4469..55a3dd0 100644 (file)
@@ -92,6 +92,7 @@ UNFLATTHEME::~UNFLATTHEME()
        delete keyframe_data;
        delete maskkeyframe_data;
        delete modekeyframe_data;
+       delete hardedge_data;
        delete pankeyframe_data;
        delete projectorkeyframe_data;
 }
@@ -872,6 +873,7 @@ void UNFLATTHEME::build_overlays()
        camerakeyframe_data = new VFramePng(get_image_data("camerakeyframe.png"));
        maskkeyframe_data = new VFramePng(get_image_data("maskkeyframe.png"));
        modekeyframe_data = new VFramePng(get_image_data("modekeyframe.png"));
+       hardedge_data = new VFramePng(get_image_data("hardedge.png"));
        pankeyframe_data = new VFramePng(get_image_data("pankeyframe.png"));
        projectorkeyframe_data = new VFramePng(get_image_data("projectorkeyframe.png"));
 }