public override void Update(GameTime gameTime) { var mouseState = Mouse.GetState(); if (mouseState.LeftButton == ButtonState.Pressed && _lastMouseState.LeftButton == ButtonState.Released) { var screenPosition = new Vector2(mouseState.X, mouseState.Y); if (RealScreenRectangle.Contains(new Point((int)screenPosition.X, (int)screenPosition.Y))) { MouseLeftDownText?.Invoke(this, new MouseLeftDownEvent(screenPosition - ScreenPosition, screenPosition)); } } if (mouseState.LeftButton == ButtonState.Released && _lastMouseState.LeftButton == ButtonState.Pressed) { var screenPosition = new Vector2(mouseState.X, mouseState.Y); if (RealScreenRectangle.Contains(new Point((int)screenPosition.X, (int)screenPosition.Y))) { MouseLeftUpText?.Invoke(this, new MouseLeftUpEvent(screenPosition - ScreenPosition, screenPosition)); } } base.Update(gameTime); }
public void Init(GuiItem parent, Vector2 position, int width, int height, SpriteFont font, int extureCharecterSpace, int extureLineSpace, string text, Align align, Color defaultColor) { _autoHeight = height <= 0; Parent = parent; Position = position; Width = width; Height = height; Font = font; ExtureCharacterSpace = extureCharecterSpace; ExtureLineSpace = extureLineSpace; DefaultColor = defaultColor; TextAlign = align; Text = text;// must be the last, because it invoke Caculate() MouseMove += (arg1, arg2) => { if (RealScreenRectangle.Contains(new Point((int)arg2.MouseScreenPosition.X, (int)arg2.MouseScreenPosition.Y))) { _inRange = true; MouseEnterText?.Invoke(arg1, arg2); } else if (_inRange && !RealScreenRectangle.Contains(new Point((int)arg2.MouseScreenPosition.X, (int)arg2.MouseScreenPosition.Y))) { _inRange = false; MouseLeaveText?.Invoke(arg1, arg2); } }; }