void BubbleFace(GuiFace face, MouseEventArgument e) { foreach (var control in Enumerable.Reverse(face.Controls)) { control.Bubble(BubbleControl, e); } }
void BubbleControl(GuiControl control, MouseEventArgument e) { int x = control.X; int y = control.Y; if (e.X >= x && e.X <= x + control.Width && e.Y >= y && e.Y <= y + control.Height) { if (e is MouseClickEventArgument) { control.MouseClick.Invoke(e as MouseClickEventArgument); } else if (e is MouseMoveEventArgument) { control.MouseMove.Invoke(e as MouseMoveEventArgument); } if (!e.Bubble) { return; } if (control is GuiFaceControl) { e.X -= x; e.Y -= y; Game.GuiManager.GetFace((control as GuiFaceControl).FaceId).Bubble(BubbleFace, e); e.X += x; e.Y += y; } } }