private void ImageVirtualControl_RegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
 {
     foreach (var region in args.InvalidatedRegions)
     {
         using (var ds = ImageVirtualControl.CreateDrawingSession(region))
         {
             if (virtualBitmap != null)
                 ds.DrawImage(virtualBitmap, region, region);
         }
     }
 }
        private void CanvasVirtualControl_RegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
        {
            if (args.InvalidatedRegions.Length <= 0)
            {
                return;
            }

            OnBeforeDraw();

            foreach (var region in args.InvalidatedRegions)
            {
                using (var session = canvasControl.CreateDrawingSession(region))
                {
#if DRAW_RECTS
                    byte[] color = new byte[3];

                    random.NextBytes(color);

                    session.FillRectangle(region, Color.FromArgb(255, color[0], color[1], color[2]));
#endif
                    OnDraw(new BoundedCanvasDrawEventArgs(session, region.ToRect2()));
                }
            }

            OnAfterDraw();

            isSuccessfullyRendered = true;
        }
Beispiel #3
0
        /// <summary>
        /// отрисовка участка канваса
        /// </summary>
        private void DrawRegion(CanvasVirtualControl sender, Rect region)
        {
            using (var ds = sender.CreateDrawingSession(region))
            {
                ds.Clear(NextColor());

                var left   = ((int)(region.X / gridSize) - 2) * gridSize;
                var top    = ((int)(region.Y / gridSize) - 2) * gridSize;
                var right  = ((int)((region.X + region.Width) / gridSize) + 2) * gridSize;
                var bottom = ((int)((region.Y + region.Height) / gridSize) + 2) * gridSize;

                for (var x = left; x <= right; x += gridSize)
                {
                    for (var y = top; y <= bottom; y += gridSize)
                    {
                        var curObj = Edjes.FirstOrDefault(xx => xx.Item1 == x / gridSize && xx.Item2 == y / gridSize);
                        if (curObj != null)
                        {
                            var pos = new Vector2(x + Xoffset, y + Yoffset);

                            ds.DrawCachedGeometry(getCashedValve16(sender), pos, Colors.Black);
                            ds.DrawCachedGeometry(getCashedValve15(sender), pos, Colors.LightGray);
                            ds.DrawText(curObj.Item3, pos, Colors.DarkBlue, textFormat);
                            DrawSelectedObject(ds);
                        }
                    }
                }
            }
        }
Beispiel #4
0
        public void FormatLine(ILanguage language,
                               CanvasVirtualControl canvas, CanvasTextLayout canvasText, string content)
        {
            var offset = 0;

            base.languageParser.Parse(content, language,
                                      (parsedCode, captures) =>
            {
                foreach (var capture in captures)
                {
                    if (base.Styles.Contains(capture.Name))
                    {
                        var style = base.Styles[capture.Name];

                        if (!string.IsNullOrEmpty(style.Foreground))
                        {
                            var foregroundBrush = GetSolidColorBrush(canvas, style.Foreground);
                            canvasText.SetBrush(
                                capture.Index + offset,
                                capture.Length, foregroundBrush);
                        }
                    }
                }

                offset += parsedCode.Length;
            });
        }
Beispiel #5
0
        private void canvas_RegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
        {
            foreach (var region in args.InvalidatedRegions)
            {
                using (var ds = sender.CreateDrawingSession(region))
                {
                    ds.Clear(Colors.Transparent);

                    int startLine = (int)Math.Floor(region.Top / LineHeight);

                    // add 2 to the end line count. we want to "overdraw" a bit if the line is going to be cut-off
                    int endLine = (int)(Math.Ceiling(region.Bottom / LineHeight) + 2);

                    var stringRegion = new StringBuilder();
                    for (int i = startLine; i < endLine; i++)
                    {
                        if (Text != null && i < Text.LineCount)
                        {
                            var textLine = Text.GetLine(i);
                            if (textLine != null && textLine is DiffTextLine diffLine)
                            {
                                stringRegion.AppendLine(diffLine.LineNo > -1 ? (diffLine.LineNo).ToString() : "");
                            }
                        }
                    }

                    using (var canvasText = new CanvasTextLayout(ds, stringRegion.ToString(), _textFormat, 32, (float)region.Height))
                    {
                        ds.DrawTextLayout(canvasText, 0, startLine * LineHeight, _defaultForegroundBrush);
                    }
                }
            }
        }
Beispiel #6
0
        public void Attach(CanvasVirtualControl control)
        {
            _control = control;

            _events          = EngineEvents.Attach(this, control);
            _status.IsPaused = true;
        }
Beispiel #7
0
        private CanvasSolidColorBrush GetSolidColorBrush(CanvasVirtualControl resourceCreator, string hex)
        {
            hex = hex.Replace("#", string.Empty);
            byte a      = 255;
            int  index3 = 0;

            if (hex.Length == 8)
            {
                a       = (byte)Convert.ToUInt32(hex.Substring(index3, 2), 16);
                index3 += 2;
            }

            byte r = (byte)Convert.ToUInt32(hex.Substring(index3, 2), 16);

            index3 += 2;

            byte g = (byte)Convert.ToUInt32(hex.Substring(index3, 2), 16);

            index3 += 2;

            byte b = (byte)Convert.ToUInt32(hex.Substring(index3, 2), 16);

            var color = Color.FromArgb(a, r, g, b);

            if (_brushLookup.TryGetValue(color, out CanvasSolidColorBrush brush))
            {
                return(brush);
            }

            var newBrush = new CanvasSolidColorBrush(resourceCreator, color);

            _brushLookup.Add(color, newBrush);

            return(newBrush);
        }
Beispiel #8
0
        /// <summary>Redrawing Canvas</summary>
        private void Canvas_OnRegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
        {
            foreach (var region in args.InvalidatedRegions)
            {
                if (region.Width > 0 && region.Height > 0)
                {
                    var x      = (int)System.Math.Floor(region.X);
                    var y      = (int)System.Math.Floor(region.Y);
                    var width  = (int)System.Math.Ceiling(region.X + region.Width) - x;
                    var height = (int)System.Math.Ceiling(region.Y + region.Height) - y;

                    if (sender == captureCanvas)
                    {
                        _captureLayer.OnPaint(x, y, width, height);
                    }
                    else if (sender == tempCanvas)
                    {
                        _temporaryLayer.OnPaint(x, y, width, height);
                    }
                    else if (sender == modelCanvas)
                    {
                        _modelLayer.OnPaint(x, y, width, height);
                    }
                    else if (sender == backgroundCanvas)
                    {
                        _backgroundLayer.OnPaint(x, y, width, height);
                    }
                }
            }
        }
Beispiel #9
0
        internal async Task LoadAsync(CanvasVirtualControl resourceCreator, ICoordinateSystem coords)
        {
            Image = await CanvasBitmap.LoadAsync(resourceCreator, Source);

            var spriteSizeInPixels = new Vector2(Image.SizeInPixels.Width, Image.SizeInPixels.Height);
            var canvasSizeInDips   = resourceCreator.Size.ToVector2();

            var pixelRatio     = spriteSizeInPixels / canvasSizeInDips;
            var worldSizeRatio = Size / coords.Size;

            if (pixelRatio.X == pixelRatio.Y && worldSizeRatio.X == worldSizeRatio.Y)
            {
                // If world and sprite have the same aspect ratio we can load
                // the sprite with manipulated DPI so we do not need to scale
                // it in DrawImage(...) or using a ScaleEffect
                var dpi = (96 * pixelRatio.X) / worldSizeRatio.X;
                Image.Dispose();
                Image = await CanvasBitmap.LoadAsync(resourceCreator, Source, dpi);

                IsPreScaled = true;
            }
            else
            {
                // Otherwise, the renderer must do the scaling
                IsPreScaled = false;
            }
        }
Beispiel #10
0
 private void ImageVirtualControl_CreateResources(CanvasVirtualControl sender, Microsoft.Graphics.Canvas.UI.CanvasCreateResourcesEventArgs args)
 {
     if (imageStream != null)
     {
         args.TrackAsyncAction(LoadVirtualBitmap().AsAsyncAction());
     }
 }
Beispiel #11
0
 public Layer(CanvasVirtualControl control, IRenderTarget target, LayerType type, Renderer renderer)
 {
     Type      = type;
     _control  = control;
     _target   = target;
     _renderer = renderer;
 }
