public bool HandleEvent(ISkinLayout skinLayout, Rectangle layout, IGameContext context, Event @event) { var mouseEvent = @event as MouseEvent; var mousePressEvent = @event as MousePressEvent; var mouseReleaseEvent = @event as MouseReleaseEvent; var mouseMoveEvent = @event as MouseMoveEvent; if (mouseEvent == null) { return(false); } if (layout.Contains(mouseEvent.MouseState.X, mouseEvent.MouseState.Y)) { if (mouseMoveEvent != null) { State = ButtonUIState.Hover; } else if (mousePressEvent != null && mousePressEvent.Button == MouseButton.Left) { State = ButtonUIState.Clicked; this.Focus(); #if PLATFORM_WINDOWS || PLATFORM_MACOS || PLATFORM_LINUX using (var openFileDialog = new OpenFileDialog()) { if (openFileDialog.ShowDialog() == DialogResult.OK) { Path = openFileDialog.FileName; if (Changed != null) { Changed(this, new EventArgs()); } } Application.DoEvents(); } #endif return(true); } } else { State = ButtonUIState.None; } if (mouseReleaseEvent != null && mouseReleaseEvent.Button == MouseButton.Left) { State = ButtonUIState.None; } return(false); }
public bool HandleEvent(ISkinLayout skinLayout, Rectangle layout, IGameContext context, Event @event) { var mouseEvent = @event as MouseEvent; var mousePressEvent = @event as MousePressEvent; var mouseReleaseEvent = @event as MouseReleaseEvent; var mouseMoveEvent = @event as MouseMoveEvent; if (mouseEvent == null) { return false; } if (layout.Contains(mouseEvent.MouseState.X, mouseEvent.MouseState.Y)) { if (mouseMoveEvent != null) { State = ButtonUIState.Hover; } else if (mousePressEvent != null && mousePressEvent.Button == MouseButton.Left) { State = ButtonUIState.Clicked; this.Focus(); #if PLATFORM_WINDOWS || PLATFORM_MACOS || PLATFORM_LINUX using (var openFileDialog = new OpenFileDialog()) { if (openFileDialog.ShowDialog() == DialogResult.OK) { Path = openFileDialog.FileName; if (Changed != null) { Changed(this, new EventArgs()); } } Application.DoEvents(); } #endif return true; } } else { State = ButtonUIState.None; } if (mouseReleaseEvent != null && mouseReleaseEvent.Button == MouseButton.Left) { State = ButtonUIState.None; } return false; }
protected override void WndProc(ref Message m) { Graphics graphics = null; switch (m.Msg) { case 15: break; case 0x84: base.Invalidate(); base.WndProc(ref m); return; case 0x317: graphics = Graphics.FromHdc(m.WParam); break; default: base.WndProc(ref m); return; } if (graphics == null) { graphics = Graphics.FromHwnd(base.Handle); } GraphicsContainer container = graphics.BeginContainer(); base.WndProc(ref m); Rectangle empty = Rectangle.Empty; this.Theme.CalculateComboBoxRectangles(base.ClientRectangle, this.RightToLeft == RightToLeft.Yes, out empty, out this.m_buttonRectangle); int uiStateFlags = 0; if (!base.Enabled) { uiStateFlags = ButtonUIState.Disabled; } else if (!this.m_buttonRectangle.Contains(base.PointToClient(Control.MousePosition))) { this.m_overButton = 0; } else { this.m_overButton = 1; if ((Control.MouseButtons == MouseButtons.Left) && this.Focused) { uiStateFlags = ButtonUIState.Down; } else { uiStateFlags = ButtonUIState.Hot; } } graphics.BeginContainer(); ButtonUIState uiState = new ButtonUIState(uiStateFlags); graphics.Clip = new Region(new Rectangle(empty.X, empty.Y, 2, empty.Height)); this.Theme.PaintComboBox(graphics, base.ClientRectangle, uiState, this.ForeColor, this.BackColor, 1.0, empty, this.m_buttonRectangle); graphics.Clip = new Region(new Rectangle(2, empty.Y, empty.Width, 2)); this.Theme.PaintComboBox(graphics, base.ClientRectangle, uiState, this.ForeColor, this.BackColor, 1.0, empty, this.m_buttonRectangle); graphics.Clip = new Region(new Rectangle(2, empty.Bottom - 2, empty.Width, 2)); this.Theme.PaintComboBox(graphics, base.ClientRectangle, uiState, this.ForeColor, this.BackColor, 1.0, empty, this.m_buttonRectangle); graphics.Clip = new Region(new Rectangle(empty.Right - 2, 2, 2, empty.Height - 4)); this.Theme.PaintComboBox(graphics, base.ClientRectangle, uiState, this.ForeColor, this.BackColor, 1.0, empty, this.m_buttonRectangle); graphics.Clip = new Region(this.m_buttonRectangle); this.Theme.PaintComboBox(graphics, base.ClientRectangle, uiState, this.ForeColor, this.BackColor, 1.0, empty, this.m_buttonRectangle); graphics.EndContainer(container); graphics.Dispose(); }