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