Beispiel #12
0
        /// <summary>
        /// отрисовка протухла для регионов
        /// </summary>
        private void canvasControl_RegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
        {
            var invalidatedRegions = args.InvalidatedRegions;

            foreach (var region in invalidatedRegions)
            {
                DrawRegion(sender, region);
            }
        }
Beispiel #13
0
        void Canvas_CreateResources(CanvasVirtualControl sender, CanvasCreateResourcesEventArgs args)
        {
            // Don't bother reloading our shaders if it is only the DPI that changed.
            // That happens all the time due to ScrollViewer_ViewChanged adjusting canvas.DpiScale.
            if (args.Reason == CanvasCreateResourcesReason.DpiChanged)
                return;

            args.TrackAsyncAction(Canvas_CreateResourcesAsync(sender).AsAsyncAction());
        }
Beispiel #14
0
 public void Draw(CanvasDrawingSession session, CanvasVirtualControl device)
 {
     foreach (var geo in Geometrys)
     {
         geo.Draw(session, device);
     }
     TemporaryGeometry?.Draw(session, device);
     _image?.Draw(session, device);
 }
Beispiel #15
0
 private void canvas_CreateResources(CanvasVirtualControl sender, CanvasCreateResourcesEventArgs args)
 {
     // Don't bother reloading our shaders if it is only the DPI that changed.
     // That happens all the time due to ScrollViewer_ViewChanged adjusting canvas.DpiScale.
     if (args.Reason == CanvasCreateResourcesReason.DpiChanged)
     {
         return;
     }
 }
 // Draw to the CanvasVirtualControl
 void virtualControl_RegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
 {
     foreach (var region in args.InvalidatedRegions)
     {
         using (var ds = sender.CreateDrawingSession(region))
         {
             Draw(ds, "Canvas\nVirtual\nControl", sender.Size);
         }
     }
 }
Beispiel #17
0
 // Draw to the CanvasVirtualControl
 void virtualControl_RegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
 {
     foreach (var region in args.InvalidatedRegions)
     {
         using (var ds = sender.CreateDrawingSession(region))
         {
             Draw(ds, "Canvas\nVirtual\nControl", sender.Size);
         }
     }
 }
Beispiel #18
0
        private void Page_Loaded(object sender, RoutedEventArgs e)
        {
            CanvasVirtualControl canvasVirtualControl = new CanvasVirtualControl();

            canvasVirtualControl.Width  = 1486;
            canvasVirtualControl.Height = 610;
            MyCanvas.Children.Add(canvasVirtualControl);
            Canvas.SetLeft(canvasVirtualControl, 100);
            Canvas.SetTop(canvasVirtualControl, 100);
            canvasVirtualControl.RegionsInvalidated += CanvasVirtualControl_RegionsInvalidated;
        }
Beispiel #19
0
        internal static EngineEvents Attach(Engine engine, CanvasVirtualControl control)
        {
            var events = new EngineEvents
            {
                _engine = engine
            };

            events.AttachCore(engine, control);

            return(events);
        }
Beispiel #20
0
        private void RaiseCreateResources(CanvasVirtualControl sender, CanvasCreateResourcesEventArgs args)
        {
            if (args.Reason == CanvasCreateResourcesReason.DpiChanged)
            {
                return;
            }

            var task = OnCreateResources(_earlyCreateResources, _createResources, sender, args);

            args.TrackAsyncAction(task.AsAsyncAction());
        }
Beispiel #21
0
        private void OnRegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs e)
        {
            Debug.WriteLine(e.VisibleRegion);

            foreach (var r in e.InvalidatedRegions)
            {
                using (var ds = sender.CreateDrawingSession(r))
                {
                    ds.Clear(Colors.DeepSkyBlue);
                }
            }
        }
