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
}
}