예제 #1
0
        /// <summary>
        /// Tries to create a virtual canvas from a physical canvas and a camera.
        /// </summary>
        /// <param name="physicalCanvas">This is typically a <see cref="ICanvas2D"/> backend. It must implement <see cref="IRenderTargetInfo"/>.</param>
        /// <param name="camera">The current camera</param>
        /// <param name="virtualCanvas">the resulting virtual canvas.</param>
        /// <returns>true if it succeeded in creating the virtual canvas.</returns>
        /// <remarks>
        /// The method may fail if the <paramref name="physicalCanvas"/> does not implement <see cref="IRenderTargetInfo"/> at one point in the chain,
        /// or if the <see cref="IRenderTargetInfo.PixelsWidth"/> or <see cref="IRenderTargetInfo.PixelsHeight"/> are zero or negative.
        /// </remarks>
        public static bool TryCreate(ICoreCanvas2D physicalCanvas, CameraTransform2D camera, out Canvas2DTransform virtualCanvas)
        {
            if (!camera.TryCreateFinalMatrix(physicalCanvas, out var finalMatrix))
            {
                virtualCanvas = default;
                return(false);
            }

            virtualCanvas = Create(physicalCanvas, finalMatrix);
            return(true);
        }
예제 #2
0
        public static Canvas2DTransform Create(ICoreCanvas2D target, Point2 physicalSize, Point2 virtualSize, Matrix3x2 virtualOffset)
        {
            var camera = CameraTransform2D.Create(virtualOffset, virtualSize);

            return(Create(target, camera, physicalSize));
        }