Advertisement
alien_fx_fiend

Simple Drawing App *FINAL RELEASE !*

Oct 22nd, 2024 (edited)
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 126.37 KB | Source Code | 0 0
  1. ==++Resources Additional Files++==
  2. Graph.jpg ================= https://www.dropbox.com/scl/fi/tua1061dob9ppjafam19h/graph.jpg?rlkey=pmk287josspq6v3sxuk8pygtc&dl=1
  3. intelcpu_hardware_7155.ico ================= https://www.dropbox.com/scl/fi/svfby9h7xwkylat8ijjhm/intelcpu_hardware_7155.ico?rlkey=o461swa5tyzyct273z7b55hk7&dl=1
  4. Shell32 Icons Pack ================= https://www.urtech.ca/2022/07/solved-download-list-of-icons-in-shell32-dll/
  5.  
  6. ==++"Form1.cs" File 1/2 SourceCode::++==
  7. using System;
  8. using System.Collections.Generic;
  9. using System.ComponentModel;
  10. using System.Data;
  11. using System.Drawing;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using System.Windows.Forms;
  16. using System.IO;
  17. using System.Runtime.InteropServices;
  18.  
  19. namespace Simple_Drawing_Application
  20. {
  21.     public partial class Form1 : Form
  22.     {
  23.         private Dictionary<string, object> brushSettings = new Dictionary<string, object>();
  24.         private const string ColorKey = "Color";
  25.         private const string WidthKey = "Width";
  26.         private int storedEraserSize; // Add this line at the class level
  27.         //private Dictionary<string, object> brushSettings = new Dictionary<string, object>();
  28.         //Bards Fixes: (not drawing properly (fixed by ChatGPT) but Form1_Load relocated code + Load Image works normally now Clear still doesn't work but oh well
  29.         private Bitmap drawingLayer;
  30.         private Stack<Bitmap> undoStack = new Stack<Bitmap>();
  31.         private Stack<Bitmap> redoStack = new Stack<Bitmap>();
  32.         //private List<Bitmap> undoList = new List<Bitmap>();
  33.         //private List<Bitmap> redoList = new List<Bitmap>();
  34.         public Point end = new Point();
  35.         public Point start = new Point();
  36.         public Pen p;
  37.         bool draw = false;
  38.         string color;
  39.         Graphics graphics;
  40.         Bitmap bmp;
  41.         bool isEraserActive = false; //(start bard #2 line)
  42.         private SolidBrush brush; // Declare the brush variable //(start bard test #12 line)
  43.         // Add a new variable to store the eraser size
  44.         int eraserSize = 26; //50        
  45.         //Image backgroundImage3;
  46.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  47. Start #1 Silhouette
  48. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  49.         private Bitmap brushSilhouette;
  50.         private Bitmap eraserSilhouette;
  51.         private bool canvasDirty = false;
  52.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  53.         End #1 Silhouette
  54.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  55.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  56. Start #25 Silhouette adding persistent values (disabling Silhouette and persistent code)
  57. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  58.         //private string storedPenColor;
  59.         //private float storedPenWidth;
  60.         //private int storedEraserSize;
  61.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  62.         End #25 Silhouette adding persistent values
  63.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  64.  
  65.         public Form1()
  66.         {
  67.             InitializeComponent();
  68.             GenerateVariables();
  69.         }
  70.  
  71.         private void Form1_Load(object sender, EventArgs e)
  72.         {
  73.             Image backgroundImage3 = Houdini.Properties.Resources.graph;
  74.             //drawingLayer = new Bitmap(pb_canvas.Width, pb_canvas.Height); //from generatevariables func 4pm 11th Jan 24 temporary
  75.             //Graphics.FromImage(drawingLayer).Clear(Color.Transparent); //from generatevariables func 4pm 11th Jan 24 temporary
  76.             pb_canvas.BackgroundImage = backgroundImage3; // Set as background image
  77.             pb_canvas.BackgroundImageLayout = ImageLayout.Tile;
  78.             // Create the drawing layer only once here
  79.             drawingLayer = new Bitmap(pb_canvas.Width, pb_canvas.Height);
  80.             if (backgroundImage3 != null)
  81.             {
  82.                 int tileWidth = backgroundImage3.Width;
  83.                 int tileHeight = backgroundImage3.Height;
  84.                 for (int x = 0; x < pb_canvas.Width; x += tileWidth)
  85.                 {
  86.                     for (int y = 0; y < pb_canvas.Height; y += tileHeight)
  87.                     {
  88.                         pb_canvas.CreateGraphics().DrawImage(backgroundImage3, new Point(x, y));
  89.                     }
  90.                 }
  91.             }
  92.             /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  93. Start #12 Silhouette (disabling Silhouette and persistent code)
  94. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  95.             brushSilhouette = null;
  96.             eraserSilhouette = null;
  97.             /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  98.             End #12 Silhouette
  99.             .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  100.             GenerateVariables();
  101.         }
  102.  
  103.         private void Form1_Resize(object sender, EventArgs e)
  104.         {
  105.             // Ensure the form doesn't cover the entire screen
  106.             int maxFormWidth = Screen.PrimaryScreen.WorkingArea.Width;
  107.             int maxFormHeight = Screen.PrimaryScreen.WorkingArea.Height;
  108.             this.MaximumSize = new Size(maxFormWidth, maxFormHeight);
  109.  
  110.             // Adjust the size of the canvas
  111.             pb_canvas.Size = new Size(this.ClientSize.Width, this.ClientSize.Height - menuStrip1.Height);
  112.             //crash fix gpt says to disable below:
  113.             //drawingLayer = new Bitmap(pb_canvas.Width, pb_canvas.Height);
  114.  
  115.             //delete if unnecessary
  116.             //original scripts below vv last change to fix Always to Top glitch
  117.             // Adjust the size of pb_canvas to fill the form's client area Formsize= 1362,767
  118.             //pb_canvas.Size = new Size(this.ClientSize.Width, this.ClientSize.Height - menuStrip1.Height);
  119.  
  120.             // Check if drawingLayer is already created
  121.             if (drawingLayer != null)
  122.             {
  123.                 try
  124.                 {
  125.                     Bitmap newDrawingLayer = new Bitmap(pb_canvas.Width, pb_canvas.Height);
  126.                     using (Graphics g = Graphics.FromImage(newDrawingLayer))
  127.                     {
  128.                         g.DrawImage(drawingLayer, Point.Empty);
  129.                     }
  130.  
  131.                     drawingLayer = newDrawingLayer;
  132.                 }
  133.                 catch (ArgumentException ex)
  134.                 {
  135.                     // Handle the exception (optional)
  136.                     Console.WriteLine($"Error during resize: {ex.Message}");
  137.                 }
  138.             }
  139.         }
  140.  
  141.         void GenerateVariables()
  142.         {
  143.             // Enable double buffering
  144.             this.DoubleBuffered = true;
  145.  
  146.             //drawingLayer = new Bitmap(pb_canvas.Width, pb_canvas.Height); disabled temporarily for Bard 4pm 11th Jan 24
  147.             //backgroundLayer = new Bitmap(pb_canvas.Width, pb_canvas.Height); // Initialize background layer //(start bard #7 line)
  148.             //Graphics.FromImage(drawingLayer).Clear(Color.Transparent); disabled temporarily for Bard 4pm 11th Jan 24
  149.  
  150.             //start file-path based#1
  151.             //string imagePath = "D:\\Download\\cpp-projekt\\Simple Drawing App\\graph.jpg";
  152.             // Check if the file exists
  153.             //if (File.Exists(imagePath))
  154.             //{
  155.             // Load the image
  156.             //Image backgroundImage2 = Image.FromFile(imagePath);
  157.             //end file-path based#1
  158.  
  159.             //start embedded-path based#1
  160.             //string imagePath2 = "graph";
  161.             // Check if the file exists "Simple_Drawing_Application.Images.graph.jpg";
  162.             //if (File.Exists(imagePath2))
  163.             //{
  164.             // Load the image from embedded resource
  165.             //Stream imageStream = GetType().Assembly.GetManifestResourceStream(imagePath2);
  166.             //Image backgroundImage3 = Image.FromStream(imageStream);
  167.             //end embedded-path based#1
  168.  
  169.             //Image backgroundImage3 = Houdini.Properties.Resources.graph; disabled temporarily for Bard 4pm 11th Jan 24
  170.  
  171.             // Set the background image and enable tiling
  172.             //pb_canvas.BackgroundImage = backgroundImage3; disabled temporarily for Bard 4pm 11th Jan 24
  173.             //pb_canvas.BackgroundImageLayout = ImageLayout.Tile; disabled temporarily for Bard 4pm 11th Jan 24
  174.             //}
  175.             //else
  176.             //{
  177.             //MessageBox.Show("Image file not found.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  178.             //}
  179.  
  180.  
  181.             // Load the tiled background image
  182.             //Stream imageStream = GetType().Assembly.GetManifestResourceStream("pb_canvas.BackgroundImage");
  183.             //Image backgroundImage = Image.FromStream(imageStream);
  184.  
  185.             // Set the background image to be tiled
  186.             //pb_canvas.BackgroundImage = backgroundImage;
  187.             // Get the friendly name for the color if available, otherwise use the hex value
  188.  
  189.             string friendlyColorName = Color.FromName(pb_canvas.BackColor.Name).IsKnownColor
  190.                 ? pb_canvas.BackColor.Name
  191.                 : $"#{pb_canvas.BackColor.R:X2}{pb_canvas.BackColor.G:X2}{pb_canvas.BackColor.B:X2}";
  192.             //graphics = pb_canvas.CreateGraphics(); //bard disabled temporarily from func 4pm 11th Jan 24 temp
  193.             // Initialize the pen with a default size
  194.             // You can adjust the color and size as needed
  195.             p = new Pen(Color.Red, 14);
  196.             p.StartCap = p.EndCap = System.Drawing.Drawing2D.LineCap.Round; // Set line cap to round
  197.             p.LineJoin = System.Drawing.Drawing2D.LineJoin.Round; // Set line join to round
  198.             comboBox1.Text = "12";
  199.             color = "#FF8040"; //#FF0000 (Red replaced /w pale Orange)
  200.             //txt_color.Text = color;
  201.             // Set the initial background color and display hex color
  202.             // Set your default background color
  203.             //pb_canvas.BackColor = Color.Black; //bard disabled temporarily from func 4pm 11th Jan 24 temp
  204.             selectBGToolStripMenuItem.Text = $"Select Background ({friendlyColorName})";
  205.             //selectBGToolStripMenuItem.Text = $"Select BG ({ColorToHex(Color.Black)})";
  206.             // Set the tiled background
  207.             //SetTiledBackground();
  208.             // Update the pen color and size dynamically based on the initial values
  209.             UpdatePen();
  210.             // Update font color dynamically
  211.             UpdateFontColor();
  212.  
  213.             // Attach the Resize event handler
  214.             this.Resize += new EventHandler(Form1_Resize);
  215.             pb_canvas.Paint += new PaintEventHandler(pb_canvas_Paint); //bard disabled temporarily from func 4pm 11th Jan 24 temp
  216.             /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  217. Start #2 Silhouette
  218. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  219.             pb_canvas.MouseDown += new MouseEventHandler(pb_canvas_MouseDown); // Added event handler
  220.             pb_canvas.MouseMove += new MouseEventHandler(pb_canvas_MouseMove); // Added event handler
  221.             pb_canvas.MouseUp += new MouseEventHandler(pb_canvas_MouseUp); // Added event handler
  222.             pb_canvas.MouseLeave += new EventHandler(pb_canvas_MouseLeave); // Added event handler
  223.             //pb_canvas.Cursor = Cursors.Cross; // Set cursor to crosshair
  224.             pb_canvas.MouseEnter += new EventHandler(pb_canvas_MouseEnter);
  225.             // Add these lines where you initialize your menu items
  226.             undoToolStripMenuItem.ShortcutKeys = ((Keys)((Keys.Control | Keys.Z)));
  227.             redoToolStripMenuItem.ShortcutKeys = ((Keys)((Keys.Control | Keys.Y)));
  228.             loadImageToolStripMenuItem.ShortcutKeys = ((Keys)((Keys.Control | Keys.O)));
  229.             saveImageToolStripMenuItem.ShortcutKeys = ((Keys)((Keys.Control | Keys.S)));
  230.  
  231.             // Add these lines where you handle other menu items
  232.             undoToolStripMenuItem.Click += new EventHandler(undoToolStripMenuItem_Click);
  233.             redoToolStripMenuItem.Click += new EventHandler(redoToolStripMenuItem_Click);
  234.             /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  235.             End #2 Silhouette
  236.             .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  237.             // Initialize the canvas size
  238.             Form1_Resize(this, EventArgs.Empty);
  239.             // Initialize the Set Font Size menu item text
  240.             setFontSizeToolStripMenuItem.Text = $"Set Font Size ({p.Width})";
  241.             /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  242. Start #3 Silhouette (disabled)
  243. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  244.             // Generate brush silhouette
  245.             //brushSilhouette = GenerateBrushSilhouette(p.Width, color);
  246.  
  247.             // Generate eraser silhouette
  248.             //eraserSilhouette = GenerateEraserSilhouette(eraserSize);
  249.             /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  250.             End #3 Silhouette (disabled)
  251.             .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  252.             //CreateCanvas();
  253.         }
  254.  
  255.         private void pb_canvas_Paint(object sender, PaintEventArgs e)
  256.         {
  257.             e.Graphics.DrawImage(drawingLayer, Point.Empty);
  258.  
  259.             /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  260. Start #11 Silhouette
  261. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  262.             if (brushSilhouette != null && eraserSilhouette != null)
  263.             {
  264.                 // Create a temporary bitmap to draw the silhouette on.
  265.                 using (Bitmap tempLayer = new Bitmap(drawingLayer.Width, drawingLayer.Height))
  266.                 {
  267.                     using (Graphics g = Graphics.FromImage(tempLayer))
  268.                     {
  269.                         Point cursorPosition = pb_canvas.PointToClient(Cursor.Position);
  270.  
  271.                         // Draw the brush or eraser silhouette on the temporary layer.
  272.                         if (isEraserActive)
  273.                         {
  274.                             g.DrawImage(eraserSilhouette, cursorPosition.X - eraserSize / 2, cursorPosition.Y - eraserSize / 2);
  275.                         }
  276.                         else
  277.                         {
  278.                             g.DrawImage(brushSilhouette, cursorPosition.X - (int)p.Width / 2, cursorPosition.Y - (int)p.Width / 2);
  279.                         }
  280.                     }
  281.  
  282.                     // Draw the temporary layer on top of the existing drawing layer.
  283.                     e.Graphics.DrawImage(tempLayer, Point.Empty);
  284.                 }
  285.             }
  286.             /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  287.             End #11 Silhouette
  288.             .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  289.  
  290.  
  291.  
  292.             /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  293. Start #5 Silhouette (disabled)
  294. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  295.             /*// Draw brush silhouette
  296.             if (!isEraserActive)
  297.             {
  298.                 Point cursorPosition = pb_canvas.PointToClient(Cursor.Position);
  299.                 e.Graphics.DrawImage(brushSilhouette, cursorPosition.X - (int)p.Width / 2, cursorPosition.Y - (int)p.Width / 2);
  300.             }
  301.  
  302.             // Draw eraser silhouette
  303.             if (isEraserActive)
  304.             {
  305.                 Point cursorPosition = pb_canvas.PointToClient(Cursor.Position);
  306.                 e.Graphics.DrawImage(eraserSilhouette, cursorPosition.X - eraserSize / 2, cursorPosition.Y - eraserSize / 2);
  307.             }*/
  308.             /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  309.             End #5 Silhouette (disabled)
  310.             .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  311.  
  312.             /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  313. Start #6 Silhouette (disabled)
  314. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  315.             //e.Graphics.DrawImage(drawingLayer, Point.Empty); // Draw the contents of drawingLayer onto the canvas
  316.             /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  317.             End #6 Silhouette (disabled)
  318.             .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  319.  
  320.             /*if (pb_canvas.BackgroundImage != null)
  321.             {
  322.                 e.Graphics.DrawImage(pb_canvas.BackgroundImage, 0, 0, pb_canvas.Width, pb_canvas.Height);
  323.             }*/
  324.             /*if (pb_canvas.BackgroundImage != null)
  325.             {
  326.                 e.Graphics.DrawImage(pb_canvas.BackgroundImage, 0, 0, pb_canvas.Width, pb_canvas.Height);  // Scale background image to fit canvas
  327.             }
  328.             e.Graphics.DrawImage(drawingLayer, 0, 0);*/
  329.             // Draw the background image if it is set
  330.             /*if (pb_canvas.BackgroundImage != null)
  331.             {
  332.                 e.Graphics.DrawImage(pb_canvas.BackgroundImage, Point.Empty);
  333.             }*/
  334.             //(start bard test #8)
  335.             /*e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; // Enable anti-aliasing
  336.             // Draw the drawing layer on top
  337.             e.Graphics.DrawImage(drawingLayer, Point.Empty);*/
  338.             //(end bard test #8)
  339.         }
  340.  
  341.         //uncomment if fail
  342.         /*void CreateCanvas()
  343.         {
  344.             bmp = new Bitmap(pb_canvas.Width, pb_canvas.Height);
  345.  
  346.             using (Graphics g = Graphics.FromImage(bmp))
  347.             {
  348.                 // Draw the background image if it is set
  349.                 if (pb_canvas.BackgroundImage != null)
  350.                 {
  351.                     g.DrawImage(pb_canvas.BackgroundImage, Point.Empty);
  352.                 }
  353.             }
  354.  
  355.             pb_canvas.BackgroundImage = bmp;
  356.             pb_canvas.BackgroundImageLayout = ImageLayout.Tile;
  357.         }*/
  358.  
  359.         //old orig function test4new
  360.         /*void CreateCanvas() {
  361.             bmp = new Bitmap(pb_canvas.Width, pb_canvas.Height);
  362.             graphics = Graphics.FromImage(bmp);
  363.             pb_canvas.BackgroundImage = bmp;
  364.             pb_canvas.BackgroundImageLayout = ImageLayout.None;
  365.         }*/
  366.  
  367.         private void pb_canvas_MouseDown(object sender, MouseEventArgs e)
  368.         {
  369.             draw = true;
  370.             start = e.Location;
  371.             /*draw = true;
  372.  
  373.             start = e.Location;
  374.  
  375.             int size;
  376.  
  377.             if (comboBox1.Text == "")
  378.             {
  379.                 size = 8;
  380.             }
  381.             else
  382.             {
  383.                 size = Convert.ToInt32(comboBox1.Text);
  384.             }
  385.  
  386.             Color newColor = ColorTranslator.FromHtml(color);
  387.  
  388.             // Update the pen size here
  389.             p = new Pen(newColor, p.Width);
  390.  
  391.             p.SetLineCap(System.Drawing.Drawing2D.LineCap.Round, System.Drawing.Drawing2D.LineCap.Round, System.Drawing.Drawing2D.DashCap.Round);
  392.         }*/
  393.         }
  394.  
  395.         private void pb_canvas_MouseMove(object sender, MouseEventArgs e)
  396.         {
  397.             if (draw && e.Button == MouseButtons.Left)
  398.             {
  399.                 end = e.Location;
  400.                 using (Graphics g = Graphics.FromImage(drawingLayer))
  401.                 {
  402.                     g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  403.                     if (isEraserActive)
  404.                     {
  405.                         int radius = eraserSize / 2;
  406.                         RectangleF eraseRect = new RectangleF(end.X - radius, end.Y - radius, 2 * radius, 2 * radius);
  407.                         using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  408.                         {
  409.                             path.AddEllipse(eraseRect);
  410.                             g.SetClip(path);
  411.                             g.Clear(Color.Transparent);
  412.                             g.ResetClip();
  413.                         }
  414.                     }
  415.                     else
  416.                     {
  417.                         using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  418.                         {
  419.                             path.AddLine(start, end);
  420.                             g.DrawPath(p, path);
  421.                         }
  422.                     }
  423.                 }
  424.                 start = end;
  425.                 UpdateCanvas();
  426.                 canvasDirty = true; // Set the canvas dirty flag
  427.             }
  428.             else
  429.             {
  430.                 pb_canvas.Invalidate();
  431.             }
  432.         }
  433.  
  434.         /*if (draw && e.Button == MouseButtons.Left)
  435.         {
  436.             end = e.Location;
  437.             using (Graphics g = Graphics.FromImage(drawingLayer))
  438.             {
  439.                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  440.                 if (isEraserActive)
  441.                 {
  442.                     int radius = eraserSize / 2;
  443.                     RectangleF eraseRect = new RectangleF(end.X - radius, end.Y - radius, 2 * radius, 2 * radius);
  444.                     using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  445.                     {
  446.                         path.AddEllipse(eraseRect);
  447.                         g.SetClip(path);
  448.                         g.Clear(Color.Transparent);
  449.                         g.ResetClip();
  450.                     }
  451.                 }
  452.                 else
  453.                 {
  454.                     using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  455.                     {
  456.                         path.AddLine(start, end);
  457.                         g.DrawPath(p, path);
  458.                     }
  459.                 }
  460.             }
  461.             start = end;
  462.             UpdateCanvas();
  463.             canvasDirty = true; // Set the canvas dirty flag
  464.         }
  465.         else
  466.         {
  467.             pb_canvas.Invalidate();
  468.         }
  469.     }*/
  470.  
  471.         /*if (draw && e.Button == MouseButtons.Left)
  472.     {
  473.         end = e.Location;
  474.  
  475.         using (Graphics g = Graphics.FromImage(drawingLayer))
  476.         {
  477.             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  478.  
  479.             if (isEraserActive)
  480.             {
  481.                 int radius = eraserSize / 2;
  482.                 RectangleF eraseRect = new RectangleF(end.X - radius, end.Y - radius, 2 * radius, 2 * radius);
  483.                 using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  484.                 {
  485.                     path.AddEllipse(eraseRect);
  486.                     g.SetClip(path);
  487.                     g.Clear(Color.Transparent);
  488.                     g.ResetClip();
  489.                 }
  490.             }
  491.             else
  492.             {
  493.                 using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  494.                 {
  495.                     path.AddLine(start, end);
  496.                     g.DrawPath(p, path);
  497.                 }
  498.             }
  499.         }
  500.  
  501.         start = end;
  502.         UpdateCanvas();
  503.     }
  504.     else
  505.     {
  506.         pb_canvas.Invalidate();
  507.     }
  508. }*/
  509.         /*if (draw && e.Button == MouseButtons.Left)
  510.         {
  511.             end = e.Location;
  512.  
  513.             using (Graphics g = Graphics.FromImage(drawingLayer))
  514.             {
  515.                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  516.  
  517.                 if (isEraserActive)
  518.                 {
  519.                     int radius = eraserSize / 2;
  520.                     RectangleF eraseRect = new RectangleF(end.X - radius, end.Y - radius, 2 * radius, 2 * radius);
  521.  
  522.                     using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  523.                     {
  524.                         path.AddEllipse(eraseRect);
  525.                         g.SetClip(path);
  526.                         g.Clear(Color.Transparent);
  527.                         g.ResetClip();
  528.                     }
  529.                 }
  530.                 else
  531.                 {
  532.                     using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  533.                     {
  534.                         path.AddLine(start, end);
  535.                         g.DrawPath(p, path);
  536.                     }
  537.                 }
  538.             }
  539.  
  540.             start = end;
  541.             UpdateCanvas();
  542.         }
  543.         else
  544.         {
  545.             pb_canvas.Invalidate();
  546.         }
  547.     }*/
  548.         /*if (draw && e.Button == MouseButtons.Left)
  549.         {
  550.             end = e.Location;
  551.             using (Graphics g = Graphics.FromImage(drawingLayer))
  552.             {
  553.                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  554.                 if (isEraserActive)
  555.                 {
  556.                     Rectangle drawingBounds = new Rectangle(0, 0, drawingLayer.Width, drawingLayer.Height);
  557.                     int radius = eraserSize / 2;
  558.                     RectangleF eraseRect = new RectangleF(end.X - radius, end.Y - radius, 2 * radius, 2 * radius);
  559.                     using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  560.                     {
  561.                         path.AddEllipse(eraseRect);
  562.                         g.SetClip(path);
  563.                         g.Clear(Color.Transparent);
  564.                         g.ResetClip();
  565.                     }
  566.                 }
  567.                 else
  568.                 {
  569.                     using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  570.                     {
  571.                         path.AddLine(start, end);
  572.                         g.DrawPath(p, path);
  573.                     }
  574.                 }
  575.             }
  576.             start = end;
  577.             pb_canvas.Invalidate();
  578.         }
  579.         else
  580.         {
  581.             pb_canvas.Invalidate();
  582.         }
  583.     }*/
  584.  
  585.  
  586.  
  587.  
  588.  
  589.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  590. Start #15 Silhouette (disabled) starting anew
  591. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  592.         /*if (draw && e.Button == MouseButtons.Left)
  593.         //if (draw)
  594.         {
  595.             end = e.Location;
  596.             using (Graphics g = Graphics.FromImage(drawingLayer))
  597.             {
  598.                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  599.                 if (isEraserActive)
  600.                 {
  601.                     Rectangle drawingBounds = new Rectangle(0, 0, drawingLayer.Width, drawingLayer.Height);
  602.                     int radius = eraserSize / 2;
  603.                     RectangleF eraseRect = new RectangleF(start.X - radius, start.Y - radius, 2 * radius, 2 * radius);
  604.                     using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  605.                     {
  606.                         path.AddEllipse(eraseRect);
  607.                         g.SetClip(path);
  608.                         g.Clear(Color.Transparent);
  609.                         g.ResetClip();
  610.                     }
  611.                 }
  612.                 else
  613.                 {
  614.                     using (SolidBrush brush = new SolidBrush(ColorTranslator.FromHtml(color))) // Update this line
  615.                     {
  616.                         g.FillEllipse(brush, end.X - (int)p.Width / 2, end.Y - (int)p.Width / 2, p.Width, p.Width);
  617.                     }*/
  618.         //g.DrawLine(p, start, end);
  619.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  620.         End #15 Silhouette (disabled) starting anew
  621.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  622.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  623. Start #7 Silhouette
  624. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  625.  
  626.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  627. Start #10 Silhouette (disabled)
  628. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  629.         /*Graphics g = pb_canvas.CreateGraphics();
  630.         try
  631.         {
  632.             if (!isEraserActive)
  633.             {
  634.                 Point cursorPosition = pb_canvas.PointToClient(Cursor.Position);
  635.                 g.DrawImage(brushSilhouette, cursorPosition.X - (int)p.Width / 2, cursorPosition.Y - (int)p.Width / 2);
  636.             }
  637.             else
  638.             {
  639.                 Point cursorPosition = pb_canvas.PointToClient(Cursor.Position);
  640.                 g.DrawImage(eraserSilhouette, cursorPosition.X - eraserSize / 2, cursorPosition.Y - eraserSize / 2);
  641.             }
  642.         }
  643.         finally
  644.         {
  645.             g.Dispose();
  646.         }*/
  647.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  648.         End #10 Silhouette (disabled)
  649.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  650.  
  651.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  652. //Start #18 Silhouette (disabled)
  653. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  654.         /*}
  655.     }
  656.     start = end;
  657.     pb_canvas.Invalidate();
  658. }
  659. else
  660. {
  661.     pb_canvas.Invalidate();  // Add this line to refresh the canvas when not drawing
  662. }
  663. }*/
  664.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  665.         End #18 Silhouette (disabled)
  666.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  667.  
  668.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  669.         End #7 Silhouette
  670.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  671.  
  672.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  673. Start #8 Silhouette (disabled)
  674. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  675.         /*if (draw)
  676.         {
  677.             end = e.Location;
  678.             using (Graphics g = Graphics.FromImage(drawingLayer))  // Modify the drawingLayer, not the loaded image
  679.             {
  680.                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  681.                 if (isEraserActive)
  682.                 {
  683.                     Rectangle drawingBounds = new Rectangle(0, 0, drawingLayer.Width, drawingLayer.Height);
  684.                     int radius = 50;
  685.                     RectangleF eraseRect = new RectangleF(start.X - radius, start.Y - radius, 2 * radius, 2 * radius);
  686.                     using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  687.                     {
  688.                         path.AddEllipse(eraseRect);
  689.                         g.SetClip(path);
  690.                         g.Clear(Color.Transparent);
  691.                         g.ResetClip();
  692.                     }
  693.                 }
  694.                 else
  695.                 {
  696.                     g.DrawLine(p, start, end);
  697.                 }
  698.             }
  699.             start = end;
  700.             pb_canvas.Invalidate();
  701.         }
  702.     }*/
  703.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  704.         End #8 Silhouette (disabled)
  705.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.         //start Genius Mode FINAL FINAL FINAL fixes #22 RESAVE()            
  717.         /*if (draw)
  718.         {
  719.             end = e.Location;
  720.             using (Graphics g = Graphics.FromImage(pb_canvas.Image ?? drawingLayer))
  721.             {
  722.                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  723.                 if (isEraserActive)
  724.                 {
  725.                     Rectangle drawingBounds = new Rectangle(0, 0, drawingLayer.Width, drawingLayer.Height);
  726.                     int radius = 50;
  727.                     RectangleF eraseRect = new RectangleF(start.X - radius, start.Y - radius, 2 * radius, 2 * radius);
  728.                     using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  729.                     {
  730.                         path.AddEllipse(eraseRect);
  731.                         g.SetClip(path);
  732.                         g.Clear(Color.Transparent);
  733.                         g.ResetClip();
  734.                     }
  735.                 }
  736.                 else
  737.                 {
  738.                     g.DrawLine(p, start, end);
  739.                 }
  740.             }
  741.             start = end;
  742.             pb_canvas.Invalidate();
  743.         }
  744.     }*/
  745.         //end Genius Mode FINAL FINAL FINAL fixes #22 RESAVE()
  746.  
  747.  
  748.  
  749.  
  750.  
  751.  
  752.  
  753.  
  754.  
  755.  
  756.  
  757.  
  758.         //start Genius Mode FINAL FINAL fixes #8 clear()
  759.         /*if (draw)
  760.         {
  761.             end = e.Location;
  762.             using (Graphics g = Graphics.FromImage(drawingLayer))
  763.             {
  764.                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  765.                 if (isEraserActive)
  766.                 {
  767.                     Rectangle drawingBounds = new Rectangle(0, 0, drawingLayer.Width, drawingLayer.Height);
  768.                     RectangleF eraseRect = new RectangleF(start.X - eraserSize, start.Y - eraserSize, 2 * eraserSize, 2 * eraserSize);
  769.                     using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  770.                     {
  771.                         path.AddEllipse(eraseRect);
  772.                         g.SetClip(path);
  773.                         g.Clear(Color.Transparent);
  774.                         g.ResetClip();
  775.                     }
  776.                 }
  777.                 else
  778.                 {
  779.                     g.DrawLine(p, start, end);
  780.                 }
  781.             }
  782.             start = end;
  783.             pb_canvas.Invalidate();
  784.         }
  785.     }*/
  786.         //end Genius Mode FINAL FINAL fixes #8 clear()
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.  
  799.  
  800.  
  801.  
  802.  
  803.  
  804.  
  805.         //start Genius Mode fixes #1
  806.         //ChatGPTs finishing touches
  807.         /*if (draw)
  808.         {
  809.             end = e.Location;
  810.             using (Graphics g = Graphics.FromImage(drawingLayer))
  811.             {
  812.                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  813.                 if (isEraserActive)
  814.                 {
  815.                     Rectangle drawingBounds = new Rectangle(0, 0, drawingLayer.Width, drawingLayer.Height);
  816.                     int radius = 50;
  817.                     RectangleF eraseRect = new RectangleF(start.X - radius, start.Y - radius, 2 * radius, 2 * radius);
  818.                     using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  819.                     {
  820.                         path.AddEllipse(eraseRect);
  821.                         g.SetClip(path);
  822.                         g.Clear(Color.Transparent);
  823.                         g.ResetClip();
  824.                     }
  825.                 }
  826.                 else
  827.                 {
  828.                     g.DrawLine(p, start, end);
  829.                 }
  830.             }
  831.             start = end;
  832.             pb_canvas.Invalidate();
  833.         }
  834.     }*/
  835.         //end Genius Mode fixes #1
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.         //Bards fixes
  854.         /*if (draw)
  855.         {
  856.             end = e.Location;
  857.             using (Graphics g = pb_canvas.CreateGraphics()) // Create Graphics from the canvas
  858.             //using (Graphics g = Graphics.FromImage(drawingLayer)) disabled temporarily for Bard 4pm 11th Jan 24
  859.             {
  860.                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  861.                 if (isEraserActive)
  862.                 {
  863.                     // Erase only within the drawing layer's bounds
  864.                     Rectangle drawingBounds = new Rectangle(0, 0, drawingLayer.Width, drawingLayer.Height);
  865.                     int radius = 50; // Set the radius of your circular clip here
  866.                     RectangleF eraseRect = new RectangleF(start.X - radius, start.Y - radius, 2 * radius, 2 * radius);
  867.                     using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  868.                     {
  869.                         path.AddEllipse(eraseRect);
  870.                         g.SetClip(path);
  871.                         g.Clear(Color.Transparent); // Clear the drawing layer
  872.                         g.ResetClip();
  873.                     }
  874.                 }*/
  875.         //===================================================================//(start BingAI test FINAL4 #24) Fallback code!
  876.         /*if (draw)
  877.         {
  878.             end = e.Location;
  879.             using (Graphics g = Graphics.FromImage(drawingLayer))
  880.             {
  881.                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  882.                 if (isEraserActive)
  883.                 {
  884.                     // Erase only within the drawing layer's bounds
  885.                     Rectangle drawingBounds = new Rectangle(0, 0, drawingLayer.Width, drawingLayer.Height);
  886.                     int radius = 50; // Set the radius of your circular clip here
  887.                     RectangleF eraseRect = new RectangleF(start.X - radius, start.Y - radius, 2 * radius, 2 * radius);
  888.                     using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  889.                     {
  890.                         path.AddEllipse(eraseRect);
  891.                         g.SetClip(path);
  892.                         g.Clear(Color.Transparent); // Clear the drawing layer
  893.                         g.ResetClip();
  894.                     }
  895.                 }
  896.                 else
  897.                 {
  898.                     g.DrawLine(p, start, end);
  899.                 }
  900.             }
  901.             start = end;
  902.             pb_canvas.Invalidate();
  903.         }*/
  904.         //===================================================================//(end BingAI test FINAL4 #23) Fallback code!
  905.  
  906.         //===================================================================//(start BingAI test #21)
  907.         /*if (draw)
  908.             {
  909.                 end = e.Location;
  910.                 using (Graphics g = Graphics.FromImage(drawingLayer))
  911.                 {
  912.                     g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  913.                     if (isEraserActive)
  914.                     {
  915.                         // Erase only within the drawing layer's bounds
  916.                         Rectangle drawingBounds = new Rectangle(0, 0, drawingLayer.Width, drawingLayer.Height);
  917.                         int radius = 50; // Set the radius of your circular clip here
  918.                         RectangleF eraseRect = new RectangleF(start.X - radius, start.Y - radius, 2 * radius, 2 * radius);
  919.                         using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  920.                         {
  921.                             path.AddEllipse(eraseRect);
  922.                             g.SetClip(path);
  923.                             g.Clear(Color.Transparent); // Clear the drawing layer
  924.                             g.DrawImage(pb_canvas.BackgroundImage, eraseRect, eraseRect, GraphicsUnit.Pixel); // Draw the background image within the clip region
  925.                             g.ResetClip();
  926.                         }
  927.                     }*/
  928.         //===================================================================//(end BingAI test #21)
  929.  
  930.         //===================================================================(start bard test #19)
  931.         //fully working BingAI Solution!
  932.         /*if (draw)
  933. {
  934. end = e.Location;
  935. using (Graphics g = Graphics.FromImage(drawingLayer))
  936. {
  937.     g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  938.     if (isEraserActive)
  939.     {
  940.         // Erase only within the drawing layer's bounds
  941.         Rectangle drawingBounds = new Rectangle(0, 0, drawingLayer.Width, drawingLayer.Height);
  942.         int radius = 50; // Set the radius of your circular clip here
  943.         RectangleF eraseRect = new RectangleF(start.X - radius, start.Y - radius, 2 * radius, 2 * radius);
  944.         using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  945.         {
  946.             path.AddEllipse(eraseRect);
  947.             g.SetClip(path);
  948.             g.Clear(Color.Transparent); // Clear the drawing layer
  949.             g.DrawImage(pb_canvas.BackgroundImage, eraseRect, eraseRect, GraphicsUnit.Pixel); // Draw the background image within the clip region
  950.             g.ResetClip();
  951.         }
  952.     }*/
  953.         //===================================================================(end bard test #19)
  954.         //BingAI without Entire Tiled Region Bug
  955.         /*if (draw)
  956.         {
  957.             end = e.Location;
  958.             using (Graphics g = Graphics.FromImage(drawingLayer))
  959.             {
  960.                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  961.                 if (isEraserActive)
  962.                 {
  963.                     // Erase only within the drawing layer's bounds
  964.                     Rectangle drawingBounds = new Rectangle(0, 0, drawingLayer.Width, drawingLayer.Height);
  965.                     int radius = 50; // Set the radius of your circular clip here
  966.                     RectangleF eraseRect = new RectangleF(start.X - radius, start.Y - radius, 2 * radius, 2 * radius);
  967.                     using (System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath())
  968.                     {
  969.                         path.AddEllipse(eraseRect);
  970.                         g.SetClip(path);
  971.                         g.DrawImage(pb_canvas.BackgroundImage, eraseRect, eraseRect, GraphicsUnit.Pixel);
  972.                         g.ResetClip();
  973.                     }
  974.                 }*/
  975.  
  976.         //===================================================================//(start bard test FINAL #17)
  977.         /*if (draw)
  978.         {
  979.             end = e.Location;
  980.             using (Graphics g = Graphics.FromImage(drawingLayer))
  981.             {
  982.                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  983.                 if (isEraserActive)
  984.                 {
  985.                     // Calculate clipping rectangle to prevent drawing outside bounds
  986.                     Rectangle drawingBounds = new Rectangle(0, 0, drawingLayer.Width, drawingLayer.Height);
  987.                     Rectangle eraseRect = new Rectangle(start, new Size(Math.Abs(end.X - start.X) * 3, Math.Abs(end.Y - start.Y) * 3)); // Double the width and height
  988.                     //Rectangle eraseRect = new Rectangle(start, new Size(Math.Abs(end.X - start.X), Math.Abs(end.Y - start.Y)));
  989.                     Rectangle clipRect = Rectangle.Intersect(drawingBounds, eraseRect);
  990.  
  991.                     // Set clipping region before clearing
  992.                     g.SetClip(clipRect);
  993.                     g.Clear(Color.Transparent); // Clear within the clipping region
  994.                     g.ResetClip(); // Remove clipping region for subsequent operations
  995.                     // Erase within the clipping rectangle with transparent color //(start bard test #11 line)
  996.                     //g.Clear(Color.Transparent, clipRect);
  997.                 }*/
  998.         //===================================================================//(end bard test FINAL #17)
  999.         //start google bard broken deleteme code
  1000.         /*if (draw)
  1001.         {
  1002.             end = e.Location;
  1003.             using (Graphics g = Graphics.FromImage(drawingLayer))
  1004.             {
  1005.                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  1006.                 if (isEraserActive)
  1007.                 {
  1008.                     // Calculate clipping rectangle considering both axes
  1009.                     Rectangle eraseRect = new Rectangle(start, new Size(Math.Abs(end.X - start.X), Math.Abs(end.Y - start.Y)));
  1010.  
  1011.                     // Tile the background image within the erase rectangle
  1012.                     for (int x = eraseRect.Left; x < eraseRect.Right; x += pb_canvas.BackgroundImage.Width)
  1013.                     {
  1014.                         for (int y = eraseRect.Top; y < eraseRect.Bottom; y += pb_canvas.BackgroundImage.Height)
  1015.                         {
  1016.                             g.DrawImage(pb_canvas.BackgroundImage, x, y);
  1017.                         }
  1018.                     }
  1019.                 }*/
  1020.         //end google bard broken deleteme code
  1021.  
  1022.         //(start bard test #10)
  1023.         /*if (draw)
  1024.         {
  1025.             end = e.Location;
  1026.             using (Graphics g = Graphics.FromImage(drawingLayer))
  1027.             {
  1028.                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  1029.                 if (isEraserActive)
  1030.                 {
  1031.                     // Calculate clipping rectangle to ensure erasing within bounds
  1032.                     Rectangle drawingBounds = new Rectangle(0, 0, drawingLayer.Width, drawingLayer.Height);
  1033.                     Rectangle eraseRect = new Rectangle(start, new Size(Math.Abs(end.X - start.X), Math.Abs(end.Y - start.Y)));
  1034.                     Rectangle clipRect = Rectangle.Intersect(drawingBounds, eraseRect);
  1035.                     // Only erase if the clipping rectangle has non-zero dimensions
  1036.                     if (clipRect.Width > 0 && clipRect.Height > 0)
  1037.                     {
  1038.                         g.DrawImage(pb_canvas.BackgroundImage, clipRect, clipRect, GraphicsUnit.Pixel);
  1039.                     }
  1040.                 }*/
  1041.         //(end bard test #10)
  1042.         //(start bard test #9)
  1043.         /*g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  1044.         if (isEraserActive)
  1045.         {
  1046.             // Erase by copying pixels from the background image
  1047.             if (pb_canvas.BackgroundImage != null)
  1048.             {
  1049.                 g.DrawImage(pb_canvas.BackgroundImage, start.X, start.Y, end.X - start.X, end.Y - start.Y);
  1050.             }
  1051.         }                    
  1052.         else
  1053.         {
  1054.             g.DrawLine(p, start, end);
  1055.         }
  1056.     }
  1057.     start = end;
  1058.     pb_canvas.Invalidate();
  1059. }
  1060. }*/
  1061.         //(end bard test #9)
  1062.         //(start bard #6)
  1063.         /*//if (e.Button == MouseButtons.Left)
  1064.         //{
  1065.         end = e.Location;
  1066.         // Use CreateGraphics to draw on the PictureBox
  1067.         // Instead of creating a new Graphics object, use the one provided in the PaintEventArgs
  1068.         using (Graphics g = Graphics.FromImage(drawingLayer))
  1069.         //using (Graphics g = pb_canvas.CreateGraphics())
  1070.         {
  1071.             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; // Enable anti-aliasing for drawing layer
  1072.             g.DrawLine(p, start, end);
  1073.             }
  1074.             //graphics.DrawLine(p, start, end);
  1075.             start = end;
  1076.             pb_canvas.Invalidate();
  1077.     }//*(end bard #6)
  1078.  
  1079. }
  1080. //}
  1081.  
  1082. /*private void SetTiledBackground()
  1083. {
  1084.     try
  1085.     {
  1086.         //string filePath = @"D:\Download\cpp-projekt\Simple Drawing App\bin\Debug\graph9.gif";
  1087.         string resourceName = "Simple_Drawing_Application.graph9.gif";
  1088.         // Replace "YourNamespace" with the actual namespace where the GIF is stored
  1089.         //if (File.Exists(filePath))
  1090.         using (Stream stream = this.GetType().Assembly.GetManifestResourceStream(resourceName))
  1091.  
  1092.         {
  1093.             if (stream != null)
  1094.             {
  1095.                 // Load the GIF from the stream
  1096.                 Image tiledBackground = Image.FromStream(stream);
  1097.  
  1098.                 // Set the BackgroundImage property of pb_canvas
  1099.                 pb_canvas.BackgroundImage = tiledBackground;
  1100.  
  1101.                 // Set the BackgroundImageLayout property to Tile to tile the image
  1102.                 pb_canvas.BackgroundImageLayout = ImageLayout.Tile;
  1103.             }
  1104.             else
  1105.             {
  1106.                 MessageBox.Show("Failed to get the resource stream.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1107.             }
  1108.         }
  1109.     }
  1110.     catch (Exception ex)
  1111.     {
  1112.         MessageBox.Show($"Error setting tiled background: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1113.     }
  1114. }*/
  1115.         /*{
  1116.             // Load the GIF from the file
  1117.             Image tiledBackground = Image.FromFile(filePath);
  1118.  
  1119.             // Set the BackgroundImage property of pb_canvas
  1120.             pb_canvas.BackgroundImage = tiledBackground;
  1121.  
  1122.             // Set the BackgroundImageLayout property to Tile to tile the image
  1123.             pb_canvas.BackgroundImageLayout = ImageLayout.Tile;
  1124.         }
  1125.         else
  1126.         {
  1127.             MessageBox.Show("The specified file does not exist.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1128.         }
  1129.     }
  1130.     catch (Exception ex)
  1131.     {
  1132.         MessageBox.Show($"Error setting tiled background: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1133.     }
  1134. }*/
  1135.         /*{
  1136.           if (stream != null)
  1137.           {
  1138.               // Load the GIF from the stream
  1139.               Image tiledBackground = Image.FromStream(stream);
  1140.  
  1141.               // Set the BackgroundImage property of pb_canvas
  1142.               pb_canvas.BackgroundImage = tiledBackground;
  1143.  
  1144.               // Set the BackgroundImageLayout property to Tile to tile the image
  1145.               pb_canvas.BackgroundImageLayout = ImageLayout.Tile;
  1146.           }
  1147.           else
  1148.           {
  1149.               MessageBox.Show("Failed to get the resource stream.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1150.           }
  1151.       }
  1152.   }
  1153.   catch (Exception ex)
  1154.   {
  1155.       MessageBox.Show($"Error setting tiled background: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  1156.   }
  1157. }*/
  1158.  
  1159.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  1160. Start #4 Silhouette
  1161. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  1162.  
  1163.         private Bitmap GenerateBrushSilhouette(float width, string color)
  1164.         {
  1165.             Bitmap brushSilhouette = new Bitmap((int)width, (int)width);
  1166.             using (Graphics g = Graphics.FromImage(brushSilhouette))
  1167.             {
  1168.                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  1169.  
  1170.                 Color fillColor = ColorTranslator.FromHtml(color);
  1171.                 using (Brush brush = new SolidBrush(fillColor))
  1172.                 {
  1173.                     g.FillEllipse(brush, 0, 0, width, width);
  1174.                 }
  1175.  
  1176.                 // Ensure the bitmap has an alpha channel for transparency
  1177.                 brushSilhouette.MakeTransparent();
  1178.             }
  1179.  
  1180.             return brushSilhouette;
  1181.         }
  1182.  
  1183.         /*Bitmap brushSilhouette = new Bitmap((int)width, (int)width);
  1184.         using (Graphics g = Graphics.FromImage(brushSilhouette))
  1185.         {
  1186.             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  1187.             using (Brush brush = new SolidBrush(ColorTranslator.FromHtml(color)))
  1188.             {
  1189.                 g.FillEllipse(brush, 0, 0, width, width);
  1190.             }
  1191.         }
  1192.         return brushSilhouette;
  1193.     }*/
  1194.  
  1195.  
  1196.         /*Bitmap brushSilhouette = new Bitmap((int)width, (int)width, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
  1197.         using (Graphics g = Graphics.FromImage(brushSilhouette))
  1198.         {
  1199.             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  1200.             using (Brush brush = new SolidBrush(ColorTranslator.FromHtml(color)))
  1201.             {
  1202.                 g.FillEllipse(brush, 0, 0, width, width);
  1203.             }
  1204.         }
  1205.         return brushSilhouette;
  1206.     }*/
  1207.  
  1208.  
  1209.  
  1210.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  1211. Start #39 Silhouette adding persistent values
  1212. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  1213.         /*Bitmap brushSilhouette = new Bitmap((int)width, (int)width);
  1214.         using (Graphics g = Graphics.FromImage(brushSilhouette))
  1215.         {
  1216.             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  1217.             using (Brush brush = new SolidBrush(ColorTranslator.FromHtml(color)))
  1218.             {
  1219.                 g.FillEllipse(brush, 0, 0, width, width);
  1220.             }
  1221.         }
  1222.         return brushSilhouette;
  1223.     }*/
  1224.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  1225.         End #39 Silhouette adding persistent values
  1226.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  1227.  
  1228.  
  1229.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  1230. Start #37 Silhouette adding persistent values
  1231. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  1232.         /*int silhouetteSize = (int)width;
  1233.         if (silhouetteSize <= 0)
  1234.         {
  1235.             return null; // Avoid creating invalid bitmaps
  1236.         }
  1237.  
  1238.         Bitmap brushSilhouette = new Bitmap(silhouetteSize, silhouetteSize);
  1239.         using (Graphics g = Graphics.FromImage(brushSilhouette))
  1240.         {
  1241.             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  1242.             using (Brush brush = new SolidBrush(ColorTranslator.FromHtml(color)))
  1243.             {
  1244.                 g.FillEllipse(brush, 0, 0, silhouetteSize, silhouetteSize);
  1245.             }
  1246.         }
  1247.         return brushSilhouette;
  1248.     }*/
  1249.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  1250.         End #37 Silhouette adding persistent values
  1251.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  1252.  
  1253.  
  1254.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  1255. Start #27 Silhouette adding persistent values
  1256. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  1257.         /*Bitmap brushSilhouette = new Bitmap((int)width, (int)width);
  1258.         using (Graphics g = Graphics.FromImage(brushSilhouette))
  1259.         {
  1260.             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  1261.             using (Brush brush = new SolidBrush(ColorTranslator.FromHtml(color)))
  1262.             {
  1263.                 g.FillEllipse(brush, 0, 0, width, width);
  1264.             }
  1265.         }
  1266.         return brushSilhouette;
  1267.     }*/
  1268.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  1269.         End #27 Silhouette adding persistent values
  1270.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  1271.  
  1272.  
  1273.         private Bitmap GenerateEraserSilhouette(int size)
  1274.         {
  1275.             Bitmap eraserSilhouette = new Bitmap(size, size);
  1276.             using (Graphics g = Graphics.FromImage(eraserSilhouette))
  1277.             {
  1278.                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  1279.                 using (Brush brush = new SolidBrush(Color.Black))
  1280.                 {
  1281.                     g.FillEllipse(brush, 0, 0, size, size);
  1282.                 }
  1283.             }
  1284.             return eraserSilhouette;
  1285.         }
  1286.  
  1287.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  1288. Start #38 Silhouette adding persistent values
  1289. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  1290.         /*int silhouetteSize = size;
  1291.         if (silhouetteSize <= 0)
  1292.         {
  1293.             return null; // Avoid creating invalid bitmaps
  1294.         }
  1295.  
  1296.         Bitmap eraserSilhouette = new Bitmap(silhouetteSize, silhouetteSize);
  1297.         using (Graphics g = Graphics.FromImage(eraserSilhouette))
  1298.         {
  1299.             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  1300.             using (Brush brush = new SolidBrush(Color.Black))
  1301.             {
  1302.                 g.FillEllipse(brush, 0, 0, silhouetteSize, silhouetteSize);
  1303.             }
  1304.             using (Pen pen = new Pen(Color.Black, 2))
  1305.             {
  1306.                 g.DrawEllipse(pen, 0, 0, silhouetteSize, silhouetteSize);
  1307.             }
  1308.         }
  1309.         return eraserSilhouette;
  1310.     }*/
  1311.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  1312.         End #38 Silhouette adding persistent values
  1313.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  1314.  
  1315.  
  1316.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  1317. Start #27 Silhouette adding persistent values
  1318. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  1319.         /*Bitmap eraserSilhouette = new Bitmap(size, size);
  1320.         using (Graphics g = Graphics.FromImage(eraserSilhouette))
  1321.         {
  1322.             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  1323.             using (Brush brush = new SolidBrush(Color.Black))
  1324.             {
  1325.                 g.FillEllipse(brush, 0, 0, size, size);
  1326.             }
  1327.             using (Pen pen = new Pen(Color.Black, 2))
  1328.             {
  1329.                 g.DrawEllipse(pen, 0, 0, size, size);
  1330.             }
  1331.         }
  1332.         return eraserSilhouette;
  1333.     }*/
  1334.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  1335.         End #27 Silhouette adding persistent values
  1336.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  1337.  
  1338.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  1339.         End #4 Silhouette
  1340.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  1341.  
  1342.         void UpdatePen()
  1343.         {
  1344.             // Update the pen color and size based on the current values
  1345.             p.Color = ColorTranslator.FromHtml(color);
  1346.             //p.Width = Convert.ToInt32(comboBox1.Text);
  1347.             GenerateSilhouettes();
  1348.             // Update the Set Font Size menu item text
  1349.             setFontSizeToolStripMenuItem.Text = $"Set Font Size ({p.Width})";
  1350.         }
  1351.  
  1352.         private void pb_canvas_MouseUp(object sender, MouseEventArgs e)
  1353.         {
  1354.             draw = false;
  1355.             PushToUndoStackIfNeeded();
  1356.         }
  1357.  
  1358.         private void PushToUndoStack()
  1359.         {
  1360.             undoStack.Push(new Bitmap(drawingLayer));
  1361.             redoStack.Clear();
  1362.         }
  1363.  
  1364.         private void PushToUndoStackIfNeeded()
  1365.         {
  1366.             if (canvasDirty)
  1367.             {
  1368.                 undoStack.Push(new Bitmap(drawingLayer));
  1369.                 redoStack.Clear();
  1370.                 canvasDirty = false; // Reset the canvas dirty flag
  1371.             }
  1372.         }
  1373.  
  1374.         private void Undo()
  1375.         {
  1376.             if (undoStack.Count > 0)
  1377.             {
  1378.                 redoStack.Push(new Bitmap(drawingLayer));
  1379.                 drawingLayer.Dispose();
  1380.                 drawingLayer = new Bitmap(undoStack.Pop());
  1381.                 UpdateCanvas();
  1382.             }
  1383.         }
  1384.  
  1385.         private void Redo()
  1386.         {
  1387.             if (redoStack.Count > 0)
  1388.             {
  1389.                 undoStack.Push(new Bitmap(drawingLayer));
  1390.                 drawingLayer.Dispose();
  1391.                 drawingLayer = new Bitmap(redoStack.Pop());
  1392.                 UpdateCanvas();
  1393.             }
  1394.             else if (undoStack.Count > 0)
  1395.             {
  1396.                 redoStack.Push(new Bitmap(drawingLayer));
  1397.                 drawingLayer.Dispose();
  1398.                 drawingLayer = new Bitmap(undoStack.Pop());
  1399.                 UpdateCanvas();
  1400.             }
  1401.         }
  1402.  
  1403.         //this is in perfect working condition (undo()) but gpt has a fix for redo that requires changing this
  1404.         /*private void Undo()
  1405.         {
  1406.             PushToUndoStackIfNeeded();
  1407.  
  1408.             if (undoStack.Count > 0)
  1409.             {
  1410.                 drawingLayer.Dispose();
  1411.                 drawingLayer = new Bitmap(undoStack.Pop());
  1412.                 UpdateCanvas();
  1413.             }
  1414.             else if (redoStack.Count > 0)
  1415.             {
  1416.                 drawingLayer.Dispose();
  1417.                 drawingLayer = new Bitmap(redoStack.Pop());
  1418.                 UpdateCanvas();
  1419.             }
  1420.         }
  1421.  
  1422.         private void Redo()
  1423.         {
  1424.             if (redoStack.Count > 0)
  1425.             {
  1426.                 undoStack.Push(new Bitmap(drawingLayer));
  1427.                 drawingLayer.Dispose();
  1428.                 drawingLayer = new Bitmap(redoStack.Pop());
  1429.                 UpdateCanvas();
  1430.             }
  1431.             else
  1432.             {
  1433.                 // If redoStack is empty, check if undoStack has items
  1434.                 if (undoStack.Count > 0)
  1435.                 {
  1436.                     redoStack.Push(new Bitmap(drawingLayer));
  1437.                     drawingLayer.Dispose();
  1438.                     drawingLayer = new Bitmap(undoStack.Pop());
  1439.                     UpdateCanvas();
  1440.                 }
  1441.             }
  1442.         }*/
  1443.  
  1444.         //bards broken fix
  1445.         /*private void Redo()
  1446.         {
  1447.             if (redoStack.Count > 0)
  1448.             {
  1449.                 // **Ensure consistent state for Redo**
  1450.                 drawingLayer.Dispose();  // Dispose of current drawing layer before loading a new one
  1451.  
  1452.                 drawingLayer = new Bitmap(redoStack.Pop());
  1453.                 undoStack.Push(new Bitmap(drawingLayer));  // Add the reverted state to undoStack
  1454.                 UpdateCanvas();
  1455.             }
  1456.         }*/
  1457.  
  1458.         //redo broken this is original below, undo working
  1459.         /*private void Redo()
  1460.         {
  1461.             if (redoStack.Count > 0)
  1462.             {
  1463.                 undoStack.Push(new Bitmap(drawingLayer));
  1464.                 drawingLayer.Dispose();
  1465.                 drawingLayer = new Bitmap(redoStack.Pop());
  1466.                 redoStack.Clear();  // Clear the redo stack after redoing an action
  1467.                 UpdateCanvas();
  1468.             }
  1469.         }*/
  1470.  
  1471.         /*private void Redo()
  1472.         {
  1473.             if (redoStack.Count > 0)
  1474.             {
  1475.                 undoStack.Push(new Bitmap(drawingLayer));
  1476.                 drawingLayer.Dispose();
  1477.                 drawingLayer = new Bitmap(redoStack.Pop());
  1478.                 UpdateCanvas();
  1479.             }
  1480.         }*/
  1481.  
  1482.         /*private void Redo()
  1483.         {
  1484.             if (redoStack.Count > 0)
  1485.             {
  1486.                 undoStack.Push(new Bitmap(drawingLayer));
  1487.                 drawingLayer.Dispose();
  1488.                 drawingLayer = new Bitmap(redoStack.Pop());
  1489.                 UpdateCanvas();
  1490.             }
  1491.             else if (undoStack.Count > 0)
  1492.             {
  1493.                 redoStack.Push(new Bitmap(drawingLayer));
  1494.                 drawingLayer.Dispose();
  1495.                 drawingLayer = new Bitmap(undoStack.Pop());
  1496.                 UpdateCanvas();
  1497.             }
  1498.         }*/
  1499.  
  1500.         /*private void Redo()
  1501.         {
  1502.             PushToUndoStackIfNeeded();
  1503.  
  1504.             if (redoStack.Count > 0)
  1505.             {
  1506.                 drawingLayer.Dispose();
  1507.                 drawingLayer = new Bitmap(redoStack.Pop());
  1508.                 UpdateCanvas();
  1509.             }
  1510.             else if (undoStack.Count > 0)
  1511.             {
  1512.                 drawingLayer.Dispose();
  1513.                 drawingLayer = new Bitmap(undoStack.Pop());
  1514.                 UpdateCanvas();
  1515.             }
  1516.         }*/
  1517.  
  1518.         /*private void Undo()
  1519.         {
  1520.             if (canvasDirty)
  1521.             {
  1522.                 undoStack.Push(new Bitmap(drawingLayer));
  1523.                 redoStack.Clear();
  1524.                 canvasDirty = false; // Reset the canvas dirty flag
  1525.             }
  1526.  
  1527.             if (undoStack.Count > 0)
  1528.             {
  1529.                 drawingLayer.Dispose();
  1530.                 drawingLayer = new Bitmap(undoStack.Pop());
  1531.                 UpdateCanvas();
  1532.             }
  1533.             else if (redoStack.Count > 0)
  1534.             {
  1535.                 drawingLayer.Dispose();
  1536.                 drawingLayer = new Bitmap(redoStack.Pop());
  1537.                 UpdateCanvas();
  1538.             }
  1539.         }
  1540.  
  1541.         private void Redo()
  1542.         {
  1543.             if (canvasDirty)
  1544.             {
  1545.                 undoStack.Push(new Bitmap(drawingLayer));
  1546.                 redoStack.Clear();
  1547.                 canvasDirty = false; // Reset the canvas dirty flag
  1548.             }
  1549.  
  1550.             if (redoStack.Count > 0)
  1551.             {
  1552.                 drawingLayer.Dispose();
  1553.                 drawingLayer = new Bitmap(redoStack.Pop());
  1554.                 UpdateCanvas();
  1555.             }
  1556.             else if (undoStack.Count > 0)
  1557.             {
  1558.                 drawingLayer.Dispose();
  1559.                 drawingLayer = new Bitmap(undoStack.Pop());
  1560.                 UpdateCanvas();
  1561.             }
  1562.         }*/
  1563.  
  1564.         /*private void Undo()
  1565.         {
  1566.             if (undoStack.Count > 0)
  1567.             {
  1568.                 redoStack.Push(new Bitmap(drawingLayer));
  1569.                 drawingLayer.Dispose();
  1570.                 drawingLayer = new Bitmap(undoStack.Pop());
  1571.                 UpdateCanvas();
  1572.             }
  1573.             else if (redoStack.Count > 0)
  1574.             {
  1575.                 drawingLayer.Dispose();
  1576.                 drawingLayer = new Bitmap(redoStack.Pop());
  1577.                 UpdateCanvas();
  1578.             }
  1579.         }
  1580.  
  1581.         private void Redo()
  1582.         {
  1583.             if (redoStack.Count > 0)
  1584.             {
  1585.                 undoStack.Push(new Bitmap(drawingLayer));
  1586.                 drawingLayer.Dispose();
  1587.                 drawingLayer = new Bitmap(redoStack.Pop());
  1588.                 UpdateCanvas();
  1589.             }
  1590.             else if (undoStack.Count > 0)
  1591.             {
  1592.                 redoStack.Push(new Bitmap(drawingLayer));
  1593.                 drawingLayer.Dispose();
  1594.                 drawingLayer = new Bitmap(undoStack.Pop());
  1595.                 UpdateCanvas();
  1596.             }
  1597.         }*/
  1598.  
  1599.         private void UpdateCanvas()
  1600.         {
  1601.             pb_canvas.Invalidate();
  1602.         }
  1603.  
  1604.         private void undoToolStripMenuItem_Click(object sender, EventArgs e)
  1605.         {
  1606.             Undo();
  1607.         }
  1608.  
  1609.         private void redoToolStripMenuItem_Click(object sender, EventArgs e)
  1610.         {
  1611.             Redo();
  1612.         }
  1613.  
  1614.         private void Form1_KeyDown(object sender, KeyEventArgs e)
  1615.         {
  1616.             if (e.KeyCode == Keys.P)
  1617.             {
  1618.                 ActivatePaintbrush();
  1619.             }
  1620.             else if (e.KeyCode == Keys.E)
  1621.             {
  1622.                 ActivateEraser();
  1623.             }
  1624.             else if (e.KeyCode == Keys.C)
  1625.             {
  1626.                 ClearCanvas();
  1627.             }
  1628.             // Check if the user pressed the '+' or '-' key
  1629.             else if (e.KeyCode == Keys.Oemplus || e.KeyCode == Keys.Add)
  1630.             {
  1631.                 // Increase the paintbrush size by 1
  1632.                 IncreasePaintbrushSize();
  1633.             }
  1634.             else if (e.KeyCode == Keys.OemMinus || e.KeyCode == Keys.Subtract)
  1635.             {
  1636.                 // Decrease the paintbrush size by 1
  1637.                 DecreasePaintbrushSize();
  1638.             }
  1639.         }
  1640.  
  1641.         private void clearToolStripMenuItem_Click(object sender, EventArgs e)
  1642.         {
  1643.             ClearCanvas();
  1644.         }
  1645.  
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654.  
  1655.  
  1656.  
  1657.  
  1658.  
  1659.         //This is GPTs final attempt (fail)
  1660.         /*DialogResult result = MessageBox.Show("Are you sure you want to clear the drawing window?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
  1661.         if (result == DialogResult.Yes)
  1662.         {
  1663.             drawingLayer = new Bitmap(pb_canvas.Width, pb_canvas.Height);
  1664.             Graphics.FromImage(drawingLayer).Clear(Color.Transparent);
  1665.             pb_canvas.BackgroundImage = null; // Clear background image
  1666.             pb_canvas.Invalidate();
  1667.         }
  1668.     }*/
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.         //ChatGPTs Final Attempt (Bing below Failed don't use below)
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.         /*// Display a confirmation dialog
  1681.         DialogResult result = MessageBox.Show("Are you sure you want to clear the drawing window?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
  1682.  
  1683.         // Check the user's response
  1684.         if (result == DialogResult.Yes)
  1685.         {
  1686.             // Clear the drawing layer    
  1687.             Graphics.FromImage(drawingLayer).Clear(Color.Transparent);
  1688.  
  1689.             // Clear the PictureBox's Image
  1690.             pb_canvas.Image = null;
  1691.  
  1692.             // Refresh the PictureBox to reflect the changes
  1693.             pb_canvas.Invalidate();
  1694.         }
  1695.         // If the user clicks "No" or closes the dialog, do nothing
  1696.  
  1697.     }*/
  1698.  
  1699.         //Bings Final Attempt (below is not original)
  1700.  
  1701.  
  1702.  
  1703.  
  1704.  
  1705.         /*// Display a confirmation dialog
  1706.         DialogResult result = MessageBox.Show("Are you sure you want to clear the drawing window?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
  1707.  
  1708.         // Check the user's response
  1709.         if (result == DialogResult.Yes)
  1710.         {
  1711.             // Clear the drawing layer    
  1712.             Graphics.FromImage(drawingLayer).Clear(Color.Transparent);
  1713.  
  1714.             // Clear the PictureBox's Image
  1715.             //pb_canvas.Image = null;
  1716.  
  1717.             // Refresh the PictureBox to reflect the changes
  1718.             pb_canvas.Invalidate();
  1719.         }
  1720.         // If the user clicks "No" or closes the dialog, do nothing
  1721.     }*/
  1722.  
  1723.  
  1724.  
  1725.  
  1726.  
  1727.  
  1728.  
  1729.         //start Genius Mode FINAL FINAL FINAL fixes #21 RESAVE()            
  1730.         /*DialogResult result = MessageBox.Show("Are you sure you want to clear the drawing window?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
  1731.         if (result == DialogResult.Yes)
  1732.         {
  1733.             Graphics.FromImage(drawingLayer).Clear(Color.Transparent);
  1734.             pb_canvas.Image = null;  // Clear the Image property instead of the BackgroundImage
  1735.             pb_canvas.Invalidate();
  1736.         }
  1737.     }*/
  1738.         //end Genius Mode FINAL FINAL FINAL fixes #21 RESAVE()
  1739.  
  1740.         //start Genius Mode FINAL fixes #6 clear()
  1741.         /*//BingAI Final Test for Load Clear
  1742.         // Display a confirmation dialog
  1743.         DialogResult result = MessageBox.Show("Are you sure you want to clear the drawing window?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
  1744.             if (result == DialogResult.Yes)
  1745.             {
  1746.                 Graphics.FromImage(drawingLayer).Clear(Color.Transparent);
  1747.                 pb_canvas.BackgroundImage = null;  // Clear the background image as well
  1748.                 pb_canvas.Invalidate();
  1749.             }
  1750.             // If the user clicks "No" or closes the dialog, do nothing
  1751.         }*/
  1752.         //end Genius Mode FINAL fixes #6 clear()
  1753.  
  1754.  
  1755.  
  1756.  
  1757.  
  1758.  
  1759.  
  1760.  
  1761.  
  1762.  
  1763.         //===================================================================//(start BingAI test FINAL4 #23) Fallback code!
  1764.         /*// Display a confirmation dialog
  1765.         DialogResult result = MessageBox.Show("Are you sure you want to clear the drawing window?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
  1766.  
  1767.         // Check the user's response
  1768.         if (result == DialogResult.Yes)
  1769.         {
  1770.             // Clear the drawing layer    
  1771.             Graphics.FromImage(drawingLayer).Clear(Color.Transparent);
  1772.  
  1773.             // Refresh the PictureBox to reflect the changes
  1774.             pb_canvas.Invalidate();
  1775.         }
  1776.         // If the user clicks "No" or closes the dialog, do nothing
  1777.     }*/
  1778.         //===================================================================//(start BingAI test FINAL4 #23) Fallback code!
  1779.  
  1780.         //===================================================================//(start BingAI test FINAL3 #21)
  1781.         /*// Display a confirmation dialog
  1782.         DialogResult result = MessageBox.Show("Are you sure you want to clear the drawing window?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
  1783.  
  1784.         // Check the user's response
  1785.         if (result == DialogResult.Yes)
  1786.         {
  1787.             // Clear the drawing layer    
  1788.             Graphics.FromImage(drawingLayer).Clear(Color.Transparent);
  1789.  
  1790.             // Clear the PictureBox background image
  1791.             pb_canvas.Image = null;
  1792.  
  1793.             pb_canvas.Invalidate();
  1794.  
  1795.             //pb_canvas.BackgroundImage = new Bitmap(pb_canvas.Width, pb_canvas.Height);
  1796.             // Clear the drawing window
  1797.             //pb_canvas.Invalidate();
  1798.             //CreateCanvas();
  1799.         }
  1800.         // If the user clicks "No" or closes the dialog, do nothing
  1801.     }*/
  1802.         //===================================================================//(end BingAI test FINAL3 #21)
  1803.  
  1804.         private void ClearCanvas()
  1805.         {
  1806.             DialogResult result = MessageBox.Show("Are you sure you want to clear the drawing window?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
  1807.             if (result == DialogResult.Yes)
  1808.             {
  1809.                 drawingLayer = new Bitmap(pb_canvas.Width, pb_canvas.Height);  // Create a new drawingLayer with the same size as the PictureBox
  1810.                 pb_canvas.Image = null;  // Clear the Image property
  1811.                 pb_canvas.Invalidate();
  1812.             }
  1813.         }
  1814.  
  1815.  
  1816.         private void UpdateFontColor()
  1817.         {
  1818.             // (for English colornames)
  1819.             selectColorToolStripMenuItem.Text = $"Select Color ({GetFriendlyColorName(color)})";
  1820.             // Update the font color text dynamically in the menu bar (orig)
  1821.             //selectColorToolStripMenuItem.Text = $"Select Color ({GetFriendlyColorName(color)})";
  1822.         }
  1823.  
  1824.         private void SetBackgroundColor()
  1825.         {
  1826.             // Display the ColorDialog to let the user choose a background color
  1827.             ColorDialog colorDialog = new ColorDialog();
  1828.  
  1829.             if (colorDialog.ShowDialog() == DialogResult.OK)
  1830.             {
  1831.                 // Set the background color of pb_canvas
  1832.                 pb_canvas.BackColor = colorDialog.Color;
  1833.  
  1834.                 //delete this if fail (not hex)
  1835.                 // Get the friendly name for the color if available, otherwise use the hex value
  1836.                 string friendlyColorName = Color.FromName(pb_canvas.BackColor.Name).IsKnownColor
  1837.                     ? pb_canvas.BackColor.Name
  1838.                     : $"#{pb_canvas.BackColor.R:X2}{pb_canvas.BackColor.G:X2}{pb_canvas.BackColor.B:X2}";
  1839.  
  1840.                 //delete this if fail (not hex)
  1841.                 selectBGToolStripMenuItem.Text = $"Select Background ({friendlyColorName})";
  1842.                 // Display the hex color in the menu item dynamically (orig)
  1843.                 //selectBGToolStripMenuItem.Text = $"Select BG ({ColorToHex(colorDialog.Color)})";
  1844.             }
  1845.         }
  1846.  
  1847.         // Helper method to convert Color to hex string
  1848.         private string ColorToHex(Color color)
  1849.         {
  1850.             return $"#{color.R:X2}{color.G:X2}{color.B:X2}";
  1851.         }
  1852.  
  1853.         private void IncreasePaintbrushSize()
  1854.         {
  1855.             if (isEraserActive)
  1856.             {
  1857.                 eraserSize += 1;
  1858.                 setFontSizeToolStripMenuItem.Text = $"Set Size ({eraserSize})";
  1859.                 GenerateSilhouettes(); //added 15 minutes ago ++--
  1860.             }
  1861.             else
  1862.             {
  1863.                 float newSize = p.Width + 1;
  1864.                 p.Width = newSize;
  1865.                 setFontSizeToolStripMenuItem.Text = $"Set Size ({newSize})";
  1866.                 GenerateSilhouettes(); //added 15 minutes ago ++--
  1867.             }
  1868.         }
  1869.  
  1870.  
  1871.  
  1872.  
  1873.  
  1874.  
  1875.  
  1876.  
  1877.  
  1878.         //start Genius Mode fixes #3 increasepaintsize()
  1879.         /*// Increase the paintbrush size by 1
  1880.         float newSize = p.Width + 1;
  1881.  
  1882.         // Update the pen size
  1883.         p.Width = newSize;
  1884.  
  1885.         // Update the menu item text with the new size
  1886.         setFontSizeToolStripMenuItem.Text = $"Set Font Size ({newSize})";
  1887.     }*/
  1888.         //end Genius Mode fixes #3 increasepaintsize()
  1889.  
  1890.         private void DecreasePaintbrushSize()
  1891.         {
  1892.             if (isEraserActive)
  1893.             {
  1894.                 if (eraserSize > 1)
  1895.                 {
  1896.                     eraserSize -= 1;
  1897.                     setFontSizeToolStripMenuItem.Text = $"Set Size ({eraserSize})";
  1898.                     GenerateSilhouettes(); //added 15 minutes ago ++--
  1899.                 }
  1900.             }
  1901.             else
  1902.             {
  1903.                 if (p.Width > 1)
  1904.                 {
  1905.                     float newSize = p.Width - 1;
  1906.                     p.Width = newSize;
  1907.                     setFontSizeToolStripMenuItem.Text = $"Set Size ({newSize})";
  1908.                     GenerateSilhouettes(); //added 15 minutes ago ++--
  1909.                 }
  1910.             }
  1911.         }
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.  
  1919.  
  1920.  
  1921.  
  1922.  
  1923.         //start Genius Mode fixes #4 decreasepaintsize()
  1924.         /*// Ensure the size does not go below 1
  1925.         if (p.Width > 1)
  1926.         {
  1927.             // Decrease the paintbrush size by 1
  1928.             float newSize = p.Width - 1;
  1929.  
  1930.             // Update the pen size
  1931.             p.Width = newSize;
  1932.  
  1933.             // Update the menu item text with the new size
  1934.             setFontSizeToolStripMenuItem.Text = $"Set Font Size ({newSize})";
  1935.         }
  1936.     }*/
  1937.         //end Genius Mode fixes #4 decreasepaintsize()
  1938.  
  1939.         private void quitToolStripMenuItem_Click(object sender, EventArgs e)
  1940.         {
  1941.             Application.Exit();
  1942.         }
  1943.  
  1944.         private void paintbrushToolStripMenuItem_Click(object sender, EventArgs e)
  1945.         {
  1946.             ActivatePaintbrush();
  1947.         }
  1948.  
  1949.         private void ActivatePaintbrush()
  1950.         {
  1951.             brushSettings.Clear();
  1952.             isEraserActive = false;
  1953.             //color = "#FF0000";
  1954.             ///p.Width = 14; //12
  1955.             UpdatePenColor();
  1956.             string friendlyColorName = Color.FromName(pb_canvas.BackColor.Name).IsKnownColor
  1957.                 ? pb_canvas.BackColor.Name
  1958.                 : $"#{pb_canvas.BackColor.R:X2}{pb_canvas.BackColor.G:X2}{pb_canvas.BackColor.B:X2}";
  1959.             setFontSizeToolStripMenuItem.Text = $"Set Font Size ({p.Width})";
  1960.             selectBGToolStripMenuItem.Text = $"Select Background ({friendlyColorName})";
  1961.             selectColorToolStripMenuItem.Text = $"Select Color ({GetFriendlyColorName(color)})";
  1962.         }
  1963.  
  1964.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  1965. Start #40 Silhouette adding persistent values
  1966. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  1967.         /*StoreCurrentToolSettings(); //(disabling Silhouette and persistent code)
  1968.         isEraserActive = false;
  1969.         color = "#FF0000";
  1970.         p.Width = 12;
  1971.         UpdatePenColor();
  1972.         string friendlyColorName = Color.FromName(pb_canvas.BackColor.Name).IsKnownColor
  1973.         ? pb_canvas.BackColor.Name
  1974.         : $"#{pb_canvas.BackColor.R:X2}{pb_canvas.BackColor.G:X2}{pb_canvas.BackColor.B:X2}";
  1975.         setFontSizeToolStripMenuItem.Text = $"Set Font Size ({p.Width})";
  1976.         selectBGToolStripMenuItem.Text = $"Select Background ({friendlyColorName})";
  1977.         selectColorToolStripMenuItem.Text = $"Select Color ({GetFriendlyColorName(color)})";
  1978.     }*/
  1979.  
  1980.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  1981.         End #40 Silhouette adding persistent values
  1982.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  1983.  
  1984.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  1985. Start #22 Silhouette (adding persistent settings)
  1986. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  1987.         /*isEraserActive = false;
  1988.             color = "#FF0000";
  1989.             p.Width = 12;
  1990.             UpdatePenColor();
  1991.             string friendlyColorName = Color.FromName(pb_canvas.BackColor.Name).IsKnownColor
  1992.                 ? pb_canvas.BackColor.Name
  1993.                 : $"#{pb_canvas.BackColor.R:X2}{pb_canvas.BackColor.G:X2}{pb_canvas.BackColor.B:X2}";
  1994.             setFontSizeToolStripMenuItem.Text = $"Set Font Size ({p.Width})";
  1995.             selectBGToolStripMenuItem.Text = $"Select Background ({friendlyColorName})";
  1996.             selectColorToolStripMenuItem.Text = $"Select Color ({GetFriendlyColorName(color)})";
  1997.         }*/
  1998.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  1999.         End #22 Silhouette (adding persistent settings)
  2000.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2001.  
  2002.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2003. Start #16 Silhouette (disabled) starting anew
  2004. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2005.         /*isEraserActive = false; // Allow switching back to Paintbrush
  2006.             color = "#FF0000";
  2007.             p.Width = 12;
  2008.             UpdatePen();
  2009.         GenerateSilhouettes(); //added 15 minutes ago
  2010.                                //comboBox1.Text = "12";
  2011.                                //txt_color.Text = color;
  2012.                                // Get the friendly name for the color if available, otherwise use the hex value
  2013.                                //string friendlyColorName = GetFriendlyColorName(pb_canvas.BackColor);
  2014.                                // Get the friendly name for the color if available, otherwise use the hex value
  2015.         string friendlyColorName = Color.FromName(pb_canvas.BackColor.Name).IsKnownColor
  2016.             ? pb_canvas.BackColor.Name
  2017.             : $"#{pb_canvas.BackColor.R:X2}{pb_canvas.BackColor.G:X2}{pb_canvas.BackColor.B:X2}";
  2018.  
  2019.         // Update other menu items dynamically
  2020.         setFontSizeToolStripMenuItem.Text = $"Set Font Size ({p.Width})";
  2021.             selectBGToolStripMenuItem.Text = $"Select Background ({friendlyColorName})";
  2022.             selectColorToolStripMenuItem.Text = $"Select Color ({GetFriendlyColorName(color)})";
  2023.             //selectColorToolStripMenuItem.Text = $"Select Color ({GetFriendlyColorName(ColorTranslator.FromHtml(color))})";
  2024.         }*/
  2025.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2026.         End #16 Silhouette (disabled) starting anew
  2027.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2028.  
  2029.  
  2030.         private void eraserToolStripMenuItem_Click(object sender, EventArgs e)
  2031.         {
  2032.             ActivateEraser();
  2033.         }
  2034.  
  2035.         private void ActivateEraser()
  2036.         {
  2037.             brushSettings.Clear();
  2038.             isEraserActive = true;
  2039.             brush = new SolidBrush(Color.Transparent);
  2040.             UpdatePenColor();
  2041.             GenerateSilhouettes();
  2042.             string friendlyColorName = Color.FromName(pb_canvas.BackColor.Name).IsKnownColor
  2043.                 ? pb_canvas.BackColor.Name
  2044.                 : $"#{pb_canvas.BackColor.R:X2}{pb_canvas.BackColor.G:X2}{pb_canvas.BackColor.B:X2}";
  2045.             setFontSizeToolStripMenuItem.Text = $"Set Font Size ({eraserSize})";
  2046.             selectBGToolStripMenuItem.Text = $"Select Background ({friendlyColorName})";
  2047.             selectColorToolStripMenuItem.Text = $"Select Color ({GetFriendlyColorName(color)})";
  2048.         }
  2049.  
  2050.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2051. Start #41 Silhouette adding persistent values
  2052. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2053.         /*StoreCurrentToolSettings(); //(disabling Silhouette and persistent code)
  2054.         isEraserActive = true;
  2055.         brush = new SolidBrush(Color.Transparent);
  2056.         UpdatePenColor();
  2057.         GenerateSilhouettes(); //added 15 minutes ago ++--
  2058.         string friendlyColorName = Color.FromName(pb_canvas.BackColor.Name).IsKnownColor
  2059.             ? pb_canvas.BackColor.Name
  2060.             : $"#{pb_canvas.BackColor.R:X2}{pb_canvas.BackColor.G:X2}{pb_canvas.BackColor.B:X2}";
  2061.         setFontSizeToolStripMenuItem.Text = $"Set Font Size ({eraserSize})";
  2062.         selectBGToolStripMenuItem.Text = $"Select Background ({friendlyColorName})";
  2063.         selectColorToolStripMenuItem.Text = $"Select Color ({GetFriendlyColorName(color)})";
  2064.     }*/
  2065.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2066.         End #41 Silhouette adding persistent values
  2067.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2068.  
  2069.  
  2070.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2071.         Start #23 Silhouette (adding persistent settings)
  2072.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2073.         /*isEraserActive = true; //(start bard #3 line)
  2074.             //color = "#00FFFFFF"; //(start bard #4 line) "#000000"
  2075.             brush = new SolidBrush(Color.Transparent); // Use SolidBrush with Transparent color //(start bard test #13 line)
  2076.             //p.Width = 60;
  2077.             UpdatePen();
  2078.             GenerateSilhouettes(); //added 15 minutes ago
  2079.             //comboBox1.Text = "17";
  2080.             //txt_color.Text = color;
  2081.             // Get the friendly name for the color if available, otherwise use the hex value
  2082.             //string friendlyColorName = GetFriendlyColorName(pb_canvas.BackColor);
  2083.             // Get the friendly name for the color if available, otherwise use the hex value
  2084.             string friendlyColorName = Color.FromName(pb_canvas.BackColor.Name).IsKnownColor
  2085.                 ? pb_canvas.BackColor.Name
  2086.                 : $"#{pb_canvas.BackColor.R:X2}{pb_canvas.BackColor.G:X2}{pb_canvas.BackColor.B:X2}";
  2087.  
  2088.             // Update other menu items dynamically orig: $"Set Font Size ({p.Width})";
  2089.             setFontSizeToolStripMenuItem.Text = $"Set Font Size ({eraserSize})";
  2090.             selectBGToolStripMenuItem.Text = $"Select Background ({friendlyColorName})";
  2091.             selectColorToolStripMenuItem.Text = $"Select Color ({GetFriendlyColorName(color)})";
  2092.             //selectColorToolStripMenuItem.Text = $"Select Color ({GetFriendlyColorName(ColorTranslator.FromHtml(color))})";
  2093.         }*/
  2094.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2095.         End #23 Silhouette adding persistent settings
  2096.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2097.  
  2098.         //private Dictionary<string, object> brushSettings = new Dictionary<string, object>();
  2099.  
  2100.         private void StoreCurrentToolSettings()
  2101.         {
  2102.             //brushSettings["Color"] = isEraserActive ? Color.Transparent : color;
  2103.             brushSettings["Color"] = isEraserActive ? (object)Color.Transparent : (object)color;
  2104.             brushSettings["Width"] = isEraserActive ? (object)eraserSize : (object)p.Width;
  2105.         }
  2106.  
  2107.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2108. Start #39 Silhouette adding persistent values
  2109. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2110.         /*if (!isEraserActive)
  2111.         {
  2112.             storedPenColor = color;
  2113.             storedPenWidth = p.Width;
  2114.         }
  2115.         else
  2116.         {
  2117.             storedEraserSize = eraserSize;
  2118.         }
  2119.     }*/
  2120.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2121.         End #39 Silhouette adding persistent values
  2122.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2123.  
  2124.  
  2125.         private void RestorePreviousToolSettings()
  2126.         {
  2127.             color = brushSettings.ContainsKey("Color") ? (string)brushSettings["Color"] : "#FF0000";
  2128.             p.Width = brushSettings.ContainsKey("Width") ? (float)brushSettings["Width"] : 12f;
  2129.         }
  2130.  
  2131.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2132. Start #40 Silhouette adding persistent values
  2133. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2134.         /*if (!isEraserActive)
  2135.         {
  2136.             color = storedPenColor;
  2137.             p.Width = storedPenWidth;
  2138.         }
  2139.         else
  2140.         {
  2141.             eraserSize = storedEraserSize;
  2142.         }
  2143.     }*/
  2144.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2145.         End #40 Silhouette adding persistent values
  2146.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2147.  
  2148.  
  2149.  
  2150.         private void loadImageToolStripMenuItem_Click(object sender, EventArgs e)
  2151.         {
  2152.             OpenFileDialog openFileDialog = new OpenFileDialog();
  2153.             openFileDialog.Filter = "Png files|*.png|jpeg files|*.jpg|bitmaps|*.bmp";
  2154.             if (openFileDialog.ShowDialog() == DialogResult.OK)
  2155.             {
  2156.                 string filePath = openFileDialog.FileName;
  2157.                 try
  2158.                 {
  2159.                     Image loadedImage = Image.FromFile(filePath);
  2160.                     pb_canvas.Image = new Bitmap(loadedImage, pb_canvas.Size);  // Resize the loaded image to match the PictureBox size
  2161.                     drawingLayer = new Bitmap(pb_canvas.Image.Width, pb_canvas.Image.Height);  // Create a new drawingLayer with the same size as the PictureBox
  2162.                     using (Graphics g = Graphics.FromImage(drawingLayer))
  2163.                     {
  2164.                         g.DrawImage(loadedImage, Point.Empty);  // Draw the loaded image onto the drawingLayer
  2165.                     }
  2166.                     pb_canvas.Invalidate();
  2167.                 }
  2168.                 catch (Exception ex)
  2169.                 {
  2170.                     MessageBox.Show($"Error loading image: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  2171.                 }
  2172.             }
  2173.         }
  2174.  
  2175.  
  2176.  
  2177.  
  2178.  
  2179.  
  2180.  
  2181.  
  2182.  
  2183.         //start Genius Mode FINAL FINAL FINAL fixes #20 RESAVE()
  2184.         /*OpenFileDialog openFileDialog = new OpenFileDialog();
  2185.         openFileDialog.Filter = "Png files|*.png|jpeg files|*.jpg|bitmaps|*.bmp";
  2186.         if (openFileDialog.ShowDialog() == DialogResult.OK)
  2187.         {
  2188.             string filePath = openFileDialog.FileName;
  2189.             try
  2190.             {
  2191.                 pb_canvas.Image = Image.FromFile(filePath);  // Load the image onto the PictureBox's Image property
  2192.                 drawingLayer = new Bitmap(pb_canvas.Image);  // Update the drawingLayer to match the loaded image
  2193.                 pb_canvas.Invalidate();
  2194.             }
  2195.             catch (Exception ex)
  2196.             {
  2197.                 MessageBox.Show($"Error loading image: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  2198.             }
  2199.         }
  2200.     }*/
  2201.         //end Genius Mode FINAL FINAL FINAL fixes #20 RESAVE()
  2202.  
  2203.         /*//This is GPTs final attempt (fail)
  2204.         OpenFileDialog openFileDialog = new OpenFileDialog();
  2205.         openFileDialog.Filter = "Png files|*.png|jpeg files|*.jpg|bitmaps|*.bmp";
  2206.         if (openFileDialog.ShowDialog() == DialogResult.OK)
  2207.         {
  2208.             string filePath = openFileDialog.FileName;
  2209.             try
  2210.             {
  2211.                 drawingLayer = new Bitmap(pb_canvas.Width, pb_canvas.Height); // Reset drawing layer
  2212.                 Graphics.FromImage(drawingLayer).Clear(Color.Transparent);
  2213.  
  2214.                 pb_canvas.BackgroundImage = Image.FromFile(filePath);
  2215.                 pb_canvas.BackgroundImageLayout = ImageLayout.Stretch; // Adjust background image layout
  2216.  
  2217.                 pb_canvas.Image = null;
  2218.                 pb_canvas.Invalidate();
  2219.             }
  2220.             catch (Exception ex)
  2221.             {
  2222.                 MessageBox.Show($"Error loading image: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  2223.             }
  2224.         }
  2225.     }*/
  2226.  
  2227.  
  2228.  
  2229.         //ChatGPTs Final Attempt (Bing below Failed don't use below)
  2230.  
  2231.  
  2232.  
  2233.  
  2234.         /*OpenFileDialog openFileDialog = new OpenFileDialog();
  2235.         openFileDialog.Filter = "Png files|*.png|jpeg files|*.jpg|bitmaps|*.bmp";
  2236.  
  2237.         if (openFileDialog.ShowDialog() == DialogResult.OK)
  2238.         {
  2239.             string filePath = openFileDialog.FileName;
  2240.  
  2241.             try
  2242.             {
  2243.                 // Clear the drawing layer
  2244.                 Graphics.FromImage(drawingLayer).Clear(Color.Transparent);
  2245.                 pb_canvas.Invalidate();
  2246.  
  2247.                 // Load the selected image into the PictureBox's Image
  2248.                 pb_canvas.Image = Image.FromFile(filePath);
  2249.  
  2250.                 // Set the PictureBox's BackgroundImageLayout to Zoom
  2251.                 pb_canvas.BackgroundImageLayout = ImageLayout.Zoom;
  2252.             }
  2253.             catch (Exception ex)
  2254.             {
  2255.                 MessageBox.Show($"Error loading image: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  2256.             }
  2257.         }
  2258.     }*/
  2259.  
  2260.  
  2261.  
  2262.  
  2263.  
  2264.  
  2265.         //Bings Final Attempt (below is not original)
  2266.  
  2267.  
  2268.  
  2269.  
  2270.  
  2271.  
  2272.  
  2273.  
  2274.         //start Genius Mode FINAL FINAL fixes #9 load()
  2275.         /*OpenFileDialog openFileDialog = new OpenFileDialog();
  2276.         openFileDialog.Filter = "Png files|*.png|jpeg files|*.jpg|bitmaps|*.bmp";
  2277.         if (openFileDialog.ShowDialog() == DialogResult.OK)
  2278.         {
  2279.             string filePath = openFileDialog.FileName;
  2280.             try
  2281.             {
  2282.                 pb_canvas.Image = Image.FromFile(filePath);  // Load the image onto the PictureBox's Image property
  2283.                 Graphics.FromImage(drawingLayer).Clear(Color.Transparent);  // Clear the drawingLayer
  2284.                 pb_canvas.Invalidate();
  2285.             }
  2286.             catch (Exception ex)
  2287.             {
  2288.                 MessageBox.Show($"Error loading image: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  2289.             }
  2290.         }
  2291.     }*/
  2292.         //end Genius Mode FINAL FINAL fixes #9 load()
  2293.  
  2294.         //start Genius Mode FINAL fixes #7 loadimage()
  2295.         /*OpenFileDialog openFileDialog = new OpenFileDialog();
  2296.         openFileDialog.Filter = "Png files|*.png|jpeg files|*.jpg|bitmaps|*.bmp";
  2297.         if (openFileDialog.ShowDialog() == DialogResult.OK)
  2298.         {
  2299.             string filePath = openFileDialog.FileName;
  2300.             try
  2301.             {
  2302.                 pb_canvas.Image = Image.FromFile(filePath);
  2303.                 Graphics.FromImage(drawingLayer).Clear(Color.Transparent);
  2304.                 pb_canvas.BackgroundImage = null; // Clear previous background if any
  2305.                 pb_canvas.Invalidate();
  2306.             }
  2307.             catch (Exception ex)
  2308.             {
  2309.                 MessageBox.Show($"Error loading image: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  2310.             }
  2311.         }
  2312.     }*/
  2313.         //end Genius Mode FINAL fixes #7 loadimage()
  2314.  
  2315.  
  2316.  
  2317.  
  2318.         //===================================================================//(start BingAI test FINAL #18)
  2319.         /*OpenFileDialog openFileDialog = new OpenFileDialog();
  2320.         openFileDialog.Filter = "Png files|*.png|jpeg files|*.jpg|bitmaps|*.bmp";
  2321.  
  2322.         if (openFileDialog.ShowDialog() == DialogResult.OK)
  2323.         {
  2324.             string filePath = openFileDialog.FileName;
  2325.  
  2326.             try
  2327.             {
  2328.                 // Clear the drawing layer
  2329.                 Graphics.FromImage(drawingLayer).Clear(Color.Transparent);
  2330.                 pb_canvas.Invalidate();
  2331.                 // Load the selected image into the PictureBox
  2332.                 pb_canvas.Image = Image.FromFile(filePath);
  2333.             }
  2334.             catch (Exception ex)
  2335.             {
  2336.                 MessageBox.Show($"Error loading image: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  2337.             }
  2338.         }
  2339.     }*/
  2340.         //===================================================================//(end BingAI test FINAL #18)
  2341.  
  2342.         private void saveImageToolStripMenuItem_Click(object sender, EventArgs e)
  2343.  
  2344.         {
  2345.             SaveFileDialog s = new SaveFileDialog();
  2346.             s.Filter = "Png files|*.png|jpeg files|*.jpg|bitmaps|*.bmp";
  2347.             if (s.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  2348.             {
  2349.                 try
  2350.                 {
  2351.                     Bitmap mergedImage = new Bitmap(pb_canvas.Width, pb_canvas.Height);
  2352.                     using (Graphics g = Graphics.FromImage(mergedImage))
  2353.                     {
  2354.                         if (pb_canvas.Image != null)
  2355.                         {
  2356.                             g.DrawImage(pb_canvas.Image, Point.Empty);  // Draw the loaded image (if any)
  2357.                         }
  2358.                         g.DrawImage(drawingLayer, Point.Empty);  // Draw the drawingLayer
  2359.                     }
  2360.                     if (s.FileName.Contains(".jpg"))
  2361.                     {
  2362.                         mergedImage.Save(s.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
  2363.                     }
  2364.                     else if (s.FileName.Contains(".png"))
  2365.                     {
  2366.                         mergedImage.Save(s.FileName, System.Drawing.Imaging.ImageFormat.Png);
  2367.                     }
  2368.                     else if (s.FileName.Contains(".bmp"))
  2369.                     {
  2370.                         mergedImage.Save(s.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
  2371.                     }
  2372.                 }
  2373.                 catch (Exception ex)
  2374.                 {
  2375.                     MessageBox.Show($"Error saving image: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  2376.                 }
  2377.             }
  2378.         }
  2379.  
  2380.  
  2381.  
  2382.  
  2383.  
  2384.  
  2385.  
  2386.  
  2387.  
  2388.  
  2389.  
  2390.  
  2391.  
  2392.  
  2393.         //start Genius Mode FINAL FINAL FINAL fixes #23 RESAVE()            
  2394.         /*SaveFileDialog s = new SaveFileDialog();
  2395.         s.Filter = "Png files|*.png|jpeg files|*.jpg|bitmaps|*.bmp";
  2396.         if (s.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  2397.         {
  2398.             try
  2399.             {
  2400.                 Bitmap mergedImage = new Bitmap(pb_canvas.Width, pb_canvas.Height);
  2401.                 using (Graphics g = Graphics.FromImage(mergedImage))
  2402.                 {
  2403.                     g.DrawImage(pb_canvas.Image ?? drawingLayer, Point.Empty);
  2404.                 }
  2405.                 if (s.FileName.Contains(".jpg"))
  2406.                 {
  2407.                     mergedImage.Save(s.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
  2408.                 }
  2409.                 else if (s.FileName.Contains(".png"))
  2410.                 {
  2411.                     mergedImage.Save(s.FileName, System.Drawing.Imaging.ImageFormat.Png);
  2412.                 }
  2413.                 else if (s.FileName.Contains(".bmp"))
  2414.                 {
  2415.                     mergedImage.Save(s.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
  2416.                 }
  2417.             }
  2418.             catch (Exception ex)
  2419.             {
  2420.                 MessageBox.Show($"Error saving image: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  2421.             }
  2422.         }
  2423.     }*/
  2424.         //end Genius Mode FINAL FINAL FINAL fixes #23 RESAVE()
  2425.  
  2426.  
  2427.  
  2428.  
  2429.  
  2430.  
  2431.  
  2432.         //start Genius Mode FINAL FINAL fixes #10 save()
  2433.         /*SaveFileDialog s = new SaveFileDialog();
  2434.         s.Filter = "Png files|*.png|jpeg files|*.jpg|bitmaps|*.bmp";
  2435.  
  2436.         if (s.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  2437.         {
  2438.             try
  2439.             {
  2440.                 // Create a new bitmap to hold the merged image
  2441.                 Bitmap mergedImage = new Bitmap(pb_canvas.Width, pb_canvas.Height);
  2442.  
  2443.                 // Create a graphics object from the merged image
  2444.                 using (Graphics g = Graphics.FromImage(mergedImage))
  2445.                 {
  2446.                     // Draw the background image repeatedly to fill the canvas
  2447.                     for (int x = 0; x < pb_canvas.Width; x += pb_canvas.BackgroundImage.Width)
  2448.                     {
  2449.                         for (int y = 0; y < pb_canvas.Height; y += pb_canvas.BackgroundImage.Height)
  2450.                         {
  2451.                             g.DrawImage(pb_canvas.BackgroundImage, new Point(x, y));
  2452.                         }
  2453.                     }
  2454.  
  2455.                     // Draw the drawing layer
  2456.                     g.DrawImage(drawingLayer, Point.Empty);
  2457.                 }
  2458.  
  2459.                 // Save the merged image
  2460.                 if (s.FileName.Contains(".jpg"))
  2461.                 {
  2462.                     mergedImage.Save(s.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
  2463.                 }
  2464.                 else if (s.FileName.Contains(".png"))
  2465.                 {
  2466.                     mergedImage.Save(s.FileName, System.Drawing.Imaging.ImageFormat.Png);
  2467.                 }
  2468.                 else if (s.FileName.Contains(".bmp"))
  2469.                 {
  2470.                     mergedImage.Save(s.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
  2471.                 }
  2472.             }
  2473.             catch (Exception ex)
  2474.             {
  2475.                 MessageBox.Show($"Error saving image: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  2476.             }
  2477.         }
  2478.     }*/
  2479.         //end Genius Mode FINAL FINAL fixes #10 save()
  2480.  
  2481.         //old fallbackcode return if unsatisfied
  2482.         /*{
  2483.             SaveFileDialog s = new SaveFileDialog();
  2484.             s.Filter = "Png files| *.png|jpeg files| *.jpg|bitmaps | *.bmp";
  2485.             if (s.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  2486.             {
  2487.                 if (File.Exists(s.FileName))
  2488.                 {
  2489.                     File.Delete(s.FileName);
  2490.                 }
  2491.                 if (s.FileName.Contains(".jpg"))
  2492.                 {
  2493.                     bmp.Save(s.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
  2494.                 }
  2495.                 else if (s.FileName.Contains(".png"))
  2496.                 {
  2497.                     bmp.Save(s.FileName, System.Drawing.Imaging.ImageFormat.Png);
  2498.                 }
  2499.                 else if (s.FileName.Contains(".bmp"))
  2500.                 {
  2501.                     bmp.Save(s.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
  2502.                 }
  2503.             }
  2504.         }*/
  2505.  
  2506.         private void selectColorToolStripMenuItem_Click(object sender, EventArgs e)
  2507.         {
  2508.             ColorDialog cd = new ColorDialog();
  2509.             if (cd.ShowDialog() == DialogResult.OK)
  2510.             {
  2511.                 color = "#" + (cd.Color.ToArgb() & 0x00FFFFFF).ToString("X6");
  2512.                 UpdatePenColor();
  2513.             }
  2514.         }
  2515.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2516. Start #15 Silhouette (disabled) starting anew
  2517. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2518.         /*ColorDialog cd = new ColorDialog();
  2519.         if (cd.ShowDialog() == DialogResult.OK)
  2520.         {
  2521.             color = "#" + (cd.Color.ToArgb() & 0x00FFFFFF).ToString("X6");
  2522.             //txt_color.Text = color;
  2523.  
  2524.             // Update font color dynamically
  2525.             UpdateFontColor();
  2526.         }          
  2527.     }*/
  2528.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2529.          End #15 Silhouette (disabled) starting anew
  2530.           .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2531.  
  2532.         private void UpdatePenColor()
  2533.         {
  2534.             p.Color = ColorTranslator.FromHtml(color);
  2535.             UpdateFontColor();
  2536.             GenerateSilhouettes(); //(disabling Silhouette and persistent code) ++--
  2537.         }
  2538.  
  2539.         private void setFontSizeToolStripMenuItem_Click(object sender, EventArgs e)
  2540.         {
  2541.             if (p == null)
  2542.             {
  2543.                 p = new Pen(Color.Black, 1);
  2544.             }
  2545.             using (Form inputForm = new Form())
  2546.             {
  2547.                 inputForm.Text = "Set Size";
  2548.                 Label promptLabel = new Label();
  2549.                 promptLabel.Text = isEraserActive ? "Enter new eraser size:" : "Enter new font size:";
  2550.                 promptLabel.Location = new Point(10, 10);
  2551.                 inputForm.Controls.Add(promptLabel);
  2552.                 TextBox inputBox = new TextBox();
  2553.                 inputBox.Location = new Point(10, 30);
  2554.                 inputForm.Controls.Add(inputBox);
  2555.                 Button okButton = new Button();
  2556.                 okButton.Text = "OK";
  2557.                 okButton.DialogResult = DialogResult.OK;
  2558.                 okButton.Location = new Point(10, 60);
  2559.                 inputForm.Controls.Add(okButton);
  2560.                 if (inputForm.ShowDialog() == DialogResult.OK)
  2561.                 {
  2562.                     if (int.TryParse(inputBox.Text, out int newSize))
  2563.                     {
  2564.                         if (isEraserActive)
  2565.                         {
  2566.                             eraserSize = newSize;
  2567.                         }
  2568.                         else
  2569.                         {
  2570.                             p.Width = newSize;
  2571.                         }
  2572.                         GenerateSilhouettes(); //added 15 minutes ago ++--
  2573.                         setFontSizeToolStripMenuItem.Text = $"Set Size ({newSize})";
  2574.                     }
  2575.                     else
  2576.                     {
  2577.                         MessageBox.Show("Invalid input. Please enter a valid number.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  2578.                     }
  2579.                 }
  2580.             }
  2581.         }
  2582.  
  2583.  
  2584.  
  2585.  
  2586.  
  2587.  
  2588.  
  2589.  
  2590.  
  2591.  
  2592.  
  2593.  
  2594.  
  2595.  
  2596.         //start Genius Mode fixes #2
  2597.         /*if (p == null)
  2598.         {
  2599.             // Initialize the pen with default values if not already initialized
  2600.             p = new Pen(Color.Black, 1); // You can adjust the color and size as needed
  2601.         }
  2602.  
  2603.         // Display the current pen size in the menu dynamically
  2604.         setFontSizeToolStripMenuItem.Text = $"Set Font Size ({p.Width})";
  2605.  
  2606.         // Create a form with a TextBox for user input
  2607.         using (Form inputForm = new Form())
  2608.         {
  2609.             inputForm.Text = "Set Font Size";
  2610.  
  2611.             Label promptLabel = new Label();
  2612.             promptLabel.Text = "Enter new font size:";
  2613.             promptLabel.Location = new Point(10, 10);
  2614.             inputForm.Controls.Add(promptLabel);
  2615.  
  2616.             TextBox inputBox = new TextBox();
  2617.             inputBox.Location = new Point(10, 30);
  2618.             inputForm.Controls.Add(inputBox);
  2619.  
  2620.             Button okButton = new Button();
  2621.             okButton.Text = "OK";
  2622.             okButton.DialogResult = DialogResult.OK;
  2623.             okButton.Location = new Point(10, 60);
  2624.             inputForm.Controls.Add(okButton);
  2625.  
  2626.             // Show the form and get user input
  2627.             if (inputForm.ShowDialog() == DialogResult.OK)
  2628.             {
  2629.                 // Check if the user entered a valid number
  2630.                 if (float.TryParse(inputBox.Text, out float newSize))
  2631.                 {
  2632.                     // Update the pen size
  2633.                     p.Width = newSize;
  2634.  
  2635.                     // Update the menu item text with the new size
  2636.                     setFontSizeToolStripMenuItem.Text = $"Set Font Size ({newSize})";
  2637.                 }
  2638.                 else
  2639.                 {
  2640.                     // Display an error message if the input is not a valid number
  2641.                     MessageBox.Show("Invalid input. Please enter a valid number.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  2642.                 }
  2643.             }
  2644.         }
  2645.     }*/
  2646.         //end Genius Mode fixes #2
  2647.  
  2648.         private void selectBGToolStripMenuItem_Click(object sender, EventArgs e)
  2649.         {
  2650.             // Call the method to change the background color
  2651.             SetBackgroundColor();
  2652.         }
  2653.  
  2654.         private string GetFriendlyColorName(string hexColor)
  2655.         {
  2656.             Color color = ColorTranslator.FromHtml(hexColor);
  2657.  
  2658.             // Check if the color is one of the known colors
  2659.             foreach (KnownColor knownColor in Enum.GetValues(typeof(KnownColor)))
  2660.             {
  2661.                 Color knownColorObj = Color.FromKnownColor(knownColor);
  2662.  
  2663.                 if (knownColorObj.ToArgb() == color.ToArgb())
  2664.                 {
  2665.                     return knownColorObj.Name;
  2666.                 }
  2667.             }
  2668.  
  2669.             // If not a known color, return the original hex color
  2670.             return hexColor;
  2671.         }
  2672.  
  2673.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2674. Start #9 Silhouette
  2675. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2676.         private void pb_canvas_MouseLeave(object sender, EventArgs e)
  2677.         {
  2678.             pb_canvas.Invalidate();
  2679.             Cursor.Show();
  2680.             // Reset the cursor to default when leaving the drawing area
  2681.             pb_canvas.Cursor = Cursors.Default;
  2682.         }
  2683.  
  2684.         // Moved silhouette generation to a separate method for clarity
  2685.         private void GenerateSilhouettes()
  2686.         {
  2687.             brushSilhouette = GenerateBrushSilhouette(p.Width, color);
  2688.             eraserSilhouette = GenerateEraserSilhouette(eraserSize);
  2689.         }
  2690.  
  2691.         private void pb_canvas_MouseEnter(object sender, EventArgs e)
  2692.         {
  2693.             //RestorePreviousToolSettings();
  2694.             GenerateSilhouettes(); //++--
  2695.  
  2696.             Cursor.Hide();
  2697.             //hiding this block to test for Silhouette bugs
  2698.             /*if (!isEraserActive && brushSilhouette != null)
  2699.             {
  2700.                 int xHotSpot = brushSilhouette.Width / 2;
  2701.                 int yHotSpot = brushSilhouette.Height / 2;
  2702.                 pb_canvas.Cursor = CreateCursor(brushSilhouette, xHotSpot, yHotSpot);
  2703.             }
  2704.             else if (isEraserActive && eraserSilhouette != null)
  2705.             {
  2706.                 int xHotSpot = eraserSilhouette.Width / 2;
  2707.                 int yHotSpot = eraserSilhouette.Height / 2;
  2708.                 pb_canvas.Cursor = CreateCursor(eraserSilhouette, xHotSpot, yHotSpot);
  2709.             }*/
  2710.         }
  2711.  
  2712.         private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  2713.         {
  2714.             // Display a confirmation message box
  2715.             DialogResult result = MessageBox.Show("Are you sure you want to exit?", "Confirm Exit", MessageBoxButtons.YesNo);
  2716.  
  2717.             // If the user chooses No, cancel the closing process
  2718.             if (result == DialogResult.No)
  2719.             {
  2720.                 e.Cancel = true;
  2721.             }
  2722.         }
  2723.  
  2724.  
  2725.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2726. Start #35 Silhouette adding persistent values
  2727. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2728.         /*RestorePreviousToolSettings();
  2729.         GenerateSilhouettes();
  2730.  
  2731.         Cursor.Hide();
  2732.         if (!isEraserActive && brushSilhouette != null)
  2733.         {
  2734.             int xHotSpot = brushSilhouette.Width / 2;
  2735.             int yHotSpot = brushSilhouette.Height / 2;
  2736.             pb_canvas.Cursor = CreateCursor(brushSilhouette, xHotSpot, yHotSpot);
  2737.         }
  2738.         else if (isEraserActive && eraserSilhouette != null)
  2739.         {
  2740.             int xHotSpot = eraserSilhouette.Width / 2;
  2741.             int yHotSpot = eraserSilhouette.Height / 2;
  2742.             pb_canvas.Cursor = CreateCursor(eraserSilhouette, xHotSpot, yHotSpot);
  2743.         }
  2744.     }*/
  2745.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2746.         End #35 Silhouette adding persistent values
  2747.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2748.  
  2749.  
  2750.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2751. Start #31 Silhouette adding persistent values
  2752. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2753.         /*RestorePreviousToolSettings();
  2754.         GenerateSilhouettes();
  2755.  
  2756.         Cursor.Hide();
  2757.         if (!isEraserActive && brushSilhouette != null)
  2758.         {
  2759.             pb_canvas.Cursor = CreateCursor(brushSilhouette, brushSilhouette.Width / 2, brushSilhouette.Height / 2);
  2760.         }
  2761.         else if (isEraserActive && eraserSilhouette != null)
  2762.         {
  2763.             pb_canvas.Cursor = CreateCursor(eraserSilhouette, eraserSilhouette.Width / 2, eraserSilhouette.Height / 2);
  2764.         }
  2765.     }*/
  2766.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2767.         End #31 Silhouette adding persistent values
  2768.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2769.  
  2770.  
  2771.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2772. Start #29 Silhouette adding persistent values
  2773. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2774.         /*RestorePreviousToolSettings();
  2775.         GenerateSilhouettes();
  2776.         Cursor.Hide();
  2777.         if (!isEraserActive)
  2778.         {
  2779.             pb_canvas.Cursor = CreateCursor(brushSilhouette, (int)p.Width / 2, (int)p.Width / 2);
  2780.         }
  2781.         else
  2782.         {
  2783.             pb_canvas.Cursor = CreateCursor(eraserSilhouette, eraserSize / 2, eraserSize / 2);
  2784.         }
  2785.     }*/
  2786.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2787.         End #29 Silhouette adding persistent values
  2788.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2789.  
  2790.  
  2791.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2792. Start #24 Silhouette adding persistent values
  2793. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2794.         /*GenerateSilhouettes();
  2795.         Cursor.Hide();
  2796.         //delete these "if else" if unnecessary
  2797.         // Set the cursor to the brush silhouette when not using the eraser
  2798.         if (!isEraserActive)
  2799.         {
  2800.             pb_canvas.Cursor = CreateCursor(brushSilhouette, (int)p.Width / 2, (int)p.Width / 2);
  2801.         }
  2802.         // Set the cursor to the eraser silhouette when using the eraser
  2803.         else
  2804.         {
  2805.             pb_canvas.Cursor = CreateCursor(eraserSilhouette, eraserSize / 2, eraserSize / 2);
  2806.         }
  2807.         //below was in original working condition, relocated for better updates
  2808.         // Generate brush silhouette
  2809.         //brushSilhouette = GenerateBrushSilhouette(p.Width, color);
  2810.  
  2811.         // Generate eraser silhouette
  2812.         //eraserSilhouette = GenerateEraserSilhouette(eraserSize);
  2813.     }*/
  2814.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2815.         End #24 Silhouette adding persistent values
  2816.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2817.  
  2818.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2819. End #9 Silhouette
  2820. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2821.  
  2822.         //delete if unnecessary
  2823.         /*private Cursor CreateCursor(Bitmap bitmap, int xHotSpot, int yHotSpot)
  2824.         {
  2825.             IntPtr iconHandle = bitmap.GetHicon();
  2826.             Icon customIcon = Icon.FromHandle(iconHandle);
  2827.             Cursor customCursor = new Cursor(customIcon.Handle);
  2828.             DestroyIcon(iconHandle); // Cleanup icon handle to avoid resource leaks
  2829.             return customCursor;
  2830.         }
  2831.  
  2832.         [DllImport("user32.dll")]
  2833.         private static extern bool DestroyIcon(IntPtr handle);*/
  2834.  
  2835.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2836. Start #33 Silhouette adding persistent values
  2837. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2838.         /*IntPtr cursorHandle = bitmap.GetHicon();
  2839.         Cursor cursor = new Cursor(cursorHandle);
  2840.         cursor.HotSpot = new Point(xHotSpot, yHotSpot);
  2841.         return cursor;            
  2842.     }*/
  2843.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2844.             End #33 Silhouette adding persistent values
  2845.             .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2846.  
  2847.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2848. Start #30 Silhouette adding persistent values
  2849. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2850.         /*IntPtr cursorHandle = bitmap.GetHicon();
  2851.         return new Cursor(cursorHandle);            
  2852.     }*/
  2853.         /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2854.         End #30 Silhouette adding persistent values
  2855.         .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2856.  
  2857.         /*protected override void OnPaintBackground(PaintEventArgs e)
  2858.         {
  2859.             // Override the OnPaintBackground method to prevent default background painting.
  2860.             // This helps in avoiding the runtime exception when minimizing using Windows key + D.
  2861.             // Do nothing here to prevent the default behavior.
  2862.         }*/
  2863.     }
  2864. }
  2865. /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2866. Start #1 Silhouette
  2867. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2868.  
  2869. /*.o0o0o0o0o0o0o0o0o0o0o0o0o0o.
  2870. End #1 Silhouette
  2871. .o0o0o0o0o0o0o0o0o0o0o0o0o0o.*/
  2872.  
  2873. ==++"Form1.Designer.cs" File 2/2 SourceCode::++==
  2874. namespace Simple_Drawing_Application
  2875. {
  2876.     partial class Form1
  2877.     {
  2878.         /// <summary>
  2879.         /// Required designer variable.
  2880.         /// </summary>
  2881.         private System.ComponentModel.IContainer components = null;
  2882.  
  2883.         /// <summary>
  2884.         /// Clean up any resources being used.
  2885.         /// </summary>
  2886.         /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
  2887.         protected override void Dispose(bool disposing)
  2888.         {
  2889.             if (disposing && (components != null))
  2890.             {
  2891.                 components.Dispose();
  2892.             }
  2893.             base.Dispose(disposing);
  2894.         }
  2895.  
  2896.         #region Windows Form Designer generated code
  2897.  
  2898.         /// <summary>
  2899.         /// Required method for Designer support - do not modify
  2900.         /// the contents of this method with the code editor.
  2901.         /// </summary>
  2902.         private void InitializeComponent()
  2903.         {
  2904.             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
  2905.             this.label1 = new System.Windows.Forms.Label();
  2906.             this.comboBox1 = new System.Windows.Forms.ComboBox();
  2907.             this.menuStrip1 = new System.Windows.Forms.MenuStrip();
  2908.             this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
  2909.             this.loadImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
  2910.             this.saveImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
  2911.             this.quitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
  2912.             this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
  2913.             this.selectColorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
  2914.             this.setFontSizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
  2915.             this.selectBGToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
  2916.             this.clearToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
  2917.             this.paintbrushToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
  2918.             this.eraserToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
  2919.             this.undoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
  2920.             this.redoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
  2921.             this.button1 = new System.Windows.Forms.Button();
  2922.             this.txt_color = new System.Windows.Forms.TextBox();
  2923.             this.button2 = new System.Windows.Forms.Button();
  2924.             this.button3 = new System.Windows.Forms.Button();
  2925.             this.pb_canvas = new System.Windows.Forms.PictureBox();
  2926.             this.menuStrip1.SuspendLayout();
  2927.             ((System.ComponentModel.ISupportInitialize)(this.pb_canvas)).BeginInit();
  2928.             this.SuspendLayout();
  2929.             //
  2930.             // label1
  2931.             //
  2932.             this.label1.AutoSize = true;
  2933.             this.label1.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
  2934.             this.label1.Location = new System.Drawing.Point(1245, 39);
  2935.             this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
  2936.             this.label1.Name = "label1";
  2937.             this.label1.Size = new System.Drawing.Size(39, 18);
  2938.             this.label1.TabIndex = 1;
  2939.             this.label1.Text = "Size";
  2940.             this.label1.Visible = false;
  2941.             //
  2942.             // comboBox1
  2943.             //
  2944.             this.comboBox1.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
  2945.             this.comboBox1.FormattingEnabled = true;
  2946.             this.comboBox1.Items.AddRange(new object[] {
  2947.             "8",
  2948.             "9",
  2949.             "10",
  2950.             "11",
  2951.             "12",
  2952.             "14",
  2953.             "16",
  2954.             "18",
  2955.             "20",
  2956.             "22",
  2957.             "24",
  2958.             "26",
  2959.             "28",
  2960.             "36",
  2961.             "48",
  2962.             "72"});
  2963.             this.comboBox1.Location = new System.Drawing.Point(1295, 38);
  2964.             this.comboBox1.Margin = new System.Windows.Forms.Padding(2);
  2965.             this.comboBox1.Name = "comboBox1";
  2966.             this.comboBox1.Size = new System.Drawing.Size(53, 23);
  2967.             this.comboBox1.TabIndex = 2;
  2968.             this.comboBox1.Visible = false;
  2969.             //
  2970.             // menuStrip1
  2971.             //
  2972.             this.menuStrip1.ImageScalingSize = new System.Drawing.Size(24, 24);
  2973.             this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
  2974.             this.exitToolStripMenuItem,
  2975.             this.editToolStripMenuItem,
  2976.             this.paintbrushToolStripMenuItem,
  2977.             this.eraserToolStripMenuItem,
  2978.             this.undoToolStripMenuItem,
  2979.             this.redoToolStripMenuItem});
  2980.             this.menuStrip1.Location = new System.Drawing.Point(0, 0);
  2981.             this.menuStrip1.Name = "menuStrip1";
  2982.             this.menuStrip1.Padding = new System.Windows.Forms.Padding(4, 1, 0, 1);
  2983.             this.menuStrip1.Size = new System.Drawing.Size(1352, 24);
  2984.             this.menuStrip1.TabIndex = 3;
  2985.             this.menuStrip1.Text = "menuStrip1";
  2986.             //
  2987.             // exitToolStripMenuItem
  2988.             //
  2989.             this.exitToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
  2990.             this.loadImageToolStripMenuItem,
  2991.             this.saveImageToolStripMenuItem,
  2992.             this.quitToolStripMenuItem});
  2993.             this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
  2994.             this.exitToolStripMenuItem.Size = new System.Drawing.Size(43, 22);
  2995.             this.exitToolStripMenuItem.Text = "File";
  2996.             //
  2997.             // loadImageToolStripMenuItem
  2998.             //
  2999.             this.loadImageToolStripMenuItem.Name = "loadImageToolStripMenuItem";
  3000.             this.loadImageToolStripMenuItem.Size = new System.Drawing.Size(151, 22);
  3001.             this.loadImageToolStripMenuItem.Text = "Load Image";
  3002.             this.loadImageToolStripMenuItem.Click += new System.EventHandler(this.loadImageToolStripMenuItem_Click);
  3003.             //
  3004.             // saveImageToolStripMenuItem
  3005.             //
  3006.             this.saveImageToolStripMenuItem.Name = "saveImageToolStripMenuItem";
  3007.             this.saveImageToolStripMenuItem.Size = new System.Drawing.Size(151, 22);
  3008.             this.saveImageToolStripMenuItem.Text = "Save Image";
  3009.             this.saveImageToolStripMenuItem.Click += new System.EventHandler(this.saveImageToolStripMenuItem_Click);
  3010.             //
  3011.             // quitToolStripMenuItem
  3012.             //
  3013.             this.quitToolStripMenuItem.Name = "quitToolStripMenuItem";
  3014.             this.quitToolStripMenuItem.Size = new System.Drawing.Size(151, 22);
  3015.             this.quitToolStripMenuItem.Text = "Quit";
  3016.             this.quitToolStripMenuItem.Click += new System.EventHandler(this.quitToolStripMenuItem_Click);
  3017.             //
  3018.             // editToolStripMenuItem
  3019.             //
  3020.             this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
  3021.             this.selectColorToolStripMenuItem,
  3022.             this.setFontSizeToolStripMenuItem,
  3023.             this.selectBGToolStripMenuItem,
  3024.             this.clearToolStripMenuItem});
  3025.             this.editToolStripMenuItem.Name = "editToolStripMenuItem";
  3026.             this.editToolStripMenuItem.Size = new System.Drawing.Size(44, 22);
  3027.             this.editToolStripMenuItem.Text = "Edit";
  3028.             //
  3029.             // selectColorToolStripMenuItem
  3030.             //
  3031.             this.selectColorToolStripMenuItem.Name = "selectColorToolStripMenuItem";
  3032.             this.selectColorToolStripMenuItem.Size = new System.Drawing.Size(163, 22);
  3033.             this.selectColorToolStripMenuItem.Text = "Select Color";
  3034.             this.selectColorToolStripMenuItem.Click += new System.EventHandler(this.selectColorToolStripMenuItem_Click);
  3035.             //
  3036.             // setFontSizeToolStripMenuItem
  3037.             //
  3038.             this.setFontSizeToolStripMenuItem.Name = "setFontSizeToolStripMenuItem";
  3039.             this.setFontSizeToolStripMenuItem.Size = new System.Drawing.Size(163, 22);
  3040.             this.setFontSizeToolStripMenuItem.Text = "Set Font Size";
  3041.             this.setFontSizeToolStripMenuItem.Click += new System.EventHandler(this.setFontSizeToolStripMenuItem_Click);
  3042.             //
  3043.             // selectBGToolStripMenuItem
  3044.             //
  3045.             this.selectBGToolStripMenuItem.Name = "selectBGToolStripMenuItem";
  3046.             this.selectBGToolStripMenuItem.Size = new System.Drawing.Size(163, 22);
  3047.             this.selectBGToolStripMenuItem.Text = "Select BG";
  3048.             this.selectBGToolStripMenuItem.Click += new System.EventHandler(this.selectBGToolStripMenuItem_Click);
  3049.             //
  3050.             // clearToolStripMenuItem
  3051.             //
  3052.             this.clearToolStripMenuItem.Name = "clearToolStripMenuItem";
  3053.             this.clearToolStripMenuItem.Size = new System.Drawing.Size(163, 22);
  3054.             this.clearToolStripMenuItem.Text = "Clear";
  3055.             this.clearToolStripMenuItem.Click += new System.EventHandler(this.clearToolStripMenuItem_Click);
  3056.             //
  3057.             // paintbrushToolStripMenuItem
  3058.             //
  3059.             this.paintbrushToolStripMenuItem.Name = "paintbrushToolStripMenuItem";
  3060.             this.paintbrushToolStripMenuItem.Size = new System.Drawing.Size(90, 22);
  3061.             this.paintbrushToolStripMenuItem.Text = "Paintbrush";
  3062.             this.paintbrushToolStripMenuItem.Click += new System.EventHandler(this.paintbrushToolStripMenuItem_Click);
  3063.             //
  3064.             // eraserToolStripMenuItem
  3065.             //
  3066.             this.eraserToolStripMenuItem.Name = "eraserToolStripMenuItem";
  3067.             this.eraserToolStripMenuItem.Size = new System.Drawing.Size(61, 22);
  3068.             this.eraserToolStripMenuItem.Text = "Eraser";
  3069.             this.eraserToolStripMenuItem.Click += new System.EventHandler(this.eraserToolStripMenuItem_Click);
  3070.             //
  3071.             // undoToolStripMenuItem
  3072.             //
  3073.             this.undoToolStripMenuItem.Name = "undoToolStripMenuItem";
  3074.             this.undoToolStripMenuItem.Size = new System.Drawing.Size(52, 22);
  3075.             this.undoToolStripMenuItem.Text = "Undo";
  3076.             //
  3077.             // redoToolStripMenuItem
  3078.             //
  3079.             this.redoToolStripMenuItem.Name = "redoToolStripMenuItem";
  3080.             this.redoToolStripMenuItem.Size = new System.Drawing.Size(52, 22);
  3081.             this.redoToolStripMenuItem.Text = "Redo";
  3082.             //
  3083.             // button1
  3084.             //
  3085.             this.button1.Font = new System.Drawing.Font("Kdam Thmor Pro", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
  3086.             this.button1.Location = new System.Drawing.Point(1286, 225);
  3087.             this.button1.Margin = new System.Windows.Forms.Padding(2);
  3088.             this.button1.Name = "button1";
  3089.             this.button1.Size = new System.Drawing.Size(64, 85);
  3090.             this.button1.TabIndex = 4;
  3091.             this.button1.Text = "Color";
  3092.             this.button1.UseVisualStyleBackColor = true;
  3093.             this.button1.Visible = false;
  3094.             //
  3095.             // txt_color
  3096.             //
  3097.             this.txt_color.Font = new System.Drawing.Font("Kdam Thmor Pro", 8.999999F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
  3098.             this.txt_color.Location = new System.Drawing.Point(1286, 314);
  3099.             this.txt_color.Margin = new System.Windows.Forms.Padding(2);
  3100.             this.txt_color.Name = "txt_color";
  3101.             this.txt_color.ReadOnly = true;
  3102.             this.txt_color.Size = new System.Drawing.Size(65, 26);
  3103.             this.txt_color.TabIndex = 5;
  3104.             this.txt_color.Visible = false;
  3105.             //
  3106.             // button2
  3107.             //
  3108.             this.button2.Font = new System.Drawing.Font("Kdam Thmor Pro", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
  3109.             this.button2.Location = new System.Drawing.Point(1286, 119);
  3110.             this.button2.Margin = new System.Windows.Forms.Padding(2);
  3111.             this.button2.Name = "button2";
  3112.             this.button2.Size = new System.Drawing.Size(62, 43);
  3113.             this.button2.TabIndex = 6;
  3114.             this.button2.Text = "Save";
  3115.             this.button2.UseVisualStyleBackColor = true;
  3116.             this.button2.Visible = false;
  3117.             //
  3118.             // button3
  3119.             //
  3120.             this.button3.Font = new System.Drawing.Font("Kdam Thmor Pro", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
  3121.             this.button3.Location = new System.Drawing.Point(1286, 367);
  3122.             this.button3.Margin = new System.Windows.Forms.Padding(2);
  3123.             this.button3.Name = "button3";
  3124.             this.button3.Size = new System.Drawing.Size(62, 43);
  3125.             this.button3.TabIndex = 7;
  3126.             this.button3.Text = "Clear";
  3127.             this.button3.UseVisualStyleBackColor = true;
  3128.             this.button3.Visible = false;
  3129.             //
  3130.             // pb_canvas
  3131.             //
  3132.             this.pb_canvas.BackColor = System.Drawing.Color.Transparent;
  3133.             this.pb_canvas.Cursor = System.Windows.Forms.Cursors.Default;
  3134.             this.pb_canvas.Dock = System.Windows.Forms.DockStyle.Fill;
  3135.             this.pb_canvas.Location = new System.Drawing.Point(0, 24);
  3136.             this.pb_canvas.Margin = new System.Windows.Forms.Padding(2);
  3137.             this.pb_canvas.Name = "pb_canvas";
  3138.             this.pb_canvas.Size = new System.Drawing.Size(1352, 703);
  3139.             this.pb_canvas.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
  3140.             this.pb_canvas.TabIndex = 0;
  3141.             this.pb_canvas.TabStop = false;
  3142.             this.pb_canvas.WaitOnLoad = true;
  3143.             this.pb_canvas.Paint += new System.Windows.Forms.PaintEventHandler(this.pb_canvas_Paint);
  3144.             this.pb_canvas.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pb_canvas_MouseDown);
  3145.             this.pb_canvas.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pb_canvas_MouseMove);
  3146.             this.pb_canvas.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pb_canvas_MouseUp);
  3147.             //
  3148.             // Form1
  3149.             //
  3150.             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
  3151.             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
  3152.             this.BackColor = System.Drawing.SystemColors.ButtonHighlight;
  3153.             this.ClientSize = new System.Drawing.Size(1352, 727);
  3154.             this.Controls.Add(this.button3);
  3155.             this.Controls.Add(this.button2);
  3156.             this.Controls.Add(this.txt_color);
  3157.             this.Controls.Add(this.button1);
  3158.             this.Controls.Add(this.comboBox1);
  3159.             this.Controls.Add(this.label1);
  3160.             this.Controls.Add(this.pb_canvas);
  3161.             this.Controls.Add(this.menuStrip1);
  3162.             this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
  3163.             this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
  3164.             this.MainMenuStrip = this.menuStrip1;
  3165.             this.Margin = new System.Windows.Forms.Padding(2);
  3166.             this.Name = "Form1";
  3167.             this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
  3168.             this.Text = "Absence of Euphoria (Default Size = 12 14 23 Eraser = 50 26 Color = #FF0000 #FF80" +
  3169.     "40)";
  3170.             this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
  3171.             this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
  3172.             this.Load += new System.EventHandler(this.Form1_Load);
  3173.             this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);
  3174.             this.Resize += new System.EventHandler(this.Form1_Resize);
  3175.             this.menuStrip1.ResumeLayout(false);
  3176.             this.menuStrip1.PerformLayout();
  3177.             ((System.ComponentModel.ISupportInitialize)(this.pb_canvas)).EndInit();
  3178.             this.ResumeLayout(false);
  3179.             this.PerformLayout();
  3180.  
  3181.         }
  3182.  
  3183.         #endregion
  3184.  
  3185.         private System.Windows.Forms.PictureBox pb_canvas;
  3186.         private System.Windows.Forms.Label label1;
  3187.         private System.Windows.Forms.ComboBox comboBox1;
  3188.         private System.Windows.Forms.MenuStrip menuStrip1;
  3189.         private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
  3190.         private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem;
  3191.         private System.Windows.Forms.ToolStripMenuItem clearToolStripMenuItem;
  3192.         private System.Windows.Forms.ToolStripMenuItem quitToolStripMenuItem;
  3193.         private System.Windows.Forms.Button button1;
  3194.         private System.Windows.Forms.TextBox txt_color;
  3195.         private System.Windows.Forms.Button button2;
  3196.         private System.Windows.Forms.Button button3;
  3197.         private System.Windows.Forms.ToolStripMenuItem paintbrushToolStripMenuItem;
  3198.         private System.Windows.Forms.ToolStripMenuItem eraserToolStripMenuItem;
  3199.         private System.Windows.Forms.ToolStripMenuItem loadImageToolStripMenuItem;
  3200.         private System.Windows.Forms.ToolStripMenuItem saveImageToolStripMenuItem;
  3201.         private System.Windows.Forms.ToolStripMenuItem selectColorToolStripMenuItem;
  3202.         private System.Windows.Forms.ToolStripMenuItem setFontSizeToolStripMenuItem;
  3203.         private System.Windows.Forms.ToolStripMenuItem selectBGToolStripMenuItem;
  3204.         private System.Windows.Forms.ToolStripMenuItem undoToolStripMenuItem;
  3205.         private System.Windows.Forms.ToolStripMenuItem redoToolStripMenuItem;
  3206.     }
  3207. }
  3208.  
  3209.  
Tags: #multifile
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement