/// <summary> /// Draw a Windows XP style close button. /// </summary> protected Bitmap DrawThemeCloseButton(CloseButtonState state) { Bitmap output = new Bitmap(closeButton.Width, closeButton.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); Graphics fx = Graphics.FromImage(output); Rectangle rect = closeButton.ClientRectangle; VisualStyleElement vse = null; switch (state) { case CloseButtonState.Hot: vse = VisualStyleElement.Window.CloseButton.Hot; break; case CloseButtonState.Normal: vse = VisualStyleElement.Window.CloseButton.Normal; break; case CloseButtonState.Pushed: vse = VisualStyleElement.Window.CloseButton.Pressed; break; } VisualStyleRenderer vsr = new VisualStyleRenderer(vse); vsr.DrawBackground(fx, rect); fx.Dispose(); return(output); }
/// <summary> /// Draw a Windows 95 style close button. /// </summary> protected Bitmap DrawLegacyCloseButton(CloseButtonState state) { var output = new Bitmap(closeButton.Width, closeButton.Height, PixelFormat.Format32bppArgb); try { using (var fx = Graphics.FromImage(output)) { var rClose = new Rectangle(0, 0, closeButton.Width, closeButton.Height); ButtonState bState; if (state == CloseButtonState.Pushed) { bState = ButtonState.Pushed; } else // the Windows 95 theme doesn't have a "hot" button { bState = ButtonState.Normal; } ControlPaint.DrawCaptionButton(fx, rClose, CaptionButton.Close, bState); fx.DrawImage(output, rClose); } } catch { output.Dispose(); throw; } return(output); }
// --- mouse --- protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); ClearDragTarget(); if (e.Button != MouseButtons.Left || e.Clicks >= 2) { return; } var tabPage = GetTabPage(e.Location); if (tabPage != null) { if (e.Button == MouseButtons.Left && !KeyUtil.IsShiftPressed() && !KeyUtil.IsControlPressed()) { var r = GetCloseButtonBounds(tabPage); if (r.Contains(e.Location)) { OnCloseButtonPressed(tabPage); _closeButtonState = CloseButtonState.None; Invalidate(r); return; } } } SetupDragTarget(e.X, e.Y); }
protected override void OnMouseMove(MouseEventArgs e) { if (!ClientRectangle.Contains(e.Location)) { state = CloseButtonState.Normal; Invalidate(); } base.OnMouseMove(e); }
protected override void OnMouseLeave(EventArgs e) { base.OnMouseLeave(e); ClearDragTarget(); if (_closeButtonState != CloseButtonState.None) { _closeButtonState = CloseButtonState.None; Invalidate(_currentCloseButtonBounds); } _currentCloseButtonBounds = Rectangle.Empty; }
protected Bitmap DrawCloseButton(CloseButtonState state) { if (VisualStyleRenderer.IsSupported) { return(DrawThemeCloseButton(state)); } else { return(DrawLegacyCloseButton(state)); } }
static Texture GetCloseImage(CloseButtonState state) { if (state == CloseButtonState.Hovered) { return(Images.GetHoveredCloseIcon()); } if (state == CloseButtonState.Clicked) { return(Images.GetClickedCloseIcon()); } return(Images.GetCloseIcon()); }
void SetCloseButtonState( CloseButtonState newState, Action repaintAction) { if (mCloseButtonState == newState) { return; } mCloseButtonState = newState; if (repaintAction != null) { repaintAction(); } }
protected virtual void OnDragStart(DragStartEventArgs e) { if (_closeButtonState != CloseButtonState.None) { _closeButtonState = CloseButtonState.None; Invalidate(_currentCloseButtonBounds); } _currentCloseButtonBounds = Rectangle.Empty; var handler = DragStart; if (handler != null) { DragStart(this, e); } }
/// <summary> /// Draw a Windows XP style close button. /// </summary> protected Bitmap DrawThemeCloseButton(CloseButtonState state) { var output = new Bitmap(closeButton.Width, closeButton.Height, PixelFormat.Format32bppArgb); try { using (var fx = Graphics.FromImage(output)) { var rect = closeButton.ClientRectangle; VisualStyleElement vse = null; switch (state) { case CloseButtonState.Hot: vse = VisualStyleElement.Window.CloseButton.Hot; break; case CloseButtonState.Normal: vse = VisualStyleElement.Window.CloseButton.Normal; break; case CloseButtonState.Pushed: vse = VisualStyleElement.Window.CloseButton.Pressed; break; } var vsr = new VisualStyleRenderer(vse); vsr.DrawBackground(fx, rect); } } catch { output.Dispose(); throw; } return(output); }
static Rect DrawCloseButton( Rect toggleRect, CloseButtonState state) { int closeButtonSize = 15; GUIContent closeImage = new GUIContent(GetCloseImage(state)); Rect closeTabRect = new Rect( toggleRect.xMax - closeButtonSize - 1, toggleRect.y + (toggleRect.height / 2 - closeButtonSize / 2), closeButtonSize, closeButtonSize); GUI.Button(closeTabRect, closeImage, EditorStyles.label); return(new Rect( closeTabRect.x - 1, closeTabRect.y - 1, closeTabRect.width + 2, closeTabRect.height + 2)); }
// ======================================== // constructor // ======================================== public TabControlEx() { InitializeComponent(); AllowDrop = true; ClearDragTarget(); SetStyle(ControlStyles.UserPaint, true); //SetStyle(ControlStyles.AllPaintingInWmPaint, true); //SetStyle(ControlStyles.DoubleBuffer, true); //SetStyle(ControlStyles.OptimizedDoubleBuffer, true); //SetStyle(ControlStyles.ResizeRedraw, true); SetStyle(ControlStyles.SupportsTransparentBackColor, false); SetStyle(ControlStyles.Opaque, false); DoubleBuffered = true; ResizeRedraw = true; SizeMode = TabSizeMode.Fixed; Appearance = TabAppearance.Normal; Multiline = true; _backColor = SystemColors.Control; _borderColor = SystemColors.ControlDarkDark; //_isScrollWndVisible = false; //_closeTabImages = new ImageList(); //_closeTabImages.ColorDepth = ColorDepth.Depth32Bit; //var img = Properties.Resources.close_tab; //if (img != null) { // _closeTabImages.ImageSize = new Size(img.Height, img.Height); // _closeTabImages.Images.AddStrip(img); //} //_closeTabImage = Properties.Resources.cross_button; _closeButtonState = CloseButtonState.None; }
/// <summary> /// Draw a Windows 95 style close button. /// </summary> protected Bitmap DrawLegacyCloseButton(CloseButtonState state) { Bitmap output = new Bitmap(closeButton.Width, closeButton.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); Graphics fx = Graphics.FromImage(output); Rectangle rClose = new Rectangle(0, 0, closeButton.Width, closeButton.Height); ButtonState bState; if (state == CloseButtonState.Pushed) { bState = ButtonState.Pushed; } else // the Windows 95 theme doesn't have a "hot" button { bState = ButtonState.Normal; } ControlPaint.DrawCaptionButton(fx, rClose, CaptionButton.Close, bState); fx.DrawImage(output, rClose); fx.Dispose(); return(output); }
private void EnterNormalCloseButtonState() { if(_owner.ShowCloseButtons && closeButtonState != CloseButtonState.Normal) { closeButtonState = CloseButtonState.Normal; ForceUpdate(); } }
protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); if ( _dragStartRect != Rectangle.Empty && !_dragStartRect.Contains(e.X, e.Y) ) { var tabPage = GetTabPage(_dragStartPoint); if (tabPage != null) { var dse = new DragStartEventArgs(); OnDragStart(dse); var dataObj = new DataObject(); if (dse.DragDataObjects != null) { foreach (var obj in dse.DragDataObjects) { dataObj.SetData(obj); } } dataObj.SetData(tabPage); DoDragDrop(dataObj, DragDropEffects.Move | dse.AllowedEffect); } } else { if (_closeButtonState != CloseButtonState.Pressed) { var tabPage = GetTabPage(e.Location); if (tabPage != null) { var r = GetCloseButtonBounds(tabPage); var oldCloseButtonBounds = _currentCloseButtonBounds; if (r.Contains(e.Location)) { _closeButtonState = CloseButtonState.Hovered; } else { _closeButtonState = CloseButtonState.Normal; } if (r != oldCloseButtonBounds) { Invalidate(oldCloseButtonBounds); Invalidate(r); } _currentCloseButtonBounds = r; } else { _currentCloseButtonBounds = Rectangle.Empty; } } else { _currentCloseButtonBounds = Rectangle.Empty; } } }
private void EnterOverCloseButtonState() { if(closeButtonState == CloseButtonState.Normal) { closeButtonState = CloseButtonState.Over; ForceUpdate(); } }
protected void DrawCloseButton(Rectangle bounds, CloseButtonState state, Graphics g) { if(_owner.ShowCloseButtons == false || (_selected == false && _owner.ShowCloseButtons && _owner.CloseButtonsOnlyForSelected) || currentBackBrush == null || currentForeBrush == null) { return; } int x; int y; // set button position if((_owner.TabAlignment == TabAlignment.Top) || (_owner.TabAlignment == TabAlignment.Bottom)) { if(_owner.CloseButtonAlignment == CloseButtonAlignment.Left) { x = bounds.Left; } else { x = bounds.Left + bounds.Width - CloseButtonWidth - CloseButtonDistance / 2; } // center vertically y = bounds.Top + bounds.Height / 2 - CloseButtonHeight / 2; } else { if(_owner.CloseButtonAlignment == CloseButtonAlignment.Left) { y = bounds.Top; } else { y = bounds.Top + bounds.Height - CloseButtonHeight - CloseButtonDistance / 2; } // center horizontally x = bounds.Left + bounds.Width / 2 - CloseButtonWidth / 2 - 1; // -1 is required } // set location if(state == CloseButtonState.Normal) { closeButtonLocation = new Rectangle(x, y, CloseButtonWidth, CloseButtonHeight); } // draw the button accordingly to the state switch(state) { case CloseButtonState.Normal: { Brush borderBrush = this.Enabled ? currentForeBrush : Brushes.Silver; Brush backgroundBrush = new SolidBrush(_selected ? _owner.CloseButtonColorSelected : _owner.CloseButtonColor); int borderOpacity = _selected ? _owner.CloseButtonBorderOpacitySelected : _owner.CloseButtonBorderOpacity; Pen linePen = new Pen(MakeTransparentColor(((SolidBrush)borderBrush).Color, borderOpacity)); DrawCloseButtonInternal(x, y, linePen, backgroundBrush, g); break; } case CloseButtonState.Over: { Pen linePen = new Pen(((SolidBrush)currentForeBrush).Color); Brush backgroundBrush = new SolidBrush(_selected ? _owner.CloseButtonOverColorSelected : _owner.CloseButtonOverColor); DrawCloseButtonInternal(x, y, linePen, backgroundBrush, g); break; } case CloseButtonState.Pressed: { Pen linePen = new Pen(((SolidBrush)currentForeBrush).Color); DrawCloseButtonInternal(x, y, linePen, new SolidBrush(_owner.CloseButtonPressedColor), g); break; } } }
/// <summary> /// Draw a Windows XP style close button. /// </summary> protected Bitmap DrawThemeCloseButton(CloseButtonState state) { Bitmap output = new Bitmap(closeButton.Width, closeButton.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); Graphics fx = Graphics.FromImage(output); Rectangle rect = closeButton.ClientRectangle; VisualStyleElement vse = null; switch (state) { case CloseButtonState.Hot: vse = VisualStyleElement.Window.CloseButton.Hot; break; case CloseButtonState.Normal: vse = VisualStyleElement.Window.CloseButton.Normal; break; case CloseButtonState.Pushed: vse = VisualStyleElement.Window.CloseButton.Pressed; break; } VisualStyleRenderer vsr = new VisualStyleRenderer(vse); vsr.DrawBackground(fx, rect); fx.Dispose(); return output; }
protected override void OnMouseEnter(EventArgs e) { state = CloseButtonState.Hover; Invalidate(); base.OnMouseEnter(e); }
protected override void OnMouseDown(MouseEventArgs e) { state = CloseButtonState.Pressed; Invalidate(); base.OnMouseDown(e); }
protected override void OnMouseLeave(EventArgs e) { state = CloseButtonState.Normal; Invalidate(); base.OnMouseLeave(e); }
private void ExitOverCloseButtonState() { if(closeButtonState == CloseButtonState.Over) { closeButtonState = CloseButtonState.Normal; ForceUpdate(); } }
private void EnterPressedCloseButtonState() { if(closeButtonState == CloseButtonState.Over) { closeButtonState = CloseButtonState.Pressed; ForceUpdate(); } }
protected Bitmap DrawCloseButton(CloseButtonState state) { if (VisualStyleRenderer.IsSupported) return DrawThemeCloseButton(state); else return DrawLegacyCloseButton(state); }
private void ExitPressedCloseButtonState() { if(closeButtonState == CloseButtonState.Pressed) { closeButtonState = CloseButtonState.Normal; ForceUpdate(); } }
/// <summary> /// Draw a Windows 95 style close button. /// </summary> protected Bitmap DrawLegacyCloseButton(CloseButtonState state) { var output = new Bitmap(closeButton.Width, closeButton.Height, PixelFormat.Format32bppArgb); try { using (var fx = Graphics.FromImage(output)) { var rClose = new Rectangle(0, 0, closeButton.Width, closeButton.Height); ButtonState bState; if (state == CloseButtonState.Pushed) bState = ButtonState.Pushed; else // the Windows 95 theme doesn't have a "hot" button bState = ButtonState.Normal; ControlPaint.DrawCaptionButton(fx, rClose, CaptionButton.Close, bState); fx.DrawImage(output, rClose); } } catch { output.Dispose(); throw; } return output; }
/// <summary> /// Draw a Windows XP style close button. /// </summary> protected Bitmap DrawThemeCloseButton(CloseButtonState state) { var output = new Bitmap(closeButton.Width, closeButton.Height, PixelFormat.Format32bppArgb); try { using (var fx = Graphics.FromImage(output)) { var rect = closeButton.ClientRectangle; VisualStyleElement vse = null; switch (state) { case CloseButtonState.Hot: vse = VisualStyleElement.Window.CloseButton.Hot; break; case CloseButtonState.Normal: vse = VisualStyleElement.Window.CloseButton.Normal; break; case CloseButtonState.Pushed: vse = VisualStyleElement.Window.CloseButton.Pressed; break; } var vsr = new VisualStyleRenderer(vse); vsr.DrawBackground(fx, rect); } } catch { output.Dispose(); throw; } return output; }
/// <summary> /// Draw a Windows 95 style close button. /// </summary> protected Bitmap DrawLegacyCloseButton(CloseButtonState state) { Bitmap output = new Bitmap(closeButton.Width, closeButton.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); Graphics fx = Graphics.FromImage(output); Rectangle rClose = new Rectangle(0, 0, closeButton.Width, closeButton.Height); ButtonState bState; if (state == CloseButtonState.Pushed) bState = ButtonState.Pushed; else // the Windows 95 theme doesn't have a "hot" button bState = ButtonState.Normal; ControlPaint.DrawCaptionButton (fx, rClose, CaptionButton.Close, bState); fx.DrawImage(output, rClose); fx.Dispose(); return output; }