فهرست منبع

Combine everything into a single solution

Equbuxu 3 سال پیش
والد
کامیت
bbcb6c2139

+ 0 - 63
src/.gitattributes

@@ -1,63 +0,0 @@
-###############################################################################
-# Set default behavior to automatically normalize line endings.
-###############################################################################
-* text=auto
-
-###############################################################################
-# Set default behavior for command prompt diff.
-#
-# This is need for earlier builds of msysgit that does not have it on by
-# default for csharp files.
-# Note: This is only used by command line
-###############################################################################
-#*.cs     diff=csharp
-
-###############################################################################
-# Set the merge driver for project and solution files
-#
-# Merging from the command prompt will add diff markers to the files if there
-# are conflicts (Merging from VS is not affected by the settings below, in VS
-# the diff markers are never inserted). Diff markers may cause the following 
-# file extensions to fail to load in VS. An alternative would be to treat
-# these files as binary and thus will always conflict and require user
-# intervention with every merge. To do so, just uncomment the entries below
-###############################################################################
-#*.sln       merge=binary
-#*.csproj    merge=binary
-#*.vbproj    merge=binary
-#*.vcxproj   merge=binary
-#*.vcproj    merge=binary
-#*.dbproj    merge=binary
-#*.fsproj    merge=binary
-#*.lsproj    merge=binary
-#*.wixproj   merge=binary
-#*.modelproj merge=binary
-#*.sqlproj   merge=binary
-#*.wwaproj   merge=binary
-
-###############################################################################
-# behavior for image files
-#
-# image files are treated as binary by default.
-###############################################################################
-#*.jpg   binary
-#*.png   binary
-#*.gif   binary
-
-###############################################################################
-# diff behavior for common document formats
-# 
-# Convert binary document formats to text before diffing them. This feature
-# is only available from the command line. Turn it on by uncommenting the 
-# entries below.
-###############################################################################
-#*.doc   diff=astextplain
-#*.DOC   diff=astextplain
-#*.docx  diff=astextplain
-#*.DOCX  diff=astextplain
-#*.dot   diff=astextplain
-#*.DOT   diff=astextplain
-#*.pdf   diff=astextplain
-#*.PDF   diff=astextplain
-#*.rtf   diff=astextplain
-#*.RTF   diff=astextplain

+ 0 - 363
src/.gitignore

