コード例 #1
0
        /// <summary>
        ///     Applies pixels from preview layer to selected layer.
        /// </summary>
        public void ApplyPreviewLayer()
        {
            if (previewLayerChanges == null)
            {
                return;
            }

            Layer[] layers = new Layer[previewLayerChanges.Count];

            for (int i = 0; i < layers.Length; i++)
            {
                layers[i] = Manager.ActiveDocument.Layers.First(x => x.LayerGuid == previewLayerChanges[i].LayerGuid);
            }

            if (layers.Length > 0)
            {
                IEnumerable <LayerChange> oldValues =
                    ApplyToLayers(layers, previewLayerChanges.ToArray());

                foreach (var oldValue in oldValues)
                {
                    var previewChanges = previewLayerChanges.First(x => x.LayerGuid == oldValue.LayerGuid);

                    BitmapChanged?.Invoke(this, new BitmapChangedEventArgs(
                                              previewChanges.PixelChanges,
                                              oldValue.PixelChanges,
                                              previewChanges.LayerGuid));
                }

                Manager.ActiveDocument.GeneratePreviewLayer();
            }

            previewLayerChanges = null;
        }
コード例 #2
0
        private void UseTool(List <Coordinates> mouseMoveCords, BitmapOperationTool tool, Color color)
        {
            if (Keyboard.IsKeyDown(Key.LeftShift) && !MouseCordsNotInLine(mouseMoveCords))
            {
                mouseMoveCords = GetSquareCoordiantes(mouseMoveCords);
            }

            if (!tool.RequiresPreviewLayer)
            {
                LayerChange[] modifiedLayers  = tool.Use(Manager.ActiveLayer, mouseMoveCords.ToArray(), color);
                LayerChange[] oldPixelsValues = new LayerChange[modifiedLayers.Length];
                for (int i = 0; i < modifiedLayers.Length; i++)
                {
                    Layer layer = Manager.ActiveDocument.Layers.First(x => x.LayerGuid == modifiedLayers[i].LayerGuid);
                    oldPixelsValues[i] = ApplyToLayer(layer, modifiedLayers[i]);

                    BitmapChanged?.Invoke(this, new BitmapChangedEventArgs(
                                              modifiedLayers[i].PixelChanges,
                                              oldPixelsValues[i].PixelChanges,
                                              modifiedLayers[i].LayerGuid));
                }
            }
            else
            {
                UseToolOnPreviewLayer(mouseMoveCords, tool.ClearPreviewLayerOnEachIteration);
            }
        }
コード例 #3
0
        /// <summary>
        ///     Applies pixels from preview layer to selected layer.
        /// </summary>
        public void ApplyPreviewLayer()
        {
            if (previewLayerChanges == null)
            {
                return;
            }

            foreach (var modifiedLayer in previewLayerChanges)
            {
                Layer layer = Manager.ActiveDocument.Layers.FirstOrDefault(x => x.LayerGuid == modifiedLayer.LayerGuid);

                if (layer != null)
                {
                    BitmapPixelChanges oldValues = ApplyToLayer(layer, modifiedLayer).PixelChanges;

                    BitmapChanged?.Invoke(this, new BitmapChangedEventArgs(
                                              modifiedLayer.PixelChanges,
                                              oldValues,
                                              modifiedLayer.LayerGuid));
                    Manager.ActiveDocument.GeneratePreviewLayer();
                }
            }

            previewLayerChanges = null;
        }
コード例 #4
0
        /// <summary>
        ///     Applies pixels from preview layer to selected layer
        /// </summary>
        public void StopAction()
        {
            if (_lastModifiedLayers == null)
            {
                return;
            }
            for (int i = 0; i < _lastModifiedLayers.Length; i++)
            {
                var layer = Manager.ActiveDocument.Layers[_lastModifiedLayers[i].LayerIndex];

                BitmapPixelChanges oldValues = ApplyToLayer(layer, _lastModifiedLayers[i]).PixelChanges;

                BitmapChanged?.Invoke(this, new BitmapChangedEventArgs(_lastModifiedLayers[i].PixelChanges,
                                                                       oldValues, _lastModifiedLayers[i].LayerIndex));
                Manager.PreviewLayer = null;
            }
        }
コード例 #5
0
        public void UseTool(IReadOnlyList <Coordinates> recordedMouseMovement, BitmapOperationTool tool, SKColor color)
        {
            if (Manager.ActiveDocument.Layers.Count == 0)
            {
                return;
            }

            if (!tool.RequiresPreviewLayer)
            {
                tool.Use(Manager.ActiveLayer, null, Manager.ActiveDocument.Layers, recordedMouseMovement, color);
                BitmapChanged?.Invoke(this, null);
            }
            else
            {
                UseToolOnPreviewLayer(recordedMouseMovement, tool.ClearPreviewLayerOnEachIteration);
            }
        }
コード例 #6
0
        private void UseTool(List <Coordinates> mouseMoveCords, BitmapOperationTool tool, Color color)
        {
            if (sizeSetting == null)
            {
                sizeSetting = tool.Toolbar.GetSetting <SizeSetting>("ToolSize");
            }

            int thickness = sizeSetting != null ? sizeSetting.Value : 1;

            bool shiftDown = Keyboard.IsKeyDown(Key.LeftShift);

            if (shiftDown && tool.UsesShift)
            {
                bool mouseInLine = MouseCordsNotInLine(mouseMoveCords, thickness);

                if (!mouseInLine)
                {
                    mouseMoveCords = GetSquareCoordiantes(mouseMoveCords);
                }
                else
                {
                    mouseMoveCords = GetLineCoordinates(mouseMoveCords, thickness);
                }
            }

            if (!tool.RequiresPreviewLayer)
            {
                LayerChange[] modifiedLayers  = tool.Use(Manager.ActiveLayer, mouseMoveCords, color);
                LayerChange[] oldPixelsValues = new LayerChange[modifiedLayers.Length];
                for (int i = 0; i < modifiedLayers.Length; i++)
                {
                    Layer layer = Manager.ActiveDocument.Layers.First(x => x.LayerGuid == modifiedLayers[i].LayerGuid);
                    oldPixelsValues[i] = ApplyToLayer(layer, modifiedLayers[i]);

                    BitmapChanged?.Invoke(this, new BitmapChangedEventArgs(
                                              modifiedLayers[i].PixelChanges,
                                              oldPixelsValues[i].PixelChanges,
                                              modifiedLayers[i].LayerGuid));
                }
            }
            else
            {
                UseToolOnPreviewLayer(mouseMoveCords, tool.ClearPreviewLayerOnEachIteration);
            }
        }
コード例 #7
0
        /// <summary>
        ///     Applies pixels from preview layer to selected layer.
        /// </summary>
        public void ApplyPreviewLayer()
        {
            var previewLayer = Manager.ActiveDocument.PreviewLayer;
            var activeLayer  = Manager.ActiveLayer;

            Int32Rect dirtyRect = new Int32Rect(previewLayer.OffsetX, previewLayer.OffsetY, previewLayer.Width, previewLayer.Height);

            activeLayer.DynamicResizeAbsolute(dirtyRect);
            previewLayer.LayerBitmap.SkiaSurface.Draw(
                activeLayer.LayerBitmap.SkiaSurface.Canvas,
                previewLayer.OffsetX - activeLayer.OffsetX,
                previewLayer.OffsetY - activeLayer.OffsetY,
                Surface.BlendingPaint
                );

            Manager.ActiveLayer.InvokeLayerBitmapChange(dirtyRect);
            BitmapChanged?.Invoke(this, null);
        }