using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Text;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

namespace ShiftOS
{
    public partial class Artpad : Form
    {
        /// <summary>
        /// Artpad's GUI.
        /// </summary>
        public Artpad()
        {
            InitializeComponent();
        }

        #region Variables

        public int rolldownsize;
        public int oldbordersize;
        public int oldtitlebarheight;
        public bool justopened = false;
        public bool needtorollback = false;
        public int minimumsizewidth = 502;

        public int minimumsizeheight = 398;
        public int codepointsearned;
        public bool codepointscooldown = false;

        public bool needtosave = false;
        int canvaswidth = 150;
        int canvasheight = 100;
        public Bitmap canvasbitmap;

        Color canvascolor = Color.White;

        Bitmap previewcanvasbitmap;
        int magnificationlevel = 1;
        Rectangle magnifyRect;
        Graphics graphicsbitmap;
        public Color drawingcolour = Color.Black;
        string selectedtool = "Pixel Setter";
        bool pixalplacermovable = false;
        public string savelocation;
        System.Drawing.Drawing2D.GraphicsPath mousePath = new System.Drawing.Drawing2D.GraphicsPath();
        int pencilwidth = 1;
        undo undo = new undo();
        Point thisPoint;
        int eracerwidth = 15;

        string eracertype = "square";
        int paintbrushwidth = 15;

        string paintbrushtype = "circle";
        float rectanglestartpointx;
        float rectanglestartpointy;
        bool currentlydrawingsquare;
        int squarewidth = 1;
        bool squarefillon = false;

        Color fillsquarecolor = Color.Black;
        float ovalstartpointx;
        float ovalstartpointy;
        bool currentlydrawingoval;
        int ovalwidth = 2;
        bool ovalfillon = false;

        Color fillovalcolor = Color.Black;
        float linestartpointx;
        float linestartpointy;
        bool currentlydrawingline;

        int linewidth = 2;
        bool currentlydrawingtext;
        System.Drawing.Font drawtextfont = new System.Drawing.Font("Microsoft Sans Serif", 16);
        int drawtextsize;
        string drawtextfontname;

        FontStyle drawtextfontstyle;

        #endregion

        #region Setup

        private void Template_Load(object sender, EventArgs e)
        {
            justopened = true;
            this.Left = (Screen.PrimaryScreen.Bounds.Width - this.Width) / 2;
            this.Top = (Screen.PrimaryScreen.Bounds.Height - this.Height) / 2;

            setuppreview();
            settoolcolours();
            loadcolors();
            AddFonts();
            setuptoolbox();
            determinevisiblepallets();
            tmrsetupui.Start();
        }

        

        public void setupcanvas()
        {
            canvasbitmap = new Bitmap(canvaswidth, canvasheight);
            previewcanvasbitmap = new Bitmap(canvaswidth, canvasheight);
            picdrawingdisplay.Size = new Size(canvaswidth, canvasheight);
            picdrawingdisplay.Location = new Point((pnldrawingbackground.Width - canvaswidth) / 2, (pnldrawingbackground.Height - canvasheight) / 2);
            graphicsbitmap = Graphics.FromImage(canvasbitmap);
            SolidBrush canvasbrush = new SolidBrush(canvascolor);
            graphicsbitmap.FillRectangle(canvasbrush, 0, 0, canvaswidth, canvasheight);
            magnificationlevel = 1;
            lblzoomlevel.Text = magnificationlevel + "X";
            setuppreview();
            needtosave = false;
        }

        public void setuptoolbox()
        {
            btnpixelplacer.Hide();
            btnpencil.Hide();
            btnfloodfill.Hide();
            btnoval.Hide();
            btnsquare.Hide();
            btnlinetool.Hide();
            btnpaintbrush.Hide();
            btntexttool.Hide();
            btneracer.Hide();
            btnnew.Hide();
            btnopen.Hide();
            btnsave.Hide();
            btnundo.Hide();
            btnredo.Hide();
            btnpixelplacermovementmode.Hide();

            if (API.Upgrades["artpadpixelplacer"] == true)
                btnpixelplacer.Show();
            if (API.Upgrades["artpadpencil"] == true)
                btnpencil.Show();
            if (API.Upgrades["artpadfilltool"] == true)
                btnfloodfill.Show();
            if (API.Upgrades["artpadovaltool"] == true)
                btnoval.Show();
            if (API.Upgrades["artpadrectangletool"] == true)
                btnsquare.Show();
            if (API.Upgrades["artpadlinetool"] == true)
                btnlinetool.Show();
            if (API.Upgrades["artpadpaintbrush"] == true)
                btnpaintbrush.Show();
            if (API.Upgrades["artpadtexttool"] == true)
                btntexttool.Show();
            if (API.Upgrades["artpaderaser"] == true)
                btneracer.Show();
            if (API.Upgrades["artpadnew"] == true)
                btnnew.Show();
            if (API.Upgrades["artpadload"] == true)
                btnopen.Show();
            if (API.Upgrades["artpadsave"] == true)
                btnsave.Show();
            if (API.Upgrades["artpadundo"] == true)
                btnundo.Show();
            if (API.Upgrades["artpadredo"] == true)
                btnredo.Show();
            if (API.Upgrades["artpadppmovementmode"] == true)
                btnpixelplacermovementmode.Show();

        }

        private void AddFonts()
        {
            // Get the installed fonts collection.
            InstalledFontCollection allFonts = new InstalledFontCollection();

            // Get an array of the system's font familiies.
            FontFamily[] fontFamilies = allFonts.Families;

            // Display the font families.
            foreach (FontFamily myFont in fontFamilies)
            {
                combodrawtextfont.Items.Add(myFont.Name);
            }
            //font_family

            combodrawtextfont.SelectedItem = combodrawtextfont.Items[1];
            combofontstyle.Text = "Regular";
            txtdrawtextsize.Text = "16";
        }

        #endregion

        #region General

        // ERROR: Handles clauses are not supported in C#
        private void btnpixelsetter_Click(object sender, EventArgs e)
        {
            selectedtool = "Pixel Setter";
            gettoolsettings(pnlpixelsettersettings);
        }

        private void gettoolsettings(Panel toolpanel)
        {
            //hide all properties panels
            pnlpixelsettersettings.Hide();
            pnlmagnifiersettings.Hide();

            //show chosen panel
            toolpanel.Dock = DockStyle.Fill;
            toolpanel.BringToFront();
            toolpanel.Show();

            setuppreview();
        }

        // ERROR: Handles clauses are not supported in C#
        private void btnpixelsettersetpixel_Click(object sender, EventArgs e)
        {
            try
            {
                undo.undoStack.Push((Image)canvasbitmap.Clone());
                undo.redoStack.Clear();
                canvasbitmap.SetPixel(Convert.ToInt32(txtpixelsetterxcoordinate.Text), Convert.ToInt32(txtpixelsetterycoordinate.Text), drawingcolour);
                picdrawingdisplay.Invalidate();
            }
            catch (Exception ex)
            {
                API.CreateInfoboxSession("ArtPad - Placement Error!", "You have specified invalid coordinates for the pixel setter." + Environment.NewLine + Environment.NewLine + "Remember that the top left pixel has the coordinates 0, 0", infobox.InfoboxMode.Info);
            }
        }

        // ERROR: Handles clauses are not supported in C#
        private void btnmagnify_Click(object sender, EventArgs e)
        {
            selectedtool = "Magnifier";
            gettoolsettings(pnlmagnifiersettings);
        }

        #endregion

        #region Drawing Display

        // ERROR: Handles clauses are not supported in C#
        private void picdrawingdisplay_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            e.Graphics.FillRectangle(Brushes.White, 0, 0, canvaswidth * magnificationlevel, canvasheight * magnificationlevel);
            e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
            e.Graphics.PixelOffsetMode = PixelOffsetMode.Half;
            e.Graphics.ScaleTransform(magnificationlevel, magnificationlevel);

            if (currentlydrawingsquare == true)
            {
                GC.Collect();
                Graphics g = Graphics.FromImage(previewcanvasbitmap);
                previewcanvasbitmap = new Bitmap(canvasbitmap.Width, canvasbitmap.Height);
                g = Graphics.FromImage(previewcanvasbitmap);
                var CurrentPen = new Pen(Color.FromArgb(255, drawingcolour), squarewidth);
                var CurrentBrush = new SolidBrush(Color.FromArgb(255, fillsquarecolor));
                RectangleF rectdraw = new RectangleF(rectanglestartpointx, rectanglestartpointy, thisPoint.X - rectanglestartpointx, thisPoint.Y - rectanglestartpointy);
                int heightamount;
                int widthamount;
                if (rectdraw.Height < 0)
                    heightamount = (int)Math.Abs(rectdraw.Height);
                else
                    heightamount = 0;
                if (rectdraw.Width < 0)
                    widthamount = (int)Math.Abs(rectdraw.Width);
                else
                    widthamount = 0;
                if (squarewidth > 0)
                {
                    g.DrawRectangle(CurrentPen, rectdraw.X - widthamount, rectdraw.Y - heightamount, Math.Abs(rectdraw.Width), Math.Abs(rectdraw.Height));
                }
                if (squarefillon == true)
                {
                    float correctionamount = squarewidth / 2;
                    int addfillamount;
                    if (squarewidth > 0)
                        addfillamount = squarewidth;
                    else
                        addfillamount = -1;
                    g.FillRectangle(CurrentBrush, (rectdraw.X - widthamount) + correctionamount, (rectdraw.Y - heightamount) + correctionamount, Math.Abs(rectdraw.Width) - addfillamount, Math.Abs(rectdraw.Height) - addfillamount);
                }
            }

