DotNet 4.8.1 build of DotNetBar
This commit is contained in:
255
PROMS/DotNetBar Source Code/Symbols.cs
Normal file
255
PROMS/DotNetBar Source Code/Symbols.cs
Normal file
@@ -0,0 +1,255 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Text;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows.Forms;
|
||||
using System.ComponentModel;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
#if LAYOUT
|
||||
namespace DevComponents.DotNetBar.Layout
|
||||
#else
|
||||
namespace DevComponents.DotNetBar
|
||||
#endif
|
||||
{
|
||||
// Uses Font Awesome - http://fortawesome.github.com/Font-Awesome
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public static class Symbols
|
||||
{
|
||||
#region WinApi
|
||||
[DllImport("gdi32")]
|
||||
static extern IntPtr AddFontMemResourceEx(IntPtr pbFont,
|
||||
uint cbFont,
|
||||
IntPtr pdv,
|
||||
[In] ref uint pcFonts);
|
||||
[DllImport("gdi32")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
static extern bool RemoveFontMemResourceEx(IntPtr fh);
|
||||
#endregion
|
||||
|
||||
#region Internal Implementation
|
||||
|
||||
public static string GetSymbol(string symbol)
|
||||
{
|
||||
if (string.IsNullOrEmpty(symbol) == true)
|
||||
return (String.Empty);
|
||||
|
||||
if (symbol.Length == 1)
|
||||
return symbol;
|
||||
|
||||
int utf32 = 0;
|
||||
|
||||
if (int.TryParse(symbol, out utf32))
|
||||
return char.ConvertFromUtf32(utf32);
|
||||
|
||||
return symbol;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns specific font set at specified size/
|
||||
/// </summary>
|
||||
/// <param name="fontSize">Font size</param>
|
||||
/// <param name="symbolSet">Symbol set to return</param>
|
||||
/// <returns>Font</returns>
|
||||
public static Font GetFont(float fontSize, eSymbolSet symbolSet)
|
||||
{
|
||||
if (symbolSet == eSymbolSet.Awesome)
|
||||
return GetFontAwesome(fontSize);
|
||||
else
|
||||
return GetFontMaterial(fontSize);
|
||||
}
|
||||
|
||||
private static Dictionary<float, Font> _FontAwesomeCache = new Dictionary<float, Font>(10);
|
||||
private static Dictionary<float, Font> _FontMaterialCache = new Dictionary<float, Font>(10);
|
||||
/// <summary>
|
||||
/// Returns FontAwesome at specific size.
|
||||
/// </summary>
|
||||
/// <param name="fontSize">Font size in points</param>
|
||||
/// <returns>Font in desired size.</returns>
|
||||
private static Font GetFontAwesome(float fontSize)
|
||||
{
|
||||
Font font = null;
|
||||
EnsureFontAwesomeLoaded();
|
||||
if (fontSize <= 0) return _FontAwesome;
|
||||
if(_FontAwesomeCache.TryGetValue(fontSize, out font))
|
||||
return font;
|
||||
font = new Font(_FontAwesome.FontFamily, fontSize, FontStyle.Regular, GraphicsUnit.Point);
|
||||
_FontAwesomeCache.Add(fontSize, font);
|
||||
return font;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns FontAwesome at specific size.
|
||||
/// </summary>
|
||||
/// <param name="fontSize">Font size in points</param>
|
||||
/// <returns>Font in desired size.</returns>
|
||||
public static Font GetFontMaterial(float fontSize)
|
||||
{
|
||||
Font font = null;
|
||||
EnsureFontMaterialLoaded();
|
||||
if (fontSize <= 0) return _FontMaterial;
|
||||
if (_FontMaterialCache.TryGetValue(fontSize, out font))
|
||||
return font;
|
||||
font = new Font(_FontMaterial.FontFamily, fontSize, FontStyle.Regular, GraphicsUnit.Point);
|
||||
_FontMaterialCache.Add(fontSize, font);
|
||||
return font;
|
||||
}
|
||||
|
||||
private static Font _FontAwesome = null;
|
||||
/// <summary>
|
||||
/// Gets FontAwesome at default size.
|
||||
/// </summary>
|
||||
public static Font FontAwesome
|
||||
{
|
||||
get
|
||||
{
|
||||
EnsureFontAwesomeLoaded();
|
||||
return _FontAwesome;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Returns FontAwesome Family.
|
||||
/// </summary>
|
||||
public static FontFamily FontAwesomeFamily
|
||||
{
|
||||
get
|
||||
{
|
||||
EnsureFontAwesomeLoaded();
|
||||
return _FontAwesome.FontFamily;
|
||||
}
|
||||
}
|
||||
|
||||
private static Font _FontMaterial = null;
|
||||
/// <summary>
|
||||
/// Gets Material Font at default size.
|
||||
/// </summary>
|
||||
public static Font FontMaterial
|
||||
{
|
||||
get
|
||||
{
|
||||
EnsureFontMaterialLoaded();
|
||||
return _FontMaterial;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Returns Material Font Family.
|
||||
/// </summary>
|
||||
public static FontFamily FontMaterialFamily
|
||||
{
|
||||
get
|
||||
{
|
||||
EnsureFontMaterialLoaded();
|
||||
return _FontMaterial.FontFamily;
|
||||
}
|
||||
}
|
||||
|
||||
private static PrivateFontCollection _PrivateFontAwesomeCollection;
|
||||
private static PrivateFontCollection _PrivateFontMaterialCollection;
|
||||
private static GCHandle _FontAwesomeHandle;
|
||||
private static IntPtr _FontAwesomePointer;
|
||||
private static GCHandle _FontMaterialHandle;
|
||||
private static IntPtr _FontMaterialPointer;
|
||||
private static void EnsureFontAwesomeLoaded()
|
||||
{
|
||||
if (_FontAwesome == null)
|
||||
{
|
||||
_PrivateFontAwesomeCollection = new PrivateFontCollection();
|
||||
|
||||
byte[] fontAwesomeBuffer = LoadFont("SystemImages.FontAwesome.ttf");
|
||||
_FontAwesomeHandle = GCHandle.Alloc(fontAwesomeBuffer, GCHandleType.Pinned);
|
||||
_PrivateFontAwesomeCollection.AddMemoryFont(_FontAwesomeHandle.AddrOfPinnedObject(), fontAwesomeBuffer.Length);
|
||||
uint rsxCnt = 1;
|
||||
_FontAwesomePointer = AddFontMemResourceEx(_FontAwesomeHandle.AddrOfPinnedObject(),
|
||||
(uint)fontAwesomeBuffer.Length, IntPtr.Zero, ref rsxCnt);
|
||||
using (FontFamily ff = _PrivateFontAwesomeCollection.Families[0])
|
||||
{
|
||||
if (ff.IsStyleAvailable(FontStyle.Regular))
|
||||
{
|
||||
_FontAwesome = new Font(ff, _FontAwesomeDefaultSize, FontStyle.Regular, GraphicsUnit.Point);
|
||||
_FontAwesomeCache.Add(_FontAwesomeDefaultSize, _FontAwesome);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Error use default font...
|
||||
_FontAwesome = SystemInformation.MenuFont;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void EnsureFontMaterialLoaded()
|
||||
{
|
||||
if (_FontMaterial == null)
|
||||
{
|
||||
_PrivateFontMaterialCollection = new PrivateFontCollection();
|
||||
|
||||
byte[] fontMaterialBuffer = LoadFont("SystemImages.MaterialIcons-Regular.ttf");
|
||||
_FontMaterialHandle = GCHandle.Alloc(fontMaterialBuffer, GCHandleType.Pinned);
|
||||
_PrivateFontMaterialCollection.AddMemoryFont(_FontMaterialHandle.AddrOfPinnedObject(), fontMaterialBuffer.Length);
|
||||
uint rsxCnt = 1;
|
||||
_FontMaterialPointer = AddFontMemResourceEx(_FontMaterialHandle.AddrOfPinnedObject(),
|
||||
(uint)fontMaterialBuffer.Length, IntPtr.Zero, ref rsxCnt);
|
||||
using (FontFamily ff = _PrivateFontMaterialCollection.Families[0])
|
||||
{
|
||||
if (ff.IsStyleAvailable(FontStyle.Regular))
|
||||
{
|
||||
_FontMaterial = new Font(ff, _FontMaterialDefaultSize, FontStyle.Regular, GraphicsUnit.Point);
|
||||
_FontMaterialCache.Add(_FontMaterialDefaultSize, _FontMaterial);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Error use default font...
|
||||
_FontMaterial = SystemInformation.MenuFont;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static float _FontMaterialDefaultSize = 18;
|
||||
/// <summary>
|
||||
/// Gets the default size for the Material font size in points.
|
||||
/// </summary>
|
||||
public static float FontMaterialDefaultSize
|
||||
{
|
||||
get { return _FontMaterialDefaultSize; }
|
||||
}
|
||||
|
||||
private static float _FontAwesomeDefaultSize = 18;
|
||||
/// <summary>
|
||||
/// Gets the default size for the FontAwesome font size in points.
|
||||
/// </summary>
|
||||
public static float FontAwesomeDefaultSize
|
||||
{
|
||||
get { return _FontAwesomeDefaultSize; }
|
||||
}
|
||||
|
||||
internal static byte[] LoadFont(string fontFileName)
|
||||
{
|
||||
DotNetBarResourcesAttribute att = Attribute.GetCustomAttribute(System.Reflection.Assembly.GetExecutingAssembly(), typeof(DotNetBarResourcesAttribute)) as DotNetBarResourcesAttribute;
|
||||
if (att != null && att.NamespacePrefix != "")
|
||||
{
|
||||
using (Stream fontStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(att.NamespacePrefix + "." + fontFileName))
|
||||
{
|
||||
byte[] fontData = new byte[fontStream.Length];
|
||||
fontStream.Read(fontData, 0, fontData.Length);
|
||||
fontStream.Close();
|
||||
return fontData;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
using (Stream fontStream = typeof(DotNetBarManager).Module.Assembly.GetManifestResourceStream(typeof(DotNetBarManager), fontFileName))
|
||||
{
|
||||
byte[] fontData = new byte[fontStream.Length];
|
||||
fontStream.Read(fontData, 0, fontData.Length);
|
||||
fontStream.Close();
|
||||
return fontData;
|
||||
}
|
||||
}
|
||||
return new byte[0];
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user