BizHawk/BizHawk.Client.Common/movie/Subtitle.cs

100 lines
2.0 KiB
C#

using System.Text;
namespace BizHawk.Client.Common
{
public class Subtitle
{
public Subtitle()
{
Message = "";
X = 0;
Y = 0;
Duration = 120;
Frame = 0;
Color = 0xFFFFFFFF;
}
public Subtitle(Subtitle s)
{
Message = s.Message;
Frame = s.Frame;
X = s.X;
Y = s.Y;
Duration = s.Duration;
Color = s.Color;
}
public string Message { get; set; }
public int Frame { get; set; }
public int X { get; set; }
public int Y { get; set; }
public int Duration { get; set; }
public uint Color { get; set; }
public override string ToString()
{
var sb = new StringBuilder("subtitle ");
sb
.Append(Frame).Append(" ")
.Append(X).Append(" ")
.Append(Y).Append(" ")
.Append(Duration).Append(" ")
.Append($"{Color:X8}").Append(" ")
.Append(Message);
return sb.ToString();
}
public string ToSubRip(int index, double fps, bool addcolortag)
{
var sb = new StringBuilder();
sb.Append(index.ToString());
sb.Append("\r\n");
// Frame timing
double start = (double)Frame;
double end = (double)(Frame + Duration);
int startTime = (int)(start * 1000 / fps);
int endTime = (int)(end * 1000 / fps);
var startString = $"{startTime / 3600000:d2}:{(startTime / 60000) % 60:d2}:{(startTime / 1000) % 60:d2},{startTime % 1000:d3}";
var endString = $"{endTime / 3600000:d2}:{(endTime / 60000) % 60:d2}:{(endTime / 1000) % 60:d2},{endTime % 1000:d3}";
sb.Append(startString);
sb.Append(" --> ");
sb.Append(endString);
sb.Append("\r\n");
// TODO: Positioning
// Color tag open
if (addcolortag)
{
uint rgb = Color & 0x00FFFFFF;
sb.Append("<font color=\"#");
sb.Append(rgb.ToString("X6"));
sb.Append("\">");
}
// Message text
sb.Append(Message.Trim());
// Color tag closeaddcolortag
if (addcolortag)
{
sb.Append("</font>");
}
sb.Append("\r\n");
// Seperator
sb.Append("\r\n");
return sb.ToString();
}
}
}