| File: System\Windows\Forms\Design\ToolStripItemGlyph.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms.Design\src\System.Windows.Forms.Design.csproj (System.Windows.Forms.Design) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Drawing; using System.Windows.Forms.Design.Behavior; namespace System.Windows.Forms.Design; /// <summary> /// The glyph we put over the items. Basically this sets the hit-testable area of the item itself. /// </summary> internal class ToolStripItemGlyph : ControlBodyGlyph { public ToolStripItemGlyph(ToolStripItem item, ToolStripItemDesigner itemDesigner, Rectangle bounds, Behavior.Behavior? b) : base(bounds, Cursors.Default, item, b) { Item = item; ItemDesigner = itemDesigner; } public ToolStripItem Item { get; } public ToolStripItemDesigner ItemDesigner { get; } /// <summary> /// Abstract method that forces Glyph implementations to provide hit test logic. Given any point /// - if the Glyph has decided to be involved with that location, the Glyph will need to return a valid Cursor. /// Otherwise, returning null will cause the the BehaviorService to simply ignore it. /// </summary> public override Cursor? GetHitTest(Point p) { if (Item.Visible && Bounds.Contains(p)) { return Cursors.Default; } return null; } /// <summary> /// Control host don't draw on Invalidation... /// </summary> public override void Paint(PaintEventArgs pe) { if (Item is ToolStripControlHost && Item.IsOnDropDown) { if (Item is ToolStripComboBox && VisualStyles.VisualStyleRenderer.IsSupported) { // When processing WM_PAINT and the OS has a theme enabled, the native ComboBox // sends a WM_PAINT message to its parent when a theme is enabled in the OS forcing // a repaint in the AdornerWindow generating an infinite WM_PAINT message processing loop. // We guard against this here. return; } Item.Invalidate(); } } }