Allow alpha when chosing text color for ASSA in main window

This commit is contained in:
niksedk 2021-11-11 17:59:19 +01:00
parent fc20a3da3d
commit 3ba85674bc
3 changed files with 36 additions and 7 deletions

View File

@ -941,6 +941,11 @@ namespace Nikse.SubtitleEdit.Core.Common
return $"#{c.R:x2}{c.G:x2}{c.B:x2}"; return $"#{c.R:x2}{c.G:x2}{c.B:x2}";
} }
public static string ColorToHexWithTransparency(Color c)
{
return $"#{c.A:x2}{c.R:x2}{c.G:x2}{c.B:x2}";
}
public static int GetMaxLineLength(string text) public static int GetMaxLineLength(string text)
{ {
int maxLength = 0; int maxLength = 0;

View File

@ -1941,11 +1941,11 @@ Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text"
{ {
if (c.A >= 255) if (c.A >= 255)
{ {
return $"&H{c.B:X2}{c.G:X2}{c.R:X2}"; return $"c&H{c.B:X2}{c.G:X2}{c.R:X2}";
} }
var alpha = 255 - c.A; // ASS stores alpha in reverse (0=full intensity and 255=fully transparent) var alpha = 255 - c.A; // ASS stores alpha in reverse (0=full intensity and 255=fully transparent)
return $"alpha&H{alpha:X2}&\\&H{c.B:X2}{c.G:X2}{c.R:X2}"; return $"alpha&H{alpha:X2}&\\c&H{c.B:X2}{c.G:X2}{c.R:X2}";
} }
public static string CheckForErrors(string header) public static string CheckForErrors(string header)

View File

@ -12826,7 +12826,19 @@ namespace Nikse.SubtitleEdit.Forms
{ {
string color; string color;
var formatType = GetCurrentSubtitleFormat().GetType(); var formatType = GetCurrentSubtitleFormat().GetType();
if (formatType == typeof(Ebu)) if (formatType == typeof(AdvancedSubStationAlpha))
{
using (var form = new ColorChooser { Color = Color.White })
{
if (form.ShowDialog(this) != DialogResult.OK)
{
return;
}
color = Utilities.ColorToHexWithTransparency(form.Color);
}
}
else if (formatType == typeof(Ebu))
{ {
using (var form = new EbuColorPicker(true)) using (var form = new EbuColorPicker(true))
{ {
@ -12896,7 +12908,6 @@ namespace Nikse.SubtitleEdit.Forms
var p = _subtitle.GetParagraphOrDefault(item.Index); var p = _subtitle.GetParagraphOrDefault(item.Index);
if (p != null) if (p != null)
{ {
if (isAssa) if (isAssa)
{ {
if (!p.Text.Contains(assaColor, StringComparison.OrdinalIgnoreCase)) if (!p.Text.Contains(assaColor, StringComparison.OrdinalIgnoreCase))
@ -13023,7 +13034,7 @@ namespace Nikse.SubtitleEdit.Forms
if (p != null) if (p != null)
{ {
var style = AdvancedSubStationAlpha.GetSsaStyle(p.Extra, _subtitle.Header); var style = AdvancedSubStationAlpha.GetSsaStyle(p.Extra, _subtitle.Header);
text = $"{{\\c{assaColor}&}}{text}{{\\c{AdvancedSubStationAlpha.GetSsaColorStringForEvent(style.Primary)}&}}"; text = $"{{\\{assaColor}&}}{text}{{\\{AdvancedSubStationAlpha.GetSsaColorStringForEvent(style.Primary)}&}}";
} }
} }
@ -13098,7 +13109,7 @@ namespace Nikse.SubtitleEdit.Forms
{ {
var c = ColorTranslator.FromHtml(color); var c = ColorTranslator.FromHtml(color);
p.Text = RemoveAssaColor(p.Text); p.Text = RemoveAssaColor(p.Text);
p.Text = "{\\c" + AdvancedSubStationAlpha.GetSsaColorStringForEvent(c) + "&}" + p.Text; p.Text = "{\\" + AdvancedSubStationAlpha.GetSsaColorStringForEvent(c) + "&}" + p.Text;
} }
catch catch
{ {
@ -13153,6 +13164,7 @@ namespace Nikse.SubtitleEdit.Forms
private static string RemoveAssaColor(string input) private static string RemoveAssaColor(string input)
{ {
var text = input; var text = input;
text = Regex.Replace(text, "\\\\alpha&H.{1,2}&\\\\", "\\");
text = Regex.Replace(text, "{\\\\1c&[abcdefghABCDEFGH\\d]*&}", string.Empty); text = Regex.Replace(text, "{\\\\1c&[abcdefghABCDEFGH\\d]*&}", string.Empty);
text = Regex.Replace(text, "{\\\\c&[abcdefghABCDEFGH\\d]*&}", string.Empty); text = Regex.Replace(text, "{\\\\c&[abcdefghABCDEFGH\\d]*&}", string.Empty);
text = Regex.Replace(text, "\\\\c&[abcdefghABCDEFGH\\d]*&", string.Empty); text = Regex.Replace(text, "\\\\c&[abcdefghABCDEFGH\\d]*&", string.Empty);
@ -24973,7 +24985,19 @@ namespace Nikse.SubtitleEdit.Forms
{ {
string color; string color;
var formatType = GetCurrentSubtitleFormat().GetType(); var formatType = GetCurrentSubtitleFormat().GetType();
if (formatType == typeof(Ebu)) if (formatType == typeof(AdvancedSubStationAlpha))
{
using (var form = new ColorChooser { Color = Color.White })
{
if (form.ShowDialog(this) != DialogResult.OK)
{
return;
}
color = Utilities.ColorToHexWithTransparency(form.Color);
}
}
else if (formatType == typeof(Ebu))
{ {
using (var form = new EbuColorPicker(true)) using (var form = new EbuColorPicker(true))
{ {