Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Button : Drawable, MouseInput
- {
- private Color defaultColor = new Color(255, 255, 255);
- private Color hoveredColor = new Color(220, 220, 220);
- private Color pressedColor = new Color(190, 190, 190);
- private bool isHovered = false;
- private bool isPressed = false;
- public Text Text { get; private set; }
- /// <summary>
- /// Enum that determines when the button should execute.
- /// </summary>
- public ButtonType Type { get; set; } = ButtonType.OnReleased;
- /// <summary>
- /// Color of button when not pressed or hovered.
- /// </summary>
- public Color DefaultColor
- {
- get { return defaultColor; }
- set
- {
- defaultColor = value;
- if (!isHovered && !isPressed)
- Text.Color = defaultColor;
- }
- }
- /// <summary>
- /// Color of button when being hovered by mouse.
- /// </summary>
- public Color HoveredColor
- {
- get { return hoveredColor; }
- set
- {
- hoveredColor = value;
- if (isHovered && !isPressed)
- {
- Text.Color = hoveredColor;
- }
- }
- }
- /// <summary>
- /// Color of button when being pressed.
- /// </summary>
- public Color PressedColor
- {
- get { return pressedColor; }
- set
- {
- pressedColor = value;
- if (isPressed)
- {
- Text.Color = pressedColor;
- }
- }
- }
- public Button()
- {
- Text = new Text();
- }
- public Button(string displayString, Vector2f position, uint characterSize, Font font) : this()
- {
- Text.Font = font;
- Text.DisplayedString = displayString;
- Text.CharacterSize = characterSize;
- Text.Origin = new Vector2f(Text.GetGlobalBounds().Width / 2, Text.GetGlobalBounds().Height / 2);
- Text.Position = position;
- OnHoveredEntered += delegate { Text.Color = hoveredColor; };
- OnHoveredExit += delegate { Text.Color = defaultColor; };
- OnPressed += delegate { Text.Color = pressedColor; };
- OnReleased += delegate { Text.Color = hoveredColor; };
- OnClicked += delegate { };
- }
- //Implement Drawable
- #region Drawable
- public void Draw(RenderTarget target, RenderStates states)
- {
- target.Draw(Text);
- }
- #endregion
- //Implement MouseInput
- #region MouseInput
- public event EventHandler OnPressed;
- public event EventHandler OnReleased;
- public event EventHandler OnClicked;
- public event EventHandler OnHoveredEntered;
- public event EventHandler OnHoveredExit;
- public void HandleMousePressed(object sender, MouseButtonEventArgs e)
- {
- if (e.Button != Mouse.Button.Left || !isHovered)
- return;
- OnPressed.Invoke(sender, e);
- if (Type == ButtonType.OnPressed)
- OnClicked.Invoke(sender, e);
- }
- public void HandleMouseReleased(object sender, MouseButtonEventArgs e)
- {
- if (e.Button != Mouse.Button.Left || !isHovered)
- return;
- OnReleased.Invoke(sender, e);
- if (Type == ButtonType.OnReleased)
- OnClicked.Invoke(sender, e);
- }
- public void HandleMouseMoved(object sender, MouseMoveEventArgs e)
- {
- Vector2f mousePos = new Vector2f(e.X, e.Y);
- if (!isHovered && Text.GetGlobalBounds().Contains(mousePos.X, mousePos.Y))
- {
- OnHoveredEntered.Invoke(sender, e);
- isHovered = true;
- return;
- }
- if (isHovered && !Text.GetGlobalBounds().Contains(mousePos.X, mousePos.Y))
- {
- OnHoveredExit.Invoke(sender, e);
- Text.Color = defaultColor;
- isHovered = false;
- }
- }
- #endregion
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement