mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-04 18:26:39 +02:00
* Import Image Resizer for Windows * getting code analysis and stylecop hooked in * upgrading to 4.7.2 * adding copyright * getting stuff to work headers and trailing commas adding braces updated encoder * Revert "getting stuff to work" This reverts commit5310866120. * update to .net 4.7.2 * access modifier * zero errors * Fixed unit tests not running issue * Fixed ImageResizer.Test stylecop warning * Formatted ShellExtensions project with clang-format * Fixed annotation warnings * Suppressed 6031 and 26812 warnings for specific lines * Shifting ImageResizer projects to PowerToys solution (#1054) * Shifted ImageResizer projects to PowerToys solution: Builds, all tests pass, ImageResizer C# project works independently * Deleted extra files * Deleted nuget config file and fixed code analysis paths * Convert ImageResizer to a PowerToy (#1073) * Updated vcxproj file with common project references and cpp version flags * Added module template code to dllmain and updated headers for successful build * Removed unnecessary include * Added dll to runner and add fixes to show up in PT Settings * Added settings file * Added support for enabling/disabling based on PowerRename codebase * Fixed missing braces * Fixed call_custom_action * Add ImageResizer to msi installer (dev/imageResizer) (#1094) * Updated vcxproj file with common project references and cpp version flags * Added module template code to dllmain and updated headers for successful build * Removed unnecessary include * Added dll to runner and add fixes to show up in PT Settings * Added settings file * Added support for enabling/disabling based on PowerRename codebase * Fixed solution file configurations * Removed Any CPU from ImageResizer csprojs * Renamed registry writing and removed build time registry addition * Added ImageResizer installation details to msi * Fixed comment on conditions to close explorer.exe * Sync dev/imageResizer with master (#1105) * tweaking language * adjusting elevated permission verbiage to match Windows * npm audit fix to update stuff * slight bump for fabric ui * Remove unwanted files (#1037) Add temp build files to gitignore * Ensure previous search and replace texts are evaluated and updated in the UI at startup (#1043) Ensure stored settings get evaluated after initial enumeration There was a bug where the list view was not getting updated with the results of the search and replace on launch when we are using a stored search or replace text from a previous session. * adding fancy zone opacity setting, enhancement #631 (#1008) * adding fancy zone opacity setting, enhancement #631 * applying zone opacity setting to all zones during zone selection * changing opacity setting to percentage * runner: show message box when restarting with different elevation fails (#1061) Also make the message box appear on top of the settings window. * Fix misaligned display of zones in layout priview and grid editor (#1010) Fix misaligned display of zones in layout preview and grid editor * MSIX: Extract MSIX building functionality from msix_reinstall.ps1 to a separate script (#1068) * MSIX: label PowerToys as Preview (#1090) * MSIX: Code sign msixbundle (#1093) * Update to MSIX README.md (#1095) * Update README.md few adjustments * Update README.md * Update README.md * adding in privacy statement, removing About in dialog (#1087) * adding in privacy statement, removing About in dialog * added Preview * Revert "Fix misaligned display of zones in layout priview and grid editor (#1010)" (#1097) This reverts commitd03690cffd. * Fix reversed order of zones in layout (#1071) * Shifted three functions to common (#1101) Co-authored-by: Clint Rutkas <clint@rutkas.com> Co-authored-by: Enrico Giordani <enricogior@users.noreply.github.com> Co-authored-by: Chris Davis <chrisdavis@outlook.com> Co-authored-by: Yosef Durr <yodurr@microsoft.com> Co-authored-by: Bartosz Sosnowski <bzoz@users.noreply.github.com> Co-authored-by: vldmr11080 <57061786+vldmr11080@users.noreply.github.com> Co-authored-by: yuyoyuppe <yuyoyuppe@users.noreply.github.com> * Revert "Sync dev/imageResizer with master (#1105)" This reverts commitdb7f15541f. * Added icon to Resize pictures context menu entry (dev/imageResizer) (#1113) * Updated vcxproj file with common project references and cpp version flags * Added module template code to dllmain and updated headers for successful build * Removed unnecessary include * Added dll to runner and add fixes to show up in PT Settings * Added settings file * Added support for enabling/disabling based on PowerRename codebase * Fixed solution file configurations * Removed Any CPU from ImageResizer csprojs * Renamed registry writing and removed build time registry addition * Added ImageResizer installation details to msi * Shifted to MII, TODO: Fix position * Incorporated ImageResizer Icon in context menu entry * Fixed typo * Merged with dev/imageResizer * Renamed Advanced Options to Settings and removed About tab (dev/imageResizer) (#1123) * Removed about tab, renamed advanced opt to settings, changed assembly info * Restored Resource designer file * Reverted changes on AssemblyInfo * MSI: Fix ImageResizer menu item position (dev/imageResizer) (#1114) * Updated vcxproj file with common project references and cpp version flags * Added module template code to dllmain and updated headers for successful build * Removed unnecessary include * Added dll to runner and add fixes to show up in PT Settings * Added settings file * Added support for enabling/disabling based on PowerRename codebase * Fixed solution file configurations * Removed Any CPU from ImageResizer csprojs * Renamed registry writing and removed build time registry addition * Added ImageResizer installation details to msi * Shifted to MII, TODO: Fix position * Incorporated ImageResizer Icon in context menu entry * Changed registry entries to SystemFileAssociations and added index changes in InsertMenuItem * Fixed extra newline * Fixed merge conflict * Refactor ImageResizer code base naming to match PowerRename (#1121) * Created empty README file * Renamed dll project * Removed ShellExtensions references in src * Fixed ImageResizerUI assembly name and added changes to MSI * added the helper functions * localized dllmain powerrename * localized powerRenameExt * localized the settings file * built the proj * Modified resourceIDs for strings in the table * added common as a reference project * Removed get_res_string_wchar and used the get_resource_string() function instead which returns a wstring typecast into wchar* * Added new lines to the end of the file * Removed string resources from the settings.cpp file * rebuilt project PowerRename * moved app name to constructor to init only once * updated formatting of common.cpp * reverting formatting of files * Removed some IDs from resource file. Changed SHIFT to Shift * Localizing C# Project of FancyZones (FancyZonesEditor) (#199) (#1122) * removed hardcoded strings from CanvasEditorWindow.xaml * removed hardcoded strings from GridEditorWindow.xaml * loc * Localized MainWindow * reverting MainWindow.xaml as it is not rendering the window as expected * Changed the resource settings from internal to public * the culture is set based on the culture of the system UI set in the system settings * Removed the french resource files used for testing * Localized canvasWindow and mainwindow * Removed setting the UI culture explicitly as it would be implicitly set to the culture of system UI * Removed redundant header file * Localize the Shortcut guide PowerToy (#199) (#1126) * Localized shortcut_guide.cpp * localized overlay_window.cpp * formatting changes * Localize overlay window * removed the README link from the set of localized resources * Typo: changed upper to lower * Localize C++ Projects of FancyZones (#1130) * localized dllmain.cpp of fancyzones project * localized FancyZones.cpp * format fancyzones.rc file * Moved SuperFancyZones back to being a string instead of having it in the resource file as it is the window class name * reverted changes for window name * Formatted fancyzones rc file * Align zone dimensions from layout preview with those from grid editor (#1115) * MSIX: add a dedicated .rc for UWPUI which joins both UI and DLL .rc's (#1139) * Runner: fix restarting with same elevation (#1133) * MSIX: reinstall script uses bundle instead of .msi to be able to reinstall in all cases * Telemetry: add WebView init failure errors * Settings: initialize COM security to allow communication between elevated Settings and WebView * Common: implement on_scope_exit helper and typed_storage * Changes for #1140 and #569 (#1152) * MSIX build instructions adjustmnet (#1170) * MSIX: hide the "Run at Startup" option if running as packaged * MSIX: update identity name and publisher (#1176) * Runner: fix startup task state setting for MSIX (#1181) * Add ImageResizer to MSIX installer and make the code MSIX-compatible (#1219) * Removed ImageResizer.exe location registry key * Added working resize pictures to MSIX context menu without icon * Fixed missing icon on MSIX build * Added comments * Changed to single context handler entry * Made changes as per PR comments * Localize ImageResizer (#1261) * Removed hardcoded strings * Added resource dlls to MSIX installer * Save ImageResizer settings in JSON format (#1258) * Combined settings files * Added JSON settings functionality in PowerToys format with thread safety * Reverting changes to csproj file * Removed settings.settings and designer file and added target sdk tools to fix warning * Added NewtonSoft Json package * Added 3 tests * Added propertychanged test * Removed unused libraries * Removed additional allocation statements in test * Added comments on test * Added one-time setup code * Added Newtonsoft.Json.dll to MSI and MSIX installer * Fixed copyright header * Fixed folder location in MSIX * Renamed jsonMutex to _jsonMutex * Fixed line endings * Created private setup functions and added Arrange, Act, Assert comments * Created private setup functions and added Arrange, Act, Assert comments * Suppressed copyright warning on AppFixture and enabled treat warnings as errors * Added comments on Reload/AppFixture and added constructor andispose * Added telemetry to ImageResizer Shell Extension code (dev/imageResizer) (#1272) * Added telemetry to C++ ImageResizerExt * Added Register and unregister calls * Changed default enable setting * Set startup location to center of the screen (ImageResizer) (#1452) * Added ImageResizer resources.dlls to the MSI installer (#1448) * Implemented fix for foreground issue for ImageResizer (#1434) * Fixed conflict in installer README.md file * Fixed conflict in bundle.js * Auto-generate AssemblyInfo in ImageResizer (#1467) * Updated assembly info * Added auto-generation of AssemblyInfo.cs * Fixed minor issues * Remove the License file since Notice.md have been added * Fix errors due to resolving merge conflicts Co-authored-by: Brice Lambson <brice@bricelam.net> Co-authored-by: Clint Rutkas <clint@rutkas.com> Co-authored-by: Arjun Balgovind <arbalgov@microsoft.com> Co-authored-by: Enrico Giordani <enricogior@users.noreply.github.com> Co-authored-by: Chris Davis <chrisdavis@outlook.com> Co-authored-by: Yosef Durr <yodurr@microsoft.com> Co-authored-by: Bartosz Sosnowski <bzoz@users.noreply.github.com> Co-authored-by: vldmr11080 <57061786+vldmr11080@users.noreply.github.com> Co-authored-by: yuyoyuppe <yuyoyuppe@users.noreply.github.com> Co-authored-by: Alekhya Kommuru <alkommur@microsoft.com> Co-authored-by: Alekhya <reddykalekhya@gmail.com> Co-authored-by: yuyoyuppe <a.yuyoyuppe@gmail.com> Co-authored-by: Udit Singh <udsing@microsoft.com>
454 lines
14 KiB
C#
454 lines
14 KiB
C#
// Copyright (c) Brice Lambson
|
|
// The Brice Lambson licenses this file to you under the MIT license.
|
|
// See the LICENSE file in the project root for more information. Code forked from Brice Lambson's https://github.com/bricelam/ImageResizer/
|
|
|
|
using System;
|
|
using System.Collections.ObjectModel;
|
|
using System.IO;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
using ImageResizer.Properties;
|
|
using ImageResizer.Test;
|
|
using Xunit;
|
|
|
|
namespace ImageResizer.Models
|
|
{
|
|
public class ResizeOperationTests : IDisposable
|
|
{
|
|
private readonly TestDirectory _directory = new TestDirectory();
|
|
|
|
[Fact]
|
|
public void Execute_copies_frame_metadata()
|
|
{
|
|
var operation = new ResizeOperation("Test.jpg", _directory, Settings());
|
|
|
|
operation.Execute();
|
|
|
|
AssertEx.Image(
|
|
_directory.File(),
|
|
image => Assert.Equal("Test", ((BitmapMetadata)image.Frames[0].Metadata).Comment));
|
|
}
|
|
|
|
[Fact]
|
|
public void Execute_keeps_date_modified()
|
|
{
|
|
var operation = new ResizeOperation("Test.png", _directory, Settings(s => s.KeepDateModified = true));
|
|
|
|
operation.Execute();
|
|
|
|
Assert.Equal(File.GetLastWriteTimeUtc("Test.png"), File.GetLastWriteTimeUtc(_directory.File()));
|
|
}
|
|
|
|
[Fact]
|
|
public void Execute_keeps_date_modified_when_replacing_originals()
|
|
{
|
|
var path = Path.Combine(_directory, "Test.png");
|
|
File.Copy("Test.png", path);
|
|
|
|
var originalDateModified = File.GetLastWriteTimeUtc(path);
|
|
|
|
var operation = new ResizeOperation(
|
|
path,
|
|
null,
|
|
Settings(
|
|
s =>
|
|
{
|
|
s.KeepDateModified = true;
|
|
s.Replace = true;
|
|
}));
|
|
|
|
operation.Execute();
|
|
|
|
Assert.Equal(originalDateModified, File.GetLastWriteTimeUtc(_directory.File()));
|
|
}
|
|
|
|
[Fact]
|
|
public void Execute_replaces_originals()
|
|
{
|
|
var path = Path.Combine(_directory, "Test.png");
|
|
File.Copy("Test.png", path);
|
|
|
|
var operation = new ResizeOperation(path, null, Settings(s => s.Replace = true));
|
|
|
|
operation.Execute();
|
|
|
|
AssertEx.Image(_directory.File(), image => Assert.Equal(96, image.Frames[0].PixelWidth));
|
|
}
|
|
|
|
[Fact]
|
|
public void Execute_transforms_each_frame()
|
|
{
|
|
var operation = new ResizeOperation("Test.gif", _directory, Settings());
|
|
|
|
operation.Execute();
|
|
|
|
AssertEx.Image(
|
|
_directory.File(),
|
|
image =>
|
|
{
|
|
Assert.Equal(2, image.Frames.Count);
|
|
AssertEx.All(image.Frames, frame => Assert.Equal(96, frame.PixelWidth));
|
|
});
|
|
}
|
|
|
|
[Fact]
|
|
public void Execute_uses_fallback_encoder()
|
|
{
|
|
var operation = new ResizeOperation(
|
|
"Test.ico",
|
|
_directory,
|
|
Settings(s => s.FallbackEncoder = new PngBitmapEncoder().CodecInfo.ContainerFormat));
|
|
|
|
operation.Execute();
|
|
|
|
Assert.Contains("Test (Test).png", _directory.FileNames);
|
|
}
|
|
|
|
[Fact]
|
|
public void Transform_ignores_orientation_when_landscape_to_portrait()
|
|
{
|
|
var operation = new ResizeOperation(
|
|
"Test.png",
|
|
_directory,
|
|
Settings(
|
|
x =>
|
|
{
|
|
x.IgnoreOrientation = true;
|
|
x.SelectedSize.Width = 96;
|
|
x.SelectedSize.Height = 192;
|
|
}));
|
|
|
|
operation.Execute();
|
|
|
|
AssertEx.Image(
|
|
_directory.File(),
|
|
image =>
|
|
{
|
|
Assert.Equal(192, image.Frames[0].PixelWidth);
|
|
Assert.Equal(96, image.Frames[0].PixelHeight);
|
|
});
|
|
}
|
|
|
|
[Fact]
|
|
public void Transform_ignores_orientation_when_portrait_to_landscape()
|
|
{
|
|
var operation = new ResizeOperation(
|
|
"TestPortrait.png",
|
|
_directory,
|
|
Settings(
|
|
x =>
|
|
{
|
|
x.IgnoreOrientation = true;
|
|
x.SelectedSize.Width = 192;
|
|
x.SelectedSize.Height = 96;
|
|
}));
|
|
|
|
operation.Execute();
|
|
|
|
AssertEx.Image(
|
|
_directory.File(),
|
|
image =>
|
|
{
|
|
Assert.Equal(96, image.Frames[0].PixelWidth);
|
|
Assert.Equal(192, image.Frames[0].PixelHeight);
|
|
});
|
|
}
|
|
|
|
[Fact]
|
|
public void Transform_ignores_ignore_orientation_when_auto()
|
|
{
|
|
var operation = new ResizeOperation(
|
|
"Test.png",
|
|
_directory,
|
|
Settings(
|
|
x =>
|
|
{
|
|
x.IgnoreOrientation = true;
|
|
x.SelectedSize.Width = 96;
|
|
x.SelectedSize.Height = 0;
|
|
}));
|
|
|
|
operation.Execute();
|
|
|
|
AssertEx.Image(
|
|
_directory.File(),
|
|
image =>
|
|
{
|
|
Assert.Equal(96, image.Frames[0].PixelWidth);
|
|
Assert.Equal(48, image.Frames[0].PixelHeight);
|
|
});
|
|
}
|
|
|
|
[Fact]
|
|
public void Transform_ignores_ignore_orientation_when_percent()
|
|
{
|
|
var operation = new ResizeOperation(
|
|
"Test.png",
|
|
_directory,
|
|
Settings(
|
|
x =>
|
|
{
|
|
x.IgnoreOrientation = true;
|
|
x.SelectedSize.Width = 50;
|
|
x.SelectedSize.Height = 200;
|
|
x.SelectedSize.Unit = ResizeUnit.Percent;
|
|
x.SelectedSize.Fit = ResizeFit.Stretch;
|
|
}));
|
|
|
|
operation.Execute();
|
|
|
|
AssertEx.Image(
|
|
_directory.File(),
|
|
image =>
|
|
{
|
|
Assert.Equal(96, image.Frames[0].PixelWidth);
|
|
Assert.Equal(192, image.Frames[0].PixelHeight);
|
|
});
|
|
}
|
|
|
|
[Fact]
|
|
public void Transform_honors_shrink_only()
|
|
{
|
|
var operation = new ResizeOperation(
|
|
"Test.png",
|
|
_directory,
|
|
Settings(
|
|
x =>
|
|
{
|
|
x.ShrinkOnly = true;
|
|
x.SelectedSize.Width = 288;
|
|
x.SelectedSize.Height = 288;
|
|
}));
|
|
|
|
operation.Execute();
|
|
|
|
AssertEx.Image(
|
|
_directory.File(),
|
|
image =>
|
|
{
|
|
Assert.Equal(192, image.Frames[0].PixelWidth);
|
|
Assert.Equal(96, image.Frames[0].PixelHeight);
|
|
});
|
|
}
|
|
|
|
[Fact]
|
|
public void Transform_ignores_shrink_only_when_percent()
|
|
{
|
|
var operation = new ResizeOperation(
|
|
"Test.png",
|
|
_directory,
|
|
Settings(
|
|
x =>
|
|
{
|
|
x.ShrinkOnly = true;
|
|
x.SelectedSize.Width = 133.3;
|
|
x.SelectedSize.Unit = ResizeUnit.Percent;
|
|
}));
|
|
|
|
operation.Execute();
|
|
|
|
AssertEx.Image(
|
|
_directory.File(),
|
|
image =>
|
|
{
|
|
Assert.Equal(256, image.Frames[0].PixelWidth);
|
|
Assert.Equal(128, image.Frames[0].PixelHeight);
|
|
});
|
|
}
|
|
|
|
[Fact]
|
|
public void Transform_honors_shrink_only_when_auto_height()
|
|
{
|
|
var operation = new ResizeOperation(
|
|
"Test.png",
|
|
_directory,
|
|
Settings(
|
|
x =>
|
|
{
|
|
x.ShrinkOnly = true;
|
|
x.SelectedSize.Width = 288;
|
|
x.SelectedSize.Height = 0;
|
|
}));
|
|
|
|
operation.Execute();
|
|
|
|
AssertEx.Image(
|
|
_directory.File(),
|
|
image => Assert.Equal(192, image.Frames[0].PixelWidth));
|
|
}
|
|
|
|
[Fact]
|
|
public void Transform_honors_shrink_only_when_auto_width()
|
|
{
|
|
var operation = new ResizeOperation(
|
|
"Test.png",
|
|
_directory,
|
|
Settings(
|
|
x =>
|
|
{
|
|
x.ShrinkOnly = true;
|
|
x.SelectedSize.Width = 0;
|
|
x.SelectedSize.Height = 288;
|
|
}));
|
|
|
|
operation.Execute();
|
|
|
|
AssertEx.Image(
|
|
_directory.File(),
|
|
image => Assert.Equal(96, image.Frames[0].PixelHeight));
|
|
}
|
|
|
|
[Fact]
|
|
public void Transform_honors_unit()
|
|
{
|
|
var operation = new ResizeOperation(
|
|
"Test.png",
|
|
_directory,
|
|
Settings(
|
|
x =>
|
|
{
|
|
x.SelectedSize.Width = 1;
|
|
x.SelectedSize.Height = 1;
|
|
x.SelectedSize.Unit = ResizeUnit.Inch;
|
|
}));
|
|
|
|
operation.Execute();
|
|
|
|
AssertEx.Image(_directory.File(), image => Assert.Equal(image.Frames[0].DpiX, image.Frames[0].PixelWidth, 0));
|
|
}
|
|
|
|
[Fact]
|
|
public void Transform_honors_fit_when_Fit()
|
|
{
|
|
var operation = new ResizeOperation(
|
|
"Test.png",
|
|
_directory,
|
|
Settings(x => x.SelectedSize.Fit = ResizeFit.Fit));
|
|
|
|
operation.Execute();
|
|
|
|
AssertEx.Image(
|
|
_directory.File(),
|
|
image =>
|
|
{
|
|
Assert.Equal(96, image.Frames[0].PixelWidth);
|
|
Assert.Equal(48, image.Frames[0].PixelHeight);
|
|
});
|
|
}
|
|
|
|
[Fact]
|
|
public void Transform_honors_fit_when_Fill()
|
|
{
|
|
var operation = new ResizeOperation(
|
|
"Test.png",
|
|
_directory,
|
|
Settings(x => x.SelectedSize.Fit = ResizeFit.Fill));
|
|
|
|
operation.Execute();
|
|
|
|
AssertEx.Image(
|
|
_directory.File(),
|
|
image =>
|
|
{
|
|
Assert.Equal(Colors.White, image.Frames[0].GetFirstPixel());
|
|
Assert.Equal(96, image.Frames[0].PixelWidth);
|
|
Assert.Equal(96, image.Frames[0].PixelHeight);
|
|
});
|
|
}
|
|
|
|
[Fact]
|
|
public void Transform_honors_fit_when_Stretch()
|
|
{
|
|
var operation = new ResizeOperation(
|
|
"Test.png",
|
|
_directory,
|
|
Settings(x => x.SelectedSize.Fit = ResizeFit.Stretch));
|
|
|
|
operation.Execute();
|
|
|
|
AssertEx.Image(
|
|
_directory.File(),
|
|
image =>
|
|
{
|
|
Assert.Equal(Colors.Black, image.Frames[0].GetFirstPixel());
|
|
Assert.Equal(96, image.Frames[0].PixelWidth);
|
|
Assert.Equal(96, image.Frames[0].PixelHeight);
|
|
});
|
|
}
|
|
|
|
[Fact]
|
|
public void GetDestinationPath_uniquifies_output_filename()
|
|
{
|
|
File.WriteAllBytes(Path.Combine(_directory, "Test (Test).png"), new byte[0]);
|
|
|
|
var operation = new ResizeOperation("Test.png", _directory, Settings());
|
|
|
|
operation.Execute();
|
|
|
|
Assert.Contains("Test (Test) (1).png", _directory.FileNames);
|
|
}
|
|
|
|
[Fact]
|
|
public void GetDestinationPath_uniquifies_output_filename_again()
|
|
{
|
|
File.WriteAllBytes(Path.Combine(_directory, "Test (Test).png"), new byte[0]);
|
|
File.WriteAllBytes(Path.Combine(_directory, "Test (Test) (1).png"), new byte[0]);
|
|
|
|
var operation = new ResizeOperation("Test.png", _directory, Settings());
|
|
|
|
operation.Execute();
|
|
|
|
Assert.Contains("Test (Test) (2).png", _directory.FileNames);
|
|
}
|
|
|
|
[Fact]
|
|
public void GetDestinationPath_uses_fileName_format()
|
|
{
|
|
var operation = new ResizeOperation(
|
|
"Test.png",
|
|
_directory,
|
|
Settings(s => s.FileName = "%1_%2_%3_%4_%5_%6"));
|
|
|
|
operation.Execute();
|
|
|
|
Assert.Contains("Test_Test_96_96_96_48.png", _directory.FileNames);
|
|
}
|
|
|
|
[Fact]
|
|
public void Execute_handles_directories_in_fileName_format()
|
|
{
|
|
var operation = new ResizeOperation(
|
|
"Test.png",
|
|
_directory,
|
|
Settings(s => s.FileName = @"Directory\%1 (%2)"));
|
|
|
|
operation.Execute();
|
|
|
|
Assert.True(File.Exists(_directory + @"\Directory\Test (Test).png"));
|
|
}
|
|
|
|
public void Dispose()
|
|
=> _directory.Dispose();
|
|
|
|
private Settings Settings(Action<Settings> action = null)
|
|
{
|
|
var settings = new Settings
|
|
{
|
|
Sizes = new ObservableCollection<ResizeSize>
|
|
{
|
|
new ResizeSize
|
|
{
|
|
Name = "Test",
|
|
Width = 96,
|
|
Height = 96,
|
|
},
|
|
},
|
|
SelectedSizeIndex = 0,
|
|
};
|
|
action?.Invoke(settings);
|
|
|
|
return settings;
|
|
}
|
|
}
|
|
}
|