Beispiel #22
0
 private void ImageVirtualControl_RegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
 {
     foreach (var region in args.InvalidatedRegions)
     {
         using (var ds = ImageVirtualControl.CreateDrawingSession(region))
         {
             if (virtualBitmap != null)
             {
                 ds.DrawImage(virtualBitmap, region, region);
             }
         }
     }
 }
        private void OnRegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
        {
            ++regionsInvalidatedEventCount;

            var invalidatedRegions = args.InvalidatedRegions;
            regionsInvalidatedCount += invalidatedRegions.Count();

            status.Text = string.Format("{0} RegionsInvalidated events, {1} total regions invalidated", regionsInvalidatedEventCount, regionsInvalidatedCount);

            foreach (var region in invalidatedRegions)
            {
                DrawRegion(sender, region);
            }
        }
Beispiel #24
0
        private void DrawBorderGeometry(CanvasDrawingSession session, CanvasVirtualControl device)
        {
            if (Points == null || Points.Count == 0)
            {
                return;
            }
            if (_geometry == null || _rebuildGeometry)
            {
                CreateCanvasGeometry(device);
                _rebuildGeometry = false;
            }

            session.DrawGeometry(_geometry, Colors.WhiteSmoke, 1f / MapController.Instance.Zoom);
        }
        public void RegionInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
        {
            var visibleRegion = new Rect(ViewportOffsetX.Value, ViewportOffsetY.Value,
                                         ViewportWidth.Value, ViewportHeight.Value);

            foreach (var rect in args.InvalidatedRegions)
            {
                if (!visibleRegion.IsIntersect(rect))
                {
                    continue;
                }
                RenderPart(sender, rect);
            }
        }
Beispiel #26
0
        private void CanvasVirtualControl_RegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
        {
            CanvasDrawingSession drawingSession;
            Rect rect = new Rect(args.InvalidatedRegions[0].Left, args.InvalidatedRegions[0].Top, args.InvalidatedRegions[0].Width, args.InvalidatedRegions[0].Height);

            using (drawingSession = sender.CreateDrawingSession(rect))
            {
                var dashedStroke = new CanvasStrokeStyle()
                {
                    LineJoin = CanvasLineJoin.Round
                };
                drawingSession.DrawRectangle(new Rect(20, 20, 200, 200), Windows.UI.Color.FromArgb(255, 255, 0, 0), 40, dashedStroke);
            }
        }
        private void MapCanvas_OnRegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
        {
            var visible = args.InvalidatedRegions[0];

            for (int i = 1; i < args.InvalidatedRegions.Length; i++)
            {
                visible.Union(args.InvalidatedRegions[i]);
            }

            using (var drawingSession = sender.CreateDrawingSession(visible))
            {
                _map.Draw(drawingSession, sender);
            }
        }
        private void OnRegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
        {
            ++regionsInvalidatedEventCount;

            var invalidatedRegions = args.InvalidatedRegions;

            regionsInvalidatedCount += invalidatedRegions.Count();

            status.Text = string.Format("{0} RegionsInvalidated events, {1} total regions invalidated", regionsInvalidatedEventCount, regionsInvalidatedCount);

            foreach (var region in invalidatedRegions)
            {
                DrawRegion(sender, region);
            }
        }
        private void RecreateCanvas()
        {
            if (contentControl == null)
            {
                return;
            }

            if (canvasControl != null)
            {
                ReleaseCanvas();
            }

            contentControl.Content = canvasControl = new CanvasVirtualControl();

            InitializeCanvas();
        }
Beispiel #30
0
        async Task Canvas_CreateResourcesAsync(CanvasVirtualControl sender)
        {
            mandelbrotEffect = new PixelShaderEffect(await Utils.ReadAllBytes("Shaders/Mandelbrot.bin"));

            // The Mandelbrot pixel shader outputs grayscale values. To make the result more interesting,
            // we run it through a TableTransferEffect. This applies a color gradient that goes from black
            // through blue, cyan, green, yellow, red, magenta, blue again, and finally back toward cyan.

            colorizeEffect = new TableTransferEffect
            {
                Source = mandelbrotEffect,

                RedTable   = new float[] { 0, 0, 0, 0, 1, 1, 0.67f, 0, 0    },
                GreenTable = new float[] { 0, 0, 1, 1, 1, 0, 0,     0, 0.5f },
                BlueTable  = new float[] { 0, 1, 1, 0, 0, 0, 1,     1, 1    },
            };
        }
        async Task Canvas_CreateResourcesAsync(CanvasVirtualControl sender)
        {
            mandelbrotEffect = new PixelShaderEffect(await Utils.ReadAllBytes("Shaders/Mandelbrot.bin"));

            // The Mandelbrot pixel shader outputs grayscale values. To make the result more interesting,
            // we run it through a TableTransferEffect. This applies a color gradient that goes from black
            // through blue, cyan, green, yellow, red, magenta, blue again, and finally back toward cyan.

            colorizeEffect = new TableTransferEffect
            {
                Source = mandelbrotEffect,

                RedTable   = new float[] { 0, 0, 0, 0, 1, 1, 0.67f, 0, 0 },
                GreenTable = new float[] { 0, 0, 1, 1, 1, 0, 0, 0, 0.5f },
                BlueTable  = new float[] { 0, 1, 1, 0, 0, 0, 1, 1, 1 },
            };
        }
