Example #1
0
 public void AddWinForward(List <UIForm> list, UIForm root)
 {
     if (root.GetType().IsSubclassOf(typeof(Forms.WindowForm)))
     {
         list.Add(root);
     }
     foreach (var node in root.Forms)
     {
         AddWinForward(list, node);
     }
 }
Example #2
0
        private void UpdateInput()
        {
            UIForm top = GetTopForm(MX, MY);

            if (top != null)
            {
                if (TopForm != top)
                {
                    if (TopForm != null)
                    {
                        if (TopForm != Pressed[0])
                        {
                            TopForm.MouseLeave?.Invoke();
                        }
                    }

                    top.MouseEnter?.Invoke();
                }
            }
            bool am = false;

            if (top != null)
            {
                if (top == TopForm)
                {
                    //    am = true;
                    //     top.MouseMove?.Invoke(MX - top.GX, MY - top.GY, MXD, MYD);
                }
            }
            bool pm = false;

            for (int i = 0; i < 32; i++)
            {
                if (Pressed[i] != null)
                {
                    pm = true;
                    Pressed[i].MouseMove?.Invoke(MX - Pressed[i].GX, MY - Pressed[i].GY, MXD, MYD);
                    Pressed[i].MouseWheelMoved?.Invoke(MZD);
                    break;
                }
            }
            if (TopForm != null && pm == false)
            {
                TopForm.MouseMove?.Invoke(MX - TopForm.GX, MY - TopForm.GY, MXD, MYD);
                TopForm.MouseWheelMoved?.Invoke(MZD);
            }

            if (top == null)
            {
                if (TopForm != null)
                {
                    if (TopForm != Pressed[0])
                    {
                        TopForm.MouseLeave?.Invoke();
                    }
                }
            }
            TopForm = top;

            if (Active != null)
            {
                Active.KeysIn?.Invoke(Input.Input.KeysIn());

                OpenTK.Input.Key key = Input.Input.KeyIn();
                if (key != OpenTK.Input.Key.LastKey)
                {
                    if (key == OpenTK.Input.Key.LastKey)
                    {
                        LastKey = OpenTK.Input.Key.LastKey;
                        NextKey = 0;
                    }
                    if (key == LastKey)
                    {
                        bool shift = false;
                        if (Input.Input.KeyIn(OpenTK.Input.Key.ShiftLeft))
                        {
                            shift = true;
                        }
                        if (Input.Input.KeyIn(OpenTK.Input.Key.ShiftRight))
                        {
                            shift = true;
                        }
                        if (Environment.TickCount > NextKey)
                        {
                            Active.KeyPress?.Invoke(key, shift);
                            NextKey = Environment.TickCount + 90;
                        }
                    }
                    else
                    {
                        bool shift = false;
                        if (Input.Input.KeyIn(OpenTK.Input.Key.ShiftLeft))
                        {
                            shift = true;
                        }
                        if (Input.Input.KeyIn(OpenTK.Input.Key.ShiftRight))
                        {
                            shift = true;
                        }
                        LastKey = key;
                        Active.KeyPress?.Invoke(key, shift);
                        NextKey = Environment.TickCount + 250;
                    }
                }
            }

            if (Input.Input.AnyButtons())
            {
                int bn = Input.Input.ButtonNum();
                if (TopForm != ActiveMenu)
                {
                    //ActiveMenu = null;
                }
                if (TopForm != null)
                {
                    if (Pressed[bn] == null)
                    {
                        if (bn == 0)
                        {
                            //if (ActiveMenu)
                            if (ActiveMenu != null)
                            {
                                if (TopForm == ActiveMenu.Owner)
                                {
                                    ActiveMenu = null;
                                }
                            }
                        }
                        if (bn == 1)
                        {
                            if (TopForm.ContextMenu != null)
                            {
                                ActiveMenu       = TopForm.ContextMenu;
                                ActiveMenu.X     = MX - 10;
                                ActiveMenu.Y     = MY - 10;
                                ActiveMenu.Owner = TopForm;
                                goto SkipClick;
                            }
                        }

                        if (Environment.TickCount < lastClick + 300)
                        {
                            clicks++;
                            if (clicks == 2)
                            {
                                TopForm.DoubleClick?.Invoke(bn);
                            }
                        }
                        else
                        {
                            clicks = 1;
                            //TopForm.Click?.Invoke(0);
                        }
                        lastClick = Environment.TickCount;
                        TopForm.MouseDown?.Invoke(bn);

                        Pressed[bn] = TopForm;
                        if (Active != TopForm)
                        {
                            if (Active != null)
                            {
                                Active.Deactivate?.Invoke();
                            }
                        }
                        Active = TopForm;
                        TopForm.Activate?.Invoke();
                        UIForm root = TopForm;
                        if (bn == 0)
                        {
                            while (true)
                            {
                                if (root.GetType().IsSubclassOf(typeof(Forms.WindowForm)))
                                {
                                    if (root.Root != null)
                                    {
                                        root.Root.Forms.Remove(root);
                                        root.Root.Forms.Add(root);
                                    }
                                    break;
                                }
                                root = root.Root;
                                if (root == null)
                                {
                                    break;
                                }
                            }
                        }
                        if (sdrag)
                        {
                            sdx = MX;
                            sdy = MY;
                        }
                    }
                    else if (Pressed[bn] == TopForm)
                    {
                        TopForm.MousePressed?.Invoke(bn);
                    }
                    else if (Pressed[bn] != TopForm)
                    {
                        Pressed[bn].MousePressed?.Invoke(bn);
                    }
                }
                else
                {
                    if (Pressed[bn] != null)
                    {
                        Pressed[bn].MousePressed?.Invoke(0);
                        //  Pressed[bn].Click?.Invoke(0);
                    }
                }

                if (Pressed[bn] != null)
                {
                    // Console.WriteLine("MX:" + MX + " MY:" + MY + " SDX:" + sdx + " SDY:" + sdy);
                    int mvx = MX - sdx;
                    int mvy = MY - sdy;
                    if (mvx != 0 || mvy != 0)
                    {
                        Pressed[bn].Drag?.Invoke(mvx, mvy);
                        Pressed[bn].PostDrag?.Invoke(mvx, mvy);
                    }
                    sdx = MX;

                    sdy = MY;
                    //Console.WriteLine(@)

                    //sdx = MX-Pressed[0].GY;

                    //sdy = MY-Pressed[0].GY;
                }
            }
            else
            {
                for (int i = 0; i < 32; i++)
                {
                    //Console.WriteLine("Wop");
                    if (Pressed[i] != null)
                    {
                        if (Pressed[i].InBounds(MX, MY) == false)
                        {
                            Pressed[i].MouseLeave?.Invoke();
                        }

                        Pressed[i].MouseUp?.Invoke(i);
                        if (!(Pressed[i] is Resonance.Forms.ButtonForm))
                        {
                            Pressed[i].Click?.Invoke(i);
                        }
                        Pressed[i] = null;
                        sdrag      = true;
                    }
                }
            }
            for (int i = 0; i < 32; i++)
            {
                if (Pressed[i] != null)
                {
                    WindS += (float)(Math.Abs(MXD + MYD)) / 150.0f;
                    if (WindS > 1.5f)
                    {
                        WindS = 1.5f;
                    }
                }
            }
SkipClick:

            return;
        }