Merge branch 'Better_Graphics_Handling' into develop

Conflicts:
	Vocaluxe/Base/CBackgroundMusic.cs
	Vocaluxe/Base/CCover.cs
	Vocaluxe/Base/CDataBase.cs
	Vocaluxe/Base/CDraw.cs
	Vocaluxe/Base/CMain.cs
	Vocaluxe/Base/CProfiles.cs
	Vocaluxe/Base/CTheme.cs
	Vocaluxe/Base/CVideo.cs
	Vocaluxe/Base/CWebcam.cs
	Vocaluxe/Base/Fonts/CFont.cs
	Vocaluxe/Base/Fonts/CGlyph.cs
	Vocaluxe/Lib/Draw/CDirect3D.cs
	Vocaluxe/Lib/Draw/CDrawWinForm.cs
	Vocaluxe/Lib/Draw/COpenGL.cs
	Vocaluxe/Lib/Draw/IDraw.cs
	Vocaluxe/Lib/Video/CVideoDecoder.cs
	Vocaluxe/Lib/Video/CVideoDecoderFFmpeg.cs
	Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs
	Vocaluxe/Lib/Video/IVideoDecoder.cs
	Vocaluxe/Lib/Webcam/CAForgeNet.cs
	Vocaluxe/Lib/Webcam/IWebcam.cs
	Vocaluxe/Screens/CScreenCredits.cs
	Vocaluxe/Screens/CScreenNames.cs
	Vocaluxe/Screens/CScreenOptionsVideo.cs
	Vocaluxe/Screens/CScreenProfiles.cs
	Vocaluxe/Screens/CScreenSing.cs
	VocaluxeLib/Menu/IMenu.cs
	VocaluxeLib/Songs/CCategory.cs
	VocaluxeLib/Songs/CSong.cs
	VocaluxeLib/Structs.cs
	VocaluxeLib/VocaluxeLib.csproj
This commit is contained in:
Flamefire committed 2013-05-19 17:53:46 +02:00
commit 9d13c32b93
56 files changed
+1579 -1772

No files matched your search

