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); } }
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; }