Beispiel #32
0
        //初始化
        public static void Initialize(CanvasVirtualControl sender, int width, int height)
        {
            App.GrayWhiteGrid = App.GrayWhite(sender, width, height);//灰白网格
            //主渲染目标
            App.Model.MainRenderTarget = new CanvasRenderTarget(sender, width, height, 96);
            //选区渲染目标
            App.Model.MaskRenderTarget = new CanvasRenderTarget(sender, width, height);

            //空白渲染目标
            App.Model.NullRenderTarget = new CanvasRenderTarget(sender, width, height);

            //第二页渲染目标(上下)
            App.Model.SecondSourceRenderTarget = new CanvasRenderTarget(sender, width, height);
            App.Model.SecondTopRenderTarget    = new CanvasRenderTarget(sender, width, height);
            App.Model.SecondBottomRenderTarget = new CanvasRenderTarget(sender, width, height);

            App.Model.isAnimated = false;
        }
        void Canvas_RegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
        {
            // Configure the Mandelbrot effect to position and scale its output.
            const float baseScale = 0.005f;
            float       scale     = baseScale * 96 / sender.Dpi;
            Vector2     translate = baseScale * sender.Size.ToVector2() * new Vector2(-0.75f, -0.5f);

            mandelbrotEffect.Properties["scale"]     = scale;
            mandelbrotEffect.Properties["translate"] = translate;

            // Draw the effect to whatever regions of the CanvasVirtualControl have been invalidated.
            foreach (var region in args.InvalidatedRegions)
            {
                using (var drawingSession = sender.CreateDrawingSession(region))
                {
                    drawingSession.DrawImage(colorizeEffect);
                }
            }
        }
        private void DrawRegion(CanvasVirtualControl sender, Rect region)
        {
            var tryPanningOrZoomingLayout = new CanvasTextLayout(sender, "Try panning or zooming.", format, 500, 0);

            var infoLayout = new CanvasTextLayout(sender,
                                                  "In this demo, each time a region is updated, it is cleared to a different background color.  " +
                                                  "This is to make it possible to see which regions get redrawn.",
                                                  format, 500, 0);

            var youMadeIt = new CanvasTextLayout(sender,
                                                 "You made it to the end!", endFormat, 1000, 0);

            using (var ds = sender.CreateDrawingSession(region))
            {
                ds.Clear(NextColor());

                var left   = ((int)(region.X / gridSize) - 1) * gridSize;
                var top    = ((int)(region.Y / gridSize) - 1) * gridSize;
                var right  = ((int)((region.X + region.Width) / gridSize) + 1) * gridSize;
                var bottom = ((int)((region.Y + region.Height) / gridSize) + 1) * gridSize;

                for (var x = left; x <= right; x += gridSize)
                {
                    for (var y = top; y <= bottom; y += gridSize)
                    {
                        var pos = new Vector2((float)x, (float)y);
                        ds.DrawCircle(pos, 50, Colors.Black, 6);
                        ds.DrawCircle(pos, 50, Colors.White, 4);

                        ds.DrawText(string.Format("{0}\n{1}", x, y), pos, Colors.DarkBlue, coordFormat);
                    }
                }

                if (!ThumbnailGenerator.IsDrawingThumbnail)
                {
                    DrawTextWithBackground(ds, tryPanningOrZoomingLayout, gridSize / 2, gridSize / 2);
                    DrawTextWithBackground(ds, infoLayout, gridSize * 3.5, gridSize * 5.5);
                    DrawTextWithBackground(ds, youMadeIt, sender.ActualWidth - youMadeIt.RequestedSize.Width, sender.ActualHeight - youMadeIt.RequestedSize.Height);
                }
            }
        }
        private void DrawRegion(CanvasVirtualControl sender, Rect region)
        {
            var tryPanningOrZoomingLayout = new CanvasTextLayout(sender, "Try panning or zooming.", format, 500, 0);

            var infoLayout = new CanvasTextLayout(sender,
                "In this demo, each time a region is updated, it is cleared to a different background color.  " +
                "This is to make it possible to see which regions get redrawn.",
                format, 500, 0);
            
            var youMadeIt = new CanvasTextLayout(sender,
                "You made it to the end!", endFormat, 1000, 0);

            using (var ds = sender.CreateDrawingSession(region))
            {
                ds.Clear(NextColor());

                var left = ((int)(region.X / gridSize) - 1) * gridSize;
                var top = ((int)(region.Y / gridSize) - 1) * gridSize;
                var right = ((int)((region.X + region.Width) / gridSize) + 1) * gridSize;
                var bottom = ((int)((region.Y + region.Height) / gridSize) + 1) * gridSize;
                    
                for (var x = left; x <= right; x += gridSize)
                {
                    for (var y = top; y <= bottom; y += gridSize)
                    {
                        var pos = new Vector2((float)x, (float)y);
                        ds.DrawCircle(pos, 50, Colors.Black, 6);
                        ds.DrawCircle(pos, 50, Colors.White, 4);

                        ds.DrawText(string.Format("{0}\n{1}", x, y), pos, Colors.DarkBlue, coordFormat);
                    }
                }

                if (!ThumbnailGenerator.IsDrawingThumbnail)
                {
                    DrawTextWithBackground(ds, tryPanningOrZoomingLayout, gridSize / 2, gridSize / 2);
                    DrawTextWithBackground(ds, infoLayout, gridSize * 3.5, gridSize * 5.5);
                    DrawTextWithBackground(ds, youMadeIt, sender.ActualWidth - youMadeIt.RequestedSize.Width, sender.ActualHeight - youMadeIt.RequestedSize.Height);
                }
            }
        }
        private CanvasGeometry CreateCanvasGeometry(CanvasVirtualControl device)
        {
            switch (GeometryType)
            {
            case GeometryType.Rectangle:
                return(CanvasGeometry.CreateRectangle(device, (float)Points[0].X, (float)Points[0].Y,
                                                      (float)MapController.Instance.MousePosition.X - (float)Points[0].X, (float)MapController.Instance.MousePosition.Y - (float)Points[0].Y));

            case GeometryType.Line:
                CanvasPathBuilder pathBuilder = new CanvasPathBuilder(device);
                pathBuilder.SetSegmentOptions(CanvasFigureSegmentOptions.ForceRoundLineJoin);
                pathBuilder.BeginFigure((float)Points[0].X, (float)Points[0].Y);
                pathBuilder.AddLine(new Vector2((float)MapController.Instance.MousePosition.X, (float)MapController.Instance.MousePosition.Y));
                pathBuilder.EndFigure(CanvasFigureLoop.Open);
                return(CanvasGeometry.CreatePath(pathBuilder));

            case GeometryType.Circle:
                return(CanvasGeometry.CreateCircle(device, new Vector2((float)Points[0].X, (float)Points[0].Y), GetSegmentLength.CalculateSegmentLength(Points[0], MapController.Instance.MousePosition)));
            }
            return(null);
        }
