ImageResizerProperties.cs
1 // Copyright (c) Microsoft Corporation 2 // The Microsoft Corporation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 using System; 6 using System.Collections.ObjectModel; 7 using System.Text.Json; 8 using System.Text.Json.Serialization; 9 10 using Settings.UI.Library.Attributes; 11 12 namespace Microsoft.PowerToys.Settings.UI.Library 13 { 14 public class ImageResizerProperties 15 { 16 public ImageResizerProperties() 17 { 18 ImageresizerSelectedSizeIndex = new IntProperty(0); 19 ImageresizerShrinkOnly = new BoolProperty(false); 20 ImageresizerReplace = new BoolProperty(false); 21 ImageresizerIgnoreOrientation = new BoolProperty(true); 22 ImageresizerJpegQualityLevel = new IntProperty(90); 23 ImageresizerPngInterlaceOption = new IntProperty(); 24 ImageresizerTiffCompressOption = new IntProperty(); 25 ImageresizerFileName = new StringProperty("%1 (%2)"); 26 ImageresizerSizes = new ImageResizerSizes(); 27 ImageresizerKeepDateModified = new BoolProperty(); 28 ImageresizerFallbackEncoder = new StringProperty(new System.Guid("19e4a5aa-5662-4fc5-a0c0-1758028e1057").ToString()); 29 ImageresizerCustomSize = new ImageResizerCustomSizeProperty(new ImageSize(4, "custom", ResizeFit.Fit, 1024, 640, ResizeUnit.Pixel)); 30 } 31 32 public ImageResizerProperties(Func<string, string> resourceLoader) 33 : this() 34 { 35 if (resourceLoader == null) 36 { 37 throw new ArgumentNullException(nameof(resourceLoader), "Resource loader is null"); 38 } 39 40 ImageresizerSizes = new ImageResizerSizes(new ObservableCollection<ImageSize>() 41 { 42 new ImageSize(0, resourceLoader("ImageResizer_DefaultSize_Small"), ResizeFit.Fit, 854, 480, ResizeUnit.Pixel), 43 new ImageSize(1, resourceLoader("ImageResizer_DefaultSize_Medium"), ResizeFit.Fit, 1366, 768, ResizeUnit.Pixel), 44 new ImageSize(2, resourceLoader("ImageResizer_DefaultSize_Large"), ResizeFit.Fit, 1920, 1080, ResizeUnit.Pixel), 45 new ImageSize(3, resourceLoader("ImageResizer_DefaultSize_Phone"), ResizeFit.Fit, 320, 568, ResizeUnit.Pixel), 46 }); 47 } 48 49 [JsonPropertyName("imageresizer_selectedSizeIndex")] 50 public IntProperty ImageresizerSelectedSizeIndex { get; set; } 51 52 [JsonPropertyName("imageresizer_shrinkOnly")] 53 public BoolProperty ImageresizerShrinkOnly { get; set; } 54 55 [JsonPropertyName("imageresizer_replace")] 56 public BoolProperty ImageresizerReplace { get; set; } 57 58 [JsonPropertyName("imageresizer_ignoreOrientation")] 59 public BoolProperty ImageresizerIgnoreOrientation { get; set; } 60 61 [JsonPropertyName("imageresizer_jpegQualityLevel")] 62 public IntProperty ImageresizerJpegQualityLevel { get; set; } 63 64 [JsonPropertyName("imageresizer_pngInterlaceOption")] 65 public IntProperty ImageresizerPngInterlaceOption { get; set; } 66 67 [JsonPropertyName("imageresizer_tiffCompressOption")] 68 public IntProperty ImageresizerTiffCompressOption { get; set; } 69 70 [JsonPropertyName("imageresizer_fileName")] 71 public StringProperty ImageresizerFileName { get; set; } 72 73 [JsonPropertyName("imageresizer_sizes")] 74 [CmdConfigureIgnoreAttribute] 75 public ImageResizerSizes ImageresizerSizes { get; set; } 76 77 [JsonPropertyName("imageresizer_keepDateModified")] 78 public BoolProperty ImageresizerKeepDateModified { get; set; } 79 80 [JsonPropertyName("imageresizer_fallbackEncoder")] 81 public StringProperty ImageresizerFallbackEncoder { get; set; } 82 83 [JsonPropertyName("imageresizer_customSize")] 84 [CmdConfigureIgnoreAttribute] 85 public ImageResizerCustomSizeProperty ImageresizerCustomSize { get; set; } 86 87 public string ToJsonString() 88 { 89 return JsonSerializer.Serialize(this, SettingsSerializationContext.Default.ImageResizerProperties); 90 } 91 } 92 93 public enum ResizeFit 94 { 95 Fill = 0, 96 Fit = 1, 97 Stretch = 2, 98 } 99 100 public enum ResizeUnit 101 { 102 Centimeter = 0, 103 Inch = 1, 104 Percent = 2, 105 Pixel = 3, 106 } 107 108 public enum PngInterlaceOption 109 { 110 Default = 0, 111 On = 1, 112 Off = 2, 113 } 114 115 public enum TiffCompressOption 116 { 117 Default = 0, 118 None = 1, 119 Ccitt3 = 2, 120 Ccitt4 = 3, 121 Lzw = 4, 122 Rle = 5, 123 Zip = 6, 124 } 125 }