diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Drawing/PlayedIndicatorDrawer.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Drawing/PlayedIndicatorDrawer.cs | 84 |
1 files changed, 69 insertions, 15 deletions
diff --git a/MediaBrowser.Server.Implementations/Drawing/PlayedIndicatorDrawer.cs b/MediaBrowser.Server.Implementations/Drawing/PlayedIndicatorDrawer.cs index fa4231612..359065cc2 100644 --- a/MediaBrowser.Server.Implementations/Drawing/PlayedIndicatorDrawer.cs +++ b/MediaBrowser.Server.Implementations/Drawing/PlayedIndicatorDrawer.cs @@ -1,32 +1,86 @@ -using System.Drawing; +using ImageMagickSharp; +using MediaBrowser.Common.Configuration; +using MediaBrowser.Model.Drawing; +using System; +using System.IO; namespace MediaBrowser.Server.Implementations.Drawing { public class PlayedIndicatorDrawer { - private const int IndicatorHeight = 40; - public const int IndicatorWidth = 40; - private const int FontSize = 40; - private const int OffsetFromTopRightCorner = 10; + private const int FontSize = 52; + private const int OffsetFromTopRightCorner = 38; - public void DrawPlayedIndicator(Graphics graphics, Size imageSize) + private readonly IApplicationPaths _appPaths; + + public PlayedIndicatorDrawer(IApplicationPaths appPaths) + { + _appPaths = appPaths; + } + + public void DrawPlayedIndicator(MagickWand wand, ImageSize imageSize) { - var x = imageSize.Width - IndicatorWidth - OffsetFromTopRightCorner; + var x = imageSize.Width - OffsetFromTopRightCorner; - using (var backdroundBrush = new SolidBrush(Color.FromArgb(225, 82, 181, 75))) + using (var draw = new DrawingWand()) { - graphics.FillEllipse(backdroundBrush, x, OffsetFromTopRightCorner, IndicatorWidth, IndicatorHeight); + using (PixelWand pixel = new PixelWand()) + { + pixel.Color = "#52B54B"; + pixel.Opacity = 0.2; + draw.FillColor = pixel; + draw.DrawCircle(x, OffsetFromTopRightCorner, x - 20, OffsetFromTopRightCorner - 20); + + pixel.Opacity = 0; + pixel.Color = "white"; + draw.FillColor = pixel; + draw.Font = ExtractFont("webdings.ttf", _appPaths); + draw.FontSize = FontSize; + draw.FontStyle = FontStyleType.NormalStyle; + draw.TextAlignment = TextAlignType.CenterAlign; + draw.FontWeight = FontWeightType.RegularStyle; + draw.TextAntialias = true; + draw.DrawAnnotation(x + 4, OffsetFromTopRightCorner + 14, "a"); - x = imageSize.Width - 45 - OffsetFromTopRightCorner; + draw.FillColor = pixel; + wand.CurrentImage.DrawImage(draw); + } + } + } - using (var font = new Font("Webdings", FontSize, FontStyle.Regular, GraphicsUnit.Pixel)) + internal static string ExtractFont(string name, IApplicationPaths paths) + { + var filePath = Path.Combine(paths.ProgramDataPath, "fonts", name); + + if (File.Exists(filePath)) + { + return filePath; + } + + var namespacePath = typeof(PlayedIndicatorDrawer).Namespace + ".fonts." + name; + var tempPath = Path.Combine(paths.TempDirectory, Guid.NewGuid().ToString("N") + ".ttf"); + Directory.CreateDirectory(Path.GetDirectoryName(tempPath)); + + using (var stream = typeof(PlayedIndicatorDrawer).Assembly.GetManifestResourceStream(namespacePath)) + { + using (var fileStream = new FileStream(tempPath, FileMode.Create, FileAccess.Write, FileShare.Read)) { - using (var fontBrush = new SolidBrush(Color.White)) - { - graphics.DrawString("a", font, fontBrush, x, OffsetFromTopRightCorner - 2); - } + stream.CopyTo(fileStream); } } + + Directory.CreateDirectory(Path.GetDirectoryName(filePath)); + + try + { + File.Copy(tempPath, filePath, false); + } + catch (IOException) + { + + } + + return tempPath; } } } |
