Browse Source

Color picker works

Frytek 5 years ago
parent
commit
0086ce5872

+ 1 - 1
PixiEditor/Models/Controllers/BitmapOperationsUtility.cs

@@ -84,7 +84,7 @@ namespace PixiEditor.Models.Controllers
 
 
         private void Controller_MousePositionChanged(object sender, MouseMovementEventArgs e)
         private void Controller_MousePositionChanged(object sender, MouseMovementEventArgs e)
         {
         {
-            if(SelectedTool != null && Mouse.LeftButton == MouseButtonState.Pressed)
+            if(SelectedTool != null && SelectedTool.ToolType != ToolType.None && Mouse.LeftButton == MouseButtonState.Pressed)
             {
             {
                 var mouseMove = MouseController.LastMouseMoveCoordinates.ToList();
                 var mouseMove = MouseController.LastMouseMoveCoordinates.ToList();
                 mouseMove.Reverse();
                 mouseMove.Reverse();

+ 11 - 0
PixiEditor/Models/Position/MousePositionConverter.cs

@@ -1,4 +1,5 @@
 using PixiEditor.Models.Layers;
 using PixiEditor.Models.Layers;
+using System.Runtime.InteropServices;
 using System.Windows;
 using System.Windows;
 
 
 namespace PixiEditor.Models.Position
 namespace PixiEditor.Models.Position
@@ -13,5 +14,15 @@ namespace PixiEditor.Models.Position
             int yCoord = (int)(mousePosition.Y / baseLayer.Height);
             int yCoord = (int)(mousePosition.Y / baseLayer.Height);
             return new Coordinates(xCoord, yCoord);
             return new Coordinates(xCoord, yCoord);
         }
         }
+
+        [DllImport("user32.dll")]
+        private static extern bool GetCursorPos(out System.Drawing.Point point);
+        
+        public static System.Drawing.Point GetCursorPosition()
+        {
+            System.Drawing.Point point;
+            GetCursorPos(out point);
+            return point;
+        }
     }
     }
 }
 }

+ 1 - 1
PixiEditor/Models/Tools/ToolType.cs

@@ -8,6 +8,6 @@ namespace PixiEditor.Models.Tools
 {
 {
     public enum ToolType
     public enum ToolType
     {
     {
-        Pen = 0, Bucket, Line, Circle, Rectangle, ColorPicker, Earser, Brightness
+        None, Pen, Bucket, Line, Circle, Rectangle, Earser, Brightness, ColorPicker
     }
     }
 }
 }

+ 20 - 15
PixiEditor/ViewModels/ViewModelMain.cs

@@ -3,20 +3,14 @@ using PixiEditor.Models.Enums;
 using PixiEditor.Models.Tools;
 using PixiEditor.Models.Tools;
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Drawing.Drawing2D;
-using System.Linq;
 using System.Windows;
 using System.Windows;
-using System.Windows.Controls;
 using System.Windows.Input;
 using System.Windows.Input;
 using System.Windows.Media;
 using System.Windows.Media;
 using System.Windows.Media.Imaging;
 using System.Windows.Media.Imaging;
 using PixiTools = PixiEditor.Models.Tools.Tools;
 using PixiTools = PixiEditor.Models.Tools.Tools;
 using PixiEditor.Models.Controllers;
 using PixiEditor.Models.Controllers;
 using PixiEditor.Models.Dialogs;
 using PixiEditor.Models.Dialogs;
-using PixiEditor.Models.Images;
 using PixiEditor.Models.IO;
 using PixiEditor.Models.IO;
-using PixiEditor.Models.Layers;
 using PixiEditor.Models.Position;
 using PixiEditor.Models.Position;
 using PixiEditor.Models.DataHolders;
 using PixiEditor.Models.DataHolders;
 
 
@@ -235,10 +229,17 @@ namespace PixiEditor.ViewModels
 
 
         private void MouseDown(object parameter)
         private void MouseDown(object parameter)
         {
         {
-            if (!BitmapUtility.MouseController.IsRecordingChanges)
+            if(SelectedTool == ToolType.ColorPicker)
             {
             {
-                BitmapUtility.MouseController.StartRecordingMouseMovementChanges();
-                BitmapUtility.MouseController.RecordMouseMovementChange(MousePositionConverter.CurrentCoordinates);
+                ExecuteColorPicker();
+            }
+            else if(Mouse.LeftButton == MouseButtonState.Pressed)
+            {
+                if (!BitmapUtility.MouseController.IsRecordingChanges)
+                {
+                    BitmapUtility.MouseController.StartRecordingMouseMovementChanges();
+                    BitmapUtility.MouseController.RecordMouseMovementChange(MousePositionConverter.CurrentCoordinates);
+                }
             }
             }
         }
         }
 
 
@@ -259,15 +260,19 @@ namespace PixiEditor.ViewModels
 
 
 
 
 
 
-        private void ExecuteColorPicker(Coordinates cords)
+        private void ExecuteColorPicker()
         {
         {
             if (Mouse.LeftButton == MouseButtonState.Pressed)
             if (Mouse.LeftButton == MouseButtonState.Pressed)
             {
             {
-                PrimaryColor = BitmapUtility.ActiveLayer.LayerBitmap.GetPixel(cords.X, cords.Y);
-            }
-            else
-            {
-                SecondaryColor = BitmapUtility.ActiveLayer.LayerBitmap.GetPixel(cords.X, cords.Y);
+                using (var bitmap = new System.Drawing.Bitmap(1, 1))
+                {
+                    using (var graphics = System.Drawing.Graphics.FromImage(bitmap))
+                    {
+                        graphics.CopyFromScreen(MousePositionConverter.GetCursorPosition(), new System.Drawing.Point(0, 0), new System.Drawing.Size(1, 1));
+                    }
+                    var color = bitmap.GetPixel(0, 0);
+                    PrimaryColor = Color.FromArgb(color.A, color.R, color.G, color.B);
+                }
             }
             }
         }
         }