using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms.Design.Behavior; namespace System.Windows.Forms { public class RibbonQuickAccessToolbarGlyph : Glyph { private readonly BehaviorService _behaviorService; private readonly Ribbon _ribbon; private RibbonDesigner _componentDesigner; public RibbonQuickAccessToolbarGlyph(BehaviorService behaviorService, RibbonDesigner designer, Ribbon ribbon) : base(new RibbonQuickAccessGlyphBehavior(designer, ribbon)) { _behaviorService = behaviorService; _componentDesigner = designer; _ribbon = ribbon; } public override Rectangle Bounds { get { Point edge = _behaviorService.ControlToAdornerWindow(_ribbon); if (!_ribbon.CaptionBarVisible || !_ribbon.QuickAccessToolbar.Visible) { return Rectangle.Empty; } if (_ribbon.RightToLeft == RightToLeft.No) { return new Rectangle( edge.X + _ribbon.QuickAccessToolbar.Bounds.Right + _ribbon.QuickAccessToolbar.Bounds.Height / 2 + 4 + _ribbon.QuickAccessToolbar.DropDownButton.Bounds.Width, edge.Y + _ribbon.QuickAccessToolbar.Bounds.Top, _ribbon.QuickAccessToolbar.Bounds.Height, _ribbon.QuickAccessToolbar.Bounds.Height); } return new Rectangle( _ribbon.QuickAccessToolbar.Bounds.Left - _ribbon.QuickAccessToolbar.Bounds.Height / 2 - 4 - _ribbon.QuickAccessToolbar.DropDownButton.Bounds.Width, edge.Y + _ribbon.QuickAccessToolbar.Bounds.Top, _ribbon.QuickAccessToolbar.Bounds.Height, _ribbon.QuickAccessToolbar.Bounds.Height); } } public override Cursor GetHitTest(Point p) { if (Bounds.Contains(p)) { return Cursors.Hand; } return null; } public override void Paint(PaintEventArgs pe) { if (_ribbon.CaptionBarVisible && _ribbon.QuickAccessToolbar.Visible) { SmoothingMode smbuff = pe.Graphics.SmoothingMode; pe.Graphics.SmoothingMode = SmoothingMode.AntiAlias; using (SolidBrush b = new SolidBrush(Color.FromArgb(50, Color.Blue))) { pe.Graphics.FillEllipse(b, Bounds); } StringFormat sf = StringFormatFactory.Center(); pe.Graphics.DrawString("+", SystemFonts.DefaultFont, Brushes.White, Bounds, sf); pe.Graphics.SmoothingMode = smbuff; } } } public class RibbonQuickAccessGlyphBehavior : Behavior { private readonly Ribbon _ribbon; private readonly RibbonDesigner _designer; public RibbonQuickAccessGlyphBehavior(RibbonDesigner designer, Ribbon ribbon) { _designer = designer; _ribbon = ribbon; } public override bool OnMouseUp(Glyph g, MouseButtons button) { _designer.CreateItem(_ribbon, _ribbon.QuickAccessToolbar.Items, typeof(RibbonButton)); return base.OnMouseUp(g, button); } } }