230 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			230 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Text;
 | 
						|
using System.Windows.Forms;
 | 
						|
using DevComponents.DotNetBar.Metro.ColorTables;
 | 
						|
using System.Drawing;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar.Metro.Rendering
 | 
						|
{
 | 
						|
    public static class MetroRender
 | 
						|
    {
 | 
						|
        private static MetroRenderer[] _Renderers;
 | 
						|
        static MetroRender()
 | 
						|
        {
 | 
						|
            _Renderers = new MetroRenderer[Enum.GetNames(typeof(Renderers)).Length];
 | 
						|
            _Renderers[(int)Renderers.MetroForm] = new MetroFormRenderer();
 | 
						|
            _Renderers[(int)Renderers.MetroTabItem] = new MetroTabItemPainter();
 | 
						|
            _Renderers[(int)Renderers.MetroTabStrip] = new MetroTabStripPainter();
 | 
						|
            _Renderers[(int)Renderers.MetroStatusBar] = new MetroStatusBarPainter();
 | 
						|
            _Renderers[(int)Renderers.MetroToolbar] = new MetroToolbarPainter();
 | 
						|
            _Renderers[(int)Renderers.MetroTileItem] = new MetroTileItemPainter();
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Renders the MetroTileItem.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="item">MetroTileItem to render.</param>
 | 
						|
        /// <param name="e">Rendering event arguments.</param>
 | 
						|
        public static void Paint(MetroTileItem item, ItemPaintArgs pa)
 | 
						|
        {
 | 
						|
            MetroRenderer renderer = GetRenderer(Renderers.MetroTileItem);
 | 
						|
            renderer.Render(GetRenderingInfo(item, pa, GetColorTable()));
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Renders the MetroForm.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="form">Form to render.</param>
 | 
						|
        /// <param name="e">Rendering event arguments.</param>
 | 
						|
        public static void Paint(MetroAppForm form, PaintEventArgs e)
 | 
						|
        {
 | 
						|
            MetroRenderer renderer = GetRenderer(Renderers.MetroForm);
 | 
						|
            renderer.Render(GetRenderingInfo(form, e, GetColorTable()));
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Renders the MetroForm.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="formOverlay">Form to render.</param>
 | 
						|
        /// <param name="e">Rendering event arguments.</param>
 | 
						|
        internal static void Paint(BorderOverlay formOverlay, PaintEventArgs e)
 | 
						|
        {
 | 
						|
            MetroRenderer renderer = GetRenderer(Renderers.MetroForm);
 | 
						|
            renderer.Render(GetRenderingInfo(formOverlay, e, GetColorTable()));
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Renders the MetroTabItem.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="tab">Form to render.</param>
 | 
						|
        /// <param name="e">Rendering event arguments.</param>
 | 
						|
        public static void Paint(MetroTabItem tab, ItemPaintArgs pa)
 | 
						|
        {
 | 
						|
            MetroRenderer renderer = GetRenderer(Renderers.MetroTabItem);
 | 
						|
            renderer.Render(GetRenderingInfo(tab, pa, GetColorTable()));
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Renders the MetroTabStrip
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="tabStrip">TabStrip to render.</param>
 | 
						|
        /// <param name="pa">Paint args</param>
 | 
						|
        public static void Paint(MetroTabStrip tabStrip, ItemPaintArgs pa)
 | 
						|
        {
 | 
						|
            MetroRenderer renderer = GetRenderer(Renderers.MetroTabStrip);
 | 
						|
            MetroRendererInfo info = GetRenderingInfo(tabStrip, pa, GetColorTable());
 | 
						|
            renderer.Render(info);
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Renders the MetroStatusBar.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="bar">Status bar to render</param>
 | 
						|
        /// <param name="pa">Paint args</param>
 | 
						|
        public static void Paint(MetroStatusBar bar, ItemPaintArgs pa)
 | 
						|
        {
 | 
						|
            MetroRenderer renderer = GetRenderer(Renderers.MetroStatusBar);
 | 
						|
            renderer.Render(GetRenderingInfo(bar, pa, GetColorTable()));
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Renders the MetroStatusBar.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="bar">Status bar to render</param>
 | 
						|
        /// <param name="pa">Paint args</param>
 | 
						|
        public static void Paint(MetroToolbar bar, ItemPaintArgs pa)
 | 
						|
        {
 | 
						|
            MetroRenderer renderer = GetRenderer(Renderers.MetroToolbar);
 | 
						|
            renderer.Render(GetRenderingInfo(bar, pa, GetColorTable()));
 | 
						|
        }
 | 
						|
 | 
						|
        private static MetroRenderer GetRenderer(Renderers renderer)
 | 
						|
        {
 | 
						|
            return _Renderers[(int)renderer];
 | 
						|
        }
 | 
						|
 | 
						|
        private static MetroRendererInfo _RenderingInfo = new MetroRendererInfo();
 | 
						|
        private static MetroRendererInfo GetRenderingInfo(Control control, PaintEventArgs e, MetroColorTable colorTable)
 | 
						|
        {
 | 
						|
            _RenderingInfo.Control = control;
 | 
						|
            _RenderingInfo.PaintEventArgs = e;
 | 
						|
            _RenderingInfo.ColorTable = colorTable;
 | 
						|
            _RenderingInfo.DefaultFont = control.Font;
 | 
						|
            _RenderingInfo.RightToLeft = (control.RightToLeft == RightToLeft.Yes);
 | 
						|
            return _RenderingInfo;
 | 
						|
        }
 | 
						|
        private static MetroRendererInfo GetRenderingInfo(Control control, ItemPaintArgs e, MetroColorTable colorTable)
 | 
						|
        {
 | 
						|
            _RenderingInfo.Control = control;
 | 
						|
            _RenderingInfo.PaintEventArgs = e.PaintEventArgs;
 | 
						|
            _RenderingInfo.DefaultFont = e.Font;
 | 
						|
            _RenderingInfo.ColorTable = colorTable;
 | 
						|
            _RenderingInfo.RightToLeft = e.RightToLeft;
 | 
						|
            _RenderingInfo.ItemPaintArgs = e;
 | 
						|
            return _RenderingInfo;
 | 
						|
        }
 | 
						|
        private static MetroRendererInfo GetRenderingInfo(MetroTabStrip control, ItemPaintArgs e, MetroColorTable colorTable)
 | 
						|
        {
 | 
						|
            _RenderingInfo.Control = control;
 | 
						|
            _RenderingInfo.PaintEventArgs = e.PaintEventArgs;
 | 
						|
            _RenderingInfo.DefaultFont = e.Font;
 | 
						|
            if (e.Font.Bold)
 | 
						|
                _RenderingInfo.DefaultPlainFont = new Font(e.Font, FontStyle.Regular);
 | 
						|
            _RenderingInfo.ColorTable = colorTable;
 | 
						|
            _RenderingInfo.RightToLeft = e.RightToLeft;
 | 
						|
            _RenderingInfo.ItemPaintArgs = e;
 | 
						|
            return _RenderingInfo;
 | 
						|
        }
 | 
						|
        private static MetroRendererInfo GetRenderingInfo(object control, ItemPaintArgs e, MetroColorTable colorTable)
 | 
						|
        {
 | 
						|
            _RenderingInfo.Control = control;
 | 
						|
            _RenderingInfo.PaintEventArgs = e.PaintEventArgs;
 | 
						|
            _RenderingInfo.DefaultFont = e.Font;
 | 
						|
            _RenderingInfo.ColorTable = colorTable;
 | 
						|
            _RenderingInfo.RightToLeft = e.RightToLeft;
 | 
						|
            _RenderingInfo.ItemPaintArgs = e;
 | 
						|
            return _RenderingInfo;
 | 
						|
        }
 | 
						|
 | 
						|
        private static MetroColorTable _ColorTable = null;
 | 
						|
        public static MetroColorTable GetColorTable()
 | 
						|
        {
 | 
						|
            if (_ColorTable == null)
 | 
						|
            {
 | 
						|
                UpdateColorTable(MetroColorGeneratorParameters.Default);
 | 
						|
            }
 | 
						|
            return _ColorTable;
 | 
						|
        }
 | 
						|
 | 
						|
        internal static void UpdateColorTable(MetroColorGeneratorParameters colorParams)
 | 
						|
        {
 | 
						|
            if (StyleManager.IsVisualStudio2012(StyleManager.Style))
 | 
						|
                _ColorTable = VisualStudio2012ColorTableInitializer.CreateColorTable(colorParams);
 | 
						|
            else if (StyleManager.Style == eStyle.OfficeMobile2014)
 | 
						|
                _ColorTable = OfficeMobile2014MetroInitializer.CreateColorTable(colorParams);
 | 
						|
            else if (StyleManager.Style == eStyle.Office2016)
 | 
						|
                _ColorTable = Office2016MetroInitializer.CreateColorTable(colorParams);
 | 
						|
            else
 | 
						|
                _ColorTable = MetroColorTableInitializer.CreateColorTable(colorParams);
 | 
						|
        }
 | 
						|
        
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Defines class for passing rendering information to renderer.
 | 
						|
    /// </summary>
 | 
						|
    public class MetroRendererInfo
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the control to render.
 | 
						|
        /// </summary>
 | 
						|
        public object Control = null;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the paint event arguments to use to render out control.
 | 
						|
        /// </summary>
 | 
						|
        public PaintEventArgs PaintEventArgs = null;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the current color table.
 | 
						|
        /// </summary>
 | 
						|
        public MetroColorTable ColorTable;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets default font.
 | 
						|
        /// </summary>
 | 
						|
        public Font DefaultFont = SystemFonts.DefaultFont;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets default plain font.
 | 
						|
        /// </summary>
 | 
						|
        public Font DefaultPlainFont = null;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets right-to-left setting.
 | 
						|
        /// </summary>
 | 
						|
        public bool RightToLeft = false;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the paint information for items.
 | 
						|
        /// </summary>
 | 
						|
        public ItemPaintArgs ItemPaintArgs = null;
 | 
						|
    }
 | 
						|
    /// <summary>
 | 
						|
    /// Abstract renderer for rendering Metro-UI controls.
 | 
						|
    /// </summary>
 | 
						|
    public abstract class MetroRenderer
 | 
						|
    {
 | 
						|
        
 | 
						|
        /// <summary>
 | 
						|
        /// Renders the 
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="renderingInfo"></param>
 | 
						|
        public abstract void Render(MetroRendererInfo renderingInfo);
 | 
						|
    }
 | 
						|
 | 
						|
    public enum Renderers : int
 | 
						|
    {
 | 
						|
        MetroForm,
 | 
						|
        MetroTabItem,
 | 
						|
        MetroTabStrip,
 | 
						|
        MetroStatusBar,
 | 
						|
        MetroToolbar,
 | 
						|
        MetroTileItem
 | 
						|
    }
 | 
						|
}
 |