diff --git a/TwitchDownloaderCLI/Modes/Arguments/ChatRenderArgs.cs b/TwitchDownloaderCLI/Modes/Arguments/ChatRenderArgs.cs index b0d5ee5e..633779d2 100644 --- a/TwitchDownloaderCLI/Modes/Arguments/ChatRenderArgs.cs +++ b/TwitchDownloaderCLI/Modes/Arguments/ChatRenderArgs.cs @@ -12,10 +12,13 @@ public class ChatRenderArgs [Option('o', "output", Required = true, HelpText = "File the program will output to.")] public string OutputFile { get; set; } - [Option("background-color", Default = "#111111", HelpText = "Color of background in HEX string format.")] + [Option("background-color", Default = "#111111", HelpText = "The render background color in the string format of '#RRGGBB' or '#AARRGGBB' in hexadecimal.")] public string BackgroundColor { get; set; } - [Option("message-color", Default = "#ffffff", HelpText = "Color of messages in HEX string format.")] + [Option("alt-background-color", Default = "#191919", HelpText = "The alternate message background color in the string format of '#RRGGBB' or '#AARRGGBB' in hexadecimal. Requires --alternate-backgrounds")] + public string AlternateBackgroundColor { get; set; } + + [Option("message-color", Default = "#ffffff", HelpText = "The message text color in the string format of '#RRGGBB' or '#AARRGGBB' in hexadecimal.")] public string MessageColor { get; set; } [Option('w', "chat-width", Default = 350, HelpText = "Width of chat render.")] @@ -97,7 +100,10 @@ public class ChatRenderArgs public int BadgeFilterMask { get; set; } [Option("dispersion", Default = false, HelpText = "In November 2022 a Twitch API change made chat messages download only in whole seconds. If there are multiple messages on a second, they will be intelligently distributed over the second to improve chat flow. Requires an update rate less than 1.0 for effective results.")] - public bool? DisperseCommentOffsets { get; set; } + public bool DisperseCommentOffsets { get; set; } + + [Option("alternate-backgrounds", Default = false, HelpText = "Alternates the background color of every other chat message to help tell them apart.")] + public bool AlternateMessageBackgrounds { get; set; } [Option("offline", Default = false, HelpText = "Render completely offline using only embedded emotes, badges, and bits from the input json.")] public bool Offline { get; set; } diff --git a/TwitchDownloaderCLI/Modes/RenderChat.cs b/TwitchDownloaderCLI/Modes/RenderChat.cs index 7cbba1ac..d9d47d78 100644 --- a/TwitchDownloaderCLI/Modes/RenderChat.cs +++ b/TwitchDownloaderCLI/Modes/RenderChat.cs @@ -32,6 +32,7 @@ private static ChatRenderOptions GetRenderOptions(ChatRenderArgs inputOptions) InputFile = inputOptions.InputFile, OutputFile = inputOptions.OutputFile, BackgroundColor = SKColor.Parse(inputOptions.BackgroundColor), + AlternateBackgroundColor = SKColor.Parse(inputOptions.AlternateBackgroundColor), MessageColor = SKColor.Parse(inputOptions.MessageColor), ChatHeight = inputOptions.ChatHeight, ChatWidth = inputOptions.ChatWidth, @@ -90,10 +91,11 @@ private static ChatRenderOptions GetRenderOptions(ChatRenderArgs inputOptions) EmoteSpacingScale = inputOptions.ScaleEmoteSpace, AccentIndentScale = inputOptions.ScaleAccentIndent, AccentStrokeScale = inputOptions.ScaleAccentStroke, - DisperseCommentOffsets = (bool)inputOptions.DisperseCommentOffsets + DisperseCommentOffsets = inputOptions.DisperseCommentOffsets, + AlternateMessageBackgrounds = inputOptions.AlternateMessageBackgrounds }; - if (renderOptions.GenerateMask && renderOptions.BackgroundColor.Alpha == 255) + if (renderOptions.GenerateMask && renderOptions.BackgroundColor.Alpha == 255 && !(renderOptions.AlternateMessageBackgrounds! && renderOptions.AlternateBackgroundColor.Alpha != 255)) { Console.WriteLine("[WARNING] - Generate mask option has been selected with an opaque background. You most likely want to set a transparent background with --background-color \"#00000000\""); } diff --git a/TwitchDownloaderCLI/README.md b/TwitchDownloaderCLI/README.md index f04f0dc1..563f3c99 100644 --- a/TwitchDownloaderCLI/README.md +++ b/TwitchDownloaderCLI/README.md @@ -152,10 +152,13 @@ The path to the `.json` or `.json.gz` chat file input. File the program will output to. **--background-color** -(Default: `#111111`) Color of background in HEX string format. +(Default: `#111111`) The render background color in the string format of `#RRGGBB` or `#AARRGGBB` in hexadecimal. + +**--alt-background-color** +(Default: `#191919`) The alternate message background color in the string format of `#RRGGBB` or `#AARRGGBB` in hexadecimal. Requires `--alternate-backgrounds`. **--message-color** -(Default: `#ffffff`) Color of messages in HEX string format. +(Default: `#ffffff`) The message text color in the string format of `#RRGGBB` or `#AARRGGBB` in hexadecimal. **-w / --chat-width** (Default: `350`) Width of chat render. @@ -240,6 +243,9 @@ Other = `1`, Broadcaster = `2`, Moderator = `4`, VIP = `8`, Subscriber = `16`, P **--dispersion** (Default: `false`) In November 2022 a Twitch API change made chat messages download only in whole seconds. If there are multiple messages on a second, they will be intelligently distributed over the second to improve chat flow. Requires an update rate less than 1.0 for effective results. +**--alternate-backgrounds** +(Default: `false`) Alternates the background color of every other chat message to help tell them apart. + **--offline** (Default: `false`) Render completely offline using only embedded emotes, badges, and bits from the input json. diff --git a/TwitchDownloaderCore/ChatRenderer.cs b/TwitchDownloaderCore/ChatRenderer.cs index 9b7de55c..69d637af 100644 --- a/TwitchDownloaderCore/ChatRenderer.cs +++ b/TwitchDownloaderCore/ChatRenderer.cs @@ -512,6 +512,12 @@ private UpdateFrame GenerateUpdateFrame(int currentTick, int sectionDefaultYPos, { var comment = commentList[commentListIndex]; frameHeight -= comment.Image.Height + renderOptions.VerticalPadding; + + if (renderOptions.AlternateMessageBackgrounds && comment.CommentIndex % 2 == 1) + { + frameCanvas.DrawRect(0, frameHeight - renderOptions.VerticalPadding / 2f, newFrame.Width, comment.Image.Height + renderOptions.VerticalPadding, renderOptions.AlternateBackgroundPaint); + } + frameCanvas.DrawBitmap(comment.Image, 0, frameHeight); for (int i = 0; i < comment.Emotes.Count; i++) diff --git a/TwitchDownloaderCore/Options/ChatRenderOptions.cs b/TwitchDownloaderCore/Options/ChatRenderOptions.cs index 93f61173..ef00fdd7 100644 --- a/TwitchDownloaderCore/Options/ChatRenderOptions.cs +++ b/TwitchDownloaderCore/Options/ChatRenderOptions.cs @@ -10,6 +10,10 @@ public class ChatRenderOptions public string InputFile { get; set; } public string OutputFile { get; set; } public SKColor BackgroundColor { get; set; } + public SKColor AlternateBackgroundColor { get; set; } + private SKPaint _alternateBackgroundPaint; + public SKPaint AlternateBackgroundPaint => _alternateBackgroundPaint ??= new SKPaint { Color = AlternateBackgroundColor, BlendMode = SKBlendMode.Src }; + public bool AlternateMessageBackgrounds { get; set; } public SKColor MessageColor { get; set; } public int ChatHeight { get; set; } public int ChatWidth { get; set; } diff --git a/TwitchDownloaderWPF/App.config b/TwitchDownloaderWPF/App.config index 7dd5e9c0..929b6697 100644 --- a/TwitchDownloaderWPF/App.config +++ b/TwitchDownloaderWPF/App.config @@ -59,6 +59,9 @@ True + + 255 + 17 @@ -68,6 +71,18 @@ 17 + + 255 + + + 19 + + + 19 + + + 19 + 255 @@ -86,9 +101,6 @@ H264 - - 255 - @@ -227,6 +239,9 @@ False + + False + \ No newline at end of file diff --git a/TwitchDownloaderWPF/PageChatRender.xaml b/TwitchDownloaderWPF/PageChatRender.xaml index 5613713e..568bd3c2 100644 --- a/TwitchDownloaderWPF/PageChatRender.xaml +++ b/TwitchDownloaderWPF/PageChatRender.xaml @@ -50,12 +50,14 @@ + + @@ -68,6 +70,7 @@ (?): + (?): @@ -76,6 +79,7 @@ + diff --git a/TwitchDownloaderWPF/PageChatRender.xaml.cs b/TwitchDownloaderWPF/PageChatRender.xaml.cs index 8110a7bf..e180e12f 100644 --- a/TwitchDownloaderWPF/PageChatRender.xaml.cs +++ b/TwitchDownloaderWPF/PageChatRender.xaml.cs @@ -88,12 +88,15 @@ private void UpdateActionButtons(bool isRendering) public ChatRenderOptions GetOptions(string filename) { SKColor backgroundColor = new(colorBackground.SelectedColor.Value.R, colorBackground.SelectedColor.Value.G, colorBackground.SelectedColor.Value.B, colorBackground.SelectedColor.Value.A); + SKColor altBackgroundColor = new(colorAlternateBackground.SelectedColor.Value.R, colorAlternateBackground.SelectedColor.Value.G, colorAlternateBackground.SelectedColor.Value.B, colorAlternateBackground.SelectedColor.Value.A); SKColor messageColor = new(colorFont.SelectedColor.Value.R, colorFont.SelectedColor.Value.G, colorFont.SelectedColor.Value.B); ChatRenderOptions options = new() { OutputFile = filename, InputFile = textJson.Text, BackgroundColor = backgroundColor, + AlternateBackgroundColor = altBackgroundColor, + AlternateMessageBackgrounds = (bool)checkAlternateMessageBackgrounds.IsChecked, ChatHeight = int.Parse(textHeight.Text), ChatWidth = int.Parse(textWidth.Text), BttvEmotes = (bool)checkBTTV.IsChecked, @@ -129,6 +132,7 @@ public ChatRenderOptions GetOptions(string filename) SubMessages = (bool)checkSub.IsChecked, ChatBadges = (bool)checkBadge.IsChecked, Offline = (bool)checkOffline.IsChecked, + AllowUnlistedEmotes = true, DisperseCommentOffsets = (bool)checkDispersion.IsChecked, LogFfmpegOutput = true }; @@ -172,7 +176,8 @@ private void LoadSettings() comboFont.SelectedItem = Settings.Default.Font; checkOutline.IsChecked = Settings.Default.Outline; checkTimestamp.IsChecked = Settings.Default.Timestamp; - colorBackground.SelectedColor = System.Windows.Media.Color.FromArgb((byte)Settings.Default.BackgroundColorA, (byte)Settings.Default.BackgroundColorR, (byte)Settings.Default.BackgroundColorG, (byte)Settings.Default.BackgroundColorB); + colorBackground.SelectedColor = System.Windows.Media.Color.FromArgb(Settings.Default.BackgroundColorA, Settings.Default.BackgroundColorR, Settings.Default.BackgroundColorG, Settings.Default.BackgroundColorB); + colorAlternateBackground.SelectedColor = System.Windows.Media.Color.FromArgb(Settings.Default.AlternateBackgroundColorA, Settings.Default.AlternateBackgroundColorR, Settings.Default.AlternateBackgroundColorG, Settings.Default.AlternateBackgroundColorB); checkFFZ.IsChecked = Settings.Default.FFZEmotes; checkBTTV.IsChecked = Settings.Default.BTTVEmotes; checkSTV.IsChecked = Settings.Default.STVEmotes; @@ -180,7 +185,7 @@ private void LoadSettings() textWidth.Text = Settings.Default.Width.ToString(); numFontSize.Value = Settings.Default.FontSize; textUpdateTime.Text = Settings.Default.UpdateTime.ToString("0.0#"); - colorFont.SelectedColor = System.Windows.Media.Color.FromRgb((byte)Settings.Default.FontColorR, (byte)Settings.Default.FontColorG, (byte)Settings.Default.FontColorB); + colorFont.SelectedColor = System.Windows.Media.Color.FromRgb(Settings.Default.FontColorR, Settings.Default.FontColorG, Settings.Default.FontColorB); textFramerate.Text = Settings.Default.Framerate.ToString(); checkMask.IsChecked = Settings.Default.GenerateMask; CheckRenderSharpening.IsChecked = Settings.Default.ChatRenderSharpening; @@ -201,6 +206,7 @@ private void LoadSettings() textBannedWordsList.Text = Settings.Default.BannedWordsList; checkOffline.IsChecked = Settings.Default.Offline; checkDispersion.IsChecked = Settings.Default.DisperseCommentOffsets; + checkAlternateMessageBackgrounds.IsChecked = Settings.Default.AlternateMessageBackgrounds; RadioEmojiNotoColor.IsChecked = (EmojiVendor)Settings.Default.RenderEmojiVendor == EmojiVendor.GoogleNotoColor; RadioEmojiTwemoji.IsChecked = (EmojiVendor)Settings.Default.RenderEmojiVendor == EmojiVendor.TwitterTwemoji; RadioEmojiNone.IsChecked = (EmojiVendor)Settings.Default.RenderEmojiVendor == EmojiVendor.None; @@ -287,6 +293,10 @@ public void SaveSettings() Settings.Default.BackgroundColorG = colorBackground.SelectedColor.Value.G; Settings.Default.BackgroundColorB = colorBackground.SelectedColor.Value.B; Settings.Default.BackgroundColorA = colorBackground.SelectedColor.Value.A; + Settings.Default.AlternateBackgroundColorR = colorAlternateBackground.SelectedColor.Value.R; + Settings.Default.AlternateBackgroundColorG = colorAlternateBackground.SelectedColor.Value.G; + Settings.Default.AlternateBackgroundColorB = colorAlternateBackground.SelectedColor.Value.B; + Settings.Default.AlternateBackgroundColorA = colorAlternateBackground.SelectedColor.Value.A; Settings.Default.FFZEmotes = (bool)checkFFZ.IsChecked; Settings.Default.BTTVEmotes = (bool)checkBTTV.IsChecked; Settings.Default.STVEmotes = (bool)checkSTV.IsChecked; @@ -299,6 +309,7 @@ public void SaveSettings() Settings.Default.ChatBadges = (bool)checkBadge.IsChecked; Settings.Default.Offline = (bool)checkOffline.IsChecked; Settings.Default.DisperseCommentOffsets = (bool)checkDispersion.IsChecked; + Settings.Default.AlternateMessageBackgrounds = (bool)checkAlternateMessageBackgrounds.IsChecked; if (comboFormat.SelectedItem != null) { Settings.Default.VideoContainer = ((VideoContainer)comboFormat.SelectedItem).Name; @@ -387,7 +398,7 @@ private bool ValidateInputs() return false; } - if (checkMask.IsChecked == false && colorBackground.SelectedColor!.Value.A < 255) + if (checkMask.IsChecked == false && (colorBackground.SelectedColor!.Value.A < 255 || ((bool)checkAlternateMessageBackgrounds.IsChecked! && colorAlternateBackground.SelectedColor!.Value.A < 255))) { if (((VideoContainer)comboFormat.SelectedItem).Name is not "MOV" and not "WEBM" || ((Codec)comboCodec.SelectedItem).Name is not "RLE" and not "ProRes" and not "VP8" and not "VP9") @@ -397,7 +408,7 @@ private bool ValidateInputs() } } - if (checkMask.IsChecked == true && colorBackground.SelectedColor!.Value.A == 255) + if (checkMask.IsChecked == true && colorBackground.SelectedColor!.Value.A == 255 && !((bool)checkAlternateMessageBackgrounds.IsChecked! && colorAlternateBackground.SelectedColor!.Value.A != 255)) { AppendLog(Translations.Strings.ErrorLog + Translations.Strings.MaskWithNoAlpha); return false; diff --git a/TwitchDownloaderWPF/Properties/Settings.Designer.cs b/TwitchDownloaderWPF/Properties/Settings.Designer.cs index b7b7f9b8..558c464b 100644 --- a/TwitchDownloaderWPF/Properties/Settings.Designer.cs +++ b/TwitchDownloaderWPF/Properties/Settings.Designer.cs @@ -154,12 +154,24 @@ public bool STVEmotes { } } + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("255")] + public byte BackgroundColorA { + get { + return ((byte)(this["BackgroundColorA"])); + } + set { + this["BackgroundColorA"] = value; + } + } + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("17")] - public int BackgroundColorR { + public byte BackgroundColorR { get { - return ((int)(this["BackgroundColorR"])); + return ((byte)(this["BackgroundColorR"])); } set { this["BackgroundColorR"] = value; @@ -169,9 +181,9 @@ public int BackgroundColorR { [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("17")] - public int BackgroundColorG { + public byte BackgroundColorG { get { - return ((int)(this["BackgroundColorG"])); + return ((byte)(this["BackgroundColorG"])); } set { this["BackgroundColorG"] = value; @@ -181,9 +193,9 @@ public int BackgroundColorG { [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("17")] - public int BackgroundColorB { + public byte BackgroundColorB { get { - return ((int)(this["BackgroundColorB"])); + return ((byte)(this["BackgroundColorB"])); } set { this["BackgroundColorB"] = value; @@ -193,9 +205,57 @@ public int BackgroundColorB { [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("255")] - public int FontColorR { + public byte AlternateBackgroundColorA { + get { + return ((byte)(this["AlternateBackgroundColorA"])); + } + set { + this["AlternateBackgroundColorA"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("19")] + public byte AlternateBackgroundColorR { + get { + return ((byte)(this["AlternateBackgroundColorR"])); + } + set { + this["AlternateBackgroundColorR"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("19")] + public byte AlternateBackgroundColorG { + get { + return ((byte)(this["AlternateBackgroundColorG"])); + } + set { + this["AlternateBackgroundColorG"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("19")] + public byte AlternateBackgroundColorB { + get { + return ((byte)(this["AlternateBackgroundColorB"])); + } + set { + this["AlternateBackgroundColorB"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("255")] + public byte FontColorR { get { - return ((int)(this["FontColorR"])); + return ((byte)(this["FontColorR"])); } set { this["FontColorR"] = value; @@ -205,9 +265,9 @@ public int FontColorR { [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("255")] - public int FontColorG { + public byte FontColorG { get { - return ((int)(this["FontColorG"])); + return ((byte)(this["FontColorG"])); } set { this["FontColorG"] = value; @@ -217,9 +277,9 @@ public int FontColorG { [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("255")] - public int FontColorB { + public byte FontColorB { get { - return ((int)(this["FontColorB"])); + return ((byte)(this["FontColorB"])); } set { this["FontColorB"] = value; @@ -262,18 +322,6 @@ public string VideoCodec { } } - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("255")] - public int BackgroundColorA { - get { - return ((int)(this["BackgroundColorA"])); - } - set { - this["BackgroundColorA"] = value; - } - } - [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("")] @@ -825,5 +873,17 @@ public bool DownloadThrottleEnabled { this["DownloadThrottleEnabled"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("False")] + public bool AlternateMessageBackgrounds { + get { + return ((bool)(this["AlternateMessageBackgrounds"])); + } + set { + this["AlternateMessageBackgrounds"] = value; + } + } } } diff --git a/TwitchDownloaderWPF/Properties/Settings.settings b/TwitchDownloaderWPF/Properties/Settings.settings index ee086c65..5aeba779 100644 --- a/TwitchDownloaderWPF/Properties/Settings.settings +++ b/TwitchDownloaderWPF/Properties/Settings.settings @@ -35,22 +35,37 @@ True - + + 255 + + 17 - + 17 - + 17 - + 255 - + + 19 + + + 19 + + + 19 + + 255 - + + 255 + + 255 @@ -62,9 +77,6 @@ H264 - - 255 - @@ -203,6 +215,9 @@ False + + False + diff --git a/TwitchDownloaderWPF/README.md b/TwitchDownloaderWPF/README.md index 915e2fbd..8790e58b 100644 --- a/TwitchDownloaderWPF/README.md +++ b/TwitchDownloaderWPF/README.md @@ -156,6 +156,8 @@ the *Partial Render* option to render a smaller section of the chat, see Figure **Background Color**: The background color of the output chat render. +**Alt Background Color**: The alternate message background color. Requires *Alternate Backgrounds* be enabled. + #### Rendering **Outline**: Adds a thin black outline to usernames and messages. @@ -170,6 +172,8 @@ the *Partial Render* option to render a smaller section of the chat, see Figure **Dispersion**: In November 2022 a Twitch API change made chat messages download only in whole seconds. If dispersion is enabled and there are multiple messages on a second, they will be intelligently distributed over the second to improve chat flow. Requires an update rate less than 1.0 for effective results. +**Alternate Backgrounds**: Alternates the background color of every other chat message to help tell them apart. + **BTTV Emotes**: Enables emotes from BTTV in the render. **FFZ Emotes**: Enables emotes from FFZ in the render. diff --git a/TwitchDownloaderWPF/Translations/Strings.Designer.cs b/TwitchDownloaderWPF/Translations/Strings.Designer.cs index 699dcb88..462e98e3 100644 --- a/TwitchDownloaderWPF/Translations/Strings.Designer.cs +++ b/TwitchDownloaderWPF/Translations/Strings.Designer.cs @@ -86,6 +86,33 @@ public static string AlphaNotSupportedByCodec { } } + /// + /// Looks up a localized string similar to Alt Background Color:. + /// + public static string AlternateBackgroundColor { + get { + return ResourceManager.GetString("AlternateBackgroundColor", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Alternate Backgrounds . + /// + public static string AlternateMessageBackgrounds { + get { + return ResourceManager.GetString("AlternateMessageBackgrounds", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Alternates the background color of every other chat message to help tell them apart.. + /// + public static string AlternateMessageBackgroundsTooltip { + get { + return ResourceManager.GetString("AlternateMessageBackgroundsTooltip", resourceCulture); + } + } + /// /// Looks up a localized string similar to Language . /// diff --git a/TwitchDownloaderWPF/Translations/Strings.pl.resx b/TwitchDownloaderWPF/Translations/Strings.pl.resx index d77c20f1..1cb540db 100644 --- a/TwitchDownloaderWPF/Translations/Strings.pl.resx +++ b/TwitchDownloaderWPF/Translations/Strings.pl.resx @@ -738,4 +738,7 @@ formatowanie crop_start_custom i crop_end_custom jest bazowane na + + Alternate Backgrounds Leave a trailing space + \ No newline at end of file diff --git a/TwitchDownloaderWPF/Translations/Strings.resx b/TwitchDownloaderWPF/Translations/Strings.resx index 38fd7cd5..d58cbf5a 100644 --- a/TwitchDownloaderWPF/Translations/Strings.resx +++ b/TwitchDownloaderWPF/Translations/Strings.resx @@ -752,4 +752,13 @@ Unable to download ffmpeg. Please manually download it from {0} and place the file at {1} + + Alt Background Color: + + + Alternate Backgrounds Leave a trailing space + + + Alternates the background color of every other chat message to help tell them apart. + \ No newline at end of file diff --git a/TwitchDownloaderWPF/Translations/Strings.ru.resx b/TwitchDownloaderWPF/Translations/Strings.ru.resx index 51c61555..dbccf7e7 100644 --- a/TwitchDownloaderWPF/Translations/Strings.ru.resx +++ b/TwitchDownloaderWPF/Translations/Strings.ru.resx @@ -738,4 +738,7 @@ crop_start_custom and crop_end_custom форматирование основанно на + + Alternate Backgrounds Leave a trailing space + \ No newline at end of file diff --git a/TwitchDownloaderWPF/Translations/Strings.tr.resx b/TwitchDownloaderWPF/Translations/Strings.tr.resx index 9da4092e..aa20e294 100644 --- a/TwitchDownloaderWPF/Translations/Strings.tr.resx +++ b/TwitchDownloaderWPF/Translations/Strings.tr.resx @@ -736,4 +736,7 @@ C# standard TimeSpan format strings + + Alternate Backgrounds Leave a trailing space + diff --git a/TwitchDownloaderWPF/Translations/Strings.zh.resx b/TwitchDownloaderWPF/Translations/Strings.zh.resx index 3fb47185..3a4e5062 100644 --- a/TwitchDownloaderWPF/Translations/Strings.zh.resx +++ b/TwitchDownloaderWPF/Translations/Strings.zh.resx @@ -737,4 +737,7 @@ C#标准的时间跨度格式字符串 + + Alternate Backgrounds Leave a trailing space + \ No newline at end of file