1
0
Эх сурвалжийг харах

image-source: Move loop/randomize checkboxes to playback mode combobox

derrod 1 жил өмнө
parent
commit
71509ad00c

+ 4 - 0
plugins/image-source/data/locale/en-US.ini

@@ -29,6 +29,10 @@ SlideShow.Stop="Stop"
 SlideShow.NextSlide="Next Slide"
 SlideShow.NextSlide="Next Slide"
 SlideShow.PreviousSlide="Previous Slide"
 SlideShow.PreviousSlide="Previous Slide"
 SlideShow.HideWhenDone="Hide when slideshow is done"
 SlideShow.HideWhenDone="Hide when slideshow is done"
+SlideShow.PlaybackMode="Playback Mode"
+SlideShow.PlaybackMode.Once="Once"
+SlideShow.PlaybackMode.Loop="Loop"
+SlideShow.PlaybackMode.Random="Random"
 
 
 ColorSource="Color Source"
 ColorSource="Color Source"
 ColorSource.Color="Color"
 ColorSource.Color="Color"

+ 35 - 7
plugins/image-source/obs-slideshow-mk2.c

@@ -31,6 +31,10 @@ static const char *S_BEHAVIOR_ALWAYS_PLAY    = "always_play";
 static const char *S_MODE                    = "slide_mode";
 static const char *S_MODE                    = "slide_mode";
 static const char *S_MODE_AUTO               = "mode_auto";
 static const char *S_MODE_AUTO               = "mode_auto";
 static const char *S_MODE_MANUAL             = "mode_manual";
 static const char *S_MODE_MANUAL             = "mode_manual";
+static const char *S_PLAYBACK_MODE           = "playback_mode";
+static const char *S_PLAYBACK_ONCE           = "once";
+static const char *S_PLAYBACK_LOOP           = "loop";
+static const char *S_PLAYBACK_RANDOM         = "random";
 
 
 static const char *TR_CUT                    = "cut";
 static const char *TR_CUT                    = "cut";
 static const char *TR_FADE                   = "fade";
 static const char *TR_FADE                   = "fade";
@@ -42,8 +46,6 @@ static const char *TR_SLIDE                  = "slide";
 #define T_CUSTOM_SIZE                        T_("CustomSize")
 #define T_CUSTOM_SIZE                        T_("CustomSize")
 #define T_SLIDE_TIME                         T_("SlideTime")
 #define T_SLIDE_TIME                         T_("SlideTime")
 #define T_TRANSITION                         T_("Transition")
 #define T_TRANSITION                         T_("Transition")
-#define T_RANDOMIZE                          T_("Randomize")
-#define T_LOOP                               T_("Loop")
 #define T_HIDE                               T_("HideWhenDone")
 #define T_HIDE                               T_("HideWhenDone")
 #define T_FILES                              T_("Files")
 #define T_FILES                              T_("Files")
 #define T_BEHAVIOR                           T_("PlaybackBehavior")
 #define T_BEHAVIOR                           T_("PlaybackBehavior")
@@ -53,6 +55,10 @@ static const char *TR_SLIDE                  = "slide";
 #define T_MODE                               T_("SlideMode")
 #define T_MODE                               T_("SlideMode")
 #define T_MODE_AUTO                          T_("SlideMode.Auto")
 #define T_MODE_AUTO                          T_("SlideMode.Auto")
 #define T_MODE_MANUAL                        T_("SlideMode.Manual")
 #define T_MODE_MANUAL                        T_("SlideMode.Manual")
+#define T_PLAYBACK_MODE                      T_("PlaybackMode")
+#define T_PLAYBACK_ONCE                      T_("PlaybackMode.Once")
+#define T_PLAYBACK_LOOP                      T_("PlaybackMode.Loop")
+#define T_PLAYBACK_RANDOM                    T_("PlaybackMode.Random")
 
 
 #define T_TR_(text) obs_module_text("SlideShow.Transition." text)
 #define T_TR_(text) obs_module_text("SlideShow.Transition." text)
 #define T_TR_CUT                             T_TR_("Cut")
 #define T_TR_CUT                             T_TR_("Cut")