@@ -146,7 +146,7 @@ namespace VocaluxeLib.PartyModes.ChallengeMedley
_Rand = rand; _Rand = rand;
} }
public CCombination GetNextCombination(List<int> playerNrDemand) public CCombination GetNextCombination(IEnumerable<int> playerNrDemand)
{ {
if (_Combs.Count == 0) if (_Combs.Count == 0)
_Create(); _Create();
+33 -28
View File
@@ -24,6 +24,9 @@ using System.IO;
using System.Linq; using System.Linq;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Songs; using VocaluxeLib.Songs;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu;
using VocaluxeLib.Menu.SongMenu;
namespace Vocaluxe.Base namespace Vocaluxe.Base
{ {
@@ -39,7 +42,7 @@ namespace Vocaluxe.Base
private static readonly List<CPlaylistElement> _PreviousFileNames = new List<CPlaylistElement>(); private static readonly List<CPlaylistElement> _PreviousFileNames = new List<CPlaylistElement>();
private static int _Video = -1; private static int _Video = -1;
private static STexture _CurrentVideoTexture = new STexture(-1); private static CTexture _CurrentVideoTexture;
private static readonly Stopwatch _FadeTimer = new Stopwatch(); private static readonly Stopwatch _FadeTimer = new Stopwatch();
private static bool _VideoEnabled; private static bool _VideoEnabled;
@@ -118,7 +121,7 @@ namespace Vocaluxe.Base
} }
} }
public static STexture Cover public static CTexture Cover
{ {
get { return _CurrentPlaylistElement.Cover; } get { return _CurrentPlaylistElement.Cover; }
} }
@@ -155,7 +158,7 @@ namespace Vocaluxe.Base
CSound.Fade(_CurrentMusicStream, 100f, CSettings.BackgroundMusicFadeTime); CSound.Fade(_CurrentMusicStream, 100f, CSettings.BackgroundMusicFadeTime);
CSound.Play(_CurrentMusicStream); CSound.Play(_CurrentMusicStream);
if (_VideoEnabled && _Video != -1) if (_VideoEnabled && _Video != -1)
CVideo.VdResume(_Video); CVideo.Resume(_Video);
IsPlaying = true; IsPlaying = true;
} }
else else
@@ -173,7 +176,7 @@ namespace Vocaluxe.Base
if (_VideoEnabled && _Video != -1) if (_VideoEnabled && _Video != -1)
{ {
CVideo.VdClose(_Video); CVideo.Close(_Video);
CDraw.RemoveTexture(ref _CurrentVideoTexture); CDraw.RemoveTexture(ref _CurrentVideoTexture);
_Video = -1; _Video = -1;
} }
@@ -191,8 +194,8 @@ namespace Vocaluxe.Base
if (_VideoEnabled && _Video != -1) if (_VideoEnabled && _Video != -1)
{ {
CVideo.VdPause(_Video); CVideo.Pause(_Video);
CVideo.VdSkip(_Video, CSound.GetPosition(_CurrentMusicStream) + CSettings.BackgroundMusicFadeTime, _CurrentPlaylistElement.VideoGap); CVideo.Skip(_Video, CSound.GetPosition(_CurrentMusicStream) + CSettings.BackgroundMusicFadeTime, _CurrentPlaylistElement.VideoGap);
} }
CSound.FadeAndPause(_CurrentMusicStream, 0f, CSettings.BackgroundMusicFadeTime); CSound.FadeAndPause(_CurrentMusicStream, 0f, CSettings.BackgroundMusicFadeTime);
IsPlaying = false; IsPlaying = false;
@@ -221,9 +224,9 @@ namespace Vocaluxe.Base
if (_VideoEnabled && _Video != -1) if (_VideoEnabled && _Video != -1)
{ {
if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON)
CVideo.VdSkip(_Video, _CurrentPlaylistElement.Start, _CurrentPlaylistElement.VideoGap); CVideo.Skip(_Video, _CurrentPlaylistElement.Start, _CurrentPlaylistElement.VideoGap);
else else
CVideo.VdSkip(_Video, 0f, _CurrentPlaylistElement.VideoGap); CVideo.Skip(_Video, 0f, _CurrentPlaylistElement.VideoGap);
} }
} }
else else
@@ -287,9 +290,9 @@ namespace Vocaluxe.Base
if (_VideoEnabled && _Video != -1) if (_VideoEnabled && _Video != -1)
{ {
if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON)
CVideo.VdSkip(_Video, _CurrentPlaylistElement.Start, _CurrentPlaylistElement.VideoGap); CVideo.Skip(_Video, _CurrentPlaylistElement.Start, _CurrentPlaylistElement.VideoGap);
else else
CVideo.VdSkip(_Video, 0f, _CurrentPlaylistElement.VideoGap); CVideo.Skip(_Video, 0f, _CurrentPlaylistElement.VideoGap);
} }
} }
else else
@@ -319,9 +322,9 @@ namespace Vocaluxe.Base
if (_VideoEnabled && _Video != -1) if (_VideoEnabled && _Video != -1)
{ {
if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON)
CVideo.VdSkip(_Video, _CurrentPlaylistElement.Start, _CurrentPlaylistElement.VideoGap); CVideo.Skip(_Video, _CurrentPlaylistElement.Start, _CurrentPlaylistElement.VideoGap);
else else
CVideo.VdSkip(_Video, 0f, _CurrentPlaylistElement.VideoGap); CVideo.Skip(_Video, 0f, _CurrentPlaylistElement.VideoGap);
} }
} }
} }
@@ -441,14 +444,14 @@ namespace Vocaluxe.Base
if (_VideoEnabled) if (_VideoEnabled)
{ {
_VideoEnabled = false; _VideoEnabled = false;
CVideo.VdClose(_Video); CVideo.Close(_Video);
_Video = -1; _Video = -1;
CDraw.RemoveTexture(ref _CurrentVideoTexture); CDraw.RemoveTexture(ref _CurrentVideoTexture);
return; return;
} }
if (CVideo.VdFinished(_Video)) if (CVideo.Finished(_Video))
{ {
CVideo.VdClose(_Video); CVideo.Close(_Video);
CDraw.RemoveTexture(ref _CurrentVideoTexture); CDraw.RemoveTexture(ref _CurrentVideoTexture);
_Video = -1; _Video = -1;
} }
@@ -457,22 +460,24 @@ namespace Vocaluxe.Base
_LoadVideo(); _LoadVideo();
} }
public static STexture GetVideoTexture() public static CTexture GetVideoTexture()
{ {
if (_Video != -1) if (_Video != -1)
{ {
float vtime; float vtime;
CVideo.VdGetFrame(_Video, ref _CurrentVideoTexture, CSound.GetPosition(_CurrentMusicStream), out vtime); if (CVideo.GetFrame(_Video, ref _CurrentVideoTexture, CSound.GetPosition(_CurrentMusicStream), out vtime))
if (_FadeTimer.ElapsedMilliseconds <= 3000L)
_CurrentVideoTexture.Color.A = _FadeTimer.ElapsedMilliseconds / 3000f;
else
{ {
_CurrentVideoTexture.Color.A = 1f; if (_FadeTimer.ElapsedMilliseconds <= 3000L)
_FadeTimer.Stop(); _CurrentVideoTexture.Color.A = _FadeTimer.ElapsedMilliseconds / 3000f;
else
{
_CurrentVideoTexture.Color.A = 1f;
_FadeTimer.Stop();
}
return _CurrentVideoTexture;
} }
return _CurrentVideoTexture;
} }
return new STexture(-1); return null;
} }
private static bool _IsBackgroundFile(CPlaylistElement element) private static bool _IsBackgroundFile(CPlaylistElement element)
@@ -484,11 +489,11 @@ namespace Vocaluxe.Base
{ {
if (_Video == -1) if (_Video == -1)
{ {
_Video = CVideo.VdLoad(_CurrentPlaylistElement.VideoFilePath); _Video = CVideo.Load(_CurrentPlaylistElement.VideoFilePath);
if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON) if (_CurrentPlaylistElement.Start > 0.001 && CConfig.BackgroundMusicUseStart == EOffOn.TR_CONFIG_ON)
CVideo.VdSkip(_Video, _CurrentPlaylistElement.Start, _CurrentPlaylistElement.VideoGap); CVideo.Skip(_Video, _CurrentPlaylistElement.Start, _CurrentPlaylistElement.VideoGap);
else else
CVideo.VdSkip(_Video, 0f, _CurrentPlaylistElement.VideoGap); CVideo.Skip(_Video, 0f, _CurrentPlaylistElement.VideoGap);
_VideoEnabled = true; _VideoEnabled = true;
_FadeTimer.Reset(); _FadeTimer.Reset();
_FadeTimer.Start(); _FadeTimer.Start();
@@ -576,7 +581,7 @@ namespace Vocaluxe.Base
} }
} }
public STexture Cover public CTexture Cover
{ {
get get
{ {
+23 -39
View File
@@ -23,7 +23,7 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Xml; using System.Xml;
using VocaluxeLib; using VocaluxeLib.Draw;
using VocaluxeLib.Menu; using VocaluxeLib.Menu;
namespace Vocaluxe.Base namespace Vocaluxe.Base
@@ -31,8 +31,7 @@ namespace Vocaluxe.Base
struct SCover struct SCover
{ {
public string Name; public string Name;
public string Value; public CTexture Texture;
public STexture Texture;
} }
struct SCoverTheme struct SCoverTheme
@@ -47,14 +46,10 @@ namespace Vocaluxe.Base
private static readonly XmlWriterSettings _Settings = new XmlWriterSettings(); private static readonly XmlWriterSettings _Settings = new XmlWriterSettings();
private static readonly List<SCover> _Cover = new List<SCover>(); private static readonly List<SCover> _Cover = new List<SCover>();
private static readonly List<SCoverTheme> _CoverThemes = new List<SCoverTheme>(); private static readonly List<SCoverTheme> _CoverThemes = new List<SCoverTheme>();
private static STexture _NoCover = new STexture(-1);
private static readonly Object _MutexCover = new Object(); private static readonly Object _MutexCover = new Object();
public static STexture NoCover public static CTexture NoCover { get; private set; }
{
get { return _NoCover; }
}
public static void Init() public static void Init()
{ {
@@ -98,21 +93,17 @@ namespace Vocaluxe.Base
/// <summary> /// <summary>
/// Returns a STexture for a given cover name. Returns "NoCover" if the cover does not exist. /// Returns a STexture for a given cover name. Returns "NoCover" if the cover does not exist.
/// </summary> /// </summary>
public static STexture Cover(string name) public static CTexture Cover(string name)
{ {
STexture cov = _NoCover;
lock (_MutexCover) lock (_MutexCover)
{ {
foreach (SCover cover in _Cover) foreach (SCover cover in _Cover)
{ {
if (cover.Name == name) if (cover.Name == name)
{ return cover.Texture;
cov = cover.Texture;
break;
}
} }
} }
return cov; return NoCover;
} }
/// <summary> /// <summary>
@@ -133,7 +124,7 @@ namespace Vocaluxe.Base
{ {
foreach (SCover cover in _Cover) foreach (SCover cover in _Cover)
{ {
STexture texture = cover.Texture; CTexture texture = cover.Texture;
CDraw.RemoveTexture(ref texture); CDraw.RemoveTexture(ref texture);
} }
_Cover.Clear(); _Cover.Clear();
@@ -145,16 +136,12 @@ namespace Vocaluxe.Base
/// </summary> /// </summary>
private static SCoverTheme _CoverTheme(string coverThemeName) private static SCoverTheme _CoverTheme(string coverThemeName)
{ {
SCoverTheme coverTheme = new SCoverTheme();
for (int i = 0; i < _CoverThemes.Count; i++) for (int i = 0; i < _CoverThemes.Count; i++)
{ {
if (_CoverThemes[i].Name == coverThemeName) if (_CoverThemes[i].Name == coverThemeName)
{ return _CoverThemes[i];
coverTheme = _CoverThemes[i];
break;
}
} }
return coverTheme; return new SCoverTheme();
} }
/// <summary> /// <summary>
@@ -195,7 +182,7 @@ namespace Vocaluxe.Base
{ {
SCoverTheme coverTheme = _CoverTheme(coverThemeName); SCoverTheme coverTheme = _CoverTheme(coverThemeName);
if (coverTheme.Name == "") if (String.IsNullOrEmpty(coverTheme.Name))
return; return;
CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(CSettings.FolderCover, coverTheme.File)); CXMLReader xmlReader = CXMLReader.OpenFile(Path.Combine(CSettings.FolderCover, coverTheme.File));
@@ -207,31 +194,30 @@ namespace Vocaluxe.Base
List<string> cover = xmlReader.GetValues("Cover"); List<string> cover = xmlReader.GetValues("Cover");
foreach (string coverName in cover) foreach (string coverName in cover)
{ {
SCover sk = new SCover();
string name; string name;
string value; string filePath;
xmlReader.GetValue("//root/Cover/" + coverName + "/Name", out name, String.Empty); xmlReader.GetValue("//root/Cover/" + coverName + "/Name", out name, String.Empty);
xmlReader.GetValue("//root/Cover/" + coverName + "/Path", out value, String.Empty); xmlReader.GetValue("//root/Cover/" + coverName + "/Path", out filePath, String.Empty);
sk.Name = name; string coverFilePath = Path.Combine(CSettings.FolderCover, Path.Combine(coverTheme.Folder, filePath));
sk.Value = Path.Combine(coverTheme.Folder, value); if (!File.Exists(coverFilePath))
sk.Texture = File.Exists(Path.Combine(CSettings.FolderCover, sk.Value)) continue;
? CDraw.AddTexture(Path.Combine(CSettings.FolderCover, Path.Combine(coverTheme.Folder, value))) : _NoCover; SCover sk = new SCover {Name = name, Texture = CDraw.AddTexture(coverFilePath)};
_Cover.Add(sk); _Cover.Add(sk);
if (sk.Name == "NoCover") if (sk.Name == "NoCover")
_NoCover = sk.Texture; NoCover = sk.Texture;
} }
} }
} }
List<string> files = new List<string>(); List<string> files = new List<string>();
string path = Path.Combine(CSettings.FolderCover, coverTheme.Folder); string coverPath = Path.Combine(CSettings.FolderCover, coverTheme.Folder);
files.AddRange(CHelper.ListFiles(path, "*.png", true, true)); files.AddRange(CHelper.ListFiles(coverPath, "*.png", true, true));
files.AddRange(CHelper.ListFiles(path, "*.jpg", true, true)); files.AddRange(CHelper.ListFiles(coverPath, "*.jpg", true, true));
files.AddRange(CHelper.ListFiles(path, "*.jpeg", true, true)); files.AddRange(CHelper.ListFiles(coverPath, "*.jpeg", true, true));
files.AddRange(CHelper.ListFiles(path, "*.bmp", true, true)); files.AddRange(CHelper.ListFiles(coverPath, "*.bmp", true, true));
foreach (string file in files) foreach (string file in files)
@@ -241,11 +227,9 @@ namespace Vocaluxe.Base
if (_CoverExists(name)) if (_CoverExists(name))
continue; continue;
// ReSharper disable AssignNullToNotNullAttribute // ReSharper disable AssignNullToNotNullAttribute
SCover sk = new SCover {Name = name, Value = Path.Combine(coverTheme.Folder, Path.GetFileName(file))}; SCover sk = new SCover {Name = name, Texture = CDraw.AddTexture(file)};
// ReSharper restore AssignNullToNotNullAttribute // ReSharper restore AssignNullToNotNullAttribute
sk.Texture = CDraw.AddTexture(Path.Combine(CSettings.FolderCover, sk.Value));
_Cover.Add(sk); _Cover.Add(sk);
} }
} }
+138
View File
@@ -0,0 +1,138 @@
using System;
using System.Diagnostics;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu;
namespace Vocaluxe.Base
{
class CCursor
{
private readonly Stopwatch _CursorFadingTimer = new Stopwatch();
private float _CursorTargetAlpha = 1f;
private float _CursorStartAlpha;
private float _CursorFadingTime = 0.5f;
private CTexture _Cursor;
private readonly Stopwatch _Movetimer = new Stopwatch();
public bool ShowCursor = true;
public bool Visible = true;
public int X
{
get { return (int)_Cursor.Rect.X; }
}
public int Y
{
get { return (int)_Cursor.Rect.Y; }
}
public bool IsActive
{
get { return _Movetimer.IsRunning; }
}
public void Draw()
{
if (_Movetimer.IsRunning && _Movetimer.ElapsedMilliseconds / 1000f > CSettings.MouseMoveOffTime)
{
_Movetimer.Stop();
_Fade(0f, 0.5f);
}
if (_CursorFadingTimer.IsRunning)
{
float t = _CursorFadingTimer.ElapsedMilliseconds / 1000f;
if (t < _CursorFadingTime)
{
if (_CursorTargetAlpha >= _CursorStartAlpha)
_Cursor.Color.A = _CursorStartAlpha + (_CursorTargetAlpha - _CursorStartAlpha) * t / _CursorFadingTime;
else
_Cursor.Color.A = (_CursorStartAlpha - _CursorTargetAlpha) * (1f - t / _CursorFadingTime);
}
else
{
_CursorFadingTimer.Stop();
_Cursor.Color.A = _CursorTargetAlpha;
}
}
if (Visible && (CSettings.GameState == EGameState.EditTheme || ShowCursor))
CDraw.DrawTexture(_Cursor);
}
public void UpdatePosition(int x, int y)
{
if (Math.Abs(_Cursor.Rect.X - x) > CSettings.MouseMoveDiffMin ||
Math.Abs(_Cursor.Rect.Y - y) > CSettings.MouseMoveDiffMin)
{
if (_CursorTargetAlpha < 0.01)
_Fade(1f, 0.2f);
_Movetimer.Reset();
_Movetimer.Start();
CSettings.MouseActive();
}
_Cursor.Rect.X = x;
_Cursor.Rect.Y = y;
}
public void LoadTextures()
{
_Cursor = CDraw.AddTexture(CTheme.GetSkinFilePath(CTheme.Cursor.SkinName, -1));
_Cursor.Color = !String.IsNullOrEmpty(CTheme.Cursor.Color)
? CTheme.GetColor(CTheme.Cursor.Color, -1) : new SColorF(CTheme.Cursor.R, CTheme.Cursor.G, CTheme.Cursor.B, CTheme.Cursor.A);
_Cursor.Rect.W = CTheme.Cursor.W;
_Cursor.Rect.H = CTheme.Cursor.H;
_Cursor.Rect.Z = CSettings.ZNear;
}
public void UnloadTextures()
{
CDraw.RemoveTexture(ref _Cursor);
}
public void ReloadTextures()
{
int x = X;
int y = Y;
UnloadTextures();
LoadTextures();
UpdatePosition(x, y);
}
public void FadeOut()
{
_Movetimer.Stop();
_Fade(0f, 0.5f);
}
public void FadeIn()
{
_Movetimer.Reset();
_Movetimer.Start();
_Fade(1f, 0.2f);
}
private void _Fade(float targetAlpha, float time)
{
_CursorFadingTimer.Stop();
_CursorFadingTimer.Reset();
if (targetAlpha >= 0f && targetAlpha <= 1f)
_CursorTargetAlpha = targetAlpha;
else
_CursorTargetAlpha = 1f;
if (time >= 0f)
_CursorFadingTime = time;
_CursorStartAlpha = _Cursor.Color.A;
_CursorFadingTimer.Start();
}
}
}
+5 -2
View File
@@ -37,6 +37,9 @@ using SQLiteDataReader = Mono.Data.Sqlite.SqliteDataReader;
using Community.CsharpSqlite; using Community.CsharpSqlite;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Songs; using VocaluxeLib.Songs;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu;
using VocaluxeLib.Menu.SongMenu;
namespace Vocaluxe.Base namespace Vocaluxe.Base
{ {
@@ -912,7 +915,7 @@ namespace Vocaluxe.Base
#endregion Highscores #endregion Highscores
#region Cover #region Cover
public static bool GetCover(string coverPath, ref STexture tex, int maxSize) public static bool GetCover(string coverPath, ref CTexture tex, int maxSize)
{ {
if (!File.Exists(coverPath)) if (!File.Exists(coverPath))
{ {
@@ -1141,7 +1144,7 @@ namespace Vocaluxe.Base
#endregion Cover #endregion Cover
#region CreditsRessources #region CreditsRessources
public static bool GetCreditsRessource(string fileName, ref STexture tex) public static bool GetCreditsRessource(string fileName, ref CTexture tex)
{ {
bool result = false; bool result = false;
+25 -20
View File
@@ -20,7 +20,7 @@
using System; using System;
using System.Drawing; using System.Drawing;
using Vocaluxe.Lib.Draw; using Vocaluxe.Lib.Draw;
using VocaluxeLib; using VocaluxeLib.Draw;
using VocaluxeLib.Menu; using VocaluxeLib.Menu;
namespace Vocaluxe.Base namespace Vocaluxe.Base
@@ -125,12 +125,12 @@ namespace Vocaluxe.Base
_Draw.ClearScreen(); _Draw.ClearScreen();
} }
public static STexture CopyScreen() public static CTexture CopyScreen()
{ {
return _Draw.CopyScreen(); return _Draw.CopyScreen();
} }
public static void CopyScreen(ref STexture texture) public static void CopyScreen(ref CTexture texture)
{ {
_Draw.CopyScreen(ref texture); _Draw.CopyScreen(ref texture);
} }
@@ -140,75 +140,80 @@ namespace Vocaluxe.Base
_Draw.MakeScreenShot(); _Draw.MakeScreenShot();
} }
public static STexture AddTexture(Bitmap bitmap) public static CTexture AddTexture(Bitmap bitmap)
{ {
return _Draw.AddTexture(bitmap); return _Draw.AddTexture(bitmap);
} }
public static STexture AddTexture(string texturePath) public static CTexture AddTexture(string texturePath)
{ {
return _Draw.AddTexture(texturePath); return _Draw.AddTexture(texturePath);
} }
public static STexture AddTexture(int w, int h, byte[] data) public static CTexture AddTexture(int w, int h, byte[] data)
{ {
return _Draw.AddTexture(w, h, data); return _Draw.AddTexture(w, h, data);
} }
public static STexture EnqueueTexture(int w, int h, byte[] data) public static CTexture EnqueueTexture(int w, int h, byte[] data)
{ {
return _Draw.EnqueueTexture(w, h, data); return _Draw.EnqueueTexture(w, h, data);
} }
public static bool UpdateTexture(ref STexture texture, byte[] data) public static bool UpdateTexture(CTexture texture, int w, int h, byte[] data)
{ {
return _Draw.UpdateTexture(ref texture, data); return _Draw.UpdateTexture(texture, w, h, data);
} }
public static void RemoveTexture(ref STexture texture) public static bool UpdateOrAddTexture(ref CTexture texture, int w, int h, byte[] data)
{
return _Draw.UpdateOrAddTexture(ref texture, w, h, data);
}
public static void RemoveTexture(ref CTexture texture)
{ {
_Draw.RemoveTexture(ref texture); _Draw.RemoveTexture(ref texture);
} }
public static void DrawTexture(STexture texture) public static void DrawTexture(CTexture texture)
{ {
_Draw.DrawTexture(texture); _Draw.DrawTexture(texture);
} }
public static void DrawTexture(STexture texture, SRectF rect) public static void DrawTexture(CTexture texture, SRectF rect)
{ {
_Draw.DrawTexture(texture, rect); _Draw.DrawTexture(texture, rect);
} }
public static void DrawTexture(STexture texture, SRectF rect, SColorF color, bool mirrored = false) public static void DrawTexture(CTexture texture, SRectF rect, SColorF color, bool mirrored = false)
{ {
_Draw.DrawTexture(texture, rect, color, mirrored); _Draw.DrawTexture(texture, rect, color, mirrored);
} }
public static void DrawTexture(STexture texture, SRectF rect, SColorF color, SRectF bounds, bool mirrored = false) public static void DrawTexture(CTexture texture, SRectF rect, SColorF color, SRectF bounds, bool mirrored = false)
{ {
_Draw.DrawTexture(texture, rect, color, bounds, mirrored); _Draw.DrawTexture(texture, rect, color, bounds, mirrored);
} }
public static void DrawTexture(STexture texture, SRectF rect, SColorF color, float begin, float end) public static void DrawTexture(CTexture texture, SRectF rect, SColorF color, float begin, float end)
{ {
_Draw.DrawTexture(texture, rect, color, begin, end); _Draw.DrawTexture(texture, rect, color, begin, end);
} }
public static void DrawTexture(CStatic staticBounds, STexture texture, EAspect aspect) public static void DrawTexture(CStatic staticBounds, CTexture texture, EAspect aspect)
{ {
if (texture.Height <= 0f) if (texture == null)
return; return;
RectangleF bounds = new RectangleF(staticBounds.Rect.X, staticBounds.Rect.Y, staticBounds.Rect.W, staticBounds.Rect.H); RectangleF bounds = new RectangleF(staticBounds.Rect.X, staticBounds.Rect.Y, staticBounds.Rect.W, staticBounds.Rect.H);
RectangleF rect = new RectangleF(0f, 0f, texture.Width, texture.Height); RectangleF rect;
CHelper.SetRect(bounds, out rect, rect.Width / rect.Height, aspect); CHelper.SetRect(bounds, out rect, texture.OrigAspect, aspect);
DrawTexture(texture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, staticBounds.Rect.Z), DrawTexture(texture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, staticBounds.Rect.Z),
texture.Color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f)); texture.Color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f));
} }
public static void DrawTextureReflection(STexture texture, SRectF rect, SColorF color, SRectF bounds, float space, float height) public static void DrawTextureReflection(CTexture texture, SRectF rect, SColorF color, SRectF bounds, float space, float height)
{ {
_Draw.DrawTextureReflection(texture, rect, color, bounds, space, height); _Draw.DrawTextureReflection(texture, rect, color, bounds, space, height);
} }
+5 -172
View File
@@ -30,152 +30,11 @@ using VocaluxeLib.PartyModes;
namespace Vocaluxe.Base namespace Vocaluxe.Base
{ {
class CCursor
{
private readonly Stopwatch _CursorFadingTimer;
private float _CursorTargetAlpha;
private float _CursorStartAlpha;
private float _CursorFadingTime;
private STexture _Cursor;
private readonly string _CursorName = String.Empty;
private readonly Stopwatch _Movetimer;
public bool ShowCursor;
public bool Visible = true;
public bool CursorVisible = true;
public int X
{
get { return (int)_Cursor.Rect.X; }
set { UpdatePosition(value, (int)_Cursor.Rect.Y); }
}
public int Y
{
get { return (int)_Cursor.Rect.Y; }
set { UpdatePosition((int)_Cursor.Rect.X, value); }
}
public bool IsActive
{
get { return _Movetimer.IsRunning; }
}
public CCursor(string textureName, SColorF color, float w, float h, float z)
{
_CursorFadingTimer = new Stopwatch();
ShowCursor = true;
_CursorTargetAlpha = 1f;
_CursorStartAlpha = 0f;
_CursorFadingTime = 0.5f;
_CursorName = textureName;
_Cursor = CDraw.AddTexture(CTheme.GetSkinFilePath(_CursorName, -1));
_Cursor.Color = color;
_Cursor.Rect.W = w;
_Cursor.Rect.H = h;
_Cursor.Rect.Z = z;
_Movetimer = new Stopwatch();
}
public void Draw()
{
if (_Movetimer.IsRunning && _Movetimer.ElapsedMilliseconds / 1000f > CSettings.MouseMoveOffTime)
{
_Movetimer.Stop();
_Fade(0f, 0.5f);
}
if (_CursorFadingTimer.IsRunning)
{
float t = _CursorFadingTimer.ElapsedMilliseconds / 1000f;
if (t < _CursorFadingTime)
{
if (_CursorTargetAlpha >= _CursorStartAlpha)
_Cursor.Color.A = _CursorStartAlpha + (_CursorTargetAlpha - _CursorStartAlpha) * t / _CursorFadingTime;
else
_Cursor.Color.A = (_CursorStartAlpha - _CursorTargetAlpha) * (1f - t / _CursorFadingTime);
}
else
{
_CursorFadingTimer.Stop();
_Cursor.Color.A = _CursorTargetAlpha;
}
}
if (CursorVisible && (CSettings.GameState == EGameState.EditTheme || ShowCursor))
CDraw.DrawTexture(_Cursor);
}
public void UpdatePosition(int x, int y)
{
if (Math.Abs(_Cursor.Rect.X - x) > CSettings.MouseMoveDiffMin ||
Math.Abs(_Cursor.Rect.Y - y) > CSettings.MouseMoveDiffMin)
{
if (_CursorTargetAlpha < 0.01)
_Fade(1f, 0.2f);
_Movetimer.Reset();
_Movetimer.Start();
CSettings.MouseActive();
}
_Cursor.Rect.X = x;
_Cursor.Rect.Y = y;
}
public void UnloadTextures()
{
CDraw.RemoveTexture(ref _Cursor);
}
public void ReloadTextures()
{
UnloadTextures();
_Cursor = CDraw.AddTexture(CTheme.GetSkinFilePath(_CursorName, -1));
}
public void FadeOut()
{
_Movetimer.Stop();
_Fade(0f, 0.5f);
}
public void FadeIn()
{
_Movetimer.Reset();
_Movetimer.Start();
_Fade(1f, 0.2f);
}
private void _Fade(float targetAlpha, float time)
{
_CursorFadingTimer.Stop();
_CursorFadingTimer.Reset();
if (targetAlpha >= 0f && targetAlpha <= 1f)
_CursorTargetAlpha = targetAlpha;
else
_CursorTargetAlpha = 1f;
if (time >= 0f)
_CursorFadingTime = time;
_CursorStartAlpha = _Cursor.Color.A;
_CursorFadingTimer.Start();
}
}
static class CGraphics static class CGraphics
{ {
private static bool _Fading; private static bool _Fading;
private static Stopwatch _FadingTimer; private static Stopwatch _FadingTimer;
private static CCursor _Cursor; private static readonly CCursor _Cursor = new CCursor();
private static float _GlobalAlpha; private static float _GlobalAlpha;
private static float _ZOffset; private static float _ZOffset;
@@ -252,12 +111,7 @@ namespace Vocaluxe.Base
public static void LoadTheme() public static void LoadTheme()
{ {
_Cursor = new CCursor( _Cursor.LoadTextures();
CTheme.Cursor.SkinName,
new SColorF(CTheme.Cursor.R, CTheme.Cursor.G, CTheme.Cursor.B, CTheme.Cursor.A),
CTheme.Cursor.W,
CTheme.Cursor.H,
CSettings.ZNear);
for (int i = 0; i < _Screens.Count; i++) for (int i = 0; i < _Screens.Count; i++)
{ {
@@ -276,7 +130,7 @@ namespace Vocaluxe.Base
public static void ReloadTheme() public static void ReloadTheme()
{ {
_ReloadCursor(); _Cursor.ReloadTextures();
foreach (IMenu screen in _Screens) foreach (IMenu screen in _Screens)
screen.ReloadTheme(CTheme.GetThemeScreensPath(-1)); screen.ReloadTheme(CTheme.GetThemeScreensPath(-1));
@@ -286,7 +140,7 @@ namespace Vocaluxe.Base
public static void ReloadSkin() public static void ReloadSkin()
{ {
_ReloadCursor(); _Cursor.ReloadTextures();
foreach (IMenu menu in _Screens) foreach (IMenu menu in _Screens)
menu.ReloadTextures(); menu.ReloadTextures();
@@ -313,7 +167,7 @@ namespace Vocaluxe.Base
public static bool UpdateGameLogic(CKeys keys, CMouse mouse) public static bool UpdateGameLogic(CKeys keys, CMouse mouse)
{ {
bool run = true; bool run = true;
_Cursor.CursorVisible = mouse.Visible; _Cursor.Visible = mouse.Visible;
mouse.CopyEvents(); mouse.CopyEvents();
keys.CopyEvents(); keys.CopyEvents();
@@ -783,27 +637,6 @@ namespace Vocaluxe.Base
y += rect.Height; y += rect.Height;
} }
} }
private static void _ReloadCursor()
{
_Cursor.UnloadTextures();
if (CTheme.Cursor.Color != "")
{
SColorF color = CTheme.GetColor(CTheme.Cursor.Color, -1);
CTheme.Cursor.R = color.R;
CTheme.Cursor.G = color.G;
CTheme.Cursor.B = color.B;
CTheme.Cursor.A = color.A;
}
_Cursor = new CCursor(
CTheme.Cursor.SkinName,
new SColorF(CTheme.Cursor.R, CTheme.Cursor.G, CTheme.Cursor.B, CTheme.Cursor.A),
CTheme.Cursor.W,
CTheme.Cursor.H,
CSettings.ZNear);
}
#endregion private stuff #endregion private stuff
} }
} }
+16 -15
View File
@@ -24,6 +24,7 @@ using System.Drawing;
using Vocaluxe.Base.Fonts; using Vocaluxe.Base.Fonts;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Game; using VocaluxeLib.Game;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu; using VocaluxeLib.Menu;
using VocaluxeLib.Menu.SongMenu; using VocaluxeLib.Menu.SongMenu;
using VocaluxeLib.Songs; using VocaluxeLib.Songs;
@@ -233,12 +234,12 @@ namespace Vocaluxe.Base
return CTheme.GetSkinIndex(partyModeID); return CTheme.GetSkinIndex(partyModeID);
} }
public STexture GetSkinTexture(string textureName, int partyModeID) public CTexture GetSkinTexture(string textureName, int partyModeID)
{ {
return CTheme.GetSkinTexture(textureName, partyModeID); return CTheme.GetSkinTexture(textureName, partyModeID);
} }
public STexture GetSkinVideoTexture(string videoName, int partyModeID) public CTexture GetSkinVideoTexture(string videoName, int partyModeID)
{ {
return CTheme.GetSkinVideoTexture(videoName, partyModeID); return CTheme.GetSkinVideoTexture(videoName, partyModeID);
} }
@@ -341,7 +342,7 @@ namespace Vocaluxe.Base
CBackgroundMusic.ApplyVolume(); CBackgroundMusic.ApplyVolume();
} }
public STexture GetVideoTexture() public CTexture GetVideoTexture()
{ {
return CBackgroundMusic.GetVideoTexture(); return CBackgroundMusic.GetVideoTexture();
} }
@@ -349,22 +350,22 @@ namespace Vocaluxe.Base
class CBdraw : IDrawing class CBdraw : IDrawing
{ {
public void DrawTexture(STexture texture, SRectF rect) public void DrawTexture(CTexture texture, SRectF rect)
{ {
CDraw.DrawTexture(texture, rect); CDraw.DrawTexture(texture, rect);
} }
public void DrawTexture(STexture texture, SRectF rect, SColorF color) public void DrawTexture(CTexture texture, SRectF rect, SColorF color)
{ {
CDraw.DrawTexture(texture, rect, color); CDraw.DrawTexture(texture, rect, color);
} }
public void DrawTexture(STexture texture, SRectF rect, SColorF color, SRectF bounds, bool mirrored = false) public void DrawTexture(CTexture texture, SRectF rect, SColorF color, SRectF bounds, bool mirrored = false)
{ {
CDraw.DrawTexture(texture, rect, color, bounds, mirrored); CDraw.DrawTexture(texture, rect, color, bounds, mirrored);
} }
public void DrawTextureReflection(STexture texture, SRectF rect, SColorF color, SRectF bounds, float reflectionSpace, float reflectionHeight) public void DrawTextureReflection(CTexture texture, SRectF rect, SColorF color, SRectF bounds, float reflectionSpace, float reflectionHeight)
{ {
CDraw.DrawTextureReflection(texture, rect, color, bounds, reflectionSpace, reflectionHeight); CDraw.DrawTextureReflection(texture, rect, color, bounds, reflectionSpace, reflectionHeight);
} }
@@ -686,27 +687,27 @@ namespace Vocaluxe.Base
{ {
public int Load(string videoFileName) public int Load(string videoFileName)
{ {
return CVideo.VdLoad(videoFileName); return CVideo.Load(videoFileName);
} }
public bool Skip(int videoStream, float startPosition, float videoGap) public bool Skip(int videoStream, float startPosition, float videoGap)
{ {
return CVideo.VdSkip(videoStream, startPosition, videoGap); return CVideo.Skip(videoStream, startPosition, videoGap);
} }
public bool GetFrame(int videoStream, ref STexture videoTexture, float time, out float videoTime) public bool GetFrame(int videoStream, ref CTexture videoTexture, float time, out float videoTime)
{ {
return CVideo.VdGetFrame(videoStream, ref videoTexture, time, out videoTime); return CVideo.GetFrame(videoStream, ref videoTexture, time, out videoTime);
} }
public bool IsFinished(int videoStream) public bool IsFinished(int videoStream)
{ {
return CVideo.VdFinished(videoStream); return CVideo.Finished(videoStream);
} }
public bool Close(int videoStream) public bool Close(int videoStream)
{ {
return CVideo.VdClose(videoStream); return CVideo.Close(videoStream);
} }
} }
@@ -765,7 +766,7 @@ namespace Vocaluxe.Base
class CBcover : ICover class CBcover : ICover
{ {
public STexture GetNoCover() public CTexture GetNoCover()
{ {
return CCover.NoCover; return CCover.NoCover;
} }
@@ -773,7 +774,7 @@ namespace Vocaluxe.Base
class CBdataBase : IDataBase class CBdataBase : IDataBase
{ {
public bool GetCover(string fileName, ref STexture texture, int coverSize) public bool GetCover(string fileName, ref CTexture texture, int coverSize)
{ {
return CDataBase.GetCover(fileName, ref texture, coverSize); return CDataBase.GetCover(fileName, ref texture, coverSize);
} }
+3 -1
View File
@@ -25,6 +25,8 @@ using System.Xml;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Game; using VocaluxeLib.Game;
using VocaluxeLib.Profile; using VocaluxeLib.Profile;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu;
namespace Vocaluxe.Base namespace Vocaluxe.Base
{ {
@@ -437,7 +439,7 @@ namespace Vocaluxe.Base
return String.Empty; return String.Empty;
CProfile profile = _Profiles[profileID]; CProfile profile = _Profiles[profileID];
if (profile.PlayerName != "") if (!String.IsNullOrEmpty(profile.PlayerName))
profile.PlayerName = profile.PlayerName.Remove(profile.PlayerName.Length - 1); profile.PlayerName = profile.PlayerName.Remove(profile.PlayerName.Length - 1);
return profile.PlayerName; return profile.PlayerName;
+25 -25
View File
@@ -25,6 +25,7 @@ using System.Windows.Forms;
using System.Xml; using System.Xml;
using Vocaluxe.Base.Fonts; using Vocaluxe.Base.Fonts;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu; using VocaluxeLib.Menu;
namespace Vocaluxe.Base namespace Vocaluxe.Base
@@ -49,7 +50,7 @@ namespace Vocaluxe.Base
public string Name; public string Name;
public string Value; public string Value;
public STexture Texture; public CTexture Texture;
public int VideoIndex; public int VideoIndex;
} }
@@ -200,10 +201,10 @@ namespace Vocaluxe.Base
{ {
xmlReader.GetValue("//root/Videos/" + _Skins[skinIndex].VideoList[i].Name, out value, String.Empty); xmlReader.GetValue("//root/Videos/" + _Skins[skinIndex].VideoList[i].Name, out value, String.Empty);
SSkinElement sk = new SSkinElement {Name = _Skins[skinIndex].VideoList[i].Name, Value = value}; SSkinElement sk = new SSkinElement {Name = _Skins[skinIndex].VideoList[i].Name, Value = value};
sk.VideoIndex = CVideo.VdLoad(Path.Combine(_Skins[skinIndex].Path, sk.Value)); sk.VideoIndex = CVideo.Load(Path.Combine(_Skins[skinIndex].Path, sk.Value));
CVideo.VdSetLoop(sk.VideoIndex, true); CVideo.SetLoop(sk.VideoIndex, true);
CVideo.VdPause(sk.VideoIndex); CVideo.Pause(sk.VideoIndex);
sk.Texture = new STexture(-1); sk.Texture = null;
_Skins[skinIndex].VideoList[i] = sk; _Skins[skinIndex].VideoList[i] = sk;
} }
catch (Exception e) catch (Exception e)
@@ -225,14 +226,14 @@ namespace Vocaluxe.Base
{ {
foreach (SSkinElement sk in _Skins[i].SkinList.Values) foreach (SSkinElement sk in _Skins[i].SkinList.Values)
{ {
STexture texture = sk.Texture; CTexture texture = sk.Texture;
CDraw.RemoveTexture(ref texture); CDraw.RemoveTexture(ref texture);
} }
for (int j = 0; j < _Skins[i].VideoList.Count; j++) for (int j = 0; j < _Skins[i].VideoList.Count; j++)
{ {
CVideo.VdClose(_Skins[i].VideoList[j].VideoIndex); CVideo.Close(_Skins[i].VideoList[j].VideoIndex);
STexture videoTexture = _Skins[i].VideoList[j].Texture; CTexture videoTexture = _Skins[i].VideoList[j].Texture;
CDraw.RemoveTexture(ref videoTexture); CDraw.RemoveTexture(ref videoTexture);
} }
@@ -580,12 +581,12 @@ namespace Vocaluxe.Base
return path; return path;
} }
public static STexture GetSkinTexture(string textureName, int partyModeID) public static CTexture GetSkinTexture(string textureName, int partyModeID)
{ {
int skinIndex = GetSkinIndex(partyModeID); int skinIndex = GetSkinIndex(partyModeID);
if (skinIndex != -1 && textureName != null && _Skins[skinIndex].SkinList.ContainsKey(textureName)) if (skinIndex != -1 && textureName != null && _Skins[skinIndex].SkinList.ContainsKey(textureName))
return _Skins[skinIndex].SkinList[textureName].Texture; return _Skins[skinIndex].SkinList[textureName].Texture;
return new STexture(-1); return null;
} }
public static string GetSkinFilePath(string skinName, int partyModeID) public static string GetSkinFilePath(string skinName, int partyModeID)
@@ -605,7 +606,7 @@ namespace Vocaluxe.Base
return skinName; return skinName;
} }
public static STexture GetSkinVideoTexture(string videoName, int partyModeID) public static CTexture GetSkinVideoTexture(string videoName, int partyModeID)
{ {
int skinIndex = GetSkinIndex(partyModeID); int skinIndex = GetSkinIndex(partyModeID);
if (skinIndex != -1) if (skinIndex != -1)
@@ -618,16 +619,16 @@ namespace Vocaluxe.Base
float time = 0f; float time = 0f;
if (sk.VideoIndex == -1) if (sk.VideoIndex == -1)
{ {
sk.VideoIndex = CVideo.VdLoad(GetVideoFilePath(sk.Name, partyModeID)); sk.VideoIndex = CVideo.Load(GetVideoFilePath(sk.Name, partyModeID));
CVideo.VdSetLoop(sk.VideoIndex, true); CVideo.SetLoop(sk.VideoIndex, true);
} }
CVideo.VdGetFrame(sk.VideoIndex, ref sk.Texture, time, out time); CVideo.GetFrame(sk.VideoIndex, ref sk.Texture, time, out time);
_Skins[skinIndex].VideoList[i] = sk; _Skins[skinIndex].VideoList[i] = sk;
return sk.Texture; return sk.Texture;
} }
} }
} }
return new STexture(-1); return null;
} }
public static void SkinVideoPause(string videoName, int partyModeID) public static void SkinVideoPause(string videoName, int partyModeID)
@@ -642,10 +643,10 @@ namespace Vocaluxe.Base
{ {
if (sk.VideoIndex == -1) if (sk.VideoIndex == -1)
{ {
sk.VideoIndex = CVideo.VdLoad(GetVideoFilePath(sk.Name, partyModeID)); sk.VideoIndex = CVideo.Load(GetVideoFilePath(sk.Name, partyModeID));
CVideo.VdSetLoop(sk.VideoIndex, true); CVideo.SetLoop(sk.VideoIndex, true);
} }
CVideo.VdPause(sk.VideoIndex); CVideo.Pause(sk.VideoIndex);
_Skins[skinIndex].VideoList[i] = sk; _Skins[skinIndex].VideoList[i] = sk;
return; return;
} }
@@ -665,10 +666,10 @@ namespace Vocaluxe.Base
{ {
if (sk.VideoIndex == -1) if (sk.VideoIndex == -1)
{ {
sk.VideoIndex = CVideo.VdLoad(GetVideoFilePath(sk.Name, partyModeID)); sk.VideoIndex = CVideo.Load(GetVideoFilePath(sk.Name, partyModeID));
CVideo.VdSetLoop(sk.VideoIndex, true); CVideo.SetLoop(sk.VideoIndex, true);
} }
CVideo.VdResume(sk.VideoIndex); CVideo.Resume(sk.VideoIndex);
_Skins[skinIndex].VideoList[i] = sk; _Skins[skinIndex].VideoList[i] = sk;
return; return;
} }
@@ -809,7 +810,7 @@ namespace Vocaluxe.Base
writer.WriteElementString("W", Cursor.W.ToString("#0.000")); writer.WriteElementString("W", Cursor.W.ToString("#0.000"));
writer.WriteElementString("H", Cursor.H.ToString("#0.000")); writer.WriteElementString("H", Cursor.H.ToString("#0.000"));
if (Cursor.Color != "") if (!String.IsNullOrEmpty(Cursor.Color))
writer.WriteElementString("Color", Cursor.Color); writer.WriteElementString("Color", Cursor.Color);
else else
{ {
@@ -871,7 +872,7 @@ namespace Vocaluxe.Base
public static SColorF GetPlayerColor(string playerNrString, int skinIndex, out bool success) public static SColorF GetPlayerColor(string playerNrString, int skinIndex, out bool success)
{ {
int selection = 0; int selection = 0;
if (playerNrString.StartsWith("Player")) if (playerNrString != null && playerNrString.StartsWith("Player"))
int.TryParse(playerNrString.Substring(6), out selection); int.TryParse(playerNrString.Substring(6), out selection);
return GetPlayerColor(selection, skinIndex, out success); return GetPlayerColor(selection, skinIndex, out success);
@@ -885,13 +886,12 @@ namespace Vocaluxe.Base
public static SColorF GetPlayerColor(int playerNr, int skinIndex, out bool success) public static SColorF GetPlayerColor(int playerNr, int skinIndex, out bool success)
{ {
success = false; success = false;
SColorF color = new SColorF(1f, 1f, 1f, 1f);
if (_Skins[skinIndex].PartyModeID != -1) if (_Skins[skinIndex].PartyModeID != -1)
skinIndex = GetSkinIndex(-1); skinIndex = GetSkinIndex(-1);
if (_Skins[skinIndex].ThemeColors.Player.Length < playerNr || playerNr < 1) if (_Skins[skinIndex].ThemeColors.Player.Length < playerNr || playerNr < 1)
return color; return new SColorF(1f, 1f, 1f, 1f);
success = true; success = true;
return _Skins[skinIndex].ThemeColors.Player[playerNr - 1]; return _Skins[skinIndex].ThemeColors.Player[playerNr - 1];
+25 -41
View File
@@ -21,6 +21,8 @@ using System.Diagnostics;
using System.Drawing; using System.Drawing;
using Vocaluxe.Lib.Video; using Vocaluxe.Lib.Video;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu;
namespace Vocaluxe.Base namespace Vocaluxe.Base
{ {
@@ -50,12 +52,7 @@ namespace Vocaluxe.Base
#endregion Init #endregion Init
#region Interface #region Interface
public static bool VdInit() public static void CloseAll()
{
return _VideoDecoder.Init();
}
public static void VdCloseAll()
{ {
_VideoDecoder.CloseAll(); _VideoDecoder.CloseAll();
} }
@@ -65,47 +62,47 @@ namespace Vocaluxe.Base
return _VideoDecoder.GetNumStreams(); return _VideoDecoder.GetNumStreams();
} }
public static int VdLoad(string videoFileName) public static int Load(string videoFileName)
{ {
return _VideoDecoder.Load(videoFileName); return _VideoDecoder.Load(videoFileName);
} }
public static bool VdClose(int streamID) public static bool Close(int streamID)
{ {
return _VideoDecoder.Close(streamID); return _VideoDecoder.Close(streamID);
} }
public static float VdGetLength(int streamID) public static float GetLength(int streamID)
{ {
return _VideoDecoder.GetLength(streamID); return _VideoDecoder.GetLength(streamID);
} }
public static bool VdGetFrame(int streamID, ref STexture frame, float time, out float videoTime) public static bool GetFrame(int streamID, ref CTexture frame, float time, out float videoTime)
{ {
return _VideoDecoder.GetFrame(streamID, ref frame, time, out videoTime); return _VideoDecoder.GetFrame(streamID, ref frame, time, out videoTime);
} }
public static bool VdSkip(int streamID, float start, float gap) public static bool Skip(int streamID, float start, float gap)
{ {
return _VideoDecoder.Skip(streamID, start, gap); return _VideoDecoder.Skip(streamID, start, gap);
} }
public static void VdSetLoop(int streamID, bool loop) public static void SetLoop(int streamID, bool loop)
{ {
_VideoDecoder.SetLoop(streamID, loop); _VideoDecoder.SetLoop(streamID, loop);
} }
public static void VdPause(int streamID) public static void Pause(int streamID)
{ {
_VideoDecoder.Pause(streamID); _VideoDecoder.Pause(streamID);
} }
public static void VdResume(int streamID) public static void Resume(int streamID)
{ {
_VideoDecoder.Resume(streamID); _VideoDecoder.Resume(streamID);
} }
public static bool VdFinished(int streamID) public static bool Finished(int streamID)
{ {
return _VideoDecoder.Finished(streamID); return _VideoDecoder.Finished(streamID);
} }
@@ -121,9 +118,9 @@ namespace Vocaluxe.Base
class CVideoPlayer class CVideoPlayer
{ {
private STexture _VideoTexture; private CTexture _VideoTexture;
private int _VideoStream; private int _VideoStream;
private readonly Stopwatch _VideoTimer; private readonly Stopwatch _VideoTimer = new Stopwatch();
private bool _Finished; private bool _Finished;
private bool _Loaded; private bool _Loaded;
@@ -134,20 +131,12 @@ namespace Vocaluxe.Base
public bool Loop public bool Loop
{ {
set { CVideo.VdSetLoop(_VideoStream, value); } set { CVideo.SetLoop(_VideoStream, value); }
}
public CVideoPlayer()
{
_VideoTimer = new Stopwatch();
_VideoTexture = new STexture(-1);
_Finished = false;
_Loaded = false;
} }
public void Load(string videoName) public void Load(string videoName)
{ {
_VideoStream = CVideo.VdLoad(CTheme.GetVideoFilePath(videoName, -1)); _VideoStream = CVideo.Load(CTheme.GetVideoFilePath(videoName, -1));
_Loaded = true; _Loaded = true;
} }
@@ -174,20 +163,15 @@ namespace Vocaluxe.Base
if (!_Finished) if (!_Finished)
{ {
float videoTime = _VideoTimer.ElapsedMilliseconds / 1000f; float videoTime = _VideoTimer.ElapsedMilliseconds / 1000f;
_Finished = CVideo.VdFinished(_VideoStream); _Finished = CVideo.Finished(_VideoStream);
STexture tex = new STexture(-1) {Height = 0f}; CVideo.GetFrame(_VideoStream, ref _VideoTexture, videoTime, out videoTime);
CVideo.VdGetFrame(_VideoStream, ref tex, videoTime, out videoTime);
if (tex.Height > 0)
{
CDraw.RemoveTexture(ref _VideoTexture);
_VideoTexture = tex;
}
} }
if (_VideoTexture == null)
return;
RectangleF bounds = new RectangleF(0f, 0f, CSettings.RenderW, CSettings.RenderH); RectangleF bounds = new RectangleF(0f, 0f, CSettings.RenderW, CSettings.RenderH);
RectangleF rect = new RectangleF(0f, 0f, _VideoTexture.Width, _VideoTexture.Height); RectangleF rect;
CHelper.SetRect(bounds, out rect, rect.Width / rect.Height, EAspect.Crop); CHelper.SetRect(bounds, out rect, _VideoTexture.OrigAspect, EAspect.Crop);
CDraw.DrawTexture(_VideoTexture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, CSettings.ZFar / 4)); CDraw.DrawTexture(_VideoTexture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, CSettings.ZFar / 4));
} }
@@ -195,17 +179,17 @@ namespace Vocaluxe.Base
public void PreLoad() public void PreLoad()
{ {
float videoTime = 0f; float videoTime = 0f;
while (_VideoTexture.Index == -1 && videoTime < 1f) while (_VideoTexture == null && videoTime < 1f)
{ {
float dummy; float dummy;
CVideo.VdGetFrame(_VideoStream, ref _VideoTexture, 0, out dummy); CVideo.GetFrame(_VideoStream, ref _VideoTexture, 0, out dummy);
videoTime += 0.05f; videoTime += 0.05f;
} }
} }
public void Close() public void Close()
{ {
CVideo.VdClose(_VideoStream); CVideo.Close(_VideoStream);
CDraw.RemoveTexture(ref _VideoTexture); CDraw.RemoveTexture(ref _VideoTexture);
_Loaded = false; _Loaded = false;
_Finished = false; _Finished = false;
+4 -3
View File
@@ -20,6 +20,8 @@
using System.Drawing; using System.Drawing;
using Vocaluxe.Lib.Webcam; using Vocaluxe.Lib.Webcam;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu;
namespace Vocaluxe.Base namespace Vocaluxe.Base
{ {
@@ -46,10 +48,9 @@ namespace Vocaluxe.Base
CConfig.SaveConfig(); CConfig.SaveConfig();
} }
public static bool GetFrame(ref STexture tex) public static bool GetFrame(ref CTexture tex)
{ {
_Webcam.GetFrame(ref tex); return _Webcam.GetFrame(ref tex);
return true;
} }
public static Bitmap GetBitmap() public static Bitmap GetBitmap()
+4 -3
View File
@@ -22,6 +22,7 @@ using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Drawing.Text; using System.Drawing.Text;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu; using VocaluxeLib.Menu;
namespace Vocaluxe.Base.Fonts namespace Vocaluxe.Base.Fonts
@@ -87,7 +88,7 @@ namespace Vocaluxe.Base.Fonts
public void DrawGlyph(char chr, float x, float y, float z, SColorF color) public void DrawGlyph(char chr, float x, float y, float z, SColorF color)
{ {
STexture texture; CTexture texture;
SRectF rect; SRectF rect;
GetOrAddGlyph(chr).GetTextureAndRect(x, y, z, out texture, out rect); GetOrAddGlyph(chr).GetTextureAndRect(x, y, z, out texture, out rect);
CDraw.DrawTexture(texture, rect, color); CDraw.DrawTexture(texture, rect, color);
@@ -95,7 +96,7 @@ namespace Vocaluxe.Base.Fonts
public void DrawGlyph(char chr, float x, float y, float z, SColorF color, float begin, float end) public void DrawGlyph(char chr, float x, float y, float z, SColorF color, float begin, float end)
{ {
STexture texture; CTexture texture;
SRectF rect; SRectF rect;
GetOrAddGlyph(chr).GetTextureAndRect(x, y, z, out texture, out rect); GetOrAddGlyph(chr).GetTextureAndRect(x, y, z, out texture, out rect);
CDraw.DrawTexture(texture, rect, color, begin, end); CDraw.DrawTexture(texture, rect, color, begin, end);
@@ -103,7 +104,7 @@ namespace Vocaluxe.Base.Fonts
public void DrawGlyphReflection(char chr, float x, float y, float z, SColorF color, float rspace, float rheight) public void DrawGlyphReflection(char chr, float x, float y, float z, SColorF color, float rspace, float rheight)
{ {
STexture texture; CTexture texture;
SRectF rect; SRectF rect;
GetOrAddGlyph(chr).GetTextureAndRect(x, y, z, out texture, out rect); GetOrAddGlyph(chr).GetTextureAndRect(x, y, z, out texture, out rect);
CDraw.DrawTextureReflection(texture, rect, color, rect, rspace, rheight); CDraw.DrawTextureReflection(texture, rect, color, rect, rspace, rheight);
+3 -3
View File
@@ -71,7 +71,7 @@ namespace Vocaluxe.Base.Fonts
private static void _BuildFonts() private static void _BuildFonts()
{ {
foreach (var font in _Fonts) foreach (SFont font in _Fonts)
{ {
font.Normal.Dispose(); font.Normal.Dispose();
font.Bold.Dispose(); font.Bold.Dispose();
@@ -258,8 +258,8 @@ namespace Vocaluxe.Base.Fonts
Height = height; Height = height;
SetFont(text.Font); SetFont(text.Font);
Style = text.Style; Style = text.Style;
var result = new RectangleF(text.X, text.Y, GetTextWidth(CLanguage.Translate(text.Text, text.TranslationID)), RectangleF result = new RectangleF(text.X, text.Y, GetTextWidth(CLanguage.Translate(text.Text, text.TranslationID)),
GetTextHeight(CLanguage.Translate(text.Text, text.TranslationID))); GetTextHeight(CLanguage.Translate(text.Text, text.TranslationID)));
//restore old values //restore old values
Height = oldHeight; Height = oldHeight;
_CurrentFont = oldFont; _CurrentFont = oldFont;
+6 -2
View File
@@ -24,12 +24,14 @@ using System.Drawing.Imaging;
using System.Drawing.Text; using System.Drawing.Text;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu;
namespace Vocaluxe.Base.Fonts namespace Vocaluxe.Base.Fonts
{ {
class CGlyph class CGlyph
{ {
private STexture _Texture; private CTexture _Texture;
private readonly SizeF _BoundingBox; private readonly SizeF _BoundingBox;
private readonly RectangleF _DrawBounding; private readonly RectangleF _DrawBounding;
public readonly float MaxHeight; public readonly float MaxHeight;
@@ -121,6 +123,7 @@ namespace Vocaluxe.Base.Fonts
_DrawBounding.Width = _Texture.Width; _DrawBounding.Width = _Texture.Width;
_DrawBounding.Height = _Texture.Height;*/ _DrawBounding.Height = _Texture.Height;*/
#pragma warning disable 162 #pragma warning disable 162
// ReSharper disable HeuristicUnreachableCode
if (false && Char.IsLetterOrDigit(chr)) if (false && Char.IsLetterOrDigit(chr))
{ {
if (outline > 0) if (outline > 0)
@@ -128,6 +131,7 @@ namespace Vocaluxe.Base.Fonts
else else
bmpCropped.Save("font_" + chr + CFonts.Style + "2.png", ImageFormat.Png); bmpCropped.Save("font_" + chr + CFonts.Style + "2.png", ImageFormat.Png);
} }
// ReSharper restore HeuristicUnreachableCode
#pragma warning restore 162 #pragma warning restore 162
} }
} }
@@ -145,7 +149,7 @@ namespace Vocaluxe.Base.Fonts
return CFonts.Height / _BoundingBox.Height; return CFonts.Height / _BoundingBox.Height;
} }
public void GetTextureAndRect(float x, float y, float z, out STexture texture, out SRectF rect) public void GetTextureAndRect(float x, float y, float z, out CTexture texture, out SRectF rect)
{ {
texture = _Texture; texture = _Texture;
float factor = _GetFactor(); float factor = _GetFactor();
+306 -384
View File
@@ -32,6 +32,7 @@ using System.Windows.Forms;
using SlimDX.Windows; using SlimDX.Windows;
using Vocaluxe.Base; using Vocaluxe.Base;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu; using VocaluxeLib.Menu;
namespace Vocaluxe.Lib.Draw namespace Vocaluxe.Lib.Draw
@@ -39,6 +40,8 @@ namespace Vocaluxe.Lib.Draw
class CDirect3D : RenderForm, IDraw class CDirect3D : RenderForm, IDraw
{ {
#region private vars #region private vars
private const int _MaxID = 100000;
private readonly CKeys _Keys; private readonly CKeys _Keys;
private readonly CMouse _Mouse; private readonly CMouse _Mouse;
private bool _Run; private bool _Run;
@@ -51,10 +54,9 @@ namespace Vocaluxe.Lib.Draw
private Size _OldSize; private Size _OldSize;
private Size _SizeBeforeMinimize; private Size _SizeBeforeMinimize;
private readonly Dictionary<int, STexture> _Textures; private readonly Dictionary<int, Texture> _D3DTextures = new Dictionary<int, Texture>();
private readonly Dictionary<int, Texture> _D3DTextures; private readonly Queue<STextureQueue> _TexturesToLoad = new Queue<STextureQueue>();
private readonly List<STextureQueue> _Queue; private readonly Queue<int> _IDs = new Queue<int>(_MaxID);
private readonly Queue<int> _IDs;
private readonly Object _MutexTexture = new Object(); private readonly Object _MutexTexture = new Object();
@@ -66,11 +68,11 @@ namespace Vocaluxe.Lib.Draw
private int _Y; private int _Y;
private int _X; private int _X;
private STexture _BlankTexture; private CTexture _BlankTexture;
private readonly Queue<STexturedColoredVertex> _Vertices; private readonly Queue<STexturedColoredVertex> _Vertices = new Queue<STexturedColoredVertex>();
private readonly Queue<Texture> _VerticesTextures; private readonly Queue<Texture> _VerticesTextures = new Queue<Texture>();
private readonly Queue<SlimDX.Matrix> _VerticesRotationMatrices; private readonly Queue<SlimDX.Matrix> _VerticesRotationMatrices = new Queue<SlimDX.Matrix>();
private readonly bool _NonPowerOf2TextureSupported; private readonly bool _NonPowerOf2TextureSupported;
#endregion private vars #endregion private vars
@@ -81,19 +83,11 @@ namespace Vocaluxe.Lib.Draw
public CDirect3D() public CDirect3D()
{ {
Icon = new Icon(Path.Combine(Environment.CurrentDirectory, CSettings.Icon)); Icon = new Icon(Path.Combine(Environment.CurrentDirectory, CSettings.Icon));
_Textures = new Dictionary<int, STexture>();
_D3DTextures = new Dictionary<int, Texture>();
_Queue = new List<STextureQueue>();
_IDs = new Queue<int>();
//Fill Queue with 100000 IDs //Fill Queue with 100000 IDs
for (int i = 0; i < 100000; i++) for (int i = 0; i < _MaxID; i++)
_IDs.Enqueue(i); _IDs.Enqueue(i);
_Vertices = new Queue<STexturedColoredVertex>();
_VerticesTextures = new Queue<Texture>();
_VerticesRotationMatrices = new Queue<SlimDX.Matrix>();
_Keys = new CKeys(); _Keys = new CKeys();
try try
{ {
@@ -255,40 +249,39 @@ namespace Vocaluxe.Lib.Draw
// The window was minimized, so restore it to the last known size // The window was minimized, so restore it to the last known size
if (ClientSize.Width == 0 || ClientSize.Height == 0) if (ClientSize.Width == 0 || ClientSize.Height == 0)
ClientSize = _SizeBeforeMinimize; ClientSize = _SizeBeforeMinimize;
if (_Run) if (!_Run)
return;
_H = ClientSize.Height;
_W = ClientSize.Width;
_Y = 0;
_X = 0;
if (_W / (float)_H > CSettings.GetRenderAspect())
{ {
_H = ClientSize.Height; //The windows's width is too big
_W = ClientSize.Width; _W = (int)Math.Round(_H * CSettings.GetRenderAspect());
_Y = 0; _X = (ClientSize.Width - _W) / 2;
_X = 0;
if (_W / (float)_H > CSettings.GetRenderAspect())
{
//The windows's width is too big
_W = (int)Math.Round(_H * CSettings.GetRenderAspect());
_X = (ClientSize.Width - _W) / 2;
}
else
{
//The windows's height is too big
_H = (int)Math.Round(_W / CSettings.GetRenderAspect());
_Y = (ClientSize.Height - _H) / 2;
}
//Apply the new sizes to the PresentParameters
_PresentParameters.BackBufferWidth = ClientSize.Width;
_PresentParameters.BackBufferHeight = ClientSize.Height;
ClearScreen();
//To set new PresentParameters the device has to be resetted
_Reset();
//All configurations got flushed due to Reset(), so apply them again
Init();
//Set the new Viewport
_Device.Viewport = new Viewport(_X, _Y, _W, _H);
//Store size so it can get restored after the window gets minimized
_SizeBeforeMinimize = ClientSize;
} }
else
{
//The windows's height is too big
_H = (int)Math.Round(_W / CSettings.GetRenderAspect());
_Y = (ClientSize.Height - _H) / 2;
}
//Apply the new sizes to the PresentParameters
_PresentParameters.BackBufferWidth = ClientSize.Width;
_PresentParameters.BackBufferHeight = ClientSize.Height;
ClearScreen();
//To set new PresentParameters the device has to be resetted
_Reset();
//All configurations got flushed due to Reset(), so apply them again
Init();
//Set the new Viewport
_Device.Viewport = new Viewport(_X, _Y, _W, _H);
//Store size so it can get restored after the window gets minimized
_SizeBeforeMinimize = ClientSize;
} }
/// <summary> /// <summary>
@@ -677,39 +670,32 @@ namespace Vocaluxe.Lib.Draw
/// Copies the current frame into a texture /// Copies the current frame into a texture
/// <returns>A texture holding the current frame</returns> /// <returns>A texture holding the current frame</returns>
/// </summary> /// </summary>
public STexture CopyScreen() public CTexture CopyScreen()
{ {
STexture texture = new STexture(-1); CTexture texture = _GetNewTexture(_W, _H);
Surface backbufferSurface = _Device.GetBackBuffer(0, 0); Surface backbufferSurface = _Device.GetBackBuffer(0, 0);
Texture tex = new Texture(_Device, _PresentParameters.BackBufferWidth, _PresentParameters.BackBufferHeight, 0, Usage.AutoGenerateMipMap, Format.A8R8G8B8, Pool.Managed); Texture tex = new Texture(_Device, texture.W2, texture.H2, 0, Usage.AutoGenerateMipMap, Format.A8R8G8B8, Pool.Managed);
Surface textureSurface = tex.GetSurfaceLevel(0); Surface textureSurface = tex.GetSurfaceLevel(0);
Surface.FromSurface(textureSurface, backbufferSurface, Filter.Default, 0); Surface.FromSurface(textureSurface, backbufferSurface, Filter.Default, 0, new Rectangle(0, 0, _W, _H), new Rectangle(0, 0, _W, _H));
backbufferSurface.Dispose(); backbufferSurface.Dispose();
lock (_MutexTexture) lock (_MutexTexture)
{ {
_D3DTextures.Add(_IDs.Peek(), tex); texture.ID = _IDs.Dequeue();
_D3DTextures.Add(texture.ID, tex);
texture.Color = new SColorF(1f, 1f, 1f, 1f); return texture;
texture.Rect = new SRectF(0f, 0f, texture.Width, texture.Height, 0f);
texture.Width = _W;
texture.Height = _H;
texture.W2 = _CheckForNextPowerOf2(texture.Width);
texture.H2 = _CheckForNextPowerOf2(texture.Height);
texture.Index = _IDs.Dequeue();
_Textures[texture.Index] = texture;
} }
return texture;
} }
/// <summary> /// <summary>
/// Copies the current frame into a texture /// Copies the current frame into a texture
/// </summary> /// </summary>
/// <param name="texture">The texture in which the frame is copied to</param> /// <param name="texture">The texture in which the frame is copied to</param>
public void CopyScreen(ref STexture texture) public void CopyScreen(ref CTexture texture)
{ {
if (!_TextureExists(ref texture) || (int)texture.Width != GetScreenWidth() || (int)texture.Height != GetScreenHeight()) //Check for actual texture sizes! (W2/H2) as it may be up/downsized compared to OrigSize
if (!_TextureExists(texture) || texture.W2 != GetScreenWidth() || texture.H2 != GetScreenHeight())
{ {
RemoveTexture(ref texture); RemoveTexture(ref texture);
texture = CopyScreen(); texture = CopyScreen();
@@ -717,7 +703,7 @@ namespace Vocaluxe.Lib.Draw
else else
{ {
Surface backbufferSurface = _Device.GetBackBuffer(0, 0); Surface backbufferSurface = _Device.GetBackBuffer(0, 0);
Surface textureSurface = _D3DTextures[texture.Index].GetSurfaceLevel(0); Surface textureSurface = _D3DTextures[texture.ID].GetSurfaceLevel(0);
Surface.FromSurface(textureSurface, backbufferSurface, Filter.Default, 0); Surface.FromSurface(textureSurface, backbufferSurface, Filter.Default, 0);
} }
} }
@@ -741,8 +727,6 @@ namespace Vocaluxe.Lib.Draw
screen.Save(Path.Combine(path, file + i.ToString("00000") + ".bmp"), ImageFormat.Bmp); screen.Save(Path.Combine(path, file + i.ToString("00000") + ".bmp"), ImageFormat.Bmp);
screen.Dispose(); screen.Dispose();
} }
Cursor.Hide();
_Mouse.Visible = true;
} }
/// <summary> /// <summary>
@@ -759,8 +743,8 @@ namespace Vocaluxe.Lib.Draw
/// <param name="y2">The end y-value</param> /// <param name="y2">The end y-value</param>
public void DrawLine(int a, int r, int g, int b, int w, int x1, int y1, int x2, int y2) public void DrawLine(int a, int r, int g, int b, int w, int x1, int y1, int x2, int y2)
{ {
var lineVector = new Vector2[] {new Vector2(x1, y1), new Vector2(x2, y2)}; Vector2[] lineVector = new Vector2[] {new Vector2(x1, y1), new Vector2(x2, y2)};
using (var line = new Line(_Device)) using (Line line = new Line(_Device))
{ {
line.Antialias = true; line.Antialias = true;
line.Begin(); line.Begin();
@@ -800,33 +784,33 @@ namespace Vocaluxe.Lib.Draw
/// </summary> /// </summary>
/// <param name="texturePath">The texture's filepath</param> /// <param name="texturePath">The texture's filepath</param>
/// <returns>A STexture object containing the added texture</returns> /// <returns>A STexture object containing the added texture</returns>
public STexture AddTexture(string texturePath) public CTexture AddTexture(string texturePath)
{ {
if (File.Exists(texturePath)) if (!File.Exists(texturePath))
{ {
Bitmap bmp; CLog.LogError("Can't find File: " + texturePath);
try return null;
{
bmp = new Bitmap(texturePath);
}
catch (Exception)
{
CLog.LogError("Error loading Texture: " + texturePath);
return new STexture(-1);
}
STexture s;
try
{
s = AddTexture(bmp);
}
finally
{
bmp.Dispose();
}
return s;
} }
CLog.LogError("Can't find File: " + texturePath); Bitmap bmp;
return new STexture(-1); try
{
bmp = new Bitmap(texturePath);
}
catch (Exception)
{
CLog.LogError("Error loading Texture: " + texturePath);
return null;
}
CTexture s;
try
{
s = AddTexture(bmp);
}
finally
{
bmp.Dispose();
}
return s;
} }
/// <summary> /// <summary>
@@ -834,10 +818,10 @@ namespace Vocaluxe.Lib.Draw
/// </summary> /// </summary>
/// <param name="bmp">The Bitmap of which the texure will be created from</param> /// <param name="bmp">The Bitmap of which the texure will be created from</param>
/// <returns>A STexture object containing the added texture</returns> /// <returns>A STexture object containing the added texture</returns>
public STexture AddTexture(Bitmap bmp) public CTexture AddTexture(Bitmap bmp)
{ {
if (bmp.Height == 0 || bmp.Width == 0) if (bmp.Height == 0 || bmp.Width == 0)
return new STexture(-1); return null;
int maxSize; int maxSize;
//Apply the right max size //Apply the right max size
switch (CConfig.TextureQuality) switch (CConfig.TextureQuality)
@@ -862,49 +846,26 @@ namespace Vocaluxe.Lib.Draw
break; break;
} }
int w = bmp.Width; int w = Math.Min(bmp.Width, maxSize);
int h = bmp.Height; int h = Math.Min(bmp.Height, maxSize);
float ratio = (float)w / h; w = _CheckForNextPowerOf2(w);
int newW = w; h = _CheckForNextPowerOf2(h);
int newH = h;
if (w > maxSize && w > h)
newW = maxSize;
else if (h > maxSize)
newH = maxSize;
else if (w > h)
newW = (int)_CheckForNextPowerOf2(w);
else
newH = (int)_CheckForNextPowerOf2(h);
Bitmap bmp2 = null; Bitmap bmp2 = null;
byte[] data; byte[] data;
try try
{ {
if (w != newW || h != newH) if (bmp.Width != w || bmp.Height != h)
{ {
if (w != newW)
{
w = newW;
h = (int)Math.Round(w / ratio);
if (h == 0)
h = 1;
}
else
{
h = newH;
w = (int)Math.Round(h * ratio);
if (w == 0)
w = 1;
}
//Create a new Bitmap with the new sizes //Create a new Bitmap with the new sizes
bmp2 = new Bitmap(w, h); bmp2 = new Bitmap(w, h);
//Scale the texture //Scale the texture
Graphics g = Graphics.FromImage(bmp2); using (Graphics g = Graphics.FromImage(bmp2))
g.InterpolationMode = InterpolationMode.HighQualityBicubic; {
g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(bmp, new Rectangle(0, 0, bmp2.Width, bmp2.Height)); g.SmoothingMode = SmoothingMode.HighQuality;
g.Dispose(); g.DrawImage(bmp, new Rectangle(0, 0, bmp2.Width, bmp2.Height));
}
bmp = bmp2; bmp = bmp2;
} }
@@ -920,81 +881,75 @@ namespace Vocaluxe.Lib.Draw
bmp2.Dispose(); bmp2.Dispose();
} }
return AddTexture(w, h, data); CTexture texture = new CTexture(bmp.Width, bmp.Height, w, h, true);
return _AddTexture(texture, w, data);
} }
public STexture AddTexture(int w, int h, byte[] data) public CTexture AddTexture(int w, int h, byte[] data)
{ {
STexture texture = new STexture(-1); CTexture texture = _GetNewTexture(w, h);
return _AddTexture(texture, w, data);
}
Texture t = _CreateTexture(w, h, data, ref texture); private CTexture _AddTexture(CTexture texture, int w, byte[] data)
{
Texture t = _CreateTexture(texture.W2, texture.H2, w, data);
lock (_MutexTexture) lock (_MutexTexture)
{ {
_D3DTextures.Add(_IDs.Peek(), t); texture.ID = _IDs.Dequeue();
texture.Index = _IDs.Dequeue(); _D3DTextures.Add(texture.ID, t);
_Textures[texture.Index] = texture;
} }
return texture; return texture;
} }
private Texture _CreateTexture(int w, int h, byte[] data, ref STexture texture) private Texture _CreateTexture(int textureW, int textureH, int w, byte[] data)
{ {
texture.Width = w;
texture.Height = h;
texture.W2 = _CheckForNextPowerOf2(w);
texture.H2 = _CheckForNextPowerOf2(h);
texture.WidthRatio = w / texture.W2;
texture.HeightRatio = h / texture.H2;
//Create a new texture in the managed pool, which does not need to be recreated on a lost device //Create a new texture in the managed pool, which does not need to be recreated on a lost device
//because a copy of the texture is hold in the Ram //because a copy of the texture is hold in the Ram
Texture t = null; Texture t;
try using (t = new Texture(_Device, textureW, textureH, 0, Usage.AutoGenerateMipMap, Format.A8R8G8B8, Pool.Managed))
{ _WriteDataToTexture(t, w, data);
t = new Texture(_Device, (int)texture.W2, (int)texture.H2, 0, Usage.AutoGenerateMipMap, Format.A8R8G8B8, Pool.Managed);
//Lock the texture and fill it with the data
DataRectangle rect = t.LockRectangle(0, LockFlags.Discard);
int rowWidth = 4 * (int)texture.W2;
for (int i = 0; i + rowWidth <= data.Length; i += 4 * w)
{
rect.Data.Write(data, i, rowWidth);
rect.Data.Position = rect.Data.Position - rowWidth;
rect.Data.Position += rect.Pitch;
}
t.UnlockRectangle(0);
texture.Color = new SColorF(1f, 1f, 1f, 1f);
texture.Rect = new SRectF(0f, 0f, texture.Width, texture.Height, 0f);
texture.TexturePath = String.Empty;
}
catch (Exception)
{
if (t != null)
t.Dispose();
throw;
}
return t; return t;
} }
public STexture EnqueueTexture(int w, int h, byte[] data) private static void _WriteDataToTexture(Texture t, int w, byte[] data)
{ {
STexture texture = new STexture(-1); //Lock the texture and fill it with the data
STextureQueue queue = new STextureQueue {Data = data, Height = h, Width = w}; DataRectangle rect = t.LockRectangle(0, LockFlags.Discard);
int rowWidth = 4 * w;
if (rowWidth == rect.Pitch)
rect.Data.Write(data, 0, data.Length);
else
{
for (int i = 0; i + rowWidth <= data.Length; i += rowWidth)
{
rect.Data.Write(data, i, rowWidth);
//Go to next row
rect.Data.Position = rect.Data.Position - rowWidth + rect.Pitch;
}
}
t.UnlockRectangle(0);
}
texture.Height = h; public CTexture EnqueueTexture(int w, int h, byte[] data)
texture.Width = w; {
CTexture texture = _GetNewTexture(w, h);
lock (_MutexTexture) lock (_MutexTexture)
{ {
_D3DTextures.Add(_IDs.Peek(), null); texture.ID = _IDs.Dequeue();
texture.Index = _IDs.Dequeue(); _D3DTextures.Add(texture.ID, null);
queue.ID = texture.Index; STextureQueue queue = new STextureQueue(texture.ID, texture.W2, texture.H2, w, h, data);
_Queue.Add(queue); _TexturesToLoad.Enqueue(queue);
_Textures[texture.Index] = texture;
} }
return texture; return texture;
} }
private CTexture _GetNewTexture(int w, int h)
{
return new CTexture(w, h, _CheckForNextPowerOf2(w), _CheckForNextPowerOf2(h));
}
#endregion adding #endregion adding
#region updating #region updating
@@ -1002,48 +957,30 @@ namespace Vocaluxe.Lib.Draw
/// Updates the data of a texture /// Updates the data of a texture
/// </summary> /// </summary>
/// <param name="texture">The texture to update</param> /// <param name="texture">The texture to update</param>
/// <param name="w"></param>
/// <param name="h"></param>
/// <param name="data">A byte array containing the new texture's data</param> /// <param name="data">A byte array containing the new texture's data</param>
/// <returns>True if succeeded</returns> /// <returns>True if succeeded</returns>
public bool UpdateTexture(ref STexture texture, byte[] data) public bool UpdateTexture(CTexture texture, int w, int h, byte[] data)
{ {
if ((texture.Index >= 0) && (_Textures.Count > 0) && _TextureExists(ref texture)) //Check if texture exists and extend matches
if (!_TextureExists(texture) || texture.UsedWidth != w || texture.UsedHeight != h)
return false;
lock (_MutexTexture)
{ {
lock (_MutexTexture) _WriteDataToTexture(_D3DTextures[texture.ID], w, data);
{
DataRectangle rect = _D3DTextures[texture.Index].LockRectangle(0, LockFlags.Discard);
int w = (int)texture.Width;
for (int i = 0; i < data.Length; i += 4 * w)
{
rect.Data.Write(data, i, 4 * w);
rect.Data.Position -= 4 * w;
rect.Data.Position += rect.Pitch;
}
_D3DTextures[texture.Index].UnlockRectangle(0);
}
//Flamefire: Unneccesary as height can not be changed by this! (Texture gets copied)
//Texture.height_ratio = Texture.height / CheckForNextPowerOf2(Texture.height);
//Texture.width_ratio = Texture.width / CheckForNextPowerOf2(Texture.width);
return true;
/*Surface s = _D3DTextures[Texture.index].GetSurfaceLevel(0);
DataRectangle d = s.LockRectangle(LockFlags.Discard);
for (int i = 0; i < Data.Length; )
{
d.Data.Write(Data, i, 4 * (int)Texture.width);
i += 4 * (int)Texture.width;
d.Data.Position = d.Data.Position - 4 * (int)Texture.width;
d.Data.Position += d.Pitch;
}
Texture.height_ratio = Texture.height / NextPowerOfTwo(Texture.height);
Texture.width_ratio = Texture.width / NextPowerOfTwo(Texture.width);
s.UnlockRectangle();
return true; */
} }
return false; return true;
}
public bool UpdateOrAddTexture(ref CTexture texture, int w, int h, byte[] data)
{
if (!UpdateTexture(texture, w, h, data))
{
RemoveTexture(ref texture);
texture = AddTexture(w, h, data);
}
return true;
} }
#endregion updating #endregion updating
@@ -1052,40 +989,30 @@ namespace Vocaluxe.Lib.Draw
/// </summary> /// </summary>
/// <param name="texture">The texture to check</param> /// <param name="texture">The texture to check</param>
/// <returns>True if the texture exists</returns> /// <returns>True if the texture exists</returns>
private bool _TextureExists(ref STexture texture) private bool _TextureExists(CTexture texture)
{ {
lock (_MutexTexture) lock (_MutexTexture)
{ {
if (_Textures.ContainsKey(texture.Index)) return texture != null && _D3DTextures.ContainsKey(texture.ID);
{
if (_Textures[texture.Index].Index >= 0)
{
texture = _Textures[texture.Index];
return true;
}
}
} }
return false;
} }
/// <summary> /// <summary>
/// Removes a texture from the Vram /// Removes a texture from the Vram
/// </summary> /// </summary>
/// <param name="texture">The texture to be removed</param> /// <param name="texture">The texture to be removed</param>
public void RemoveTexture(ref STexture texture) public void RemoveTexture(ref CTexture texture)
{ {
lock (_MutexTexture) if (_TextureExists(texture))
{ {
if ((texture.Index >= 0) && (_Textures.Count > 0)) lock (_MutexTexture)
{ {
_D3DTextures[texture.Index].Dispose(); _D3DTextures[texture.ID].Dispose();
_D3DTextures.Remove(texture.Index); _D3DTextures.Remove(texture.ID);
_Textures.Remove(texture.Index); _IDs.Enqueue(texture.ID);
_IDs.Enqueue(texture.Index);
texture.Index = -1;
texture.ID = -1;
} }
} }
texture = null;
} }
#region drawing #region drawing
@@ -1093,8 +1020,10 @@ namespace Vocaluxe.Lib.Draw
/// Draws a texture /// Draws a texture
/// </summary> /// </summary>
/// <param name="texture">The texture to be drawn</param> /// <param name="texture">The texture to be drawn</param>
public void DrawTexture(STexture texture) public void DrawTexture(CTexture texture)
{ {
if (texture == null)
return;
DrawTexture(texture, texture.Rect, texture.Color); DrawTexture(texture, texture.Rect, texture.Color);
} }
@@ -1103,8 +1032,10 @@ namespace Vocaluxe.Lib.Draw
/// </summary> /// </summary>
/// <param name="texture">The texture to be drawn</param> /// <param name="texture">The texture to be drawn</param>
/// <param name="rect">A SRectF struct containing the destination coordinates</param> /// <param name="rect">A SRectF struct containing the destination coordinates</param>
public void DrawTexture(STexture texture, SRectF rect) public void DrawTexture(CTexture texture, SRectF rect)
{ {
if (texture == null)
return;
DrawTexture(texture, rect, texture.Color); DrawTexture(texture, rect, texture.Color);
} }
@@ -1115,7 +1046,7 @@ namespace Vocaluxe.Lib.Draw
/// <param name="rect">A SRectF struct containing the destination coordinates</param> /// <param name="rect">A SRectF struct containing the destination coordinates</param>
/// <param name="color">A SColorF struct containing a color which the texture will be colored in</param> /// <param name="color">A SColorF struct containing a color which the texture will be colored in</param>
/// <param name="mirrored">True if the texture should be mirrored</param> /// <param name="mirrored">True if the texture should be mirrored</param>
public void DrawTexture(STexture texture, SRectF rect, SColorF color, bool mirrored = false) public void DrawTexture(CTexture texture, SRectF rect, SColorF color, bool mirrored = false)
{ {
DrawTexture(texture, rect, color, new SRectF(0, 0, CSettings.RenderW, CSettings.RenderH, rect.Z), mirrored); DrawTexture(texture, rect, color, new SRectF(0, 0, CSettings.RenderW, CSettings.RenderH, rect.Z), mirrored);
} }
@@ -1128,86 +1059,85 @@ namespace Vocaluxe.Lib.Draw
/// <param name="color">A SColorF struct containing a color which the texture will be colored in</param> /// <param name="color">A SColorF struct containing a color which the texture will be colored in</param>
/// <param name="bounds">A SRectF struct containing which part of the texture should be drawn</param> /// <param name="bounds">A SRectF struct containing which part of the texture should be drawn</param>
/// <param name="mirrored">True if the texture should be mirrored</param> /// <param name="mirrored">True if the texture should be mirrored</param>
public void DrawTexture(STexture texture, SRectF rect, SColorF color, SRectF bounds, bool mirrored = false) public void DrawTexture(CTexture texture, SRectF rect, SColorF color, SRectF bounds, bool mirrored = false)
{ {
if (_TextureExists(ref texture)) if (!_TextureExists(texture))
return;
if (_D3DTextures[texture.ID] == null)
return;
//Calculate the position
float x1 = (bounds.X - rect.X) / rect.W * texture.WidthRatio;
float x2 = (bounds.X + bounds.W - rect.X) / rect.W * texture.WidthRatio;
float y1 = (bounds.Y - rect.Y) / rect.H * texture.HeightRatio;
float y2 = (bounds.Y + bounds.H - rect.Y) / rect.H * texture.HeightRatio;
if (x1 < 0)
x1 = 0f;
if (x2 > texture.WidthRatio)
x2 = texture.WidthRatio;
if (y1 < 0)
y1 = 0f;
if (y2 > texture.HeightRatio)
y2 = texture.HeightRatio;
//Calculate the size
float rx1 = rect.X;
float rx2 = rect.X + rect.W;
float ry1 = rect.Y;
float ry2 = rect.Y + rect.H;
if (rx1 < bounds.X)
rx1 = bounds.X;
if (rx2 > bounds.X + bounds.W)
rx2 = bounds.X + bounds.W;
if (ry1 < bounds.Y)
ry1 = bounds.Y;
if (ry2 > bounds.Y + bounds.H)
ry2 = bounds.Y + bounds.H;
//Align the pixels because Direct3D expects the pixels to be the left top corner
rx1 -= 0.5f;
ry1 -= 0.5f;
rx2 -= 0.5f;
ry2 -= 0.5f;
color.A *= CGraphics.GlobalAlpha;
if (color.A > 1)
color.A = 1;
if (color.R > 1)
color.R = 1;
if (color.G > 1)
color.G = 1;
if (color.B > 1)
color.B = 1;
Color c = color.AsColor();
if (!mirrored)
{ {
if (_D3DTextures[texture.Index] == null) STexturedColoredVertex[] vert = new STexturedColoredVertex[4];
return; vert[0] = new STexturedColoredVertex(new Vector3(rx1, -ry1, rect.Z + CGraphics.ZOffset), new Vector2(x1, y1), c.ToArgb());
vert[1] = new STexturedColoredVertex(new Vector3(rx1, -ry2, rect.Z + CGraphics.ZOffset), new Vector2(x1, y2), c.ToArgb());
//Calculate the position vert[2] = new STexturedColoredVertex(new Vector3(rx2, -ry2, rect.Z + CGraphics.ZOffset), new Vector2(x2, y2), c.ToArgb());
float x1 = (bounds.X - rect.X) / rect.W * texture.WidthRatio; vert[3] = new STexturedColoredVertex(new Vector3(rx2, -ry1, rect.Z + CGraphics.ZOffset), new Vector2(x2, y1), c.ToArgb());
float x2 = (bounds.X + bounds.W - rect.X) / rect.W * texture.WidthRatio; _AddToVertexBuffer(vert, _D3DTextures[texture.ID], _CalculateRotationMatrix(rect.Rotation, rx1, rx2, ry1, ry2));
float y1 = (bounds.Y - rect.Y) / rect.H * texture.HeightRatio; }
float y2 = (bounds.Y + bounds.H - rect.Y) / rect.H * texture.HeightRatio; else
{
if (x1 < 0) STexturedColoredVertex[] vert = new STexturedColoredVertex[4];
x1 = 0f; vert[0] = new STexturedColoredVertex(new Vector3(rx1, -ry1, rect.Z + CGraphics.ZOffset), new Vector2(x1, -y1), c.ToArgb());
vert[1] = new STexturedColoredVertex(new Vector3(rx1, -ry2, rect.Z + CGraphics.ZOffset), new Vector2(x1, -y2), c.ToArgb());
if (x2 > texture.WidthRatio) vert[2] = new STexturedColoredVertex(new Vector3(rx2, -ry2, rect.Z + CGraphics.ZOffset), new Vector2(x2, -y2), c.ToArgb());
x2 = texture.WidthRatio; vert[3] = new STexturedColoredVertex(new Vector3(rx2, -ry1, rect.Z + CGraphics.ZOffset), new Vector2(x2, -y1), c.ToArgb());
_AddToVertexBuffer(vert, _D3DTextures[texture.ID], _CalculateRotationMatrix(rect.Rotation, rx1, rx2, ry1, ry2));
if (y1 < 0)
y1 = 0f;
if (y2 > texture.HeightRatio)
y2 = texture.HeightRatio;
//Calculate the size
float rx1 = rect.X;
float rx2 = rect.X + rect.W;
float ry1 = rect.Y;
float ry2 = rect.Y + rect.H;
if (rx1 < bounds.X)
rx1 = bounds.X;
if (rx2 > bounds.X + bounds.W)
rx2 = bounds.X + bounds.W;
if (ry1 < bounds.Y)
ry1 = bounds.Y;
if (ry2 > bounds.Y + bounds.H)
ry2 = bounds.Y + bounds.H;
//Align the pixels because Direct3D expects the pixels to be the left top corner
rx1 -= 0.5f;
ry1 -= 0.5f;
rx2 -= 0.5f;
ry2 -= 0.5f;
color.A *= CGraphics.GlobalAlpha;
if (color.A > 1)
color.A = 1;
if (color.R > 1)
color.R = 1;
if (color.G > 1)
color.G = 1;
if (color.B > 1)
color.B = 1;
Color c = color.AsColor();
if (!mirrored)
{
STexturedColoredVertex[] vert = new STexturedColoredVertex[4];
vert[0] = new STexturedColoredVertex(new Vector3(rx1, -ry1, rect.Z + CGraphics.ZOffset), new Vector2(x1, y1), c.ToArgb());
vert[1] = new STexturedColoredVertex(new Vector3(rx1, -ry2, rect.Z + CGraphics.ZOffset), new Vector2(x1, y2), c.ToArgb());
vert[2] = new STexturedColoredVertex(new Vector3(rx2, -ry2, rect.Z + CGraphics.ZOffset), new Vector2(x2, y2), c.ToArgb());
vert[3] = new STexturedColoredVertex(new Vector3(rx2, -ry1, rect.Z + CGraphics.ZOffset), new Vector2(x2, y1), c.ToArgb());
_AddToVertexBuffer(vert, _D3DTextures[texture.Index], _CalculateRotationMatrix(rect.Rotation, rx1, rx2, ry1, ry2));
}
else
{
STexturedColoredVertex[] vert = new STexturedColoredVertex[4];
vert[0] = new STexturedColoredVertex(new Vector3(rx1, -ry1, rect.Z + CGraphics.ZOffset), new Vector2(x1, -y1), c.ToArgb());
vert[1] = new STexturedColoredVertex(new Vector3(rx1, -ry2, rect.Z + CGraphics.ZOffset), new Vector2(x1, -y2), c.ToArgb());
vert[2] = new STexturedColoredVertex(new Vector3(rx2, -ry2, rect.Z + CGraphics.ZOffset), new Vector2(x2, -y2), c.ToArgb());
vert[3] = new STexturedColoredVertex(new Vector3(rx2, -ry1, rect.Z + CGraphics.ZOffset), new Vector2(x2, -y1), c.ToArgb());
_AddToVertexBuffer(vert, _D3DTextures[texture.Index], _CalculateRotationMatrix(rect.Rotation, rx1, rx2, ry1, ry2));
}
} }
} }
@@ -1219,11 +1149,11 @@ namespace Vocaluxe.Lib.Draw
/// <param name="color">A SColorF struct containing a color which the texture will be colored in</param> /// <param name="color">A SColorF struct containing a color which the texture will be colored in</param>
/// <param name="begin">A Value ranging from 0 to 1 containing the beginning of the texture</param> /// <param name="begin">A Value ranging from 0 to 1 containing the beginning of the texture</param>
/// <param name="end">A Value ranging from 0 to 1 containing the ending of the texture</param> /// <param name="end">A Value ranging from 0 to 1 containing the ending of the texture</param>
public void DrawTexture(STexture texture, SRectF rect, SColorF color, float begin, float end) public void DrawTexture(CTexture texture, SRectF rect, SColorF color, float begin, float end)
{ {
if (!_TextureExists(ref texture)) if (!_TextureExists(texture))
return; return;
if (_D3DTextures[texture.Index] == null) if (_D3DTextures[texture.ID] == null)
return; return;
float x1 = 0f + begin * texture.WidthRatio; float x1 = 0f + begin * texture.WidthRatio;
@@ -1251,7 +1181,7 @@ namespace Vocaluxe.Lib.Draw
vert[1] = new STexturedColoredVertex(new Vector3(rx1, -ry2, rect.Z + CGraphics.ZOffset), new Vector2(x1, y2), c.ToArgb()); vert[1] = new STexturedColoredVertex(new Vector3(rx1, -ry2, rect.Z + CGraphics.ZOffset), new Vector2(x1, y2), c.ToArgb());
vert[2] = new STexturedColoredVertex(new Vector3(rx2, -ry2, rect.Z + CGraphics.ZOffset), new Vector2(x2, y2), c.ToArgb()); vert[2] = new STexturedColoredVertex(new Vector3(rx2, -ry2, rect.Z + CGraphics.ZOffset), new Vector2(x2, y2), c.ToArgb());
vert[3] = new STexturedColoredVertex(new Vector3(rx2, -ry1, rect.Z + CGraphics.ZOffset), new Vector2(x2, y1), c.ToArgb()); vert[3] = new STexturedColoredVertex(new Vector3(rx2, -ry1, rect.Z + CGraphics.ZOffset), new Vector2(x2, y1), c.ToArgb());
_AddToVertexBuffer(vert, _D3DTextures[texture.Index], _CalculateRotationMatrix(rect.Rotation, rx1, rx2, ry1, ry2)); _AddToVertexBuffer(vert, _D3DTextures[texture.ID], _CalculateRotationMatrix(rect.Rotation, rx1, rx2, ry1, ry2));
} }
/// <summary> /// <summary>
@@ -1263,11 +1193,11 @@ namespace Vocaluxe.Lib.Draw
/// <param name="bounds">A SRectF struct containing which part of the texture should be drawn</param> /// <param name="bounds">A SRectF struct containing which part of the texture should be drawn</param>
/// <param name="space">The space between the texture and the reflection</param> /// <param name="space">The space between the texture and the reflection</param>
/// <param name="height">The height of the reflection</param> /// <param name="height">The height of the reflection</param>
public void DrawTextureReflection(STexture texture, SRectF rect, SColorF color, SRectF bounds, float space, float height) public void DrawTextureReflection(CTexture texture, SRectF rect, SColorF color, SRectF bounds, float space, float height)
{ {
if (!_TextureExists(ref texture)) if (!_TextureExists(texture))
return; return;
if (_D3DTextures[texture.Index] == null) if (_D3DTextures[texture.ID] == null)
return; return;
if (Math.Abs(rect.W) < float.Epsilon || Math.Abs(rect.H) < float.Epsilon || Math.Abs(bounds.H) < float.Epsilon || Math.Abs(bounds.W) < float.Epsilon || if (Math.Abs(rect.W) < float.Epsilon || Math.Abs(rect.H) < float.Epsilon || Math.Abs(bounds.H) < float.Epsilon || Math.Abs(bounds.W) < float.Epsilon ||
@@ -1283,61 +1213,58 @@ namespace Vocaluxe.Lib.Draw
if (height > bounds.H) if (height > bounds.H)
height = bounds.H; height = bounds.H;
if (_TextureExists(ref texture)) float x1 = (bounds.X - rect.X) / rect.W * texture.WidthRatio;
{ float x2 = (bounds.X + bounds.W - rect.X) / rect.W * texture.WidthRatio;
float x1 = (bounds.X - rect.X) / rect.W * texture.WidthRatio; float y1 = (bounds.Y - rect.Y + rect.H - height) / rect.H * texture.HeightRatio;
float x2 = (bounds.X + bounds.W - rect.X) / rect.W * texture.WidthRatio; float y2 = (bounds.Y + bounds.H - rect.Y) / rect.H * texture.HeightRatio;
float y1 = (bounds.Y - rect.Y + rect.H - height) / rect.H * texture.HeightRatio;
float y2 = (bounds.Y + bounds.H - rect.Y) / rect.H * texture.HeightRatio;
if (x1 < 0) if (x1 < 0)
x1 = 0f; x1 = 0f;
if (x2 > texture.WidthRatio) if (x2 > texture.WidthRatio)
x2 = texture.WidthRatio; x2 = texture.WidthRatio;
if (y1 < 0) if (y1 < 0)
y1 = 0f; y1 = 0f;
if (y2 > texture.HeightRatio) if (y2 > texture.HeightRatio)
y2 = texture.HeightRatio; y2 = texture.HeightRatio;
float rx1 = rect.X; float rx1 = rect.X;
float rx2 = rect.X + rect.W; float rx2 = rect.X + rect.W;
float ry1 = rect.Y + rect.H + space; float ry1 = rect.Y + rect.H + space;
float ry2 = rect.Y + rect.H + space + height; float ry2 = rect.Y + rect.H + space + height;
if (rx1 < bounds.X) if (rx1 < bounds.X)
rx1 = bounds.X; rx1 = bounds.X;
if (rx2 > bounds.X + bounds.W) if (rx2 > bounds.X + bounds.W)
rx2 = bounds.X + bounds.W; rx2 = bounds.X + bounds.W;
if (ry1 < bounds.Y + space) if (ry1 < bounds.Y + space)
ry1 = bounds.Y + space; ry1 = bounds.Y + space;
if (ry2 > bounds.Y + bounds.H + space + height) if (ry2 > bounds.Y + bounds.H + space + height)
ry2 = bounds.Y + bounds.H + space + height; ry2 = bounds.Y + bounds.H + space + height;
//Align the pixels because Direct3D expects the pixels to be the left top corner //Align the pixels because Direct3D expects the pixels to be the left top corner
rx1 -= 0.5f; rx1 -= 0.5f;
ry1 -= 0.5f; ry1 -= 0.5f;
rx2 -= 0.5f; rx2 -= 0.5f;
ry2 -= 0.5f; ry2 -= 0.5f;
color.A *= CGraphics.GlobalAlpha; color.A *= CGraphics.GlobalAlpha;
Color c = color.AsColor(); Color c = color.AsColor();
color.A = 0; color.A = 0;
Color transparent = color.AsColor(); Color transparent = color.AsColor();
STexturedColoredVertex[] vert = new STexturedColoredVertex[4]; STexturedColoredVertex[] vert = new STexturedColoredVertex[4];
vert[0] = new STexturedColoredVertex(new Vector3(rx1, -ry1, rect.Z + CGraphics.ZOffset), new Vector2(x1, y2), c.ToArgb()); vert[0] = new STexturedColoredVertex(new Vector3(rx1, -ry1, rect.Z + CGraphics.ZOffset), new Vector2(x1, y2), c.ToArgb());
vert[1] = new STexturedColoredVertex(new Vector3(rx1, -ry2, rect.Z + CGraphics.ZOffset), new Vector2(x1, y1), transparent.ToArgb()); vert[1] = new STexturedColoredVertex(new Vector3(rx1, -ry2, rect.Z + CGraphics.ZOffset), new Vector2(x1, y1), transparent.ToArgb());
vert[2] = new STexturedColoredVertex(new Vector3(rx2, -ry2, rect.Z + CGraphics.ZOffset), new Vector2(x2, y1), transparent.ToArgb()); vert[2] = new STexturedColoredVertex(new Vector3(rx2, -ry2, rect.Z + CGraphics.ZOffset), new Vector2(x2, y1), transparent.ToArgb());
vert[3] = new STexturedColoredVertex(new Vector3(rx2, -ry1, rect.Z + CGraphics.ZOffset), new Vector2(x2, y2), c.ToArgb()); vert[3] = new STexturedColoredVertex(new Vector3(rx2, -ry1, rect.Z + CGraphics.ZOffset), new Vector2(x2, y2), c.ToArgb());
_AddToVertexBuffer(vert, _D3DTextures[texture.Index], _CalculateRotationMatrix(rect.Rotation, rx1, rx2, ry1, ry2)); _AddToVertexBuffer(vert, _D3DTextures[texture.ID], _CalculateRotationMatrix(rect.Rotation, rx1, rx2, ry1, ry2));
}
} }
#endregion drawing #endregion drawing
@@ -1345,21 +1272,16 @@ namespace Vocaluxe.Lib.Draw
{ {
lock (_MutexTexture) lock (_MutexTexture)
{ {
if (_Queue.Count == 0) while (_TexturesToLoad.Count > 0)
return; {
STextureQueue q = _TexturesToLoad.Dequeue();
Texture t;
if (_D3DTextures.TryGetValue(q.ID, out t) && t != null)
continue;
STextureQueue q = _Queue[0]; t = _CreateTexture(q.TextureWidth, q.TextureHeight, q.DataWidth, q.Data);
STexture texture; _D3DTextures[q.ID] = t;
if (_Textures.ContainsKey(q.ID)) }
texture = _Textures[q.ID];
else
return;
Texture t = _CreateTexture(q.Width, q.Height, q.Data, ref texture);
_D3DTextures[q.ID] = t;
_Textures[texture.Index] = texture;
_Queue.RemoveAt(0);
} }
} }
@@ -1369,7 +1291,7 @@ namespace Vocaluxe.Lib.Draw
/// <returns>The amount of textures</returns> /// <returns>The amount of textures</returns>
public int GetTextureCount() public int GetTextureCount()
{ {
return _Textures.Count; return _D3DTextures.Count;
} }
#endregion Textures #endregion Textures
@@ -1381,13 +1303,13 @@ namespace Vocaluxe.Lib.Draw
/// </summary> /// </summary>
/// <param name="n">The value of which the next power of two will be calculated</param> /// <param name="n">The value of which the next power of two will be calculated</param>
/// <returns>The next power of two</returns> /// <returns>The next power of two</returns>
private float _CheckForNextPowerOf2(float n) private int _CheckForNextPowerOf2(int n)
{ {
if (_NonPowerOf2TextureSupported) if (_NonPowerOf2TextureSupported)
return n; return n;
if (n < 0) if (n < 0)
throw new ArgumentOutOfRangeException("n", "Must be positive."); throw new ArgumentOutOfRangeException("n", "Must be positive.");
return (float)Math.Pow(2, Math.Ceiling(Math.Log(n, 2))); return (int)Math.Pow(2, Math.Ceiling(Math.Log(n, 2)));
} }
private SlimDX.Matrix _CalculateRotationMatrix(float rot, float rx1, float rx2, float ry1, float ry2) private SlimDX.Matrix _CalculateRotationMatrix(float rot, float rx1, float rx2, float ry1, float ry2)
+68 -74
View File
@@ -28,6 +28,7 @@ using System.Threading;
using System.Windows.Forms; using System.Windows.Forms;
using Vocaluxe.Base; using Vocaluxe.Base;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu; using VocaluxeLib.Menu;
namespace Vocaluxe.Lib.Draw namespace Vocaluxe.Lib.Draw
@@ -46,8 +47,8 @@ namespace Vocaluxe.Lib.Draw
private bool _TopMost; private bool _TopMost;
private Rectangle _Bounds; private Rectangle _Bounds;
private readonly List<STexture> _Textures; private readonly Dictionary<int, CTexture> _Textures = new Dictionary<int, CTexture>();
private readonly List<Bitmap> _Bitmaps; private readonly List<Bitmap> _Bitmaps = new List<Bitmap>();
private readonly Color _ClearColor = Color.DarkBlue; private readonly Color _ClearColor = Color.DarkBlue;
@@ -55,9 +56,6 @@ namespace Vocaluxe.Lib.Draw
{ {
Icon = new Icon(Path.Combine(Environment.CurrentDirectory, CSettings.Icon)); Icon = new Icon(Path.Combine(Environment.CurrentDirectory, CSettings.Icon));
_Textures = new List<STexture>();
_Bitmaps = new List<Bitmap>();
_Keys = new CKeys(); _Keys = new CKeys();
_Mouse = new CMouse(); _Mouse = new CMouse();
ClientSize = new Size(1280, 720); ClientSize = new Size(1280, 720);
@@ -290,34 +288,27 @@ namespace Vocaluxe.Lib.Draw
_G.Clear(_ClearColor); _G.Clear(_ClearColor);
} }
public STexture CopyScreen() public CTexture CopyScreen()
{ {
STexture texture = new STexture(0);
Bitmap bmp = new Bitmap(_Backbuffer); Bitmap bmp = new Bitmap(_Backbuffer);
_Bitmaps.Add(bmp); _Bitmaps.Add(bmp);
CTexture texture = _GetNewTexture(bmp.Width, bmp.Height);
texture.Index = _Bitmaps.Count - 1;
texture.Width = bmp.Width;
texture.Height = bmp.Height;
// Add to Texture List // Add to Texture List
texture.Color = new SColorF(1f, 1f, 1f, 1f); _Textures[texture.ID] = texture;
texture.Rect = new SRectF(0f, 0f, texture.Width, texture.Height, 0f);
_Textures.Add(texture);
return texture; return texture;
} }
public void CopyScreen(ref STexture texture) public void CopyScreen(ref CTexture texture)
{ {
if (texture.Index == 0 || (int)texture.Width != GetScreenWidth() || (int)texture.Height != GetScreenHeight()) if (!_TextureExists(texture) || texture.W2 != GetScreenWidth() || texture.H2 != GetScreenHeight())
{ {
RemoveTexture(ref texture); RemoveTexture(ref texture);
texture = CopyScreen(); texture = CopyScreen();
} }
else else
_Bitmaps[texture.Index] = new Bitmap(_Backbuffer); _Bitmaps[texture.ID] = new Bitmap(_Backbuffer);
} }
public void MakeScreenShot() public void MakeScreenShot()
@@ -341,70 +332,63 @@ namespace Vocaluxe.Lib.Draw
public void DrawColorReflection(SColorF color, SRectF rect, float space, float height) {} public void DrawColorReflection(SColorF color, SRectF rect, float space, float height) {}
public STexture AddTexture(Bitmap bmp) public CTexture AddTexture(Bitmap bmp)
{ {
Bitmap bmp2 = new Bitmap(bmp); Bitmap bmp2 = new Bitmap(bmp);
_Bitmaps.Add(bmp2); _Bitmaps.Add(bmp2);
STexture texture = new STexture {Index = _Bitmaps.Count - 1, Width = bmp.Width, Height = bmp.Height, Color = new SColorF(1f, 1f, 1f, 1f)}; CTexture texture = _GetNewTexture(bmp.Width, bmp.Height);
// Add to Texture List // Add to Texture List
texture.Rect = new SRectF(0f, 0f, texture.Width, texture.Height, 0f); _Textures[texture.ID] = texture;
texture.TexturePath = String.Empty;
_Textures.Add(texture);
return texture; return texture;
} }
public STexture AddTexture(string texturePath) private CTexture _GetNewTexture(int w, int h)
{
return new CTexture(w, h) {ID = _Bitmaps.Count - 1};
}
public CTexture AddTexture(string texturePath)
{ {
STexture texture = new STexture();
if (File.Exists(texturePath)) if (File.Exists(texturePath))
{ {
bool found = false; foreach (CTexture tex in _Textures.Values)
foreach (STexture tex in _Textures)
{ {
if (tex.TexturePath == texturePath) if (tex.TexturePath == texturePath)
{ return tex;
texture = tex;
found = true;
break;
}
} }
using (Bitmap bmp = new Bitmap(texturePath))
if (!found)
{ {
using (Bitmap bmp = new Bitmap(texturePath)) CTexture texture = AddTexture(bmp);
return AddTexture(bmp); texture.TexturePath = texturePath;
} }
} }
return texture; return null;
} }
public void RemoveTexture(ref STexture texture) private bool _TextureExists(CTexture texture)
{ {
if ((texture.Index >= 0) && (_Textures.Count > 0)) return texture != null && _Textures.ContainsKey(texture.ID);
{
for (int i = 0; i < _Textures.Count; i++)
{
if (_Textures[i].Index == texture.Index)
{
_Bitmaps[texture.Index].Dispose();
_Textures.RemoveAt(i);
texture.Index = -1;
break;
}
}
}
} }
public STexture EnqueueTexture(int w, int h, byte[] data) public void RemoveTexture(ref CTexture texture)
{
if (_TextureExists(texture))
{
_Bitmaps[texture.ID].Dispose();
_Textures.Remove(texture.ID);
}
texture = null;
}
public CTexture EnqueueTexture(int w, int h, byte[] data)
{ {
return AddTexture(w, h, data); return AddTexture(w, h, data);
} }
public STexture AddTexture(int w, int h, byte[] data) public CTexture AddTexture(int w, int h, byte[] data)
{ {
using (Bitmap bmp = new Bitmap(w, h)) using (Bitmap bmp = new Bitmap(w, h))
{ {
@@ -415,49 +399,59 @@ namespace Vocaluxe.Lib.Draw
} }
} }
public bool UpdateTexture(ref STexture texture, byte[] data) public bool UpdateTexture(CTexture texture, int w, int h, byte[] data)
{ {
if ((texture.Index >= 0) && (_Textures.Count > 0) && (_Bitmaps.Count > texture.Index)) if (_TextureExists(texture))
{ {
BitmapData bmpData = _Bitmaps[texture.Index].LockBits(new Rectangle(0, 0, _Bitmaps[texture.Index].Width, _Bitmaps[texture.Index].Height), BitmapData bmpData = _Bitmaps[texture.ID].LockBits(new Rectangle(0, 0, _Bitmaps[texture.ID].Width, _Bitmaps[texture.ID].Height),
ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
Marshal.Copy(data, 0, bmpData.Scan0, data.Length); Marshal.Copy(data, 0, bmpData.Scan0, data.Length);
_Bitmaps[texture.Index].UnlockBits(bmpData); _Bitmaps[texture.ID].UnlockBits(bmpData);
return true;
}
return false;
}
public bool UpdateOrAddTexture(ref CTexture texture, int w, int h, byte[] data)
{
if (!UpdateTexture(texture, w, h, data))
{
RemoveTexture(ref texture);
texture = AddTexture(w, h, data);
} }
return true; return true;
} }
public void DrawTexture(STexture texture) public void DrawTexture(CTexture texture)
{ {
if ((texture.Index >= 0) && (_Textures.Count > 0) && (_Bitmaps.Count > texture.Index)) if (texture != null)
DrawTexture(texture, texture.Rect, texture.Color); DrawTexture(texture, texture.Rect, texture.Color);
} }
public void DrawTexture(STexture texture, SRectF rect) public void DrawTexture(CTexture texture, SRectF rect)
{ {
if ((texture.Index >= 0) && (_Textures.Count > 0) && (_Bitmaps.Count > texture.Index)) if (texture != null)
DrawTexture(texture, rect, texture.Color); DrawTexture(texture, rect, texture.Color);
} }
public void DrawTexture(STexture texture, SRectF rect, SColorF color, bool mirrored = false) public void DrawTexture(CTexture texture, SRectF rect, SColorF color, bool mirrored = false)
{ {
if ((texture.Index >= 0) && (_Textures.Count > 0) && (_Bitmaps.Count > texture.Index)) if (texture != null)
DrawTexture(texture, rect, color, rect, mirrored); DrawTexture(texture, rect, color, rect, mirrored);
} }
public void DrawTexture(STexture texture, SRectF rect, SColorF color, SRectF bounds, bool mirrored = false) public void DrawTexture(CTexture texture, SRectF rect, SColorF color, SRectF bounds, bool mirrored = false)
{ {
if ((texture.Index >= 0) && (_Textures.Count > 0) && (_Bitmaps.Count > texture.Index)) if (!_TextureExists(texture))
{ return;
Bitmap coloredBitmap = _ColorizeBitmap(_Bitmaps[texture.Index], color); Bitmap coloredBitmap = _ColorizeBitmap(_Bitmaps[texture.ID], color);
_G.DrawImage(coloredBitmap, new RectangleF(rect.X, rect.Y, rect.W, rect.H)); _G.DrawImage(coloredBitmap, new RectangleF(rect.X, rect.Y, rect.W, rect.H));
coloredBitmap.Dispose(); coloredBitmap.Dispose();
}
} }
public void DrawTexture(STexture texture, SRectF rect, SColorF color, float begin, float end) {} public void DrawTexture(CTexture texture, SRectF rect, SColorF color, float begin, float end) {}
public void DrawTextureReflection(STexture texture, SRectF rect, SColorF color, SRectF bounds, float space, float height) {} public void DrawTextureReflection(CTexture texture, SRectF rect, SColorF color, SRectF bounds, float space, float height) {}
public int GetTextureCount() public int GetTextureCount()
{ {
File diff suppressed because it is too large. Load diff
+18 -15
View File
@@ -17,11 +17,13 @@
// */ // */
#endregion #endregion
using System;
using System.Drawing; using System.Drawing;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Menu; using VocaluxeLib.Menu;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu;
namespace Vocaluxe.Lib.Draw namespace Vocaluxe.Lib.Draw
{ {
interface IDraw interface IDraw
@@ -36,28 +38,29 @@ namespace Vocaluxe.Lib.Draw
int GetTextureCount(); int GetTextureCount();
void ClearScreen(); void ClearScreen();
STexture CopyScreen(); CTexture CopyScreen();
void CopyScreen(ref STexture texture); void CopyScreen(ref CTexture texture);
void MakeScreenShot(); void MakeScreenShot();
STexture AddTexture(string texturePath); CTexture AddTexture(string texturePath);
STexture AddTexture(Bitmap bitmap); CTexture AddTexture(Bitmap bitmap);
STexture AddTexture(int w, int h, byte[] data); CTexture AddTexture(int w, int h, byte[] data);
STexture EnqueueTexture(int w, int h, byte[] data); CTexture EnqueueTexture(int w, int h, byte[] data);
bool UpdateTexture(ref STexture texture, byte[] data); bool UpdateTexture(CTexture texture, int w, int h, byte[] data);
void RemoveTexture(ref STexture texture); bool UpdateOrAddTexture(ref CTexture texture, int w, int h, byte[] data);
void RemoveTexture(ref CTexture texture);
// Basic Draw Methods // Basic Draw Methods
void DrawLine(int a, int r, int g, int b, int w, int x1, int y1, int x2, int y2); void DrawLine(int a, int r, int g, int b, int w, int x1, int y1, int x2, int y2);
void DrawColor(SColorF color, SRectF rect); void DrawColor(SColorF color, SRectF rect);
void DrawColorReflection(SColorF color, SRectF rect, float space, float height); void DrawColorReflection(SColorF color, SRectF rect, float space, float height);
void DrawTexture(STexture texture); void DrawTexture(CTexture texture);
void DrawTexture(STexture texture, SRectF rect); void DrawTexture(CTexture texture, SRectF rect);
void DrawTexture(STexture texture, SRectF rect, SColorF color, bool mirrored = false); void DrawTexture(CTexture texture, SRectF rect, SColorF color, bool mirrored = false);
void DrawTexture(STexture texture, SRectF rect, SColorF color, SRectF bounds, bool mirrored = false); void DrawTexture(CTexture texture, SRectF rect, SColorF color, SRectF bounds, bool mirrored = false);
void DrawTexture(STexture texture, SRectF rect, SColorF color, float begin, float end); void DrawTexture(CTexture texture, SRectF rect, SColorF color, float begin, float end);
void DrawTextureReflection(STexture texture, SRectF rect, SColorF color, SRectF bounds, float space, float height); void DrawTextureReflection(CTexture texture, SRectF rect, SColorF color, SRectF bounds, float space, float height);
} }
} }
+2 -1
View File
@@ -20,6 +20,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Draw;
namespace Vocaluxe.Lib.Video namespace Vocaluxe.Lib.Video
{ {
@@ -58,7 +59,7 @@ namespace Vocaluxe.Lib.Video
return 0f; return 0f;
} }
public abstract bool GetFrame(int streamID, ref STexture frame, float time, out float videoTime); public abstract bool GetFrame(int streamID, ref CTexture frame, float time, out float videoTime);
public virtual bool Skip(int streamID, float start, float gap) public virtual bool Skip(int streamID, float start, float gap)
{ {
+8 -12
View File
@@ -27,6 +27,8 @@ using Vocaluxe.Base;
using Vocaluxe.Lib.Video.Acinerella; using Vocaluxe.Lib.Video.Acinerella;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Draw;
namespace Vocaluxe.Lib.Video namespace Vocaluxe.Lib.Video
{ {
delegate void Closeproc(int streamID); delegate void Closeproc(int streamID);
@@ -90,7 +92,7 @@ namespace Vocaluxe.Lib.Video
return false; return false;
} }
public override bool GetFrame(int streamID, ref STexture frame, float time, out float videoTime) public override bool GetFrame(int streamID, ref CTexture frame, float time, out float videoTime)
{ {
videoTime = 0; videoTime = 0;
if (_Initialized) if (_Initialized)
@@ -299,7 +301,7 @@ namespace Vocaluxe.Lib.Video
return true; return true;
} }
public bool GetFrame(ref STexture frame, float time, out float videoTime) public bool GetFrame(ref CTexture frame, float time, out float videoTime)
{ {
videoTime = 0; videoTime = 0;
if (!_FileOpened) if (!_FileOpened)
@@ -323,7 +325,7 @@ namespace Vocaluxe.Lib.Video
_UploadNewFrame(ref frame); _UploadNewFrame(ref frame);
//EventDecode.Set(); //EventDecode.Set();
return true; return frame != null;
} }
if (Math.Abs(_SetTime - time) > float.Epsilon) if (Math.Abs(_SetTime - time) > float.Epsilon)
@@ -335,7 +337,7 @@ namespace Vocaluxe.Lib.Video
_UploadNewFrame(ref frame); _UploadNewFrame(ref frame);
videoTime = _CurrentVideoTime; videoTime = _CurrentVideoTime;
//EventDecode.Set(); //EventDecode.Set();
return true; return frame != null;
} }
return false; return false;
} }
@@ -650,7 +652,7 @@ namespace Vocaluxe.Lib.Video
} }
} }
private void _UploadNewFrame(ref STexture frame) private void _UploadNewFrame(ref CTexture frame)
{ {
if (!_FileOpened) if (!_FileOpened)
return; return;
@@ -661,13 +663,7 @@ namespace Vocaluxe.Lib.Video
if (num >= 0) if (num >= 0)
{ {
if (frame.Index == -1 || _Width != (int)frame.Width || _Height != (int)frame.Height) CDraw.UpdateOrAddTexture(ref frame, _Width, _Height, _FrameBuffer[num].Data);
{
CDraw.RemoveTexture(ref frame);
frame = CDraw.AddTexture(_Width, _Height, _FrameBuffer[num].Data);
}
else
CDraw.UpdateTexture(ref frame, _FrameBuffer[num].Data);
lock (_MutexSyncSignals) lock (_MutexSyncSignals)
{ {
+5 -10
View File
@@ -21,6 +21,7 @@ using System;
using Vocaluxe.Base; using Vocaluxe.Base;
using Vocaluxe.Lib.Video.Gstreamer; using Vocaluxe.Lib.Video.Gstreamer;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Draw;
namespace Vocaluxe.Lib.Video namespace Vocaluxe.Lib.Video
{ {
@@ -78,13 +79,13 @@ namespace Vocaluxe.Lib.Video
return CGstreamerVideoWrapper.GetVideoLength(streamID); return CGstreamerVideoWrapper.GetVideoLength(streamID);
} }
public bool GetFrame(int streamID, ref STexture frame, float time, out float videoTime) public bool GetFrame(int streamID, ref CTexture frame, float time, out float videoTime)
{ {
SManagedFrame managedFrame = CGstreamerVideoWrapper.GetFrame(streamID, time); SManagedFrame managedFrame = CGstreamerVideoWrapper.GetFrame(streamID, time);
videoTime = managedFrame.Videotime; videoTime = managedFrame.Videotime;
_UploadNewFrame(ref frame, ref managedFrame.Buffer, managedFrame.Width, managedFrame.Height); _UploadNewFrame(ref frame, ref managedFrame.Buffer, managedFrame.Width, managedFrame.Height);
return true; return frame != null;
} }
public bool Skip(int streamID, float start, float gap) public bool Skip(int streamID, float start, float gap)
@@ -117,17 +118,11 @@ namespace Vocaluxe.Lib.Video
CGstreamerVideoWrapper.UpdateVideo(); CGstreamerVideoWrapper.UpdateVideo();
} }
private void _UploadNewFrame(ref STexture frame, ref byte[] data, int width, int height) private void _UploadNewFrame(ref CTexture frame, ref byte[] data, int width, int height)
{ {
if (data == null) if (data == null)
return; return;
if (frame.Index == -1 || width != (int)frame.Width || height != (int)frame.Height || data.Length == 0) CDraw.UpdateOrAddTexture(ref frame, width, height, data);
{
CDraw.RemoveTexture(ref frame);
frame = CDraw.AddTexture(width, height, data);
}
else
CDraw.UpdateTexture(ref frame, data);
data = null; data = null;
} }
} }
+13 -1
View File
@@ -19,6 +19,8 @@
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Draw;
namespace Vocaluxe.Lib.Video namespace Vocaluxe.Lib.Video
{ {
struct SVideoStreams struct SVideoStreams
@@ -41,7 +43,17 @@ namespace Vocaluxe.Lib.Video
int GetNumStreams(); int GetNumStreams();
float GetLength(int streamID); float GetLength(int streamID);
bool GetFrame(int streamID, ref STexture frame, float time, out float videoTime);
/// <summary>
///
/// </summary>
/// <param name="streamID"></param>
/// <param name="frame"></param>
/// <param name="time"></param>
/// <param name="videoTime"></param>
/// <returns>True if frame is valid</returns>
bool GetFrame(int streamID, ref CTexture frame, float time, out float videoTime);
bool Skip(int streamID, float start, float gap); bool Skip(int streamID, float start, float gap);
void SetLoop(int streamID, bool loop); void SetLoop(int streamID, bool loop);
void Pause(int streamID); void Pause(int streamID);
+28 -38
View File
@@ -25,6 +25,7 @@ using System.Drawing.Imaging;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using Vocaluxe.Base; using Vocaluxe.Base;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Draw;
namespace Vocaluxe.Lib.Webcam namespace Vocaluxe.Lib.Webcam
{ {
@@ -41,29 +42,20 @@ namespace Vocaluxe.Lib.Webcam
public void Close() public void Close()
{ {
if (_Webcam != null) if (_Webcam == null)
{ return;
_Webcam.SignalToStop(); _Webcam.SignalToStop();
_Webcam.WaitForStop(); _Webcam.WaitForStop();
_Webcam.NewFrame -= _OnFrame; _Webcam.NewFrame -= _OnFrame;
_Data = new byte[1]; _Data = new byte[1];
}
} }
public bool GetFrame(ref STexture frame) public bool GetFrame(ref CTexture frame)
{ {
if (_Webcam != null && _Width > 0 && _Height > 0 && _Data.Length == _Width * _Height * 4) lock (_MutexData)
{ {
lock (_MutexData) if (_Webcam != null && _Width > 0 && _Height > 0 && _Data.Length == _Width * _Height * 4)
{ CDraw.UpdateOrAddTexture(ref frame, _Width, _Height, _Data);
if (frame.Index == -1 || _Width != (int)frame.Width || _Height != (int)frame.Height)
{
CDraw.RemoveTexture(ref frame);
frame = CDraw.AddTexture(_Width, _Height, _Data);
}
else
CDraw.UpdateTexture(ref frame, _Data);
}
} }
return false; return false;
} }
@@ -114,19 +106,18 @@ namespace Vocaluxe.Lib.Webcam
private void _OnFrame(object sender, NewFrameEventArgs e) private void _OnFrame(object sender, NewFrameEventArgs e)
{ {
if (!_Paused) if (_Paused)
return;
lock (_MutexData)
{ {
lock (_MutexData) if (_Width != e.Frame.Width || _Height != e.Frame.Height || _Data.Length != e.Frame.Width * e.Frame.Height * 4)
{ _Data = new byte[4 * e.Frame.Width * e.Frame.Height];
if (_Width != e.Frame.Width || _Height != e.Frame.Height || _Data.Length != e.Frame.Width * e.Frame.Height * 4)
_Data = new byte[4 * e.Frame.Width * e.Frame.Height];
_Width = e.Frame.Width; _Width = e.Frame.Width;
_Height = e.Frame.Height; _Height = e.Frame.Height;
BitmapData bitmapdata = e.Frame.LockBits(new Rectangle(0, 0, _Width, _Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); BitmapData bitmapdata = e.Frame.LockBits(new Rectangle(0, 0, _Width, _Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
Marshal.Copy(bitmapdata.Scan0, _Data, 0, _Data.Length); Marshal.Copy(bitmapdata.Scan0, _Data, 0, _Data.Length);
e.Frame.UnlockBits(bitmapdata); e.Frame.UnlockBits(bitmapdata);
}
} }
} }
@@ -138,14 +129,13 @@ namespace Vocaluxe.Lib.Webcam
public void Start() public void Start()
{ {
if (_Webcam != null) if (_Webcam == null)
{ return;
_Webcam.NewFrame -= _OnFrame; _Webcam.NewFrame -= _OnFrame;
//Subscribe to NewFrame event //Subscribe to NewFrame event
_Webcam.NewFrame += _OnFrame; _Webcam.NewFrame += _OnFrame;
_Webcam.Start(); _Webcam.Start();
_Paused = false; _Paused = false;
}
} }
public void Stop() public void Stop()
+4 -1
View File
@@ -21,6 +21,9 @@ using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using VocaluxeLib; using VocaluxeLib;
using System.Drawing;
using VocaluxeLib.Draw;
namespace Vocaluxe.Lib.Webcam namespace Vocaluxe.Lib.Webcam
{ {
struct SWebcamDevice struct SWebcamDevice
@@ -54,7 +57,7 @@ namespace Vocaluxe.Lib.Webcam
void Stop(); void Stop();
void Close(); void Close();
bool GetFrame(ref STexture frame); bool GetFrame(ref CTexture frame);
Bitmap GetBitmap(); Bitmap GetBitmap();
SWebcamConfig GetConfig(); SWebcamConfig GetConfig();
SWebcamDevice[] GetDevices(); SWebcamDevice[] GetDevices();
+1 -1
View File
@@ -240,7 +240,7 @@ namespace Vocaluxe
CController.Close(); CController.Close();
CSound.RecordCloseAll(); CSound.RecordCloseAll();
CSound.CloseAllStreams(); CSound.CloseAllStreams();
CVideo.VdCloseAll(); CVideo.CloseAll();
CDraw.Unload(); CDraw.Unload();
CDataBase.CloseConnections(); CDataBase.CloseConnections();
CWebcam.Close(); CWebcam.Close();
+20 -18
View File
@@ -24,6 +24,7 @@ using System.Windows.Forms;
using Vocaluxe.Base; using Vocaluxe.Base;
using Vocaluxe.Base.Fonts; using Vocaluxe.Base.Fonts;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu; using VocaluxeLib.Menu;
namespace Vocaluxe.Screens namespace Vocaluxe.Screens
@@ -51,8 +52,8 @@ namespace Vocaluxe.Screens
_Image = image; _Image = image;
_ImgDot = imgDot; _ImgDot = imgDot;
_Particle = particle; _Particle = particle;
_ParticleOffsetX = (int)Math.Round(particleOffsetX * image.Rect.W / image.Texture.Width - particle.Rect.W / 2); _ParticleOffsetX = (int)Math.Round(particleOffsetX * image.Rect.W / image.Texture.OrigSize.Width - particle.Rect.W / 2);
_ParticleOffsetY = (int)Math.Round(particleOffsetY * image.Rect.H / image.Texture.Height - particle.Rect.H / 2); _ParticleOffsetY = (int)Math.Round(particleOffsetY * image.Rect.H / image.Texture.OrigSize.Height - particle.Rect.H / 2);
Active = true; Active = true;
} }
@@ -127,21 +128,21 @@ namespace Vocaluxe.Screens
private List<string[]> _Paragraphs; private List<string[]> _Paragraphs;
private List<CText> _ParagraphTexts; private List<CText> _ParagraphTexts;
private STexture _TexLogo; private CTexture _TexLogo;
private STexture _TexPerfectNoteStar; private CTexture _TexPerfectNoteStar;
private STexture _TexRedDot; private CTexture _TexRedDot;
private STexture _TexBlueDot; private CTexture _TexBlueDot;
private STexture _TexNameBrunzel; private CTexture _TexNameBrunzel;
private STexture _TexNameDarkice; private CTexture _TexNameDarkice;
private STexture _TexNameFlokuep; private CTexture _TexNameFlokuep;
private STexture _TexNameFlamefire; private CTexture _TexNameFlamefire;
private STexture _TexNameMesand; private CTexture _TexNameMesand;
private STexture _TexNameBohning; private CTexture _TexNameBohning;
private STexture _TexNameBabene03; private CTexture _TexNameBabene03;
private STexture _TexNamePantero; private CTexture _TexNamePantero;
private STexture _TexNamePinky007; private CTexture _TexNamePinky007;
public override void Init() public override void Init()
{ {
@@ -283,12 +284,12 @@ namespace Vocaluxe.Screens
return GetNewParticleEffect(numStars, partColor, rect, _TexPerfectNoteStar, partSize, EParticleType.Star); return GetNewParticleEffect(numStars, partColor, rect, _TexPerfectNoteStar, partSize, EParticleType.Star);
} }
private void _AddNewCreditName(STexture texture, int particleOffsetX, int particleOffsetY, bool bigParticles) private void _AddNewCreditName(CTexture texture, int particleOffsetX, int particleOffsetY, bool bigParticles)
{ {
bool isRight = _CreditNames.Count % 2 == 0; bool isRight = _CreditNames.Count % 2 == 0;
int partRectSize = bigParticles ? 25 : 20; int partRectSize = bigParticles ? 25 : 20;
int partCount = bigParticles ? 8 : 6; int partCount = bigParticles ? 8 : 6;
STexture texDot = isRight ? _TexRedDot : _TexBlueDot; CTexture texDot = isRight ? _TexRedDot : _TexBlueDot;
CStatic image = GetNewStatic(texture, new SColorF(1, 1, 1, 1), new SRectF(-1, -1, 400, 120, -4)); CStatic image = GetNewStatic(texture, new SColorF(1, 1, 1, 1), new SRectF(-1, -1, 400, 120, -4));
@@ -318,7 +319,8 @@ namespace Vocaluxe.Screens
base.OnShow(); base.OnShow();
//Vocaluxe-Logo //Vocaluxe-Logo
_Logo = GetNewStatic(_TexLogo, new SColorF(1, 1, 1, 1), new SRectF((CSettings.RenderW - _TexLogo.Width) / 2, -270, _TexLogo.Width, _TexLogo.Height, -2)); _Logo = GetNewStatic(_TexLogo, new SColorF(1, 1, 1, 1),
new SRectF((float)(CSettings.RenderW - _TexLogo.OrigSize.Width) / 2, -270, _TexLogo.OrigSize.Width, _TexLogo.OrigSize.Height, -2));
//Little stars for logo //Little stars for logo
int numstars = (int)(_Logo.Rect.W * 0.25f / 2f); int numstars = (int)(_Logo.Rect.W * 0.25f / 2f);
+6 -5
View File
@@ -22,6 +22,7 @@ using System.Collections.Generic;
using System.Windows.Forms; using System.Windows.Forms;
using Vocaluxe.Base; using Vocaluxe.Base;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu; using VocaluxeLib.Menu;
using VocaluxeLib.Profile; using VocaluxeLib.Profile;
@@ -55,12 +56,12 @@ namespace Vocaluxe.Screens
{"EqualizerPlayer1", "EqualizerPlayer2", "EqualizerPlayer3", "EqualizerPlayer4", "EqualizerPlayer5", "EqualizerPlayer6"}; {"EqualizerPlayer1", "EqualizerPlayer2", "EqualizerPlayer3", "EqualizerPlayer4", "EqualizerPlayer5", "EqualizerPlayer6"};
private readonly string[] _SelectSlideDuetPlayer = new string[] private readonly string[] _SelectSlideDuetPlayer = new string[]
{"SelectSlideDuetPlayer1", "SelectSlideDuetPlayer2", "SelectSlideDuetPlayer3", "SelectSlideDuetPlayer4", "SelectSlideDuetPlayer5", "SelectSlideDuetPlayer6"}; {"SelectSlideDuetPlayer1", "SelectSlideDuetPlayer2", "SelectSlideDuetPlayer3", "SelectSlideDuetPlayer4", "SelectSlideDuetPlayer5", "SelectSlideDuetPlayer6"};
private readonly STexture[] _OriginalPlayerAvatarTextures = new STexture[CSettings.MaxNumPlayer]; private readonly CTexture[] _OriginalPlayerAvatarTextures = new CTexture[CSettings.MaxNumPlayer];
private bool _SelectingKeyboardActive; private bool _SelectingKeyboardActive;
private bool _SelectingFast; private bool _SelectingFast;
private int _SelectingSwitchNr = -1; private int _SelectingSwitchNr = -1;
private int _SelectingFastPlayerNr = 0; private int _SelectingFastPlayerNr;
private int _SelectedPlayerNr = -1; private int _SelectedPlayerNr = -1;
private bool _AvatarsChanged = false; private bool _AvatarsChanged = false;
private bool _ProfilesChanged = false; private bool _ProfilesChanged = false;
@@ -445,7 +446,7 @@ namespace Vocaluxe.Screens
CConfig.Players[_SelectingSwitchNr] = string.Empty; CConfig.Players[_SelectingSwitchNr] = string.Empty;
//Update texture and name //Update texture and name
_Statics[_StaticPlayerAvatar[_SelectingSwitchNr]].Texture = _OriginalPlayerAvatarTextures[_SelectingSwitchNr]; _Statics[_StaticPlayerAvatar[_SelectingSwitchNr]].Texture = _OriginalPlayerAvatarTextures[_SelectingSwitchNr];
_Texts[_TextPlayer[_SelectingSwitchNr]].Text = CProfiles.GetPlayerName(-1, (_SelectingSwitchNr+1)); _Texts[_TextPlayer[_SelectingSwitchNr]].Text = CProfiles.GetPlayerName(-1, (_SelectingSwitchNr + 1));
} }
CProfile[] profiles = CProfiles.GetProfiles(); CProfile[] profiles = CProfiles.GetProfiles();
@@ -467,7 +468,7 @@ namespace Vocaluxe.Screens
break; break;
} }
//Selected player is dropped out of area //Selected player is dropped out of area
else if (_SelectingSwitchNr > -1) if (_SelectingSwitchNr > -1)
{ {
//Update Game-infos with new player //Update Game-infos with new player
CGame.Players[_SelectingSwitchNr].ProfileID = -1; CGame.Players[_SelectingSwitchNr].ProfileID = -1;
@@ -598,7 +599,7 @@ namespace Vocaluxe.Screens
else else
stopSelectingFast = true; stopSelectingFast = true;
} }
else if(mouseEvent.MB) else if (mouseEvent.MB)
{ {
_ResetPlayerSelections(); _ResetPlayerSelections();
_SelectingFast = true; _SelectingFast = true;
+3 -1
View File
@@ -23,6 +23,8 @@ using Vocaluxe.Base;
using Vocaluxe.Lib.Webcam; using Vocaluxe.Lib.Webcam;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Menu; using VocaluxeLib.Menu;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu;
namespace Vocaluxe.Screens namespace Vocaluxe.Screens
{ {
@@ -46,7 +48,7 @@ namespace Vocaluxe.Screens
private const string _ButtonExit = "ButtonExit"; private const string _ButtonExit = "ButtonExit";
private SWebcamConfig _Config; private SWebcamConfig _Config;
private STexture _WebcamTexture = new STexture(-1); private CTexture _WebcamTexture;
private int _DeviceNr; private int _DeviceNr;
private int _CapabilityNr; private int _CapabilityNr;
+4 -2
View File
@@ -27,6 +27,8 @@ using Vocaluxe.Base;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Menu; using VocaluxeLib.Menu;
using VocaluxeLib.Profile; using VocaluxeLib.Profile;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu;
namespace Vocaluxe.Screens namespace Vocaluxe.Screens
{ {
@@ -65,7 +67,7 @@ namespace Vocaluxe.Screens
private EEditMode _EditMode; private EEditMode _EditMode;
private STexture _WebcamTexture = new STexture(-1); private CTexture _WebcamTexture;
private Bitmap _Snapshot; private Bitmap _Snapshot;
public override void Init() public override void Init()
@@ -223,7 +225,7 @@ namespace Vocaluxe.Screens
{ {
CProfiles.SetAvatar(_SelectSlides[_SelectSlideProfiles].ValueIndex, CProfiles.SetAvatar(_SelectSlides[_SelectSlideProfiles].ValueIndex,
_SelectSlides[_SelectSlideAvatars].ValueIndex); _SelectSlides[_SelectSlideAvatars].ValueIndex);
if (CWebcam.IsDeviceAvailable() && _WebcamTexture.Index > 0) if (CWebcam.IsDeviceAvailable() && _WebcamTexture != null)
_OnDiscardSnapshot(); _OnDiscardSnapshot();
} }
else if (_SelectSlides[_SelectSlideGuestProfile].Selected) else if (_SelectSlides[_SelectSlideGuestProfile].Selected)
+1 -1
View File
@@ -369,7 +369,7 @@ namespace Vocaluxe.Screens
_Statics[_StaticPointsBarBG[player, numplayer]].Visible = numplayer + 1 == CGame.NumPlayer; _Statics[_StaticPointsBarBG[player, numplayer]].Visible = numplayer + 1 == CGame.NumPlayer;
_Statics[_StaticAvatar[player, numplayer]].Visible = numplayer + 1 == CGame.NumPlayer; _Statics[_StaticAvatar[player, numplayer]].Visible = numplayer + 1 == CGame.NumPlayer;
_Statics[_StaticAvatar[player, numplayer]].Texture = new STexture(-1); _Statics[_StaticAvatar[player, numplayer]].Texture = null;
} }
} }
} }
+27 -32
View File
@@ -27,6 +27,7 @@ using System.Windows.Forms;
using Vocaluxe.Base; using Vocaluxe.Base;
using Vocaluxe.Base.Fonts; using Vocaluxe.Base.Fonts;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu; using VocaluxeLib.Menu;
using VocaluxeLib.Menu.SingNotes; using VocaluxeLib.Menu.SingNotes;
using VocaluxeLib.Menu.SongMenu; using VocaluxeLib.Menu.SongMenu;
@@ -101,9 +102,9 @@ namespace Vocaluxe.Screens
private const float _Volume = 100f; private const float _Volume = 100f;
private int _CurrentVideo = -1; private int _CurrentVideo = -1;
private EAspect _VideoAspect = EAspect.Crop; private EAspect _VideoAspect = EAspect.Crop;
private STexture _CurrentVideoTexture = new STexture(-1); private CTexture _CurrentVideoTexture;
private STexture _CurrentWebcamFrameTexture = new STexture(-1); private CTexture _CurrentWebcamFrameTexture;
private STexture _Background = new STexture(-1); private CTexture _Background;
private float _CurrentTime; private float _CurrentTime;
private float _FinishTime; private float _FinishTime;
@@ -400,7 +401,7 @@ namespace Vocaluxe.Screens
if (_CurrentVideo != -1 && !_FadeOut && CConfig.VideosInSongs == EOffOn.TR_CONFIG_ON) if (_CurrentVideo != -1 && !_FadeOut && CConfig.VideosInSongs == EOffOn.TR_CONFIG_ON)
{ {
float vtime; float vtime;
CVideo.VdGetFrame(_CurrentVideo, ref _CurrentVideoTexture, _CurrentTime, out vtime); CVideo.GetFrame(_CurrentVideo, ref _CurrentVideoTexture, _CurrentTime, out vtime);
} }
if (_Webcam) if (_Webcam)
@@ -416,8 +417,8 @@ namespace Vocaluxe.Screens
_FadeOut = false; _FadeOut = false;
_CurrentVideo = -1; _CurrentVideo = -1;
_CurrentVideoTexture = new STexture(-1); _CurrentVideoTexture = null;
_CurrentWebcamFrameTexture = new STexture(-1); _CurrentWebcamFrameTexture = null;
_CurrentBeat = -100; _CurrentBeat = -100;
_CurrentTime = 0f; _CurrentTime = 0f;
_FinishTime = 0f; _FinishTime = 0f;
@@ -458,33 +459,27 @@ namespace Vocaluxe.Screens
{ {
if (_Active) if (_Active)
{ {
CTexture background;
EAspect aspect = EAspect.Crop;
if (_CurrentVideo != -1 && CConfig.VideosInSongs == EOffOn.TR_CONFIG_ON && !_Webcam) if (_CurrentVideo != -1 && CConfig.VideosInSongs == EOffOn.TR_CONFIG_ON && !_Webcam)
{ {
RectangleF bounds = new RectangleF(0, 0, CSettings.RenderW, CSettings.RenderH); background = _CurrentVideoTexture;
RectangleF rect = new RectangleF(0f, 0f, _CurrentVideoTexture.Width, _CurrentVideoTexture.Height); aspect = _VideoAspect;
CHelper.SetRect(bounds, out rect, rect.Width / rect.Height, _VideoAspect);
CDraw.DrawTexture(_CurrentVideoTexture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, 0f),
_CurrentVideoTexture.Color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f), false);
} }
else if (_Webcam) else if (_Webcam)
{ {
RectangleF bounds = new RectangleF(0, 0, CSettings.RenderW, CSettings.RenderH); background = _CurrentWebcamFrameTexture;
RectangleF rect = new RectangleF(0f, 0f, _CurrentWebcamFrameTexture.Width, _CurrentWebcamFrameTexture.Height); aspect = _VideoAspect;
CHelper.SetRect(bounds, out rect, rect.Width / rect.Height, _VideoAspect);
CDraw.DrawTexture(_CurrentWebcamFrameTexture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, 0f),
_CurrentVideoTexture.Color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f), false);
} }
else else
background = _Background;
if (background != null)
{ {
// Draw Background
RectangleF bounds = new RectangleF(0, 0, CSettings.RenderW, CSettings.RenderH); RectangleF bounds = new RectangleF(0, 0, CSettings.RenderW, CSettings.RenderH);
RectangleF rect = new RectangleF(0f, 0f, _Background.Width, _Background.Height); RectangleF rect;
CHelper.SetRect(bounds, out rect, rect.Width / rect.Height, EAspect.Crop); CHelper.SetRect(bounds, out rect, background.OrigAspect, aspect);
CDraw.DrawTexture(background, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, 0f),
CDraw.DrawTexture(_Background, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, 0f), background.Color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f));
_Background.Color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f), false);
} }
} }
@@ -561,7 +556,7 @@ namespace Vocaluxe.Screens
CSound.RecordStop(); CSound.RecordStop();
if (_CurrentVideo != -1) if (_CurrentVideo != -1)
{ {
CVideo.VdClose(_CurrentVideo); CVideo.Close(_CurrentVideo);
_CurrentVideo = -1; _CurrentVideo = -1;
CDraw.RemoveTexture(ref _CurrentVideoTexture); CDraw.RemoveTexture(ref _CurrentVideoTexture);
} }
@@ -624,15 +619,15 @@ namespace Vocaluxe.Screens
CDraw.RemoveTexture(ref _CurrentVideoTexture); CDraw.RemoveTexture(ref _CurrentVideoTexture);
if (song.VideoFileName != "") if (!String.IsNullOrEmpty(song.VideoFileName))
{ {
_CurrentVideo = CVideo.VdLoad(Path.Combine(song.Folder, song.VideoFileName)); _CurrentVideo = CVideo.Load(Path.Combine(song.Folder, song.VideoFileName));
CVideo.VdSkip(_CurrentVideo, song.Start, song.VideoGap); CVideo.Skip(_CurrentVideo, song.Start, song.VideoGap);
_VideoAspect = song.VideoAspect; _VideoAspect = song.VideoAspect;
} }
CDraw.RemoveTexture(ref _Background); CDraw.RemoveTexture(ref _Background);
if (song.BackgroundFileName != "") if (!String.IsNullOrEmpty(song.BackgroundFileName))
_Background = CDraw.AddTexture(Path.Combine(song.Folder, song.BackgroundFileName)); _Background = CDraw.AddTexture(Path.Combine(song.Folder, song.BackgroundFileName));
_SingNotes[_SingBars].Reset(); _SingNotes[_SingBars].Reset();
@@ -705,8 +700,8 @@ namespace Vocaluxe.Screens
} }
else else
{ {
bool lyricsOnTop = CConfig.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_TOP bool lyricsOnTop = CConfig.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_TOP
|| CConfig.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_BOTH || CConfig.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_BOTH
|| (CConfig.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_DYNAMIC && _DynamicLyricsTop); || (CConfig.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_DYNAMIC && _DynamicLyricsTop);
_Lyrics[_LyricMainTop].Visible = lyricsOnTop; _Lyrics[_LyricMainTop].Visible = lyricsOnTop;
_Lyrics[_LyricSubTop].Visible = lyricsOnTop; _Lyrics[_LyricSubTop].Visible = lyricsOnTop;
@@ -1377,7 +1372,7 @@ namespace Vocaluxe.Screens
foreach (CLine line in voice.Lines.Where(line => line.VisibleInTimeLine)) foreach (CLine line in voice.Lines.Where(line => line.VisibleInTimeLine))
{ {
STimeRect trect = new STimeRect {StartBeat = line.FirstNoteBeat, EndBeat = line.EndBeat}; STimeRect trect = new STimeRect {StartBeat = line.FirstNoteBeat, EndBeat = line.EndBeat};
trect.Rect = GetNewStatic(new STexture(-1), trect.Rect = GetNewStatic(null,
new SColorF(1f, 1f, 1f, 1f), new SColorF(1f, 1f, 1f, 1f),
new SRectF( new SRectF(
stat.Rect.X + stat.Rect.W * ((CGame.GetTimeFromBeats(trect.StartBeat, song.BPM) + song.Gap - song.Start) / totalTime), stat.Rect.X + stat.Rect.W * ((CGame.GetTimeFromBeats(trect.StartBeat, song.BPM) + song.Gap - song.Start) / totalTime),
+6 -6
View File
@@ -42,17 +42,17 @@ namespace Vocaluxe.Screens
base.Init(); base.Init();
const string test = "Ö ÄÜabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPGRSTUVWGXZ1234567890"; const string test = "Ö ÄÜabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPGRSTUVWGXZ1234567890";
SColorF color = new SColorF(1, 0, 0, 1); SColorF color = new SColorF(1, 0, 0, 1);
CText text = new CText(10, 50, 1, 32, 0, EAlignment.Left, EStyle.Normal, "Normal", color, "jÄNormal Text" + test, -1, 26, 0); CText text = new CText(10, 50, 1, 32, 0, EAlignment.Left, EStyle.Normal, "Normal", color, "jÄNormal Text" + test, -1, 26, 1);
_AddText(text); _AddText(text);
text = new CText(10, 90, 1, 32, 0, EAlignment.Left, EStyle.Bold, "Normal", color, "jÄBold Text" + test, -1, 26, 0); text = new CText(10, 90, 1, 32, 0, EAlignment.Left, EStyle.Bold, "Normal", color, "jÄBold Text" + test, -1, 26, 1);
_AddText(text); _AddText(text);
text = new CText(10, 130, 1, 32, 0, EAlignment.Left, EStyle.Italic, "Normal", color, "jÄItalic Text" + test, -1, 26, 0); text = new CText(10, 130, 1, 32, 0, EAlignment.Left, EStyle.Italic, "Normal", color, "jÄItalic Text" + test, -1, 26, 1);
_AddText(text); _AddText(text);
text = new CText(10, 170, 1, 32, 0, EAlignment.Left, EStyle.Normal, "Outline", color, "jÄNormal Text" + test, -1, 50, 0); text = new CText(10, 170, 1, 32, 0, EAlignment.Left, EStyle.Normal, "Outline", color, "jÄNormal Text" + test, -1, 50, 1);
_AddText(text); _AddText(text);
text = new CText(10, 210, 1, 32, 0, EAlignment.Left, EStyle.Bold, "Outline", color, "jÄBold Text" + test, -1, 100, 0); text = new CText(10, 210, 1, 32, 0, EAlignment.Left, EStyle.Bold, "Outline", color, "jÄBold Text" + test, -1, 100, 1);
_AddText(text); _AddText(text);
text = new CText(10, 250, 1, 32, 0, EAlignment.Left, EStyle.Italic, "Outline", color, "jÄItalic Text" + test, -1, 150, 0); text = new CText(10, 250, 1, 32, 0, EAlignment.Left, EStyle.Italic, "Outline", color, "jÄItalic Text" + test, -1, 150, 1);
_AddText(text); _AddText(text);
} }
+1
View File
@@ -178,6 +178,7 @@
<Compile Include="Base\CBackgroundMusic.cs" /> <Compile Include="Base\CBackgroundMusic.cs" />
<Compile Include="Base\CConfig.cs" /> <Compile Include="Base\CConfig.cs" />
<Compile Include="Base\CCover.cs" /> <Compile Include="Base\CCover.cs" />
<Compile Include="Base\CCursor.cs" />
<Compile Include="Base\CDataBase.cs" /> <Compile Include="Base\CDataBase.cs" />
<Compile Include="Base\CDraw.cs" /> <Compile Include="Base\CDraw.cs" />
<Compile Include="Base\Fonts\CFont.cs" /> <Compile Include="Base\Fonts\CFont.cs" />
+18 -21
View File
@@ -91,9 +91,9 @@ namespace VocaluxeLib
public static void SetRect(RectangleF bounds, out RectangleF rect, float rectAspect, EAspect aspect) public static void SetRect(RectangleF bounds, out RectangleF rect, float rectAspect, EAspect aspect)
{ {
float rW = bounds.Right - bounds.Left; float boundsW = bounds.Width;
float rH = bounds.Bottom - bounds.Top; float boundsH = bounds.Height;
float rA = rW / rH; float boundsAspect = boundsW / boundsH;
float scaledWidth; float scaledWidth;
float scaledHeight; float scaledHeight;
@@ -101,42 +101,39 @@ namespace VocaluxeLib
switch (aspect) switch (aspect)
{ {
case EAspect.Crop: case EAspect.Crop:
if (rA >= rectAspect) if (boundsAspect >= rectAspect)
{ {
scaledWidth = rW; scaledWidth = boundsW;
scaledHeight = rH * rA / rectAspect; scaledHeight = boundsW / rectAspect;
} }
else else
{ {
scaledHeight = rH; scaledHeight = boundsH;
scaledWidth = rW * rectAspect / rA; scaledWidth = boundsH * rectAspect;
} }
break; break;
case EAspect.LetterBox: case EAspect.LetterBox:
if (rectAspect >= 1) if (boundsAspect <= rectAspect)
{ {
scaledWidth = rW; scaledWidth = boundsW;
scaledHeight = rH * rA / rectAspect; scaledHeight = boundsW / rectAspect;
} }
else else
{ {
scaledHeight = rH; scaledHeight = boundsH;
scaledWidth = rW * rectAspect / rA; scaledWidth = boundsH * rectAspect;
} }
break; break;
default: default:
scaledWidth = rW; scaledWidth = boundsW;
scaledHeight = rH; scaledHeight = boundsH;
break; break;
} }
float left = (rW - scaledWidth) / 2 + bounds.Left; float left = (boundsW - scaledWidth) / 2 + bounds.Left;
float rigth = left + scaledWidth; float upper = (boundsH - scaledHeight) / 2 + bounds.Top;
float upper = (rH - scaledHeight) / 2 + bounds.Top; rect = new RectangleF(left, upper, scaledWidth, scaledHeight);
float lower = upper + scaledHeight;
rect = new RectangleF(left, upper, rigth - left, lower - upper);
} }
public static List<string> ListFiles(string path, string cast, bool recursive = false, bool fullpath = false) public static List<string> ListFiles(string path, string cast, bool recursive = false, bool fullpath = false)
+133
View File
@@ -0,0 +1,133 @@
using System.Drawing;
using VocaluxeLib.Menu;
namespace VocaluxeLib.Draw
{
public class CTexture
{
public int ID = -1;
public int PBO;
//Only used by OpenGL (the texture "name" according to the specs)
public int Name = -1;
public string TexturePath = "";
/// <summary>
/// Original size (e.g. of bmp)
/// </summary>
public readonly Size OrigSize;
public float OrigAspect
{
get { return (float)OrigSize.Width / OrigSize.Height; }
}
/// <summary>
/// Current size when drawn
/// </summary>
public SRectF Rect;
public SColorF Color = new SColorF(1f, 1f, 1f, 1f);
private int _W2, _H2;
private readonly bool _UseFullTexture;
/// <summary>
/// Internal texture width (on device), a power of 2 if necessary
/// </summary>
public int W2
{
get { return _W2; }
set
{
_W2 = value;
if (_UseFullTexture)
WidthRatio = 1;
else
WidthRatio = (float)OrigSize.Width / _W2;
}
}
/// <summary>
/// Internal texture height (on device), a power of 2 if necessary
/// </summary>
public int H2
{
get { return _H2; }
set
{
_H2 = value;
if (_UseFullTexture)
HeightRatio = 1;
else
HeightRatio = (float)OrigSize.Height / _H2;
}
}
/// <summary>
/// Internal use. Specifies which part of texture memory is actually used
/// </summary>
public float WidthRatio { get; private set; }
/// <summary>
/// Internal use. Specifies which part of texture memory is actually used
/// </summary>
public float HeightRatio { get; private set; }
/// <summary>
/// Actual texture space used in x direction
/// </summary>
public int UsedWidth
{
get { return (int)(_W2 * WidthRatio); }
}
/// <summary>
/// Actual texture space used in y direction
/// </summary>
public int UsedHeight
{
get { return (int)(_H2 * HeightRatio); }
}
/*
/// <summary>
/// Internal use. Specifies if full texture memory should be used
/// Set to true if you resized the original image to the maximum
/// </summary>
public bool UseFullTexture
{
get { return _UseFullTexture; }
set
{
_UseFullTexture = value;
if (value)
{
WidthRatio = 1;
HeightRatio = 1;
}
else
{
WidthRatio = (float)OrigSize.Width / _W2;
HeightRatio = (float)OrigSize.Height / _H2;
}
}
}
*/
/// <summary>
/// Creates a new texture reference
/// </summary>
/// <param name="origWidth">Original width (Bitmap size)</param>
/// <param name="origHeight">Original height (Bitmap size)</param>
/// <param name="texWidth">Width in video memory</param>
/// <param name="texHeight">Height in video memory</param>
/// <param name="useFullTexture">True if it is using the full size of the video memory (no blank parts due to Pow-2-Issue)</param>
public CTexture(int origWidth, int origHeight, int texWidth = 0, int texHeight = 0, bool useFullTexture = false)
{
OrigSize = new Size(origWidth, origHeight);
Rect = new SRectF(0f, 0f, origWidth, origHeight, 0f);
_UseFullTexture = useFullTexture;
//IMPORTANT: Use setter here to calculate ratios!
W2 = (texWidth > 0) ? texWidth : origWidth;
H2 = (texHeight > 0) ? texHeight : origHeight;
}
}
}
+18 -17
View File
@@ -20,6 +20,7 @@
using System; using System;
using System.Drawing; using System.Drawing;
using System.Xml; using System.Xml;
using VocaluxeLib.Draw;
namespace VocaluxeLib.Menu namespace VocaluxeLib.Menu
{ {
@@ -118,7 +119,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<Color>: Background color for type \"Color\" from ColorScheme (high priority)"); writer.WriteComment("<Color>: Background color for type \"Color\" from ColorScheme (high priority)");
writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)"); writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)");
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
writer.WriteElementString("Color", _Theme.ColorName); writer.WriteElementString("Color", _Theme.ColorName);
else else
{ {
@@ -139,13 +140,13 @@ namespace VocaluxeLib.Menu
public void Resume() public void Resume()
{ {
if (_Theme.Type == EBackgroundTypes.Video && _Theme.VideoName != "" && CBase.Config.GetVideoBackgrounds() == EOffOn.TR_CONFIG_ON) if (_Theme.Type == EBackgroundTypes.Video && !String.IsNullOrEmpty(_Theme.VideoName) && CBase.Config.GetVideoBackgrounds() == EOffOn.TR_CONFIG_ON)
CBase.Theme.SkinVideoResume(_Theme.VideoName, _PartyModeID); CBase.Theme.SkinVideoResume(_Theme.VideoName, _PartyModeID);
} }
public void Pause() public void Pause()
{ {
if (_Theme.VideoName != "") if (!String.IsNullOrEmpty(_Theme.VideoName))
CBase.Theme.SkinVideoPause(_Theme.VideoName, _PartyModeID); CBase.Theme.SkinVideoPause(_Theme.VideoName, _PartyModeID);
} }
@@ -165,7 +166,7 @@ namespace VocaluxeLib.Menu
ok = _DrawVideo(); ok = _DrawVideo();
} }
if (_Theme.TextureName != "" && if (!String.IsNullOrEmpty(_Theme.TextureName) &&
(_Theme.Type == EBackgroundTypes.Texture || (_Theme.Type == EBackgroundTypes.Texture ||
(_Theme.Type == EBackgroundTypes.Video && (CBase.Config.GetVideoBackgrounds() == EOffOn.TR_CONFIG_OFF || !ok)))) (_Theme.Type == EBackgroundTypes.Video && (CBase.Config.GetVideoBackgrounds() == EOffOn.TR_CONFIG_OFF || !ok))))
ok = _DrawTexture(); ok = _DrawTexture();
@@ -181,7 +182,7 @@ namespace VocaluxeLib.Menu
public void LoadTextures() public void LoadTextures()
{ {
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID);
} }
@@ -202,12 +203,12 @@ namespace VocaluxeLib.Menu
private bool _DrawTexture() private bool _DrawTexture()
{ {
STexture texture = CBase.Theme.GetSkinTexture(_Theme.TextureName, _PartyModeID); CTexture texture = CBase.Theme.GetSkinTexture(_Theme.TextureName, _PartyModeID);
if (texture.Height > 0) if (texture != null)
{ {
RectangleF bounds = new RectangleF(0f, 0f, CBase.Settings.GetRenderW(), CBase.Settings.GetRenderH()); RectangleF bounds = new RectangleF(0f, 0f, CBase.Settings.GetRenderW(), CBase.Settings.GetRenderH());
RectangleF rect = new RectangleF(0f, 0f, texture.Width, texture.Height); RectangleF rect;
CHelper.SetRect(bounds, out rect, rect.Width / rect.Height, EAspect.Crop); CHelper.SetRect(bounds, out rect, texture.OrigAspect, EAspect.Crop);
CBase.Drawing.DrawTexture(texture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, CBase.Settings.GetZFar() / 4)); CBase.Drawing.DrawTexture(texture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, CBase.Settings.GetZFar() / 4));
return true; return true;
@@ -217,12 +218,12 @@ namespace VocaluxeLib.Menu
private bool _DrawVideo() private bool _DrawVideo()
{ {
STexture videoTexture = CBase.Theme.GetSkinVideoTexture(_Theme.VideoName, _PartyModeID); CTexture videoTexture = CBase.Theme.GetSkinVideoTexture(_Theme.VideoName, _PartyModeID);
if (videoTexture.Height > 0) if (videoTexture != null)
{ {
RectangleF bounds = new RectangleF(0f, 0f, CBase.Settings.GetRenderW(), CBase.Settings.GetRenderH()); RectangleF bounds = new RectangleF(0f, 0f, CBase.Settings.GetRenderW(), CBase.Settings.GetRenderH());
RectangleF rect = new RectangleF(0f, 0f, videoTexture.Width, videoTexture.Height); RectangleF rect;
CHelper.SetRect(bounds, out rect, rect.Width / rect.Height, EAspect.Crop); CHelper.SetRect(bounds, out rect, videoTexture.OrigAspect, EAspect.Crop);
CBase.Drawing.DrawTexture(videoTexture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, CBase.Settings.GetZFar() / 4)); CBase.Drawing.DrawTexture(videoTexture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, CBase.Settings.GetZFar() / 4));
return true; return true;
@@ -232,12 +233,12 @@ namespace VocaluxeLib.Menu
private bool _DrawBackgroundMusicVideo() private bool _DrawBackgroundMusicVideo()
{ {
STexture videoTexture = CBase.BackgroundMusic.GetVideoTexture(); CTexture videoTexture = CBase.BackgroundMusic.GetVideoTexture();
if (videoTexture.Height > 0) if (videoTexture != null)
{ {
RectangleF bounds = new RectangleF(0f, 0f, CBase.Settings.GetRenderW(), CBase.Settings.GetRenderH()); RectangleF bounds = new RectangleF(0f, 0f, CBase.Settings.GetRenderW(), CBase.Settings.GetRenderH());
RectangleF rect = new RectangleF(0f, 0f, videoTexture.Width, videoTexture.Height); RectangleF rect;
CHelper.SetRect(bounds, out rect, rect.Width / rect.Height, EAspect.Crop); CHelper.SetRect(bounds, out rect, videoTexture.OrigAspect, EAspect.Crop);
CBase.Drawing.DrawTexture(videoTexture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, CBase.Settings.GetZFar() / 4)); CBase.Drawing.DrawTexture(videoTexture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, CBase.Settings.GetZFar() / 4));
return true; return true;
+13 -33
View File
@@ -19,6 +19,7 @@
using System; using System;
using System.Xml; using System.Xml;
using VocaluxeLib.Draw;
namespace VocaluxeLib.Menu namespace VocaluxeLib.Menu
{ {
@@ -39,8 +40,8 @@ namespace VocaluxeLib.Menu
private bool _ThemeLoaded; private bool _ThemeLoaded;
private readonly int _PartyModeID; private readonly int _PartyModeID;
public STexture Texture; public CTexture Texture;
public STexture SelTexture; public CTexture SelTexture;
public SRectF Rect; public SRectF Rect;
public SColorF Color; public SColorF Color;
public SColorF SelColor; public SColorF SelColor;
@@ -79,8 +80,8 @@ namespace VocaluxeLib.Menu
Text.Selected = value; Text.Selected = value;
} }
} }
public bool Visible; public bool Visible = true;
public bool Enabled; public bool Enabled = true;
public string GetThemeName() public string GetThemeName()
{ {
@@ -90,28 +91,10 @@ namespace VocaluxeLib.Menu
public CButton(int partyModeID) public CButton(int partyModeID)
{ {
_PartyModeID = partyModeID; _PartyModeID = partyModeID;
_Theme = new SThemeButton();
Rect = new SRectF();
Color = new SColorF();
SelColor = new SColorF();
Texture = new STexture(-1);
SelTexture = new STexture(-1);
_IsSelText = false;
Text = new CText(_PartyModeID); Text = new CText(_PartyModeID);
_SelText = new CText(_PartyModeID); _SelText = new CText(_PartyModeID);
Selected = false; Selected = false;
Visible = true;
EditMode = false; EditMode = false;
Enabled = true;
_Reflection = false;
_ReflectionSpace = 0f;
_ReflectionHeight = 0f;
_SelReflection = false;
_SelReflectionSpace = 0f;
_SelReflectionHeight = 0f;
} }
public CButton(CButton button) public CButton(CButton button)
@@ -131,13 +114,10 @@ namespace VocaluxeLib.Menu
Texture = button.Texture; Texture = button.Texture;
SelTexture = button.SelTexture; SelTexture = button.SelTexture;
_IsSelText = false;
Text = new CText(button.Text); Text = new CText(button.Text);
_SelText = new CText(button._SelText); _SelText = new CText(button._SelText);
Selected = false; Selected = false;
Visible = true;
EditMode = false; EditMode = false;
_ThemeLoaded = false;
Enabled = button.Enabled; Enabled = button.Enabled;
_Reflection = button._Reflection; _Reflection = button._Reflection;
@@ -241,7 +221,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<Color>: Button color from ColorScheme (high priority)"); writer.WriteComment("<Color>: Button color from ColorScheme (high priority)");
writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)"); writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)");
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
writer.WriteElementString("Color", _Theme.ColorName); writer.WriteElementString("Color", _Theme.ColorName);
else else
{ {
@@ -253,7 +233,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<SColor>: Selected button color from ColorScheme (high priority)"); writer.WriteComment("<SColor>: Selected button color from ColorScheme (high priority)");
writer.WriteComment("or <SR>, <SG>, <SB>, <SA> (lower priority)"); writer.WriteComment("or <SR>, <SG>, <SB>, <SA> (lower priority)");
if (_Theme.SelColorName != "") if (!String.IsNullOrEmpty(_Theme.SelColorName))
writer.WriteElementString("SColor", _Theme.SelColorName); writer.WriteElementString("SColor", _Theme.SelColorName);
else else
{ {
@@ -301,11 +281,11 @@ namespace VocaluxeLib.Menu
if (!Visible && CBase.Settings.GetGameState() != EGameState.EditTheme && !forceDraw) if (!Visible && CBase.Settings.GetGameState() != EGameState.EditTheme && !forceDraw)
return; return;
STexture texture; CTexture texture;
if (!Selected && !Pressed || !Enabled) if (!Selected && !Pressed || !Enabled)
{ {
texture = Texture.Index != -1 ? Texture : CBase.Theme.GetSkinTexture(_Theme.TextureName, _PartyModeID); texture = Texture ?? CBase.Theme.GetSkinTexture(_Theme.TextureName, _PartyModeID);
CBase.Drawing.DrawTexture(texture, Rect, Color); CBase.Drawing.DrawTexture(texture, Rect, Color);
@@ -319,7 +299,7 @@ namespace VocaluxeLib.Menu
} }
else if (!_IsSelText) else if (!_IsSelText)
{ {
texture = Texture.Index != -1 ? Texture : CBase.Theme.GetSkinTexture(_Theme.SelTextureName, _PartyModeID); texture = Texture ?? CBase.Theme.GetSkinTexture(_Theme.SelTextureName, _PartyModeID);
CBase.Drawing.DrawTexture(texture, Rect, SelColor); CBase.Drawing.DrawTexture(texture, Rect, SelColor);
@@ -333,7 +313,7 @@ namespace VocaluxeLib.Menu
} }
else if (_IsSelText) else if (_IsSelText)
{ {
texture = SelTexture.Index != -1 ? SelTexture : CBase.Theme.GetSkinTexture(_Theme.SelTextureName, _PartyModeID); texture = SelTexture ?? CBase.Theme.GetSkinTexture(_Theme.SelTextureName, _PartyModeID);
CBase.Drawing.DrawTexture(texture, Rect, SelColor); CBase.Drawing.DrawTexture(texture, Rect, SelColor);
@@ -361,10 +341,10 @@ namespace VocaluxeLib.Menu
{ {
Text.LoadTextures(); Text.LoadTextures();
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID);
if (_Theme.SelColorName != "") if (!String.IsNullOrEmpty(_Theme.SelColorName))
SelColor = CBase.Theme.GetColor(_Theme.SelColorName, _PartyModeID); SelColor = CBase.Theme.GetColor(_Theme.SelColorName, _PartyModeID);
} }
+4 -4
View File
@@ -175,7 +175,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<Color>: Equalizer color from ColorScheme (high priority)"); writer.WriteComment("<Color>: Equalizer color from ColorScheme (high priority)");
writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)"); writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)");
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
writer.WriteElementString("Color", _Theme.ColorName); writer.WriteElementString("Color", _Theme.ColorName);
else else
{ {
@@ -186,7 +186,7 @@ namespace VocaluxeLib.Menu
} }
writer.WriteComment("<MaxColor>: Equalizer color for maximal volume from ColorScheme (high priority)"); writer.WriteComment("<MaxColor>: Equalizer color for maximal volume from ColorScheme (high priority)");
writer.WriteComment("or <MaxR>, <MaxG>, <MaxB>, <MaxA> (lower priority)"); writer.WriteComment("or <MaxR>, <MaxG>, <MaxB>, <MaxA> (lower priority)");
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
writer.WriteElementString("MaxColor", _Theme.ColorName); writer.WriteElementString("MaxColor", _Theme.ColorName);
else else
{ {
@@ -274,10 +274,10 @@ namespace VocaluxeLib.Menu
public void LoadTextures() public void LoadTextures()
{ {
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID);
if (_Theme.MaxColorName != "") if (!String.IsNullOrEmpty(_Theme.MaxColorName))
MaxColor = CBase.Theme.GetColor(_Theme.MaxColorName, _PartyModeID); MaxColor = CBase.Theme.GetColor(_Theme.MaxColorName, _PartyModeID);
} }
+4 -4
View File
@@ -172,7 +172,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<Color>: Lyric text color from ColorScheme (high priority)"); writer.WriteComment("<Color>: Lyric text color from ColorScheme (high priority)");
writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)"); writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)");
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
writer.WriteElementString("Color", _Theme.ColorName); writer.WriteElementString("Color", _Theme.ColorName);
else else
{ {
@@ -184,7 +184,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<SColor>: Highlighted lyric color from ColorScheme (high priority)"); writer.WriteComment("<SColor>: Highlighted lyric color from ColorScheme (high priority)");
writer.WriteComment("or <SR>, <SG>, <SB>, <SA> (lower priority)"); writer.WriteComment("or <SR>, <SG>, <SB>, <SA> (lower priority)");
if (_Theme.SelColorName != "") if (!String.IsNullOrEmpty(_Theme.SelColorName))
writer.WriteElementString("SColor", _Theme.SelColorName); writer.WriteElementString("SColor", _Theme.SelColorName);
else else
{ {
@@ -521,10 +521,10 @@ namespace VocaluxeLib.Menu
public void LoadTextures() public void LoadTextures()
{ {
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
_Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); _Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID);
if (_Theme.SelColorName != "") if (!String.IsNullOrEmpty(_Theme.SelColorName))
_ColorProcessed = CBase.Theme.GetColor(_Theme.SelColorName, _PartyModeID); _ColorProcessed = CBase.Theme.GetColor(_Theme.SelColorName, _PartyModeID);
} }
+3 -2
View File
@@ -24,6 +24,7 @@ using System.IO;
using System.Text; using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using System.Xml; using System.Xml;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu.SingNotes; using VocaluxeLib.Menu.SingNotes;
using VocaluxeLib.Menu.SongMenu; using VocaluxeLib.Menu.SongMenu;
@@ -478,7 +479,7 @@ namespace VocaluxeLib.Menu
return new CStatic(oldStatic); return new CStatic(oldStatic);
} }
public CStatic GetNewStatic(STexture texture, SColorF color, SRectF rect) public CStatic GetNewStatic(CTexture texture, SColorF color, SRectF rect)
{ {
return new CStatic(_PartyModeID, texture, color, rect); return new CStatic(_PartyModeID, texture, color, rect);
} }
@@ -523,7 +524,7 @@ namespace VocaluxeLib.Menu
return new CPlaylist(_PartyModeID); return new CPlaylist(_PartyModeID);
} }
public CParticleEffect GetNewParticleEffect(int maxNumber, SColorF color, SRectF area, STexture texture, float size, EParticleType type) public CParticleEffect GetNewParticleEffect(int maxNumber, SColorF color, SRectF area, CTexture texture, float size, EParticleType type)
{ {
return new CParticleEffect(_PartyModeID, maxNumber, color, area, texture, size, type); return new CParticleEffect(_PartyModeID, maxNumber, color, area, texture, size, type);
} }
+8 -7
View File
@@ -21,6 +21,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Windows.Forms; using System.Windows.Forms;
using System.Xml; using System.Xml;
using VocaluxeLib.Draw;
using VocaluxeLib.Profile; using VocaluxeLib.Profile;
@@ -71,8 +72,8 @@ namespace VocaluxeLib.Menu
public SRectF Rect; public SRectF Rect;
private readonly List<CTile> _Tiles; private readonly List<CTile> _Tiles;
private STexture _TextureEmptyTile; private CTexture _TextureEmptyTile;
private STexture _TextureTileSelected; private CTexture _TextureTileSelected;
public SColorF ColorEmptyTile; public SColorF ColorEmptyTile;
@@ -194,7 +195,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<ColorEmptyTile>: Static color from ColorScheme (high priority)"); writer.WriteComment("<ColorEmptyTile>: Static color from ColorScheme (high priority)");
writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)"); writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)");
if (_Theme.ColorEmptyTileName != "") if (!String.IsNullOrEmpty(_Theme.ColorEmptyTileName))
writer.WriteElementString("ColorEmptyTile", _Theme.ColorEmptyTileName); writer.WriteElementString("ColorEmptyTile", _Theme.ColorEmptyTileName);
else else
{ {
@@ -225,7 +226,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<Font>: Text font name"); writer.WriteComment("<Font>: Text font name");
writer.WriteElementString("Font", _Theme.NameFont); writer.WriteElementString("Font", _Theme.NameFont);
writer.WriteComment("<Color>: Text color from ColorScheme (high priority)"); writer.WriteComment("<Color>: Text color from ColorScheme (high priority)");
if (_Theme.NameColorName != "") if (!String.IsNullOrEmpty(_Theme.NameColorName))
writer.WriteElementString("Color", _Theme.NameColorName); writer.WriteElementString("Color", _Theme.NameColorName);
else else
{ {
@@ -350,7 +351,7 @@ namespace VocaluxeLib.Menu
public void HandleMouse(SMouseEvent mevent) public void HandleMouse(SMouseEvent mevent)
{ {
for (int i = 0; i < _Tiles.Count; i++ ) for (int i = 0; i < _Tiles.Count; i++)
{ {
if (CHelper.IsInBounds(_Tiles[i].Avatar.Rect, mevent)) if (CHelper.IsInBounds(_Tiles[i].Avatar.Rect, mevent))
{ {
@@ -465,10 +466,10 @@ namespace VocaluxeLib.Menu
_TextureEmptyTile = CBase.Theme.GetSkinTexture(_Theme.TextureEmptyTileName, _PartyModeID); _TextureEmptyTile = CBase.Theme.GetSkinTexture(_Theme.TextureEmptyTileName, _PartyModeID);
_TextureTileSelected = CBase.Theme.GetSkinTexture(_Theme.TextureTileSelectedName, _PartyModeID); _TextureTileSelected = CBase.Theme.GetSkinTexture(_Theme.TextureTileSelectedName, _PartyModeID);
if (_Theme.ColorEmptyTileName != "") if (!String.IsNullOrEmpty(_Theme.ColorEmptyTileName))
ColorEmptyTile = CBase.Theme.GetColor(_Theme.ColorEmptyTileName, _PartyModeID); ColorEmptyTile = CBase.Theme.GetColor(_Theme.ColorEmptyTileName, _PartyModeID);
if (_Theme.NameColorName != "") if (!String.IsNullOrEmpty(_Theme.NameColorName))
_Theme.NameColor = CBase.Theme.GetColor(_Theme.NameColorName, _PartyModeID); _Theme.NameColor = CBase.Theme.GetColor(_Theme.NameColorName, _PartyModeID);
} }
+13 -24
View File
@@ -21,6 +21,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Xml; using System.Xml;
using VocaluxeLib.Draw;
namespace VocaluxeLib.Menu namespace VocaluxeLib.Menu
{ {
@@ -45,11 +46,11 @@ namespace VocaluxeLib.Menu
#region private vars #region private vars
private readonly int _PartyModeID; private readonly int _PartyModeID;
private readonly string _TextureName; private readonly string _TextureName;
private readonly STexture _Texture; private readonly CTexture _Texture;
private SRectF _Rect; private SRectF _Rect;
private float _Size; private float _Size;
private SColorF _Color; private SColorF _Color;
private float _Alpha; private float _Alpha = 1;
private float _Angle; //0..360° private float _Angle; //0..360°
private readonly float _MaxAge; //[s] private readonly float _MaxAge; //[s]
private float _Age; //[s] private float _Age; //[s]
@@ -61,7 +62,7 @@ namespace VocaluxeLib.Menu
private float _LastTime; private float _LastTime;
private readonly EParticleType _Type; private readonly EParticleType _Type;
private readonly Stopwatch _Timer; private readonly Stopwatch _Timer = new Stopwatch();
#endregion private vars #endregion private vars
#region public vars #region public vars
@@ -115,26 +116,20 @@ namespace VocaluxeLib.Menu
{ {
_PartyModeID = partyModeID; _PartyModeID = partyModeID;
_TextureName = textureName; _TextureName = textureName;
_Texture = new STexture(-1);
_Color = color; _Color = color;
_Rect = new SRectF(x, y, size, size, z); _Rect = new SRectF(x, y, size, size, z);
_Size = size; _Size = size;
_Alpha = 1f;
_Angle = 0f;
_Vx = vx; _Vx = vx;
_Vy = vy; _Vy = vy;
_Vr = vr; _Vr = vr;
_Vsize = vsize; _Vsize = vsize;
_LastTime = 0f;
_Type = type; _Type = type;
_Timer = new Stopwatch();
_Age = 0f;
_MaxAge = maxage; _MaxAge = maxage;
_Rotation = (float)(CBase.Game.GetRandomDouble() * 360.0); _Rotation = (float)(CBase.Game.GetRandomDouble() * 360.0);
} }
public CParticle(int partyModeID, STexture texture, SColorF color, float x, float y, float size, float maxage, float z, float vx, float vy, float vr, float vsize, public CParticle(int partyModeID, CTexture texture, SColorF color, float x, float y, float size, float maxage, float z, float vx, float vy, float vr, float vsize,
EParticleType type) EParticleType type)
{ {
_PartyModeID = partyModeID; _PartyModeID = partyModeID;
@@ -143,17 +138,12 @@ namespace VocaluxeLib.Menu
_Color = color; _Color = color;
_Rect = new SRectF(x, y, size, size, z); _Rect = new SRectF(x, y, size, size, z);
_Size = size; _Size = size;
_Alpha = 1f;
_Angle = 0f;
_Vx = vx; _Vx = vx;
_Vy = vy; _Vy = vy;
_Vr = vr; _Vr = vr;
_Vsize = vsize; _Vsize = vsize;
_LastTime = 0f;
_Type = type; _Type = type;
_Timer = new Stopwatch();
_Age = 0f;
_MaxAge = maxage; _MaxAge = maxage;
_Rotation = (float)(CBase.Game.GetRandomDouble() * 360.0); _Rotation = (float)(CBase.Game.GetRandomDouble() * 360.0);
} }
@@ -298,7 +288,7 @@ namespace VocaluxeLib.Menu
public void Draw() public void Draw()
{ {
// ReSharper disable ConvertIfStatementToConditionalTernaryExpression // ReSharper disable ConvertIfStatementToConditionalTernaryExpression
if (_TextureName != "") if (!String.IsNullOrEmpty(_TextureName))
// ReSharper restore ConvertIfStatementToConditionalTernaryExpression // ReSharper restore ConvertIfStatementToConditionalTernaryExpression
CBase.Drawing.DrawTexture(CBase.Theme.GetSkinTexture(_TextureName, _PartyModeID), _Rect, new SColorF(_Color.R, _Color.G, _Color.B, _Color.A * Alpha2 * _Alpha)); CBase.Drawing.DrawTexture(CBase.Theme.GetSkinTexture(_TextureName, _PartyModeID), _Rect, new SColorF(_Color.R, _Color.G, _Color.B, _Color.A * Alpha2 * _Alpha));
else else
@@ -312,7 +302,7 @@ namespace VocaluxeLib.Menu
private SThemeParticleEffect _Theme; private SThemeParticleEffect _Theme;
private bool _ThemeLoaded; private bool _ThemeLoaded;
public STexture Texture; public CTexture Texture;
public SColorF Color; public SColorF Color;
public SRectF Rect; public SRectF Rect;
@@ -356,7 +346,6 @@ namespace VocaluxeLib.Menu
Rect = rect; Rect = rect;
Color = color; Color = color;
_Theme.TextureName = textureName; _Theme.TextureName = textureName;
Texture = new STexture(-1);
_MaxNumber = maxNumber; _MaxNumber = maxNumber;
_Size = size; _Size = size;
_Type = type; _Type = type;
@@ -365,7 +354,7 @@ namespace VocaluxeLib.Menu
Visible = true; Visible = true;
} }
public CParticleEffect(int partyModeID, int maxNumber, SColorF color, SRectF rect, STexture texture, float size, EParticleType type) public CParticleEffect(int partyModeID, int maxNumber, SColorF color, SRectF rect, CTexture texture, float size, EParticleType type)
{ {
_PartyModeID = partyModeID; _PartyModeID = partyModeID;
_Theme = new SThemeParticleEffect(); _Theme = new SThemeParticleEffect();
@@ -435,7 +424,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<Color>: ParticleEffect color from ColorScheme (high priority)"); writer.WriteComment("<Color>: ParticleEffect color from ColorScheme (high priority)");
writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)"); writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)");
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
writer.WriteElementString("Color", _Theme.ColorName); writer.WriteElementString("Color", _Theme.ColorName);
else else
{ {
@@ -546,7 +535,7 @@ namespace VocaluxeLib.Menu
h = 0; h = 0;
CParticle star; CParticle star;
if (_Theme.TextureName != "") if (!String.IsNullOrEmpty(_Theme.TextureName))
{ {
star = new CParticle(_PartyModeID, _Theme.TextureName, Color, star = new CParticle(_PartyModeID, _Theme.TextureName, Color,
CBase.Game.GetRandom(w) + Rect.X - size / 4f, CBase.Game.GetRandom(w) + Rect.X - size / 4f,
@@ -602,14 +591,14 @@ namespace VocaluxeLib.Menu
public void UnloadTextures() public void UnloadTextures()
{ {
Texture = new STexture(); Texture = null;
} }
public void LoadTextures() public void LoadTextures()
{ {
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID);
if (_Theme.TextureName != "") if (!String.IsNullOrEmpty(_Theme.TextureName))
Texture = CBase.Theme.GetSkinTexture(_Theme.TextureName, _PartyModeID); Texture = CBase.Theme.GetSkinTexture(_Theme.TextureName, _PartyModeID);
} }
+5 -5
View File
@@ -373,7 +373,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<ColorBackground>: Button color from ColorScheme (high priority)"); writer.WriteComment("<ColorBackground>: Button color from ColorScheme (high priority)");
writer.WriteComment("or <BackgroundR>, <BackgroundG>, <BackgroundB>, <BackgroundA> (lower priority)"); writer.WriteComment("or <BackgroundR>, <BackgroundG>, <BackgroundB>, <BackgroundA> (lower priority)");
if (_Theme.ColorBackgroundName != "") if (!String.IsNullOrEmpty(_Theme.ColorBackgroundName))
writer.WriteElementString("ColorBackground", _Theme.ColorBackgroundName); writer.WriteElementString("ColorBackground", _Theme.ColorBackgroundName);
else else
{ {
@@ -385,7 +385,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<SColorBackground>: Selected paylist-entry color from ColorScheme (high priority)"); writer.WriteComment("<SColorBackground>: Selected paylist-entry color from ColorScheme (high priority)");
writer.WriteComment("or <SBackgroundR>, <SBackgroundG>, <SBackgroundB>, <SBackgroundA> (lower priority)"); writer.WriteComment("or <SBackgroundR>, <SBackgroundG>, <SBackgroundB>, <SBackgroundA> (lower priority)");
if (_Theme.SelColorBackgroundName != "") if (!String.IsNullOrEmpty(_Theme.SelColorBackgroundName))
writer.WriteElementString("SColorBackground", _Theme.SelColorBackgroundName); writer.WriteElementString("SColorBackground", _Theme.SelColorBackgroundName);
else else
{ {
@@ -464,10 +464,10 @@ namespace VocaluxeLib.Menu
public void LoadTextures() public void LoadTextures()
{ {
if (_Theme.ColorBackgroundName != "") if (!String.IsNullOrEmpty(_Theme.ColorBackgroundName))
BackgroundColor = CBase.Theme.GetColor(_Theme.ColorBackgroundName, _PartyModeID); BackgroundColor = CBase.Theme.GetColor(_Theme.ColorBackgroundName, _PartyModeID);
if (_Theme.SelColorBackgroundName != "") if (!String.IsNullOrEmpty(_Theme.SelColorBackgroundName))
BackgroundSelColor = CBase.Theme.GetColor(_Theme.SelColorBackgroundName, _PartyModeID); BackgroundSelColor = CBase.Theme.GetColor(_Theme.SelColorBackgroundName, _PartyModeID);
_Theme.Text1.LoadTextures(); _Theme.Text1.LoadTextures();
@@ -518,7 +518,7 @@ namespace VocaluxeLib.Menu
break; break;
case Keys.Delete: case Keys.Delete:
case Keys.Back: case Keys.Back:
if (_Theme.ButtonPlaylistName.Text.Text != "") if (!String.IsNullOrEmpty(_Theme.ButtonPlaylistName.Text.Text))
_Theme.ButtonPlaylistName.Text.Text = _Theme.ButtonPlaylistName.Text.Text.Remove(_Theme.ButtonPlaylistName.Text.Text.Length - 1); _Theme.ButtonPlaylistName.Text.Text = _Theme.ButtonPlaylistName.Text.Text.Remove(_Theme.ButtonPlaylistName.Text.Text.Length - 1);
break; break;
} }
+2 -1
View File
@@ -19,6 +19,7 @@
using System; using System;
using System.Xml; using System.Xml;
using VocaluxeLib.Draw;
namespace VocaluxeLib.Menu namespace VocaluxeLib.Menu
{ {
@@ -127,7 +128,7 @@ namespace VocaluxeLib.Menu
} }
} }
private STexture _GetTextureValue(string value) private CTexture _GetTextureValue(string value)
{ {
return CBase.Theme.GetSkinTexture(value, _PartyModeID); return CBase.Theme.GetSkinTexture(value, _PartyModeID);
} }
+32 -36
View File
@@ -21,6 +21,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Xml; using System.Xml;
using VocaluxeLib.Draw;
namespace VocaluxeLib.Menu namespace VocaluxeLib.Menu
{ {
@@ -110,7 +111,7 @@ namespace VocaluxeLib.Menu
private readonly List<string> _ValueNames; private readonly List<string> _ValueNames;
private readonly List<int> _ValuePartyModeIDs; private readonly List<int> _ValuePartyModeIDs;
private readonly List<STexture> _Textures; private readonly List<CTexture> _Textures;
private readonly List<int> _ValueIndexes; private readonly List<int> _ValueIndexes;
private readonly List<SRectF> _ValueBounds = new List<SRectF>(); private readonly List<SRectF> _ValueBounds = new List<SRectF>();
@@ -178,7 +179,7 @@ namespace VocaluxeLib.Menu
MaxW = 0f; MaxW = 0f;
_Selected = false; _Selected = false;
_Textures = new List<STexture>(); _Textures = new List<CTexture>();
_ValueIndexes = new List<int>(); _ValueIndexes = new List<int>();
_ValueNames = new List<string>(); _ValueNames = new List<string>();
_ValuePartyModeIDs = new List<int>(); _ValuePartyModeIDs = new List<int>();
@@ -226,7 +227,7 @@ namespace VocaluxeLib.Menu
MaxW = slide.MaxW; MaxW = slide.MaxW;
_Selected = slide._Selected; _Selected = slide._Selected;
_Textures = new List<STexture>(slide._Textures); _Textures = new List<CTexture>(slide._Textures);
_ValueIndexes = new List<int>(slide._ValueIndexes); _ValueIndexes = new List<int>(slide._ValueIndexes);
_ValueNames = new List<string>(slide._ValueNames); _ValueNames = new List<string>(slide._ValueNames);
_ValueBounds = new List<SRectF>(slide._ValueBounds); _ValueBounds = new List<SRectF>(slide._ValueBounds);
@@ -411,7 +412,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<Color>: SelectSlide color from ColorScheme (high priority)"); writer.WriteComment("<Color>: SelectSlide color from ColorScheme (high priority)");
writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)"); writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)");
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
writer.WriteElementString("Color", _Theme.ColorName); writer.WriteElementString("Color", _Theme.ColorName);
else else
{ {
@@ -423,7 +424,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<SColor>: Selected SelectSlide color from ColorScheme (high priority)"); writer.WriteComment("<SColor>: Selected SelectSlide color from ColorScheme (high priority)");
writer.WriteComment("or <SR>, <SG>, <SB>, <SA> (lower priority)"); writer.WriteComment("or <SR>, <SG>, <SB>, <SA> (lower priority)");
if (_Theme.SelColorName != "") if (!String.IsNullOrEmpty(_Theme.SelColorName))
writer.WriteElementString("SColor", _Theme.SelColorName); writer.WriteElementString("SColor", _Theme.SelColorName);
else else
{ {
@@ -435,7 +436,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)"); writer.WriteComment("<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)");
writer.WriteComment("or <HR>, <HG>, <HB>, <HA> (lower priority)"); writer.WriteComment("or <HR>, <HG>, <HB>, <HA> (lower priority)");
if (_Theme.HighlightColorName != "") if (!String.IsNullOrEmpty(_Theme.HighlightColorName))
writer.WriteElementString("HColor", _Theme.HighlightColorName); writer.WriteElementString("HColor", _Theme.HighlightColorName);
else else
{ {
@@ -447,7 +448,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<ArrowColor>: Arrow color from ColorScheme (high priority)"); writer.WriteComment("<ArrowColor>: Arrow color from ColorScheme (high priority)");
writer.WriteComment("or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)"); writer.WriteComment("or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)");
if (_Theme.ArrowColorName != "") if (!String.IsNullOrEmpty(_Theme.ArrowColorName))
writer.WriteElementString("ArrowColor", _Theme.ArrowColorName); writer.WriteElementString("ArrowColor", _Theme.ArrowColorName);
else else
{ {
@@ -459,7 +460,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<ArrowSColor>: Selected arrow color from ColorScheme (high priority)"); writer.WriteComment("<ArrowSColor>: Selected arrow color from ColorScheme (high priority)");
writer.WriteComment("or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)"); writer.WriteComment("or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)");
if (_Theme.SelArrowColorName != "") if (!String.IsNullOrEmpty(_Theme.SelArrowColorName))
writer.WriteElementString("ArrowSColor", _Theme.SelArrowColorName); writer.WriteElementString("ArrowSColor", _Theme.SelArrowColorName);
else else
{ {
@@ -471,7 +472,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<TextColor>: Text color from ColorScheme (high priority)"); writer.WriteComment("<TextColor>: Text color from ColorScheme (high priority)");
writer.WriteComment("or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)"); writer.WriteComment("or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)");
if (_Theme.TextColorName != "") if (!String.IsNullOrEmpty(_Theme.TextColorName))
writer.WriteElementString("TextColor", _Theme.TextColorName); writer.WriteElementString("TextColor", _Theme.TextColorName);
else else
{ {
@@ -483,7 +484,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<TextSColor>: Selected text color from ColorScheme (high priority)"); writer.WriteComment("<TextSColor>: Selected text color from ColorScheme (high priority)");
writer.WriteComment("or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)"); writer.WriteComment("or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)");
if (_Theme.SelTextColorName != "") if (!String.IsNullOrEmpty(_Theme.SelTextColorName))
writer.WriteElementString("TextSColor", _Theme.SelTextColorName); writer.WriteElementString("TextSColor", _Theme.SelTextColorName);
else else
{ {
@@ -530,20 +531,20 @@ namespace VocaluxeLib.Menu
public void AddValue(string value, int partyModeID) public void AddValue(string value, int partyModeID)
{ {
AddValue(value, new STexture(-1), _ValueIndexes.Count, partyModeID); AddValue(value, null, _ValueIndexes.Count, partyModeID);
} }
public void AddValue(string value, STexture texture) public void AddValue(string value, CTexture texture)
{ {
AddValue(value, texture, _ValueIndexes.Count, _PartyModeID); AddValue(value, texture, _ValueIndexes.Count, _PartyModeID);
} }
private void _AddValue(string value, STexture texture, int valueIndex) private void _AddValue(string value, CTexture texture, int valueIndex)
{ {
AddValue(value, texture, valueIndex, _PartyModeID); AddValue(value, texture, valueIndex, _PartyModeID);
} }
public void AddValue(string value, STexture texture, int valueIndex, int partyModeID) public void AddValue(string value, CTexture texture, int valueIndex, int partyModeID)
{ {
_ValueNames.Add(value); _ValueNames.Add(value);
_Textures.Add(texture); _Textures.Add(texture);
@@ -559,12 +560,12 @@ namespace VocaluxeLib.Menu
public void AddValues(IEnumerable<string> values) public void AddValues(IEnumerable<string> values)
{ {
foreach (string value in values) foreach (string value in values)
_AddValue(value, new STexture(-1), _PartyModeID); _AddValue(value, null, _PartyModeID);
_ValueBounds.Clear(); _ValueBounds.Clear();
} }
public void AddValues(string[] values, STexture[] textures) public void AddValues(string[] values, CTexture[] textures)
{ {
if (values.Length != textures.Length) if (values.Length != textures.Length)
return; return;
@@ -588,12 +589,7 @@ namespace VocaluxeLib.Menu
RenameValue(Selection, newName); RenameValue(Selection, newName);
} }
public void RenameValue(int selection, string newName) public void RenameValue(int selection, string newName, CTexture newTexture = null)
{
RenameValue(selection, newName, new STexture(-1));
}
public void RenameValue(int selection, string newName, STexture newTexture)
{ {
if (selection < 0 && selection >= _ValueNames.Count) if (selection < 0 && selection >= _ValueNames.Count)
return; return;
@@ -696,15 +692,15 @@ namespace VocaluxeLib.Menu
if (!Visible && CBase.Settings.GetGameState() != EGameState.EditTheme) if (!Visible && CBase.Settings.GetGameState() != EGameState.EditTheme)
return; return;
STexture texture = CBase.Theme.GetSkinTexture(_Theme.TextureName, _PartyModeID); CTexture texture = CBase.Theme.GetSkinTexture(_Theme.TextureName, _PartyModeID);
STexture textureArrowLeft = CBase.Theme.GetSkinTexture(_Theme.TextureArrowLeftName, _PartyModeID); CTexture textureArrowLeft = CBase.Theme.GetSkinTexture(_Theme.TextureArrowLeftName, _PartyModeID);
STexture textureArrowRight = CBase.Theme.GetSkinTexture(_Theme.TextureArrowRightName, _PartyModeID); CTexture textureArrowRight = CBase.Theme.GetSkinTexture(_Theme.TextureArrowRightName, _PartyModeID);
STexture selTexture = CBase.Theme.GetSkinTexture(_Theme.SelTextureName, _PartyModeID); CTexture selTexture = CBase.Theme.GetSkinTexture(_Theme.SelTextureName, _PartyModeID);
STexture selTextureArrowLeft = CBase.Theme.GetSkinTexture(_Theme.SelTextureArrowLeftName, _PartyModeID); CTexture selTextureArrowLeft = CBase.Theme.GetSkinTexture(_Theme.SelTextureArrowLeftName, _PartyModeID);
STexture selTextureArrowRight = CBase.Theme.GetSkinTexture(_Theme.SelTextureArrowRightName, _PartyModeID); CTexture selTextureArrowRight = CBase.Theme.GetSkinTexture(_Theme.SelTextureArrowRightName, _PartyModeID);
STexture highlightTexture = CBase.Theme.GetSkinTexture(_Theme.HighlightTextureName, _PartyModeID); CTexture highlightTexture = CBase.Theme.GetSkinTexture(_Theme.HighlightTextureName, _PartyModeID);
if (Selected) if (Selected)
{ {
@@ -791,25 +787,25 @@ namespace VocaluxeLib.Menu
public void LoadTextures() public void LoadTextures()
{ {
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID);
if (_Theme.SelColorName != "") if (!String.IsNullOrEmpty(_Theme.SelColorName))
SelColor = CBase.Theme.GetColor(_Theme.SelColorName, _PartyModeID); SelColor = CBase.Theme.GetColor(_Theme.SelColorName, _PartyModeID);
if (_Theme.HighlightColorName != "") if (!String.IsNullOrEmpty(_Theme.HighlightColorName))
HighlightColor = CBase.Theme.GetColor(_Theme.HighlightColorName, _PartyModeID); HighlightColor = CBase.Theme.GetColor(_Theme.HighlightColorName, _PartyModeID);
if (_Theme.ArrowColorName != "") if (!String.IsNullOrEmpty(_Theme.ArrowColorName))
ColorArrow = CBase.Theme.GetColor(_Theme.ArrowColorName, _PartyModeID); ColorArrow = CBase.Theme.GetColor(_Theme.ArrowColorName, _PartyModeID);
if (_Theme.SelArrowColorName != "") if (!String.IsNullOrEmpty(_Theme.SelArrowColorName))
SelColorArrow = CBase.Theme.GetColor(_Theme.SelArrowColorName, _PartyModeID); SelColorArrow = CBase.Theme.GetColor(_Theme.SelArrowColorName, _PartyModeID);
if (_Theme.TextColorName != "") if (!String.IsNullOrEmpty(_Theme.TextColorName))
TextColor = CBase.Theme.GetColor(_Theme.TextColorName, _PartyModeID); TextColor = CBase.Theme.GetColor(_Theme.TextColorName, _PartyModeID);
if (_Theme.SelColorName != "") if (!String.IsNullOrEmpty(_Theme.SelColorName))
SelTextColor = CBase.Theme.GetColor(_Theme.SelTextColorName, _PartyModeID); SelTextColor = CBase.Theme.GetColor(_Theme.SelTextColorName, _PartyModeID);
} }
+12 -45
View File
@@ -20,6 +20,7 @@
using System; using System;
using System.Drawing; using System.Drawing;
using System.Xml; using System.Xml;
using VocaluxeLib.Draw;
namespace VocaluxeLib.Menu namespace VocaluxeLib.Menu
{ {
@@ -42,10 +43,10 @@ namespace VocaluxeLib.Menu
return _Theme.Name; return _Theme.Name;
} }
private STexture _Texture; private CTexture _Texture;
public STexture Texture public CTexture Texture
{ {
get { return _Texture.Index != -1 ? _Texture : CBase.Theme.GetSkinTexture(_Theme.TextureName, _PartyModeID); } get { return _Texture ?? CBase.Theme.GetSkinTexture(_Theme.TextureName, _PartyModeID); }
set { _Texture = value; } set { _Texture = value; }
} }
@@ -58,35 +59,20 @@ namespace VocaluxeLib.Menu
public float ReflectionHeight; public float ReflectionHeight;
public bool Selected; public bool Selected;
public bool Visible; public bool Visible = true;
public float Alpha; public float Alpha = 1;
public EAspect Aspect = EAspect.Stretch; public EAspect Aspect = EAspect.Stretch;
public CStatic(int partyModeID) public CStatic(int partyModeID)
{ {
_PartyModeID = partyModeID; _PartyModeID = partyModeID;
_Theme = new SThemeStatic();
_ThemeLoaded = false;
_Texture = new STexture(-1);
Color = new SColorF();
Rect = new SRectF();
Reflection = false;
ReflectionSpace = 0f;
ReflectionHeight = 0f;
Selected = false;
Alpha = 1f;
Visible = true;
} }
public CStatic(CStatic s) public CStatic(CStatic s)
{ {
_PartyModeID = s._PartyModeID; _PartyModeID = s._PartyModeID;
_Theme = new SThemeStatic();
_ThemeLoaded = false;
_Texture = s.Texture; _Texture = s.Texture;
Color = new SColorF(s.Color); Color = new SColorF(s.Color);
@@ -100,40 +86,21 @@ namespace VocaluxeLib.Menu
Visible = s.Visible; Visible = s.Visible;
} }
public CStatic(int partyModeID, STexture texture, SColorF color, SRectF rect) public CStatic(int partyModeID, CTexture texture, SColorF color, SRectF rect)
{ {
_PartyModeID = partyModeID; _PartyModeID = partyModeID;
_Theme = new SThemeStatic();
_ThemeLoaded = false;
_Texture = texture; _Texture = texture;
Color = color; Color = color;
Rect = rect; Rect = rect;
Reflection = false;
ReflectionSpace = 0f;
ReflectionHeight = 0f;
Selected = false;
Alpha = 1f;
Visible = true;
} }
public CStatic(int partyModeID, string textureSkinName, SColorF color, SRectF rect) public CStatic(int partyModeID, string textureSkinName, SColorF color, SRectF rect)
{ {
_PartyModeID = partyModeID; _PartyModeID = partyModeID;
_Theme = new SThemeStatic {TextureName = textureSkinName}; _Theme.TextureName = textureSkinName;
_ThemeLoaded = false;
_Texture = new STexture(-1);
Color = color; Color = color;
Rect = rect; Rect = rect;
Reflection = false;
ReflectionSpace = 0f;
ReflectionHeight = 0f;
Selected = false;
Alpha = 1f;
Visible = true;
} }
public bool LoadTheme(string xmlPath, string elementName, CXMLReader xmlReader, int skinIndex) public bool LoadTheme(string xmlPath, string elementName, CXMLReader xmlReader, int skinIndex)
@@ -194,7 +161,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<Color>: Static color from ColorScheme (high priority)"); writer.WriteComment("<Color>: Static color from ColorScheme (high priority)");
writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)"); writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)");
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
writer.WriteElementString("Color", _Theme.ColorName); writer.WriteElementString("Color", _Theme.ColorName);
else else
{ {
@@ -238,7 +205,7 @@ namespace VocaluxeLib.Menu
public void Draw(float scale, float z, EAspect aspect, bool forceDraw = false) public void Draw(float scale, float z, EAspect aspect, bool forceDraw = false)
{ {
STexture texture = _Texture.Index != -1 ? _Texture : CBase.Theme.GetSkinTexture(_Theme.TextureName, _PartyModeID); CTexture texture = Texture;
SRectF bounds = new SRectF( SRectF bounds = new SRectF(
Rect.X - Rect.W * (scale - 1f), Rect.X - Rect.W * (scale - 1f),
@@ -253,7 +220,7 @@ namespace VocaluxeLib.Menu
{ {
RectangleF bounds2 = new RectangleF(bounds.X, bounds.Y, bounds.W, bounds.H); RectangleF bounds2 = new RectangleF(bounds.X, bounds.Y, bounds.W, bounds.H);
RectangleF rect2; RectangleF rect2;
CHelper.SetRect(bounds2, out rect2, texture.Width / texture.Height, aspect); CHelper.SetRect(bounds2, out rect2, texture.OrigAspect, aspect);
rect.X = rect2.X; rect.X = rect2.X;
rect.Y = rect2.Y; rect.Y = rect2.Y;
@@ -277,7 +244,7 @@ namespace VocaluxeLib.Menu
public void LoadTextures() public void LoadTextures()
{ {
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID);
} }
+7 -7
View File
@@ -169,7 +169,7 @@ namespace VocaluxeLib.Menu
} }
/// <summary> /// <summary>
/// Do NOT read/write this anywhere but in _UpdateTextPosition! /// Do NOT read/write this anywhere but in _UpdateTextPosition!
/// </summary> /// </summary>
private SRectF _Rect; private SRectF _Rect;
public SRectF Rect public SRectF Rect
@@ -396,7 +396,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<Color>: Text color from ColorScheme (high priority)"); writer.WriteComment("<Color>: Text color from ColorScheme (high priority)");
writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)"); writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)");
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
writer.WriteElementString("Color", _Theme.ColorName); writer.WriteElementString("Color", _Theme.ColorName);
else else
{ {
@@ -408,7 +408,7 @@ namespace VocaluxeLib.Menu
writer.WriteComment("<SColor>: Selected Text color from ColorScheme (high priority)"); writer.WriteComment("<SColor>: Selected Text color from ColorScheme (high priority)");
writer.WriteComment("or <SR>, <SG>, <SB>, <SA> (lower priority)"); writer.WriteComment("or <SR>, <SG>, <SB>, <SA> (lower priority)");
if (_Theme.SelColorName != "") if (!String.IsNullOrEmpty(_Theme.SelColorName))
writer.WriteElementString("SColor", _Theme.SelColorName); writer.WriteElementString("SColor", _Theme.SelColorName);
else else
{ {
@@ -499,8 +499,8 @@ namespace VocaluxeLib.Menu
public void DrawRelative(float rx, float ry, float reflectionHeight = 0f, float reflectionSpace = 0f, float rectHeight = 0f) public void DrawRelative(float rx, float ry, float reflectionHeight = 0f, float reflectionSpace = 0f, float rectHeight = 0f)
{ {
var oldReflectionSpace = ReflectionSpace; float oldReflectionSpace = ReflectionSpace;
var oldReflectionHeight = ReflectionHeight; float oldReflectionHeight = ReflectionHeight;
if (reflectionHeight > 0) if (reflectionHeight > 0)
{ {
ReflectionSpace = (rectHeight - Rect.Y - Rect.H) * 2 + reflectionSpace; ReflectionSpace = (rectHeight - Rect.Y - Rect.H) * 2 + reflectionSpace;
@@ -521,10 +521,10 @@ namespace VocaluxeLib.Menu
public void LoadTextures() public void LoadTextures()
{ {
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID);
if (_Theme.SelColorName != "") if (!String.IsNullOrEmpty(_Theme.SelColorName))
SelColor = CBase.Theme.GetColor(_Theme.SelColorName, _PartyModeID); SelColor = CBase.Theme.GetColor(_Theme.SelColorName, _PartyModeID);
} }
+1
View File
@@ -23,6 +23,7 @@ using System.Collections.ObjectModel;
using System.Drawing; using System.Drawing;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Game; using VocaluxeLib.Game;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu.SongMenu; using VocaluxeLib.Menu.SongMenu;
using VocaluxeLib.PartyModes; using VocaluxeLib.PartyModes;
using VocaluxeLib.Profile; using VocaluxeLib.Profile;
+26 -35
View File
@@ -21,6 +21,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Xml; using System.Xml;
using VocaluxeLib.Draw;
using VocaluxeLib.Songs; using VocaluxeLib.Songs;
@@ -386,9 +387,7 @@ namespace VocaluxeLib.Menu.SingNotes
_PlayerNotes[n].Rect.Z _PlayerNotes[n].Rect.Z
); );
float f = 0.7f; float f = (note.Hit) ? 0.7f : 0.4f;
if (!note.Hit)
f = 0.4f;
_DrawNote(rect, color, f); _DrawNote(rect, color, f);
@@ -471,39 +470,31 @@ namespace VocaluxeLib.Menu.SingNotes
private void _DrawNote(SRectF rect, SColorF color, float factor = 1f) private void _DrawNote(SRectF rect, SColorF color, float factor = 1f)
{ {
const int spacing = 0; if (factor <= 0)
return;
float d = (1f - factor) / 2 * rect.H; float dh = (1f - factor) * rect.H / 2;
float dw = d; float dw = Math.Min(dh, rect.W / 2);
if (2 * dw > rect.W) SRectF noteRect = new SRectF(rect.X + dw, rect.Y + dh, rect.W - 2 * dw, rect.H - 2 * dh, rect.Z);
dw = rect.W / 2;
SRectF r = new SRectF( CTexture noteBegin = CBase.Theme.GetSkinTexture(_Theme.SkinLeftName, _PartyModeID);
rect.X + dw + spacing, CTexture noteMiddle = CBase.Theme.GetSkinTexture(_Theme.SkinMiddleName, _PartyModeID);
rect.Y + d + spacing, CTexture noteEnd = CBase.Theme.GetSkinTexture(_Theme.SkinRightName, _PartyModeID);
rect.W - 2 * dw - 2 * spacing,
rect.H - 2 * d - 2 * spacing,
rect.Z
);
STexture noteBegin = CBase.Theme.GetSkinTexture(_Theme.SkinLeftName, _PartyModeID); //Width of each of the ends (round parts)
STexture noteMiddle = CBase.Theme.GetSkinTexture(_Theme.SkinMiddleName, _PartyModeID); //Need 2 of them so use minimum
STexture noteEnd = CBase.Theme.GetSkinTexture(_Theme.SkinRightName, _PartyModeID); float endsW = Math.Min(noteRect.H * noteBegin.OrigAspect, noteRect.W / 2);
float dx = noteBegin.Width * r.H / noteBegin.Height; CBase.Drawing.DrawTexture(noteBegin, new SRectF(noteRect.X, noteRect.Y, endsW, noteRect.H, noteRect.Z), color);
if (2 * dx > r.W)
dx = r.W / 2;
SRectF middleRect = new SRectF(noteRect.X + endsW, noteRect.Y, noteRect.W - 2 * endsW, noteRect.H, noteRect.Z);
CBase.Drawing.DrawTexture(noteBegin, new SRectF(r.X, r.Y, dx, r.H, r.Z), color); if (noteRect.W >= 4 * endsW)
CBase.Drawing.DrawTexture(noteMiddle, middleRect, color);
if (r.W - 2 * dx >= 2 * dx)
CBase.Drawing.DrawTexture(noteMiddle, new SRectF(r.X + dx, r.Y, r.W - 2 * dx, r.H, r.Z), color);
else else
CBase.Drawing.DrawTexture(noteMiddle, new SRectF(r.X + dx, r.Y, 2 * dx, r.H, r.Z), color, new SRectF(r.X + dx, r.Y, r.W - 2 * dx, r.H, r.Z)); CBase.Drawing.DrawTexture(noteMiddle, new SRectF(middleRect.X, middleRect.Y, 2 * endsW, middleRect.H, middleRect.Z), color, middleRect);
CBase.Drawing.DrawTexture(noteEnd, new SRectF(r.X + r.W - dx, r.Y, dx, r.H, r.Z), color); CBase.Drawing.DrawTexture(noteEnd, new SRectF(noteRect.X + noteRect.W - endsW, noteRect.Y, endsW, noteRect.H, noteRect.Z), color);
} }
private void _DrawNoteBG(SRectF rect, SColorF color, float factor, Stopwatch timer) private void _DrawNoteBG(SRectF rect, SColorF color, float factor, Stopwatch timer)
@@ -534,11 +525,11 @@ namespace VocaluxeLib.Menu.SingNotes
rect.Z rect.Z
); );
STexture noteBackgroundBegin = CBase.Theme.GetSkinTexture(_Theme.SkinBackgroundLeftName, _PartyModeID); CTexture noteBackgroundBegin = CBase.Theme.GetSkinTexture(_Theme.SkinBackgroundLeftName, _PartyModeID);
STexture noteBackgroundMiddle = CBase.Theme.GetSkinTexture(_Theme.SkinBackgroundMiddleName, _PartyModeID); CTexture noteBackgroundMiddle = CBase.Theme.GetSkinTexture(_Theme.SkinBackgroundMiddleName, _PartyModeID);
STexture noteBackgroundEnd = CBase.Theme.GetSkinTexture(_Theme.SkinBackgroundRightName, _PartyModeID); CTexture noteBackgroundEnd = CBase.Theme.GetSkinTexture(_Theme.SkinBackgroundRightName, _PartyModeID);
float dx = noteBackgroundBegin.Width * r.H / noteBackgroundBegin.Height; float dx = r.H * noteBackgroundBegin.OrigAspect;
if (2 * dx > r.W) if (2 * dx > r.W)
dx = r.W / 2; dx = r.W / 2;
@@ -629,8 +620,8 @@ namespace VocaluxeLib.Menu.SingNotes
rect.Z rect.Z
); );
STexture noteBegin = CBase.Theme.GetSkinTexture(_Theme.SkinLeftName, _PartyModeID); CTexture noteBegin = CBase.Theme.GetSkinTexture(_Theme.SkinLeftName, _PartyModeID);
float dx = noteBegin.Width * r.H / noteBegin.Height; float dx = r.H * noteBegin.OrigAspect;
if (2 * dx > r.W) if (2 * dx > r.W)
dx = r.W / 2; dx = r.W / 2;
@@ -686,7 +677,7 @@ namespace VocaluxeLib.Menu.SingNotes
_PlayerNotes[n].Color.B, _PlayerNotes[n].Color.B,
_PlayerNotes[n].Color.A * _PlayerNotes[n].Alpha); _PlayerNotes[n].Color.A * _PlayerNotes[n].Alpha);
STexture toneHelper = CBase.Theme.GetSkinTexture(_Theme.SkinToneHelperName, _PartyModeID); CTexture toneHelper = CBase.Theme.GetSkinTexture(_Theme.SkinToneHelperName, _PartyModeID);
CBase.Drawing.DrawTexture(toneHelper, drawRect, color); CBase.Drawing.DrawTexture(toneHelper, drawRect, color);
+17 -14
View File
@@ -22,6 +22,7 @@ using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Xml; using System.Xml;
using VocaluxeLib.Draw;
using VocaluxeLib.PartyModes; using VocaluxeLib.PartyModes;
namespace VocaluxeLib.Menu.SongMenu namespace VocaluxeLib.Menu.SongMenu
@@ -104,7 +105,7 @@ namespace VocaluxeLib.Menu.SongMenu
private readonly List<int> _Streams = new List<int>(); private readonly List<int> _Streams = new List<int>();
private int _Actsong = -1; private int _Actsong = -1;
private int _Actsongstream = -1; private int _Actsongstream = -1;
protected STexture _Vidtex = new STexture(-1); protected CTexture _Vidtex;
protected bool _Initialized; protected bool _Initialized;
protected int _LastKnownNumSongs; protected int _LastKnownNumSongs;
@@ -351,7 +352,7 @@ namespace VocaluxeLib.Menu.SongMenu
writer.WriteComment("<Color>: Tile color from ColorScheme (high priority)"); writer.WriteComment("<Color>: Tile color from ColorScheme (high priority)");
writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)"); writer.WriteComment("or <R>, <G>, <B>, <A> (lower priority)");
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
writer.WriteElementString("Color", _Theme.ColorName); writer.WriteElementString("Color", _Theme.ColorName);
else else
{ {
@@ -438,19 +439,21 @@ namespace VocaluxeLib.Menu.SongMenu
if (_Actsong != _PreviewSelected) if (_Actsong != _PreviewSelected)
_SelectSong(_PreviewSelected); _SelectSong(_PreviewSelected);
if (_Streams.Count > 0 && _Video != -1) if (_Streams.Count <= 0 || _Video == -1)
return;
if (CBase.Video.IsFinished(_Video) || CBase.Sound.IsFinished(_Actsongstream))
{ {
if (CBase.Video.IsFinished(_Video) || CBase.Sound.IsFinished(_Actsongstream)) CBase.Video.Close(_Video);
{ _Video = -1;
CBase.Video.Close(_Video); return;
_Video = -1; }
return;
}
float time = CBase.Sound.GetPosition(_Actsongstream); float time = CBase.Sound.GetPosition(_Actsongstream);
float vtime; float vtime;
CBase.Video.GetFrame(_Video, ref _Vidtex, time, out vtime); if (CBase.Video.GetFrame(_Video, ref _Vidtex, time, out vtime))
{
if (_VideoFadeTimer.ElapsedMilliseconds <= 3000L) if (_VideoFadeTimer.ElapsedMilliseconds <= 3000L)
_Vidtex.Color.A = _VideoFadeTimer.ElapsedMilliseconds / 3000f; _Vidtex.Color.A = _VideoFadeTimer.ElapsedMilliseconds / 3000f;
else else
@@ -464,7 +467,7 @@ namespace VocaluxeLib.Menu.SongMenu
public virtual void OnShow() public virtual void OnShow()
{ {
_Actsongstream = -1; _Actsongstream = -1;
_Vidtex = new STexture(-1); _Vidtex = null;
} }
public virtual void OnHide() public virtual void OnHide()
@@ -546,7 +549,7 @@ namespace VocaluxeLib.Menu.SongMenu
{ {
Init(); Init();
if (_Theme.ColorName != "") if (!String.IsNullOrEmpty(_Theme.ColorName))
_Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID); _Color = CBase.Theme.GetColor(_Theme.ColorName, _PartyModeID);
} }
+10 -10
View File
@@ -22,6 +22,7 @@ using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using System.Windows.Forms; using System.Windows.Forms;
using VocaluxeLib.Draw;
using VocaluxeLib.PartyModes; using VocaluxeLib.PartyModes;
using VocaluxeLib.Songs; using VocaluxeLib.Songs;
@@ -38,8 +39,8 @@ namespace VocaluxeLib.Menu.SongMenu
private CStatic _MedleyCalcIcon; private CStatic _MedleyCalcIcon;
private CStatic _MedleyTagIcon; private CStatic _MedleyTagIcon;
private STexture _CoverBigTexture; private CTexture _CoverBigTexture;
private STexture _CoverTexture; private CTexture _CoverTexture;
private CText _Artist; private CText _Artist;
private CText _Title; private CText _Title;
@@ -323,7 +324,7 @@ namespace VocaluxeLib.Menu.SongMenu
{ {
foreach (CStatic tile in _Tiles) foreach (CStatic tile in _Tiles)
{ {
if ((tile.Texture.Index != _CoverTexture.Index) && CHelper.IsInBounds(tile.Rect, mouseEvent) && !sel) if (tile.Texture != _CoverTexture && CHelper.IsInBounds(tile.Rect, mouseEvent) && !sel)
{ {
if (mouseEvent.LB || !CBase.Songs.IsInCategory()) if (mouseEvent.LB || !CBase.Songs.IsInCategory())
{ {
@@ -371,7 +372,7 @@ namespace VocaluxeLib.Menu.SongMenu
{ {
foreach (CStatic tile in _Tiles) foreach (CStatic tile in _Tiles)
{ {
if ((tile.Texture.Index != _CoverTexture.Index) && CHelper.IsInBounds(tile.Rect, mouseEvent)) if (tile.Texture != _CoverTexture && CHelper.IsInBounds(tile.Rect, mouseEvent))
{ {
_EnterCategory(_PreviewSelected); _EnterCategory(_PreviewSelected);
mouseEvent.Handled = true; mouseEvent.Handled = true;
@@ -394,7 +395,7 @@ namespace VocaluxeLib.Menu.SongMenu
else else
{ {
// ReSharper disable ConvertIfStatementToConditionalTernaryExpression // ReSharper disable ConvertIfStatementToConditionalTernaryExpression
if (tile.Texture.Index != _CoverTexture.Index) if (tile.Texture != _CoverTexture)
// ReSharper restore ConvertIfStatementToConditionalTernaryExpression // ReSharper restore ConvertIfStatementToConditionalTernaryExpression
tile.Draw(1f, tile.Rect.Z, EAspect.Crop); tile.Draw(1f, tile.Rect.Z, EAspect.Crop);
else else
@@ -453,18 +454,17 @@ namespace VocaluxeLib.Menu.SongMenu
_TextBG.Draw(); _TextBG.Draw();
if (_Vidtex != null && _Video != -1)
if (_Vidtex.Index != -1 && _Video != -1)
{ {
if (_Vidtex.Color.A < 1) if (_Vidtex.Color.A < 1)
_CoverBig.Draw(1f, EAspect.Crop); _CoverBig.Draw(1f, EAspect.Crop);
RectangleF bounds = new RectangleF(_CoverBig.Rect.X, _CoverBig.Rect.Y, _CoverBig.Rect.W, _CoverBig.Rect.H); RectangleF bounds = new RectangleF(_CoverBig.Rect.X, _CoverBig.Rect.Y, _CoverBig.Rect.W, _CoverBig.Rect.H);
RectangleF rect = new RectangleF(0f, 0f, _Vidtex.Width, _Vidtex.Height); RectangleF rect;
CHelper.SetRect(bounds, out rect, rect.Width / rect.Height, EAspect.Crop); CHelper.SetRect(bounds, out rect, _Vidtex.OrigAspect, EAspect.Crop);
SRectF vidRect = new SRectF(rect.X, rect.Y, rect.Width, rect.Height, _CoverBig.Rect.Z); SRectF vidRect = new SRectF(rect.X, rect.Y, rect.Width, rect.Height, _CoverBig.Rect.Z);
SRectF vidRectBounds = new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f); SRectF vidRectBounds = new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f);
CBase.Drawing.DrawTexture(_Vidtex, vidRect, _Vidtex.Color, vidRectBounds, false); CBase.Drawing.DrawTexture(_Vidtex, vidRect, _Vidtex.Color, vidRectBounds);
CBase.Drawing.DrawTextureReflection(_Vidtex, vidRect, _Vidtex.Color, vidRectBounds, _CoverBig.ReflectionSpace, _CoverBig.ReflectionHeight); CBase.Drawing.DrawTextureReflection(_Vidtex, vidRect, _Vidtex.Color, vidRectBounds, _CoverBig.ReflectionSpace, _CoverBig.ReflectionHeight);
} }
else else
+9 -9
View File
@@ -20,14 +20,15 @@
using System.Collections.Generic; using System.Collections.Generic;
using VocaluxeLib; using VocaluxeLib;
using VocaluxeLib.Draw;
namespace VocaluxeLib.Songs namespace VocaluxeLib.Songs
{ {
public class CCategory public class CCategory
{ {
public readonly string Name; public readonly string Name;
private STexture _CoverTextureSmall = new STexture(-1); private CTexture _CoverTextureSmall;
private STexture _CoverTextureBig = new STexture(-1); private CTexture _CoverTextureBig;
private bool _CoverBigLoaded;
public readonly List<CSongPointer> Songs = new List<CSongPointer>(); public readonly List<CSongPointer> Songs = new List<CSongPointer>();
public CCategory(string name) public CCategory(string name)
@@ -35,26 +36,25 @@ namespace VocaluxeLib.Songs
Name = name; Name = name;
} }
public STexture CoverTextureSmall public CTexture CoverTextureSmall
{ {
get { return _CoverTextureSmall; } get { return _CoverTextureSmall; }
set { _CoverTextureSmall = value; } set { _CoverTextureSmall = value; }
} }
public STexture CoverTextureBig public CTexture CoverTextureBig
{ {
get { return _CoverBigLoaded ? _CoverTextureBig : _CoverTextureSmall; } get { return _CoverTextureBig ?? _CoverTextureSmall; }
set set
{ {
if (value.Index == -1) if (value == null)
return; return;
_CoverTextureBig = value; _CoverTextureBig = value;
_CoverBigLoaded = true;
} }
} }
public CCategory(string name, STexture coverSmall, STexture coverBig) public CCategory(string name, CTexture coverSmall, CTexture coverBig)
{ {
Name = name; Name = name;
CoverTextureSmall = coverSmall; CoverTextureSmall = coverSmall;
+11 -23
View File
@@ -22,6 +22,8 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Text; using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu.SingNotes;
namespace VocaluxeLib.Songs namespace VocaluxeLib.Songs
{ {
@@ -68,10 +70,8 @@ namespace VocaluxeLib.Songs
public class CSong public class CSong
{ {
private bool _CoverSmallLoaded; private CTexture _CoverTextureSmall;
private bool _CoverBigLoaded; private CTexture _CoverTextureBig;
private STexture _CoverTextureSmall = new STexture(-1);
private STexture _CoverTextureBig = new STexture(-1);
public SMedley Medley; public SMedley Medley;
@@ -95,30 +95,22 @@ namespace VocaluxeLib.Songs
public bool NotesLoaded { get; private set; } public bool NotesLoaded { get; private set; }
public STexture CoverTextureSmall public CTexture CoverTextureSmall
{ {
get get
{ {
if (!_CoverSmallLoaded) if (_CoverTextureSmall == null)
LoadSmallCover(); LoadSmallCover();
return _CoverTextureSmall; return _CoverTextureSmall;
} }
set set { _CoverTextureSmall = value; }
{
_CoverTextureSmall = value;
_CoverSmallLoaded = true;
}
} }
public STexture CoverTextureBig public CTexture CoverTextureBig
{ {
get { return _CoverBigLoaded ? _CoverTextureBig : _CoverTextureSmall; } get { return _CoverTextureBig ?? _CoverTextureSmall; }
set set { _CoverTextureBig = value; }
{
_CoverTextureBig = value;
_CoverBigLoaded = true;
}
} }
public string Title = String.Empty; public string Title = String.Empty;
@@ -213,8 +205,6 @@ namespace VocaluxeLib.Songs
VideoFileName = song.VideoFileName; VideoFileName = song.VideoFileName;
VideoAspect = song.VideoAspect; VideoAspect = song.VideoAspect;
_CoverSmallLoaded = song._CoverSmallLoaded;
_CoverBigLoaded = song._CoverBigLoaded;
NotesLoaded = song.NotesLoaded; NotesLoaded = song.NotesLoaded;
Artist = song.Artist; Artist = song.Artist;
@@ -749,7 +739,7 @@ namespace VocaluxeLib.Songs
public void LoadSmallCover() public void LoadSmallCover()
{ {
if (_CoverSmallLoaded) if (_CoverTextureSmall != null)
return; return;
if (CoverFileName != "") if (CoverFileName != "")
{ {
@@ -758,8 +748,6 @@ namespace VocaluxeLib.Songs
} }
else else
_CoverTextureSmall = CBase.Cover.GetNoCover(); _CoverTextureSmall = CBase.Cover.GetNoCover();
_CoverSmallLoaded = true;
} }
private void _CheckFiles() private void _CheckFiles()
+4 -39
View File
@@ -23,6 +23,10 @@ using System.Drawing;
using System.Windows.Forms; using System.Windows.Forms;
using VocaluxeLib.Songs; using VocaluxeLib.Songs;
using System.Windows.Forms;
using VocaluxeLib.Draw;
using VocaluxeLib.Menu.SingNotes;
namespace VocaluxeLib namespace VocaluxeLib
{ {
@@ -99,45 +103,6 @@ namespace VocaluxeLib
public int Y; public int Y;
public int Z; public int Z;
} }
public struct STexture
{
public int Index;
public int PBO;
public int ID;
public string TexturePath;
public float Width;
public float Height;
public SRectF Rect;
public float W2; //power of 2 width
public float H2; //power of 2 height
public float WidthRatio;
public float HeightRatio;
public SColorF Color;
public STexture(int index)
{
Index = index;
PBO = 0;
ID = -1;
TexturePath = String.Empty;
Width = 1f;
Height = 1f;
Rect = new SRectF(0f, 0f, 1f, 1f, 0f);
W2 = 2f;
H2 = 2f;
WidthRatio = 0.5f;
HeightRatio = 0.5f;
Color = new SColorF(1f, 1f, 1f, 1f);
}
}
#endregion Drawing #endregion Drawing
#region Inputs #region Inputs
+1
View File
@@ -131,6 +131,7 @@
<Compile Include="Menu\CStatic.cs" /> <Compile Include="Menu\CStatic.cs" />
<Compile Include="Menu\CText.cs" /> <Compile Include="Menu\CText.cs" />
<Compile Include="Menu\CScreenSetting.cs" /> <Compile Include="Menu\CScreenSetting.cs" />
<Compile Include="Draw\CTexture.cs" />
<Compile Include="CXMLReader.cs" /> <Compile Include="CXMLReader.cs" />
<Compile Include="Enums.cs" /> <Compile Include="Enums.cs" />
<Compile Include="Menu\IMenu.cs" /> <Compile Include="Menu\IMenu.cs" />