diff --git a/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/AnimatedImage/Providers/CursorProvider.cs b/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/AnimatedImage/Providers/CursorProvider.cs index 370b5f7b5..8a1c15393 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/AnimatedImage/Providers/CursorProvider.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/AnimatedImage/Providers/CursorProvider.cs @@ -30,11 +30,9 @@ using System.Threading.Tasks; using System.Windows; using System.Windows.Input; -using System.Windows.Interop; using System.Windows.Media; using System.Windows.Media.Imaging; using PixelFormat = System.Drawing.Imaging.PixelFormat; -using Size = System.Windows.Size; namespace QuickLook.Plugin.ImageViewer.AnimatedImage.Providers; diff --git a/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/AnimatedImage/Providers/SvgProvider.cs b/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/AnimatedImage/Providers/SvgProvider.cs new file mode 100644 index 000000000..f5f2fb2ad --- /dev/null +++ b/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/AnimatedImage/Providers/SvgProvider.cs @@ -0,0 +1,61 @@ +// Copyright © 2017-2025 QL-Win Contributors +// +// This file is part of QuickLook program. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +using QuickLook.Common.Helpers; +using QuickLook.Common.Plugin; +using SkiaSharp; +using Svg.Skia; +using System; +using System.IO; +using System.Threading.Tasks; +using System.Windows.Media.Imaging; + +namespace QuickLook.Plugin.ImageViewer.AnimatedImage.Providers; + +internal class SvgProvider : ImageMagickProvider +{ + public SvgProvider(Uri path, MetaProvider meta, ContextObject contextObject) : base(path, meta, contextObject) + { + } + + public override Task GetRenderedFrame(int index) + { + return new Task(() => + { + try + { + using var svg = new SKSvg(); + + if (svg.Load(Path.LocalPath) is SKPicture picture) + { + using var ms = new MemoryStream(); + + // Render the SVG picture to a bitmap + picture.ToImage(ms, SKColors.Empty, SKEncodedImageFormat.Png, 100, 1f, 1f, SKColorType.Rgba8888, SKAlphaType.Unpremul, null); + return BitmapFrame.Create(ms, BitmapCreateOptions.None, BitmapCacheOption.OnLoad); + } + } + catch (Exception e) + { + ProcessHelper.WriteLog(e.ToString()); + } + + // Fallback to basic one + return base.GetRenderedFrame(); + }); + } +} diff --git a/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/Plugin.cs b/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/Plugin.cs index d74039e42..aadf80654 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/Plugin.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/Plugin.cs @@ -84,6 +84,9 @@ public void Init() AnimatedImage.AnimatedImage.Providers.Add( new KeyValuePair([".cur", ".ani"], typeof(CursorProvider))); + AnimatedImage.AnimatedImage.Providers.Add( + new KeyValuePair([".svg"], + typeof(SvgProvider))); AnimatedImage.AnimatedImage.Providers.Add( new KeyValuePair(["*"], typeof(ImageMagickProvider))); diff --git a/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/QuickLook.Plugin.ImageViewer.csproj b/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/QuickLook.Plugin.ImageViewer.csproj index d4f14f577..808d2d652 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/QuickLook.Plugin.ImageViewer.csproj +++ b/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/QuickLook.Plugin.ImageViewer.csproj @@ -55,7 +55,12 @@ - + + all + + + all + all