Beispiel #37
0
        void Canvas_RegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
        {
            // Configure the Mandelbrot effect to position and scale its output. 
            const float baseScale = 0.005f;
            float scale = baseScale * 96 / sender.Dpi;
            Vector2 translate = baseScale * sender.Size.ToVector2() * new Vector2(-0.75f, -0.5f);

            mandelbrotEffect.Properties["scale"] = scale;
#if WINDOWS_UWP
            mandelbrotEffect.Properties["translate"] = translate;
#else
            mandelbrotEffect.Properties["translate"] = (Microsoft.Graphics.Canvas.Numerics.Vector2)translate;
#endif

            // Draw the effect to whatever regions of the CanvasVirtualControl have been invalidated.
            foreach (var region in args.InvalidatedRegions)
            {
                using (var drawingSession = sender.CreateDrawingSession(region))
                {
                    drawingSession.DrawImage(colorizeEffect);
                }
            }
        }
Beispiel #38
0
 private async void CanvasCreateResources(CanvasVirtualControl sender, CanvasCreateResourcesEventArgs args)
 {
     // create back buffer
     _buffer = CanvasRenderTargetExtension.CreateEmpty(sender, new Size(CanvasWidth, CanvasHeight));
     _tmpBuffer = CanvasRenderTargetExtension.CreateEmpty(sender, new Size(CanvasWidth, CanvasHeight));
     // create default layer
     AddLayer();
     _background = await CanvasBitmap.LoadAsync(sender, new Uri("ms-appx:///PaintCanvas/Assets/canvas.png"));
     _canvas.Invalidate();
     Win2dInitialized?.Invoke(this, EventArgs.Empty);
 }
 private void ImageVirtualControl_CreateResources(CanvasVirtualControl sender, Microsoft.Graphics.Canvas.UI.CanvasCreateResourcesEventArgs args)
 {
     if (imageStream != null)
     {
         args.TrackAsyncAction(LoadVirtualBitmap().AsAsyncAction());
     }
 }
 private void VirtualCanvasOnRegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
 {
     if (cachedMap != null && ControlCallback != null)
     {
         ITextRender2VirtualRenderer renderer = new Direct2DTextRender2Renderer(ControlCallback);
         foreach (var r in args.InvalidatedRegions)
         {
             using (var session = sender.CreateDrawingSession(r))
             {
                 session.DrawRectangle(r, Colors.Black);
                 renderer.Render(cachedMap, session, r);
             }
         }
     }
 }