            if (currentlydrawingoval == true)
            {
                GC.Collect();
                Graphics g = Graphics.FromImage(previewcanvasbitmap);
                previewcanvasbitmap = new Bitmap(canvasbitmap.Width, canvasbitmap.Height);
                g = Graphics.FromImage(previewcanvasbitmap);
                var CurrentPen = new Pen(Color.FromArgb(255, drawingcolour), ovalwidth);
                var CurrentBrush = new SolidBrush(Color.FromArgb(255, fillovalcolor));
                RectangleF ovaldraw = new RectangleF(ovalstartpointx, ovalstartpointy, thisPoint.X - ovalstartpointx, thisPoint.Y - ovalstartpointy);
                int heightamount;
                int widthamount;
                if (ovaldraw.Height < 0)
                    heightamount = (int)Math.Abs(ovaldraw.Height);
                else
                    heightamount = 0;
                if (ovaldraw.Width < 0)
                    widthamount = (int)Math.Abs(ovaldraw.Width);
                else
                    widthamount = 0;
                if (ovalwidth > 0)
                {
                    g.DrawEllipse(CurrentPen, ovaldraw.X - widthamount, ovaldraw.Y - heightamount, Math.Abs(ovaldraw.Width), Math.Abs(ovaldraw.Height));
                }
                if (ovalfillon == true)
                {
                    g.FillEllipse(CurrentBrush, (ovaldraw.X - widthamount), (ovaldraw.Y - heightamount), Math.Abs(ovaldraw.Width), Math.Abs(ovaldraw.Height));
                }
            }

            if (currentlydrawingline == true)
            {
                GC.Collect();
                Graphics g = Graphics.FromImage(previewcanvasbitmap);
                previewcanvasbitmap = new Bitmap(canvasbitmap.Width, canvasbitmap.Height);
                g = Graphics.FromImage(previewcanvasbitmap);
                var CurrentPen = new Pen(Color.FromArgb(255, drawingcolour), linewidth);
                g.DrawLine(CurrentPen, linestartpointx, linestartpointy, thisPoint.X, thisPoint.Y);
            }

            if (currentlydrawingtext == true)
            {
                GC.Collect();
                Graphics g = Graphics.FromImage(previewcanvasbitmap);
                previewcanvasbitmap = new Bitmap(canvasbitmap.Width, canvasbitmap.Height);
                g = Graphics.FromImage(previewcanvasbitmap);
                var CurrentBrush = new SolidBrush(Color.FromArgb(255, drawingcolour));
                g.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit;
                drawtextfont = new System.Drawing.Font(drawtextfontname, drawtextsize, drawtextfontstyle);
                g.DrawString(txtdrawstringtext.Text, drawtextfont, CurrentBrush, thisPoint.X, thisPoint.Y);
            }
            try
            {
                e.Graphics.DrawImage(canvasbitmap, 0, 0);
                e.Graphics.DrawImage(previewcanvasbitmap, 0, 0);
            }
            catch (System.OutOfMemoryException ex)
            {
                
            }
        }



        // ERROR: Handles clauses are not supported in C#
        private void picdrawingdisplay_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            undo.undoStack.Push((Image)canvasbitmap.Clone());
            undo.redoStack.Clear();


            thisPoint.X = (int)(e.Location.X - (magnificationlevel / 2)) / magnificationlevel;
            thisPoint.Y = (int)(e.Location.Y - (magnificationlevel / 2)) / magnificationlevel;

            if (selectedtool == "Pixel Placer")
            {
                if (e.Button == MouseButtons.Left)
                {
                    if (thisPoint.X < canvasbitmap.Width && thisPoint.X > -1)
                    {
                        if (thisPoint.Y < canvasbitmap.Height && thisPoint.Y > -1)
                        {
                            canvasbitmap.SetPixel(thisPoint.X, thisPoint.Y, drawingcolour);
                            //set the pixel on the canvas
                            picdrawingdisplay.Invalidate();
                            //refresh the picture from the canvas
                        }
                    }
                }
            }

            if (selectedtool == "Pencil")
            {
                if (e.Button == MouseButtons.Left)
                {
                    mousePath.StartFigure();
                    picdrawingdisplay.Invalidate();
                }
            }

            if (selectedtool == "Flood Fill")
            {
                if (e.Button == MouseButtons.Left)
                {
                    if (thisPoint.X < canvasbitmap.Width && thisPoint.X > -1)
                    {
                        if (thisPoint.Y < canvasbitmap.Height && thisPoint.Y > -1)
                        {
                            SafeFloodFill(canvasbitmap, thisPoint.X, thisPoint.Y, drawingcolour);
                            graphicsbitmap = Graphics.FromImage(canvasbitmap);
                            picdrawingdisplay.Invalidate();
                        }
                    }
                }
            }

            if (selectedtool == "Square Tool")
            {
                if (e.Button == MouseButtons.Left)
                {
                    rectanglestartpointx = thisPoint.X;
                    rectanglestartpointy = thisPoint.Y;
                    currentlydrawingsquare = true;
                    picdrawingdisplay.Invalidate();
                }
            }

            if (selectedtool == "Oval Tool")
            {
                if (e.Button == MouseButtons.Left)
                {
                    ovalstartpointx = thisPoint.X;
                    ovalstartpointy = thisPoint.Y;
                    currentlydrawingoval = true;
                    picdrawingdisplay.Invalidate();
                }
            }

            if (selectedtool == "Line Tool")
            {
                if (e.Button == MouseButtons.Left)
                {
                    linestartpointx = thisPoint.X;
                    linestartpointy = thisPoint.Y;
                    currentlydrawingline = true;
                    picdrawingdisplay.Invalidate();
                }
            }

            if (selectedtool == "Text Tool")
            {
                if (e.Button == MouseButtons.Left)
                {
                    currentlydrawingtext = true;
                    picdrawingdisplay.Invalidate();
                }
            }

            if (selectedtool == "Eracer")
            {
                var CurrentPen = new Pen(Color.FromArgb(255, canvascolor), eracerwidth);
                float halfsize = eracerwidth / 2;
                if (eracertype == "circle")
                {
                    graphicsbitmap.DrawEllipse(CurrentPen, thisPoint.X - halfsize, thisPoint.Y - halfsize, eracerwidth, eracerwidth);
                }
                else {
                    graphicsbitmap.DrawRectangle(CurrentPen, thisPoint.X - halfsize, thisPoint.Y - halfsize, eracerwidth, eracerwidth);
                }
                picdrawingdisplay.Invalidate();
            }

            if (selectedtool == "Paint Brush")
            {
                var CurrentBrush = new SolidBrush(Color.FromArgb(255, drawingcolour));
                float halfsize = paintbrushwidth / 2;
                if (paintbrushtype == "circle")
                {
                    graphicsbitmap.FillEllipse(CurrentBrush, thisPoint.X - halfsize, thisPoint.Y - halfsize, paintbrushwidth, paintbrushwidth);
                }
                else {
                    graphicsbitmap.FillRectangle(CurrentBrush, thisPoint.X - halfsize, thisPoint.Y - halfsize, paintbrushwidth, paintbrushwidth);
                }
                picdrawingdisplay.Invalidate();
                CurrentBrush.Dispose();
            }
            preparecooldown();
        }

        // ERROR: Handles clauses are not supported in C#
        private void picdrawingdisplay_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            Point lastpoint;

            thisPoint.X = (int)(e.Location.X - (magnificationlevel / 2)) / magnificationlevel;
            thisPoint.Y = (int)(e.Location.Y - (magnificationlevel / 2)) / magnificationlevel;


            if (e.Button == MouseButtons.Left)
            {
                undo.redoStack.Clear();
                lastpoint = thisPoint;
                preparecooldown();

                if (selectedtool == "Pixel Placer" && pixalplacermovable == true)
                {
                    if (thisPoint.X < canvasbitmap.Width && thisPoint.X > -1)
                    {
                        if (thisPoint.Y < canvasbitmap.Height && thisPoint.Y > -1)
                        {
                            canvasbitmap.SetPixel(thisPoint.X, thisPoint.Y, drawingcolour);
                            //set the pixel on the canvas
                            picdrawingdisplay.Invalidate();
                            //refresh the picture from the canvas
                        }
                    }
                }

                if (selectedtool == "Pencil")
                {
                    mousePath.AddLine(thisPoint.X, thisPoint.Y, thisPoint.X, thisPoint.Y);
                    var CurrentPen = new Pen(Color.FromArgb(255, drawingcolour), pencilwidth);
                    graphicsbitmap.DrawPath(CurrentPen, mousePath);
                    picdrawingdisplay.Invalidate();
                }

                if (selectedtool == "Square Tool")
                {
                    picdrawingdisplay.Invalidate();
                }

                if (selectedtool == "Oval Tool")
                {
                    picdrawingdisplay.Invalidate();
                }

                if (selectedtool == "Line Tool")
                {
                    picdrawingdisplay.Invalidate();
                }

                if (selectedtool == "Text Tool")
                {
                    picdrawingdisplay.Invalidate();
                }

                if (selectedtool == "Eracer")
                {
                    var CurrentPen = new Pen(Color.FromArgb(255, canvascolor), eracerwidth);
                    float halfsize = eracerwidth / 2;
                    if (eracertype == "circle")
                    {
                        graphicsbitmap.DrawEllipse(CurrentPen, thisPoint.X - halfsize, thisPoint.Y - halfsize, eracerwidth, eracerwidth);
                    }
                    else {
                        graphicsbitmap.DrawRectangle(CurrentPen, thisPoint.X - halfsize, thisPoint.Y - halfsize, eracerwidth, eracerwidth);
                    }
                    picdrawingdisplay.Invalidate();
                }

                if (selectedtool == "Paint Brush")
                {
                    var CurrentBrush = new SolidBrush(Color.FromArgb(255, drawingcolour));
                    float halfsize = paintbrushwidth / 2;
                    if (paintbrushtype == "circle")
                    {
                        graphicsbitmap.FillEllipse(CurrentBrush, thisPoint.X - halfsize, thisPoint.Y - halfsize, paintbrushwidth, paintbrushwidth);
                    }
                    else {
                        graphicsbitmap.FillRectangle(CurrentBrush, thisPoint.X - halfsize, thisPoint.Y - halfsize, paintbrushwidth, paintbrushwidth);
                    }
                    picdrawingdisplay.Invalidate();
                }
            }

        }


        // ERROR: Handles clauses are not supported in C#
        private void picdrawingdisplay_MouseUp(object sender, MouseEventArgs e)
        {
            thisPoint.X = (int)(e.Location.X - (magnificationlevel / 2)) / magnificationlevel;
            thisPoint.Y = (int)(e.Location.Y - (magnificationlevel / 2)) / magnificationlevel;

            if (selectedtool == "Pencil")
            {
                if (e.Button == MouseButtons.Left)
                {
                    mousePath.Reset();
                }
            }

            if (selectedtool == "Square Tool")
            {
                picdrawingdisplay.Invalidate();
                currentlydrawingsquare = false;
            }

            if (selectedtool == "Oval Tool")
            {
                picdrawingdisplay.Invalidate();
                currentlydrawingoval = false;
            }


            if (selectedtool == "Line Tool")
            {
                picdrawingdisplay.Invalidate();
                currentlydrawingline = false;
            }

            if (selectedtool == "Text Tool")
            {
                picdrawingdisplay.Invalidate();
                currentlydrawingtext = false;
            }

            using (Graphics g = Graphics.FromImage(canvasbitmap))
            {
                g.DrawImage(previewcanvasbitmap, 0, 0);
            }
            previewcanvasbitmap = new Bitmap(canvasbitmap.Width, canvasbitmap.Height);
            picdrawingdisplay.Invalidate();
            preparecooldown();

        }

        #endregion

        #region Color Palettes
        // ERROR: Handles clauses are not supported in C#
        private void colourpallet1_MouseClick(object sender, MouseEventArgs e)
        {
            var s = (Control)sender;
            if (e.Button == MouseButtons.Left)
            {
                drawingcolour = s.BackColor;
                setuppreview();
                settoolcolours();
            }
            else {
                API.CreateColorPickerSession("Artpad Pallete Color", s.BackColor);
                API.ColorPickerSession.FormClosing += (object se, FormClosingEventArgs a) =>
                {
                    s.BackColor = API.GetLastColorFromSession();
                };
            }
        }

        //<unused>
        public void loadcolors()
        {
            /*bool allwhite = true;
            for (int i = 0; i <= 127; i++)
            {
                if (ShiftOSDesktop.artpadcolourpallets(i) == null)
                {
                }
                else {
                    allwhite = false;
                }
            }
            if (allwhite == true)
            {
                for (i = 0; i <= 127; i++)
                {
                    ShiftOSDesktop.artpadcolourpallets(i) = Color.Black;
                }
            }
            colourpallet1.BackColor = ShiftOSDesktop.artpadcolourpallets(0);
            colourpallet2.BackColor = ShiftOSDesktop.artpadcolourpallets(1);
            colourpallet3.BackColor = ShiftOSDesktop.artpadcolourpallets(2);
            colourpallet4.BackColor = ShiftOSDesktop.artpadcolourpallets(3);
            colourpallet5.BackColor = ShiftOSDesktop.artpadcolourpallets(4);
            colourpallet6.BackColor = ShiftOSDesktop.artpadcolourpallets(5);
            colourpallet7.BackColor = ShiftOSDesktop.artpadcolourpallets(6);
            colourpallet8.BackColor = ShiftOSDesktop.artpadcolourpallets(7);
            colourpallet9.BackColor = ShiftOSDesktop.artpadcolourpallets(8);
            colourpallet10.BackColor = ShiftOSDesktop.artpadcolourpallets(9);
            colourpallet11.BackColor = ShiftOSDesktop.artpadcolourpallets(10);
            colourpallet12.BackColor = ShiftOSDesktop.artpadcolourpallets(11);
            colourpallet13.BackColor = ShiftOSDesktop.artpadcolourpallets(12);
            colourpallet14.BackColor = ShiftOSDesktop.artpadcolourpallets(13);
            colourpallet15.BackColor = ShiftOSDesktop.artpadcolourpallets(14);
            colourpallet16.BackColor = ShiftOSDesktop.artpadcolourpallets(15);
            colourpallet17.BackColor = ShiftOSDesktop.artpadcolourpallets(16);
            colourpallet18.BackColor = ShiftOSDesktop.artpadcolourpallets(17);
            colourpallet19.BackColor = ShiftOSDesktop.artpadcolourpallets(18);
            colourpallet20.BackColor = ShiftOSDesktop.artpadcolourpallets(19);
            colourpallet21.BackColor = ShiftOSDesktop.artpadcolourpallets(20);
            colourpallet22.BackColor = ShiftOSDesktop.artpadcolourpallets(21);
            colourpallet23.BackColor = ShiftOSDesktop.artpadcolourpallets(22);
            colourpallet24.BackColor = ShiftOSDesktop.artpadcolourpallets(23);
            colourpallet25.BackColor = ShiftOSDesktop.artpadcolourpallets(24);
            colourpallet26.BackColor = ShiftOSDesktop.artpadcolourpallets(25);
            colourpallet27.BackColor = ShiftOSDesktop.artpadcolourpallets(26);
            colourpallet28.BackColor = ShiftOSDesktop.artpadcolourpallets(27);
            colourpallet29.BackColor = ShiftOSDesktop.artpadcolourpallets(28);
            colourpallet30.BackColor = ShiftOSDesktop.artpadcolourpallets(29);
            colourpallet31.BackColor = ShiftOSDesktop.artpadcolourpallets(30);
            colourpallet32.BackColor = ShiftOSDesktop.artpadcolourpallets(31);
            colourpallet33.BackColor = ShiftOSDesktop.artpadcolourpallets(32);
            colourpallet34.BackColor = ShiftOSDesktop.artpadcolourpallets(33);
            colourpallet35.BackColor = ShiftOSDesktop.artpadcolourpallets(34);
            colourpallet36.BackColor = ShiftOSDesktop.artpadcolourpallets(35);
            colourpallet37.BackColor = ShiftOSDesktop.artpadcolourpallets(36);
            colourpallet38.BackColor = ShiftOSDesktop.artpadcolourpallets(37);
            colourpallet39.BackColor = ShiftOSDesktop.artpadcolourpallets(38);
            colourpallet40.BackColor = ShiftOSDesktop.artpadcolourpallets(39);
            colourpallet41.BackColor = ShiftOSDesktop.artpadcolourpallets(40);
            colourpallet42.BackColor = ShiftOSDesktop.artpadcolourpallets(41);
            colourpallet43.BackColor = ShiftOSDesktop.artpadcolourpallets(42);
            colourpallet44.BackColor = ShiftOSDesktop.artpadcolourpallets(43);
            colourpallet45.BackColor = ShiftOSDesktop.artpadcolourpallets(44);
            colourpallet46.BackColor = ShiftOSDesktop.artpadcolourpallets(45);
            colourpallet47.BackColor = ShiftOSDesktop.artpadcolourpallets(46);
            colourpallet48.BackColor = ShiftOSDesktop.artpadcolourpallets(47);
            colourpallet49.BackColor = ShiftOSDesktop.artpadcolourpallets(48);
            colourpallet50.BackColor = ShiftOSDesktop.artpadcolourpallets(49);
            colourpallet51.BackColor = ShiftOSDesktop.artpadcolourpallets(50);
            colourpallet52.BackColor = ShiftOSDesktop.artpadcolourpallets(51);
            colourpallet53.BackColor = ShiftOSDesktop.artpadcolourpallets(52);
            colourpallet54.BackColor = ShiftOSDesktop.artpadcolourpallets(53);
            colourpallet55.BackColor = ShiftOSDesktop.artpadcolourpallets(54);
            colourpallet56.BackColor = ShiftOSDesktop.artpadcolourpallets(55);
            colourpallet57.BackColor = ShiftOSDesktop.artpadcolourpallets(56);
            colourpallet58.BackColor = ShiftOSDesktop.artpadcolourpallets(57);
            colourpallet59.BackColor = ShiftOSDesktop.artpadcolourpallets(58);
            colourpallet60.BackColor = ShiftOSDesktop.artpadcolourpallets(59);
            colourpallet61.BackColor = ShiftOSDesktop.artpadcolourpallets(60);
            colourpallet62.BackColor = ShiftOSDesktop.artpadcolourpallets(61);
            colourpallet63.BackColor = ShiftOSDesktop.artpadcolourpallets(62);
            colourpallet64.BackColor = ShiftOSDesktop.artpadcolourpallets(63);
            colourpallet65.BackColor = ShiftOSDesktop.artpadcolourpallets(64);
            colourpallet66.BackColor = ShiftOSDesktop.artpadcolourpallets(65);
            colourpallet67.BackColor = ShiftOSDesktop.artpadcolourpallets(66);
            colourpallet68.BackColor = ShiftOSDesktop.artpadcolourpallets(67);
            colourpallet69.BackColor = ShiftOSDesktop.artpadcolourpallets(68);
            colourpallet70.BackColor = ShiftOSDesktop.artpadcolourpallets(69);
            colourpallet71.BackColor = ShiftOSDesktop.artpadcolourpallets(70);
            colourpallet72.BackColor = ShiftOSDesktop.artpadcolourpallets(71);
            colourpallet73.BackColor = ShiftOSDesktop.artpadcolourpallets(72);
            colourpallet74.BackColor = ShiftOSDesktop.artpadcolourpallets(73);
            colourpallet75.BackColor = ShiftOSDesktop.artpadcolourpallets(74);
            colourpallet76.BackColor = ShiftOSDesktop.artpadcolourpallets(75);
            colourpallet77.BackColor = ShiftOSDesktop.artpadcolourpallets(76);
            colourpallet78.BackColor = ShiftOSDesktop.artpadcolourpallets(77);
            colourpallet79.BackColor = ShiftOSDesktop.artpadcolourpallets(78);
            colourpallet80.BackColor = ShiftOSDesktop.artpadcolourpallets(79);
            colourpallet81.BackColor = ShiftOSDesktop.artpadcolourpallets(80);
            colourpallet82.BackColor = ShiftOSDesktop.artpadcolourpallets(81);
            colourpallet83.BackColor = ShiftOSDesktop.artpadcolourpallets(82);
            colourpallet84.BackColor = ShiftOSDesktop.artpadcolourpallets(83);
            colourpallet85.BackColor = ShiftOSDesktop.artpadcolourpallets(84);
            colourpallet86.BackColor = ShiftOSDesktop.artpadcolourpallets(85);
            colourpallet87.BackColor = ShiftOSDesktop.artpadcolourpallets(86);
            colourpallet88.BackColor = ShiftOSDesktop.artpadcolourpallets(87);
            colourpallet89.BackColor = ShiftOSDesktop.artpadcolourpallets(88);
            colourpallet90.BackColor = ShiftOSDesktop.artpadcolourpallets(89);
            colourpallet91.BackColor = ShiftOSDesktop.artpadcolourpallets(90);
            colourpallet92.BackColor = ShiftOSDesktop.artpadcolourpallets(91);
            colourpallet93.BackColor = ShiftOSDesktop.artpadcolourpallets(92);
            colourpallet94.BackColor = ShiftOSDesktop.artpadcolourpallets(93);
            colourpallet95.BackColor = ShiftOSDesktop.artpadcolourpallets(94);
            colourpallet96.BackColor = ShiftOSDesktop.artpadcolourpallets(95);
            colourpallet97.BackColor = ShiftOSDesktop.artpadcolourpallets(96);
            colourpallet98.BackColor = ShiftOSDesktop.artpadcolourpallets(97);
            colourpallet99.BackColor = ShiftOSDesktop.artpadcolourpallets(98);
            colourpallet100.BackColor = ShiftOSDesktop.artpadcolourpallets(99);
            colourpallet101.BackColor = ShiftOSDesktop.artpadcolourpallets(100);
            colourpallet102.BackColor = ShiftOSDesktop.artpadcolourpallets(101);
            colourpallet103.BackColor = ShiftOSDesktop.artpadcolourpallets(102);
            colourpallet104.BackColor = ShiftOSDesktop.artpadcolourpallets(103);
            colourpallet105.BackColor = ShiftOSDesktop.artpadcolourpallets(104);
            colourpallet106.BackColor = ShiftOSDesktop.artpadcolourpallets(105);
            colourpallet107.BackColor = ShiftOSDesktop.artpadcolourpallets(106);
            colourpallet108.BackColor = ShiftOSDesktop.artpadcolourpallets(107);
            colourpallet109.BackColor = ShiftOSDesktop.artpadcolourpallets(108);
            colourpallet110.BackColor = ShiftOSDesktop.artpadcolourpallets(109);
            colourpallet111.BackColor = ShiftOSDesktop.artpadcolourpallets(110);
            colourpallet112.BackColor = ShiftOSDesktop.artpadcolourpallets(111);
            colourpallet113.BackColor = ShiftOSDesktop.artpadcolourpallets(112);
            colourpallet114.BackColor = ShiftOSDesktop.artpadcolourpallets(113);
            colourpallet115.BackColor = ShiftOSDesktop.artpadcolourpallets(114);
            colourpallet116.BackColor = ShiftOSDesktop.artpadcolourpallets(115);
            colourpallet117.BackColor = ShiftOSDesktop.artpadcolourpallets(116);
            colourpallet118.BackColor = ShiftOSDesktop.artpadcolourpallets(117);
            colourpallet119.BackColor = ShiftOSDesktop.artpadcolourpallets(118);
            colourpallet120.BackColor = ShiftOSDesktop.artpadcolourpallets(119);
            colourpallet121.BackColor = ShiftOSDesktop.artpadcolourpallets(120);
            colourpallet122.BackColor = ShiftOSDesktop.artpadcolourpallets(121);
            colourpallet123.BackColor = ShiftOSDesktop.artpadcolourpallets(122);
            colourpallet124.BackColor = ShiftOSDesktop.artpadcolourpallets(123);
            colourpallet125.BackColor = ShiftOSDesktop.artpadcolourpallets(124);
            colourpallet126.BackColor = ShiftOSDesktop.artpadcolourpallets(125);
            colourpallet127.BackColor = ShiftOSDesktop.artpadcolourpallets(126);
            colourpallet128.BackColor = ShiftOSDesktop.artpadcolourpallets(127);
        */}

        public void savecolors()
        {/*
            ShiftOSDesktop.artpadcolourpallets(0) = colourpallet1.BackColor;
            ShiftOSDesktop.artpadcolourpallets(1) = colourpallet2.BackColor;
            ShiftOSDesktop.artpadcolourpallets(2) = colourpallet3.BackColor;
            ShiftOSDesktop.artpadcolourpallets(3) = colourpallet4.BackColor;
            ShiftOSDesktop.artpadcolourpallets(4) = colourpallet5.BackColor;
            ShiftOSDesktop.artpadcolourpallets(5) = colourpallet6.BackColor;
            ShiftOSDesktop.artpadcolourpallets(6) = colourpallet7.BackColor;
            ShiftOSDesktop.artpadcolourpallets(7) = colourpallet8.BackColor;
            ShiftOSDesktop.artpadcolourpallets(8) = colourpallet9.BackColor;
            ShiftOSDesktop.artpadcolourpallets(9) = colourpallet10.BackColor;
            ShiftOSDesktop.artpadcolourpallets(10) = colourpallet11.BackColor;
            ShiftOSDesktop.artpadcolourpallets(11) = colourpallet12.BackColor;
            ShiftOSDesktop.artpadcolourpallets(12) = colourpallet13.BackColor;
            ShiftOSDesktop.artpadcolourpallets(13) = colourpallet14.BackColor;
            ShiftOSDesktop.artpadcolourpallets(14) = colourpallet15.BackColor;
            ShiftOSDesktop.artpadcolourpallets(15) = colourpallet16.BackColor;
            ShiftOSDesktop.artpadcolourpallets(16) = colourpallet17.BackColor;
            ShiftOSDesktop.artpadcolourpallets(17) = colourpallet18.BackColor;
            ShiftOSDesktop.artpadcolourpallets(18) = colourpallet19.BackColor;
            ShiftOSDesktop.artpadcolourpallets(19) = colourpallet20.BackColor;
            ShiftOSDesktop.artpadcolourpallets(20) = colourpallet21.BackColor;
            ShiftOSDesktop.artpadcolourpallets(21) = colourpallet22.BackColor;
            ShiftOSDesktop.artpadcolourpallets(22) = colourpallet23.BackColor;
            ShiftOSDesktop.artpadcolourpallets(23) = colourpallet24.BackColor;
            ShiftOSDesktop.artpadcolourpallets(24) = colourpallet25.BackColor;
            ShiftOSDesktop.artpadcolourpallets(25) = colourpallet26.BackColor;
            ShiftOSDesktop.artpadcolourpallets(26) = colourpallet27.BackColor;
            ShiftOSDesktop.artpadcolourpallets(27) = colourpallet28.BackColor;
            ShiftOSDesktop.artpadcolourpallets(28) = colourpallet29.BackColor;
            ShiftOSDesktop.artpadcolourpallets(29) = colourpallet30.BackColor;
            ShiftOSDesktop.artpadcolourpallets(30) = colourpallet31.BackColor;
            ShiftOSDesktop.artpadcolourpallets(31) = colourpallet32.BackColor;
            ShiftOSDesktop.artpadcolourpallets(32) = colourpallet33.BackColor;
            ShiftOSDesktop.artpadcolourpallets(33) = colourpallet34.BackColor;
            ShiftOSDesktop.artpadcolourpallets(34) = colourpallet35.BackColor;
            ShiftOSDesktop.artpadcolourpallets(35) = colourpallet36.BackColor;
            ShiftOSDesktop.artpadcolourpallets(36) = colourpallet37.BackColor;
            ShiftOSDesktop.artpadcolourpallets(37) = colourpallet38.BackColor;
            ShiftOSDesktop.artpadcolourpallets(38) = colourpallet39.BackColor;
            ShiftOSDesktop.artpadcolourpallets(39) = colourpallet40.BackColor;
            ShiftOSDesktop.artpadcolourpallets(40) = colourpallet41.BackColor;
            ShiftOSDesktop.artpadcolourpallets(41) = colourpallet42.BackColor;
            ShiftOSDesktop.artpadcolourpallets(42) = colourpallet43.BackColor;
            ShiftOSDesktop.artpadcolourpallets(43) = colourpallet44.BackColor;
            ShiftOSDesktop.artpadcolourpallets(44) = colourpallet45.BackColor;
            ShiftOSDesktop.artpadcolourpallets(45) = colourpallet46.BackColor;
            ShiftOSDesktop.artpadcolourpallets(46) = colourpallet47.BackColor;
            ShiftOSDesktop.artpadcolourpallets(47) = colourpallet48.BackColor;
            ShiftOSDesktop.artpadcolourpallets(48) = colourpallet49.BackColor;
            ShiftOSDesktop.artpadcolourpallets(49) = colourpallet50.BackColor;
            ShiftOSDesktop.artpadcolourpallets(50) = colourpallet51.BackColor;
            ShiftOSDesktop.artpadcolourpallets(51) = colourpallet52.BackColor;
            ShiftOSDesktop.artpadcolourpallets(52) = colourpallet53.BackColor;
            ShiftOSDesktop.artpadcolourpallets(53) = colourpallet54.BackColor;
            ShiftOSDesktop.artpadcolourpallets(54) = colourpallet55.BackColor;
            ShiftOSDesktop.artpadcolourpallets(55) = colourpallet56.BackColor;
            ShiftOSDesktop.artpadcolourpallets(56) = colourpallet57.BackColor;
            ShiftOSDesktop.artpadcolourpallets(57) = colourpallet58.BackColor;
            ShiftOSDesktop.artpadcolourpallets(58) = colourpallet59.BackColor;
            ShiftOSDesktop.artpadcolourpallets(59) = colourpallet60.BackColor;
            ShiftOSDesktop.artpadcolourpallets(60) = colourpallet61.BackColor;
            ShiftOSDesktop.artpadcolourpallets(61) = colourpallet62.BackColor;
            ShiftOSDesktop.artpadcolourpallets(62) = colourpallet63.BackColor;
            ShiftOSDesktop.artpadcolourpallets(63) = colourpallet64.BackColor;
            ShiftOSDesktop.artpadcolourpallets(64) = colourpallet65.BackColor;
            ShiftOSDesktop.artpadcolourpallets(65) = colourpallet66.BackColor;
            ShiftOSDesktop.artpadcolourpallets(66) = colourpallet67.BackColor;
            ShiftOSDesktop.artpadcolourpallets(67) = colourpallet68.BackColor;
            ShiftOSDesktop.artpadcolourpallets(68) = colourpallet69.BackColor;
            ShiftOSDesktop.artpadcolourpallets(69) = colourpallet70.BackColor;
            ShiftOSDesktop.artpadcolourpallets(70) = colourpallet71.BackColor;
            ShiftOSDesktop.artpadcolourpallets(71) = colourpallet72.BackColor;
            ShiftOSDesktop.artpadcolourpallets(72) = colourpallet73.BackColor;
            ShiftOSDesktop.artpadcolourpallets(73) = colourpallet74.BackColor;
            ShiftOSDesktop.artpadcolourpallets(74) = colourpallet75.BackColor;
            ShiftOSDesktop.artpadcolourpallets(75) = colourpallet76.BackColor;
            ShiftOSDesktop.artpadcolourpallets(76) = colourpallet77.BackColor;
            ShiftOSDesktop.artpadcolourpallets(77) = colourpallet78.BackColor;
            ShiftOSDesktop.artpadcolourpallets(78) = colourpallet79.BackColor;
            ShiftOSDesktop.artpadcolourpallets(79) = colourpallet80.BackColor;
            ShiftOSDesktop.artpadcolourpallets(80) = colourpallet81.BackColor;
            ShiftOSDesktop.artpadcolourpallets(81) = colourpallet82.BackColor;
            ShiftOSDesktop.artpadcolourpallets(82) = colourpallet83.BackColor;
            ShiftOSDesktop.artpadcolourpallets(83) = colourpallet84.BackColor;
            ShiftOSDesktop.artpadcolourpallets(84) = colourpallet85.BackColor;
            ShiftOSDesktop.artpadcolourpallets(85) = colourpallet86.BackColor;
            ShiftOSDesktop.artpadcolourpallets(86) = colourpallet87.BackColor;
            ShiftOSDesktop.artpadcolourpallets(87) = colourpallet88.BackColor;
            ShiftOSDesktop.artpadcolourpallets(88) = colourpallet89.BackColor;
            ShiftOSDesktop.artpadcolourpallets(89) = colourpallet90.BackColor;
            ShiftOSDesktop.artpadcolourpallets(90) = colourpallet91.BackColor;
            ShiftOSDesktop.artpadcolourpallets(91) = colourpallet92.BackColor;
            ShiftOSDesktop.artpadcolourpallets(92) = colourpallet93.BackColor;
            ShiftOSDesktop.artpadcolourpallets(93) = colourpallet94.BackColor;
            ShiftOSDesktop.artpadcolourpallets(94) = colourpallet95.BackColor;
            ShiftOSDesktop.artpadcolourpallets(95) = colourpallet96.BackColor;
            ShiftOSDesktop.artpadcolourpallets(96) = colourpallet97.BackColor;
            ShiftOSDesktop.artpadcolourpallets(97) = colourpallet98.BackColor;
            ShiftOSDesktop.artpadcolourpallets(98) = colourpallet99.BackColor;
            ShiftOSDesktop.artpadcolourpallets(99) = colourpallet100.BackColor;
            ShiftOSDesktop.artpadcolourpallets(100) = colourpallet101.BackColor;
            ShiftOSDesktop.artpadcolourpallets(101) = colourpallet102.BackColor;
            ShiftOSDesktop.artpadcolourpallets(102) = colourpallet103.BackColor;
            ShiftOSDesktop.artpadcolourpallets(103) = colourpallet104.BackColor;
            ShiftOSDesktop.artpadcolourpallets(104) = colourpallet105.BackColor;
            ShiftOSDesktop.artpadcolourpallets(105) = colourpallet106.BackColor;
            ShiftOSDesktop.artpadcolourpallets(106) = colourpallet107.BackColor;
            ShiftOSDesktop.artpadcolourpallets(107) = colourpallet108.BackColor;
            ShiftOSDesktop.artpadcolourpallets(108) = colourpallet109.BackColor;
            ShiftOSDesktop.artpadcolourpallets(109) = colourpallet110.BackColor;
            ShiftOSDesktop.artpadcolourpallets(110) = colourpallet111.BackColor;
            ShiftOSDesktop.artpadcolourpallets(111) = colourpallet112.BackColor;
            ShiftOSDesktop.artpadcolourpallets(112) = colourpallet113.BackColor;
            ShiftOSDesktop.artpadcolourpallets(113) = colourpallet114.BackColor;
            ShiftOSDesktop.artpadcolourpallets(114) = colourpallet115.BackColor;
            ShiftOSDesktop.artpadcolourpallets(115) = colourpallet116.BackColor;
            ShiftOSDesktop.artpadcolourpallets(116) = colourpallet117.BackColor;
            ShiftOSDesktop.artpadcolourpallets(117) = colourpallet118.BackColor;
            ShiftOSDesktop.artpadcolourpallets(118) = colourpallet119.BackColor;
            ShiftOSDesktop.artpadcolourpallets(119) = colourpallet120.BackColor;
            ShiftOSDesktop.artpadcolourpallets(120) = colourpallet121.BackColor;
            ShiftOSDesktop.artpadcolourpallets(121) = colourpallet122.BackColor;
            ShiftOSDesktop.artpadcolourpallets(122) = colourpallet123.BackColor;
            ShiftOSDesktop.artpadcolourpallets(123) = colourpallet124.BackColor;
            ShiftOSDesktop.artpadcolourpallets(124) = colourpallet125.BackColor;
            ShiftOSDesktop.artpadcolourpallets(125) = colourpallet126.BackColor;
            ShiftOSDesktop.artpadcolourpallets(126) = colourpallet127.BackColor;
            ShiftOSDesktop.artpadcolourpallets(127) = colourpallet128.BackColor;
        */}
        //</unused>

        public void settoolcolours()
        {
            btnpixelsetter.BackColor = drawingcolour;
            btnpixelplacer.BackColor = drawingcolour;
            btnpencil.BackColor = drawingcolour;
            btnfloodfill.BackColor = drawingcolour;
            btnsquare.BackColor = drawingcolour;
            btnoval.BackColor = drawingcolour;
            btnlinetool.BackColor = drawingcolour;
            btnpaintbrush.BackColor = drawingcolour;
            btntexttool.BackColor = drawingcolour;
        }
        #endregion

        #region Zooming

        // ERROR: Handles clauses are not supported in C#
        private void btnzoomin_Click(object sender, EventArgs e)
        {
            if (magnificationlevel < 256)
            {
                magnificationlevel *= 2;
            }
            else {
                API.CreateInfoboxSession("ArtPad - Magnification Error!"
                , "You are unable to increase the magnification level any further." + Environment.NewLine + Environment.NewLine + "256x is the highest level of magnification supported by ArtPad!", infobox.InfoboxMode.Info);
            }
            setmagnification();
        }

        // ERROR: Handles clauses are not supported in C#
        private void btnzoomout_Click(object sender, EventArgs e)
        {
            if (magnificationlevel > 1)
            {
                magnificationlevel /= 2;
                pnldrawingbackground.AutoScrollPosition = new Point(0, 0);
            }
            else {
                API.CreateInfoboxSession("ArtPad - Magnification Error!"
                ,"You are unable to decrease the magnification level any further." + Environment.NewLine + Environment.NewLine + "Artpad is unable to scale pixels at a level smaller than their actual size!", infobox.InfoboxMode.Info);
            }
            setmagnification();
        }

        private void setmagnification()
        {
            magnifyRect.Width = (int)canvaswidth / magnificationlevel;
            magnifyRect.Height = (int)canvasheight / magnificationlevel;
            picdrawingdisplay.Size = new Size(canvaswidth * magnificationlevel, canvasheight * magnificationlevel);
            if (picdrawingdisplay.Height > 468 && picdrawingdisplay.Width > 676)
            {
                picdrawingdisplay.Location = new Point(0, 0);
            }
            else {
                picdrawingdisplay.Location = new Point((pnldrawingbackground.Width - canvaswidth * magnificationlevel) / 2, (pnldrawingbackground.Height - canvasheight * magnificationlevel) / 2);
            }
            picdrawingdisplay.Invalidate();
            lblzoomlevel.Text = magnificationlevel + "X";
        }

        #endregion

        #region Pixel Placer

        // ERROR: Handles clauses are not supported in C#
        private void pnlpixelplacer_Click(object sender, EventArgs e)
        {
            selectedtool = "Pixel Placer";
            gettoolsettings(pnlpixelplacersettings);
        }

        // ERROR: Handles clauses are not supported in C#
        private void btnpixelplacermovementmode_Click(object sender, EventArgs e)
        {
            if (pixalplacermovable == false)
            {
                pixalplacermovable = true;
                btnpixelplacermovementmode.ForeColor = Color.White;
                btnpixelplacermovementmode.BackColor = Color.Black;
                btnpixelplacermovementmode.Text = "Deactivate Movement Mode";
                lblpixelplacerhelp.Text = "Movement mode is enabled. Click and drag on the canvas to place pixels as you move the mouse. Please use 4x magnification or greater and move the mouse very slowly.";
            }
            else {
                pixalplacermovable = false;
                btnpixelplacermovementmode.ForeColor = Color.Black;
                btnpixelplacermovementmode.BackColor = Color.White;
                btnpixelplacermovementmode.Text = "Activate Movement Mode";
                lblpixelplacerhelp.Text = "This tool does not contain any alterable settings. Simply click on the canvas and a pixel will be placed in the spot you click.";
            }
        }

        #endregion

        #region Saving

        // ERROR: Handles clauses are not supported in C#
        private void btnsave_Click(object sender, EventArgs e)
        {
            showsavedialog();
        }

        public void showsavedialog()
        {
            API.CreateFileSkimmerSession(".pic", File_Skimmer.FileSkimmerMode.Save);
            API.FileSkimmerSession.FormClosing += (object s, FormClosingEventArgs a) =>
            {
                var res = API.GetFSResult();
                if(res != "fail")
                {
                    savelocation = res;
                    saveimage();
                }
            };
        }

        public void saveimage()
        {
            canvasbitmap.Save(savelocation, ImageFormat.Bmp);
        }
        #endregion

        #region New Canvas

        // ERROR: Handles clauses are not supported in C#
        private void txtnewcanvaswidth_TextChanged(object sender, EventArgs e)
        {
            if (txtnewcanvaswidth.Text == "" | txtnewcanvasheight.Text == "")
            {
                if(txtnewcanvasheight.Text == "")
                {
                    txtnewcanvasheight.Text = "0";
                }
                if (txtnewcanvaswidth.Text == "")
                {
                    txtnewcanvaswidth.Text = "0";
                }
            }
            else {
                try {
                    lbltotalpixels.Text = (Convert.ToInt32(txtnewcanvaswidth.Text) * Convert.ToInt32(txtnewcanvasheight.Text)).ToString();
                    if (API.Upgrades["artpadlimitlesspixels"] == true)
                    {
                        lbltotalpixels.ForeColor = Color.Black;
                    }
                    else {
                        if ((Convert.ToInt32(txtnewcanvaswidth.Text) * Convert.ToInt32(txtnewcanvasheight.Text)) > GetPixelLimit())
                        {
                            lbltotalpixels.ForeColor = Color.Red;
                        }
                        else {
                            lbltotalpixels.ForeColor = Color.Black;
                        }
                    }
                }
                catch(Exception ex)
                {

                }
            }

        }

        public int GetPixelLimit()
        {
            int value = 2;

            
            if(API.Upgrades["artpadpixellimit4"])
            {
                value = 4;
                if (API.Upgrades["artpadpixellimit8"])
                {
                    value = 8;
                    if (API.Upgrades["artpadpixellimit16"])
                    {
                        value = 16;
                        if (API.Upgrades["artpadpixellimit64"])
                        {
                            value = 64;
                            if (API.Upgrades["artpadpixellimit256"])
                            {
                                value = 256;
                                if (API.Upgrades["artpadpixellimit1024"])
                                {
                                    value = 1024;
                                    if (API.Upgrades["artpadpixellimit4096"])
                                    {
                                        value = 4096;
                                        if (API.Upgrades["artpadpixellimit16384"])
                                        {
                                            value = 16384;
                                            if (API.Upgrades["artpadpixellimit65536"])
                                            {
                                                value = 65536;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return value;
        }

        // ERROR: Handles clauses are not supported in C#
        private void btncreate_Click(object sender, EventArgs e)
        {
            if (lbltotalpixels.ForeColor == Color.Red)
            {
                API.CreateInfoboxSession("Artpad - Error", "Artpad cannot create the image. It is too big.", infobox.InfoboxMode.Info);
            }
            else {
                if (lbltotalpixels.Text == "0")
                {
                }
                else {
                    canvaswidth = Convert.ToInt32(txtnewcanvaswidth.Text);
                    canvasheight = Convert.ToInt32(txtnewcanvasheight.Text);
                    picdrawingdisplay.Show();
                    setupcanvas();
                    pnlinitialcanvassettings.Hide();
                }
            }
        }

        // ERROR: Handles clauses are not supported in C#
        private void btncancel_Click(object sender, EventArgs e)
        {
            pnlinitialcanvassettings.Hide();
            picdrawingdisplay.Show();
        }

        // ERROR: Handles clauses are not supported in C#
        private void btnnew_Click(object sender, EventArgs e)
        {
            pnlinitialcanvassettings.Show();
            picdrawingdisplay.Hide();
        }

        #endregion

        #region Preview

        public void setuppreview()
        {
            lbltoolselected.Text = selectedtool;
            picpreview.CreateGraphics().FillRectangle(Brushes.White, 0, 0, 70, 50);
            switch (selectedtool)
            {
                case "Square Tool":
                    var CurrentPen = new Pen(Color.FromArgb(255, drawingcolour), squarewidth);
                    var CurrentBrush = new SolidBrush(Color.FromArgb(255, fillsquarecolor));
                    RectangleF rectdraw = new RectangleF(0, 0, picpreview.Width, picpreview.Height);
                    float correctionamount = squarewidth / 2;
                    if (squarewidth > 0)
                    {
                        picpreview.CreateGraphics().DrawRectangle(CurrentPen, rectdraw.X + correctionamount, rectdraw.Y + correctionamount, rectdraw.Width - squarewidth, rectdraw.Height - squarewidth);
                    }
                    if (squarefillon == true)
                    {
                        picpreview.CreateGraphics().FillRectangle(CurrentBrush, rectdraw.X + squarewidth, rectdraw.Y + squarewidth, rectdraw.Width - squarewidth - squarewidth, rectdraw.Height - squarewidth - squarewidth);
                    }
                    break;
                case "Oval Tool":
                    var ovalCurrentPen = new Pen(Color.FromArgb(255, drawingcolour), ovalwidth);
                    var ovalCurrentBrush = new SolidBrush(Color.FromArgb(255, fillovalcolor));
                    RectangleF ovalrectdraw = new RectangleF(0, 0, picpreview.Width, picpreview.Height);
                    float ovalcorrectionamount = ovalwidth / 2;
                    if (ovalwidth > 0)
                    {
                        picpreview.CreateGraphics().DrawEllipse(ovalCurrentPen, ovalrectdraw.X + ovalcorrectionamount, ovalrectdraw.Y + ovalcorrectionamount, ovalrectdraw.Width - ovalwidth, ovalrectdraw.Height - ovalwidth);
                    }
                    if (ovalfillon == true)
                    {
                        float fixer = ovalwidth / 2;
                        picpreview.CreateGraphics().FillEllipse(ovalCurrentBrush, (ovalrectdraw.X + fixer), (ovalrectdraw.Y + fixer), ovalrectdraw.Width - fixer - fixer, ovalrectdraw.Height - fixer - fixer);
                    }
                    break;
                case "Text Tool":
                    var textCurrentBrush = new SolidBrush(Color.FromArgb(255, drawingcolour));
                    drawtextfont = new System.Drawing.Font(drawtextfontname, 20, drawtextfontstyle);
                    picpreview.CreateGraphics().DrawString("A", drawtextfont, textCurrentBrush, 20, 0);
                    break;
                case "Line Tool":
                    var lineCurrentPen = new Pen(Color.FromArgb(255, drawingcolour), linewidth);
                    picpreview.CreateGraphics().DrawLine(lineCurrentPen, 0, 0, picpreview.Width, picpreview.Height);
                    break;
                case "Pencil":
                    var pencilCurrentPen = new Pen(Color.FromArgb(255, drawingcolour), pencilwidth);
                    picpreview.CreateGraphics().DrawLine(pencilCurrentPen, 0, 25, picpreview.Width, 25);
                    break;
                case "Paint Brush":
                    var pbCurrentBrush = new SolidBrush(Color.FromArgb(255, drawingcolour));
                    float halfsize = paintbrushwidth / 2;
                    float halfwidth = picdrawingdisplay.Width / 2;
                    float halfheight = picdrawingdisplay.Height / 2;
                    if (paintbrushtype == "circle")
                    {
                        picpreview.CreateGraphics().FillEllipse(pbCurrentBrush, halfwidth - 15 - halfsize, halfheight - 1 - halfsize, paintbrushwidth, paintbrushwidth);
                    }
                    else {
                        picpreview.CreateGraphics().FillRectangle(pbCurrentBrush, halfwidth - 15 - halfsize, halfheight - 1 - halfsize, paintbrushwidth, paintbrushwidth);
                    }
                    break;
                case "Eracer":
                    System.Drawing.SolidBrush drawbrush = new System.Drawing.SolidBrush(drawingcolour);
                    picpreview.CreateGraphics().FillRectangle(drawbrush, 0, 0, picpreview.Width, picpreview.Height);
                    var eCurrentBrush = new SolidBrush(Color.FromArgb(255, Color.White));
                    float ehalfsize = eracerwidth / 2;
                    float ehalfwidth = picdrawingdisplay.Width / 2;
                    float ehalfheight = picdrawingdisplay.Height / 2;
                    if (eracertype == "circle")
                    {
                        picpreview.CreateGraphics().FillEllipse(eCurrentBrush, ehalfwidth - 15 - ehalfsize, ehalfheight - ehalfsize, eracerwidth, eracerwidth);
                    }
                    else {
                        picpreview.CreateGraphics().FillRectangle(eCurrentBrush, ehalfwidth - 15 - ehalfsize, ehalfheight - ehalfsize, eracerwidth, eracerwidth);
                    }
                    break;
                default:
                    System.Drawing.SolidBrush ddrawbrush = new System.Drawing.SolidBrush(drawingcolour);
                    picpreview.CreateGraphics().FillRectangle(ddrawbrush, 0, 0, picpreview.Width, picpreview.Height);
                    ddrawbrush.Dispose();
                    break;
            }
        }

        #endregion

        #region Pencil

        // ERROR: Handles clauses are not supported in C#
        private void btnpencil_Click(object sender, EventArgs e)
        {
            selectedtool = "Pencil";
            gettoolsettings(pnlpencilsettings);
        }

        // ERROR: Handles clauses are not supported in C#
        private void ChangePencilSize(object sender, EventArgs e)
        {
            var s = (Control)sender;
            switch (s.Name.ToString())
            {
                case "btnpencilsize1":
                    pencilwidth = 1;
                    break;
                case "btnpencilsize2":
                    pencilwidth = 2;
                    break;
                case "btnpencilsize3":
                    pencilwidth = 3;
                    break;
            }
            setuppreview();
        }

        #endregion

        #region Undo/Redo

        // ERROR: Handles clauses are not supported in C#
        private void btnundo_Click(object sender, EventArgs e)
        {
            try
            {
                undo.redoStack.Push((Image)canvasbitmap.Clone());
                canvasbitmap = (Bitmap)undo.undoStack.Pop();
                graphicsbitmap = Graphics.FromImage(canvasbitmap);
                picdrawingdisplay.Invalidate();
            }
            catch (Exception ex)
            {
                API.CreateInfoboxSession("ArtPad - Undo Error!"
                ,"There doesn't appear to be any more actions to undo." + Environment.NewLine + Environment.NewLine + "One more step back would undo the creation of the canvas. If this is your goal just click new.", infobox.InfoboxMode.Info);
            }
        }

        // ERROR: Handles clauses are not supported in C#
        private void btnredo_Click(object sender, EventArgs e)
        {
            try
            {
                undo.undoStack.Push((Image)canvasbitmap.Clone());
                canvasbitmap = (Bitmap)undo.redoStack.Pop();
                graphicsbitmap = Graphics.FromImage(canvasbitmap);
                picdrawingdisplay.Invalidate();
            }
            catch (Exception ex)
            {
                API.CreateInfoboxSession("ArtPad - Redo Error!"
                , "There doesn't appear to be any more actions to redo." + Environment.NewLine + Environment.NewLine + "If you have drawn on the canvas recently all future history would have been wiped!", infobox.InfoboxMode.Info);
            }
        }

        #endregion

        #region File Loading

        // ERROR: Handles clauses are not supported in C#
        private void btnopen_Click(object sender, EventArgs e)
        {
            API.CreateFileSkimmerSession(".pic", File_Skimmer.FileSkimmerMode.Open);
            API.FileSkimmerSession.FormClosing += (object s, FormClosingEventArgs a) =>
            {
                string res = API.GetFSResult();
                if(res != "fail")
                {
                    savelocation = res;
                    openpic();
                }
            };
        }

        public void openpic()
        {
            pnlinitialcanvassettings.Hide();
            picdrawingdisplay.Show();
            magnificationlevel = 1;
            setmagnification();
            canvasbitmap = (Bitmap)Image.FromFile(savelocation);
            canvasheight = canvasbitmap.Height;
            canvaswidth = canvasbitmap.Width;
            picdrawingdisplay.Size = new Size(canvaswidth, canvasheight);
            picdrawingdisplay.Location = new Point((pnldrawingbackground.Width - canvaswidth) / 2, (pnldrawingbackground.Height - canvasheight) / 2);
            graphicsbitmap = Graphics.FromImage(canvasbitmap);
            picdrawingdisplay.Invalidate();
        }

        #endregion

        #region Flood Fill

        // Flood fill the point.
        public void SafeFloodFill(Bitmap bm, int x, int y, Color new_color)
        {
            // Get the old and new colors.
            Color old_color = bm.GetPixel(x, y);

            // The following "If Then" test was added by Reuben
            // Jollif
            // to protect the code in case the start pixel
            // has the same color as the fill color.
            if (old_color.ToArgb() != new_color.ToArgb())
            {
                // Start with the original point in the stack.
                Stack<Point> pts = new Stack<Point>(1000);
                pts.Push(new Point(x, y));
                bm.SetPixel(x, y, new_color);

                // While the stack is not empty, process a point.
                while (pts.Count > 0)
                {
                    Point pt = (Point)pts.Pop();
                    if (pt.X > 0)
                        SafeCheckPoint(bm, pts, pt.X - 1, pt.Y, old_color, new_color);

                    if (pt.Y > 0)
                        SafeCheckPoint(bm, pts, pt.X, pt.Y - 1, old_color, new_color);
                    if (pt.X < bm.Width - 1)
                        SafeCheckPoint(bm, pts, pt.X + 1, pt.Y, old_color, new_color);
                    if (pt.Y < bm.Height - 1)
                        SafeCheckPoint(bm, pts, pt.X, pt.Y + 1, old_color, new_color);
                }
            }
        }

        // See if this point should be added to the stack.
        private void SafeCheckPoint(Bitmap bm, Stack<Point> pts, int x, int y, Color old_color, Color new_color)
        {
            Color clr = bm.GetPixel(x, y);
            if (clr.Equals(old_color))
            {
                pts.Push(new Point(x, y));
                bm.SetPixel(x, y, new_color);
            }
        }

        // ERROR: Handles clauses are not supported in C#
        private void btnfill_Click(object sender, EventArgs e)
        {
            selectedtool = "Flood Fill";
            gettoolsettings(pnlfloodfillsettings);
        }

        #endregion

        #region Shapes

        // ERROR: Handles clauses are not supported in C#
        private void btnsquare_Click(object sender, EventArgs e)
        {
            selectedtool = "Square Tool";
            gettoolsettings(pnlsquaretoolsettings);
            txtsquareborderwidth.Text = squarewidth.ToString();
        }

        // ERROR: Handles clauses are not supported in C#
        private void txtsquareborderwidth_TextChanged(object sender, EventArgs e)
        {
            if (txtsquareborderwidth.Text == "")
            {
            }
            else {
                squarewidth = (Convert.ToInt32(txtsquareborderwidth.Text));
                setuppreview();
            }
        }

        // ERROR: Handles clauses are not supported in C#
        private void pnlsquarefillcolour_Click(object sender, EventArgs e)
        {
            pnlsquarefillcolour.BackColor = drawingcolour;
            fillsquarecolor = drawingcolour;
            setuppreview();
        }

        // ERROR: Handles clauses are not supported in C#
        private void btnsquarefillonoff_Click(object sender, EventArgs e)
        {
            if (squarefillon == true)
            {
                btnsquarefillonoff.Text = "Fill OFF";
                btnsquarefillonoff.BackColor = Color.White;
                btnsquarefillonoff.ForeColor = Color.Black;
                squarefillon = false;
            }
            else {
                btnsquarefillonoff.Text = "Fill ON";
                btnsquarefillonoff.BackColor = Color.Black;
                btnsquarefillonoff.ForeColor = Color.White;
                squarefillon = true;
            }
            txtsquareborderwidth.Text = squarewidth.ToString();
            setuppreview();
        }

        // ERROR: Handles clauses are not supported in C#
        private void btnoval_Click(object sender, EventArgs e)
        {
            selectedtool = "Oval Tool";
            gettoolsettings(pnlovaltoolsettings);
            txtovalborderwidth.Text = ovalwidth.ToString();
        }

        // ERROR: Handles clauses are not supported in C#
        private void txtovalborderwidth_TextChanged(object sender, EventArgs e)
        {
            if (txtovalborderwidth.Text == "")
            {
            }
            else {
                ovalwidth = (Convert.ToInt32(txtovalborderwidth.Text));
                setuppreview();
            }
        }

        // ERROR: Handles clauses are not supported in C#
        private void pnlovalfillcolour_Click(object sender, EventArgs e)
        {
            pnlovalfillcolour.BackColor = drawingcolour;
            fillovalcolor = drawingcolour;
            setuppreview();
        }

        // ERROR: Handles clauses are not supported in C#
        private void btnovalfillonoff_Click(object sender, EventArgs e)
        {
            if (ovalfillon == true)
            {
                btnovalfillonoff.Text = "Fill OFF";
                btnovalfillonoff.BackColor = Color.White;
                btnovalfillonoff.ForeColor = Color.Black;
                ovalfillon = false;
            }
            else {
                btnovalfillonoff.Text = "Fill ON";
                btnovalfillonoff.BackColor = Color.Black;
                btnovalfillonoff.ForeColor = Color.White;
                ovalfillon = true;
            }
            txtovalborderwidth.Text = ovalwidth.ToString();
            setuppreview();
        }
        #endregion

        #region Eraser

        // ERROR: Handles clauses are not supported in C#
        private void btneracer_Click(object sender, EventArgs e)
        {
            selectedtool = "Eracer";
            gettoolsettings(pnleracertoolsettings);
            txteracersize.Text = eracerwidth.ToString();
            setuppreview();
        }

        // ERROR: Handles clauses are not supported in C#
        private void txteracersize_TextChanged(object sender, EventArgs e)
        {
            if (txteracersize.Text == "")
            {
            }
            else {
                eracerwidth = (Convert.ToInt32(txteracersize.Text));
            }
            setuppreview();
        }

        // ERROR: Handles clauses are not supported in C#
        private void btneracercircle_Click(object sender, EventArgs e)
        {
            eracertype = "circle";
            btneracercircle.BackgroundImage = Properties.Resources.ArtPadcirclerubberselected;
            btneracersquare.BackgroundImage = Properties.Resources.ArtPadsquarerubber;
            setuppreview();
        }

        // ERROR: Handles clauses are not supported in C#
        private void btneracersquare_Click(object sender, EventArgs e)
        {
            eracertype = "square";
            btneracercircle.BackgroundImage = Properties.Resources.ArtPadcirclerubber;
            btneracersquare.BackgroundImage = Properties.Resources.ArtPadsquarerubberselected;
            setuppreview();
        }

        #endregion

        #region Line

        // ERROR: Handles clauses are not supported in C#
        private void btnlinetool_Click(object sender, EventArgs e)
        {
            selectedtool = "Line Tool";
            gettoolsettings(pnllinetoolsettings);
            txtlinewidth.Text = linewidth.ToString();
        }

        // ERROR: Handles clauses are not supported in C#
        private void txtlinewidth_TextChanged(object sender, EventArgs e)
        {
            if (txtlinewidth.Text == "")
            {
            }
            else {
                linewidth = (Convert.ToInt32(txtlinewidth.Text));
            }
            setuppreview();
        }

        #endregion

        #region Text

        // ERROR: Handles clauses are not supported in C#
        private void btntexttool_Click(object sender, EventArgs e)
        {
            selectedtool = "Text Tool";
            gettoolsettings(pnltexttoolsettings);
        }

        // ERROR: Handles clauses are not supported in C#
        private void txtdrawtextsize_TextChanged(object sender, EventArgs e)
        {
            if (txtdrawtextsize.Text == "")
            {
            }
            else {
                drawtextsize = Convert.ToInt32(txtdrawtextsize.Text);
            }
            setuppreview();
        }

        // ERROR: Handles clauses are not supported in C#
        private void combodrawtextfont_SelectedIndexChanged(object sender, EventArgs e)
        {
            drawtextfontname = combodrawtextfont.Text;
            txtdrawstringtext.Focus();
            setuppreview();
        }

        // ERROR: Handles clauses are not supported in C#
        private void combofontstyle_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (combofontstyle.Text)
            {
                case "Bold":
                    drawtextfontstyle = FontStyle.Bold;
                    break;
                case "Italic":
                    drawtextfontstyle = FontStyle.Italic;
                    break;
                case "Regular":
                    drawtextfontstyle = FontStyle.Regular;
                    break;
                case "Strikeout":
                    drawtextfontstyle = FontStyle.Strikeout;
                    break;
                case "Underline":
                    drawtextfontstyle = FontStyle.Underline;
                    break;
            }
            txtdrawstringtext.Focus();
            setuppreview();
        }
        #endregion

        #region Paintbrush

        // ERROR: Handles clauses are not supported in C#
        private void txtpaintbrushsize_TextChanged(object sender, EventArgs e)
        {
            if (txtpaintbrushsize.Text == "")
            {
            }
            else {
                paintbrushwidth = (Convert.ToInt32(txtpaintbrushsize.Text));
            }
            setuppreview();
        }

        // ERROR: Handles clauses are not supported in C#
        private void btnpaintsquareshape_Click(object sender, EventArgs e)
        {
            paintbrushtype = "square";
            btnpaintcircleshape.BackgroundImage = Properties.Resources.ArtPadcirclerubber;
            btnpaintsquareshape.BackgroundImage = Properties.Resources.ArtPadsquarerubberselected;
            setuppreview();
        }

        // ERROR: Handles clauses are not supported in C#
        private void btnpaintcircleshape_Click(object sender, EventArgs e)
        {
            paintbrushtype = "circle";
            btnpaintcircleshape.BackgroundImage = Properties.Resources.ArtPadcirclerubberselected;
            btnpaintsquareshape.BackgroundImage = Properties.Resources.ArtPadsquarerubber;
            setuppreview();
        }

        // ERROR: Handles clauses are not supported in C#
        private void btnpaintbrush_Click(object sender, EventArgs e)
        {
            selectedtool = "Paint Brush";
            gettoolsettings(pnlpaintbrushtoolsettings);
            txtpaintbrushsize.Text = paintbrushwidth.ToString();
            setuppreview();
        }

        #endregion

        #region Codepoints

        private void preparecooldown()
        {
            needtosave = true;
            if (codepointscooldown == true)
            {
            }
            else {
                codepointsearned = codepointsearned + 1;
                codepointscooldown = true;
                tmrcodepointcooldown.Start();
            }
        }

        // ERROR: Handles clauses are not supported in C#
        private void tmrcodepointcooldown_Tick(object sender, EventArgs e)
        {
            codepointscooldown = false;
            tmrcodepointcooldown.Stop();
        }

        // ERROR: Handles clauses are not supported in C#
        private void tmrshowearnedcodepoints_Tick(object sender, EventArgs e)
        {
            tmrshowearnedcodepoints.Stop();
        }

        #endregion

        #region More UI stuff

        public void determinevisiblepallets()
        {
            int panelstoadd = 2;
            
            if (API.Upgrades["artpad4colorpallets"] == true)
            {
                panelstoadd = 4;
            }
            if (API.Upgrades["artpad8colorpallets"] == true)
            {
                panelstoadd = 8;
            }
            if (API.Upgrades["artpad16colorpallets"] == true)
            {
                panelstoadd = 16;
            }
            if (API.Upgrades["artpad32colorpallets"] == true)
            {
                panelstoadd = 32;
            }
            if (API.Upgrades["artpad64colorpallets"] == true)
            {
                panelstoadd = 64;
            }
            if (API.Upgrades["artpad128colorpallets"] == true)
            {
                panelstoadd = 128;
            }
            flowcolours.Controls.Clear();
            for(int i = 0; i < panelstoadd; i++)
            {
                Panel pnl = new Panel();
                pnl.BackColor = Color.Black;
                pnl.Size = new Size(12, 8);
                flowcolours.Controls.Add(pnl);
                pnl.Margin = new Padding(1, 0, 0, 1);
                pnl.MouseClick += new MouseEventHandler(this.colourpallet1_MouseClick);
                pnl.Show();
            }
        }

        // ERROR: Handles clauses are not supported in C#
        private void btnchangesizecancel_Click(object sender, EventArgs e)
        {
            pnlpalletsize.Hide();
        }

        #endregion

        #region More Text Stuff

        // ERROR: Handles clauses are not supported in C#
        private void txtdrawstringtext_TextChanged(object sender, EventArgs e)
        {
            setuppreview();
        }

        #endregion

        private void tmrsetupui_Tick(object sender, EventArgs e)
        {
            if(API.CurrentSkin != null)
            {
                pnldrawingbackground.BackColor = API.CurrentSkin.titlebarcolour;
            }
        }

        private void btnpixelplacer_Click(object sender, EventArgs e)
        {
            selectedtool = "Pixel Placer";
            gettoolsettings(pnlpixelplacersettings);
        }
    }
}