浏览代码

UI, obs-plugins: Add spinbox suffixes where necessary

Clayton Groeneveld 6 年之前
父节点
当前提交
3ea354b4e4

+ 4 - 4
UI/data/locale/en-US.ini

@@ -668,7 +668,7 @@ Basic.Settings.Output.Mode.Simple="Simple"
 Basic.Settings.Output.Mode.Adv="Advanced"
 Basic.Settings.Output.Mode.FFmpeg="FFmpeg Output"
 Basic.Settings.Output.UseReplayBuffer="Enable Replay Buffer"
-Basic.Settings.Output.ReplayBuffer.SecondsMax="Maximum Replay Time (Seconds)"
+Basic.Settings.Output.ReplayBuffer.SecondsMax="Maximum Replay Time"
 Basic.Settings.Output.ReplayBuffer.MegabytesMax="Maximum Memory (Megabytes)"
 Basic.Settings.Output.ReplayBuffer.Estimate="Estimated memory usage: %1 MB"
 Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Cannot estimate memory usage. Please set maximum memory limit."
@@ -696,7 +696,7 @@ Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 low CPU usag
 Basic.Settings.Output.VideoBitrate="Video Bitrate"
 Basic.Settings.Output.AudioBitrate="Audio Bitrate"
 Basic.Settings.Output.Reconnect="Automatically Reconnect"
-Basic.Settings.Output.RetryDelay="Retry Delay (seconds)"
+Basic.Settings.Output.RetryDelay="Retry Delay"
 Basic.Settings.Output.MaxRetries="Maximum Retries"
 Basic.Settings.Output.Advanced="Enable Advanced Encoder Settings"
 Basic.Settings.Output.EncoderPreset="Encoder Preset"
@@ -824,7 +824,7 @@ Basic.Settings.Advanced.Audio.MonitoringDevice="Monitoring Device"
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Default"
 Basic.Settings.Advanced.Audio.DisableAudioDucking="Disable Windows audio ducking"
 Basic.Settings.Advanced.StreamDelay="Stream Delay"
-Basic.Settings.Advanced.StreamDelay.Duration="Duration (seconds)"
+Basic.Settings.Advanced.StreamDelay.Duration="Duration"
 Basic.Settings.Advanced.StreamDelay.Preserve="Preserve cutoff point (increase delay) when reconnecting"
 Basic.Settings.Advanced.StreamDelay.MemoryUsage="Estimated Memory Usage: %1 MB"
 Basic.Settings.Advanced.Network="Network"
@@ -841,7 +841,7 @@ Basic.AdvAudio.Name="Name"
 Basic.AdvAudio.Volume="Volume"
 Basic.AdvAudio.Mono="Downmix to Mono"
 Basic.AdvAudio.Balance="Balance"
-Basic.AdvAudio.SyncOffset="Sync Offset (ms)"
+Basic.AdvAudio.SyncOffset="Sync Offset"
 Basic.AdvAudio.Monitoring="Audio Monitoring"
 Basic.AdvAudio.Monitoring.None="Monitor Off"
 Basic.AdvAudio.Monitoring.MonitorOnly="Monitor Only (mute output)"

+ 5 - 5
UI/forms/OBSBasic.ui

@@ -188,7 +188,7 @@
      <x>0</x>
      <y>0</y>
      <width>1079</width>
-     <height>21</height>
+     <height>22</height>
     </rect>
    </property>
    <widget class="QMenu" name="menu_File">
@@ -728,7 +728,7 @@
           <rect>
            <x>0</x>
            <y>0</y>
-           <width>80</width>
+           <width>64</width>
            <height>16</height>
           </rect>
          </property>
@@ -781,8 +781,8 @@
           <rect>
            <x>0</x>
            <y>0</y>
-           <width>28</width>
-           <height>16</height>
+           <width>16</width>
+           <height>28</height>
           </rect>
          </property>
          <property name="sizePolicy">
@@ -1025,7 +1025,7 @@
              <string>Basic.TransitionDuration</string>
             </property>
             <property name="suffix">
-             <string>ms</string>
+             <string> ms</string>
             </property>
             <property name="minimum">
              <number>2</number>

+ 21 - 32
UI/forms/OBSBasicSettings.ui

@@ -138,7 +138,7 @@
          <item>
           <widget class="QScrollArea" name="scrollArea_2">
            <property name="frameShape">
-             <enum>QFrame::NoFrame</enum>
+            <enum>QFrame::NoFrame</enum>
            </property>
            <property name="frameShadow">
             <enum>QFrame::Plain</enum>
@@ -151,8 +151,8 @@
              <rect>
               <x>0</x>
               <y>0</y>
-              <width>808</width>
-              <height>989</height>
+              <width>806</width>
+              <height>1225</height>
              </rect>
             </property>
             <layout class="QVBoxLayout" name="verticalLayout_19">
@@ -1159,22 +1159,22 @@
          </property>
          <item>
           <widget class="QScrollArea" name="scrollArea_3">
-           <property name="widgetResizable">
-            <bool>true</bool>
-           </property>
            <property name="frameShape">
-             <enum>QFrame::NoFrame</enum>
+            <enum>QFrame::NoFrame</enum>
            </property>
            <property name="frameShadow">
             <enum>QFrame::Plain</enum>
            </property>
+           <property name="widgetResizable">
+            <bool>true</bool>
+           </property>
            <widget class="QWidget" name="scrollAreaWidgetContents_3">
             <property name="geometry">
              <rect>
               <x>0</x>
               <y>0</y>
-              <width>747</width>
-              <height>808</height>
+              <width>813</width>
+              <height>761</height>
              </rect>
             </property>
             <layout class="QVBoxLayout" name="verticalLayout_21">
@@ -3511,7 +3511,7 @@
                         <item row="0" column="1">
                          <widget class="QSpinBox" name="advRBSecMax">
                           <property name="suffix">
-                           <string notr="true"> sec</string>
+                           <string notr="true"> s</string>
                           </property>
                           <property name="minimum">
                            <number>5</number>
@@ -3608,21 +3608,7 @@
          <item>
           <widget class="QScrollArea" name="scrollArea_50">
            <property name="frameShape">
-             <enum>QFrame::NoFrame</enum>
-           </property>
-           <property name="frameShadow">
-            <enum>QFrame::Plain</enum>
-           </property>
-           <property name="widgetResizable">
-            <bool>true</bool>
-           </property>
-           <property name="geometry">
-            <rect>
-             <x>0</x>
-             <y>0</y>
-             <width>594</width>
-             <height>807</height>
-            </rect>
+            <enum>QFrame::NoFrame</enum>
            </property>
            <property name="frameShadow">
             <enum>QFrame::Plain</enum>
@@ -3635,8 +3621,8 @@
              <rect>
               <x>0</x>
               <y>0</y>
-              <width>594</width>
-              <height>807</height>
+              <width>767</width>
+              <height>582</height>
              </rect>
             </property>
             <layout class="QVBoxLayout" name="verticalLayout_50">
@@ -4064,7 +4050,7 @@
            </widget>
           </widget>
          </item>
-         <item row="11" column="1">
+         <item>
           <widget class="QLabel" name="audioMsg">
            <property name="text">
             <string notr="true"/>
@@ -4077,7 +4063,7 @@
            </property>
           </widget>
          </item>
-         <item row="12" column="1">
+         <item>
           <widget class="QLabel" name="audioMsg_2">
            <property name="text">
             <string notr="true"/>
@@ -4451,8 +4437,8 @@
              <rect>
               <x>0</x>
               <y>0</y>
-              <width>765</width>
-              <height>993</height>
+              <width>806</width>
+              <height>933</height>
              </rect>
             </property>
             <layout class="QVBoxLayout" name="verticalLayout_23">
@@ -4895,7 +4881,7 @@
                          </size>
                         </property>
                         <property name="suffix">
-                         <string notr="true">s</string>
+                         <string notr="true"> s</string>
                         </property>
                         <property name="minimum">
                          <number>1</number>
@@ -4989,6 +4975,9 @@
                      </property>
                      <item>
                       <widget class="QSpinBox" name="reconnectRetryDelay">
+                       <property name="suffix">
+                        <string> s</string>
+                       </property>
                        <property name="maximum">
                         <number>30</number>
                        </property>

+ 3 - 0
UI/properties-view.cpp

