Advertisement
Guest User

Button

a guest
Mar 21st, 2016
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.33 KB | None | 0 0
  1. class Button : Drawable, MouseInput
  2.     {
  3.         private Color defaultColor = new Color(255, 255, 255);
  4.         private Color hoveredColor = new Color(220, 220, 220);
  5.         private Color pressedColor = new Color(190, 190, 190);
  6.  
  7.         private bool isHovered = false;
  8.         private bool isPressed = false;
  9.  
  10.         public Text Text { get; private set; }
  11.  
  12.         /// <summary>
  13.         /// Enum that determines when the button should execute.
  14.         /// </summary>
  15.         public ButtonType Type { get; set; } = ButtonType.OnReleased;
  16.  
  17.         /// <summary>
  18.         /// Color of button when not pressed or hovered.
  19.         /// </summary>
  20.         public Color DefaultColor
  21.         {
  22.             get { return defaultColor; }
  23.             set
  24.             {
  25.                 defaultColor = value;
  26.  
  27.                 if (!isHovered && !isPressed)
  28.                     Text.Color = defaultColor;
  29.             }
  30.         }
  31.  
  32.         /// <summary>
  33.         /// Color of button when being hovered by mouse.
  34.         /// </summary>
  35.         public Color HoveredColor
  36.         {
  37.             get { return hoveredColor; }
  38.             set
  39.             {
  40.                 hoveredColor = value;
  41.  
  42.                 if (isHovered && !isPressed)
  43.                 {
  44.                     Text.Color = hoveredColor;
  45.                 }
  46.             }
  47.         }
  48.  
  49.         /// <summary>
  50.         /// Color of button when being pressed.
  51.         /// </summary>
  52.         public Color PressedColor
  53.         {
  54.             get { return pressedColor; }
  55.             set
  56.             {
  57.                 pressedColor = value;
  58.  
  59.                 if (isPressed)
  60.                 {
  61.                     Text.Color = pressedColor;
  62.                 }
  63.             }
  64.         }
  65.  
  66.         public Button()
  67.         {
  68.             Text = new Text();
  69.         }
  70.  
  71.         public Button(string displayString, Vector2f position, uint characterSize, Font font) : this()
  72.         {
  73.             Text.Font = font;
  74.             Text.DisplayedString = displayString;
  75.             Text.CharacterSize = characterSize;
  76.             Text.Origin = new Vector2f(Text.GetGlobalBounds().Width / 2, Text.GetGlobalBounds().Height / 2);
  77.             Text.Position = position;
  78.  
  79.             OnHoveredEntered += delegate { Text.Color = hoveredColor; };
  80.             OnHoveredExit += delegate { Text.Color = defaultColor; };
  81.             OnPressed += delegate { Text.Color = pressedColor; };
  82.             OnReleased += delegate { Text.Color = hoveredColor; };
  83.             OnClicked += delegate { };
  84.         }
  85.  
  86.         //Implement Drawable
  87.         #region Drawable
  88.  
  89.         public void Draw(RenderTarget target, RenderStates states)
  90.         {
  91.             target.Draw(Text);
  92.         }
  93.  
  94.         #endregion
  95.  
  96.         //Implement MouseInput
  97.  
  98.         #region MouseInput
  99.  
  100.         public event EventHandler OnPressed;
  101.         public event EventHandler OnReleased;
  102.         public event EventHandler OnClicked;
  103.         public event EventHandler OnHoveredEntered;
  104.         public event EventHandler OnHoveredExit;
  105.  
  106.         public void HandleMousePressed(object sender, MouseButtonEventArgs e)
  107.         {
  108.             if (e.Button != Mouse.Button.Left || !isHovered)
  109.                 return;
  110.  
  111.             OnPressed.Invoke(sender, e);
  112.  
  113.             if (Type == ButtonType.OnPressed)
  114.                 OnClicked.Invoke(sender, e);
  115.         }
  116.  
  117.         public void HandleMouseReleased(object sender, MouseButtonEventArgs e)
  118.         {
  119.             if (e.Button != Mouse.Button.Left || !isHovered)
  120.                 return;
  121.  
  122.             OnReleased.Invoke(sender, e);
  123.  
  124.             if (Type == ButtonType.OnReleased)
  125.                 OnClicked.Invoke(sender, e);
  126.         }
  127.  
  128.         public void HandleMouseMoved(object sender, MouseMoveEventArgs e)
  129.         {
  130.             Vector2f mousePos = new Vector2f(e.X, e.Y);
  131.  
  132.             if (!isHovered && Text.GetGlobalBounds().Contains(mousePos.X, mousePos.Y))
  133.             {
  134.                 OnHoveredEntered.Invoke(sender, e);
  135.  
  136.                 isHovered = true;
  137.  
  138.                 return;
  139.             }
  140.  
  141.             if (isHovered && !Text.GetGlobalBounds().Contains(mousePos.X, mousePos.Y))
  142.             {
  143.                 OnHoveredExit.Invoke(sender, e);
  144.  
  145.                 Text.Color = defaultColor;
  146.  
  147.                 isHovered = false;
  148.             }
  149.         }
  150.  
  151.         #endregion
  152.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement