From 48f65ac84721d3c1badc38781360cd8edfe00b4e Mon Sep 17 00:00:00 2001 From: "andres.delikat" Date: Mon, 16 Apr 2012 20:00:11 +0000 Subject: [PATCH] Movie subtitles - implement ability to display multiple subtitles at once --- .../DisplayManager/DisplayManager.cs | 19 ++++++++++++------- BizHawk.MultiClient/movie/SubtitleList.cs | 16 ++++++++++++++++ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/BizHawk.MultiClient/DisplayManager/DisplayManager.cs b/BizHawk.MultiClient/DisplayManager/DisplayManager.cs index 917f83dd05..86f73269e0 100644 --- a/BizHawk.MultiClient/DisplayManager/DisplayManager.cs +++ b/BizHawk.MultiClient/DisplayManager/DisplayManager.cs @@ -448,14 +448,19 @@ namespace BizHawk.MultiClient if (Global.MovieSession.Movie.Mode != MOVIEMODE.INACTIVE && Global.Config.DisplaySubtitles) { - //TODO: implement multiple subtitles at once feature - Subtitle s = Global.MovieSession.Movie.Subtitles.GetSubtitle(Global.Emulator.Frame); - g.DrawString(s.Message, MessageFont, Brushes.Black, - s.X + 1, s.Y + 1); - using(var brush = new SolidBrush(Color.FromArgb((int)s.Color))) - g.DrawString(s.Message, MessageFont, brush, - s.X , s.Y ); + + List s = Global.MovieSession.Movie.Subtitles.GetSubtitles(Global.Emulator.Frame); + if (s == null) return; + for (int i = 0; i < s.Count; i++) + { + g.DrawString(s[i].Message, MessageFont, Brushes.Black, + s[i].X + 1, s[i].Y + 1); + using (var brush = new SolidBrush(Color.FromArgb((int)s[i].Color))) + g.DrawString(s[i].Message, MessageFont, brush, + s[i].X, s[i].Y); + } } + } } diff --git a/BizHawk.MultiClient/movie/SubtitleList.cs b/BizHawk.MultiClient/movie/SubtitleList.cs index c6681fd992..8e70ffa7ce 100644 --- a/BizHawk.MultiClient/movie/SubtitleList.cs +++ b/BizHawk.MultiClient/movie/SubtitleList.cs @@ -83,6 +83,22 @@ namespace BizHawk.MultiClient return new Subtitle(); } + public List GetSubtitles(int frame) + { + if (subs.Count == 0) + return null; + + List s = new List(); + + for (int x = 0; x < subs.Count; x++) + { + if (frame >= subs[x].Frame && frame <= subs[x].Frame + subs[x].Duration) + s.Add(subs[x]); + } + + return s; + } + public int Count() { return subs.Count;