@@ -334,6 +334,7 @@ void OBSPropertiesView::AddInt(obs_property_t *prop, QFormLayout *layout,
 	spin->setValue(val);
 	spin->setToolTip(QT_UTF8(obs_property_long_description(prop)));
 	spin->setSuffix(QT_UTF8(suffix));
+	spin->setFixedWidth(100);
 
 	WidgetInfo *info = new WidgetInfo(this, prop, spin);
 	children.emplace_back(info);
@@ -385,6 +386,8 @@ void OBSPropertiesView::AddFloat(obs_property_t *prop, QFormLayout *layout,
 	spin->setValue(val);
 	spin->setToolTip(QT_UTF8(obs_property_long_description(prop)));
 	spin->setSuffix(QT_UTF8(suffix));
+	spin->setDecimals(1);
+	spin->setFixedWidth(100);
 
 	WidgetInfo *info = new WidgetInfo(this, prop, spin);
 	children.emplace_back(info);

+ 2 - 2
plugins/obs-ffmpeg/data/locale/en-US.ini

@@ -29,7 +29,7 @@ LocalFile="Local File"
 Looping="Loop"
 Input="Input"
 InputFormat="Input Format"
-BufferingMB="Network Buffering (MB)"
+BufferingMB="Network Buffering"
 HardwareDecode="Use hardware decoding when available"
 ClearOnMediaEnd="Show nothing when playback ends"
 Advanced="Advanced"
@@ -41,7 +41,7 @@ ColorRange.Auto="Auto"
 ColorRange.Partial="Partial"
 ColorRange.Full="Full"
 RestartMedia="Restart Media"
-SpeedPercentage="Speed (percent)"
+SpeedPercentage="Speed"
 Seekable="Seekable"
 
 MediaFileFilter.AllMediaFiles="All Media Files"

+ 8 - 5
plugins/obs-ffmpeg/obs-ffmpeg-source.c

@@ -155,8 +155,10 @@ static obs_properties_t *ffmpeg_source_getproperties(void *data)
 	obs_properties_add_bool(props, "restart_on_activate",
 				obs_module_text("RestartWhenActivated"));
 
-	obs_properties_add_int_slider(props, "buffering_mb",
-				      obs_module_text("BufferingMB"), 1, 16, 1);
+	prop = obs_properties_add_int_slider(props, "buffering_mb",
+					     obs_module_text("BufferingMB"), 1,
+					     16, 1);
+	obs_property_int_set_suffix(prop, " MB");
 
 	obs_properties_add_text(props, "input", obs_module_text("Input"),
 				OBS_TEXT_DEFAULT);
@@ -180,9 +182,10 @@ static obs_properties_t *ffmpeg_source_getproperties(void *data)
 	obs_property_set_long_description(
 		prop, obs_module_text("CloseFileWhenInactive.ToolTip"));
 
-	obs_properties_add_int_slider(props, "speed_percent",
-				      obs_module_text("SpeedPercentage"), 1,
-				      200, 1);
+	prop = obs_properties_add_int_slider(props, "speed_percent",
+					     obs_module_text("SpeedPercentage"),
+					     1, 200, 1);
+	obs_property_int_set_suffix(prop, "%");
 
 	prop = obs_properties_add_list(props, "color_range",
 				       obs_module_text("ColorRange"),

+ 3 - 2
plugins/obs-filters/async-delay-filter.c

@@ -115,8 +115,9 @@ static obs_properties_t *async_delay_filter_properties(void *data)
 {
 	obs_properties_t *props = obs_properties_create();
 
-	obs_properties_add_int(props, SETTING_DELAY_MS, TEXT_DELAY_MS, 0, 20000,
-			       1);
+	obs_property_t *p = obs_properties_add_int(props, SETTING_DELAY_MS,
+						   TEXT_DELAY_MS, 0, 20000, 1);
+	obs_property_int_set_suffix(p, " ms");
 
 	UNUSED_PARAMETER(data);
 	return props;

+ 21 - 12
plugins/obs-filters/compressor-filter.c

@@ -499,22 +499,31 @@ static obs_properties_t *compressor_properties(void *data)
 	struct compressor_data *cd = data;
 	obs_properties_t *props = obs_properties_create();
 	obs_source_t *parent = NULL;
+	obs_property_t *p;
 
 	if (cd)
 		parent = obs_filter_get_parent(cd->context);
 
-	obs_properties_add_float_slider(props, S_RATIO, TEXT_RATIO, MIN_RATIO,
-					MAX_RATIO, 0.5);
-	obs_properties_add_float_slider(props, S_THRESHOLD, TEXT_THRESHOLD,
-					MIN_THRESHOLD_DB, MAX_THRESHOLD_DB,
-					0.1);
-	obs_properties_add_int_slider(props, S_ATTACK_TIME, TEXT_ATTACK_TIME,
-				      MIN_ATK_RLS_MS, MAX_ATK_MS, 1);
-	obs_properties_add_int_slider(props, S_RELEASE_TIME, TEXT_RELEASE_TIME,
-				      MIN_ATK_RLS_MS, MAX_RLS_MS, 1);
-	obs_properties_add_float_slider(props, S_OUTPUT_GAIN, TEXT_OUTPUT_GAIN,
-					MIN_OUTPUT_GAIN_DB, MAX_OUTPUT_GAIN_DB,
-					0.1);
+	p = obs_properties_add_float_slider(props, S_RATIO, TEXT_RATIO,
+					    MIN_RATIO, MAX_RATIO, 0.5);
+	obs_property_float_set_suffix(p, ":1");
+	p = obs_properties_add_float_slider(props, S_THRESHOLD, TEXT_THRESHOLD,
+					    MIN_THRESHOLD_DB, MAX_THRESHOLD_DB,
+					    0.1);
+	obs_property_float_set_suffix(p, " dB");
+	p = obs_properties_add_int_slider(props, S_ATTACK_TIME,
+					  TEXT_ATTACK_TIME, MIN_ATK_RLS_MS,
+					  MAX_ATK_MS, 1);
+	obs_property_int_set_suffix(p, " ms");
+	p = obs_properties_add_int_slider(props, S_RELEASE_TIME,
+					  TEXT_RELEASE_TIME, MIN_ATK_RLS_MS,
+					  MAX_RLS_MS, 1);
+	obs_property_int_set_suffix(p, " ms");
+	p = obs_properties_add_float_slider(props, S_OUTPUT_GAIN,
+					    TEXT_OUTPUT_GAIN,
+					    MIN_OUTPUT_GAIN_DB,
+					    MAX_OUTPUT_GAIN_DB, 0.1);
+	obs_property_float_set_suffix(p, " dB");
 
 	obs_property_t *sources = obs_properties_add_list(
 		props, S_SIDECHAIN_SOURCE, TEXT_SIDECHAIN_SOURCE,

+ 20 - 20
plugins/obs-filters/data/locale/en-US.ini

@@ -14,7 +14,7 @@ NoiseGate="Noise Gate"
 NoiseSuppress="Noise Suppression"
 InvertPolarity="Invert Polarity"
 Gain="Gain"
-DelayMs="Delay (milliseconds)"
+DelayMs="Delay"
 Type="Type"
 MaskBlendType.MaskColor="Alpha Mask (Color Channel)"
 MaskBlendType.MaskAlpha="Alpha Mask (Alpha Channel)"
@@ -50,12 +50,12 @@ Red="Red"
 Green="Green"
 Blue="Blue"
 Magenta="Magenta"
-NoiseGate.OpenThreshold="Open Threshold (dB)"
-NoiseGate.CloseThreshold="Close Threshold (dB)"
-NoiseGate.AttackTime="Attack Time (milliseconds)"
-NoiseGate.HoldTime="Hold Time (milliseconds)"
-NoiseGate.ReleaseTime="Release Time (milliseconds)"
-Gain.GainDB="Gain (dB)"
+NoiseGate.OpenThreshold="Open Threshold"
+NoiseGate.CloseThreshold="Close Threshold"
+NoiseGate.AttackTime="Attack Time"
+NoiseGate.HoldTime="Hold Time"
+NoiseGate.ReleaseTime="Release Time"
+Gain.GainDB="Gain"
 StretchImage="Stretch Image (discard image aspect ratio)"
 Resolution="Resolution"
 Base.Canvas="Base (Canvas) Resolution"
@@ -66,26 +66,26 @@ ScaleFiltering.Bilinear="Bilinear"
 ScaleFiltering.Bicubic="Bicubic"
 ScaleFiltering.Lanczos="Lanczos"
 ScaleFiltering.Area="Area"
-NoiseSuppress.SuppressLevel="Suppression Level (dB)"
+NoiseSuppress.SuppressLevel="Suppression Level"
 Saturation="Saturation"
 HueShift="Hue Shift"
 Amount="Amount"
 Compressor="Compressor"
-Compressor.Ratio="Ratio (X:1)"
-Compressor.Threshold="Threshold (dB)"
-Compressor.AttackTime="Attack (ms)"
-Compressor.ReleaseTime="Release (ms)"
-Compressor.OutputGain="Output Gain (dB)"
+Compressor.Ratio="Ratio"
+Compressor.Threshold="Threshold"
+Compressor.AttackTime="Attack"
+Compressor.ReleaseTime="Release"
+Compressor.OutputGain="Output Gain"
 Compressor.SidechainSource="Sidechain/Ducking Source"
 Limiter="Limiter"
-Limiter.Threshold="Threshold (dB)"
-Limiter.ReleaseTime="Release (ms)"
+Limiter.Threshold="Threshold"
+Limiter.ReleaseTime="Release"
 Expander="Expander"
-Expander.Ratio="Ratio (X:1)"
-Expander.Threshold="Threshold (dB)"
-Expander.AttackTime="Attack (ms)"
-Expander.ReleaseTime="Release (ms)"
-Expander.OutputGain="Output Gain (dB)"
+Expander.Ratio="Ratio"
+Expander.Threshold="Threshold"
+Expander.AttackTime="Attack"
+Expander.ReleaseTime="Release"
+Expander.OutputGain="Output Gain"
 Expander.Detector="Detection"
 Expander.RMS="RMS"
 Expander.Peak="Peak"

+ 21 - 12
plugins/obs-filters/expander-filter.c

@@ -387,6 +387,7 @@ static bool presets_changed(obs_properties_t *props, obs_property_t *prop,
 static obs_properties_t *expander_properties(void *data)
 {
 	obs_properties_t *props = obs_properties_create();
+	obs_property_t *p;
 
 	obs_property_t *presets = obs_properties_add_list(
 		props, S_PRESETS, TEXT_PRESETS, OBS_COMBO_TYPE_LIST,
@@ -394,18 +395,26 @@ static obs_properties_t *expander_properties(void *data)
 	obs_property_list_add_string(presets, TEXT_PRESETS_EXP, "expander");
 	obs_property_list_add_string(presets, TEXT_PRESETS_GATE, "gate");
 	obs_property_set_modified_callback(presets, presets_changed);
-	obs_properties_add_float_slider(props, S_RATIO, TEXT_RATIO, MIN_RATIO,
-					MAX_RATIO, 0.1);
-	obs_properties_add_float_slider(props, S_THRESHOLD, TEXT_THRESHOLD,
-					MIN_THRESHOLD_DB, MAX_THRESHOLD_DB,
-					0.1);
-	obs_properties_add_int_slider(props, S_ATTACK_TIME, TEXT_ATTACK_TIME,
-				      MIN_ATK_RLS_MS, MAX_ATK_MS, 1);
-	obs_properties_add_int_slider(props, S_RELEASE_TIME, TEXT_RELEASE_TIME,
-				      MIN_ATK_RLS_MS, MAX_RLS_MS, 1);
-	obs_properties_add_float_slider(props, S_OUTPUT_GAIN, TEXT_OUTPUT_GAIN,
-					MIN_OUTPUT_GAIN_DB, MAX_OUTPUT_GAIN_DB,
-					0.1);
+	p = obs_properties_add_float_slider(props, S_RATIO, TEXT_RATIO,
+					    MIN_RATIO, MAX_RATIO, 0.1);
+	obs_property_float_set_suffix(p, ":1");
+	p = obs_properties_add_float_slider(props, S_THRESHOLD, TEXT_THRESHOLD,
+					    MIN_THRESHOLD_DB, MAX_THRESHOLD_DB,
+					    0.1);
+	obs_property_float_set_suffix(p, " dB");
+	p = obs_properties_add_int_slider(props, S_ATTACK_TIME,
+					  TEXT_ATTACK_TIME, MIN_ATK_RLS_MS,
+					  MAX_ATK_MS, 1);
+	obs_property_int_set_suffix(p, " ms");
+	p = obs_properties_add_int_slider(props, S_RELEASE_TIME,
+					  TEXT_RELEASE_TIME, MIN_ATK_RLS_MS,
+					  MAX_RLS_MS, 1);
+	obs_property_int_set_suffix(p, " ms");
+	p = obs_properties_add_float_slider(props, S_OUTPUT_GAIN,
+					    TEXT_OUTPUT_GAIN,
+					    MIN_OUTPUT_GAIN_DB,
+					    MAX_OUTPUT_GAIN_DB, 0.1);
+	obs_property_float_set_suffix(p, " dB");
 	obs_property_t *detect = obs_properties_add_list(
 		props, S_DETECTOR, TEXT_DETECTOR, OBS_COMBO_TYPE_LIST,
 		OBS_COMBO_FORMAT_STRING);

+ 3 - 2
plugins/obs-filters/gain-filter.c

@@ -76,8 +76,9 @@ static obs_properties_t *gain_properties(void *data)
 {
 	obs_properties_t *ppts = obs_properties_create();
 
-	obs_properties_add_float_slider(ppts, S_GAIN_DB, TEXT_GAIN_DB, -30.0,
-					30.0, 0.1);
+	obs_property_t *p = obs_properties_add_float_slider(
+		ppts, S_GAIN_DB, TEXT_GAIN_DB, -30.0, 30.0, 0.1);
+	obs_property_float_set_suffix(p, " dB");
 
 	UNUSED_PARAMETER(data);
 	return ppts;

+ 3 - 1
plugins/obs-filters/gpu-delay.c

@@ -148,7 +148,9 @@ static obs_properties_t *gpu_delay_filter_properties(void *data)
 {
 	obs_properties_t *props = obs_properties_create();
 
-	obs_properties_add_int(props, S_DELAY_MS, T_DELAY_MS, 0, 500, 1);
+	obs_property_t *p = obs_properties_add_int(props, S_DELAY_MS,
+						   T_DELAY_MS, 0, 500, 1);
+	obs_property_int_set_suffix(p, " ms");
 
 	UNUSED_PARAMETER(data);
 	return props;

+ 10 - 6
plugins/obs-filters/limiter-filter.c

@@ -196,12 +196,16 @@ static void limiter_defaults(obs_data_t *s)
 static obs_properties_t *limiter_properties(void *data)
 {
 	obs_properties_t *props = obs_properties_create();
-
-	obs_properties_add_float_slider(props, S_THRESHOLD, TEXT_THRESHOLD,
-					MIN_THRESHOLD_DB, MAX_THRESHOLD_DB,
-					0.1);
-	obs_properties_add_int_slider(props, S_RELEASE_TIME, TEXT_RELEASE_TIME,
-				      MIN_ATK_RLS_MS, MAX_RLS_MS, 1);
+	obs_property_t *p;
+
+	p = obs_properties_add_float_slider(props, S_THRESHOLD, TEXT_THRESHOLD,
+					    MIN_THRESHOLD_DB, MAX_THRESHOLD_DB,
+					    0.1);
+	obs_property_float_set_suffix(p, " dB");
+	p = obs_properties_add_int_slider(props, S_RELEASE_TIME,
+					  TEXT_RELEASE_TIME, MIN_ATK_RLS_MS,
+					  MAX_RLS_MS, 1);
+	obs_property_int_set_suffix(p, " ms");
 
 	UNUSED_PARAMETER(data);
 	return props;

+ 19 - 12
plugins/obs-filters/noise-gate-filter.c

@@ -169,18 +169,25 @@ static void noise_gate_defaults(obs_data_t *s)
 static obs_properties_t *noise_gate_properties(void *data)
 {
 	obs_properties_t *ppts = obs_properties_create();
-
-	obs_properties_add_float_slider(ppts, S_CLOSE_THRESHOLD,
-					TEXT_CLOSE_THRESHOLD, VOL_MIN, VOL_MAX,
-					1.0);
-	obs_properties_add_float_slider(ppts, S_OPEN_THRESHOLD,
-					TEXT_OPEN_THRESHOLD, VOL_MIN, VOL_MAX,
-					1.0);
-	obs_properties_add_int(ppts, S_ATTACK_TIME, TEXT_ATTACK_TIME, 0, 10000,
-			       1);
-	obs_properties_add_int(ppts, S_HOLD_TIME, TEXT_HOLD_TIME, 0, 10000, 1);
-	obs_properties_add_int(ppts, S_RELEASE_TIME, TEXT_RELEASE_TIME, 0,
-			       10000, 1);
+	obs_property_t *p;
+
+	p = obs_properties_add_float_slider(ppts, S_CLOSE_THRESHOLD,
+					    TEXT_CLOSE_THRESHOLD, VOL_MIN,
+					    VOL_MAX, 1.0);
+	obs_property_float_set_suffix(p, " dB");
+	p = obs_properties_add_float_slider(ppts, S_OPEN_THRESHOLD,
+					    TEXT_OPEN_THRESHOLD, VOL_MIN,
+					    VOL_MAX, 1.0);
+	obs_property_float_set_suffix(p, " dB");
+	p = obs_properties_add_int(ppts, S_ATTACK_TIME, TEXT_ATTACK_TIME, 0,
+				   10000, 1);
+	obs_property_int_set_suffix(p, " ms");
+	p = obs_properties_add_int(ppts, S_HOLD_TIME, TEXT_HOLD_TIME, 0, 10000,
+				   1);
+	obs_property_int_set_suffix(p, " ms");
+	p = obs_properties_add_int(ppts, S_RELEASE_TIME, TEXT_RELEASE_TIME, 0,
+				   10000, 1);
+	obs_property_int_set_suffix(p, " ms");
 
 	UNUSED_PARAMETER(data);
 	return ppts;

+ 5 - 2
plugins/obs-filters/noise-suppress-filter.c

@@ -282,8 +282,11 @@ static obs_properties_t *noise_suppress_properties(void *data)
 {
 	obs_properties_t *ppts = obs_properties_create();
 
-	obs_properties_add_int_slider(ppts, S_SUPPRESS_LEVEL,
-				      TEXT_SUPPRESS_LEVEL, SUP_MIN, SUP_MAX, 1);
+	obs_property_t *p = obs_properties_add_int_slider(ppts,
+							  S_SUPPRESS_LEVEL,
+							  TEXT_SUPPRESS_LEVEL,
+							  SUP_MIN, SUP_MAX, 1);
+	obs_property_int_set_suffix(p, " dB");
 
 	UNUSED_PARAMETER(data);
 	return ppts;

+ 12 - 7
plugins/obs-text/gdiplus/obs-text.cpp

@@ -947,20 +947,24 @@ static obs_properties_t *get_properties(void *data)
 
 	obs_properties_add_bool(props, S_VERTICAL, T_VERTICAL);
 	obs_properties_add_color(props, S_COLOR, T_COLOR);
-	obs_properties_add_int_slider(props, S_OPACITY, T_OPACITY, 0, 100, 1);
+	p = obs_properties_add_int_slider(props, S_OPACITY, T_OPACITY, 0, 100,
+					  1);
+	obs_property_int_set_suffix(p, "%");
 
 	p = obs_properties_add_bool(props, S_GRADIENT, T_GRADIENT);
 	obs_property_set_modified_callback(p, gradient_changed);
 
 	obs_properties_add_color(props, S_GRADIENT_COLOR, T_GRADIENT_COLOR);
-	obs_properties_add_int_slider(props, S_GRADIENT_OPACITY,
-				      T_GRADIENT_OPACITY, 0, 100, 1);
+	p = obs_properties_add_int_slider(props, S_GRADIENT_OPACITY,
+					  T_GRADIENT_OPACITY, 0, 100, 1);
+	obs_property_int_set_suffix(p, "%");
 	obs_properties_add_float_slider(props, S_GRADIENT_DIR, T_GRADIENT_DIR,
 					0, 360, 0.1);
 
 	obs_properties_add_color(props, S_BKCOLOR, T_BKCOLOR);
-	obs_properties_add_int_slider(props, S_BKOPACITY, T_BKOPACITY, 0, 100,
-				      1);
+	p = obs_properties_add_int_slider(props, S_BKOPACITY, T_BKOPACITY, 0,
+					  100, 1);
+	obs_property_int_set_suffix(p, "%");
 
 	p = obs_properties_add_list(props, S_ALIGN, T_ALIGN,
 				    OBS_COMBO_TYPE_LIST,
@@ -981,8 +985,9 @@ static obs_properties_t *get_properties(void *data)
 
 	obs_properties_add_int(props, S_OUTLINE_SIZE, T_OUTLINE_SIZE, 1, 20, 1);
 	obs_properties_add_color(props, S_OUTLINE_COLOR, T_OUTLINE_COLOR);
-	obs_properties_add_int_slider(props, S_OUTLINE_OPACITY,
-				      T_OUTLINE_OPACITY, 0, 100, 1);
+	p = obs_properties_add_int_slider(props, S_OUTLINE_OPACITY,
+					  T_OUTLINE_OPACITY, 0, 100, 1);
+	obs_property_int_set_suffix(p, "%");
 
 	p = obs_properties_add_bool(props, S_CHATLOG_MODE, T_CHATLOG_MODE);
 	obs_property_set_modified_callback(p, chatlog_mode_changed);

+ 2 - 2
plugins/obs-transitions/data/locale/en-US.ini

@@ -12,7 +12,7 @@ Direction.Down="Down"
 SwipeIn="Swipe In"
 Color="Color"
 VideoFile="Video File"
-TransitionPoint="Transition Point (milliseconds)"
+TransitionPoint="Transition Point"
 TransitionPointFrame="Transition Point (frame)"
 TransitionPointType="Transition Point Type"
 TransitionPointTypeFrame="Frame"
@@ -20,7 +20,7 @@ TransitionPointTypeTime="Time (milliseconds)"
 AudioFadeStyle="Audio Fade Style"
 AudioFadeStyle.FadeOutFadeIn="Fade out to transition point then fade in"
 AudioFadeStyle.CrossFade="Crossfade"
-SwitchPoint="Peak Color Point (percentage)"
+SwitchPoint="Peak Color Point"
 LumaWipeTransition="Luma Wipe"
 LumaWipe.Image="Image"
 LumaWipe.Invert="Invert"

+ 3 - 2
plugins/obs-transitions/transition-fade-to-color.c

@@ -154,8 +154,9 @@ static obs_properties_t *fade_to_color_properties(void *data)
 	obs_properties_t *props = obs_properties_create();
 
 	obs_properties_add_color(props, S_COLOR, S_COLOR_TEXT);
-	obs_properties_add_int_slider(props, S_SWITCH_POINT,
-				      S_SWITCH_POINT_TEXT, 0, 100, 1);
+	obs_property_t *p = obs_properties_add_int_slider(
+		props, S_SWITCH_POINT, S_SWITCH_POINT_TEXT, 0, 100, 1);
+	obs_property_int_set_suffix(p, "%");
 
 	UNUSED_PARAMETER(data);
 	return props;

+ 9 - 10
plugins/obs-transitions/transition-stinger.c

@@ -310,21 +310,20 @@ static obs_properties_t *stinger_properties(void *data)
 
 	obs_properties_add_path(ppts, "path", obs_module_text("VideoFile"),
 				OBS_PATH_FILE, FILE_FILTER, NULL);
-	obs_property_t *list = obs_properties_add_list(
+	obs_property_t *p = obs_properties_add_list(
 		ppts, "tp_type", obs_module_text("TransitionPointType"),
 		OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
+	obs_property_list_add_int(p, obs_module_text("TransitionPointTypeTime"),
+				  TIMING_TIME);
 	obs_property_list_add_int(
-		list, obs_module_text("TransitionPointTypeTime"), TIMING_TIME);
-	obs_property_list_add_int(list,
-				  obs_module_text("TransitionPointTypeFrame"),
-				  TIMING_FRAME);
+		p, obs_module_text("TransitionPointTypeFrame"), TIMING_FRAME);
 
-	obs_property_set_modified_callback(list,
-					   transition_point_type_modified);
+	obs_property_set_modified_callback(p, transition_point_type_modified);
 
-	obs_properties_add_int(ppts, "transition_point",
-			       obs_module_text("TransitionPoint"), 0, 120000,
-			       1);
+	p = obs_properties_add_int(ppts, "transition_point",
+				   obs_module_text("TransitionPoint"), 0,
+				   120000, 1);
+	obs_property_int_set_suffix(p, " ms");
 
 	obs_property_t *monitor_list = obs_properties_add_list(
 		ppts, "audio_monitoring", obs_module_text("AudioMonitoring"),