Renaming of folder Font and namespace fixes

This commit is contained in:
Flamefire committed 2013-04-30 19:37:05 +02:00
1 parent 2029f0cbef
commit a019ae4f18
16 files changed
+183 -1045

No files matched your search

+91 -92
View File
@@ -22,7 +22,6 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using Vocaluxe.Base;
using VocaluxeLib.Menu;
using VocaluxeLib.Menu.SongMenu;
@@ -496,138 +495,138 @@ namespace Vocaluxe.Base
}
}
}
}
class CPlaylistElement
{
private readonly CSong _Song;
private readonly int _SongID;
public int SongID
class CPlaylistElement
{
get { return _SongID; }
}
private readonly CSong _Song;
private string _MusicFilePath = String.Empty;
public string MusicFilePath
{
get
private readonly int _SongID;
public int SongID
{
if (_Song != null)
return _Song.GetMP3();
return _MusicFilePath;
get { return _SongID; }
}
set { _MusicFilePath = value; }
}
private string _MusicFilePath = String.Empty;
public string VideoFilePath
{
get
public string MusicFilePath
{
if (_Song != null)
return _Song.GetVideo();
get
{
if (_Song != null)
return _Song.GetMP3();
return string.Empty;
return _MusicFilePath;
}
set { _MusicFilePath = value; }
}
}
public string Title
{
get
public string VideoFilePath
{
if (_Song != null)
return _Song.Title;
get
{
if (_Song != null)
return _Song.GetVideo();
return "";
return string.Empty;
}
}
}
public string Artist
{
get
public string Title
{
if (_Song != null)
return _Song.Artist;
get
{
if (_Song != null)
return _Song.Title;
return "";
return "";
}
}
}
public float Start
{
get
public string Artist
{
if (_Song != null)
return _Song.Start;
get
{
if (_Song != null)
return _Song.Artist;
return 0f;
return "";
}
}
}
public float Finish
{
get
public float Start
{
if (_Song != null)
return _Song.Finish;
get
{
if (_Song != null)
return _Song.Start;
return 0f;
return 0f;
}
}
}
public STexture Cover
{
get
public float Finish
{
if (_Song != null)
return _Song.CoverTextureSmall;
get
{
if (_Song != null)
return _Song.Finish;
return CCover.NoCover;
return 0f;
}
}
}
public float VideoGap
{
get
public STexture Cover
{
if (_Song != null)
return _Song.VideoGap;
get
{
if (_Song != null)
return _Song.CoverTextureSmall;
return 0;
return CCover.NoCover;
}
}
}
public bool Duet
{
get
public float VideoGap
{
if (_Song != null)
return _Song.IsDuet;
get
{
if (_Song != null)
return _Song.VideoGap;
return false;
return 0;
}
}
}
public CPlaylistElement(CSong song)
{
MusicFilePath = string.Empty;
_SongID = song.ID;
public bool Duet
{
get
{
if (_Song != null)
return _Song.IsDuet;
_Song = song;
}
return false;
}
}
public CPlaylistElement(string filePath)
{
MusicFilePath = filePath;
_SongID = -1;
}
public CPlaylistElement(CSong song)
{
MusicFilePath = string.Empty;
_SongID = song.ID;
public CPlaylistElement()
{
MusicFilePath = string.Empty;
_SongID = -1;
_Song = song;
}
public CPlaylistElement(string filePath)
{
MusicFilePath = filePath;
_SongID = -1;
}
public CPlaylistElement()
{
MusicFilePath = string.Empty;
_SongID = -1;
}
}
}
+1 -1
View File
@@ -22,7 +22,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Windows.Forms;
using Vocaluxe.Base.Font;
using Vocaluxe.Base.Fonts;
using Vocaluxe.Screens;
using VocaluxeLib.Menu;
using VocaluxeLib.PartyModes;
+1 -1
View File
@@ -21,7 +21,7 @@ using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Drawing;
using Vocaluxe.Base.Font;
using Vocaluxe.Base.Fonts;
using VocaluxeLib.Menu;
using VocaluxeLib.Menu.SongMenu;
+1 -1
View File
@@ -23,7 +23,7 @@ using System.IO;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using Vocaluxe.Base.Font;
using Vocaluxe.Base.Fonts;
using VocaluxeLib.Menu;
namespace Vocaluxe.Base
-173
View File
@@ -1,173 +0,0 @@
#region license
// /*
// This file is part of Vocaluxe.
//
// Vocaluxe is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Vocaluxe is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>.
// */
#endregion
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Text;
using VocaluxeLib.Menu;
namespace Vocaluxe.Base.Font
{
class CFont : IDisposable
{
private readonly Dictionary<char, CGlyph> _Glyphs;
private PrivateFontCollection _Fonts;
private FontFamily _Family;
private readonly float _Sizeh;
private readonly string _FilePath;
private Font _LastFont;
public CFont(string file)
{
_FilePath = file;
_Glyphs = new Dictionary<char, CGlyph>();
switch (CConfig.TextureQuality)
{
case ETextureQuality.TR_CONFIG_TEXTURE_LOWEST:
_Sizeh = 25f;
break;
case ETextureQuality.TR_CONFIG_TEXTURE_LOW:
_Sizeh = 50f;
break;
case ETextureQuality.TR_CONFIG_TEXTURE_MEDIUM:
_Sizeh = 100f;
break;
case ETextureQuality.TR_CONFIG_TEXTURE_HIGH:
_Sizeh = 200f;
break;
case ETextureQuality.TR_CONFIG_TEXTURE_HIGHEST:
_Sizeh = 400f;
break;
default:
_Sizeh = 100f;
break;
}
}
public System.Drawing.Font GetFont()
{
if (_Fonts == null)
{
_Fonts = new PrivateFontCollection();
try
{
_Fonts.AddFontFile(_FilePath);
_Family = _Fonts.Families[0];
}
catch (Exception e)
{
CLog.LogError("Error opening font file " + _FilePath + ": " + e.Message);
}
}
return new System.Drawing.Font(_Family, CFonts.Height, CFonts.GetFontStyle(), GraphicsUnit.Pixel);
}
public void DrawGlyph(char chr, float x, float y, float z, SColorF color)
{
STexture texture;
SRectF rect;
GetOrAddGlyph(chr).GetTextureAndRect(x, y, z, out texture, out rect);
CDraw.DrawTexture(texture, rect, color);
}
public void DrawGlyph(char chr, float x, float y, float z, SColorF color, float begin, float end)
{
STexture texture;
SRectF rect;
GetOrAddGlyph(chr).GetTextureAndRect(x, y, z, out texture, out rect);
CDraw.DrawTexture(texture, rect, color, begin, end);
}
public void DrawGlyphReflection(char chr, float x, float y, float z, SColorF color, float rspace, float rheight)
{
STexture texture;
SRectF rect;
GetOrAddGlyph(chr).GetTextureAndRect(x, y, z, out texture, out rect);
CDraw.DrawTextureReflection(texture, rect, color, rect, rspace, rheight);
}
public float GetWidth(char chr)
{
return GetOrAddGlyph(chr).Width;
}
public float GetHeight(char chr)
{
return GetOrAddGlyph(chr).Height;
}
public CGlyph GetOrAddGlyph(char chr)
{
CGlyph glyph;
if (!_Glyphs.TryGetValue(chr, out glyph))
{
glyph = new CGlyph(chr, _Sizeh);
_Glyphs.Add(chr, glyph);
}
return glyph;
}
public void UnloadGlyphs()
{
foreach (CGlyph glyph in _Glyphs.Values)
glyph.UnloadTexture();
_Glyphs.Clear();
}
public void Dispose()
{
if (_Fonts != null)
{
_Fonts.Dispose();
_Fonts = null;
UnloadGlyphs();
}
GC.SuppressFinalize(this);
}
}
struct SFont
{
public string Name;
public bool IsThemeFont;
public int PartyModeID;
public string ThemeName;
public string Folder;
public string FileNormal;
public string FileItalic;
public string FileBold;
public string FileBoldItalic;
public float Outline; //0..1, 0=not outline 1=100% outline
public SColorF OutlineColor;
public CFont Normal;
public CFont Italic;
public CFont Bold;
public CFont BoldItalic;
}
}
-474
View File
@@ -1,474 +0,0 @@
#region license
// /*
// This file is part of Vocaluxe.
//
// Vocaluxe is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Vocaluxe is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>.
// */
#endregion
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
using VocaluxeLib.Menu;
namespace Vocaluxe.Base.Font
{
static class CFonts
{
private static readonly XmlWriterSettings _Settings = new XmlWriterSettings();
private static List<SFont> _Fonts;
private static int _CurrentFont;
private static float _Height = 1f;
public static int PartyModeID { get; set; }
public static EStyle Style = EStyle.Normal;
public static float Height
{
get { return _Height; }
set { _Height = value < 0f ? 0f : value; }
}
public static float Outline
{
get { return _Fonts[_CurrentFont].Outline; }
}
public static SColorF OutlineColor
{
get { return _Fonts[_CurrentFont].OutlineColor; }
}
public static void Init()
{
_Settings.Indent = true;
_Settings.Encoding = Encoding.UTF8;
_Settings.ConformanceLevel = ConformanceLevel.Document;
_CurrentFont = 0;
PartyModeID = -1;
BuildFonts();
}
public static void BuildFonts()
{
_Fonts = new List<SFont>();
_CurrentFont = 0;
_LoadFontList();
}
public static System.Drawing.Font GetFont()
{
return _GetCurrentFont().GetFont();
}
private static CFont _GetCurrentFont()
{
switch (Style)
{
case EStyle.Normal:
return _Fonts[_CurrentFont].Normal;
case EStyle.Italic:
return _Fonts[_CurrentFont].Italic;
case EStyle.Bold:
return _Fonts[_CurrentFont].Bold;
case EStyle.BoldItalic:
return _Fonts[_CurrentFont].BoldItalic;
}
//Just in case...
return _Fonts[_CurrentFont].Normal;
}
#region DrawText
public static void DrawText(string text, int x, int y, int h)
{
DrawText(text, h, x, y, 0f, new SColorF(0f, 0f, 0f, 1f));
}
public static void DrawText(string text, float x, float y, float z)
{
DrawText(text, Height, x, y, z, new SColorF(0f, 0f, 0f, 1f));
}
public static void DrawText(string text, float h, float x, float y, float z, SColorF color)
{
if (h <= 0f)
return;
if (text == "")
return;
Height = h;
CFont font = _GetCurrentFont();
float dx = x;
foreach (char chr in text)
{
font.DrawGlyph(chr, dx, y, z, color);
dx += font.GetWidth(chr);
}
}
public static void DrawTextReflection(string text, float h, float x, float y, float z, SColorF color, float rspace, float rheight)
{
if (h <= 0f)
return;
if (text == "")
return;
Height = h;
CFont font = _GetCurrentFont();
float dx = x;
foreach (char chr in text)
{
font.DrawGlyphReflection(chr, dx, y, z, color, rspace, rheight);
dx += font.GetWidth(chr);
}
}
public static void DrawText(string text, float h, float x, float y, float z, SColorF color, float begin, float end)
{
if (h <= 0f)
return;
if (text == "")
return;
Height = h;
float dx = x;
float w = GetTextWidth(text);
if (w <= 0f)
return;
float x1 = x + w * begin;
float x2 = x + w * end;
CFont font = _GetCurrentFont();
foreach (char chr in text)
{
float w2 = font.GetWidth(chr);
float b = (x1 - dx) / w2;
if (b < 1f)
{
if (b < 0f)
b = 0f;
float e = (x2 - dx) / w2;
if (e > 0f)
{
if (e > 1f)
e = 1f;
font.DrawGlyph(chr, dx, y, z, color, b, e);
}
}
dx += w2;
}
}
#endregion DrawText
public static FontStyle GetFontStyle()
{
switch (Style)
{
case EStyle.Normal:
return FontStyle.Regular;
case EStyle.Italic:
return FontStyle.Italic;
case EStyle.Bold:
return FontStyle.Bold;
case EStyle.BoldItalic:
return FontStyle.Bold | FontStyle.Italic;
default:
return FontStyle.Regular;
}
}
public static void SetFont(string fontName)
{
int index = _GetPartyFontIndex(PartyModeID, fontName);
if (index < 0)
index = _GetThemeFontIndex(CConfig.Theme, fontName);
if (index < 0)
index = _GetFontIndex(fontName);
if (index >= 0)
_CurrentFont = index;
}
public static RectangleF GetTextBounds(CText text)
{
return GetTextBounds(text, text.Height);
}
public static RectangleF GetTextBounds(CText text, float height)
{
Height = height;
return new RectangleF(text.X, text.Y, GetTextWidth(CLanguage.Translate(text.Text, text.TranslationID)),
GetTextHeight(CLanguage.Translate(text.Text, text.TranslationID)));
}
public static float GetTextWidth(string text)
{
CFont font = _GetCurrentFont();
return text.Sum(chr => font.GetWidth(chr));
}
public static float GetTextHeight(string text)
{
//return TextRenderer.MeasureText(text, GetFont()).Height;
CFont font = _GetCurrentFont();
return text == "" ? 0 : text.Select(font.GetHeight).Max();
}
private static void _LoadFontFiles(CXMLReader xmlReader, string fontFolder, string themeName = "", int partyModeId = -1)
{
string value = string.Empty;
int i = 1;
while (xmlReader.GetValue("//root/Fonts/Font" + i + "/Folder", out value, value))
{
SFont sf = new SFont {Folder = value, IsThemeFont = themeName != "", ThemeName = themeName, PartyModeID = partyModeId};
bool ok = true;
string name;
ok &= xmlReader.GetValue("//root/Fonts/Font" + i + "/Name", out name, value);
sf.Name = name;
ok &= xmlReader.GetValue("//root/Fonts/Font" + i + "/FileNormal", out value, value);
sf.FileNormal = value;
value = Path.Combine(fontFolder, Path.Combine(sf.Folder, value));
CFont f = new CFont(value);
sf.Normal = f;
ok &= xmlReader.GetValue("//root/Fonts/Font" + i + "/FileItalic", out value, value);
sf.FileItalic = value;
value = Path.Combine(fontFolder, Path.Combine(sf.Folder, value));
f = new CFont(value);
sf.Italic = f;
ok &= xmlReader.GetValue("//root/Fonts/Font" + i + "/FileBold", out value, value);
sf.FileBold = value;
value = Path.Combine(fontFolder, Path.Combine(sf.Folder, value));
f = new CFont(value);
sf.Bold = f;
ok &= xmlReader.GetValue("//root/Fonts/Font" + i + "/FileBoldItalic", out value, value);
sf.FileBoldItalic = value;
value = Path.Combine(fontFolder, Path.Combine(sf.Folder, value));
f = new CFont(value);
sf.BoldItalic = f;
sf.Outline = 0f;
ok &= xmlReader.TryGetFloatValue("//root/Fonts/Font" + i + "/Outline", ref sf.Outline);
sf.OutlineColor = new SColorF(0f, 0f, 0f, 1f);
ok &= xmlReader.TryGetFloatValue("//root/Fonts/Font" + i + "/OutlineColorR", ref sf.OutlineColor.R);
ok &= xmlReader.TryGetFloatValue("//root/Fonts/Font" + i + "/OutlineColorG", ref sf.OutlineColor.G);
ok &= xmlReader.TryGetFloatValue("//root/Fonts/Font" + i + "/OutlineColorB", ref sf.OutlineColor.B);
ok &= xmlReader.TryGetFloatValue("//root/Fonts/Font" + i + "/OutlineColorA", ref sf.OutlineColor.A);
if (ok)
_Fonts.Add(sf);
else
{
string fontTypes;
if (partyModeId >= 0)
fontTypes = "theme fonts for party mode";
else if (themeName != "")
fontTypes = "theme fonts for theme \"" + themeName + "\"";
else
fontTypes = "basic fonts";
CLog.LogError("Error loading " + fontTypes + ": Error in Font" + i);
}
i++;
}
}
/// <summary>
/// Load default fonts
/// </summary>
/// <returns></returns>
private static bool _LoadFontList()
{
CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(CSettings.FolderFonts, CSettings.FileFonts));
if (xmlReader == null)
return false;
_Fonts.Clear();
_LoadFontFiles(xmlReader, Path.Combine(Directory.GetCurrentDirectory(), CSettings.FolderFonts));
return true;
}
/// <summary>
/// Loads theme fonts from skin file
/// </summary>
public static void LoadThemeFonts(string themeName, string fontFolder, CXMLReader xmlReader)
{
_LoadFontFiles(xmlReader, fontFolder, themeName);
CLog.StartBenchmark(1, "BuildGlyphs");
_BuildGlyphs();
CLog.StopBenchmark(1, "BuildGlyphs");
}
/// <summary>
/// Loads party mode fonts from skin file
/// </summary>
public static void LoadPartyModeFonts(int partyModeID, string fontFolder, CXMLReader xmlReader)
{
_LoadFontFiles(xmlReader, fontFolder, "", partyModeID);
CLog.StartBenchmark(1, "BuildGlyphs");
_BuildGlyphs();
CLog.StopBenchmark(1, "BuildGlyphs");
}
public static void SaveThemeFonts(string themeName, XmlWriter writer)
{
if (_Fonts.Count == 0)
return;
int index = 0;
int fontNr = 1;
bool setStart = false;
while (index < _Fonts.Count)
{
if (_Fonts[index].IsThemeFont && _Fonts[index].ThemeName == themeName)
{
if (!setStart)
{
writer.WriteStartElement("Fonts");
setStart = true;
}
writer.WriteStartElement("Font" + fontNr);
writer.WriteElementString("Name", _Fonts[index].Name);
writer.WriteElementString("Folder", _Fonts[index].Folder);
writer.WriteElementString("Outline", _Fonts[index].Outline.ToString("#0.00"));
writer.WriteElementString("OutlineColorR", _Fonts[index].OutlineColor.R.ToString("#0.00"));
writer.WriteElementString("OutlineColorG", _Fonts[index].OutlineColor.G.ToString("#0.00"));
writer.WriteElementString("OutlineColorB", _Fonts[index].OutlineColor.B.ToString("#0.00"));
writer.WriteElementString("OutlineColorA", _Fonts[index].OutlineColor.A.ToString("#0.00"));
writer.WriteElementString("FileNormal", _Fonts[index].FileNormal);
writer.WriteElementString("FileBold", _Fonts[index].FileBold);
writer.WriteElementString("FileItalic", _Fonts[index].FileItalic);
writer.WriteElementString("FileBoldItalic", _Fonts[index].FileBoldItalic);
writer.WriteEndElement();
fontNr++;
}
index++;
}
if (setStart)
writer.WriteEndElement();
}
public static void UnloadThemeFonts(string themeName)
{
if (_Fonts.Count == 0)
return;
int index = 0;
while (index < _Fonts.Count)
{
if (_Fonts[index].IsThemeFont && _Fonts[index].ThemeName == themeName)
{
_Fonts[index].Normal.UnloadGlyphs();
_Fonts[index].Italic.UnloadGlyphs();
_Fonts[index].Bold.UnloadGlyphs();
_Fonts[index].BoldItalic.UnloadGlyphs();
_Fonts.RemoveAt(index);
}
else
index++;
}
}
private static int _GetFontIndex(string fontName)
{
for (int i = 0; i < _Fonts.Count; i++)
{
if (!_Fonts[i].IsThemeFont && _Fonts[i].Name == fontName)
return i;
}
return -1;
}
private static int _GetThemeFontIndex(string themeName, string fontName)
{
if (themeName == "" || fontName == "")
return -1;
for (int i = 0; i < _Fonts.Count; i++)
{
if (_Fonts[i].IsThemeFont && _Fonts[i].Name == fontName && _Fonts[i].ThemeName == themeName)
return i;
}
return -1;
}
private static int _GetPartyFontIndex(int partyModeID, string fontName)
{
if (partyModeID == -1 || fontName == "")
return -1;
for (int i = 0; i < _Fonts.Count; i++)
{
if (!_Fonts[i].IsThemeFont && _Fonts[i].PartyModeID == partyModeID && _Fonts[i].Name == fontName)
return i;
}
return -1;
}
private static void _BuildGlyphs()
{
const string text = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
for (int i = 0; i < _Fonts.Count; i++)
{
_CurrentFont = i;
foreach (char chr in text)
{
Style = EStyle.Normal;
_Fonts[_CurrentFont].Normal.GetOrAddGlyph(chr);
Style = EStyle.Bold;
_Fonts[_CurrentFont].Bold.GetOrAddGlyph(chr);
Style = EStyle.Italic;
_Fonts[_CurrentFont].Italic.GetOrAddGlyph(chr);
Style = EStyle.BoldItalic;
_Fonts[_CurrentFont].BoldItalic.GetOrAddGlyph(chr);
}
}
Style = EStyle.Normal;
SetFont("Normal");
}
}
}
-214
View File
@@ -1,214 +0,0 @@
#region license
// /*
// This file is part of Vocaluxe.
//
// Vocaluxe is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Vocaluxe is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Vocaluxe. If not, see <http://www.gnu.org/licenses/>.
// */
#endregion
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Drawing.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using VocaluxeLib.Menu;
namespace Vocaluxe.Base.Font
{
class CGlyph
{
private STexture _Texture;
private readonly SizeF _BoundingBox;
private readonly RectangleF _DrawBounding;
public float Width
{
get { return _BoundingBox.Width * _GetFactor(); }
}
public float Height
{
get { return _BoundingBox.Height * _GetFactor(); }
}
public CGlyph(char chr, float maxHeight)
{
float oldHeight = CFonts.Height;
float outline = CFonts.Outline;
float outlineSize = outline * maxHeight;
string chrString = chr.ToString();
CFonts.Height = maxHeight; // *factor;
//float factor = _GetFactor(chr, flags);
System.Drawing.Font fo = CFonts.GetFont();
SizeF fullSize, boundingSize;
Size bmpSize;
using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
{
fullSize = g.MeasureString(chrString, fo);
fullSize.Width += outlineSize;
if (chr != ' ')
{
//Gets exact height and width for drawing more than 1 char. But width is to small to draw char on bitmap as e.g. italic chars will get cropped
boundingSize = g.MeasureString(chrString, fo, -1, new StringFormat(StringFormat.GenericTypographic));
boundingSize.Width += outlineSize;
if (boundingSize.Height > 0)
boundingSize.Height += outlineSize;
else
boundingSize.Height = fullSize.Height;
bmpSize = new Size((int)fullSize.Width, (int)Math.Round(boundingSize.Height));
}
else
{
boundingSize = fullSize;
bmpSize = new Size(1, 1);
}
_BoundingBox = boundingSize;
}
using (Bitmap bmp = new Bitmap(bmpSize.Width, bmpSize.Height, PixelFormat.Format32bppArgb))
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(Color.Transparent);
if (chr == ' ')
{
_Texture = CDraw.AddTexture(bmp);
_DrawBounding = new RectangleF(0, 0, 1, 1);
}
else
{
g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
PointF point = new PointF(outlineSize / 2, outlineSize / 2);
using (GraphicsPath path = new GraphicsPath())
{
//Have to use size in em not pixels!
float emSize = fo.Size * fo.FontFamily.GetCellAscent(fo.Style) / fo.FontFamily.GetEmHeight(fo.Style);
path.AddString(chrString, fo.FontFamily, (int)fo.Style, emSize, point, new StringFormat());
using (Pen pen = new Pen(CFonts.OutlineColor.AsColor(), outlineSize))
{
pen.LineJoin = LineJoin.Round;
g.DrawPath(pen, path);
g.FillPath(Brushes.White, path);
}
}
Rectangle realBounds = _GetRealBounds(bmp);
_DrawBounding = realBounds;
float dx = (fullSize.Width - boundingSize.Width - 1) / 2;
_DrawBounding.X -= dx;
using (Bitmap bmpCropped = bmp.Clone(realBounds, PixelFormat.Format32bppArgb))
{
_Texture = CDraw.AddTexture(bmpCropped);
if (false)
{
if (outline > 0)
bmpCropped.Save("font/" + chr + "o" + CFonts.Style + "2.png", ImageFormat.Png);
else
bmpCropped.Save("font/" + chr + CFonts.Style + "2.png", ImageFormat.Png);
}
}
}
}
fo.Dispose();
CFonts.Height = oldHeight;
}
private float _GetFactor()
{
return CFonts.Height / _BoundingBox.Height;
}
public void UnloadTexture()
{
CDraw.RemoveTexture(ref _Texture);
}
public void GetTextureAndRect(float x, float y, float z, out STexture texture, out SRectF rect)
{
texture = _Texture;
float factor = _GetFactor();
x += _DrawBounding.X * factor;
y += _DrawBounding.Y * factor;
float w = _DrawBounding.Width * factor;
float h = _DrawBounding.Height * factor;
rect = new SRectF(x, y, w, h, z);
}
private static Rectangle _GetRealBounds(Bitmap bmp)
{
int minX = 0, maxX = bmp.Width - 1, minY = 0;
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
int values = bmpData.Width * bmp.Height;
Int32[] rgbValues = new Int32[values];
Marshal.Copy(bmpData.Scan0, rgbValues, 0, values);
int index = 0;
bool found = false;
//find from top
for (int y = 0; y < bmp.Height && !found; y++)
{
for (int x = 0; x < bmp.Width; x++)
{
if (rgbValues[index] != 0)
{
minX = x;
maxX = x;
minY = y;
found = true;
break;
}
index++;
}
}
found = false;
//find left
for (int x = 0; x < minX && !found; x++)
{
index = x + minY * bmp.Width;
for (int y = minY; y < bmp.Height; y++)
{
if (rgbValues[index] != 0)
{
found = true;
minX = x;
break;
}
index += bmp.Width;
}
}
found = false;
//find right
for (int x = bmp.Width - 1; x > maxX && !found; x--)
{
index = x + minY * bmp.Width;
for (int y = minY; y < bmp.Height; y++)
{
if (rgbValues[index] != 0)
{
found = true;
maxX = x;
break;
}
index += bmp.Width;
}
}
return new Rectangle(minX, minY, maxX - minX + 1, bmp.Height - minY);
}
}
}
+1 -1
View File
@@ -31,7 +31,7 @@ using System.Runtime.InteropServices;
using System.Windows.Forms;
using SlimDX.Windows;
using Vocaluxe.Base;
using Vocaluxe.Base.Font;
using Vocaluxe.Base.Fonts;
using VocaluxeLib.Menu;
namespace Vocaluxe.Lib.Draw
+1 -1
View File
@@ -27,7 +27,7 @@ using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;
using Vocaluxe.Base;
using Vocaluxe.Base.Font;
using Vocaluxe.Base.Fonts;
using VocaluxeLib.Menu;
namespace Vocaluxe.Lib.Draw
+1 -1
View File
@@ -30,7 +30,7 @@ using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Vocaluxe.Base;
using Vocaluxe.Base.Font;
using Vocaluxe.Base.Fonts;
using VocaluxeLib.Menu;
using BeginMode = OpenTK.Graphics.OpenGL.BeginMode;
using BlendingFactorDest = OpenTK.Graphics.OpenGL.BlendingFactorDest;
+1 -1
View File
@@ -25,7 +25,7 @@ using System.Reflection;
using System.Windows.Forms;
using Vocaluxe.Base;
using System.Runtime.ExceptionServices;
using Vocaluxe.Base.Font;
using Vocaluxe.Base.Fonts;
namespace Vocaluxe
{
+79 -79
View File
@@ -24,87 +24,87 @@ using System.Windows.Forms;
using Vocaluxe.Base;
using VocaluxeLib.Menu;
enum EDirection
{
Left,
Right,
Up
}
class CCreditName
{
private readonly CStatic _Image;
private readonly CStatic _ImgDot;
private readonly CParticleEffect _Particle;
private readonly int _ParticleOffsetX;
private readonly int _ParticleOffsetY;
public EDirection Direction;
public float StartTimeUp;
public bool Active;
public CCreditName(CStatic image, CStatic imgDot, CParticleEffect particle, int particleOffsetX, int particleOffsetY)
{
_Image = image;
_ImgDot = imgDot;
_Particle = particle;
_ParticleOffsetX = (int)Math.Round(particleOffsetX * image.Rect.W / image.Texture.Width - particle.Rect.W / 2);
_ParticleOffsetY = (int)Math.Round(particleOffsetY * image.Rect.H / image.Texture.Height - particle.Rect.H / 2);
Active = true;
}
public float X
{
get { return _Image.Rect.X; }
set
{
_Image.Rect.X = value;
_ImgDot.Rect.X = value + _ParticleOffsetX;
_Particle.Rect.X = value + _ParticleOffsetX;
}
}
public float Y
{
get { return _Image.Rect.Y; }
set
{
_Image.Rect.Y = value;
_ImgDot.Rect.Y = value + _ParticleOffsetY;
_Particle.Rect.Y = value + _ParticleOffsetY;
}
}
public float W
{
get { return _Image.Rect.W; }
}
public float H
{
get { return _Image.Rect.H; }
}
public float Alpha
{
get { return _Image.Alpha; }
set
{
_Image.Alpha = value;
_ImgDot.Alpha = value;
}
}
public void Draw()
{
if (Active)
{
_Image.Draw();
_ImgDot.Draw();
_Particle.Draw();
}
}
}
namespace Vocaluxe.Screens
{
enum EDirection
{
Left,
Right,
Up
}
class CCreditName
{
private readonly CStatic _Image;
private readonly CStatic _ImgDot;
private readonly CParticleEffect _Particle;
private readonly int _ParticleOffsetX;
private readonly int _ParticleOffsetY;
public EDirection Direction;
public float StartTimeUp;
public bool Active;
public CCreditName(CStatic image, CStatic imgDot, CParticleEffect particle, int particleOffsetX, int particleOffsetY)
{
_Image = image;
_ImgDot = imgDot;
_Particle = particle;
_ParticleOffsetX = (int)Math.Round(particleOffsetX * image.Rect.W / image.Texture.Width - particle.Rect.W / 2);
_ParticleOffsetY = (int)Math.Round(particleOffsetY * image.Rect.H / image.Texture.Height - particle.Rect.H / 2);
Active = true;
}
public float X
{
get { return _Image.Rect.X; }
set
{
_Image.Rect.X = value;
_ImgDot.Rect.X = value + _ParticleOffsetX;
_Particle.Rect.X = value + _ParticleOffsetX;
}
}
public float Y
{
get { return _Image.Rect.Y; }
set
{
_Image.Rect.Y = value;
_ImgDot.Rect.Y = value + _ParticleOffsetY;
_Particle.Rect.Y = value + _ParticleOffsetY;
}
}
public float W
{
get { return _Image.Rect.W; }
}
public float H
{
get { return _Image.Rect.H; }
}
public float Alpha
{
get { return _Image.Alpha; }
set
{
_Image.Alpha = value;
_ImgDot.Alpha = value;
}
}
public void Draw()
{
if (Active)
{
_Image.Draw();
_ImgDot.Draw();
_Particle.Draw();
}
}
}
class CScreenCredits : CMenu
{
// Version number for theme files. Increment it, if you've changed something on the theme files!
+1 -1
View File
@@ -19,7 +19,7 @@
using System.Windows.Forms;
using Vocaluxe.Base;
using Vocaluxe.Base.Font;
using Vocaluxe.Base.Fonts;
using VocaluxeLib.Menu;
namespace Vocaluxe.Screens
+1 -1
View File
@@ -19,7 +19,7 @@
using System.Windows.Forms;
using Vocaluxe.Base;
using Vocaluxe.Base.Font;
using Vocaluxe.Base.Fonts;
using VocaluxeLib.Menu;
namespace Vocaluxe.Screens
+1 -1
View File
@@ -25,7 +25,7 @@ using System.IO;
using System.Linq;
using System.Windows.Forms;
using Vocaluxe.Base;
using Vocaluxe.Base.Font;
using Vocaluxe.Base.Fonts;
using VocaluxeLib.Menu;
using VocaluxeLib.Menu.SingNotes;
using VocaluxeLib.Menu.SongMenu;
+3 -3
View File
@@ -176,7 +176,7 @@
<Compile Include="Base\CCover.cs" />
<Compile Include="Base\CDataBase.cs" />
<Compile Include="Base\CDraw.cs" />
<Compile Include="Base\Font\CFont.cs" />
<Compile Include="Base\Fonts\CFont.cs" />
<Compile Include="Base\CGame.cs" />
<Compile Include="Base\CController.cs" />
<Compile Include="Base\CLanguage.cs" />
@@ -195,8 +195,8 @@
<Compile Include="Base\CTheme.cs" />
<Compile Include="Base\CVideo.cs" />
<Compile Include="Base\CWebcam.cs" />
<Compile Include="Base\Font\CFonts.cs" />
<Compile Include="Base\Font\CGlyph.cs" />
<Compile Include="Base\Fonts\CFonts.cs" />
<Compile Include="Base\Fonts\CGlyph.cs" />
<Compile Include="CSplashScreen.cs">
<SubType>Form</SubType>
</Compile>