@@ -1,363 +0,0 @@
-## Ignore Visual Studio temporary files, build results, and
-## files generated by popular Visual Studio add-ons.
-##
-## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
-
-# User-specific files
-*.rsuser
-*.suo
-*.user
-*.userosscache
-*.sln.docstates
-
-# User-specific files (MonoDevelop/Xamarin Studio)
-*.userprefs
-
-# Mono auto generated files
-mono_crash.*
-
-# Build results
-[Dd]ebug/
-[Dd]ebugPublic/
-[Rr]elease/
-[Rr]eleases/
-x64/
-x86/
-[Ww][Ii][Nn]32/
-[Aa][Rr][Mm]/
-[Aa][Rr][Mm]64/
-bld/
-[Bb]in/
-[Oo]bj/
-[Oo]ut/
-[Ll]og/
-[Ll]ogs/
-
-# Visual Studio 2015/2017 cache/options directory
-.vs/
-# Uncomment if you have tasks that create the project's static files in wwwroot
-#wwwroot/
-
-# Visual Studio 2017 auto generated files
-Generated\ Files/
-
-# MSTest test Results
-[Tt]est[Rr]esult*/
-[Bb]uild[Ll]og.*
-
-# NUnit
-*.VisualState.xml
-TestResult.xml
-nunit-*.xml
-
-# Build Results of an ATL Project
-[Dd]ebugPS/
-[Rr]eleasePS/
-dlldata.c
-
-# Benchmark Results
-BenchmarkDotNet.Artifacts/
-
-# .NET Core
-project.lock.json
-project.fragment.lock.json
-artifacts/
-
-# ASP.NET Scaffolding
-ScaffoldingReadMe.txt
-
-# StyleCop
-StyleCopReport.xml
-
-# Files built by Visual Studio
-*_i.c
-*_p.c
-*_h.h
-*.ilk
-*.meta
-*.obj
-*.iobj
-*.pch
-*.pdb
-*.ipdb
-*.pgc
-*.pgd
-*.rsp
-*.sbr
-*.tlb
-*.tli
-*.tlh
-*.tmp
-*.tmp_proj
-*_wpftmp.csproj
-*.log
-*.vspscc
-*.vssscc
-.builds
-*.pidb
-*.svclog
-*.scc
-
-# Chutzpah Test files
-_Chutzpah*
-
-# Visual C++ cache files
-ipch/
-*.aps
-*.ncb
-*.opendb
-*.opensdf
-*.sdf
-*.cachefile
-*.VC.db
-*.VC.VC.opendb
-
-# Visual Studio profiler
-*.psess
-*.vsp
-*.vspx
-*.sap
-
-# Visual Studio Trace Files
-*.e2e
-
-# TFS 2012 Local Workspace
-$tf/
-
-# Guidance Automation Toolkit
-*.gpState
-
-# ReSharper is a .NET coding add-in
-_ReSharper*/
-*.[Rr]e[Ss]harper
-*.DotSettings.user
-
-# TeamCity is a build add-in
-_TeamCity*
-
-# DotCover is a Code Coverage Tool
-*.dotCover
-
-# AxoCover is a Code Coverage Tool
-.axoCover/*
-!.axoCover/settings.json
-
-# Coverlet is a free, cross platform Code Coverage Tool
-coverage*.json
-coverage*.xml
-coverage*.info
-
-# Visual Studio code coverage results
-*.coverage
-*.coveragexml
-
-# NCrunch
-_NCrunch_*
-.*crunch*.local.xml
-nCrunchTemp_*
-
-# MightyMoose
-*.mm.*
-AutoTest.Net/
-
-# Web workbench (sass)
-.sass-cache/
-
-# Installshield output folder
-[Ee]xpress/
-
-# DocProject is a documentation generator add-in
-DocProject/buildhelp/
-DocProject/Help/*.HxT
-DocProject/Help/*.HxC
-DocProject/Help/*.hhc
-DocProject/Help/*.hhk
-DocProject/Help/*.hhp
-DocProject/Help/Html2
-DocProject/Help/html
-
-# Click-Once directory
-publish/
-
-# Publish Web Output
-*.[Pp]ublish.xml
-*.azurePubxml
-# Note: Comment the next line if you want to checkin your web deploy settings,
-# but database connection strings (with potential passwords) will be unencrypted
-*.pubxml
-*.publishproj
-
-# Microsoft Azure Web App publish settings. Comment the next line if you want to
-# checkin your Azure Web App publish settings, but sensitive information contained
-# in these scripts will be unencrypted
-PublishScripts/
-
-# NuGet Packages
-*.nupkg
-# NuGet Symbol Packages
-*.snupkg
-# The packages folder can be ignored because of Package Restore
-**/[Pp]ackages/*
-# except build/, which is used as an MSBuild target.
-!**/[Pp]ackages/build/
-# Uncomment if necessary however generally it will be regenerated when needed
-#!**/[Pp]ackages/repositories.config
-# NuGet v3's project.json files produces more ignorable files
-*.nuget.props
-*.nuget.targets
-
-# Microsoft Azure Build Output
-csx/
-*.build.csdef
-
-# Microsoft Azure Emulator
-ecf/
-rcf/
-
-# Windows Store app package directories and files
-AppPackages/
-BundleArtifacts/
-Package.StoreAssociation.xml
-_pkginfo.txt
-*.appx
-*.appxbundle
-*.appxupload
-
-# Visual Studio cache files
-# files ending in .cache can be ignored
-*.[Cc]ache
-# but keep track of directories ending in .cache
-!?*.[Cc]ache/
-
-# Others
-ClientBin/
-~$*
-*~
-*.dbmdl
-*.dbproj.schemaview
-*.jfm
-*.pfx
-*.publishsettings
-orleans.codegen.cs
-
-# Including strong name files can present a security risk
-# (https://github.com/github/gitignore/pull/2483#issue-259490424)
-#*.snk
-
-# Since there are multiple workflows, uncomment next line to ignore bower_components
-# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
-#bower_components/
-
-# RIA/Silverlight projects
-Generated_Code/
-
-# Backup & report files from converting an old project file
-# to a newer Visual Studio version. Backup files are not needed,
-# because we have git ;-)
-_UpgradeReport_Files/
-Backup*/
-UpgradeLog*.XML
-UpgradeLog*.htm
-ServiceFabricBackup/
-*.rptproj.bak
-
-# SQL Server files
-*.mdf
-*.ldf
-*.ndf
-
-# Business Intelligence projects
-*.rdl.data
-*.bim.layout
-*.bim_*.settings
-*.rptproj.rsuser
-*- [Bb]ackup.rdl
-*- [Bb]ackup ([0-9]).rdl
-*- [Bb]ackup ([0-9][0-9]).rdl
-
-# Microsoft Fakes
-FakesAssemblies/
-
-# GhostDoc plugin setting file
-*.GhostDoc.xml
-
-# Node.js Tools for Visual Studio
-.ntvs_analysis.dat
-node_modules/
-
-# Visual Studio 6 build log
-*.plg
-
-# Visual Studio 6 workspace options file
-*.opt
-
-# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
-*.vbw
-
-# Visual Studio LightSwitch build output
-**/*.HTMLClient/GeneratedArtifacts
-**/*.DesktopClient/GeneratedArtifacts
-**/*.DesktopClient/ModelManifest.xml
-**/*.Server/GeneratedArtifacts
-**/*.Server/ModelManifest.xml
-_Pvt_Extensions
-
-# Paket dependency manager
-.paket/paket.exe
-paket-files/
-
-# FAKE - F# Make
-.fake/
-
-# CodeRush personal settings
-.cr/personal
-
-# Python Tools for Visual Studio (PTVS)
-__pycache__/
-*.pyc
-
-# Cake - Uncomment if you are using it
-# tools/**
-# !tools/packages.config
-
-# Tabs Studio
-*.tss
-
-# Telerik's JustMock configuration file
-*.jmconfig
-
-# BizTalk build output
-*.btp.cs
-*.btm.cs
-*.odx.cs
-*.xsd.cs
-
-# OpenCover UI analysis results
-OpenCover/
-
-# Azure Stream Analytics local run output
-ASALocalRun/
-
-# MSBuild Binary and Structured Log
-*.binlog
-
-# NVidia Nsight GPU debugger configuration file
-*.nvuser
-
-# MFractors (Xamarin productivity tool) working folder
-.mfractor/
-
-# Local History for Visual Studio
-.localhistory/
-
-# BeatPulse healthcheck temp database
-healthchecksdb
-
-# Backup folder for Package Reference Convert tool in Visual Studio 2017
-MigrationBackup/
-
-# Ionide (cross platform F# VS Code tools) working folder
-.ionide/
-
-# Fody - auto-generated XML schema
-FodyWeavers.xsd

+ 0 - 13
src/.idea/.idea.PixiEditorPrototype/.idea/.gitignore

@@ -1,13 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Rider ignored files
-/.idea.PixiEditorPrototype.iml
-/modules.xml
-/projectSettingsUpdater.xml
-/contentModel.xml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml

+ 0 - 262
src/.idea/.idea.PixiEditorPrototype/.idea/deployment.xml

@@ -1,262 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="PublishConfigData">
-    <serverData>
-      <paths name="Pi">
-        <serverdata>
-          <mappings>
-            <mapping local="$PROJECT_DIR$/../../../../../../Program Files/dotnet/sdk/6.0.300/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_6_default.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/../../../../../../Program Files/dotnet/sdk/6.0.300/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_6_default.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/../../../../../../Program Files/dotnet/sdk/6.0.300/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_6_default.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/../../../../../../Program Files/dotnet/sdk/6.0.300/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_6_default.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/../../../../../../Program Files/dotnet/sdk/6.0.300/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_6_default.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/../../../../../../Program Files/dotnet/sdk/6.0.300/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_6_default.editorconfig" web="/" />
-            <mapping local="$USER_HOME$/.nuget/packages/microsoft.net.test.sdk/16.11.0/build/netcoreapp2.1/Microsoft.NET.Test.Sdk.Program.cs" web="/" />
-            <mapping local="$USER_HOME$/.nuget/packages/microsoft.testplatform.testhost/16.11.0/build/netcoreapp2.1/x64/Microsoft.TestPlatform.PlatformAbstractions.dll" web="/" />
-            <mapping local="$USER_HOME$/.nuget/packages/microsoft.testplatform.testhost/16.11.0/build/netcoreapp2.1/x64/testhost.dll" web="/" />
-            <mapping local="$USER_HOME$/.nuget/packages/microsoft.testplatform.testhost/16.11.0/build/netcoreapp2.1/x64/testhost.exe" web="/" />
-            <mapping local="$USER_HOME$/.nuget/packages/xunit.runner.visualstudio/2.4.3/build/netcoreapp2.1/xunit.runner.reporters.netcoreapp10.dll" web="/" />
-            <mapping local="$USER_HOME$/.nuget/packages/xunit.runner.visualstudio/2.4.3/build/netcoreapp2.1/xunit.runner.utility.netcoreapp10.dll" web="/" />
-            <mapping local="$USER_HOME$/.nuget/packages/xunit.runner.visualstudio/2.4.3/build/netcoreapp2.1/xunit.runner.visualstudio.dotnetcore.testadapter.dll" web="/" />
-            <mapping local="$PROJECT_DIR$/.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/Chunk.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/ChunkPool.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/ChunkyImage.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/ChunkyImageEx.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/ChunkyImageLib.csproj" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/CommittedChunkStorage.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/DataHolders/ChunkResolution.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/DataHolders/ChunkResolutionEx.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/DataHolders/EmptyChunk.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/DataHolders/FilledChunk.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/DataHolders/RectD.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/DataHolders/RectI.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/DataHolders/ShapeCorners.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/DataHolders/ShapeData.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/DataHolders/VecD.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/DataHolders/VecI.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/IReadOnlyChunkyImage.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/Operations/BresenhamLineHelper.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/Operations/BresenhamLineOperation.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/Operations/ChunkyImageOperation.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/Operations/ClearOperation.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/Operations/ClearRegionOperation.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/Operations/EllipseHelper.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/Operations/EllipseOperation.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/Operations/IDrawOperation.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/Operations/IOperation.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/Operations/ImageOperation.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/Operations/OperationHelper.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/Operations/PathOperation.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/Operations/RectangleOperation.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/Operations/ResizeOperation.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/Operations/SkiaLineOperation.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/Surface.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/obj/Debug/net6.0/ChunkyImageLib.AssemblyInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/obj/Debug/net6.0/ChunkyImageLib.GeneratedMSBuildEditorConfig.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLib/obj/Debug/net6.0/ChunkyImageLib.GlobalUsings.g.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibTest/ChunkyImageLibTest.csproj" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibTest/ChunkyImageTests.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibTest/ClearRegionOperationTests.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibTest/ImageOperationTests.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibTest/OperationHelperTests.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibTest/RectITests.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibTest/RectangleOperationTests.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibTest/obj/Debug/net6.0/ChunkyImageLibTest.AssemblyInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibTest/obj/Debug/net6.0/ChunkyImageLibTest.GeneratedMSBuildEditorConfig.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibVis/App.xaml" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibVis/App.xaml.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibVis/AssemblyInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibVis/ChunkyImageLibVis.csproj" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibVis/MainWindow.xaml" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibVis/MainWindow.xaml.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibVis/obj/Debug/net6.0-windows/App.g.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibVis/obj/Debug/net6.0-windows/ChunkyImageLibVis.AssemblyInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibVis/obj/Debug/net6.0-windows/ChunkyImageLibVis.GeneratedMSBuildEditorConfig.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/ChunkyImageLibVis/obj/Debug/net6.0-windows/MainWindow.g.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument.Gen/bin/Debug/netstandard2.0/PixiEditor.ChangeableDocument.Gen.dll" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument.Gen/ChangeActionGenerator.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument.Gen/Helpers.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument.Gen/MethodInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument.Gen/NamedSourceCode.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument.Gen/NamespacedType.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument.Gen/PixiEditor.ChangeableDocument.Gen.csproj" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument.Gen/Result.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument.Gen/TypeWithName.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument.Gen/UpdateableChangeActionGenerator.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument.Gen/obj/Debug/netstandard2.0/PixiEditor.ChangeableDocument.Gen.AssemblyInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument.Gen/obj/Debug/netstandard2.0/PixiEditor.ChangeableDocument.Gen.GeneratedMSBuildEditorConfig.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument.Gen/obj/Debug/netstandard2.0/PixiEditor.ChangeableDocument.Gen.GlobalUsings.g.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Actions/Attributes/GenerateMakeChangeActionAttribute.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Actions/Attributes/GenerateUpdateableChangeActionsAttribute.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Actions/Attributes/UpdateChangeMethodAttribute.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Actions/IAction.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Actions/IEndChangeAction.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Actions/IMakeChangeAction.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Actions/IStartOrUpdateChangeAction.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Actions/Undo/ChangeBoundary_Action.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Actions/Undo/DeleteRecordedChanges_Action.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Actions/Undo/Redo_Action.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Actions/Undo/Undo_Action.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Drawing/LayerImageChunks_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Drawing/MaskChunks_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Drawing/Selection_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/IChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Properties/LayerLockTransparency_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Properties/StructureMemberBlendMode_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Properties/StructureMemberClipToMemberBelow_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Properties/StructureMemberIsVisible_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Properties/StructureMemberMaskIsVisible_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Properties/StructureMemberMask_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Properties/StructureMemberName_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Properties/StructureMemberOpacity_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Root/Size_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Root/SymmetryAxisPosition_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Root/SymmetryAxisState_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Structure/CreateFolder_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Structure/CreateLayer_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Structure/CreateStructureMember_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Structure/DeleteStructureMember_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/ChangeInfos/Structure/MoveStructureMember_ChangeInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changeables/Document.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changeables/Folder.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changeables/IChangeable.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changeables/Interfaces/IReadOnlyDocument.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changeables/Interfaces/IReadOnlyFolder.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changeables/Interfaces/IReadOnlyLayer.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changeables/Interfaces/IReadOnlySelection.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changeables/Interfaces/IReadOnlyStructureMember.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changeables/Layer.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changeables/Selection.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changeables/StructureMember.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Drawing/ApplyLayerMask_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Drawing/ClearSelectedArea_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Drawing/ClearSelection_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Drawing/CombineStructureMembersOnto_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Drawing/DrawEllipse_UpdateableChange.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Drawing/DrawRectangle_UpdateableChange.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Drawing/DrawingChangeHelper.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Drawing/FloodFill/FloodFillChunkStorage.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Drawing/FloodFill/FloodFillColorBounds.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Drawing/FloodFill/FloodFillHelper.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Drawing/FloodFill/FloodFill_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Drawing/LineBasedPen_UpdateableChange.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Drawing/PasteImage_UpdateableChange.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Drawing/PathBasedPen_UpdateableChange.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Drawing/ShiftLayer_UpdateableChange.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Properties/CreateStructureMemberMask_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Properties/DeleteStructureMemberMask_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Properties/LayerLockTransparency_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Properties/StructureMemberBlendMode_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Properties/StructureMemberClipToMemberBelow_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Properties/StructureMemberIsVisible_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Properties/StructureMemberMaskIsVisible_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Properties/StructureMemberName_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Properties/StructureMemberOpacity_UpdateableChange.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Root/ResizeCanvas_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Root/SymmetryAxisPosition_UpdateableChange.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Root/SymmetryAxisState_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Selection/SelectLasso_UpdateableChange.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Selection/SelectRectangle_UpdateableChange.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Selection/TransformSelectionPath_UpdateableChange.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Structure/CreateStructureMember_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Structure/DeleteStructureMember_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/Structure/MoveStructureMember_Change.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Changes/UpdateableChange.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/DocumentChangeTracker.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Enums/BlendMode.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Enums/SelectionMode.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Enums/SelectionModeEx.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Enums/StructureMemberType.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Enums/SymmetryAxisDirection.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/GlobalUsings.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/PixiEditor.ChangeableDocument.csproj" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Rendering/ChunkRenderer.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/Rendering/RenderingContext.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/obj/Debug/net6.0/PixiEditor.ChangeableDocument.AssemblyInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/obj/Debug/net6.0/PixiEditor.ChangeableDocument.GeneratedMSBuildEditorConfig.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.ChangeableDocument/obj/Debug/net6.0/PixiEditor.ChangeableDocument.GlobalUsings.g.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.Zoombox/AssemblyInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.Zoombox/IDragOperation.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.Zoombox/MoveDragOperation.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.Zoombox/PixiEditor.Zoombox.csproj" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.Zoombox/RotateDragOperation.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.Zoombox/ViewportRoutedEventArgs.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.Zoombox/ZoomDragOperation.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.Zoombox/Zoombox.xaml" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.Zoombox/Zoombox.xaml.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.Zoombox/ZoomboxMode.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.Zoombox/obj/Debug/net6.0-windows/PixiEditor.Zoombox.AssemblyInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.Zoombox/obj/Debug/net6.0-windows/PixiEditor.Zoombox.GeneratedMSBuildEditorConfig.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditor.Zoombox/obj/Debug/net6.0-windows/Zoombox.g.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype.sln" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/App.xaml" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/App.xaml.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/AssemblyInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Behaviors/SliderUpdateBehavior.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Converters/BlendModeToStringConverter.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Converters/BoolToVisibilityConverter.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Converters/IndexToChunkResolutionConverter.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Converters/ScaleToBitmapScalingModeConverter.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/CustomControls/BlendModeComboBox.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/CustomControls/SelectionOverlay.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/CustomControls/SymmetryOverlay/SymmetryAxisDragInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/CustomControls/SymmetryOverlay/SymmetryOverlay.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/CustomControls/TransformOverlay/Anchor.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/CustomControls/TransformOverlay/TransformCornerFreedom.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/CustomControls/TransformOverlay/TransformHelper.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/CustomControls/TransformOverlay/TransformOverlay.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/CustomControls/TransformOverlay/TransformSideFreedom.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/CustomControls/TransformOverlay/TransformState.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/CustomControls/TransformOverlay/TransformUpdateHelper.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/GlobalUsings.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Models/ActionAccumulator.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Models/BlendModeEx.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Models/DocumentHelpers.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Models/DocumentState.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Models/DocumentStructureHelper.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Models/DocumentUpdater.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Models/IReadOnlyListEx.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Models/RefreshViewport_PassthroughAction.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Models/RemoveViewport_PassthroughAction.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Models/Rendering/AffectedChunkGatherer.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Models/Rendering/RenderInfos/DirtyRect_RenderInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Models/Rendering/RenderInfos/IRenderInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Models/Rendering/RenderInfos/MaskPreviewDirty_RenderInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Models/Rendering/RenderInfos/PreviewDirty_RenderInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Models/Rendering/WriteableBitmapUpdater.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Models/Tool.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Models/ViewportLocation.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/PixiEditorPrototype.csproj" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/RelayCommand.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/ReverseOrderStackPanel.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/UserControls/Viewport/Viewport.xaml" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/UserControls/Viewport/Viewport.xaml.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/ViewModels/DocumentTransformViewModel.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/ViewModels/DocumentViewModel.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/ViewModels/FolderViewModel.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/ViewModels/LayerViewModel.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/ViewModels/StructureMemberViewModel.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/ViewModels/ViewModelMain.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Views/MainWindow.xaml" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/Views/MainWindow.xaml.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/obj/Debug/net6.0-windows/App.g.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/obj/Debug/net6.0-windows/GeneratedInternalTypeHelper.g.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/obj/Debug/net6.0-windows/PixiEditorPrototype.AssemblyInfo.cs" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/obj/Debug/net6.0-windows/PixiEditorPrototype.GeneratedMSBuildEditorConfig.editorconfig" web="/" />
-            <mapping local="$PROJECT_DIR$/PixiEditorPrototype/obj/Debug/net6.0-windows/Views/MainWindow.g.cs" web="/" />
-            <mapping local="$PROJECT_DIR$" web="/" />
-          </mappings>
-        </serverdata>
-      </paths>
-    </serverData>
-  </component>
-</project>

+ 0 - 8
src/.idea/.idea.PixiEditorPrototype/.idea/indexLayout.xml

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="UserContentModel">
-    <attachedFolders />
-    <explicitIncludes />
-    <explicitExcludes />
-  </component>
-</project>

+ 1 - 1
src/ChunkyImageLib/DataHolders/ChunkResolutionEx.cs

@@ -18,7 +18,7 @@ public static class ChunkResolutionEx
     }
 
     /// <summary>
-    /// Returns the <see cref="ChunkPool.FullChunkSize"/> for the <paramref name="resolution"/>
+    /// Returns the size of a chunk of the resolution <paramref name="resolution"/>
     /// </summary>
     /// <seealso cref="ChunkPool"/>
     public static int PixelSize(this ChunkResolution resolution)

+ 0 - 14
src/ChunkyImageLibBenchmark/ChunkyImageLibBenchmark.csproj

@@ -1,14 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <OutputType>Exe</OutputType>
-    <TargetFramework>net6.0</TargetFramework>
-    <ImplicitUsings>enable</ImplicitUsings>
-    <Nullable>enable</Nullable>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\ChunkyImageLib\ChunkyImageLib.csproj" />
-  </ItemGroup>
-
-</Project>

+ 0 - 52
src/ChunkyImageLibBenchmark/Program.cs

@@ -1,52 +0,0 @@
-using ChunkyImageLib;
-using SkiaSharp;
-using System.Diagnostics;
-
-
-for (int i = 0; i < 10; i++)
-{
-    Benchmark();
-}
-
-int count = 10000;
-double totalFirst = 0;
-double totalSecond = 0;
-for (int i = 0; i < count; i++)
-{
-    (double first, double second) = Benchmark();
-    totalFirst += first;
-    totalSecond += second;
-}
-
-Console.WriteLine($"took {totalFirst / count} ms first, then {totalSecond / count} ms");
-Console.ReadKey();
-
-(double first, double second) Benchmark()
-{
-    using ChunkyImage image = new(new(1024, 1024));
-    image.EnqueueDrawRectangle(new(new(0, 0), new(1024, 1024), 10, SKColors.Black, SKColors.Bisque));
-
-    Stopwatch sw = Stopwatch.StartNew();
-    for (int i = 0; i < 4; i++)
-    {
-        for (int j = 0; j < 4; j++)
-        {
-            //image.GetLatestChunk(new(i, j), ChunkyImageLib.DataHolders.ChunkResolution.Full);
-        }
-    }
-    sw.Stop();
-    double first = sw.ElapsedTicks / (double)Stopwatch.Frequency * 1000;
-
-    sw = Stopwatch.StartNew();
-    for (int i = 0; i < 4; i++)
-    {
-        for (int j = 0; j < 4; j++)
-        {
-            //image.GetLatestChunk(new(i, j), ChunkyImageLib.DataHolders.ChunkResolution.Full);
-        }
-    }
-    sw.Stop();
-    double second = sw.ElapsedTicks / (double)Stopwatch.Frequency * 1000;
-
-    return (first, second);
-}

+ 0 - 2
src/PixiEditor.ChangeableDocument/Changes/Change.cs

@@ -5,8 +5,6 @@ internal abstract class Change : IDisposable
     /// <summary>
     /// Checks if this change can be combined with the <paramref name="other"/> change. Returns false if not overridden
     /// </summary>
-    /// <param name="other"></param>
-    /// <returns></returns>
     public virtual bool IsMergeableWith(Change other) => false;
 
     /// <summary>

+ 1 - 1
src/PixiEditor.ChangeableDocument/Changes/Root/CreateReferenceLayer_UpdateableChange.cs

@@ -31,7 +31,7 @@ internal class CreateReferenceLayer_UpdateableChange : UpdateableChange
         return new Success();
     }
 
-    public override OneOf<None, IChangeInfo, List<IChangeInfo>> Apply(Document target, out bool ignoreInUndo)
+    public override OneOf<None, IChangeInfo, List<IChangeInfo>> Apply(Document target, bool firstApply, out bool ignoreInUndo)
     {
         target.ReferenceLayer!.Shape = shape;
         ignoreInUndo = true;

+ 224 - 0
src/PixiEditor.sln

@@ -20,6 +20,20 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BuildConfiguration", "Build
 EndProject
 Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "PixiEditor.MSIX", "PixiEditor.MSIX\PixiEditor.MSIX.wapproj", "{1F97F972-F9E8-4F35-A8B5-3F71408D2230}"
 EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ChunkyImageLib", "ChunkyImageLib\ChunkyImageLib.csproj", "{6A9DA760-1E47-414C-B8E8-3B4927F18131}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ChunkyImageLibTest", "ChunkyImageLibTest\ChunkyImageLibTest.csproj", "{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ChunkyImageLibVis", "ChunkyImageLibVis\ChunkyImageLibVis.csproj", "{510ED47C-2455-4DCE-A561-1074725E1236}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PixiEditor.ChangeableDocument", "PixiEditor.ChangeableDocument\PixiEditor.ChangeableDocument.csproj", "{294FD171-9536-474C-A679-83F0266275FB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PixiEditor.ChangeableDocument.Gen", "PixiEditor.ChangeableDocument.Gen\PixiEditor.ChangeableDocument.Gen.csproj", "{758DF7DF-A8B1-4409-B79A-018E542B7251}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PixiEditor.Zoombox", "PixiEditor.Zoombox\PixiEditor.Zoombox.csproj", "{69DD5830-C682-49FB-B1A5-D2A506EEA06B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PixiEditorPrototype", "PixiEditorPrototype\PixiEditorPrototype.csproj", "{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -200,6 +214,216 @@ Global
 		{1F97F972-F9E8-4F35-A8B5-3F71408D2230}.Release|Any CPU.Deploy.0 = Release|Any CPU
 		{1F97F972-F9E8-4F35-A8B5-3F71408D2230}.Release|x64.ActiveCfg = Release|x64
 		{1F97F972-F9E8-4F35-A8B5-3F71408D2230}.Release|x86.ActiveCfg = Release|x86
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Debug|x64.Build.0 = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Debug|x86.Build.0 = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Dev Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Dev Release|Any CPU.Build.0 = Release|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Dev Release|x64.ActiveCfg = Release|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Dev Release|x64.Build.0 = Release|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Dev Release|x86.ActiveCfg = Release|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Dev Release|x86.Build.0 = Release|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.MSIX Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.MSIX Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.MSIX Debug|x64.ActiveCfg = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.MSIX Debug|x64.Build.0 = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.MSIX Debug|x86.ActiveCfg = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.MSIX Debug|x86.Build.0 = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.MSIX|Any CPU.ActiveCfg = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.MSIX|Any CPU.Build.0 = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.MSIX|x64.ActiveCfg = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.MSIX|x64.Build.0 = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.MSIX|x86.ActiveCfg = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.MSIX|x86.Build.0 = Debug|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Release|x64.ActiveCfg = Release|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Release|x64.Build.0 = Release|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Release|x86.ActiveCfg = Release|Any CPU
+		{6A9DA760-1E47-414C-B8E8-3B4927F18131}.Release|x86.Build.0 = Release|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Debug|x64.Build.0 = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Debug|x86.Build.0 = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Dev Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Dev Release|Any CPU.Build.0 = Release|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Dev Release|x64.ActiveCfg = Release|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Dev Release|x64.Build.0 = Release|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Dev Release|x86.ActiveCfg = Release|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Dev Release|x86.Build.0 = Release|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.MSIX Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.MSIX Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.MSIX Debug|x64.ActiveCfg = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.MSIX Debug|x64.Build.0 = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.MSIX Debug|x86.ActiveCfg = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.MSIX Debug|x86.Build.0 = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.MSIX|Any CPU.ActiveCfg = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.MSIX|Any CPU.Build.0 = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.MSIX|x64.ActiveCfg = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.MSIX|x64.Build.0 = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.MSIX|x86.ActiveCfg = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.MSIX|x86.Build.0 = Debug|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Release|x64.ActiveCfg = Release|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Release|x64.Build.0 = Release|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Release|x86.ActiveCfg = Release|Any CPU
+		{E31A8266-5BCA-4877-B9E5-9C5BB42829D6}.Release|x86.Build.0 = Release|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Debug|x64.Build.0 = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Debug|x86.Build.0 = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Dev Release|Any CPU.ActiveCfg = Release|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Dev Release|Any CPU.Build.0 = Release|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Dev Release|x64.ActiveCfg = Release|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Dev Release|x64.Build.0 = Release|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Dev Release|x86.ActiveCfg = Release|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Dev Release|x86.Build.0 = Release|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.MSIX Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.MSIX Debug|Any CPU.Build.0 = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.MSIX Debug|x64.ActiveCfg = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.MSIX Debug|x64.Build.0 = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.MSIX Debug|x86.ActiveCfg = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.MSIX Debug|x86.Build.0 = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.MSIX|Any CPU.ActiveCfg = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.MSIX|Any CPU.Build.0 = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.MSIX|x64.ActiveCfg = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.MSIX|x64.Build.0 = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.MSIX|x86.ActiveCfg = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.MSIX|x86.Build.0 = Debug|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Release|Any CPU.Build.0 = Release|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Release|x64.ActiveCfg = Release|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Release|x64.Build.0 = Release|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Release|x86.ActiveCfg = Release|Any CPU
+		{510ED47C-2455-4DCE-A561-1074725E1236}.Release|x86.Build.0 = Release|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Debug|x64.Build.0 = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Debug|x86.Build.0 = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Dev Release|Any CPU.ActiveCfg = Release|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Dev Release|Any CPU.Build.0 = Release|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Dev Release|x64.ActiveCfg = Release|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Dev Release|x64.Build.0 = Release|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Dev Release|x86.ActiveCfg = Release|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Dev Release|x86.Build.0 = Release|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.MSIX Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.MSIX Debug|Any CPU.Build.0 = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.MSIX Debug|x64.ActiveCfg = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.MSIX Debug|x64.Build.0 = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.MSIX Debug|x86.ActiveCfg = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.MSIX Debug|x86.Build.0 = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.MSIX|Any CPU.ActiveCfg = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.MSIX|Any CPU.Build.0 = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.MSIX|x64.ActiveCfg = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.MSIX|x64.Build.0 = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.MSIX|x86.ActiveCfg = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.MSIX|x86.Build.0 = Debug|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Release|Any CPU.Build.0 = Release|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Release|x64.ActiveCfg = Release|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Release|x64.Build.0 = Release|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Release|x86.ActiveCfg = Release|Any CPU
+		{294FD171-9536-474C-A679-83F0266275FB}.Release|x86.Build.0 = Release|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Debug|x64.Build.0 = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Debug|x86.Build.0 = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Dev Release|Any CPU.ActiveCfg = Release|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Dev Release|Any CPU.Build.0 = Release|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Dev Release|x64.ActiveCfg = Release|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Dev Release|x64.Build.0 = Release|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Dev Release|x86.ActiveCfg = Release|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Dev Release|x86.Build.0 = Release|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.MSIX Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.MSIX Debug|Any CPU.Build.0 = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.MSIX Debug|x64.ActiveCfg = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.MSIX Debug|x64.Build.0 = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.MSIX Debug|x86.ActiveCfg = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.MSIX Debug|x86.Build.0 = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.MSIX|Any CPU.ActiveCfg = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.MSIX|Any CPU.Build.0 = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.MSIX|x64.ActiveCfg = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.MSIX|x64.Build.0 = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.MSIX|x86.ActiveCfg = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.MSIX|x86.Build.0 = Debug|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Release|Any CPU.Build.0 = Release|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Release|x64.ActiveCfg = Release|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Release|x64.Build.0 = Release|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Release|x86.ActiveCfg = Release|Any CPU
+		{758DF7DF-A8B1-4409-B79A-018E542B7251}.Release|x86.Build.0 = Release|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Debug|x64.Build.0 = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Debug|x86.Build.0 = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Dev Release|Any CPU.ActiveCfg = Release|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Dev Release|Any CPU.Build.0 = Release|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Dev Release|x64.ActiveCfg = Release|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Dev Release|x64.Build.0 = Release|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Dev Release|x86.ActiveCfg = Release|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Dev Release|x86.Build.0 = Release|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.MSIX Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.MSIX Debug|Any CPU.Build.0 = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.MSIX Debug|x64.ActiveCfg = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.MSIX Debug|x64.Build.0 = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.MSIX Debug|x86.ActiveCfg = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.MSIX Debug|x86.Build.0 = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.MSIX|Any CPU.ActiveCfg = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.MSIX|Any CPU.Build.0 = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.MSIX|x64.ActiveCfg = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.MSIX|x64.Build.0 = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.MSIX|x86.ActiveCfg = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.MSIX|x86.Build.0 = Debug|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Release|Any CPU.Build.0 = Release|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Release|x64.ActiveCfg = Release|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Release|x64.Build.0 = Release|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Release|x86.ActiveCfg = Release|Any CPU
+		{69DD5830-C682-49FB-B1A5-D2A506EEA06B}.Release|x86.Build.0 = Release|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Debug|x64.Build.0 = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Debug|x86.Build.0 = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Dev Release|Any CPU.ActiveCfg = Release|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Dev Release|Any CPU.Build.0 = Release|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Dev Release|x64.ActiveCfg = Release|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Dev Release|x64.Build.0 = Release|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Dev Release|x86.ActiveCfg = Release|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Dev Release|x86.Build.0 = Release|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.MSIX Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.MSIX Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.MSIX Debug|x64.ActiveCfg = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.MSIX Debug|x64.Build.0 = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.MSIX Debug|x86.ActiveCfg = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.MSIX Debug|x86.Build.0 = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.MSIX|Any CPU.ActiveCfg = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.MSIX|Any CPU.Build.0 = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.MSIX|x64.ActiveCfg = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.MSIX|x64.Build.0 = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.MSIX|x86.ActiveCfg = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.MSIX|x86.Build.0 = Debug|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Release|x64.ActiveCfg = Release|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Release|x64.Build.0 = Release|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Release|x86.ActiveCfg = Release|Any CPU
+		{C0D2FF8D-DACB-4D03-BBAE-43CE5D21E5EC}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 0 - 67
src/PixiEditorPrototype.sln

@@ -1,67 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.0.31912.275
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PixiEditorPrototype", "PixiEditorPrototype\PixiEditorPrototype.csproj", "{64D7EBA9-A3D0-4832-ACB7-3C519BD23755}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PixiEditor.ChangeableDocument", "PixiEditor.ChangeableDocument\PixiEditor.ChangeableDocument.csproj", "{181C9914-75B5-4BEB-AA16-F29B42A401EE}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ChunkyImageLib", "ChunkyImageLib\ChunkyImageLib.csproj", "{EFA4866B-F03E-4F6F-A7B8-1CA6467D5D17}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ChunkyImageLibTest", "ChunkyImageLibTest\ChunkyImageLibTest.csproj", "{794971CA-8CD2-4D1D-BDD9-F41E2638D138}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ChunkyImageLibVis", "ChunkyImageLibVis\ChunkyImageLibVis.csproj", "{3B0A0186-8AC0-4B1D-8587-4CE4E0E12567}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PixiEditor.Zoombox", "PixiEditor.Zoombox\PixiEditor.Zoombox.csproj", "{232E58B6-8080-4725-8541-98BFCFE23A1C}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{2AF84829-B00E-4B10-B010-C9306C6DF278}"
-	ProjectSection(SolutionItems) = preProject
-		.editorconfig = .editorconfig
-		README.md = README.md
-	EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PixiEditor.ChangeableDocument.Gen", "PixiEditor.ChangeableDocument.Gen\PixiEditor.ChangeableDocument.Gen.csproj", "{07EE9CD1-5B4B-454D-A362-F7B42C49412F}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Release|Any CPU = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{64D7EBA9-A3D0-4832-ACB7-3C519BD23755}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{64D7EBA9-A3D0-4832-ACB7-3C519BD23755}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{64D7EBA9-A3D0-4832-ACB7-3C519BD23755}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{64D7EBA9-A3D0-4832-ACB7-3C519BD23755}.Release|Any CPU.Build.0 = Release|Any CPU
-		{181C9914-75B5-4BEB-AA16-F29B42A401EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{181C9914-75B5-4BEB-AA16-F29B42A401EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{181C9914-75B5-4BEB-AA16-F29B42A401EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{181C9914-75B5-4BEB-AA16-F29B42A401EE}.Release|Any CPU.Build.0 = Release|Any CPU
-		{EFA4866B-F03E-4F6F-A7B8-1CA6467D5D17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{EFA4866B-F03E-4F6F-A7B8-1CA6467D5D17}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{EFA4866B-F03E-4F6F-A7B8-1CA6467D5D17}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{EFA4866B-F03E-4F6F-A7B8-1CA6467D5D17}.Release|Any CPU.Build.0 = Release|Any CPU
-		{794971CA-8CD2-4D1D-BDD9-F41E2638D138}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{794971CA-8CD2-4D1D-BDD9-F41E2638D138}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{794971CA-8CD2-4D1D-BDD9-F41E2638D138}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{794971CA-8CD2-4D1D-BDD9-F41E2638D138}.Release|Any CPU.Build.0 = Release|Any CPU
-		{3B0A0186-8AC0-4B1D-8587-4CE4E0E12567}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{3B0A0186-8AC0-4B1D-8587-4CE4E0E12567}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{3B0A0186-8AC0-4B1D-8587-4CE4E0E12567}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{3B0A0186-8AC0-4B1D-8587-4CE4E0E12567}.Release|Any CPU.Build.0 = Release|Any CPU
-		{232E58B6-8080-4725-8541-98BFCFE23A1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{232E58B6-8080-4725-8541-98BFCFE23A1C}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{232E58B6-8080-4725-8541-98BFCFE23A1C}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{232E58B6-8080-4725-8541-98BFCFE23A1C}.Release|Any CPU.Build.0 = Release|Any CPU
-		{07EE9CD1-5B4B-454D-A362-F7B42C49412F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{07EE9CD1-5B4B-454D-A362-F7B42C49412F}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{07EE9CD1-5B4B-454D-A362-F7B42C49412F}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{07EE9CD1-5B4B-454D-A362-F7B42C49412F}.Release|Any CPU.Build.0 = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-	GlobalSection(ExtensibilityGlobals) = postSolution
-		SolutionGuid = {90FC4DB9-E9C3-4E6F-9564-0B1011A1B521}
-	EndGlobalSection
-EndGlobal

+ 0 - 19
src/PixiEditorPrototype.sln.DotSettings

@@ -1,19 +0,0 @@
-<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
-	<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=CompareOfFloatsByEqualityOperator/@EntryIndexedValue">SUGGESTION</s:String>
-	<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=LocalVariableHidesMember/@EntryIndexedValue">SUGGESTION</s:String>
-	<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=ParameterHidesMember/@EntryIndexedValue">SUGGESTION</s:String>
-	<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=RedundantArgumentDefaultValue/@EntryIndexedValue">SUGGESTION</s:String>
-	<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=RedundantDefaultMemberInitializer/@EntryIndexedValue">SUGGESTION</s:String>
-	<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=RedundantExtendsListEntry/@EntryIndexedValue">SUGGESTION</s:String>
-	<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=Xaml_002ERedundantNamespaceAlias/@EntryIndexedValue">SUGGESTION</s:String>
-	<s:Int64 x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/BLANK_LINES_AFTER_BLOCK_STATEMENTS/@EntryValue">0</s:Int64>
-	<s:String x:Key="/Default/CodeStyle/Naming/XamlNaming/UserRules/=XAML_005FFIELD/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb"&gt;&lt;ExtraRule Prefix="" Suffix="" Style="aaBb" /&gt;&lt;/Policy&gt;</s:String>
-	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
-	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
-	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>
-	<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
-	<s:String x:Key="/Default/PatternsAndTemplates/LiveTemplates/Template/=2CAB0A567F30704CA99AA3EC249E3153/Text/@EntryValue">$HEADER$namespace $NAMESPACE$
-{
-  internal class $CLASS$ {$END$}
-}</s:String>
-	<s:Boolean x:Key="/Default/UserDictionary/Words/=Zoombox/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

+ 13 - 10
src/PixiEditorPrototype/ViewModels/DocumentViewModel.cs

@@ -150,7 +150,10 @@ internal class DocumentViewModel : INotifyPropertyChanged
 
     public Dictionary<ChunkResolution, WriteableBitmap> Bitmaps { get; set; } = new()
     {
-        [ChunkResolution.Full] = new WriteableBitmap(64, 64, 96, 96, PixelFormats.Pbgra32, null), [ChunkResolution.Half] = new WriteableBitmap(32, 32, 96, 96, PixelFormats.Pbgra32, null), [ChunkResolution.Quarter] = new WriteableBitmap(16, 16, 96, 96, PixelFormats.Pbgra32, null), [ChunkResolution.Eighth] = new WriteableBitmap(8, 8, 96, 96, PixelFormats.Pbgra32, null),
+        [ChunkResolution.Full] = new WriteableBitmap(64, 64, 96, 96, PixelFormats.Pbgra32, null),
+        [ChunkResolution.Half] = new WriteableBitmap(32, 32, 96, 96, PixelFormats.Pbgra32, null),
+        [ChunkResolution.Quarter] = new WriteableBitmap(16, 16, 96, 96, PixelFormats.Pbgra32, null),
+        [ChunkResolution.Eighth] = new WriteableBitmap(8, 8, 96, 96, PixelFormats.Pbgra32, null),
     };
 
     public WriteableBitmap PreviewBitmap { get; set; }
@@ -287,9 +290,12 @@ internal class DocumentViewModel : INotifyPropertyChanged
                 new EndPasteImage_Action()
             );
             if (layer.Opacity != 1)
+            {
                 acc.AddFinishedActions(
                     new StructureMemberOpacity_Action(guid, layer.Opacity),
                     new EndStructureMemberOpacity_Action());
+            }
+
             if (!layer.IsVisible)
                 acc.AddFinishedActions(new StructureMemberIsVisible_Action(layer.IsVisible, guid));
         }
@@ -419,11 +425,11 @@ internal class DocumentViewModel : INotifyPropertyChanged
         var member = FindFirstSelectedMember();
         Helpers.ActionAccumulator.AddActions(
             new ChangeBrightness_Action(
-                member!.GuidValue, 
-                pos, 
-                correctionFactor, 
-                strokeWidth, 
-                repeat, 
+                member!.GuidValue,
+                pos,
+                correctionFactor,
+                strokeWidth,
+                repeat,
                 darken));
     }
 
@@ -435,7 +441,7 @@ internal class DocumentViewModel : INotifyPropertyChanged
         updateableChangeActive = false;
         Helpers.ActionAccumulator.AddFinishedActions(new EndChangeBrightness_Action());
     }
-    
+
     public void StartUpdateLineBasedPen(VecI pos, SKColor color, bool replacing = false)
     {
         if (!CanStartUpdate())
@@ -781,9 +787,6 @@ internal class DocumentViewModel : INotifyPropertyChanged
 
         var referenceImage = Surface.Load(dialog.FileName);
 
-        double shapeWidth;
-        double shapeHeight;
-
         RectD referenceImageRect = new RectD(VecD.Zero, SizeBindable).AspectFit(new RectD(VecD.Zero, referenceImage.Size));
         ShapeCorners corners = new ShapeCorners(referenceImageRect);
 

+ 0 - 198
src/README.md

@@ -1,198 +0,0 @@
-# A potential new architecture for PixiEditor's backend.
-
-Decouples the state of a document from the UI.
-
-## Development progress
-
-- ChunkyImage
-    - [x] Basic committed and preview chunk support
-    - [x] Affected chunk infrastructure
-    - [x] Size constraining
-    - [x] Cloning
-    - [x] Periodic cleaning of empty chunks
-    - [x] ChunkPool multithreading support
-    - [x] Dispose that returns borrowed chunks
-    - [x] ChunkyImage finalizer that returns borrowed chunks
-    - [x] Get Committed Pixel
-    - [x] GetLatestChunk resolution parameter
-        - [x] Support for different chunk sizes in the chunk pool
-        - [x] Rendering for different chunk sizes
-        - [x] Read only interface for Chunk
-    - [x] CommittedChunkStorage (used to store chunks for undo)
-        - [ ] Write chunks to the hard drive?
-        - [ ] Compress chunks?
-    - [x] Linear color space for blending
-    - [x] Make low res chunks use smooth filtering
-    - [ ] Tests for everything related to the operation queueing
-    - Operations
-        - [x] Support for paints with different blending (replace vs. alpha compose)
-        - [x] Image
-        - [x] ChunkyImage
-        - [x] Rectangle
-        - [x] Ellipse
-        - [x] Bresenham Line
-        - [x] Skia Line
-        - [x] Path
-        - [x] Draw pixels
-        - [x] Clear operation
-        - [x] Clear region operation
-        - [x] Resize canvas operation
-        - [x] Raster clip operation
-        - [x] Lock transparency operation
-        - [x] Symmetry operation
-        - Filters
-            - [ ] Hue/Saturation/Value
-            - [ ] Brightness/Contrast
-            - [ ] Curves
-            - [ ] Gradient mapping
-            - [ ] Replace color
-- ChangeableDocument/Renderer
-    - [x] Basic Action->Change->ChangeInfo pipeline
-    - [x] Code generation for Action/ChangeInfo boilerplate
-    - [x] Ignore invalid inputs
-    - Undo handling
-        - [x] UpdateableChange class for changes requiring preview
-        - [x] Handling for changes that don't change anything
-        - [x] Dispose changes
-        - [x] Dispose the entire document
-        - [x] Basic undo stack infrastructure
-        - [x] Ignored changes (changes that don't get recorded in undo)
-        - [x] Clear undo/redo history
-        - [x] Manually merge changes
-        - [x] Auto-merge similar successive changes
-        - [ ] Limit undo stack size (discard old changes)
-    - [x] Basic Collect Actions -> Apply actions -> Render changes pipeline
-    - Rendering
-        - [x] Basic layer stack rendering
-        - [x] Opacity/Visibility support
-        - [x] Recursive rendering of folders
-        - [x] Blending modes support
-        - [x] Clip to layer below support
-        - [x] Layer mask support
-        - [x] Low-res rendering
-        - [x] Don't render chunks outside viewport
-        - [x] Support for rendering a subset of the structure (for merging selected layers, referring to selected layer, etc.)
-        - [ ] Caching for folders
-        - [ ] Caching for everything below current layer
-        - Rendering images for changes (tools requiring final image, merge layers, etc.)
-            - [x] ChunkRenderer as a part of Document
-        - [x] Rendering of layer previews
-        - [x] Rendering of canvas previews
-        - [x] Support for multiple viewports
-    - Changes
-        - [x] Create/Delete/Move structure members
-        - [x] Combine layers onto a single layer
-        - [x] Layer/Folder Visibility
-        - [x] Layer/Folder Opacity
-        - [x] Layer/Folder Name
-        - [x] Layer/Folder Blend Modes
-        - [ ] Layer/Folder locking
-        - [ ] Reference layer manipulation?
-        - [x] Resize canvas
-        - [x] Resize image
-        - [x] Paste image with transformation
-        - [x] Rectangle
-        - [x] Ellipse
-        - [x] Line
-        - [x] Path-based pen
-        - [x] Regular pen
-        - [x] Pixel-perfect pen
-        - [x] Fill
-        - [x] Brightness
-        - [x] Basic selection changes
-        - [x] Selection modes
-        - [x] Circular selection
-        - [ ] Magic wand
-        - [x] Lasso
-        - [x] Shift layer image
-        - [x] Transform selection path
-        - [x] Clear selected area
-        - [x] Clip to selection
-        - [x] Lock transparency
-        - [x] Create/Delete mask
-        - [x] Enable/Disable mask
-        - [x] Apply mask
-- ViewModel
-    - [x] Loading window when background thread is busy
-    - [x] Transform overlay
-    - [x] Symmetry overlay
-    - [x] Selection overlay
-    - [x] Viewport system
-    - [ ] New zoombox (touch fixes left)
-    - [x] Pipette tool
-
-## Included cs projects (all wip, most features not implemented yet):
-
-- ### ChunkyImageLib
-
-ChunkyImage is an image consisting of chunks. The goal is to make a simple drawing interface that would let you use ChunkyImages like regular bitmaps without caring about chunks. Features of ChunkyImage include a build-in replacement for the concept of a preview layer, lazy drawing for fast real-time preview, and a downscaled version of the same image for the same purpose.
-
-ChunkyImage replaces previews layers by letting you undo latest drawing commands. It's interface has two functions, `CommitChanges` and `CancelChanges`. `CancelChanges` lets you undo all changes made since the last call to `CommitChanges`. `CommitChanges` sets all changes in stone meaning you can no longer undo them.
-
-Whenever you draw something on a ChunkyImage the image doesn't get updated right away. Instead, the drawing command gets stored internally. The stored commands are only executed when someone tries to access the state of the image. Importantly, if someone tries to access a single chunk only that chunk will be redrawn to the final state, saving on computation. All stored commands are applied to all chunks when `CommitChanges` is called.
-
-ChunkyImage lets you request a downscaled version of each chunk. Oftentimes (if the viewport is zoomed out) you don't need to compute the full-resolution version of the chunk just for the preview. Since the drawing is done lazily, the full-resolution version won't be computed if no one asks for it (until the changes are committed).
-
-- ### ChangeableDocument
-
-ChangeableDocument is a system that keeps track of the full state of a single document. This includes the layer structure, all layer images, the undo/redo histories, etc. ChangeableDocument accepts user actions and changes the document state according to them. The state is publicly accessible for reading, but it can only be changed with actions.
-
-The implementation of ChangeableDocument uses these concepts:
-
-- Action: A piece of data with info about something that's been done, e.g. "Delete layer with some GUID"; "Undo"; "Redo".
-- Changeable: A part of the document state. The document itself is a Changeable, any Layer is also a changeable. All a Changeable does is stores the current state of itself.
-- Change: A class that lets you mutate a Changeable in some way. A change has `Apply` and `Revert` functions. For example, when deleting a layer a new Change is created. It first gets initialized, then applied. If Undo is called, it gets reverted. On initialization the current state of the layer is saved in the change. On applying the change the layer gets deleted from the document state. On reverting the change the layer gets recreated using the previously saved data.
-- UpdateableChange: A type of change that has `ApplyTemporarily` and `Update` functions. These can be called multiple times before the regular `Apply` function is called. `Revert` here should revert to a state before `ApplyTemporarily` was called for the first time. Used for changes that can be updated in real time, like the opacity slider.
-- ChangeInfo: A piece of data describing the changes made to the state by a Change. It is returned by the `Apply` and `Revert` functions of the Change class.
-
-Note that changes must not store any references to the Document, Layers, ChunkyImages, and other IChangeables. If any data needs to be stored for revert to work, it must be copied. If you need to refer to some layer, store it's GUID. Consider a situation where you create a layer, draw on it, undo twice, and redo twice. When you undo the layer gets deleted, and then recreated on redo. If the drawing change were to store a reference to the layer we'd get an exception when trying to redo it. It is possible to carefully implement the new layer operation in a way that preserves the reference, but it's a lot easier not to store references at all.
-
-ChangeableDocument uses ChunkyImages to store layer bitmaps and to draw on them.
-
-Generally, ChangeableDocument will be used in PixiEditor by pumping all user actions into it, getting ChangeInfos back and updating the UI based on them.
-
-- ### StructureRenderer
-
-The main purpose of StructureRenderer is rendering the final visible image from all the layer images. It has access to ChangeableDocument's state and also receives all of it's ChangeInfos. StructureRenderer updates the final visible image when it encounters one or more ChangeInfos that describe some visible change (drawing, canvas size change, etc.). StructureRenderer can use low-resolution version of chunks from ChunkyImages to speed up rendering, but only while a tool is in use. Once you've stopped using the tool it always renders the final full-res image. StructureRenderer also renders layer previews.
-
-StructureRenderer emits it's own ChangeInfos to notify the UI about the changes to the final image. They mainly include dirty rectangles (just the coordinates, not the data) and requests to recreate WriteableBitmaps when canvas size changes.
-
-During the implementation process StructureRenderer will most likely become a part of ChangeableDocument, with the final rendered image and layer previews becoming parts of the document state.
-
-- ### PixiEditorPrototype
-
-A mockup UI with view models used for testing
-
-## How it all integrates together
-
-Solid lines denote control flow (A -> B means A calls B); Dashed lines denote data flow (A -> B means B accesses data stored in A)
-
-![Diagram](/diagram.svg?raw=true&sanitize=true)
-
-## Some notes on chunk compression, pipette tool, and the renderer cache
-
-### Implementing chunk compression
-
-When compressed, the chunks need to return their surface into the pool. Right now ChunkPool stores chunks, but with this change the ChunkPool will need to be converted into a SurfacePool. This also allows us to make Chunks return their surfaces to the pool in the finalizer (Right now the chunks that haven't been disposed are garbage collected instead of being returned into the pool, cause otherwise the chunks would return themselves into the pool while already being marked for garbage collection. This should still work in theory but seems too hacky).
-
-The compression should happen on a separate thread. The general idea is to make a Chunk.Compress() function along with a chunk.MarkedForCompression flag. Every N seconds, we should spawn a thread (using a timer or something) that would loop over all existing chunks. The loop works like this: If a chunk isn't marked for compression, it gets marked. If the chunk is already marked for compression the Chunk.Compress() function is called. Whenever someone tries to read from or write into a chunk the MarkedForCompression flag gets reset. This ensures that only chunks that haven't been accessed for at least N seconds are compressed. If someone tries to access a compressed chunk it would get decompressed first. 
-
-Right now Chunk.Surface is a public property, and anyone can directly do stuff with the surface. This property will need to become private, and all canvas drawing functions will need to be wrapped. The wrappers will reset the MarkedForCompression flag, decompress the surface if it's currently compressed, and enable thread safety. Thread safety is required because Chunk.Compress() is called from a separate thread. Also, thread safety will allow the any thread to access the chunks at any time, which is required for the pipette tool and for the renderer cache.
-
-Since the compression thread needs to loop over all chunks the chunks need to be stored somewhere. A naive solution would be to add all chunks into a static ConcurrentBag<Chunk> and remove them on dispose. This will however require all chunks to be explicitly disposed, so instead I propose using a static ConcurrentBag<WeakReference> where the weak reference points to the chunks. This will allow the chunks to be garbage collected. Any chunks that have been garbage collected can be removed from the list by the compression thread.
-
-### Making ChunkyImage thread-safe
-
-For the pipette tool and the renderer cache to work they need to be able to access the Layers' ChunkyImages directly at any time, even if they are currently being edited in a separate thread. Therefore, ChunkyImage must become thread-safe. For the most part it's just a matter of adding a lock statement to all public functions, but there is a catch. ChunkyImage.GetLatestChunk and ChunkyImage.GetCommittedChunk return the chunks that are used internally by the ChunkyImage. The chunks are hidden behind the IReadOnlyChunk interface which protects them from being messed with, but that's it. If any changes are made to the ChunkyImage all chunks previously returned by GetLatest/CommittedChunk become effectively invalid (they can be modified in any way or even returned into the pool). At the moment it isn't a problem because the ChunkyImages are only ever accessed by a single thread at once, and no one holds onto the chunks returned by the aforementioned functions.
-
-~~Obviously, we'd need a different system to make ChunkyImage truly thread safe. A simple solution would be to make a copy of the chunks in GetLatest/CommittedChunk, but that would noticeably affect rendering performance. Instead, I propose a ChunkView class. A ChunkView can be created by calling Chunk.CreateView(). Internally, the Chunk will store a weak reference to the created ChunkView. ChunkView will have methods that let you read the surface of it's corresponding chunk and a Detach() method. The Detach() method will make the ChunkView copy the surface of it's chunk, store the copy internally, and get rid of the reference to the original chunk. Whenever a Chunk gets modified or disposed, it will call detach on all the ChunkViews it has a weak reference to, if they haven't been disposed or garbage collected already, and once it's done the Chunk will get rid of the reference. ChunkView will need to be thread safe. This mechanism will allow us to avoid the copying overhead most of the time while also ensuring that the chunk views we get from ChunkyImage.GetLatest/CommittedChunk are always valid, even after the ChunkyImage is modified.~~
-
-Edit: I decided that it would be much simpler to not return any chunks at all and instead add a couple of wrappers for `Chunk.Surface.SkiaSurface.Canvas.DrawSurface` into `ChunkyImage`.
-
-### Implementing a cache for the WriteableBitmapUpdater
-
-At the moment, WriteableBitmapUpdater receives IChangeInfos from ActionAccumulator along with the WriteableBitmap that needs to be updated. It then processes all the IChangeInfos and decides which chunks need to be redrawn based on them. The chunks are redrawn fully from scratch, starting from the bottom of the layer tree all the way to the top. This works just fine, but with enough layers it will get laggy. If you think about the normal drawing workflow, most of the time you draw many different things on a single layer before switching to another. This presents an easy optimization: pre-render all layers that come before the current one, and when the current layer is changed draw on top of the pre-rendered image. The same can't be done with the layers above the current one though, as depending on their blending mode, masks, and other parameters the different rendering order can result in a final image that looks different. Another optimization that can be done is pre-rendering the contents of folders, as they are fully independent from everything outside (unless the blending mode is set to "Through").
-
-This pre-rendering process can be done in a separate thread inside WriteableBitmapUpdater. Whenever a chunk is rendered it will try to use pre-rendered images if they exist, and render from scratch otherwise. While processing the IChangeInfos the WriteableBitmapUpdater will get rid of the pre-rendered images if the layers they contain were modified. It will also give the rendering thread instruction about the stuff that needs to be pre-rendered, e.g. "the active layer just got changed, so please work on pre-rendering the layers that are below our new location" (this means that active layer change will need to become an action).
-
-Note that the cache only gets updated after all the IChangeInfos are processed. This means that we can't use the cache inside ChangeableDocument as it can get outdated if multiple Actions get processed in a single batch. Hypothetically, we could integrate the cache into ChangeableDocument and update it after every change, but I believe the minor speed up for some operations (mainly just the fill bucket and the magic wand) won't be worth the added complexity. It's nice to keep the caching logic decoupled from ChangeableDocument.

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 3
src/diagram.svg


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است