547 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			547 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Text;
 | 
						|
using System.Drawing;
 | 
						|
using System.Diagnostics;
 | 
						|
using System.Windows.Forms;
 | 
						|
using System.Drawing.Drawing2D;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar.Keyboard
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Represents a renderer for a VirtualKeyboard.
 | 
						|
    /// </summary>
 | 
						|
    public abstract class Renderer
 | 
						|
    {
 | 
						|
        private VirtualKeyboardColorTable _ColorTable;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the ColorTable used by this renderer to render the virtual keyboard.
 | 
						|
        /// </summary>
 | 
						|
        public VirtualKeyboardColorTable ColorTable
 | 
						|
        {
 | 
						|
            get { return _ColorTable; }
 | 
						|
            set { _ColorTable = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Draws the top bar of the VirtualKeyboard.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="args"></param>
 | 
						|
        public abstract void DrawTopBar(TopBarRendererEventArgs args);
 | 
						|
 | 
						|
 | 
						|
        public abstract void DrawCloseButton(CloseButtonRendererEventArgs args);
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Draws the background of the VirtualKeyboard.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="args">Provides context information.</param>
 | 
						|
        public abstract void DrawBackground(BackgroundRendererEventArgs args);
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Draws a key of the VirtualKeyboard.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="args">Provides context information.</param>
 | 
						|
        public abstract void DrawKey(KeyRendererEventArgs args);
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Called when the control starts rendering a new frame.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="args">Provides context information.</param>
 | 
						|
        public virtual void BeginFrame(BeginFrameRendererEventArgs args) { }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Called after the control finished rendering the frame.
 | 
						|
        /// </summary>
 | 
						|
        public virtual void EndFrame() { }
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Represents a VirtualKeyboard renderer with a flat style.
 | 
						|
    /// </summary>
 | 
						|
    public class FlatStyleRenderer : Renderer
 | 
						|
    {
 | 
						|
        // The ratio between the key size and the font that displays the letters on the keys.
 | 
						|
        private const float _KeyFontSizeRatio = 4;
 | 
						|
 | 
						|
        // The ratio between the key size and the font that displays the hints (e.g. Underline, Italic) on the keys.
 | 
						|
        private const float _HintFontSizeRatio = 7;
 | 
						|
 | 
						|
        private StringFormat _CenteredTextStringFormat;
 | 
						|
        private StringFormat _TopCenteredTextStringFormat;
 | 
						|
        private float _ScaleFactorX;
 | 
						|
        private float _ScaleFactorY;
 | 
						|
        private Font _KeyFont;
 | 
						|
        private Font _HintFont;
 | 
						|
        private Rectangle _KeysBounds;
 | 
						|
 | 
						|
        private static VirtualKeyboardColorTable _DefaultColorTable = new VirtualKeyboardColorTable();
 | 
						|
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether anti-alias smoothing is used while painting. Default value is true.
 | 
						|
        /// </summary>
 | 
						|
        public bool ForceAntiAlias { get; set; }
 | 
						|
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Starts rendering a new frame with the black style. This gives the renderer a chance to cash some resources.
 | 
						|
        /// </summary>
 | 
						|
        public override void BeginFrame(BeginFrameRendererEventArgs args)
 | 
						|
        {
 | 
						|
            _CenteredTextStringFormat = new StringFormat();
 | 
						|
            _CenteredTextStringFormat.Alignment = StringAlignment.Center;
 | 
						|
            _CenteredTextStringFormat.LineAlignment = StringAlignment.Center;
 | 
						|
 | 
						|
            _TopCenteredTextStringFormat = new StringFormat();
 | 
						|
            _TopCenteredTextStringFormat.Alignment = StringAlignment.Center;
 | 
						|
            _TopCenteredTextStringFormat.LineAlignment = StringAlignment.Near;
 | 
						|
 | 
						|
            // With this fx and fy we convert between logical units and pixels.
 | 
						|
            _ScaleFactorX = (float)args.Bounds.Width / args.Layout.LogicalWidth;
 | 
						|
            _ScaleFactorY = (float)args.Bounds.Height / args.Layout.LogicalHeight;
 | 
						|
 | 
						|
            _KeysBounds = args.Bounds;
 | 
						|
 | 
						|
            float min = Math.Min(_ScaleFactorX, _ScaleFactorY);
 | 
						|
 | 
						|
            float keyFontSize = min * LinearKeyboardLayout.NormalKeySize / _KeyFontSizeRatio;
 | 
						|
            float hintFontSize = min * LinearKeyboardLayout.NormalKeySize / _HintFontSizeRatio;
 | 
						|
 | 
						|
            if (keyFontSize < 1)
 | 
						|
                keyFontSize = 1;
 | 
						|
            if (hintFontSize < 1)
 | 
						|
                hintFontSize = 1;
 | 
						|
 | 
						|
            _KeyFont = new Font(args.Font.FontFamily, keyFontSize);
 | 
						|
            _HintFont = new Font(args.Font.FontFamily, hintFontSize);
 | 
						|
 | 
						|
            if (ForceAntiAlias)
 | 
						|
                args.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Ends rendering a new frame with the black style. This gives the renderer a chance to free resources used during the frame.
 | 
						|
        /// </summary>
 | 
						|
        public override void EndFrame()
 | 
						|
        {
 | 
						|
            if (_CenteredTextStringFormat != null)
 | 
						|
                _CenteredTextStringFormat.Dispose();
 | 
						|
 | 
						|
            if (_TopCenteredTextStringFormat != null)
 | 
						|
                _TopCenteredTextStringFormat.Dispose();
 | 
						|
 | 
						|
            if (_KeyFont != null)
 | 
						|
                _KeyFont.Dispose();
 | 
						|
 | 
						|
            if (_HintFont != null)
 | 
						|
                _HintFont.Dispose();
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates a new renderer for the black style.
 | 
						|
        /// </summary>
 | 
						|
        public FlatStyleRenderer()
 | 
						|
        {
 | 
						|
            ColorTable = _DefaultColorTable;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Draws the background of a VirtualKeyboard.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="args">Provides context information.</param>
 | 
						|
        public override void DrawBackground(BackgroundRendererEventArgs args)
 | 
						|
        {
 | 
						|
            if (ColorTable != null)
 | 
						|
                args.Graphics.FillRectangle(ColorTable.BackgroundBrush, args.ClipRectangle);
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        internal static void DrawBackspaceSign(Graphics g, Rectangle rect, Brush background, Brush foreground)
 | 
						|
        {
 | 
						|
            SmoothingMode osm = g.SmoothingMode; // old smoothing mode, to restore it at the end.
 | 
						|
            g.SmoothingMode = SmoothingMode.AntiAlias;
 | 
						|
 | 
						|
            int unit = Math.Min(rect.Width, rect.Height);
 | 
						|
 | 
						|
            Point[] points = new Point[]
 | 
						|
            {
 | 
						|
                new Point(-2 * unit, 0),
 | 
						|
                new Point(-1 * unit, -1 * unit),
 | 
						|
                new Point(2 * unit, -1 * unit),
 | 
						|
                new Point(2 * unit, 1 * unit),
 | 
						|
                new Point(-1 * unit, 1 * unit),
 | 
						|
                new Point(-2 * unit, 0)
 | 
						|
            };
 | 
						|
 | 
						|
            g.TranslateTransform(rect.Left + rect.Width / 2, rect.Top + rect.Height / 2);
 | 
						|
            g.ScaleTransform(0.125f, 0.125f);
 | 
						|
 | 
						|
            g.FillPolygon(foreground, points);
 | 
						|
 | 
						|
            g.ScaleTransform(8, 8);
 | 
						|
 | 
						|
 | 
						|
            g.ScaleTransform(0.125f, 0.125f);
 | 
						|
            g.TranslateTransform(unit / 2, 0);
 | 
						|
 | 
						|
            using (Pen p = new Pen(background, unit * 8 / 20))
 | 
						|
            {
 | 
						|
                g.DrawLine(p, -unit / 2, -unit / 2, unit / 2, unit / 2);
 | 
						|
                g.DrawLine(p, -unit / 2, unit / 2, unit / 2, -unit / 2);
 | 
						|
            }
 | 
						|
 | 
						|
            g.TranslateTransform(-unit / 2, 0);
 | 
						|
            g.ScaleTransform(8, 8);
 | 
						|
 | 
						|
            g.TranslateTransform(-(rect.Left + rect.Width / 2), -(rect.Top + rect.Height / 2));
 | 
						|
            g.SmoothingMode = osm;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        internal static void DrawSmileySign(Graphics g, Rectangle rect, Brush background, Brush foreground)
 | 
						|
        {
 | 
						|
            SmoothingMode osm = g.SmoothingMode; // old smoothing mode, to restore it at the end.
 | 
						|
            g.SmoothingMode = SmoothingMode.AntiAlias;
 | 
						|
 | 
						|
            int unit = Math.Min(rect.Width, rect.Height) * 2 / 5;
 | 
						|
            float u = unit / 20f;
 | 
						|
 | 
						|
            PointF[] points = new PointF[]
 | 
						|
            {
 | 
						|
                new PointF(-5, 0),
 | 
						|
                new PointF(-7, 1),
 | 
						|
                new PointF(-6, 5),
 | 
						|
                new PointF(-2, 8),
 | 
						|
                new PointF(2, 8),
 | 
						|
                new PointF(6, 5),
 | 
						|
                new PointF(7, 1),
 | 
						|
                new PointF(5, 0),
 | 
						|
                new PointF(0, 2)
 | 
						|
            };
 | 
						|
 | 
						|
            for (int i = 0; i < points.Length; i++)
 | 
						|
            {
 | 
						|
                points[i].X *= u;
 | 
						|
                points[i].Y *= u;
 | 
						|
            }
 | 
						|
 | 
						|
            g.TranslateTransform(rect.Left + rect.Width / 2, rect.Top + rect.Height / 2);
 | 
						|
 | 
						|
            g.FillEllipse(foreground, new Rectangle(-unit / 2, -unit / 2, unit, unit));
 | 
						|
 | 
						|
            g.FillClosedCurve(background, points, System.Drawing.Drawing2D.FillMode.Winding, 0.5f);
 | 
						|
 | 
						|
            g.FillEllipse(background, new Rectangle((int)(-7 * u), (int)(-7 * u), (int)(5 * u), (int)(5 * u)));
 | 
						|
            g.FillEllipse(background, new Rectangle((int)(2 * u), (int)(-7 * u), (int)(5 * u), (int)(5 * u)));
 | 
						|
 | 
						|
            g.TranslateTransform(-(rect.Left + rect.Width / 2), -(rect.Top + rect.Height / 2));
 | 
						|
 | 
						|
            g.SmoothingMode = osm;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        internal static void DrawUpArrow(Graphics g, Rectangle rect, Brush background, Brush foreground)
 | 
						|
        {
 | 
						|
            SmoothingMode osm = g.SmoothingMode; // old smoothing mode, to restore it at the end.
 | 
						|
            g.SmoothingMode = SmoothingMode.AntiAlias;
 | 
						|
 | 
						|
            int unit = Math.Min(rect.Width, rect.Height) / 2 / 4;
 | 
						|
 | 
						|
            g.TranslateTransform(rect.Left + rect.Width / 2, rect.Top + rect.Height / 2);
 | 
						|
 | 
						|
            using (Pen p = new Pen(foreground, unit / 2f))
 | 
						|
            {
 | 
						|
                g.DrawLine(p, 0, -unit * 1.5f, 0, unit * 1.5f);
 | 
						|
                g.DrawLine(p, 0, -unit * 1.5f, -unit, 0);
 | 
						|
                g.DrawLine(p, 0, -unit * 1.5f, unit, 0);
 | 
						|
            }
 | 
						|
 | 
						|
            g.TranslateTransform(-(rect.Left + rect.Width / 2), -(rect.Top + rect.Height / 2));
 | 
						|
 | 
						|
            g.SmoothingMode = osm;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Draws the key of a VirtualKeyboard.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="args">Provides context information.</param>
 | 
						|
        public override void DrawKey(KeyRendererEventArgs args)
 | 
						|
        {
 | 
						|
            Key key = args.Key;
 | 
						|
 | 
						|
            if (ColorTable != null)
 | 
						|
            {
 | 
						|
                Rectangle rect = args.Bounds;
 | 
						|
 | 
						|
                if (args.ClipRectangle.IntersectsWith(rect))
 | 
						|
                {
 | 
						|
                    Brush keyBrush = ColorTable.KeysBrush;
 | 
						|
                    if (key.Style == KeyStyle.Dark)
 | 
						|
                        keyBrush = ColorTable.DarkKeysBrush;
 | 
						|
                    else if (key.Style == KeyStyle.Light)
 | 
						|
                        keyBrush = ColorTable.LightKeysBrush;
 | 
						|
                    else if (key.Style == KeyStyle.Pressed)
 | 
						|
                        keyBrush = ColorTable.PressedKeysBrush;
 | 
						|
                    else if (key.Style == KeyStyle.Toggled)
 | 
						|
                        keyBrush = ColorTable.KeysBrush;
 | 
						|
 | 
						|
                    if (args.IsDown)
 | 
						|
                        keyBrush = ColorTable.DownKeysBrush;
 | 
						|
 | 
						|
                    Brush textBrush = ColorTable.TextBrush;
 | 
						|
                    if (key.Style == KeyStyle.Toggled)
 | 
						|
                        textBrush = ColorTable.ToggleTextBrush;
 | 
						|
                    if (args.IsDown)
 | 
						|
                        textBrush = ColorTable.DownTextBrush;
 | 
						|
 | 
						|
                    args.Graphics.FillRectangle(keyBrush, rect);
 | 
						|
 | 
						|
 | 
						|
                    if (key.Info == "{BACKSPACE}")
 | 
						|
                    {
 | 
						|
                        DrawBackspaceSign(args.Graphics, rect, keyBrush, textBrush);
 | 
						|
                    }
 | 
						|
                    else if (key.Caption == ":-)")
 | 
						|
                    {
 | 
						|
                        DrawSmileySign(args.Graphics, rect, keyBrush, textBrush);
 | 
						|
                    }
 | 
						|
                    else if (key.Caption == "Shift")
 | 
						|
                    {
 | 
						|
                        DrawUpArrow(args.Graphics, rect, keyBrush, textBrush);
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        args.Graphics.DrawString(key.Caption, _KeyFont, textBrush, rect, _CenteredTextStringFormat);
 | 
						|
 | 
						|
                        if (key.Hint != null)
 | 
						|
                        {
 | 
						|
                            args.Graphics.DrawString(key.Hint, _HintFont, textBrush, rect, _TopCenteredTextStringFormat);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        public override void DrawCloseButton(CloseButtonRendererEventArgs args)
 | 
						|
        {
 | 
						|
            Rectangle rect = args.Bounds;
 | 
						|
            rect.Inflate(-4, -4);
 | 
						|
            if (args.IsDown)
 | 
						|
            {
 | 
						|
                args.Graphics.FillRectangle(ColorTable.DownKeysBrush, args.Bounds);
 | 
						|
                using (Pen p = new Pen(ColorTable.DownTextBrush, 4))
 | 
						|
                {
 | 
						|
                    args.Graphics.DrawLine(p, rect.Left, rect.Top, rect.Right, rect.Bottom);
 | 
						|
                    args.Graphics.DrawLine(p, rect.Left, rect.Bottom, rect.Right, rect.Top);
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                //args.Graphics.FillRectangle(ColorTable.KeysBrush, args.Bounds);
 | 
						|
                using (Pen p = new Pen(ColorTable.TextBrush, 4))
 | 
						|
                {
 | 
						|
                    args.Graphics.DrawLine(p, rect.Left, rect.Top, rect.Right, rect.Bottom);
 | 
						|
                    args.Graphics.DrawLine(p, rect.Left, rect.Bottom, rect.Right, rect.Top);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        public override void DrawTopBar(TopBarRendererEventArgs args)
 | 
						|
        {
 | 
						|
            args.Graphics.DrawString(args.Text, args.Font, ColorTable.TopBarTextBrush, args.Bounds);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Provides data for Key rendering.
 | 
						|
    /// </summary>
 | 
						|
    public class KeyRendererEventArgs : EventArgs
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// Gets a reference to the Key instance being rendered.
 | 
						|
        /// </summary>
 | 
						|
        public Key Key { get; private set; }
 | 
						|
 | 
						|
        public Rectangle Bounds { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets a reference to the Graphics object to be used for rendering.
 | 
						|
        /// </summary>
 | 
						|
        public Graphics Graphics { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets a value indicating if this key is currently down.
 | 
						|
        /// </summary>
 | 
						|
        public bool IsDown { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the rectangle in which to paint.
 | 
						|
        /// </summary>
 | 
						|
        public Rectangle ClipRectangle { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates a new instance and initializes it with provided values.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="graphics">The Graphics object to be used for rendering.</param>
 | 
						|
        /// <param name="key">The Key instance being rendered.</param>
 | 
						|
        /// <param name="isDown">Indicates if the key is currently hold down.</param>
 | 
						|
        /// <param name="clipRectangle">The rectangle in which to paint.</param>
 | 
						|
        public KeyRendererEventArgs(Graphics graphics, Key key, bool isDown, Rectangle clipRectangle, Rectangle bounds)
 | 
						|
        {
 | 
						|
            Key = key;
 | 
						|
            Graphics = graphics;
 | 
						|
            IsDown = isDown;
 | 
						|
            ClipRectangle = clipRectangle;
 | 
						|
            Bounds = bounds;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Provides data for rendering the background of a VirtualKeyboard.
 | 
						|
    /// </summary>
 | 
						|
    public class BackgroundRendererEventArgs : EventArgs
 | 
						|
    {
 | 
						|
        public Rectangle Bounds { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets a reference to the Graphics object to be used for rendering.
 | 
						|
        /// </summary>
 | 
						|
        public Graphics Graphics { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the rectangle in which to paint.
 | 
						|
        /// </summary>
 | 
						|
        public Rectangle ClipRectangle { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates a new instance and initializes it with provided values.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="graphics">The Graphics object to be used for rendering.</param>
 | 
						|
        /// <param name="size">The area where the background should be drawn.</param>
 | 
						|
        public BackgroundRendererEventArgs(Graphics graphics, Rectangle clipRectangle, Rectangle bounds)
 | 
						|
        {
 | 
						|
            Graphics = graphics;
 | 
						|
            ClipRectangle = clipRectangle;
 | 
						|
            Bounds = bounds;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    public class BeginFrameRendererEventArgs : EventArgs
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// Gets a reference to the Graphics object to be used for rendering.
 | 
						|
        /// </summary>
 | 
						|
        public Graphics Graphics { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the rectangle in which to paint.
 | 
						|
        /// </summary>
 | 
						|
        public Rectangle ClipRectangle { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the size of the background area in which to render the keyboard.
 | 
						|
        /// </summary>
 | 
						|
        //public Size Size { get; private set; }
 | 
						|
        public Rectangle Bounds { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the font on the control.
 | 
						|
        /// </summary>
 | 
						|
        public Font Font { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the current KeyboardLayout which will be rendered in this frame.
 | 
						|
        /// </summary>
 | 
						|
        public KeyboardLayout Layout { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates a new instance and initializes it with provided values.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="size">The size of the background area.</param>
 | 
						|
        /// <param name="font">The font of the control.</param>
 | 
						|
        /// <param name="layout">The current KeyboardLayout that will be rendered in this frame.</param>
 | 
						|
        public BeginFrameRendererEventArgs(Graphics graphics, Rectangle clipRectangle, Rectangle bounds, Font font, KeyboardLayout layout)
 | 
						|
        {
 | 
						|
            Graphics = graphics;
 | 
						|
            ClipRectangle = clipRectangle;
 | 
						|
            Bounds = bounds;
 | 
						|
            Font = font;
 | 
						|
            Layout = layout;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    public class TopBarRendererEventArgs : EventArgs
 | 
						|
    {
 | 
						|
        public string Text { get; private set; }
 | 
						|
 | 
						|
        public Rectangle Bounds { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets a reference to the Graphics object to be used for rendering.
 | 
						|
        /// </summary>
 | 
						|
        public Graphics Graphics { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the rectangle in which to paint.
 | 
						|
        /// </summary>
 | 
						|
        public Rectangle ClipRectangle { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the font on the control.
 | 
						|
        /// </summary>
 | 
						|
        public Font Font { get; private set; }
 | 
						|
 | 
						|
        public TopBarRendererEventArgs(Graphics graphics, Rectangle clipRectangle, Rectangle bounds, string text, Font font)
 | 
						|
        {
 | 
						|
            Graphics = graphics;
 | 
						|
            ClipRectangle = clipRectangle;
 | 
						|
            Bounds = bounds;
 | 
						|
            Text = text;
 | 
						|
            Font = font;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    public class CloseButtonRendererEventArgs : EventArgs
 | 
						|
    {
 | 
						|
        public Rectangle Bounds { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets a reference to the Key instance being rendered.
 | 
						|
        /// </summary>
 | 
						|
        public Graphics Graphics { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the area where background should be drawn.
 | 
						|
        /// </summary>
 | 
						|
        public Rectangle ClipRectangle { get; private set; }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets a value indicating if this key is currently down.
 | 
						|
        /// </summary>
 | 
						|
        public bool IsDown { get; private set; }
 | 
						|
 | 
						|
        public CloseButtonRendererEventArgs(Graphics graphics, bool isDown, Rectangle clipRectangle, Rectangle bounds)
 | 
						|
        {
 | 
						|
            Graphics = graphics;
 | 
						|
            ClipRectangle = clipRectangle;
 | 
						|
            Bounds = bounds;
 | 
						|
            IsDown = isDown;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |