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(); } /// /// Renders the MetroTileItem. /// /// MetroTileItem to render. /// Rendering event arguments. public static void Paint(MetroTileItem item, ItemPaintArgs pa) { MetroRenderer renderer = GetRenderer(Renderers.MetroTileItem); renderer.Render(GetRenderingInfo(item, pa, GetColorTable())); } /// /// Renders the MetroForm. /// /// Form to render. /// Rendering event arguments. public static void Paint(MetroAppForm form, PaintEventArgs e) { MetroRenderer renderer = GetRenderer(Renderers.MetroForm); renderer.Render(GetRenderingInfo(form, e, GetColorTable())); } /// /// Renders the MetroForm. /// /// Form to render. /// Rendering event arguments. internal static void Paint(BorderOverlay formOverlay, PaintEventArgs e) { MetroRenderer renderer = GetRenderer(Renderers.MetroForm); renderer.Render(GetRenderingInfo(formOverlay, e, GetColorTable())); } /// /// Renders the MetroTabItem. /// /// Form to render. /// Rendering event arguments. public static void Paint(MetroTabItem tab, ItemPaintArgs pa) { MetroRenderer renderer = GetRenderer(Renderers.MetroTabItem); renderer.Render(GetRenderingInfo(tab, pa, GetColorTable())); } /// /// Renders the MetroTabStrip /// /// TabStrip to render. /// Paint args public static void Paint(MetroTabStrip tabStrip, ItemPaintArgs pa) { MetroRenderer renderer = GetRenderer(Renderers.MetroTabStrip); MetroRendererInfo info = GetRenderingInfo(tabStrip, pa, GetColorTable()); renderer.Render(info); } /// /// Renders the MetroStatusBar. /// /// Status bar to render /// Paint args public static void Paint(MetroStatusBar bar, ItemPaintArgs pa) { MetroRenderer renderer = GetRenderer(Renderers.MetroStatusBar); renderer.Render(GetRenderingInfo(bar, pa, GetColorTable())); } /// /// Renders the MetroStatusBar. /// /// Status bar to render /// Paint args 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); } } /// /// Defines class for passing rendering information to renderer. /// public class MetroRendererInfo { /// /// Gets or sets the control to render. /// public object Control = null; /// /// Gets or sets the paint event arguments to use to render out control. /// public PaintEventArgs PaintEventArgs = null; /// /// Gets or sets the current color table. /// public MetroColorTable ColorTable; /// /// Gets or sets default font. /// public Font DefaultFont = SystemFonts.DefaultFont; /// /// Gets or sets default plain font. /// public Font DefaultPlainFont = null; /// /// Gets or sets right-to-left setting. /// public bool RightToLeft = false; /// /// Gets or sets the paint information for items. /// public ItemPaintArgs ItemPaintArgs = null; } /// /// Abstract renderer for rendering Metro-UI controls. /// public abstract class MetroRenderer { /// /// Renders the /// /// public abstract void Render(MetroRendererInfo renderingInfo); } public enum Renderers : int { MetroForm, MetroTabItem, MetroTabStrip, MetroStatusBar, MetroToolbar, MetroTileItem } }