public CursorController(FractalWindow mainWindow, GuiElement[] buttons)
 {
     ButtonsActive = new bool[buttons.Length];
     AllButtons    = buttons;
     MainWindow    = mainWindow;
     MainWindow    = mainWindow;
     CursorElement = new EmptyComponent(new RectangleF(0, 0, CursorSize, CursorSize));
     mainWindow.ChildElements.Add(CursorElement);
     MainWindow.MouseDownEvent += MainWindowClick;
     for (int i = 0; i < AllButtons.Length; i++)
     {
         AllButtons[i].Enabled = false;
         mainWindow.ChildElements.Add(AllButtons[i]);
         AllButtons[i].FrameColor      = Color.Red;
         AllButtons[i].MouseDownEvent += ButtonClick;
     }
     CursorElement.Enabled              = false;
     CursorElement.DrawFrame            = false;
     CursorElement.DragEvent           += CursorDragged;
     CursorElement.LateDraw            += CursorLateDraw;
     ExtendTimer.FinishedEvent         += ExtendTimerFinish;
     ExtendTimer.Tick                  += ExtendTimerTick;
     TeleportTimer.FinishedEvent       += TeleportTimerFinish;
     TeleportTimer.Tick                += TeleportTimerTick;
     CursorElement.MouseDownEvent      += CursorClick;
     MainWindow.Controller.FinishEvent += MainComputed;
 }
        public MainCursorSystem(FractalWindow mainWindow)
        {
            MainWindow = mainWindow;
            float size = CursorController.ButtonSize;

            JuliaWindow = new FractalWindow(new RectangleF(MainWindow.Rect.Width - JuliaWindowSize - 20, 20, JuliaWindowSize, JuliaWindowSize));
            //AllButtons[0] = PinButton = new EmptyComponent(new RectangleF(0, 0, ButtonSize, ButtonSize));
            JuliaButton = new FractalWindow(new RectangleF(0, 0, size, size));
            OrbitButton = new FractalWindow(new RectangleF(0, 0, size, size));
            SoundButton = new EmptyComponent(new RectangleF(0, 0, size, size));

            mainController = new CursorController(mainWindow,
                                                  new GuiElement[] {
                OrbitButton,
                SoundButton,
                JuliaButton
            });
            JuliaPeriodButton = new FractalWindow(new RectangleF(0, 0, size, size));
            JuliaOrbitButton  = new FractalWindow(new RectangleF(0, 0, size, size));
            JuliaOffsetButton = new EmptyComponent(new RectangleF(0, 0, size, size));
            juliaController   = new CursorController(JuliaWindow,
                                                     new GuiElement[]
            {
                JuliaOrbitButton,
                JuliaPeriodButton,
                JuliaOffsetButton
            }
                                                     );
            SoundButton.LateDraw             += SoundButtonLateDraw;
            SoundButton.MouseDownEvent       += SoundButtonClick;
            mainController.MenuUpdatedEvent  += MenuUpdated;
            mainController.PositionEvent     += CursorChanged;
            juliaController.MenuUpdatedEvent += JuliaMenuUpdated;
            juliaController.PositionEvent    += JuliaCursorChanged;


            //AllButtons[3] = OrbitButton = new FractalWindow(new RectangleF(0, 0, ButtonSize, ButtonSize));
            JuliaButton.Controller.Iterations  = 1000;
            JuliaButton.Controller.Zoom        = 0.14;
            JuliaButton.Controller.ColorScale  = 2;
            JuliaButton.Controller.ColorOffset = 0.9f;
            JuliaButton.Controller.Julia       = true;
            JuliaButton.Controller.JuliaPos    = new Complex(-0.16037822, -1.0375242);
            JuliaButton.EnableInteraction      = false;


            OrbitButton.Controller.CameraPos       = new Complex(-0.0978, -0.747457);
            OrbitButton.Controller.Zoom            = 0.15;
            OrbitButton.Controller.PeriodHighlight = 5;
            OrbitButton.OrbitActive       = true;
            OrbitButton.OrbitPosition     = new Complex(-0.03137, -0.79095);
            OrbitButton.OrbitScale        = 0.5f;
            OrbitButton.StrippleScale     = 1;
            OrbitButton.EnableInteraction = false;

            JuliaOrbitButton.EnableInteraction            = false;
            JuliaOrbitButton.Controller.Zoom              = 1.0;
            JuliaOrbitButton.OrbitActive                  = true;
            JuliaOrbitButton.Controller.CameraPos         = new Complex(-0.3, -0.3);
            JuliaOrbitButton.Controller.JuliaPos          = new Complex(-0.504455304069502, -0.562767203932328);
            JuliaOrbitButton.Controller.Julia             = true;
            JuliaOrbitButton.OrbitScale                   = 0.5f;
            JuliaOrbitButton.StrippleScale                = 1;
            JuliaOrbitButton.Controller.CenterDotStrength = 0;

            JuliaPeriodButton.EnableInteraction            = false;
            JuliaPeriodButton.Controller.JuliaPos          = new Complex(-0.153974876797236, -1.03769787591661);
            JuliaPeriodButton.Controller.Julia             = true;
            JuliaPeriodButton.Controller.Zoom              = 0.117;
            JuliaPeriodButton.Controller.FinalDotStrength  = 0.001f;
            JuliaPeriodButton.fractalMath.CoefficientArray = JuliaWindow.Controller.CoefficientArray;
            JuliaPeriodButton.fractalMath.SetCoefficients(JuliaPeriodButton.Controller.JuliaPos);
            Complex Z = new Complex(0, 0);

            for (int i = 0; i < JuliaPeriodButton.Controller.Iterations; i++)
            {
                Z = JuliaPeriodButton.fractalMath.Compute(Z);
            }
            JuliaPeriodButton.Controller.FinalDotPosition = Z;



            //JuliaWindow = new FractalWindow(new RectangleF(20, 20, JuliaWindowSize, JuliaWindowSize));
            JuliaWindow.Controller.Julia           = true;
            JuliaWindow.Enabled                    = false;
            JuliaWindow.Controller.QuaternionJulia = false;
            JuliaSizeBox = new EmptyComponent(new RectangleF(5, JuliaWindowSize - JuliaSizeBoxSize - 5, JuliaSizeBoxSize, JuliaSizeBoxSize));
            mainWindow.ChildElements.Add(JuliaWindow);
            JuliaWindow.ChildElements.Add(JuliaSizeBox);
            JuliaSizeBox.DragEvent += JuliaSizeBoxDrag;
            JuliaSizeBox.LateDraw  += JuliaResizeLateDraw;
            JuliaSizeBox.DrawFrame  = false;

            /*Julia3dButton = new FractalWindow(new RectangleF(5, 5, size, size));
             * Julia3dButton.Controller.Julia=true;
             * Julia3dButton.Controller.QuaternionJulia = true;
             *
             * Julia3dCutoffButton = new FractalWindow(new RectangleF(10 + size, 5, size, size));
             * Julia3dCutoffButton.Controller.Julia = true;
             * Julia3dCutoffButton.Controller.QuaternionJulia = true;
             * Julia3dCutoffButton.Controller.QuaternionJuliaCutoff = false;
             * Julia3dCutoffButton.Enabled = false;
             * JuliaWindow.ChildElements.Add(Julia3dButton);
             * JuliaWindow.ChildElements.Add(Julia3dCutoffButton);
             * Julia3dButton.ClickEvent += Julia3dClick;
             * Julia3dCutoffButton.ClickEvent += JuliaCutoffClick;*/

            //CursorWorldPosition = new Complex(-Math.PI/4, -0.15);
            //CursorPosition = MainWindow.GetScreenFromWorld(CursorWorldPosition);
            //CursorActive = true;
            //CursorElement.Enabled = true;


            OrbitButton.MouseDownEvent += OrbitClick;
            JuliaButton.MouseDownEvent += JuliaClick;

            JuliaOrbitButton.MouseDownEvent  += JuliaOrbitClick;
            JuliaPeriodButton.MouseDownEvent += JuliaPeriodClick;
            JuliaOffsetButton.MouseDownEvent += JuliaOffsetClick;
        }