/ src / settings-ui / Settings.UI.Library / ImageResizerProperties.cs
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  }