Credit Andrew - fix vorbis audio which was scratchy and ensure aging plugin does...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / mainsession.C
index 555a872e0b34667cb2e6322f61a9343f0a667200..f4e4cc9b8e29cbabcc5da923abea54cfbe2145b3 100644 (file)
@@ -36,6 +36,7 @@
 #include "mwindow.h"
 #include "mwindowgui.h"
 #include "plugin.h"
+#include "transition.h"
 
 MainSession::MainSession(MWindow *mwindow)
 {
@@ -51,6 +52,7 @@ MainSession::MainSession(MWindow *mwindow)
        current_operation = NO_OPERATION;
        drag_pluginservers = new ArrayList<PluginServer*>;
        drag_plugin = 0;
+       drag_transition = 0;
        drag_assets = new ArrayList<Indexable*>;
        drag_auto_gang = new ArrayList<Auto*>;
        drag_clips = new ArrayList<EDL*>;
@@ -96,6 +98,7 @@ MainSession::MainSession(MWindow *mwindow)
        gwindow_x = gwindow_y = 0;
        cswindow_x = cswindow_y = cswindow_w = cswindow_h = 0;
        swindow_x = swindow_y = swindow_w = swindow_h = 0;
+       tile_mixers_x = tile_mixers_y = tile_mixers_w = tile_mixers_h = 0;
        ewindow_w = ewindow_h = 0;
        channels_x = channels_y = 0;
        picture_x = picture_y = 0;
@@ -110,6 +113,7 @@ MainSession::MainSession(MWindow *mwindow)
        use_vect_gain = 5;
        use_smooth = 0;
        use_refresh = 0;
+       use_release = 0;
        use_graticule = 0;
        afolders_w = 0;
        show_vwindow = show_awindow = show_cwindow = show_gwindow = show_lwindow = 0;
@@ -220,17 +224,18 @@ void MainSession::default_window_positions(int window_config)
                        }
                }
                if( left_w > 0 ) {
+                       int min_x = INT_MAX;
                        for( int s=0; s<xin_screens; ++s ) {
                                if( display_info.xinerama_geometry(s, x, y, w, h) )
                                        continue;
-                               if( !y && x == left_w ) {
+                               if( !y && x >= left_w && x < min_x ) {
+                                       min_x = x;
                                        right_w = w;
                                        screens = 2;
-                                       break;
                                }
                        }
                        if( window_config == 1 ) {
-                               root_x = left_w;
+                               root_x = min_x;
                                root_w = right_w;
                        }
                        else {
@@ -330,6 +335,7 @@ void MainSession::default_window_positions(int window_config)
        use_vect_gain = 5;
        use_smooth = 1;
        use_refresh = 0;
+       use_release = 0;
        use_graticule = 0;
 
        if(mwindow->edl)
@@ -373,6 +379,11 @@ void MainSession::default_window_positions(int window_config)
        swindow_w = xS(600);
        swindow_h = yS(400);
 
+       tile_mixers_x = 1 + mwindow_x;
+       tile_mixers_y = 1;
+       tile_mixers_w = cwindow_x - tile_mixers_x;
+       tile_mixers_h = mwindow_y - tile_mixers_y;
+
        batchrender_w = xS(750);
        batchrender_h = yS(400);
        batchrender_x = root_w / 2 - batchrender_w / 2;
@@ -449,6 +460,7 @@ int MainSession::load_defaults(BC_Hash *defaults)
        use_vect_gain = defaults->get("USE_VECT_GAIN", use_vect_gain);
        use_smooth = defaults->get("USE_SMOOTH", use_smooth);
        use_refresh = defaults->get("USE_REFRESH", use_refresh);
+       use_release = defaults->get("USE_RELEASE", use_release);
        use_graticule = defaults->get("USE_GRATICULE", use_graticule);
 
 //printf("MainSession::load_defaults 1\n");
@@ -479,6 +491,11 @@ int MainSession::load_defaults(BC_Hash *defaults)
        rmonitor_w = defaults->get("RMONITOR_W", rmonitor_w);
        rmonitor_h = defaults->get("RMONITOR_H", rmonitor_h);
 
+       tile_mixers_x = defaults->get("TILE_MIXERS_X", 0);
+       tile_mixers_y = defaults->get("TILE_MIXERS_Y", 0);
+       tile_mixers_w = defaults->get("TILE_MIXERS_W", 0);
+       tile_mixers_h = defaults->get("TILE_MIXERS_H", 0);
+
        batchrender_x = defaults->get("BATCHRENDER_X", batchrender_x);
        batchrender_y = defaults->get("BATCHRENDER_Y", batchrender_y);
        batchrender_w = defaults->get("BATCHRENDER_W", batchrender_w);
@@ -579,6 +596,7 @@ int MainSession::save_defaults(BC_Hash *defaults)
        defaults->update("USE_VECT_GAIN", use_vect_gain);
        defaults->update("USE_SMOOTH", use_smooth);
        defaults->update("USE_REFRESH", use_refresh);
+       defaults->update("USE_RELEASE", use_release);
        defaults->update("USE_GRATICULE", use_graticule);
 
        defaults->update("ABINS_W", afolders_w);
@@ -588,6 +606,11 @@ int MainSession::save_defaults(BC_Hash *defaults)
        defaults->update("RMONITOR_W", rmonitor_w);
        defaults->update("RMONITOR_H", rmonitor_h);
 
+       defaults->update("TILE_MIXERS_X", tile_mixers_x);
+       defaults->update("TILE_MIXERS_Y", tile_mixers_y);
+       defaults->update("TILE_MIXERS_W", tile_mixers_w);
+       defaults->update("TILE_MIXERS_H", tile_mixers_h);
+
        defaults->update("RWINDOW_X", rwindow_x);
        defaults->update("RWINDOW_Y", rwindow_y);
        defaults->update("RWINDOW_W", rwindow_w);
@@ -652,6 +675,10 @@ Track *MainSession::drag_handle_track()
        case DRAG_PLUGINHANDLE2:
                track = drag_plugin->edits->track;
                break;
+       case DRAG_TRANSNHANDLE1:
+       case DRAG_TRANSNHANDLE2:
+               track = drag_transition->edits->track;
+               break;
        }
        return track;
 }