File: CanvasState.cs
Web Access
Project: src\src\Graphics\src\Graphics\Graphics.csproj (Microsoft.Maui.Graphics)
using System;
using System.Numerics;
 
namespace Microsoft.Maui.Graphics
{
	public class CanvasState : IDisposable
	{
		public float[] StrokeDashPattern { get; set; }
		public float StrokeDashOffset { get; set; } = 1;
		public float StrokeSize { get; set; } = 1;
 
		private Matrix3x2 _transform = Matrix3x2.Identity;
		private float _scale = 1;
		private float _scaleX = 1;
		private float _scaleY = 1;
 
		public Matrix3x2 Transform
		{
			get => this._transform;
			set
			{
				if (this._transform == value)
					return;
 
				this._transform = value;
				value.DeconstructScales(out _scale, out _scaleX, out _scaleY);
				TransformChanged();
			}
		}
		public float Scale => this._scale;
		public float ScaleX => this._scaleX;
		public float ScaleY => this._scaleY;
 
		protected CanvasState()
		{
 
		}
 
		protected CanvasState(CanvasState prototype)
		{
			StrokeDashPattern = prototype.StrokeDashPattern;
			StrokeDashOffset = prototype.StrokeDashOffset;
			StrokeSize = prototype.StrokeSize;
 
			this._transform = prototype._transform;
			this._scale = prototype._scale;
			this._scaleX = prototype._scaleX;
			this._scaleY = prototype._scaleY;
		}
 
		protected virtual void TransformChanged()
		{
			// let derived classes handle the transform change if needed.
		}
 
		protected static float GetLengthScale(Matrix3x2 matrix) => matrix.GetLengthScale();
 
		public virtual void Dispose()
		{
			// Do nothing right now
		}
	}
}