@@ -452,8 +458,25 @@ static void ss_update(void *data, obs_data_t *settings)
 	else
 	else
 		tr_name = "fade_transition";
 		tr_name = "fade_transition";
 
 
-	new_data.randomize = obs_data_get_bool(settings, S_RANDOMIZE);
-	new_data.loop = obs_data_get_bool(settings, S_LOOP);
+	/* Migrate and old loop/random settings to playback mode. */
+	if (!obs_data_has_user_value(settings, S_PLAYBACK_MODE)) {
+		if (obs_data_has_user_value(settings, S_RANDOMIZE) &&
+		    obs_data_get_bool(settings, S_RANDOMIZE)) {
+			obs_data_set_string(settings, S_PLAYBACK_MODE,
+					    S_PLAYBACK_RANDOM);
+		} else if (obs_data_has_user_value(settings, S_LOOP)) {
+			bool loop = obs_data_get_bool(settings, S_LOOP);
+			obs_data_set_string(settings, S_PLAYBACK_MODE,
+					    loop ? S_PLAYBACK_LOOP
+						 : S_PLAYBACK_ONCE);
+		}
+	}
+
+	const char *playback_mode =
+		obs_data_get_string(settings, S_PLAYBACK_MODE);
+	new_data.randomize = strcmp(playback_mode, S_PLAYBACK_RANDOM) == 0;
+	new_data.loop = strcmp(playback_mode, S_PLAYBACK_LOOP) == 0;
+
 	new_data.hide = obs_data_get_bool(settings, S_HIDE);
 	new_data.hide = obs_data_get_bool(settings, S_HIDE);
 
 
 	if (!old_data.tr_name || strcmp(tr_name, old_data.tr_name) != 0)
 	if (!old_data.tr_name || strcmp(tr_name, old_data.tr_name) != 0)
@@ -972,7 +995,7 @@ static void ss_defaults(obs_data_t *settings)
 	obs_data_set_default_string(settings, S_BEHAVIOR,
 	obs_data_set_default_string(settings, S_BEHAVIOR,
 				    S_BEHAVIOR_ALWAYS_PLAY);
 				    S_BEHAVIOR_ALWAYS_PLAY);
 	obs_data_set_default_string(settings, S_MODE, S_MODE_AUTO);
 	obs_data_set_default_string(settings, S_MODE, S_MODE_AUTO);
-	obs_data_set_default_bool(settings, S_LOOP, true);
+	obs_data_set_default_string(settings, S_PLAYBACK_MODE, S_PLAYBACK_LOOP);
 }
 }
 
 
 static const char *file_filter = "Image files (*.bmp *.tga *.png *.jpeg *.jpg"
 static const char *file_filter = "Image files (*.bmp *.tga *.png *.jpeg *.jpg"
@@ -1030,9 +1053,14 @@ static obs_properties_t *ss_properties(void *data)
 				   50);
 				   50);
 	obs_property_int_set_suffix(p, " ms");
 	obs_property_int_set_suffix(p, " ms");
 
 
-	obs_properties_add_bool(ppts, S_LOOP, T_LOOP);
+	p = obs_properties_add_list(ppts, S_PLAYBACK_MODE, T_PLAYBACK_MODE,
+				    OBS_COMBO_TYPE_LIST,
+				    OBS_COMBO_FORMAT_STRING);
+	obs_property_list_add_string(p, T_PLAYBACK_ONCE, S_PLAYBACK_ONCE);
+	obs_property_list_add_string(p, T_PLAYBACK_LOOP, S_PLAYBACK_LOOP);
+	obs_property_list_add_string(p, T_PLAYBACK_RANDOM, S_PLAYBACK_RANDOM);
+
 	obs_properties_add_bool(ppts, S_HIDE, T_HIDE);
 	obs_properties_add_bool(ppts, S_HIDE, T_HIDE);
-	obs_properties_add_bool(ppts, S_RANDOMIZE, T_RANDOMIZE);
 
 
 	p = obs_properties_add_list(ppts, S_CUSTOM_SIZE, T_CUSTOM_SIZE,
 	p = obs_properties_add_list(ppts, S_CUSTOM_SIZE, T_CUSTOM_SIZE,
 				    OBS_COMBO_TYPE_EDITABLE,
 				    OBS_COMBO_TYPE_EDITABLE,