Beispiel #41
0
 private void ThisUnloaded(object sender, RoutedEventArgs e)
 {
     _canvas?.RemoveFromVisualTree();
     _canvas = null;
     // dispose buffers
     _buffer.Dispose();
     _tmpBuffer.Dispose();
     _background.Dispose();
     foreach (var buffer in _undoBuffer)
     {
         buffer.Value.Dispose();
     }
     foreach (var buffer in _redoBuffer)
     {
         buffer.Value.Dispose();
     }
     foreach (var layer in _layers)
     {
         layer.Image.Dispose();
     }
     _undoBuffer.Clear();
     _redoBuffer.Clear();
     _layers.Clear();
     _buffer = null;
     _tmpBuffer = null;
     _background = null;
 }
Beispiel #42
0
 private void _canvas_RegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
 {
     using (var ds = sender.CreateDrawingSession(args.VisibleRegion))
     {
         DrawFrame(ds);
     }
 }
Beispiel #43
0
 protected override void OnApplyTemplate()
 {
     _canvas = (CanvasVirtualControl)GetTemplateChild("PART_canvas");
     _canvas.ManipulationMode = CanScrollable ? ManipulationModes.System : ManipulationModes.None;
     _canvas.CreateResources += CanvasCreateResources;
     _canvas.SizeChanged += CanvasSizeChanged;
     _canvas.RegionsInvalidated += _canvas_RegionsInvalidated;
     _canvas.PointerPressed += CanvasPointerPressed;
     _canvas.PointerMoved += CanvasPointerMoved;
     _canvas.PointerReleased += CanvasPointerReleased;
     _canvas.PointerCanceled += CanvasPointerReleased;
     _canvas.PointerCaptureLost += CanvasPointerReleased;
     //
     _scrollViewer = (ScrollViewer)GetTemplateChild("PART_ScrollViewer");
     _scrollViewer.HorizontalScrollBarVisibility = _scrollViewer.VerticalScrollBarVisibility =
         CanScrollable ? ScrollBarVisibility.Auto : ScrollBarVisibility.Hidden;
     _scrollViewer.HorizontalScrollMode = _scrollViewer.VerticalScrollMode =
         CanScrollable ? ScrollMode.Auto : ScrollMode.Disabled;
 }