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:
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();
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
+391
-479
File diff suppressed because it is too large.
Load diff
+18
-15
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
@@ -240,7 +240,7 @@ namespace Vocaluxe
|
||||
CController.Close();
|
||||
CSound.RecordCloseAll();
|
||||
CSound.CloseAllStreams();
|
||||
CVideo.VdCloseAll();
|
||||
CVideo.CloseAll();
|
||||
CDraw.Unload();
|
||||
CDataBase.CloseConnections();
|
||||
CWebcam.Close();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,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),
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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" />
|
||||
|
||||
Reference in new issue
Block a user