diff --git a/Output/Languages/English.xml b/Output/Languages/English.xml index c8eacb20..50888f4f 100644 --- a/Output/Languages/English.xml +++ b/Output/Languages/English.xml @@ -73,6 +73,10 @@ All Only names and avatars Nothing + Bottom + Top + Top and bottom + Dynamic Loading Total Songs @@ -188,7 +192,7 @@ Cover Loading Behavior Lyrics Options Style - Lyrics on top + Lyrics position Video Options Video Backgrounds Video Preview diff --git a/Output/Languages/German.xml b/Output/Languages/German.xml index e19f5319..61e0890c 100644 --- a/Output/Languages/German.xml +++ b/Output/Languages/German.xml @@ -73,6 +73,10 @@ Alle Nur Namen und Avatar Keine + Unten + Oben + Oben und unten + Dynamisch Laden Gesamt Lieder @@ -188,7 +192,7 @@ Cover Ladeverhalten Songtexteinstellungen Stil - Oben anzeigen + Position Videoeinstellungen Video-Hintergründe Video-Vorschau diff --git a/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml index 10c5c9e9..a1e0b31f 100644 --- a/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml +++ b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml @@ -37,7 +37,7 @@ 410 - 4 + 8 0,00 @@ -53,7 +53,7 @@ Left - Center + Center @@ -98,7 +98,7 @@ Center - Center + Center @@ -147,7 +147,7 @@ Center - Center + Center @@ -196,7 +196,7 @@ Center - Center + Center @@ -245,7 +245,7 @@ Center - Center + Center @@ -294,7 +294,7 @@ Center - Center + Center @@ -343,7 +343,7 @@ Center - Center + Center @@ -392,7 +392,7 @@ Center - Center + Center @@ -441,7 +441,7 @@ Center - Center + Center diff --git a/Output/Themes/Ambient/Screens/PopupScreenVolumeControl.xml b/Output/Themes/Ambient/Screens/PopupScreenVolumeControl.xml index 324d6cc7..80b47b72 100644 --- a/Output/Themes/Ambient/Screens/PopupScreenVolumeControl.xml +++ b/Output/Themes/Ambient/Screens/PopupScreenVolumeControl.xml @@ -21,7 +21,7 @@ 1067 - 680 + 682 -2,00 @@ -37,7 +37,7 @@ Left - Center + Center @@ -118,4 +118,4 @@ 1 - + \ No newline at end of file diff --git a/Output/Themes/Ambient/Screens/ScreenHighscore.xml b/Output/Themes/Ambient/Screens/ScreenHighscore.xml index 94bb3d88..2af500cc 100644 --- a/Output/Themes/Ambient/Screens/ScreenHighscore.xml +++ b/Output/Themes/Ambient/Screens/ScreenHighscore.xml @@ -48,7 +48,7 @@ 60 - 48 + 50 0,00 @@ -63,7 +63,7 @@ Left - Center + Center @@ -77,7 +77,7 @@ 640 - 48 + 50 0,00 @@ -92,7 +92,7 @@ Center - Center + Center @@ -106,7 +106,7 @@ 1220 - 48 + 50 0,00 @@ -121,7 +121,7 @@ Right - Center + Center @@ -135,7 +135,7 @@ 120 - 100 + 103 0,00 @@ -150,7 +150,7 @@ Right - Center + Center @@ -179,7 +179,7 @@ Right - Center + Center @@ -193,7 +193,7 @@ 120 - 220 + 223 0,00 @@ -208,7 +208,7 @@ Right - Center + Center @@ -222,7 +222,7 @@ 120 - 280 + 283 0,00 @@ -237,7 +237,7 @@ Right - Center + Center @@ -251,7 +251,7 @@ 120 - 340 + 343 0,00 @@ -266,7 +266,7 @@ Right - Center + Center @@ -280,7 +280,7 @@ 120 - 400 + 403 0,00 @@ -295,7 +295,7 @@ Right - Center + Center @@ -309,7 +309,7 @@ 120 - 460 + 463 0,00 @@ -324,7 +324,7 @@ Right - Center + Center @@ -338,7 +338,7 @@ 120 - 520 + 523 0,00 @@ -353,7 +353,7 @@ Right - Center + Center @@ -367,7 +367,7 @@ 120 - 580 + 583 0,00 @@ -382,7 +382,7 @@ Right - Center + Center @@ -396,7 +396,7 @@ 120 - 640 + 643 0,00 @@ -411,7 +411,7 @@ Right - Center + Center @@ -425,7 +425,7 @@ 200 - 100 + 103 0,00 @@ -440,7 +440,7 @@ Left - Center + Center @@ -454,7 +454,7 @@ 200 - 160 + 163 0,00 @@ -469,7 +469,7 @@ Left - Center + Center @@ -483,7 +483,7 @@ 200 - 220 + 223 0,00 @@ -498,7 +498,7 @@ Left - Center + Center @@ -512,7 +512,7 @@ 200 - 280 + 283 0,00 @@ -527,7 +527,7 @@ Left - Center + Center @@ -541,7 +541,7 @@ 200 - 340 + 343 0,00 @@ -556,7 +556,7 @@ Left - Center + Center @@ -570,7 +570,7 @@ 200 - 400 + 403 0,00 @@ -585,7 +585,7 @@ Left - Center + Center @@ -599,7 +599,7 @@ 200 - 460 + 463 0,00 @@ -614,7 +614,7 @@ Left - Center + Center @@ -628,7 +628,7 @@ 200 - 520 + 523 0,00 @@ -643,7 +643,7 @@ Left - Center + Center @@ -657,7 +657,7 @@ 200 - 580 + 583 0,00 @@ -672,7 +672,7 @@ Left - Center + Center @@ -686,7 +686,7 @@ 200 - 640 + 643 0,00 @@ -701,7 +701,7 @@ Left - Center + Center @@ -715,7 +715,7 @@ 800 - 100 + 103 0,00 @@ -730,7 +730,7 @@ Left - Center + Center @@ -744,7 +744,7 @@ 800 - 160 + 163 0,00 @@ -759,7 +759,7 @@ Left - Center + Center @@ -773,7 +773,7 @@ 800 - 220 + 223 0,00 @@ -788,7 +788,7 @@ Left - Center + Center @@ -802,7 +802,7 @@ 800 - 280 + 283 0,00 @@ -817,7 +817,7 @@ Left - Center + Center @@ -831,7 +831,7 @@ 800 - 340 + 343 0,00 @@ -846,7 +846,7 @@ Left - Center + Center @@ -860,7 +860,7 @@ 800 - 400 + 403 0,00 @@ -875,7 +875,7 @@ Left - Center + Center @@ -889,7 +889,7 @@ 800 - 460 + 463 0,00 @@ -904,7 +904,7 @@ Left - Center + Center @@ -918,7 +918,7 @@ 800 - 520 + 523 0,00 @@ -933,7 +933,7 @@ Left - Center + Center @@ -947,7 +947,7 @@ 800 - 580 + 583 0,00 @@ -962,7 +962,7 @@ Left - Center + Center @@ -976,7 +976,7 @@ 800 - 640 + 643 0,00 @@ -991,7 +991,7 @@ Left - Center + Center @@ -1005,7 +1005,7 @@ 1000 - 100 + 103 0,00 @@ -1020,7 +1020,7 @@ Left - Center + Center @@ -1034,7 +1034,7 @@ 1000 - 160 + 163 0,00 @@ -1049,7 +1049,7 @@ Left - Center + Center @@ -1063,7 +1063,7 @@ 1000 - 220 + 223 0,00 @@ -1078,7 +1078,7 @@ Left - Center + Center @@ -1092,7 +1092,7 @@ 1000 - 280 + 283 0,00 @@ -1107,7 +1107,7 @@ Left - Center + Center @@ -1121,7 +1121,7 @@ 1000 - 340 + 343 0,00 @@ -1136,7 +1136,7 @@ Left - Center + Center @@ -1150,7 +1150,7 @@ 1000 - 400 + 403 0,00 @@ -1165,7 +1165,7 @@ Left - Center + Center @@ -1179,7 +1179,7 @@ 1000 - 460 + 463 0,00 @@ -1194,7 +1194,7 @@ Left - Center + Center @@ -1208,7 +1208,7 @@ 1000 - 520 + 523 0,00 @@ -1223,7 +1223,7 @@ Left - Center + Center @@ -1237,7 +1237,7 @@ 1000 - 580 + 583 0,00 @@ -1252,7 +1252,7 @@ Left - Center + Center @@ -1266,7 +1266,7 @@ 1000 - 640 + 643 0,00 @@ -1281,7 +1281,7 @@ Left - Center + Center @@ -1483,4 +1483,4 @@ 250 - + \ No newline at end of file diff --git a/Output/Themes/Ambient/Screens/ScreenNames.xml b/Output/Themes/Ambient/Screens/ScreenNames.xml index 4f81074c..4efddb2d 100644 --- a/Output/Themes/Ambient/Screens/ScreenNames.xml +++ b/Output/Themes/Ambient/Screens/ScreenNames.xml @@ -29,102 +29,6 @@ - - - PlayerSelector - - 15 - 100 - -2,00 - 118 - 118 - - - Player1 - - - - - - - PlayerSelector - - 15 - 255 - -2,00 - 118 - 118 - - - Player2 - - - - - - - PlayerSelector - - 15 - 410 - -2,00 - 118 - 118 - - - Player3 - - - - - - - PlayerSelector - - 1147 - 100 - -2,00 - 118 - 118 - - - Player4 - - - - - - - PlayerSelector - - 1147 - 255 - -2,00 - 118 - 118 - - - Player5 - - - - - - - PlayerSelector - - 1147 - 410 - -2,00 - 118 - 118 - - - Player6 - - - - Invisible @@ -221,6 +125,102 @@ + + + PlayerSelector + + 15 + 100 + -2,00 + 118 + 118 + + + Player1 + + + + + + + PlayerSelector + + 15 + 255 + -2,00 + 118 + 118 + + + Player2 + + + + + + + PlayerSelector + + 15 + 410 + -2,00 + 118 + 118 + + + Player3 + + + + + + + PlayerSelector + + 1147 + 100 + -2,00 + 118 + 118 + + + Player4 + + + + + + + PlayerSelector + + 1147 + 255 + -2,00 + 118 + 118 + + + Player5 + + + + + + + PlayerSelector + + 1147 + 410 + -2,00 + 118 + 118 + + + Player6 + + + + Invisible @@ -256,7 +256,7 @@ 640 - 48 + 50 0,00 @@ -271,7 +271,7 @@ Center - Center + Center @@ -285,7 +285,7 @@ 640 - 615 + 617 0,00 @@ -301,7 +301,7 @@ Center - Center + Center @@ -315,7 +315,7 @@ 640 - 650 + 652 0,00 @@ -331,7 +331,7 @@ Center - Center + Center @@ -360,7 +360,7 @@ Center - Center + Center @@ -389,7 +389,7 @@ Center - Center + Center @@ -418,7 +418,7 @@ Center - Center + Center @@ -447,7 +447,7 @@ Center - Center + Center @@ -476,7 +476,7 @@ Center - Center + Center @@ -505,7 +505,7 @@ Center - Center + Center @@ -536,7 +536,7 @@ 75 - 10 + 12 27 @@ -550,7 +550,7 @@ Center - Center + Center @@ -593,7 +593,7 @@ 75 - 10 + 12 27 @@ -607,7 +607,7 @@ Center - Center + Center @@ -1305,4 +1305,4 @@ - + \ No newline at end of file diff --git a/Output/Themes/Ambient/Screens/ScreenOptions.xml b/Output/Themes/Ambient/Screens/ScreenOptions.xml index c31b5c68..de798ca2 100644 --- a/Output/Themes/Ambient/Screens/ScreenOptions.xml +++ b/Output/Themes/Ambient/Screens/ScreenOptions.xml @@ -32,7 +32,7 @@ 60 - 41 + 43 0,00 @@ -47,7 +47,7 @@ Left - Center + Center @@ -78,7 +78,7 @@ 75 - 10 + 12 27 @@ -92,7 +92,7 @@ Center - Center + Center @@ -135,7 +135,7 @@ 75 - 10 + 12 27 @@ -149,7 +149,7 @@ Center - Center + Center @@ -192,7 +192,7 @@ 75 - 10 + 12 27 @@ -206,7 +206,7 @@ Center - Center + Center @@ -249,7 +249,7 @@ 75 - 10 + 12 27 @@ -263,7 +263,7 @@ Center - Center + Center @@ -306,7 +306,7 @@ 75 - 10 + 12 27 @@ -320,7 +320,7 @@ Center - Center + Center @@ -363,7 +363,7 @@ 75 - 10 + 12 27 @@ -377,7 +377,7 @@ Center - Center + Center @@ -401,4 +401,4 @@ - + \ No newline at end of file diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsGame.xml b/Output/Themes/Ambient/Screens/ScreenOptionsGame.xml index a8cf9fee..6f758a46 100644 --- a/Output/Themes/Ambient/Screens/ScreenOptionsGame.xml +++ b/Output/Themes/Ambient/Screens/ScreenOptionsGame.xml @@ -128,7 +128,7 @@ 640 - 48 + 50 0,00 @@ -143,7 +143,7 @@ Center - Center + Center @@ -157,7 +157,7 @@ 75 - 105 + 107 0,00 @@ -172,7 +172,7 @@ Left - Center + Center @@ -186,7 +186,7 @@ 75 - 165 + 167 0,00 @@ -201,7 +201,7 @@ Left - Center + Center @@ -215,7 +215,7 @@ 75 - 225 + 227 0,00 @@ -230,7 +230,7 @@ Left - Center + Center @@ -244,7 +244,7 @@ 75 - 285 + 287 0,00 @@ -259,7 +259,7 @@ Left - Center + Center @@ -273,7 +273,7 @@ 75 - 345 + 347 0,00 @@ -288,7 +288,7 @@ Left - Center + Center @@ -302,7 +302,7 @@ 75 - 405 + 407 0,00 @@ -317,7 +317,7 @@ Left - Center + Center @@ -348,7 +348,7 @@ 75 - 10 + 12 27 @@ -362,7 +362,7 @@ Center - Center + Center @@ -788,4 +788,4 @@ 3 - + \ No newline at end of file diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsLyrics.xml b/Output/Themes/Ambient/Screens/ScreenOptionsLyrics.xml index b78b9b2f..2fa9d49b 100644 --- a/Output/Themes/Ambient/Screens/ScreenOptionsLyrics.xml +++ b/Output/Themes/Ambient/Screens/ScreenOptionsLyrics.xml @@ -32,7 +32,7 @@ 640 - 48 + 50 0,00 @@ -47,7 +47,7 @@ Center - Center + Center @@ -61,7 +61,7 @@ 75 - 105 + 107 0,00 @@ -76,7 +76,7 @@ Left - Center + Center @@ -90,7 +90,7 @@ 75 - 165 + 167 0,00 @@ -105,7 +105,7 @@ Left - Center + Center @@ -136,7 +136,7 @@ 75 - 10 + 12 27 @@ -150,7 +150,7 @@ Center - Center + Center @@ -308,4 +308,4 @@ 2 - + \ No newline at end of file diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml b/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml index 14ce5e7b..89dce324 100644 --- a/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml +++ b/Output/Themes/Ambient/Screens/ScreenOptionsRecord.xml @@ -160,7 +160,7 @@ 640 - 53 + 55 0,00 @@ -175,7 +175,7 @@ Center - Center + Center @@ -189,7 +189,7 @@ 75 - 104 + 106 0,00 @@ -204,7 +204,7 @@ Left - Center + Center @@ -218,7 +218,7 @@ 75 - 225 + 227 0,00 @@ -233,7 +233,7 @@ Left - Center + Center @@ -247,7 +247,7 @@ 75 - 285 + 287 0,00 @@ -262,7 +262,7 @@ Left - Center + Center @@ -276,7 +276,7 @@ 75 - 345 + 347 0,00 @@ -291,7 +291,7 @@ Left - Center + Center @@ -305,7 +305,7 @@ 640 - 535 + 537 0,00 @@ -321,7 +321,7 @@ Center - Center + Center @@ -335,7 +335,7 @@ 330 - 225 + 227 -1,00 @@ -350,7 +350,7 @@ Right - Center + Center @@ -364,7 +364,7 @@ 330 - 285 + 287 -1,00 @@ -379,7 +379,7 @@ Right - Center + Center @@ -410,7 +410,7 @@ 75 - 14 + 16 27 @@ -424,7 +424,7 @@ Center - Center + Center @@ -467,7 +467,7 @@ 75 - 14 + 16 27 @@ -481,7 +481,7 @@ Center - Center + Center @@ -559,7 +559,7 @@ TextSColor - 27 + 27,00 @@ -626,7 +626,7 @@ TextSColor - 27 + 27,00 @@ -693,7 +693,7 @@ TextSColor - 27 + 27,00 @@ -760,7 +760,7 @@ TextSColor - 27 + 27,00 @@ -835,4 +835,4 @@ - + \ No newline at end of file diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsSound.xml b/Output/Themes/Ambient/Screens/ScreenOptionsSound.xml index dd87144c..3472b1ab 100644 --- a/Output/Themes/Ambient/Screens/ScreenOptionsSound.xml +++ b/Output/Themes/Ambient/Screens/ScreenOptionsSound.xml @@ -32,7 +32,7 @@ 640 - 48 + 50 0,00 @@ -47,7 +47,7 @@ Center - Center + Center @@ -61,7 +61,7 @@ 75 - 105 + 107 0,00 @@ -76,7 +76,7 @@ Left - Center + Center @@ -90,7 +90,7 @@ 75 - 165 + 167 0,00 @@ -105,7 +105,7 @@ Left - Center + Center @@ -119,7 +119,7 @@ 75 - 225 + 227 0,00 @@ -134,7 +134,7 @@ Left - Center + Center @@ -148,7 +148,7 @@ 75 - 285 + 287 0,00 @@ -163,7 +163,7 @@ Left - Center + Center @@ -177,7 +177,7 @@ 75 - 345 + 347 0,00 @@ -192,7 +192,7 @@ Left - Center + Center @@ -223,7 +223,7 @@ 75 - 10 + 12 27 @@ -237,7 +237,7 @@ Center - Center + Center @@ -596,4 +596,4 @@ 3 - + \ No newline at end of file diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsTheme.xml b/Output/Themes/Ambient/Screens/ScreenOptionsTheme.xml index 372c93e8..a66566e2 100644 --- a/Output/Themes/Ambient/Screens/ScreenOptionsTheme.xml +++ b/Output/Themes/Ambient/Screens/ScreenOptionsTheme.xml @@ -160,7 +160,7 @@ 640 - 48 + 50 0,00 @@ -175,7 +175,7 @@ Center - Center + Center @@ -189,7 +189,7 @@ 75 - 105 + 107 0,00 @@ -204,7 +204,7 @@ Left - Center + Center @@ -218,7 +218,7 @@ 75 - 165 + 167 0,00 @@ -233,7 +233,7 @@ Left - Center + Center @@ -247,7 +247,7 @@ 75 - 225 + 227 0,00 @@ -262,7 +262,7 @@ Left - Center + Center @@ -276,7 +276,7 @@ 75 - 285 + 287 0,00 @@ -291,7 +291,7 @@ Left - Center + Center @@ -305,7 +305,7 @@ 75 - 345 + 347 0,00 @@ -320,7 +320,7 @@ Left - Center + Center @@ -334,7 +334,7 @@ 75 - 405 + 407 0,00 @@ -349,7 +349,7 @@ Left - Center + Center @@ -363,7 +363,7 @@ 75 - 465 + 467 0,00 @@ -378,7 +378,7 @@ Left - Center + Center @@ -392,7 +392,7 @@ 75 - 525 + 527 0,00 @@ -407,7 +407,7 @@ Left - Center + Center @@ -438,7 +438,7 @@ 75 - 10 + 12 27 @@ -452,7 +452,7 @@ Center - Center + Center @@ -1012,4 +1012,4 @@ 1 - + \ No newline at end of file diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml b/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml index b6d039cc..5bbf6015 100644 --- a/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml +++ b/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml @@ -96,7 +96,7 @@ 640 - 48 + 50 0,00 @@ -111,7 +111,7 @@ Center - Center + Center @@ -125,7 +125,7 @@ 75 - 105 + 107 0,00 @@ -140,7 +140,7 @@ Left - Center + Center @@ -154,7 +154,7 @@ 75 - 165 + 167 0,00 @@ -169,7 +169,7 @@ Left - Center + Center @@ -183,7 +183,7 @@ 75 - 225 + 227 0,00 @@ -198,7 +198,7 @@ Left - Center + Center @@ -212,7 +212,7 @@ 75 - 285 + 287 0,00 @@ -227,7 +227,7 @@ Left - Center + Center @@ -241,7 +241,7 @@ 75 - 345 + 347 0,00 @@ -256,7 +256,7 @@ Left - Center + Center @@ -270,7 +270,7 @@ 75 - 405 + 407 0,00 @@ -285,7 +285,7 @@ Left - Center + Center @@ -316,7 +316,7 @@ 75 - 10 + 12 27 @@ -330,7 +330,7 @@ Center - Center + Center @@ -756,4 +756,4 @@ 3 - + \ No newline at end of file diff --git a/Output/Themes/Ambient/Screens/ScreenParty.xml b/Output/Themes/Ambient/Screens/ScreenParty.xml index d6d81cbd..b55de8be 100644 --- a/Output/Themes/Ambient/Screens/ScreenParty.xml +++ b/Output/Themes/Ambient/Screens/ScreenParty.xml @@ -32,7 +32,7 @@ 640 - 48 + 50 0,00 @@ -47,7 +47,7 @@ Center - Center + Center @@ -61,7 +61,7 @@ 75 - 105 + 107 0,00 @@ -76,7 +76,7 @@ Left - Center + Center @@ -90,7 +90,7 @@ 75 - 165 + 167 0,00 @@ -105,7 +105,7 @@ Left - Center + Center @@ -119,7 +119,7 @@ 75 - 225 + 227 0,00 @@ -134,7 +134,7 @@ Left - Center + Center @@ -148,7 +148,7 @@ 75 - 285 + 287 0,00 @@ -163,7 +163,7 @@ Left - Center + Center @@ -177,7 +177,7 @@ 75 - 345 + 347 0,00 @@ -192,7 +192,7 @@ Left - Center + Center @@ -206,7 +206,7 @@ 75 - 405 + 407 0,00 @@ -221,7 +221,7 @@ Left - Center + Center @@ -235,7 +235,7 @@ 75 - 465 + 467 0,00 @@ -250,7 +250,7 @@ Left - Center + Center @@ -264,7 +264,7 @@ 850 - 165 + 167 0,00 @@ -280,7 +280,7 @@ Center - Center + Center @@ -294,7 +294,7 @@ 850 - 225 + 227 0,00 @@ -310,7 +310,7 @@ Center - Center + Center @@ -324,7 +324,7 @@ 850 - 285 + 287 0,00 @@ -340,7 +340,7 @@ Center - Center + Center @@ -354,7 +354,7 @@ 850 - 345 + 347 0,00 @@ -370,7 +370,7 @@ Center - Center + Center @@ -384,7 +384,7 @@ 850 - 405 + 407 0,00 @@ -400,7 +400,7 @@ Center - Center + Center @@ -414,7 +414,7 @@ 850 - 465 + 467 0,00 @@ -430,7 +430,7 @@ Center - Center + Center @@ -444,7 +444,7 @@ 850 - 525 + 527 0,00 @@ -460,7 +460,7 @@ Center - Center + Center @@ -491,7 +491,7 @@ 75 - 10 + 12 27 @@ -505,7 +505,7 @@ Center - Center + Center @@ -548,7 +548,7 @@ 75 - 10 + 12 27 @@ -562,7 +562,7 @@ Center - Center + Center @@ -653,4 +653,4 @@ 1 - + \ No newline at end of file diff --git a/Output/Themes/Ambient/Screens/ScreenProfiles.xml b/Output/Themes/Ambient/Screens/ScreenProfiles.xml index b996f2aa..fe74a016 100644 --- a/Output/Themes/Ambient/Screens/ScreenProfiles.xml +++ b/Output/Themes/Ambient/Screens/ScreenProfiles.xml @@ -128,7 +128,7 @@ 640 - 48 + 50 0,00 @@ -143,7 +143,7 @@ Center - Center + Center @@ -157,7 +157,7 @@ 75 - 285 + 287 0,00 @@ -172,7 +172,7 @@ Left - Center + Center @@ -186,7 +186,7 @@ 75 - 345 + 347 0,00 @@ -201,7 +201,7 @@ Left - Center + Center @@ -215,7 +215,7 @@ 75 - 405 + 407 0,00 @@ -230,7 +230,7 @@ Left - Center + Center @@ -244,7 +244,7 @@ 75 - 465 + 467 0,00 @@ -259,7 +259,7 @@ Left - Center + Center @@ -273,7 +273,7 @@ 75 - 525 + 527 0,00 @@ -288,7 +288,7 @@ Left - Center + Center @@ -319,7 +319,7 @@ 355 - 8 + 10 27 @@ -333,7 +333,7 @@ Center - Center + Center @@ -368,7 +368,7 @@ 75 - 10 + 12 27 @@ -382,7 +382,7 @@ Center - Center + Center @@ -425,7 +425,7 @@ 75 - 10 + 12 27 @@ -439,7 +439,7 @@ Center - Center + Center @@ -482,7 +482,7 @@ 75 - 10 + 12 27 @@ -496,7 +496,7 @@ Center - Center + Center @@ -539,7 +539,7 @@ 75 - 10 + 12 27 @@ -553,7 +553,7 @@ Center - Center + Center @@ -596,7 +596,7 @@ 75 - 10 + 12 27 @@ -610,7 +610,7 @@ Center - Center + Center @@ -653,7 +653,7 @@ 75 - 10 + 12 27 @@ -667,7 +667,7 @@ Center - Center + Center @@ -702,7 +702,7 @@ 75 - 10 + 12 27 @@ -716,7 +716,7 @@ Center - Center + Center @@ -751,7 +751,7 @@ 75 - 10 + 12 27 @@ -765,7 +765,7 @@ Center - Center + Center @@ -1124,4 +1124,4 @@ 2 - + \ No newline at end of file diff --git a/Output/Themes/Ambient/Screens/ScreenScore.xml b/Output/Themes/Ambient/Screens/ScreenScore.xml index 96b8f80d..a07f386c 100644 --- a/Output/Themes/Ambient/Screens/ScreenScore.xml +++ b/Output/Themes/Ambient/Screens/ScreenScore.xml @@ -1206,7 +1206,7 @@ 60 - 48 + 50 0,00 @@ -1221,7 +1221,7 @@ Left - Center + Center @@ -1235,7 +1235,7 @@ 640 - 48 + 50 0,00 @@ -1250,7 +1250,7 @@ Center - Center + Center @@ -1279,7 +1279,7 @@ Center - Center + Center @@ -1293,7 +1293,7 @@ 640 - 140 + 142 0,00 @@ -1308,7 +1308,7 @@ Center - Center + Center @@ -1322,7 +1322,7 @@ 640 - 105 + 107 0,00 @@ -1337,7 +1337,7 @@ Center - Center + Center @@ -1366,7 +1366,7 @@ Center - Center + Center @@ -1395,7 +1395,7 @@ Center - Center + Center @@ -1409,7 +1409,7 @@ 432 - 140 + 142 0,00 @@ -1424,7 +1424,7 @@ Center - Center + Center @@ -1438,7 +1438,7 @@ 432 - 105 + 107 0,00 @@ -1453,7 +1453,7 @@ Center - Center + Center @@ -1482,7 +1482,7 @@ Center - Center + Center @@ -1511,7 +1511,7 @@ Center - Center + Center @@ -1525,7 +1525,7 @@ 848 - 140 + 142 0,00 @@ -1540,7 +1540,7 @@ Center - Center + Center @@ -1554,7 +1554,7 @@ 848 - 105 + 107 0,00 @@ -1569,7 +1569,7 @@ Center - Center + Center @@ -1598,7 +1598,7 @@ Center - Center + Center @@ -1627,7 +1627,7 @@ Center - Center + Center @@ -1641,7 +1641,7 @@ 318 - 140 + 142 0,00 @@ -1656,7 +1656,7 @@ Center - Center + Center @@ -1670,7 +1670,7 @@ 318 - 105 + 107 0,00 @@ -1685,7 +1685,7 @@ Center - Center + Center @@ -1714,7 +1714,7 @@ Center - Center + Center @@ -1743,7 +1743,7 @@ Center - Center + Center @@ -1757,7 +1757,7 @@ 640 - 140 + 142 0,00 @@ -1772,7 +1772,7 @@ Center - Center + Center @@ -1786,7 +1786,7 @@ 640 - 105 + 107 0,00 @@ -1801,7 +1801,7 @@ Center - Center + Center @@ -1830,7 +1830,7 @@ Center - Center + Center @@ -1859,7 +1859,7 @@ Center - Center + Center @@ -1873,7 +1873,7 @@ 962 - 140 + 142 0,00 @@ -1888,7 +1888,7 @@ Center - Center + Center @@ -1902,7 +1902,7 @@ 962 - 105 + 107 0,00 @@ -1917,7 +1917,7 @@ Center - Center + Center @@ -1946,7 +1946,7 @@ Center - Center + Center @@ -1975,7 +1975,7 @@ Center - Center + Center @@ -1989,7 +1989,7 @@ 270 - 140 + 142 0,00 @@ -2004,7 +2004,7 @@ Center - Center + Center @@ -2018,7 +2018,7 @@ 270 - 105 + 107 0,00 @@ -2034,7 +2034,7 @@ Center - Center + Center @@ -2063,7 +2063,7 @@ Center - Center + Center @@ -2092,7 +2092,7 @@ Center - Center + Center @@ -2106,7 +2106,7 @@ 502 - 140 + 142 0,00 @@ -2121,7 +2121,7 @@ Center - Center + Center @@ -2135,7 +2135,7 @@ 502 - 105 + 107 0,00 @@ -2151,7 +2151,7 @@ Center - Center + Center @@ -2180,7 +2180,7 @@ Center - Center + Center @@ -2209,7 +2209,7 @@ Center - Center + Center @@ -2223,7 +2223,7 @@ 734 - 140 + 142 0,00 @@ -2238,7 +2238,7 @@ Center - Center + Center @@ -2252,7 +2252,7 @@ 734 - 105 + 107 0,00 @@ -2268,7 +2268,7 @@ Center - Center + Center @@ -2297,7 +2297,7 @@ Center - Center + Center @@ -2326,7 +2326,7 @@ Center - Center + Center @@ -2340,7 +2340,7 @@ 966 - 140 + 142 0,00 @@ -2355,7 +2355,7 @@ Center - Center + Center @@ -2369,7 +2369,7 @@ 966 - 105 + 107 0,00 @@ -2385,7 +2385,7 @@ Center - Center + Center @@ -2414,7 +2414,7 @@ Center - Center + Center @@ -2444,7 +2444,7 @@ Center - Center + Center @@ -2458,7 +2458,7 @@ 224 - 140 + 142 0,00 @@ -2474,7 +2474,7 @@ Center - Center + Center @@ -2488,7 +2488,7 @@ 224 - 105 + 107 0,00 @@ -2504,7 +2504,7 @@ Center - Center + Center @@ -2534,7 +2534,7 @@ Center - Center + Center @@ -2564,7 +2564,7 @@ Center - Center + Center @@ -2578,7 +2578,7 @@ 432 - 140 + 142 0,00 @@ -2594,7 +2594,7 @@ Center - Center + Center @@ -2608,7 +2608,7 @@ 432 - 105 + 107 0,00 @@ -2624,7 +2624,7 @@ Center - Center + Center @@ -2654,7 +2654,7 @@ Center - Center + Center @@ -2684,7 +2684,7 @@ Center - Center + Center @@ -2698,7 +2698,7 @@ 640 - 140 + 142 0,00 @@ -2714,7 +2714,7 @@ Center - Center + Center @@ -2728,7 +2728,7 @@ 640 - 105 + 107 0,00 @@ -2744,7 +2744,7 @@ Center - Center + Center @@ -2774,7 +2774,7 @@ Center - Center + Center @@ -2804,7 +2804,7 @@ Center - Center + Center @@ -2818,7 +2818,7 @@ 848 - 140 + 142 0,00 @@ -2834,7 +2834,7 @@ Center - Center + Center @@ -2848,7 +2848,7 @@ 848 - 105 + 107 0,00 @@ -2864,7 +2864,7 @@ Center - Center + Center @@ -2894,7 +2894,7 @@ Center - Center + Center @@ -2924,7 +2924,7 @@ Center - Center + Center @@ -2938,7 +2938,7 @@ 1056 - 140 + 142 0,00 @@ -2954,7 +2954,7 @@ Center - Center + Center @@ -2968,7 +2968,7 @@ 1056 - 105 + 107 0,00 @@ -2984,7 +2984,7 @@ Center - Center + Center @@ -3014,7 +3014,7 @@ Center - Center + Center @@ -3044,7 +3044,7 @@ Center - Center + Center @@ -3058,7 +3058,7 @@ 125 - 140 + 142 0,00 @@ -3074,7 +3074,7 @@ Center - Center + Center @@ -3088,7 +3088,7 @@ 125 - 105 + 107 0,00 @@ -3104,7 +3104,7 @@ Center - Center + Center @@ -3134,7 +3134,7 @@ Center - Center + Center @@ -3164,7 +3164,7 @@ Center - Center + Center @@ -3178,7 +3178,7 @@ 333 - 140 + 142 0,00 @@ -3194,7 +3194,7 @@ Center - Center + Center @@ -3208,7 +3208,7 @@ 333 - 105 + 107 0,00 @@ -3224,7 +3224,7 @@ Center - Center + Center @@ -3254,7 +3254,7 @@ Center - Center + Center @@ -3284,7 +3284,7 @@ Center - Center + Center @@ -3298,7 +3298,7 @@ 541 - 140 + 142 0,00 @@ -3314,7 +3314,7 @@ Center - Center + Center @@ -3328,7 +3328,7 @@ 541 - 105 + 107 0,00 @@ -3344,7 +3344,7 @@ Center - Center + Center @@ -3374,7 +3374,7 @@ Center - Center + Center @@ -3404,7 +3404,7 @@ Center - Center + Center @@ -3418,7 +3418,7 @@ 749 - 140 + 142 0,00 @@ -3434,7 +3434,7 @@ Center - Center + Center @@ -3448,7 +3448,7 @@ 749 - 105 + 107 0,00 @@ -3464,7 +3464,7 @@ Center - Center + Center @@ -3494,7 +3494,7 @@ Center - Center + Center @@ -3524,7 +3524,7 @@ Center - Center + Center @@ -3538,7 +3538,7 @@ 957 - 140 + 142 0,00 @@ -3554,7 +3554,7 @@ Center - Center + Center @@ -3568,7 +3568,7 @@ 957 - 105 + 107 0,00 @@ -3584,7 +3584,7 @@ Center - Center + Center @@ -3614,7 +3614,7 @@ Center - Center + Center @@ -3644,7 +3644,7 @@ Center - Center + Center @@ -3658,7 +3658,7 @@ 1165 - 140 + 142 0,00 @@ -3674,7 +3674,7 @@ Center - Center + Center @@ -3688,7 +3688,7 @@ 1165 - 105 + 107 0,00 @@ -3704,7 +3704,7 @@ Center - Center + Center @@ -3734,7 +3734,7 @@ Center - Center + Center @@ -3770,4 +3770,4 @@ Horizontal - + \ No newline at end of file diff --git a/Output/Themes/Ambient/Screens/ScreenSing.xml b/Output/Themes/Ambient/Screens/ScreenSing.xml index abd2fae4..22342fca 100644 --- a/Output/Themes/Ambient/Screens/ScreenSing.xml +++ b/Output/Themes/Ambient/Screens/ScreenSing.xml @@ -961,7 +961,7 @@ 640 - 18 + 20 -1,00 @@ -977,7 +977,7 @@ Center - Center + Center @@ -988,36 +988,6 @@ - - - 640 - 18 - - -1,00 - - 27 - - - - - TextColor - - - TextSColor - - Left - - Center - - - - Outline - - - - - - 1214 @@ -1036,7 +1006,7 @@ Right - Center + Center @@ -1065,7 +1035,7 @@ Center - Center + Center @@ -1094,7 +1064,7 @@ Left - Center + Center @@ -1123,7 +1093,7 @@ Left - Center + Center @@ -1134,6 +1104,35 @@ + + + 640 + 20 + + -1,00 + + 27 + + + + TextColor + + + TextSColor + + Left + + Center + + + + Outline + + + + + + 1240 @@ -1152,7 +1151,7 @@ Right - Center + Center @@ -1184,7 +1183,7 @@ Center - Center + Center @@ -1213,7 +1212,7 @@ Right - Center + Center @@ -1245,7 +1244,7 @@ Center - Center + Center @@ -1274,7 +1273,7 @@ Right - Center + Center @@ -1306,7 +1305,7 @@ Center - Center + Center @@ -1335,7 +1334,7 @@ Right - Center + Center @@ -1367,7 +1366,7 @@ Center - Center + Center @@ -1396,7 +1395,7 @@ Right - Center + Center @@ -1428,7 +1427,7 @@ Center - Center + Center @@ -1457,7 +1456,7 @@ Right - Center + Center @@ -1489,7 +1488,7 @@ Center - Center + Center @@ -1518,7 +1517,7 @@ Center - Center + Center @@ -1550,7 +1549,7 @@ Center - Center + Center @@ -1579,7 +1578,7 @@ Center - Center + Center @@ -1611,7 +1610,7 @@ Center - Center + Center @@ -1640,7 +1639,7 @@ Center - Center + Center @@ -1672,7 +1671,7 @@ Center - Center + Center @@ -1701,7 +1700,7 @@ Center - Center + Center @@ -1733,7 +1732,7 @@ Center - Center + Center @@ -1762,7 +1761,7 @@ Center - Center + Center @@ -1794,7 +1793,7 @@ Center - Center + Center @@ -1823,7 +1822,7 @@ Center - Center + Center @@ -1855,7 +1854,7 @@ Center - Center + Center @@ -1884,7 +1883,7 @@ Center - Center + Center @@ -1916,7 +1915,7 @@ Center - Center + Center @@ -1945,7 +1944,7 @@ Center - Center + Center @@ -1977,7 +1976,7 @@ Center - Center + Center @@ -2006,7 +2005,7 @@ Center - Center + Center @@ -2038,7 +2037,7 @@ Center - Center + Center @@ -2067,7 +2066,7 @@ Center - Center + Center @@ -2099,7 +2098,7 @@ Center - Center + Center @@ -2128,7 +2127,7 @@ Center - Center + Center @@ -2160,7 +2159,7 @@ Center - Center + Center @@ -2189,7 +2188,7 @@ Center - Center + Center @@ -2221,7 +2220,7 @@ Center - Center + Center @@ -2250,7 +2249,7 @@ Center - Center + Center @@ -2282,7 +2281,7 @@ Center - Center + Center @@ -2311,7 +2310,7 @@ Center - Center + Center @@ -2343,7 +2342,7 @@ Center - Center + Center @@ -2372,7 +2371,7 @@ Center - Center + Center @@ -2404,7 +2403,7 @@ Center - Center + Center @@ -2435,7 +2434,7 @@ 75 - 10 + 12 27 @@ -2449,7 +2448,7 @@ Center - Center + Center @@ -2492,7 +2491,7 @@ 75 - 10 + 12 27 @@ -2506,7 +2505,7 @@ Center - Center + Center @@ -2549,7 +2548,7 @@ 75 - 10 + 12 27 @@ -2563,7 +2562,7 @@ Center - Center + Center @@ -2801,4 +2800,4 @@ - + \ No newline at end of file diff --git a/Output/Themes/Ambient/Screens/ScreenSong.xml b/Output/Themes/Ambient/Screens/ScreenSong.xml index 50a1fe30..194f7518 100644 --- a/Output/Themes/Ambient/Screens/ScreenSong.xml +++ b/Output/Themes/Ambient/Screens/ScreenSong.xml @@ -91,7 +91,7 @@ Left - Center + Center @@ -121,7 +121,7 @@ Left - Center + Center @@ -151,7 +151,7 @@ Left - Center + Center @@ -181,7 +181,7 @@ Left - Center + Center @@ -211,7 +211,7 @@ Left - Center + Center @@ -241,7 +241,7 @@ Left - Center + Center @@ -255,7 +255,7 @@ 220 - 610 + 612 0,00 @@ -271,7 +271,7 @@ Center - Center + Center @@ -289,7 +289,7 @@ 825 - 610 + 612 0,00 @@ -305,7 +305,7 @@ Center - Center + Center @@ -323,7 +323,7 @@ 400 - 610 + 612 0,00 @@ -338,7 +338,7 @@ Right - Center + Center @@ -352,7 +352,7 @@ 410 - 610 + 612 0,00 @@ -367,7 +367,7 @@ Left - Center + Center @@ -381,7 +381,7 @@ 220 - 45 + 47 -2,11 @@ -397,7 +397,7 @@ Center - Center + Center @@ -428,7 +428,7 @@ 40 - 20 + 23 34 @@ -442,7 +442,7 @@ Center - Center + Center @@ -477,7 +477,7 @@ 40 - 20 + 23 34 @@ -491,7 +491,7 @@ Center - Center + Center @@ -526,7 +526,7 @@ 40 - 20 + 23 34 @@ -540,7 +540,7 @@ Center - Center + Center @@ -575,7 +575,7 @@ 40 - 20 + 23 34 @@ -589,7 +589,7 @@ Center - Center + Center @@ -624,7 +624,7 @@ 40 - 20 + 23 34 @@ -638,7 +638,7 @@ Center - Center + Center @@ -673,7 +673,7 @@ 40 - 20 + 23 34 @@ -687,7 +687,7 @@ Center - Center + Center @@ -722,7 +722,7 @@ 180 - 5 + 7 25 @@ -736,7 +736,7 @@ Center - Center + Center @@ -771,7 +771,7 @@ 180 - 5 + 7 25 @@ -785,7 +785,7 @@ Center - Center + Center @@ -820,7 +820,7 @@ 180 - 5 + 7 25 @@ -834,7 +834,7 @@ Center - Center + Center @@ -869,7 +869,7 @@ 180 - 5 + 7 25 @@ -883,7 +883,7 @@ Center - Center + Center @@ -918,7 +918,7 @@ 180 - 5 + 7 25 @@ -932,7 +932,7 @@ Center - Center + Center @@ -967,7 +967,7 @@ 180 - 5 + 7 25 @@ -981,7 +981,7 @@ Center - Center + Center @@ -1016,7 +1016,7 @@ 180 - 5 + 7 25 @@ -1030,7 +1030,7 @@ Center - Center + Center @@ -1065,7 +1065,7 @@ 180 - 5 + 7 25 @@ -1079,7 +1079,7 @@ Center - Center + Center @@ -1114,7 +1114,7 @@ 180 - 5 + 7 25 @@ -1128,7 +1128,7 @@ Center - Center + Center @@ -1163,7 +1163,7 @@ 75 - 10 + 12 27 @@ -1177,7 +1177,7 @@ Center - Center + Center @@ -1220,7 +1220,7 @@ 180 - 5 + 7 25 @@ -1234,7 +1234,7 @@ Center - Center + Center @@ -1269,7 +1269,7 @@ 180 - 5 + 7 25 @@ -1283,7 +1283,7 @@ Center - Center + Center @@ -1630,7 +1630,7 @@ Center - Center + Center @@ -1660,7 +1660,7 @@ Center - Center + Center @@ -1690,7 +1690,7 @@ Center - Center + Center @@ -1822,7 +1822,7 @@ 54 - 4 + 5 -1,01 @@ -1838,13 +1838,13 @@ Left - Top + Center Outline - %a - %t + @@ -1999,7 +1999,7 @@ Left - Center + Center @@ -2034,7 +2034,7 @@ 180 - 5 + 7 25 @@ -2048,7 +2048,7 @@ Center - Center + Center @@ -2097,7 +2097,7 @@ Center - Center + Center @@ -2146,7 +2146,7 @@ Center - Center + Center @@ -2195,7 +2195,7 @@ Center - Center + Center @@ -2212,4 +2212,4 @@ - + \ No newline at end of file diff --git a/PartyModes/PartyModeChallengeMedley/CChallengeRounds.cs b/PartyModes/PartyModeChallengeMedley/CChallengeRounds.cs index 4114320b..d2345005 100644 --- a/PartyModes/PartyModeChallengeMedley/CChallengeRounds.cs +++ b/PartyModes/PartyModeChallengeMedley/CChallengeRounds.cs @@ -146,7 +146,7 @@ namespace VocaluxeLib.PartyModes.ChallengeMedley _Rand = rand; } - public CCombination GetNextCombination(List playerNrDemand) + public CCombination GetNextCombination(IEnumerable playerNrDemand) { if (_Combs.Count == 0) _Create(); diff --git a/PartyModes/PartyModeChallengeMedley/CPartyModeChallengeMedley.cs b/PartyModes/PartyModeChallengeMedley/CPartyModeChallengeMedley.cs index 7abd44db..f108e66f 100644 --- a/PartyModes/PartyModeChallengeMedley/CPartyModeChallengeMedley.cs +++ b/PartyModes/PartyModeChallengeMedley/CPartyModeChallengeMedley.cs @@ -515,6 +515,7 @@ namespace VocaluxeLib.PartyModes.ChallengeMedley return false; } + // ReSharper disable LoopCanBeConvertedToQuery foreach (CSong song in visibleSongs) { foreach (EGameMode mode in song.AvailableGameModes) @@ -523,6 +524,7 @@ namespace VocaluxeLib.PartyModes.ChallengeMedley ids.Add(song.ID); } } + // ReSharper restore LoopCanBeConvertedToQuery if (ids.Count == 0) { diff --git a/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyNames.cs b/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyNames.cs index e073f362..e4a396fb 100644 --- a/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyNames.cs +++ b/PartyModes/PartyModeChallengeMedley/CPartyScreenChallengeMedleyNames.cs @@ -382,17 +382,8 @@ namespace VocaluxeLib.PartyModes.ChallengeMedley //Show profile only if active if (CBase.Profiles.GetProfiles()[i].Active == EOffOn.TR_CONFIG_ON) { - visible = true; - - for (int p = 0; p < _Data.ScreenNames.ProfileIDs.Count; p++) - { - //Don't show profile if is selected - if (_Data.ScreenNames.ProfileIDs[p] == i) - { - visible = false; - break; - } - } + //Don't show profile if is selected + visible = !_Data.ScreenNames.ProfileIDs.Contains(i); } if (visible) _PlayerChooseButtonsVisibleProfiles.Add(i); diff --git a/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs b/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs index 2f46b6dd..2e51f184 100644 --- a/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs +++ b/PartyModes/PartyModeTicTacToe/CPartyModeTicTacToe.cs @@ -658,7 +658,9 @@ namespace VocaluxeLib.PartyModes.TicTacToe for (int i = 0; i < CBase.Playlist.GetPlaylistSongCount(_GameData.PlaylistID); i++) { int id = CBase.Playlist.GetPlaylistSong(_GameData.PlaylistID, i).SongID; + // ReSharper disable LoopCanBeConvertedToQuery foreach (EGameMode mode in CBase.Songs.GetSongByID(id).AvailableGameModes) + // ReSharper restore LoopCanBeConvertedToQuery { if (mode == gm) songs.Add(id); @@ -669,7 +671,9 @@ namespace VocaluxeLib.PartyModes.TicTacToe case ESongSource.TR_ALLSONGS: for (int i = 0; i < CBase.Songs.GetNumSongs(); i++) { + // ReSharper disable LoopCanBeConvertedToQuery foreach (EGameMode mode in CBase.Songs.GetSongByID(i).AvailableGameModes) + // ReSharper restore LoopCanBeConvertedToQuery { if (mode == gm) songs.Add(i); @@ -681,7 +685,9 @@ namespace VocaluxeLib.PartyModes.TicTacToe CBase.Songs.SetCategory(_GameData.CategoryID); for (int i = 0; i < CBase.Songs.NumSongsInCategory(_GameData.CategoryID); i++) { + // ReSharper disable LoopCanBeConvertedToQuery foreach (EGameMode mode in CBase.Songs.GetVisibleSong(i).AvailableGameModes) + // ReSharper restore LoopCanBeConvertedToQuery { if (mode == gm) songs.Add(CBase.Songs.GetVisibleSong(i).ID); diff --git a/Vocaluxe.sln b/Vocaluxe.sln index b1eb0f0f..636ec3bf 100644 --- a/Vocaluxe.sln +++ b/Vocaluxe.sln @@ -1,6 +1,6 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Express 2012 for Windows Desktop +# Visual Studio 2012 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vocaluxe", "Vocaluxe\Vocaluxe.csproj", "{2A1E0F2D-5392-4BB7-B0A1-A9DFA13E79FF}" ProjectSection(ProjectDependencies) = postProject {6F3E1874-F28A-40E9-AFBD-31934D593678} = {6F3E1874-F28A-40E9-AFBD-31934D593678} @@ -128,4 +128,7 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(Performance) = preSolution + HasPerformanceSessions = true + EndGlobalSection EndGlobal diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index c4f40329..26377f1d 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -24,6 +24,7 @@ using System.IO; using System.Linq; using VocaluxeLib; using VocaluxeLib.Songs; +using VocaluxeLib.Draw; namespace Vocaluxe.Base { @@ -39,7 +40,7 @@ namespace Vocaluxe.Base private static readonly List _PreviousFileNames = new List(); 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 +119,7 @@ namespace Vocaluxe.Base } } - public static STexture Cover + public static CTexture Cover { get { return _CurrentPlaylistElement.Cover; } } @@ -155,7 +156,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 +174,7 @@ namespace Vocaluxe.Base if (_VideoEnabled && _Video != -1) { - CVideo.VdClose(_Video); + CVideo.Close(_Video); CDraw.RemoveTexture(ref _CurrentVideoTexture); _Video = -1; } @@ -191,8 +192,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 +222,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 +288,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 +320,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 +442,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 +458,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 +487,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 +579,7 @@ namespace Vocaluxe.Base } } - public STexture Cover + public CTexture Cover { get { diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index ae7c18af..73be016c 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -29,7 +29,6 @@ using System.Xml; using Vocaluxe.Lib.Sound; using Vocaluxe.Lib.Webcam; using VocaluxeLib; -using VocaluxeLib.Menu; using VocaluxeLib.Profile; namespace Vocaluxe.Base @@ -843,13 +842,13 @@ namespace Vocaluxe.Base CGame.Players[j].ProfileID = -1; if (Players[j] == "" || profiles == null) continue; - - for (int i = 0; i < profiles.Length; i++) + + foreach (CProfile profile in profiles) { - if (Path.GetFileName(profiles[i].FileName) == Players[j] && profiles[i].Active == EOffOn.TR_CONFIG_ON) + if (Path.GetFileName(profile.FileName) == Players[j] && profile.Active == EOffOn.TR_CONFIG_ON) { //Update Game-infos with player - CGame.Players[j].ProfileID = profiles[i].ID; + CGame.Players[j].ProfileID = profile.ID; } } } diff --git a/Vocaluxe/Base/CController.cs b/Vocaluxe/Base/CController.cs index 66874fab..e28bb2ee 100644 --- a/Vocaluxe/Base/CController.cs +++ b/Vocaluxe/Base/CController.cs @@ -17,9 +17,7 @@ // */ #endregion -using System; using System.Collections.Generic; - using Vocaluxe.Base.Server; using Vocaluxe.Lib.Input; using Vocaluxe.Lib.Input.WiiMote; @@ -39,22 +37,18 @@ namespace Vocaluxe.Base _Controller = new List(); _KeysPool = new List(); _MousePool = new List(); - + _Controller.Add(new CWiiMote()); _Controller.Add(CVocaluxeServer.Controller); foreach (IController controller in _Controller) - { controller.Init(); - } } public static void Close() { foreach (IController controller in _Controller) - { controller.Close(); - } _Controller = new List(); } @@ -62,17 +56,13 @@ namespace Vocaluxe.Base public static void Connect() { foreach (IController controller in _Controller) - { controller.Connect(); - } } public static void Disconnect() { foreach (IController controller in _Controller) - { controller.Disconnect(); - } } public static bool IsConnected() @@ -89,17 +79,12 @@ namespace Vocaluxe.Base SKeyEvent ke = new SKeyEvent(); while (controller.PollKeyEvent(ref ke)) - { _KeysPool.Add(ke); - } SMouseEvent me = new SMouseEvent(); while (controller.PollMouseEvent(ref me)) - { _MousePool.Add(me); - } } - } public static bool PollKeyEvent(ref SKeyEvent keyEvent) @@ -127,9 +112,7 @@ namespace Vocaluxe.Base public static void SetRumble(float duration) { foreach (IController controller in _Controller) - { controller.SetRumble(duration); - } } } } \ No newline at end of file diff --git a/Vocaluxe/Base/CCover.cs b/Vocaluxe/Base/CCover.cs index 30c51ef2..0c66fcf3 100644 --- a/Vocaluxe/Base/CCover.cs +++ b/Vocaluxe/Base/CCover.cs @@ -24,15 +24,14 @@ using System.Linq; using System.Text; using System.Xml; using VocaluxeLib; -using VocaluxeLib.Menu; +using VocaluxeLib.Draw; 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 _Cover = new List(); private static readonly List _CoverThemes = new List(); - 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 /// /// Returns a STexture for a given cover name. Returns "NoCover" if the cover does not exist. /// - 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; } /// @@ -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 /// 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(); } /// @@ -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 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 files = new List(); - 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); } } diff --git a/Vocaluxe/Base/CCursor.cs b/Vocaluxe/Base/CCursor.cs new file mode 100644 index 00000000..70f1c84b --- /dev/null +++ b/Vocaluxe/Base/CCursor.cs @@ -0,0 +1,157 @@ +#region license +// /* +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +// */ +#endregion + +using System; +using System.Diagnostics; +using VocaluxeLib; +using VocaluxeLib.Draw; + +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(); + } + } +} \ No newline at end of file diff --git a/Vocaluxe/Base/CDataBase.cs b/Vocaluxe/Base/CDataBase.cs index 35deea77..2e9c4b65 100644 --- a/Vocaluxe/Base/CDataBase.cs +++ b/Vocaluxe/Base/CDataBase.cs @@ -37,6 +37,7 @@ using SQLiteDataReader = Mono.Data.Sqlite.SqliteDataReader; using Community.CsharpSqlite; using VocaluxeLib; using VocaluxeLib.Songs; +using VocaluxeLib.Draw; namespace Vocaluxe.Base { @@ -912,7 +913,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 +1142,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; diff --git a/Vocaluxe/Base/CDraw.cs b/Vocaluxe/Base/CDraw.cs index f9166042..3969658a 100644 --- a/Vocaluxe/Base/CDraw.cs +++ b/Vocaluxe/Base/CDraw.cs @@ -21,6 +21,7 @@ using System; using System.Drawing; using Vocaluxe.Lib.Draw; using VocaluxeLib; +using VocaluxeLib.Draw; using VocaluxeLib.Menu; namespace Vocaluxe.Base @@ -125,12 +126,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 +141,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); } diff --git a/Vocaluxe/Base/CGraphics.cs b/Vocaluxe/Base/CGraphics.cs index df205d9d..f531a3c7 100644 --- a/Vocaluxe/Base/CGraphics.cs +++ b/Vocaluxe/Base/CGraphics.cs @@ -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 } } \ No newline at end of file diff --git a/Vocaluxe/Base/CLanguage.cs b/Vocaluxe/Base/CLanguage.cs index 7482ffba..ede9e021 100644 --- a/Vocaluxe/Base/CLanguage.cs +++ b/Vocaluxe/Base/CLanguage.cs @@ -24,7 +24,6 @@ using System.Linq; using System.Text; using System.Xml; using VocaluxeLib; -using VocaluxeLib.Menu; namespace Vocaluxe.Base { diff --git a/Vocaluxe/Base/CMain.cs b/Vocaluxe/Base/CMain.cs index 852f731a..cd0ad057 100644 --- a/Vocaluxe/Base/CMain.cs +++ b/Vocaluxe/Base/CMain.cs @@ -24,8 +24,8 @@ 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; using VocaluxeLib.Profile; @@ -233,12 +233,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 +341,7 @@ namespace Vocaluxe.Base CBackgroundMusic.ApplyVolume(); } - public STexture GetVideoTexture() + public CTexture GetVideoTexture() { return CBackgroundMusic.GetVideoTexture(); } @@ -349,32 +349,32 @@ 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); } - public STexture AddTexture(string fileName) + public CTexture AddTexture(string fileName) { return CDraw.AddTexture(fileName); } - public void RemoveTexture(ref STexture texture) + public void RemoveTexture(ref CTexture texture) { CDraw.RemoveTexture(ref texture); } @@ -686,27 +686,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 +765,7 @@ namespace Vocaluxe.Base class CBcover : ICover { - public STexture GetNoCover() + public CTexture GetNoCover() { return CCover.NoCover; } @@ -773,7 +773,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); } diff --git a/Vocaluxe/Base/CParty.cs b/Vocaluxe/Base/CParty.cs index f2b87093..461f2269 100644 --- a/Vocaluxe/Base/CParty.cs +++ b/Vocaluxe/Base/CParty.cs @@ -302,6 +302,7 @@ namespace Vocaluxe.Base return pm; } pm.PartyMode.Initialize(); + pm.PartyMode.SetFolder(Path.Combine(Directory.GetCurrentDirectory(), Path.Combine(CSettings.FolderPartyModes, pm.Folder))); if (!CTheme.AddTheme(Path.Combine(Directory.GetCurrentDirectory(), Path.Combine(Path.Combine(CSettings.FolderPartyModes, pm.Folder), "Theme.xml")), pm.PartyModeID)) return pm; diff --git a/Vocaluxe/Base/CPlaylists.cs b/Vocaluxe/Base/CPlaylists.cs index 8c6cb840..1dc0493b 100644 --- a/Vocaluxe/Base/CPlaylists.cs +++ b/Vocaluxe/Base/CPlaylists.cs @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; +using System.Linq; using System.Text; using Vocaluxe.Lib.Playlist; using VocaluxeLib; @@ -40,13 +41,7 @@ namespace Vocaluxe.Base public static List PlaylistNames { - get - { - List names = new List(); - for (int i = 0; i < _Playlists.Count; i++) - names.Add(_Playlists[i].PlaylistName); - return names; - } + get { return _Playlists.Select(t => t.PlaylistName).ToList(); } } public static int NumPlaylists diff --git a/Vocaluxe/Base/CProfiles.cs b/Vocaluxe/Base/CProfiles.cs index 0143edaf..5c7ec480 100644 --- a/Vocaluxe/Base/CProfiles.cs +++ b/Vocaluxe/Base/CProfiles.cs @@ -20,11 +20,9 @@ using System; using System.Collections.Generic; using System.IO; -using System.Text; -using System.Xml; using VocaluxeLib; -using VocaluxeLib.Game; using VocaluxeLib.Profile; +using VocaluxeLib.Draw; namespace Vocaluxe.Base { @@ -36,12 +34,12 @@ namespace Vocaluxe.Base Profile = 4 } - public delegate void ProfileChangedCallback(EProfileChangedFlags TypeChanged); + public delegate void ProfileChangedCallback(EProfileChangedFlags typeChanged); static class CProfiles { #region enums and structs - enum EAction + private enum EAction { LoadProfiles, LoadAvatars, @@ -52,7 +50,7 @@ namespace Vocaluxe.Base EditAvatar } - struct SChange + private struct SChange { public CProfile Profile; public CAvatar Avatar; @@ -68,12 +66,12 @@ namespace Vocaluxe.Base private static Dictionary _Avatars; private static Queue _AvatarIDs; - private static Queue _Queue = new Queue(); - private static Object _QueueMutex = new Object(); + private static readonly Queue _Queue = new Queue(); + private static readonly Object _QueueMutex = new Object(); - private static List _ProfileChangedCallbacks = new List(); - private static bool _ProfilesChanged = false; - private static bool _AvatarsChanged = false; + private static readonly List _ProfileChangedCallbacks = new List(); + private static bool _ProfilesChanged; + private static bool _AvatarsChanged; #endregion private vars #region properties @@ -94,16 +92,12 @@ namespace Vocaluxe.Base _Avatars = new Dictionary(); _AvatarIDs = new Queue(1000); for (int i = 0; i < 1000; i++) - { _AvatarIDs.Enqueue(i); - } _Profiles = new Dictionary(); _ProfileIDs = new Queue(100); for (int i = 0; i < 100; i++) - { _ProfileIDs.Enqueue(i); - } LoadProfiles(); } @@ -144,7 +138,7 @@ namespace Vocaluxe.Base if (change.Profile == null) break; - if (!ICProfileIDValid(change.Profile.ID)) + if (!IsProfileIDValid(change.Profile.ID)) return; _Profiles[change.Profile.ID] = change.Profile; @@ -152,7 +146,7 @@ namespace Vocaluxe.Base break; case EAction.DeleteProfile: - if (!ICProfileIDValid(change.ProfileID)) + if (!IsProfileIDValid(change.ProfileID)) break; _DeleteProfile(change.ProfileID); @@ -172,15 +166,12 @@ namespace Vocaluxe.Base if (change.Avatar == null) break; - if (!ICAvatarIDValid(change.Avatar.ID)) + if (!IsAvatarIDValid(change.Avatar.ID)) return; _Avatars[change.Avatar.ID] = change.Avatar; _AvatarsChanged = true; break; - - default: - break; } } } @@ -216,15 +207,14 @@ namespace Vocaluxe.Base _ProfilesChanged = false; } - public static void AddProfileChangedCallback(ProfileChangedCallback Notification) + public static void AddProfileChangedCallback(ProfileChangedCallback notification) { - _ProfileChangedCallbacks.Add(Notification); + _ProfileChangedCallbacks.Add(notification); } public static void LoadProfiles() { - SChange change = new SChange(); - change.Action = EAction.LoadProfiles; + SChange change = new SChange {Action = EAction.LoadProfiles}; lock (_QueueMutex) { @@ -234,8 +224,7 @@ namespace Vocaluxe.Base public static void LoadAvatars() { - SChange change = new SChange(); - change.Action = EAction.LoadAvatars; + SChange change = new SChange {Action = EAction.LoadAvatars}; lock (_QueueMutex) { @@ -243,14 +232,12 @@ namespace Vocaluxe.Base } } - public static void AddProfile(CProfile NewProfile) + public static void AddProfile(CProfile newProfile) { - if (NewProfile == null) + if (newProfile == null) return; - SChange change = new SChange(); - change.Action = EAction.AddProfile; - change.Profile = NewProfile; + SChange change = new SChange {Action = EAction.AddProfile, Profile = newProfile}; lock (_QueueMutex) { @@ -258,14 +245,12 @@ namespace Vocaluxe.Base } } - public static void EditProfile(CProfile EditProfile) + public static void EditProfile(CProfile editProfile) { - if (EditProfile == null) + if (editProfile == null) return; - SChange change = new SChange(); - change.Action = EAction.EditProfile; - change.Profile = EditProfile; + SChange change = new SChange {Action = EAction.EditProfile, Profile = editProfile}; lock (_QueueMutex) { @@ -275,12 +260,10 @@ namespace Vocaluxe.Base public static void DeleteProfile(int profileID) { - if (!ICProfileIDValid(profileID)) + if (!IsProfileIDValid(profileID)) return; - SChange change = new SChange(); - change.Action = EAction.DeleteProfile; - change.ProfileID = profileID; + SChange change = new SChange {Action = EAction.DeleteProfile, ProfileID = profileID}; lock (_QueueMutex) { @@ -288,14 +271,12 @@ namespace Vocaluxe.Base } } - public static void AddAvatar(CAvatar NewAvatar) + public static void AddAvatar(CAvatar newAvatar) { - if (NewAvatar == null) + if (newAvatar == null) return; - SChange change = new SChange(); - change.Action = EAction.AddAvatar; - change.Avatar = NewAvatar; + SChange change = new SChange {Action = EAction.AddAvatar, Avatar = newAvatar}; lock (_QueueMutex) { @@ -303,50 +284,40 @@ namespace Vocaluxe.Base } } - public static void EditAvatar(CAvatar EditAvatar) + public static void EditAvatar(CAvatar editAvatar) { - if (EditAvatar == null) + if (editAvatar == null) return; - SChange change = new SChange(); - change.Action = EAction.EditAvatar; - change.Avatar = EditAvatar; + SChange change = new SChange {Action = EAction.EditAvatar, Avatar = editAvatar}; lock (_QueueMutex) { _Queue.Enqueue(change); } } - + public static CProfile[] GetProfiles() { - List list = new List(); - if (_Profiles.Count == 0) - return null; + return null; - CProfile[] result = new CProfile[_Profiles.Count]; - _Profiles.Values.CopyTo(result, 0); - for (int i = 0; i < result.Length; i++) - { - list.Add(result[i]); - } + List list = new List(_Profiles.Values); list.Sort(_CompareByPlayerName); return list.ToArray(); } - public static CAvatar[] GetAvatars() + public static IEnumerable GetAvatars() { - CAvatar[] result = null; if (_Avatars.Count == 0) return null; - - result = new CAvatar[_Avatars.Count]; + + CAvatar[] result = new CAvatar[_Avatars.Count]; _Avatars.Values.CopyTo(result, 0); return result; } - + public static int NewProfile(string fileName = "") { CProfile profile = new CProfile @@ -378,17 +349,15 @@ namespace Vocaluxe.Base public static void SaveProfiles() { foreach (int id in _Profiles.Keys) - { _Profiles[id].SaveProfile(); - } } - public static bool ICProfileIDValid(int profileID) + public static bool IsProfileIDValid(int profileID) { return _Profiles.ContainsKey(profileID); } - public static bool ICAvatarIDValid(int avatarID) + public static bool IsAvatarIDValid(int avatarID) { return _Avatars.ContainsKey(avatarID); } @@ -397,7 +366,7 @@ namespace Vocaluxe.Base #region profile properties public static string GetPlayerName(int profileID, int playerNum = 0) { - if (ICProfileIDValid(profileID)) + if (IsProfileIDValid(profileID)) return _Profiles[profileID].PlayerName; string playerName = CLanguage.Translate("TR_SCREENNAMES_PLAYER"); @@ -406,25 +375,25 @@ namespace Vocaluxe.Base return playerName; } - public static void SetPlayerName(int profileID, string PlayerName) + public static void SetPlayerName(int profileID, string playerName) { - if (!ICProfileIDValid(profileID)) + if (!IsProfileIDValid(profileID)) return; - _Profiles[profileID].PlayerName = PlayerName; + _Profiles[profileID].PlayerName = playerName; } public static string GetProfileFileName(int profileID) { - if (!ICProfileIDValid(profileID)) + if (!IsProfileIDValid(profileID)) return String.Empty; return Path.GetFileName(_Profiles[profileID].FileName); - } + } public static string AddGetPlayerName(int profileID, char chr) { - if (!ICProfileIDValid(profileID)) + if (!IsProfileIDValid(profileID)) return String.Empty; _Profiles[profileID].PlayerName += chr; @@ -433,11 +402,11 @@ namespace Vocaluxe.Base public static string GetDeleteCharInPlayerName(int profileID) { - if (!ICProfileIDValid(profileID)) + if (!IsProfileIDValid(profileID)) 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; @@ -445,12 +414,12 @@ namespace Vocaluxe.Base public static EGameDifficulty GetDifficulty(int profileID) { - return ICProfileIDValid(profileID) ? _Profiles[profileID].Difficulty : EGameDifficulty.TR_CONFIG_NORMAL; + return IsProfileIDValid(profileID) ? _Profiles[profileID].Difficulty : EGameDifficulty.TR_CONFIG_NORMAL; } public static void SetDifficulty(int profileID, EGameDifficulty difficulty) { - if (!ICProfileIDValid(profileID)) + if (!IsProfileIDValid(profileID)) return; _Profiles[profileID].Difficulty = difficulty; @@ -458,12 +427,12 @@ namespace Vocaluxe.Base public static EOffOn GetGuestProfile(int profileID) { - return ICProfileIDValid(profileID) ? _Profiles[profileID].GuestProfile : EOffOn.TR_CONFIG_OFF; + return IsProfileIDValid(profileID) ? _Profiles[profileID].GuestProfile : EOffOn.TR_CONFIG_OFF; } public static void SetGuestProfile(int profileID, EOffOn option) { - if (!ICProfileIDValid(profileID)) + if (!IsProfileIDValid(profileID)) return; _Profiles[profileID].GuestProfile = option; @@ -471,12 +440,12 @@ namespace Vocaluxe.Base public static EOffOn GetActive(int profileID) { - return ICProfileIDValid(profileID) ? _Profiles[profileID].Active : EOffOn.TR_CONFIG_OFF; + return IsProfileIDValid(profileID) ? _Profiles[profileID].Active : EOffOn.TR_CONFIG_OFF; } - + public static void SetActive(int profileID, EOffOn option) { - if (!ICProfileIDValid(profileID)) + if (!IsProfileIDValid(profileID)) return; _Profiles[profileID].Active = option; @@ -484,7 +453,7 @@ namespace Vocaluxe.Base public static bool IsGuestProfile(int profileID) { - if (!ICProfileIDValid(profileID)) + if (!IsProfileIDValid(profileID)) return true; // this will prevent from saving dummy profiles to highscore db return _Profiles[profileID].GuestProfile == EOffOn.TR_CONFIG_ON; @@ -492,14 +461,14 @@ namespace Vocaluxe.Base public static bool IsActive(int profileID) { - if (!ICProfileIDValid(profileID)) + if (!IsProfileIDValid(profileID)) return false; return _Profiles[profileID].Active == EOffOn.TR_CONFIG_ON; } public static void SetAvatar(int profileID, int avatarID) { - if (!ICProfileIDValid(profileID) || !ICAvatarIDValid(avatarID)) + if (!IsProfileIDValid(profileID) || !IsAvatarIDValid(avatarID)) return; _Profiles[profileID].Avatar = _Avatars[avatarID]; @@ -507,7 +476,7 @@ namespace Vocaluxe.Base public static int GetAvatarID(int profileID) { - if (!ICProfileIDValid(profileID)) + if (!IsProfileIDValid(profileID)) return -1; return _Profiles[profileID].Avatar.ID; @@ -515,18 +484,18 @@ namespace Vocaluxe.Base #endregion profile properties #region avatar texture - public static STexture GetAvatarTexture(int avatarID) + public static CTexture GetAvatarTexture(int avatarID) { - if (!ICAvatarIDValid(avatarID)) - return new STexture(-1); + if (!IsAvatarIDValid(avatarID)) + return null; return _Avatars[avatarID].Texture; } - public static STexture GetAvatarTextureFromProfile(int profileID) + public static CTexture GetAvatarTextureFromProfile(int profileID) { - if (!ICProfileIDValid(profileID)) - return new STexture(-1); + if (!IsProfileIDValid(profileID)) + return null; return _Profiles[profileID].Avatar.Texture; } @@ -542,15 +511,15 @@ namespace Vocaluxe.Base { int[] ids = new int[_Profiles.Keys.Count]; _Profiles.Keys.CopyTo(ids, 0); - for (int i = 0; i < ids.Length; i++) + foreach (int id in ids) { - if (_Profiles[ids[i]].LoadProfile()) + if (_Profiles[id].LoadProfile()) { - _Profiles[ids[i]].Avatar = _GetAvatar(_Profiles[ids[i]].AvatarFileName); - knownFiles.Add(Path.GetFileName(_Profiles[ids[i]].FileName)); + _Profiles[id].Avatar = _GetAvatar(_Profiles[id].AvatarFileName); + knownFiles.Add(Path.GetFileName(_Profiles[id].FileName)); } else - _Profiles.Remove(ids[i]); + _Profiles.Remove(id); } } @@ -563,9 +532,9 @@ namespace Vocaluxe.Base continue; CProfile profile = new CProfile - { - FileName = Path.Combine(CSettings.FolderProfiles, file) - }; + { + FileName = Path.Combine(CSettings.FolderProfiles, file) + }; if (profile.LoadProfile()) { @@ -584,12 +553,12 @@ namespace Vocaluxe.Base { int[] ids = new int[_Avatars.Keys.Count]; _Avatars.Keys.CopyTo(ids, 0); - for (int i = 0; i < ids.Length; i++) + foreach (int id in ids) { - if (_Avatars[ids[i]].Reload()) - knownFiles.Add(Path.GetFileName(_Avatars[ids[i]].FileName)); + if (_Avatars[id].Reload()) + knownFiles.Add(Path.GetFileName(_Avatars[id].FileName)); else - _Avatars.Remove(ids[i]); + _Avatars.Remove(id); } } @@ -616,7 +585,7 @@ namespace Vocaluxe.Base private static void _DeleteProfile(int profileID) { - if (!ICProfileIDValid(profileID)) + if (!IsProfileIDValid(profileID)) return; if (_Profiles[profileID].FileName == "") @@ -657,7 +626,7 @@ namespace Vocaluxe.Base private static void _RemoveProfile(int profileID) { - if (!ICProfileIDValid(profileID)) + if (!IsProfileIDValid(profileID)) return; _Profiles.Remove(profileID); @@ -671,11 +640,11 @@ namespace Vocaluxe.Base private static CAvatar _GetAvatar(string fileName) { - string Name = Path.GetFileName(fileName); + string name = Path.GetFileName(fileName); foreach (int id in _Avatars.Keys) { - if (Path.GetFileName(_Avatars[id].FileName) == Name) + if (Path.GetFileName(_Avatars[id].FileName) == name) return _Avatars[id]; } return new CAvatar(-1); diff --git a/Vocaluxe/Base/CSongCategorizer.cs b/Vocaluxe/Base/CSongCategorizer.cs index 7a43c210..aba5bb88 100644 --- a/Vocaluxe/Base/CSongCategorizer.cs +++ b/Vocaluxe/Base/CSongCategorizer.cs @@ -21,7 +21,6 @@ using System; using System.Collections.Generic; using System.Text; using VocaluxeLib; -using VocaluxeLib.Menu.SongMenu; using VocaluxeLib.Songs; namespace Vocaluxe.Base diff --git a/Vocaluxe/Base/CSongSorter.cs b/Vocaluxe/Base/CSongSorter.cs index 6409d833..161f3eb4 100644 --- a/Vocaluxe/Base/CSongSorter.cs +++ b/Vocaluxe/Base/CSongSorter.cs @@ -140,7 +140,9 @@ namespace Vocaluxe.Base sortList.Add(new CSongPointer(song.ID, "")); else { + // ReSharper disable LoopCanBeConvertedToQuery foreach (String sortString in values) + // ReSharper restore LoopCanBeConvertedToQuery sortList.Add(new CSongPointer(song.ID, sortString)); } } diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs index d49b5cef..05f7ac31 100644 --- a/Vocaluxe/Base/CSongs.cs +++ b/Vocaluxe/Base/CSongs.cs @@ -23,8 +23,6 @@ using System.Collections.ObjectModel; using System.Linq; using System.Threading; using VocaluxeLib; -using VocaluxeLib.Menu; -using VocaluxeLib.Menu.SongMenu; using VocaluxeLib.Songs; namespace Vocaluxe.Base @@ -256,7 +254,9 @@ namespace Vocaluxe.Base List songs = new List(); if (_IsCatIndexValid(_CatIndex)) { + // ReSharper disable LoopCanBeConvertedToQuery foreach (CSongPointer sp in Categories[_CatIndex].Songs) + // ReSharper restore LoopCanBeConvertedToQuery { if (!sp.IsSung) songs.Add(_Songs[sp.SongID]); diff --git a/Vocaluxe/Base/CTheme.cs b/Vocaluxe/Base/CTheme.cs index e032dcbc..9461dbda 100644 --- a/Vocaluxe/Base/CTheme.cs +++ b/Vocaluxe/Base/CTheme.cs @@ -25,7 +25,7 @@ using System.Windows.Forms; using System.Xml; using Vocaluxe.Base.Fonts; using VocaluxeLib; -using VocaluxeLib.Menu; +using VocaluxeLib.Draw; namespace Vocaluxe.Base { @@ -49,7 +49,7 @@ namespace Vocaluxe.Base public string Name; public string Value; - public STexture Texture; + public CTexture Texture; public int VideoIndex; } @@ -112,7 +112,9 @@ namespace Vocaluxe.Base get { List names = new List(); + // ReSharper disable LoopCanBeConvertedToQuery foreach (STheme th in _Themes) + // ReSharper restore LoopCanBeConvertedToQuery { if (th.PartyModeID == -1) names.Add(th.Name); @@ -127,7 +129,9 @@ namespace Vocaluxe.Base get { List names = new List(); + // ReSharper disable LoopCanBeConvertedToQuery foreach (SSkin sk in _Skins) + // ReSharper restore LoopCanBeConvertedToQuery { if (sk.PartyModeID == -1) names.Add(sk.Name); @@ -200,10 +204,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 +229,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 +584,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 +609,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 +622,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 +646,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 +669,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 +813,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 +875,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 +889,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]; diff --git a/Vocaluxe/Base/CVideo.cs b/Vocaluxe/Base/CVideo.cs index cd9e89f4..031bc6b6 100644 --- a/Vocaluxe/Base/CVideo.cs +++ b/Vocaluxe/Base/CVideo.cs @@ -21,6 +21,7 @@ using System.Diagnostics; using System.Drawing; using Vocaluxe.Lib.Video; using VocaluxeLib; +using VocaluxeLib.Draw; namespace Vocaluxe.Base { @@ -50,12 +51,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 +61,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 +117,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 +130,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 +162,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 +178,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; diff --git a/Vocaluxe/Base/CWebcam.cs b/Vocaluxe/Base/CWebcam.cs index c30787f1..a42b6459 100644 --- a/Vocaluxe/Base/CWebcam.cs +++ b/Vocaluxe/Base/CWebcam.cs @@ -20,6 +20,7 @@ using System.Drawing; using Vocaluxe.Lib.Webcam; using VocaluxeLib; +using VocaluxeLib.Draw; namespace Vocaluxe.Base { @@ -46,10 +47,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() diff --git a/Vocaluxe/Base/Fonts/CFont.cs b/Vocaluxe/Base/Fonts/CFont.cs index 73216784..e01c3b2b 100644 --- a/Vocaluxe/Base/Fonts/CFont.cs +++ b/Vocaluxe/Base/Fonts/CFont.cs @@ -22,7 +22,7 @@ using System.Collections.Generic; using System.Drawing; using System.Drawing.Text; using VocaluxeLib; -using VocaluxeLib.Menu; +using VocaluxeLib.Draw; namespace Vocaluxe.Base.Fonts { @@ -87,7 +87,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 +95,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 +103,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); diff --git a/Vocaluxe/Base/Fonts/CFonts.cs b/Vocaluxe/Base/Fonts/CFonts.cs index cee81df5..1de2f929 100644 --- a/Vocaluxe/Base/Fonts/CFonts.cs +++ b/Vocaluxe/Base/Fonts/CFonts.cs @@ -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; diff --git a/Vocaluxe/Base/Fonts/CGlyph.cs b/Vocaluxe/Base/Fonts/CGlyph.cs index f61f0c88..ba136617 100644 --- a/Vocaluxe/Base/Fonts/CGlyph.cs +++ b/Vocaluxe/Base/Fonts/CGlyph.cs @@ -24,12 +24,13 @@ using System.Drawing.Imaging; using System.Drawing.Text; using System.Runtime.InteropServices; using VocaluxeLib; +using VocaluxeLib.Draw; 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 +122,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 +130,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 +148,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(); @@ -215,10 +218,16 @@ namespace Vocaluxe.Base.Fonts } //Add some additional space. Textures need some extra pixel for resizing. - int d = 4; - minX = minX - d; if (minX < 0) minX = 0; - minY = minY - d; if (minY < 0) minY = 0; - maxX = maxX + d; if (maxX > bmp.Width) maxX = bmp.Width; + const int d = 4; + minX = minX - d; + if (minX < 0) + minX = 0; + minY = minY - d; + if (minY < 0) + minY = 0; + maxX = maxX + d; + if (maxX > bmp.Width) + maxX = bmp.Width; return new Rectangle(minX, minY, maxX - minX, bmp.Height - minY); } diff --git a/Vocaluxe/Base/Server/CClientHandler.cs b/Vocaluxe/Base/Server/CClientHandler.cs index dc787c59..a63939f9 100644 --- a/Vocaluxe/Base/Server/CClientHandler.cs +++ b/Vocaluxe/Base/Server/CClientHandler.cs @@ -1,24 +1,33 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows.Forms; - -using Vocaluxe.Base; -using Vocaluxe.Lib.Input; -using VocaluxeLib.Menu; +#region license +// /* +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +// */ +#endregion namespace Vocaluxe.Base.Server { - internal class CClientHandler + class CClientHandler { public int ConnectionID; public bool LoggedIn; - public CClientHandler(int ConnectionID) + public CClientHandler(int connectionID) { - this.ConnectionID = ConnectionID; + ConnectionID = connectionID; LoggedIn = false; } } -} +} \ No newline at end of file diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index 1351d769..e50e1247 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -1,4 +1,23 @@ -using System; +#region license +// /* +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +// */ +#endregion + +using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; @@ -7,9 +26,7 @@ using System.Linq; using System.IO; using System.Text; using System.Windows.Forms; - using ClientServerLib; -using Vocaluxe.Base; using Vocaluxe.Lib.Input; using VocaluxeLib; using VocaluxeLib.Profile; @@ -22,7 +39,7 @@ namespace Vocaluxe.Base.Server private static CDiscover _Discover; private static Dictionary _Clients; - public static CControllerFramework Controller = new CControllerFramework(); + public static readonly CControllerFramework Controller = new CControllerFramework(); public static void Init() { @@ -48,46 +65,46 @@ namespace Vocaluxe.Base.Server _Clients = new Dictionary(); } - private static byte[] RequestHandler(int ConnectionID, byte[] Message) + private static byte[] RequestHandler(int connectionID, byte[] message) { byte[] answer = CCommands.CreateCommandWithoutParams(CCommands.ResponseNOK); - if (Message == null) + if (message == null) return answer; - if (Message.Length < 4) + if (message.Length < 4) return answer; - bool loggedIn = false; + bool loggedIn; lock (_Clients) { - if (!_Clients.ContainsKey(ConnectionID)) + if (!_Clients.ContainsKey(connectionID)) { - CClientHandler client = new CClientHandler(ConnectionID); - _Clients.Add(ConnectionID, client); + CClientHandler client = new CClientHandler(connectionID); + _Clients.Add(connectionID, client); } - loggedIn = _Clients[ConnectionID].LoggedIn; + loggedIn = _Clients[connectionID].LoggedIn; } - int command = BitConverter.ToInt32(Message, 0); + int command = BitConverter.ToInt32(message, 0); switch (command) { case CCommands.CommandLogin: SLoginData data; - if (!CCommands.DecodeCommandLogin(Message, out data)) + if (!CCommands.DecodeCommandLogin(message, out data)) answer = CCommands.CreateCommandWithoutParams(CCommands.ResponseLoginFailed); else { - byte[] serverPW = CCommands.SHA256.ComputeHash(Encoding.UTF8.GetBytes(CConfig.ServerPassword)); + byte[] serverPw = CCommands.SHA256.ComputeHash(Encoding.UTF8.GetBytes(CConfig.ServerPassword)); - if (!serverPW.SequenceEqual(data.SHA256)) + if (!serverPw.SequenceEqual(data.SHA256)) answer = CCommands.CreateCommandWithoutParams(CCommands.ResponseLoginWrongPassword); else { answer = CCommands.CreateCommandWithoutParams(CCommands.ResponseLoginOK); - _Clients[ConnectionID].LoggedIn = true; + _Clients[connectionID].LoggedIn = true; } } break; @@ -95,7 +112,7 @@ namespace Vocaluxe.Base.Server if (!loggedIn) return answer; - + switch (command) { case CCommands.CommandSendKeyUp: @@ -121,13 +138,10 @@ namespace Vocaluxe.Base.Server case CCommands.CommandSendAvatarPicture: SAvatarPicture avatarPicture; - if (CCommands.DecodeCommandSendAvatarPicture(Message, out avatarPicture)) + if (CCommands.DecodeCommandSendAvatarPicture(message, out avatarPicture)) { - Bitmap bmp = null; - bool success = false; - try + using (Bitmap bmp = new Bitmap(avatarPicture.Width, avatarPicture.Height)) { - bmp = new Bitmap(avatarPicture.Width, avatarPicture.Height); BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); Marshal.Copy(avatarPicture.data, 0, bmpData.Scan0, avatarPicture.data.Length); bmp.UnlockBits(bmpData); @@ -137,23 +151,16 @@ namespace Vocaluxe.Base.Server while (File.Exists(Path.Combine(CSettings.FolderProfiles, filename + i + ".png"))) i++; bmp.Save(Path.Combine(CSettings.FolderProfiles, filename + i + ".png"), ImageFormat.Png); - success = true; - } - finally - { - if (bmp != null) - bmp.Dispose(); } - if (success) - answer = CCommands.CreateCommandWithoutParams(CCommands.ResponseOK); + answer = CCommands.CreateCommandWithoutParams(CCommands.ResponseOK); } break; case CCommands.CommandSendAvatarPictureJpg: SAvatarPicture avatarPictureJpg; - if (CCommands.DecodeCommandSendAvatarPicture(Message, out avatarPictureJpg)) + if (CCommands.DecodeCommandSendAvatarPicture(message, out avatarPictureJpg)) { if (_AddAvatar(avatarPictureJpg.data) != String.Empty) answer = CCommands.CreateCommandWithoutParams(CCommands.ResponseOK); @@ -162,39 +169,35 @@ namespace Vocaluxe.Base.Server case CCommands.CommandSendProfile: SProfile profile; - if (CCommands.DecodeCommandSendProfile(Message, out profile)) + if (CCommands.DecodeCommandSendProfile(message, out profile)) { - try - { - string AvatarFilename = _AddAvatar(profile.Avatar.data); - if (AvatarFilename != String.Empty) + try + { + string avatarFilename = _AddAvatar(profile.Avatar.data); + if (avatarFilename != String.Empty) { - CProfile p = new CProfile(); - p.Active = EOffOn.TR_CONFIG_ON; - p.AvatarFileName = AvatarFilename; - p.Difficulty = (EGameDifficulty)profile.Difficulty; - p.GuestProfile = EOffOn.TR_CONFIG_OFF; - p.PlayerName = profile.PlayerName; + CProfile p = new CProfile + { + Active = EOffOn.TR_CONFIG_ON, + AvatarFileName = avatarFilename, + Difficulty = (EGameDifficulty)profile.Difficulty, + GuestProfile = EOffOn.TR_CONFIG_OFF, + PlayerName = profile.PlayerName + }; CProfiles.AddProfile(p); answer = CCommands.CreateCommandWithoutParams(CCommands.ResponseOK); } } - catch (Exception) - { - - } + catch (Exception) {} } break; - - default: - break; } return answer; } - private static string _AddAvatar(byte[] JpgData) + private static string _AddAvatar(byte[] jpgData) { string result = String.Empty; try @@ -206,7 +209,7 @@ namespace Vocaluxe.Base.Server filename = filename + i + ".jpg"; FileStream fs = File.Create(filename); - fs.Write(JpgData, 0, JpgData.Length); + fs.Write(jpgData, 0, jpgData.Length); fs.Flush(); fs.Close(); @@ -216,11 +219,10 @@ namespace Vocaluxe.Base.Server CProfiles.AddAvatar(avatar); result = filename; } - } - catch { } + catch {} return result; } } -} +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Draw/CDirect3D.cs b/Vocaluxe/Lib/Draw/CDirect3D.cs index 21a1a0c1..0e104ee1 100644 --- a/Vocaluxe/Lib/Draw/CDirect3D.cs +++ b/Vocaluxe/Lib/Draw/CDirect3D.cs @@ -32,13 +32,15 @@ using System.Windows.Forms; using SlimDX.Windows; using Vocaluxe.Base; using VocaluxeLib; -using VocaluxeLib.Menu; +using VocaluxeLib.Draw; 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 +53,9 @@ namespace Vocaluxe.Lib.Draw private Size _OldSize; private Size _SizeBeforeMinimize; - private readonly Dictionary _Textures; - private readonly Dictionary _D3DTextures; - private readonly List _Queue; - private readonly Queue _IDs; + private readonly Dictionary _D3DTextures = new Dictionary(); + private readonly Queue _TexturesToLoad = new Queue(); + private readonly Queue _IDs = new Queue(_MaxID); private readonly Object _MutexTexture = new Object(); @@ -66,11 +67,11 @@ namespace Vocaluxe.Lib.Draw private int _Y; private int _X; - private STexture _BlankTexture; + private CTexture _BlankTexture; - private readonly Queue _Vertices; - private readonly Queue _VerticesTextures; - private readonly Queue _VerticesRotationMatrices; + private readonly Queue _Vertices = new Queue(); + private readonly Queue _VerticesTextures = new Queue(); + private readonly Queue _VerticesRotationMatrices = new Queue(); private readonly bool _NonPowerOf2TextureSupported; #endregion private vars @@ -81,19 +82,11 @@ namespace Vocaluxe.Lib.Draw public CDirect3D() { Icon = new Icon(Path.Combine(Environment.CurrentDirectory, CSettings.Icon)); - _Textures = new Dictionary(); - _D3DTextures = new Dictionary(); - _Queue = new List(); - _IDs = new Queue(); //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(); - _VerticesTextures = new Queue(); - _VerticesRotationMatrices = new Queue(); - _Keys = new CKeys(); try { @@ -255,40 +248,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; } /// @@ -677,39 +669,32 @@ namespace Vocaluxe.Lib.Draw /// Copies the current frame into a texture /// A texture holding the current frame /// - 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; } /// /// Copies the current frame into a texture /// /// The texture in which the frame is copied to - 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 +702,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 +726,6 @@ namespace Vocaluxe.Lib.Draw screen.Save(Path.Combine(path, file + i.ToString("00000") + ".bmp"), ImageFormat.Bmp); screen.Dispose(); } - Cursor.Hide(); - _Mouse.Visible = true; } /// @@ -759,8 +742,8 @@ namespace Vocaluxe.Lib.Draw /// The end y-value 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 +783,33 @@ namespace Vocaluxe.Lib.Draw /// /// The texture's filepath /// A STexture object containing the added texture - 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; } /// @@ -834,10 +817,10 @@ namespace Vocaluxe.Lib.Draw /// /// The Bitmap of which the texure will be created from /// A STexture object containing the added texture - 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 +845,28 @@ namespace Vocaluxe.Lib.Draw break; } - int w = bmp.Width; - int h = bmp.Height; - float ratio = (float)w / h; - int newW = w; - int newH = h; + int w = Math.Min(bmp.Width, maxSize); + int h = Math.Min(bmp.Height, maxSize); + w = _CheckForNextPowerOf2(w); + h = _CheckForNextPowerOf2(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); + CTexture texture = new CTexture(bmp.Width, bmp.Height, w, h, true); 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 +882,73 @@ namespace Vocaluxe.Lib.Draw bmp2.Dispose(); } - return AddTexture(w, h, data); + 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 = 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 +956,30 @@ namespace Vocaluxe.Lib.Draw /// Updates the data of a texture /// /// The texture to update + /// + /// /// A byte array containing the new texture's data /// True if succeeded - 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 +988,30 @@ namespace Vocaluxe.Lib.Draw /// /// The texture to check /// True if the texture exists - 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; } /// /// Removes a texture from the Vram /// /// The texture to be removed - 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 +1019,10 @@ namespace Vocaluxe.Lib.Draw /// Draws a texture /// /// The texture to be drawn - public void DrawTexture(STexture texture) + public void DrawTexture(CTexture texture) { + if (texture == null) + return; DrawTexture(texture, texture.Rect, texture.Color); } @@ -1103,8 +1031,10 @@ namespace Vocaluxe.Lib.Draw /// /// The texture to be drawn /// A SRectF struct containing the destination coordinates - 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 +1045,7 @@ namespace Vocaluxe.Lib.Draw /// A SRectF struct containing the destination coordinates /// A SColorF struct containing a color which the texture will be colored in /// True if the texture should be mirrored - 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 +1058,85 @@ namespace Vocaluxe.Lib.Draw /// A SColorF struct containing a color which the texture will be colored in /// A SRectF struct containing which part of the texture should be drawn /// True if the texture should be 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 (_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 +1148,11 @@ namespace Vocaluxe.Lib.Draw /// A SColorF struct containing a color which the texture will be colored in /// A Value ranging from 0 to 1 containing the beginning of the texture /// A Value ranging from 0 to 1 containing the ending of the texture - 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 +1180,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)); } /// @@ -1263,11 +1192,11 @@ namespace Vocaluxe.Lib.Draw /// A SRectF struct containing which part of the texture should be drawn /// The space between the texture and the reflection /// The height of the reflection - 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 +1212,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 +1271,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 +1290,7 @@ namespace Vocaluxe.Lib.Draw /// The amount of textures public int GetTextureCount() { - return _Textures.Count; + return _D3DTextures.Count; } #endregion Textures @@ -1381,13 +1302,13 @@ namespace Vocaluxe.Lib.Draw /// /// The value of which the next power of two will be calculated /// The next power of two - 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) diff --git a/Vocaluxe/Lib/Draw/CDrawWinForm.cs b/Vocaluxe/Lib/Draw/CDrawWinForm.cs index 5da213ee..0c0c9ac1 100644 --- a/Vocaluxe/Lib/Draw/CDrawWinForm.cs +++ b/Vocaluxe/Lib/Draw/CDrawWinForm.cs @@ -28,7 +28,7 @@ using System.Threading; using System.Windows.Forms; using Vocaluxe.Base; using VocaluxeLib; -using VocaluxeLib.Menu; +using VocaluxeLib.Draw; namespace Vocaluxe.Lib.Draw { @@ -46,8 +46,8 @@ namespace Vocaluxe.Lib.Draw private bool _TopMost; private Rectangle _Bounds; - private readonly List _Textures; - private readonly List _Bitmaps; + private readonly Dictionary _Textures = new Dictionary(); + private readonly List _Bitmaps = new List(); private readonly Color _ClearColor = Color.DarkBlue; @@ -55,9 +55,6 @@ namespace Vocaluxe.Lib.Draw { Icon = new Icon(Path.Combine(Environment.CurrentDirectory, CSettings.Icon)); - _Textures = new List(); - _Bitmaps = new List(); - _Keys = new CKeys(); _Mouse = new CMouse(); ClientSize = new Size(1280, 720); @@ -290,34 +287,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 +331,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 +398,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() { diff --git a/Vocaluxe/Lib/Draw/COpenGL.cs b/Vocaluxe/Lib/Draw/COpenGL.cs index d4a123b2..e2cc99d8 100644 --- a/Vocaluxe/Lib/Draw/COpenGL.cs +++ b/Vocaluxe/Lib/Draw/COpenGL.cs @@ -31,7 +31,7 @@ using System.Runtime.InteropServices; using System.Windows.Forms; using Vocaluxe.Base; using VocaluxeLib; -using VocaluxeLib.Menu; +using VocaluxeLib.Draw; using BeginMode = OpenTK.Graphics.OpenGL.BeginMode; using BlendingFactorDest = OpenTK.Graphics.OpenGL.BlendingFactorDest; using BlendingFactorSrc = OpenTK.Graphics.OpenGL.BlendingFactorSrc; @@ -65,15 +65,29 @@ namespace Vocaluxe.Lib.Draw struct STextureQueue { - public int ID; - public int Width; - public int Height; - public byte[] Data; + public readonly int ID; + public readonly int TextureWidth; + public readonly int TextureHeight; + public readonly int DataWidth; + public readonly int DataHeight; + public readonly byte[] Data; + + public STextureQueue(int id, int textureWidth, int textureHeight, int dataWidth, int dataHeight, byte[] data) + { + ID = id; + TextureWidth = textureWidth; + TextureHeight = textureHeight; + DataWidth = dataWidth; + DataHeight = dataHeight; + Data = data; + } } class COpenGL : Form, IDraw { #region private vars + private const int _MaxID = 100000; + private readonly CKeys _Keys; private readonly CMouse _Mouse; private bool _Run; @@ -83,9 +97,9 @@ namespace Vocaluxe.Lib.Draw private SClientRect _Restore; private bool _Fullscreen; - private readonly Dictionary _Textures; - private readonly Queue _IDs; - private readonly List _Queue; + private readonly Dictionary _Textures = new Dictionary(); + private readonly Queue _IDs = new Queue(_MaxID); + private readonly Queue _TexturesToLoad = new Queue(); private readonly Object _MutexTexture = new Object(); @@ -101,11 +115,7 @@ namespace Vocaluxe.Lib.Draw { Icon = new Icon(Path.Combine(Environment.CurrentDirectory, CSettings.Icon)); - _Textures = new Dictionary(); - _Queue = new List(); - _IDs = new Queue(1000000); - - for (int i = 1; i < 1000000; i++) + for (int i = 1; i < _MaxID; i++) _IDs.Enqueue(i); //Check AA Mode @@ -429,32 +439,29 @@ namespace Vocaluxe.Lib.Draw while (_Run) { + ClearScreen(); + if (!CGraphics.Draw()) + _Run = false; + if (!CGraphics.UpdateGameLogic(_Keys, _Mouse)) + _Run = false; + + _Control.SwapBuffers(); + + if (CSettings.IsFullScreen != _Fullscreen) + _ToggleFullScreen(); + + _CheckQueue(); + + if (CTime.IsRunning()) + delay = (int)Math.Floor(CConfig.CalcCycleTime() - CTime.GetMilliseconds()); + + if (delay >= 1 && CConfig.VSync == EOffOn.TR_CONFIG_OFF) + Thread.Sleep(delay); + + CTime.CalculateFPS(); + CTime.Restart(); + Application.DoEvents(); - - if (_Run) - { - ClearScreen(); - if (!CGraphics.Draw()) - _Run = false; - if (!CGraphics.UpdateGameLogic(_Keys, _Mouse)) - _Run = false; - - _Control.SwapBuffers(); - - if ((CSettings.IsFullScreen && !_Fullscreen) || (!CSettings.IsFullScreen && _Fullscreen)) - _ToggleFullScreen(); - - _CheckQueue(); - - if (CTime.IsRunning()) - delay = (int)Math.Floor(CConfig.CalcCycleTime() - CTime.GetMilliseconds()); - - if (delay >= 1 && CConfig.VSync == EOffOn.TR_CONFIG_OFF) - Thread.Sleep(delay); - - CTime.CalculateFPS(); - CTime.Restart(); - } } Close(); } @@ -466,7 +473,7 @@ namespace Vocaluxe.Lib.Draw Close(); } catch {} - STexture[] textures = new STexture[_Textures.Count]; + CTexture[] textures = new CTexture[_Textures.Count]; _Textures.Values.CopyTo(textures, 0); for (int i = 0; i < _Textures.Count; i++) RemoveTexture(ref textures[i]); @@ -489,25 +496,15 @@ namespace Vocaluxe.Lib.Draw GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); } - public STexture CopyScreen() + public CTexture CopyScreen() { - STexture texture = new STexture(-1); + CTexture texture = _GetNewTexture(_W, _H); - int id = GL.GenTexture(); - GL.BindTexture(TextureTarget.Texture2D, id); - texture.ID = id; + texture.Name = GL.GenTexture(); + GL.BindTexture(TextureTarget.Texture2D, texture.Name); - texture.Width = _W; - texture.Height = _H; - texture.W2 = MathHelper.NextPowerOfTwo(texture.Width); - texture.H2 = MathHelper.NextPowerOfTwo(texture.Height); - - texture.WidthRatio = texture.Width / texture.W2; - texture.HeightRatio = texture.Height / texture.H2; - - GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, (int)texture.W2, (int)texture.H2, 0, PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero); - - GL.CopyTexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, _X, _Y, (int)texture.Width, (int)texture.Height); + GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, texture.W2, texture.H2, 0, PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero); + GL.CopyTexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, _X, _Y, _W, _H); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear); @@ -515,30 +512,29 @@ namespace Vocaluxe.Lib.Draw GL.BindTexture(TextureTarget.Texture2D, 0); // Add to Texture List - texture.Color = new SColorF(1f, 1f, 1f, 1f); - texture.Rect = new SRectF(0f, 0f, texture.Width, texture.Height, 0f); lock (_MutexTexture) { - texture.Index = _IDs.Dequeue(); - _Textures[texture.Index] = texture; + texture.ID = _IDs.Dequeue(); + _Textures[texture.ID] = texture; } return texture; } - public void CopyScreen(ref STexture texture) + public void CopyScreen(ref CTexture texture) { - if (!_TextureExists(ref texture) || Math.Abs(texture.Width - GetScreenWidth()) > 1 || Math.Abs(texture.Height - GetScreenHeight()) > 1) + //Check for actual texture sizes as it may be downsized compared to OrigSize + if (!_TextureExists(texture) || texture.UsedWidth != GetScreenWidth() || texture.UsedHeight != GetScreenHeight()) { RemoveTexture(ref texture); texture = CopyScreen(); } else { - GL.BindTexture(TextureTarget.Texture2D, texture.ID); + GL.BindTexture(TextureTarget.Texture2D, texture.Name); - GL.CopyTexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, 0, 0, (int)texture.Width, (int)texture.Height); + GL.CopyTexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, 0, 0, GetScreenWidth(), GetScreenHeight()); GL.BindTexture(TextureTarget.Texture2D, 0); } @@ -651,39 +647,37 @@ namespace Vocaluxe.Lib.Draw #region Textures #region adding - 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); - } - try - { - return AddTexture(bmp); - } - finally - { - bmp.Dispose(); - } + CLog.LogError("Can't find File: " + texturePath); + return null; + } + Bitmap bmp; + try + { + bmp = new Bitmap(texturePath); + } + catch (Exception) + { + CLog.LogError("Error loading Texture: " + texturePath); + return null; + } + try + { + return AddTexture(bmp); + } + finally + { + bmp.Dispose(); } - CLog.LogError("Can't find File: " + texturePath); - return new STexture(-1); } - public STexture AddTexture(Bitmap bmp) + public CTexture AddTexture(Bitmap bmp) { - STexture texture = new STexture(-1); - if (bmp.Height == 0 || bmp.Width == 0) - return texture; + return null; int maxSize; switch (CConfig.TextureQuality) @@ -708,60 +702,40 @@ namespace Vocaluxe.Lib.Draw break; } - int w = bmp.Width; - int h = bmp.Height; + int w = Math.Min(bmp.Width, maxSize); + int h = Math.Min(bmp.Height, maxSize); + w = MathHelper.NextPowerOfTwo(w); + h = MathHelper.NextPowerOfTwo(h); - if (w > maxSize) - { - h = (int)Math.Round((float)maxSize / bmp.Width * bmp.Height); - if (h == 0) - h = 1; - w = maxSize; - } + CTexture texture = new CTexture(bmp.Width, bmp.Height, w, h, true) {Name = GL.GenTexture()}; - if (h > maxSize) - { - w = (int)Math.Round((float)maxSize / bmp.Height * bmp.Width); - if (w == 0) - w = 1; - h = maxSize; - } - - int id = GL.GenTexture(); - GL.BindTexture(TextureTarget.Texture2D, id); - texture.ID = id; - - texture.Width = w; - texture.Height = h; - - texture.W2 = MathHelper.NextPowerOfTwo(w); - texture.H2 = MathHelper.NextPowerOfTwo(h); + GL.BindTexture(TextureTarget.Texture2D, texture.Name); + Bitmap bmp2 = null; try { - using (Bitmap bmp2 = new Bitmap((int)texture.W2, (int)texture.H2)) + if (bmp.Width != w || bmp.Height != h) { - 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(); - - texture.WidthRatio = 1f; - texture.HeightRatio = 1f; - - BitmapData bmpData = bmp2.LockBits(new Rectangle(0, 0, bmp2.Width, bmp2.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); - - GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, (int)texture.W2, (int)texture.H2, 0, PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero); - - GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, bmpData.Width, bmpData.Height, PixelFormat.Bgra, PixelType.UnsignedByte, bmpData.Scan0); - - bmp2.UnlockBits(bmpData); + //Create a new Bitmap with the new sizes + bmp2 = new Bitmap(w, h); + //Scale the texture + 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; } + + BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, texture.W2, texture.H2, 0, PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero); + GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, bmpData.Width, bmpData.Height, PixelFormat.Bgra, PixelType.UnsignedByte, bmpData.Scan0); + bmp.UnlockBits(bmpData); } - catch + finally { - CLog.LogError(w + " " + h + " " + (int)texture.W2 + " " + (int)texture.H2); - throw; + if (bmp2 != null) + bmp2.Dispose(); } GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureParameterName.ClampToEdge); @@ -769,28 +743,38 @@ namespace Vocaluxe.Lib.Draw GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.LinearMipmapLinear); - //GL.GenerateMipmap(GenerateMipmapTarget.Texture2D); GL.Ext.GenerateMipmap(GenerateMipmapTarget.Texture2D); - + GL.BindTexture(TextureTarget.Texture2D, 0); // Add to Texture List - texture.Color = new SColorF(1f, 1f, 1f, 1f); - texture.Rect = new SRectF(0f, 0f, texture.Width, texture.Height, 0f); texture.TexturePath = String.Empty; lock (_MutexTexture) { - texture.Index = _IDs.Dequeue(); - _Textures[texture.Index] = texture; + texture.ID = _IDs.Dequeue(); + _Textures[texture.ID] = texture; } return texture; } - 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); + _CreateTexture(texture, w, h, data); + + lock (_MutexTexture) + { + texture.ID = _IDs.Dequeue(); + _Textures[texture.ID] = texture; + } + + return texture; + } + + private void _CreateTexture(CTexture texture, int w, int h, byte[] data) + { if (_UsePBO) { try @@ -807,161 +791,145 @@ namespace Vocaluxe.Lib.Draw } } - int id = GL.GenTexture(); - GL.BindTexture(TextureTarget.Texture2D, id); - texture.ID = id; - - texture.Width = w; - texture.Height = h; - texture.W2 = MathHelper.NextPowerOfTwo(texture.Width); - texture.H2 = MathHelper.NextPowerOfTwo(texture.Height); - - texture.WidthRatio = texture.Width / texture.W2; - texture.HeightRatio = texture.Height / texture.H2; - - GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, (int)texture.W2, (int)texture.H2, 0, PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero); + texture.Name = GL.GenTexture(); + GL.BindTexture(TextureTarget.Texture2D, texture.Name); + GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, texture.W2, texture.H2, 0, PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero); GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, w, h, PixelFormat.Bgra, PixelType.UnsignedByte, data); - - //GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureParameterName.ClampToEdge); - //GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureParameterName.ClampToEdge); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureParameterName.ClampToEdge); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureParameterName.ClampToEdge); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.LinearMipmapLinear); + GL.Ext.GenerateMipmap(GenerateMipmapTarget.Texture2D); - //GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.LinearMipmapLinear); - //GL.GenerateMipmap(GenerateMipmapTarget.Texture2D); - //GL.Ext.GenerateMipmap(GenerateMipmapTarget.Texture2D); GL.BindTexture(TextureTarget.Texture2D, 0); + } - // Add to Texture List - texture.Color = new SColorF(1f, 1f, 1f, 1f); - texture.Rect = new SRectF(0f, 0f, texture.Width, texture.Height, 0f); - texture.TexturePath = String.Empty; + public CTexture EnqueueTexture(int w, int h, byte[] data) + { + CTexture texture = _GetNewTexture(w, h); lock (_MutexTexture) { - texture.Index = _IDs.Dequeue(); - _Textures[texture.Index] = texture; + texture.ID = _IDs.Dequeue(); + STextureQueue queue = new STextureQueue(texture.ID, texture.W2, texture.H2, w, h, data); + _TexturesToLoad.Enqueue(queue); + _Textures[texture.ID] = texture; } return texture; } - public STexture EnqueueTexture(int w, int h, byte[] data) + private static CTexture _GetNewTexture(int w, int h) { - STexture texture = new STexture(-1); - STextureQueue queue = new STextureQueue {Data = data, Height = h, Width = w}; - - texture.Height = h; - texture.Width = w; - - lock (_MutexTexture) - { - texture.Index = _IDs.Dequeue(); - queue.ID = texture.Index; - _Queue.Add(queue); - _Textures[texture.Index] = texture; - } - - return texture; + return new CTexture(w, h, MathHelper.NextPowerOfTwo(w), MathHelper.NextPowerOfTwo(h)); } #endregion adding #region updating - public bool UpdateTexture(ref STexture texture, byte[] data) + public bool UpdateTexture(CTexture texture, int w, int h, byte[] data) { - if (_TextureExists(ref texture)) + //Check if texture exists and extend matches + if (!_TextureExists(texture) || texture.UsedWidth != w || texture.UsedHeight != h) + return false; + if (_UsePBO) { - if (_UsePBO) - { - GL.BindBuffer(BufferTarget.PixelUnpackBuffer, texture.PBO); + GL.BindBuffer(BufferTarget.PixelUnpackBuffer, texture.PBO); - IntPtr buffer = GL.MapBuffer(BufferTarget.PixelUnpackBuffer, BufferAccess.WriteOnly); - Marshal.Copy(data, 0, buffer, data.Length); + IntPtr buffer = GL.MapBuffer(BufferTarget.PixelUnpackBuffer, BufferAccess.WriteOnly); + Marshal.Copy(data, 0, buffer, data.Length); - GL.UnmapBuffer(BufferTarget.PixelUnpackBuffer); + GL.UnmapBuffer(BufferTarget.PixelUnpackBuffer); - GL.BindTexture(TextureTarget.Texture2D, texture.ID); - GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, (int)texture.Width, (int)texture.Height, PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero); + GL.BindTexture(TextureTarget.Texture2D, texture.Name); - GL.BindTexture(TextureTarget.Texture2D, 0); - GL.BindBuffer(BufferTarget.PixelUnpackBuffer, 0); + GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, w, h, PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero); - return true; - } + GL.Ext.GenerateMipmap(GenerateMipmapTarget.Texture2D); - GL.BindTexture(TextureTarget.Texture2D, texture.ID); - - GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, (int)texture.Width, (int)texture.Height, PixelFormat.Bgra, PixelType.UnsignedByte, data); - - //GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureParameterName.ClampToEdge); - //GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureParameterName.ClampToEdge); - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear); - - //GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.LinearMipmapLinear); - //GL.GenerateMipmap(GenerateMipmapTarget.Texture2D); - //GL.Ext.GenerateMipmap(GenerateMipmapTarget.Texture2D); GL.BindTexture(TextureTarget.Texture2D, 0); + GL.BindBuffer(BufferTarget.PixelUnpackBuffer, 0); return true; } - return false; + + GL.BindTexture(TextureTarget.Texture2D, texture.Name); + + GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, w, h, PixelFormat.Bgra, PixelType.UnsignedByte, data); + + GL.Ext.GenerateMipmap(GenerateMipmapTarget.Texture2D); + + GL.BindTexture(TextureTarget.Texture2D, 0); + + 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 - public void RemoveTexture(ref STexture texture) + public void RemoveTexture(ref CTexture texture) { - if ((texture.Index > 0) && (_Textures.Count > 0)) + if (_TextureExists(texture, false)) { lock (_MutexTexture) { - _IDs.Enqueue(texture.Index); - GL.DeleteTexture(texture.ID); + _IDs.Enqueue(texture.ID); + GL.DeleteTexture(texture.Name); if (texture.PBO > 0) GL.DeleteBuffers(1, ref texture.PBO); - _Textures.Remove(texture.Index); - texture.Index = -1; - texture.ID = -1; + _Textures.Remove(texture.ID); } } + texture = null; } - private bool _TextureExists(ref STexture texture) + private bool _TextureExists(CTexture texture, bool checkIfLoaded = true) { lock (_MutexTexture) { - if (_Textures.ContainsKey(texture.Index)) + if (texture != null && _Textures.ContainsKey(texture.ID)) { - if (_Textures[texture.Index].ID > 0) - { - texture = _Textures[texture.Index]; + if (!checkIfLoaded || _Textures[texture.ID].Name > 0) return true; - } } } return false; } #region drawing - public void DrawTexture(STexture texture) + public void DrawTexture(CTexture texture) { + if (texture == null) + return; DrawTexture(texture, texture.Rect, texture.Color); } - public void DrawTexture(STexture texture, SRectF rect) + public void DrawTexture(CTexture texture, SRectF rect) { + if (texture == null) + return; 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) { DrawTexture(texture, rect, color, new SRectF(0, 0, CSettings.RenderW, CSettings.RenderH, rect.Z), 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 (!_TextureExists(texture)) + 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 || Math.Abs(color.A) < float.Epsilon) return; @@ -972,136 +940,135 @@ namespace Vocaluxe.Lib.Draw if (bounds.Y > rect.Y + rect.H || bounds.Y + bounds.H < rect.Y) return; - if (_TextureExists(ref texture)) + GL.BindTexture(TextureTarget.Texture2D, texture.Name); + + 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; + + + 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; + + GL.Enable(EnableCap.Blend); + GL.Color4(color.R, color.G, color.B, color.A * CGraphics.GlobalAlpha); + + GL.MatrixMode(MatrixMode.Texture); + GL.PushMatrix(); + + if (Math.Abs(rect.Rotation) > float.Epsilon) { - GL.BindTexture(TextureTarget.Texture2D, texture.ID); - - 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; - - - 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; - - GL.Enable(EnableCap.Blend); - GL.Color4(color.R, color.G, color.B, color.A * CGraphics.GlobalAlpha); - - GL.MatrixMode(MatrixMode.Texture); - GL.PushMatrix(); - - if (Math.Abs(rect.Rotation) > float.Epsilon) - { - GL.Translate(0.5f, 0.5f, 0); - GL.Rotate(-rect.Rotation, 0f, 0f, 1f); - GL.Translate(-0.5f, -0.5f, 0); - } - - if (!mirrored) - { - GL.Begin(BeginMode.Quads); - - GL.TexCoord2(x1, y1); - GL.Vertex3(rx1, ry1, rect.Z + CGraphics.ZOffset); - - GL.TexCoord2(x1, y2); - GL.Vertex3(rx1, ry2, rect.Z + CGraphics.ZOffset); - - GL.TexCoord2(x2, y2); - GL.Vertex3(rx2, ry2, rect.Z + CGraphics.ZOffset); - - GL.TexCoord2(x2, y1); - GL.Vertex3(rx2, ry1, rect.Z + CGraphics.ZOffset); - - GL.End(); - } - else - { - GL.Begin(BeginMode.Quads); - - GL.TexCoord2(x2, y2); - GL.Vertex3(rx2, ry1, rect.Z + CGraphics.ZOffset); - - GL.TexCoord2(x2, y1); - GL.Vertex3(rx2, ry2, rect.Z + CGraphics.ZOffset); - - GL.TexCoord2(x1, y1); - GL.Vertex3(rx1, ry2, rect.Z + CGraphics.ZOffset); - - GL.TexCoord2(x1, y2); - GL.Vertex3(rx1, ry1, rect.Z + CGraphics.ZOffset); - - GL.End(); - } - - GL.PopMatrix(); - - GL.Disable(EnableCap.Blend); - GL.BindTexture(TextureTarget.Texture2D, 0); + GL.Translate(0.5f, 0.5f, 0); + GL.Rotate(-rect.Rotation, 0f, 0f, 1f); + GL.Translate(-0.5f, -0.5f, 0); } - } - public void DrawTexture(STexture texture, SRectF rect, SColorF color, float begin, float end) - { - if (_TextureExists(ref texture)) + if (!mirrored) { - GL.BindTexture(TextureTarget.Texture2D, texture.ID); - - GL.Enable(EnableCap.Blend); - GL.Color4(color.R, color.G, color.B, color.A * CGraphics.GlobalAlpha); - - GL.Begin(BeginMode.Quads); - GL.TexCoord2(0f + begin * texture.WidthRatio, 0f); - GL.Vertex3(rect.X + begin * rect.W, rect.Y, rect.Z + CGraphics.ZOffset); + GL.TexCoord2(x1, y1); + GL.Vertex3(rx1, ry1, rect.Z + CGraphics.ZOffset); - GL.TexCoord2(0f + begin * texture.WidthRatio, texture.HeightRatio); - GL.Vertex3(rect.X + begin * rect.W, rect.Y + rect.H, rect.Z + CGraphics.ZOffset); + GL.TexCoord2(x1, y2); + GL.Vertex3(rx1, ry2, rect.Z + CGraphics.ZOffset); - GL.TexCoord2(texture.WidthRatio * end, texture.HeightRatio); - GL.Vertex3(rect.X + end * rect.W, rect.Y + rect.H, rect.Z + CGraphics.ZOffset); + GL.TexCoord2(x2, y2); + GL.Vertex3(rx2, ry2, rect.Z + CGraphics.ZOffset); - GL.TexCoord2(texture.WidthRatio * end, 0f); - GL.Vertex3(rect.X + end * rect.W, rect.Y, rect.Z + CGraphics.ZOffset); + GL.TexCoord2(x2, y1); + GL.Vertex3(rx2, ry1, rect.Z + CGraphics.ZOffset); GL.End(); - - - GL.Disable(EnableCap.Blend); - GL.BindTexture(TextureTarget.Texture2D, 0); } + else + { + GL.Begin(BeginMode.Quads); + + GL.TexCoord2(x2, y2); + GL.Vertex3(rx2, ry1, rect.Z + CGraphics.ZOffset); + + GL.TexCoord2(x2, y1); + GL.Vertex3(rx2, ry2, rect.Z + CGraphics.ZOffset); + + GL.TexCoord2(x1, y1); + GL.Vertex3(rx1, ry2, rect.Z + CGraphics.ZOffset); + + GL.TexCoord2(x1, y2); + GL.Vertex3(rx1, ry1, rect.Z + CGraphics.ZOffset); + + GL.End(); + } + + GL.PopMatrix(); + + GL.Disable(EnableCap.Blend); + GL.BindTexture(TextureTarget.Texture2D, 0); } - public void DrawTextureReflection(STexture texture, SRectF rect, SColorF color, SRectF bounds, float space, float height) + public void DrawTexture(CTexture texture, SRectF rect, SColorF color, float begin, float end) { + if (!_TextureExists(texture)) + return; + GL.BindTexture(TextureTarget.Texture2D, texture.Name); + + GL.Enable(EnableCap.Blend); + GL.Color4(color.R, color.G, color.B, color.A * CGraphics.GlobalAlpha); + + + GL.Begin(BeginMode.Quads); + + GL.TexCoord2(0f + begin * texture.WidthRatio, 0f); + GL.Vertex3(rect.X + begin * rect.W, rect.Y, rect.Z + CGraphics.ZOffset); + + GL.TexCoord2(0f + begin * texture.WidthRatio, texture.HeightRatio); + GL.Vertex3(rect.X + begin * rect.W, rect.Y + rect.H, rect.Z + CGraphics.ZOffset); + + GL.TexCoord2(texture.WidthRatio * end, texture.HeightRatio); + GL.Vertex3(rect.X + end * rect.W, rect.Y + rect.H, rect.Z + CGraphics.ZOffset); + + GL.TexCoord2(texture.WidthRatio * end, 0f); + GL.Vertex3(rect.X + end * rect.W, rect.Y, rect.Z + CGraphics.ZOffset); + + GL.End(); + + + GL.Disable(EnableCap.Blend); + GL.BindTexture(TextureTarget.Texture2D, 0); + } + + public void DrawTextureReflection(CTexture texture, SRectF rect, SColorF color, SRectF bounds, float space, float height) + { + if (!_TextureExists(texture)) + 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 || Math.Abs(color.A) < float.Epsilon || height <= float.Epsilon) return; @@ -1115,84 +1082,81 @@ namespace Vocaluxe.Lib.Draw if (height > bounds.H) height = bounds.H; - if (_TextureExists(ref texture)) + GL.BindTexture(TextureTarget.Texture2D, texture.Name); + + 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 (x2 > texture.WidthRatio) + x2 = texture.WidthRatio; + + if (y1 < 0) + y1 = 0f; + + 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; + + if (rx1 < bounds.X) + rx1 = bounds.X; + + if (rx2 > bounds.X + bounds.W) + rx2 = bounds.X + bounds.W; + + if (ry1 < bounds.Y + space) + ry1 = bounds.Y + space; + + if (ry2 > bounds.Y + bounds.H + space + height) + ry2 = bounds.Y + bounds.H + space + height; + + GL.Enable(EnableCap.Blend); + + GL.MatrixMode(MatrixMode.Texture); + GL.PushMatrix(); + + if (Math.Abs(rect.Rotation) > float.Epsilon) { - GL.BindTexture(TextureTarget.Texture2D, texture.ID); - - 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 (x2 > texture.WidthRatio) - x2 = texture.WidthRatio; - - if (y1 < 0) - y1 = 0f; - - 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; - - if (rx1 < bounds.X) - rx1 = bounds.X; - - if (rx2 > bounds.X + bounds.W) - rx2 = bounds.X + bounds.W; - - if (ry1 < bounds.Y + space) - ry1 = bounds.Y + space; - - if (ry2 > bounds.Y + bounds.H + space + height) - ry2 = bounds.Y + bounds.H + space + height; - - GL.Enable(EnableCap.Blend); - - GL.MatrixMode(MatrixMode.Texture); - GL.PushMatrix(); - - if (Math.Abs(rect.Rotation) > float.Epsilon) - { - GL.Translate(0.5f, 0.5f, 0); - GL.Rotate(-rect.Rotation, 0f, 0f, 1f); - GL.Translate(-0.5f, -0.5f, 0); - } - - - GL.Begin(BeginMode.Quads); - - GL.Color4(color.R, color.G, color.B, color.A * CGraphics.GlobalAlpha); - GL.TexCoord2(x2, y2); - GL.Vertex3(rx2, ry1, rect.Z + CGraphics.ZOffset); - - GL.Color4(color.R, color.G, color.B, 0f); - GL.TexCoord2(x2, y1); - GL.Vertex3(rx2, ry2, rect.Z + CGraphics.ZOffset); - - GL.Color4(color.R, color.G, color.B, 0f); - GL.TexCoord2(x1, y1); - GL.Vertex3(rx1, ry2, rect.Z + CGraphics.ZOffset); - - GL.Color4(color.R, color.G, color.B, color.A * CGraphics.GlobalAlpha); - GL.TexCoord2(x1, y2); - GL.Vertex3(rx1, ry1, rect.Z + CGraphics.ZOffset); - - GL.End(); - - - GL.PopMatrix(); - - GL.Disable(EnableCap.Blend); - GL.BindTexture(TextureTarget.Texture2D, 0); + GL.Translate(0.5f, 0.5f, 0); + GL.Rotate(-rect.Rotation, 0f, 0f, 1f); + GL.Translate(-0.5f, -0.5f, 0); } + + + GL.Begin(BeginMode.Quads); + + GL.Color4(color.R, color.G, color.B, color.A * CGraphics.GlobalAlpha); + GL.TexCoord2(x2, y2); + GL.Vertex3(rx2, ry1, rect.Z + CGraphics.ZOffset); + + GL.Color4(color.R, color.G, color.B, 0f); + GL.TexCoord2(x2, y1); + GL.Vertex3(rx2, ry2, rect.Z + CGraphics.ZOffset); + + GL.Color4(color.R, color.G, color.B, 0f); + GL.TexCoord2(x1, y1); + GL.Vertex3(rx1, ry2, rect.Z + CGraphics.ZOffset); + + GL.Color4(color.R, color.G, color.B, color.A * CGraphics.GlobalAlpha); + GL.TexCoord2(x1, y2); + GL.Vertex3(rx1, ry1, rect.Z + CGraphics.ZOffset); + + GL.End(); + + + GL.PopMatrix(); + + GL.Disable(EnableCap.Blend); + GL.BindTexture(TextureTarget.Texture2D, 0); } #endregion drawing @@ -1205,68 +1169,15 @@ namespace Vocaluxe.Lib.Draw { lock (_MutexTexture) { - if (_Queue.Count == 0) - return; - - STextureQueue q = _Queue[0]; - STexture texture = new STexture(-1); - if (_Textures.ContainsKey(q.ID)) - texture = _Textures[q.ID]; - - if (texture.Index < 1) - return; - - if (_UsePBO) + while (_TexturesToLoad.Count > 0) { - try - { - GL.GenBuffers(1, out texture.PBO); - GL.BindBuffer(BufferTarget.PixelUnpackBuffer, texture.PBO); - GL.BufferData(BufferTarget.PixelUnpackBuffer, (IntPtr)q.Data.Length, IntPtr.Zero, BufferUsageHint.StreamDraw); - GL.BindBuffer(BufferTarget.PixelUnpackBuffer, 0); - } - catch (Exception) - { - //throw; - _UsePBO = false; - } + STextureQueue q = _TexturesToLoad.Dequeue(); + CTexture texture; + if (!_Textures.TryGetValue(q.ID, out texture)) + continue; + + _CreateTexture(texture, q.DataWidth, q.DataHeight, q.Data); } - - int id = GL.GenTexture(); - GL.BindTexture(TextureTarget.Texture2D, id); - texture.ID = id; - - texture.Width = q.Width; - texture.Height = q.Height; - texture.W2 = MathHelper.NextPowerOfTwo(texture.Width); - texture.H2 = MathHelper.NextPowerOfTwo(texture.Height); - - texture.WidthRatio = texture.Width / texture.W2; - texture.HeightRatio = texture.Height / texture.H2; - - GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, (int)texture.W2, (int)texture.H2, 0, PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero); - - GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, q.Width, q.Height, PixelFormat.Bgra, PixelType.UnsignedByte, q.Data); - - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureParameterName.ClampToEdge); - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureParameterName.ClampToEdge); - - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear); - - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.LinearMipmapLinear); - GL.Ext.GenerateMipmap(GenerateMipmapTarget.Texture2D); - - GL.BindTexture(TextureTarget.Texture2D, 0); - - // Add to Texture List - texture.Color = new SColorF(1f, 1f, 1f, 1f); - texture.Rect = new SRectF(0f, 0f, texture.Width, texture.Height, 0f); - texture.TexturePath = String.Empty; - - _Textures[texture.Index] = texture; - q.Data = null; - _Queue.RemoveAt(0); } } #endregion Textures diff --git a/Vocaluxe/Lib/Draw/IDraw.cs b/Vocaluxe/Lib/Draw/IDraw.cs index 921b0f2d..1eab8eb2 100644 --- a/Vocaluxe/Lib/Draw/IDraw.cs +++ b/Vocaluxe/Lib/Draw/IDraw.cs @@ -17,10 +17,9 @@ // */ #endregion -using System; using System.Drawing; using VocaluxeLib; -using VocaluxeLib.Menu; +using VocaluxeLib.Draw; namespace Vocaluxe.Lib.Draw { @@ -36,28 +35,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); } } \ No newline at end of file diff --git a/Vocaluxe/Lib/Input/CControllerFramework.cs b/Vocaluxe/Lib/Input/CControllerFramework.cs index eb088a25..c978a247 100644 --- a/Vocaluxe/Lib/Input/CControllerFramework.cs +++ b/Vocaluxe/Lib/Input/CControllerFramework.cs @@ -1,8 +1,24 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +#region license +// /* +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +// */ +#endregion +using System; +using System.Collections.Generic; using VocaluxeLib; namespace Vocaluxe.Lib.Input @@ -25,17 +41,11 @@ namespace Vocaluxe.Lib.Input _CurrentMousePool = new List(); } - public virtual void Close() - { - } + public virtual void Close() {} - public virtual void Connect() - { - } + public virtual void Connect() {} - public virtual void Disconnect() - { - } + public virtual void Disconnect() {} public virtual bool IsConnected() { @@ -81,9 +91,7 @@ namespace Vocaluxe.Lib.Input return false; } - public virtual void SetRumble(float duration) - { - } + public virtual void SetRumble(float duration) {} public void AddKeyEvent(SKeyEvent keyEvent) { @@ -101,4 +109,4 @@ namespace Vocaluxe.Lib.Input } } } -} +} \ No newline at end of file diff --git a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs index 64c84e7a..ddf4849e 100644 --- a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs +++ b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs @@ -63,7 +63,9 @@ namespace Vocaluxe.Lib.Playlist if (PlaylistFile == "") { string filename = string.Empty; + // ReSharper disable LoopCanBeConvertedToQuery foreach (char chr in PlaylistName) + // ReSharper restore LoopCanBeConvertedToQuery { if (char.IsLetter(chr)) filename += chr.ToString(); diff --git a/Vocaluxe/Lib/Video/CVideoDecoder.cs b/Vocaluxe/Lib/Video/CVideoDecoder.cs index 34caba5a..79ea8b52 100644 --- a/Vocaluxe/Lib/Video/CVideoDecoder.cs +++ b/Vocaluxe/Lib/Video/CVideoDecoder.cs @@ -19,7 +19,7 @@ using System.Collections.Generic; using System.Linq; -using VocaluxeLib; +using VocaluxeLib.Draw; namespace Vocaluxe.Lib.Video { @@ -58,7 +58,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) { diff --git a/Vocaluxe/Lib/Video/CVideoDecoderFFmpeg.cs b/Vocaluxe/Lib/Video/CVideoDecoderFFmpeg.cs index b9292683..003f1a09 100644 --- a/Vocaluxe/Lib/Video/CVideoDecoderFFmpeg.cs +++ b/Vocaluxe/Lib/Video/CVideoDecoderFFmpeg.cs @@ -25,7 +25,7 @@ using System.Runtime.InteropServices; using System.Threading; using Vocaluxe.Base; using Vocaluxe.Lib.Video.Acinerella; -using VocaluxeLib; +using VocaluxeLib.Draw; namespace Vocaluxe.Lib.Video { @@ -90,7 +90,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 +299,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 +323,7 @@ namespace Vocaluxe.Lib.Video _UploadNewFrame(ref frame); //EventDecode.Set(); - return true; + return frame != null; } if (Math.Abs(_SetTime - time) > float.Epsilon) @@ -335,7 +335,7 @@ namespace Vocaluxe.Lib.Video _UploadNewFrame(ref frame); videoTime = _CurrentVideoTime; //EventDecode.Set(); - return true; + return frame != null; } return false; } @@ -650,7 +650,7 @@ namespace Vocaluxe.Lib.Video } } - private void _UploadNewFrame(ref STexture frame) + private void _UploadNewFrame(ref CTexture frame) { if (!_FileOpened) return; @@ -661,13 +661,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) { diff --git a/Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs b/Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs index f8b1de7e..f37b0dc8 100644 --- a/Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs +++ b/Vocaluxe/Lib/Video/CVideoDecoderGstreamer.cs @@ -20,7 +20,7 @@ using System; using Vocaluxe.Base; using Vocaluxe.Lib.Video.Gstreamer; -using VocaluxeLib; +using VocaluxeLib.Draw; namespace Vocaluxe.Lib.Video { @@ -78,13 +78,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 +117,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; } } diff --git a/Vocaluxe/Lib/Video/IVideoDecoder.cs b/Vocaluxe/Lib/Video/IVideoDecoder.cs index 807361c8..39b54587 100644 --- a/Vocaluxe/Lib/Video/IVideoDecoder.cs +++ b/Vocaluxe/Lib/Video/IVideoDecoder.cs @@ -17,7 +17,7 @@ // */ #endregion -using VocaluxeLib; +using VocaluxeLib.Draw; namespace Vocaluxe.Lib.Video { @@ -41,7 +41,16 @@ namespace Vocaluxe.Lib.Video int GetNumStreams(); float GetLength(int streamID); - bool GetFrame(int streamID, ref STexture frame, float time, out float videoTime); + + /// + /// + /// + /// + /// + /// + /// True if frame is valid + 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); diff --git a/Vocaluxe/Lib/Webcam/CAForgeNet.cs b/Vocaluxe/Lib/Webcam/CAForgeNet.cs index c5af6463..2fb2ff6e 100644 --- a/Vocaluxe/Lib/Webcam/CAForgeNet.cs +++ b/Vocaluxe/Lib/Webcam/CAForgeNet.cs @@ -24,7 +24,7 @@ using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropServices; using Vocaluxe.Base; -using VocaluxeLib; +using VocaluxeLib.Draw; namespace Vocaluxe.Lib.Webcam { @@ -41,29 +41,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 +105,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 +128,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() diff --git a/Vocaluxe/Lib/Webcam/IWebcam.cs b/Vocaluxe/Lib/Webcam/IWebcam.cs index 75f33716..6ac143ee 100644 --- a/Vocaluxe/Lib/Webcam/IWebcam.cs +++ b/Vocaluxe/Lib/Webcam/IWebcam.cs @@ -19,7 +19,7 @@ using System.Collections.Generic; using System.Drawing; -using VocaluxeLib; +using VocaluxeLib.Draw; namespace Vocaluxe.Lib.Webcam { @@ -54,7 +54,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(); diff --git a/Vocaluxe/Program.cs b/Vocaluxe/Program.cs index e6c90aea..63758783 100644 --- a/Vocaluxe/Program.cs +++ b/Vocaluxe/Program.cs @@ -240,7 +240,7 @@ namespace Vocaluxe CController.Close(); CSound.RecordCloseAll(); CSound.CloseAllStreams(); - CVideo.VdCloseAll(); + CVideo.CloseAll(); CDraw.Unload(); CDataBase.CloseConnections(); CWebcam.Close(); diff --git a/Vocaluxe/Screens/CScreenCredits.cs b/Vocaluxe/Screens/CScreenCredits.cs index 4e1e0455..c73a5df1 100644 --- a/Vocaluxe/Screens/CScreenCredits.cs +++ b/Vocaluxe/Screens/CScreenCredits.cs @@ -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 _Paragraphs; private List _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); diff --git a/Vocaluxe/Screens/CScreenMain.cs b/Vocaluxe/Screens/CScreenMain.cs index 4d92afdc..3baff4be 100644 --- a/Vocaluxe/Screens/CScreenMain.cs +++ b/Vocaluxe/Screens/CScreenMain.cs @@ -19,7 +19,6 @@ using System.Windows.Forms; using Vocaluxe.Base; -using Vocaluxe.Base.Fonts; using VocaluxeLib; using VocaluxeLib.Menu; @@ -165,9 +164,7 @@ namespace Vocaluxe.Screens // ReSharper disable ConditionIsAlwaysTrueOrFalse if (CSettings.VersionRevision != ERevision.Release) // ReSharper restore ConditionIsAlwaysTrueOrFalse - { _ReleaseText.Draw(); - } return true; } diff --git a/Vocaluxe/Screens/CScreenNames.cs b/Vocaluxe/Screens/CScreenNames.cs index 7293d3e3..1f840fdd 100644 --- a/Vocaluxe/Screens/CScreenNames.cs +++ b/Vocaluxe/Screens/CScreenNames.cs @@ -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,15 +56,15 @@ 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; + private bool _AvatarsChanged; + private bool _ProfilesChanged; #region public methods public override void Init() @@ -105,7 +106,7 @@ namespace Vocaluxe.Screens _ChooseAvatarStatic.Visible = false; _ChooseAvatarStatic.Aspect = EAspect.Crop; - CProfiles.AddProfileChangedCallback(new ProfileChangedCallback(_OnProfileChanged)); + CProfiles.AddProfileChangedCallback(_OnProfileChanged); } public override void LoadTheme(string xmlPath) @@ -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; @@ -669,12 +670,12 @@ namespace Vocaluxe.Screens #endregion public methods #region private methods - private void _OnProfileChanged(EProfileChangedFlags Flags) + private void _OnProfileChanged(EProfileChangedFlags flags) { - if (EProfileChangedFlags.Avatar == (EProfileChangedFlags.Avatar & Flags)) + if (EProfileChangedFlags.Avatar == (EProfileChangedFlags.Avatar & flags)) _AvatarsChanged = true; - if (EProfileChangedFlags.Profile == (EProfileChangedFlags.Profile & Flags)) + if (EProfileChangedFlags.Profile == (EProfileChangedFlags.Profile & flags)) _ProfilesChanged = true; } @@ -689,7 +690,7 @@ namespace Vocaluxe.Screens for (int i = 0; i < CSettings.MaxNumPlayer; i++) { - _Statics[_StaticPlayerAvatar[i]].Texture = CProfiles.ICProfileIDValid(CGame.Players[i].ProfileID) ? + _Statics[_StaticPlayerAvatar[i]].Texture = CProfiles.IsProfileIDValid(CGame.Players[i].ProfileID) ? CProfiles.GetAvatarTextureFromProfile(CGame.Players[i].ProfileID) : _OriginalPlayerAvatarTextures[i]; _Texts[_TextPlayer[i]].Text = CProfiles.GetPlayerName(CGame.Players[i].ProfileID, i + 1); diff --git a/Vocaluxe/Screens/CScreenOptionsVideo.cs b/Vocaluxe/Screens/CScreenOptionsVideo.cs index acbd2aea..04b1ef16 100644 --- a/Vocaluxe/Screens/CScreenOptionsVideo.cs +++ b/Vocaluxe/Screens/CScreenOptionsVideo.cs @@ -23,6 +23,7 @@ using Vocaluxe.Base; using Vocaluxe.Lib.Webcam; using VocaluxeLib; using VocaluxeLib.Menu; +using VocaluxeLib.Draw; namespace Vocaluxe.Screens { @@ -46,7 +47,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; diff --git a/Vocaluxe/Screens/CScreenProfiles.cs b/Vocaluxe/Screens/CScreenProfiles.cs index 26b43d12..08e37d59 100644 --- a/Vocaluxe/Screens/CScreenProfiles.cs +++ b/Vocaluxe/Screens/CScreenProfiles.cs @@ -27,6 +27,7 @@ using Vocaluxe.Base; using VocaluxeLib; using VocaluxeLib.Menu; using VocaluxeLib.Profile; +using VocaluxeLib.Draw; namespace Vocaluxe.Screens { @@ -65,7 +66,7 @@ namespace Vocaluxe.Screens private EEditMode _EditMode; - private STexture _WebcamTexture = new STexture(-1); + private CTexture _WebcamTexture; private Bitmap _Snapshot; public override void Init() @@ -80,7 +81,7 @@ namespace Vocaluxe.Screens _EditMode = EEditMode.None; _ProfilesChanged = false; _AvatarsChanged = false; - CProfiles.AddProfileChangedCallback(new ProfileChangedCallback(_OnProfileChanged)); + CProfiles.AddProfileChangedCallback(_OnProfileChanged); } public override void LoadTheme(string xmlPath) @@ -223,7 +224,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) @@ -300,12 +301,12 @@ namespace Vocaluxe.Screens _OnDiscardSnapshot(); } - private void _OnProfileChanged(EProfileChangedFlags Flags) + private void _OnProfileChanged(EProfileChangedFlags flags) { - if (EProfileChangedFlags.Avatar == (EProfileChangedFlags.Avatar & Flags)) + if (EProfileChangedFlags.Avatar == (EProfileChangedFlags.Avatar & flags)) _AvatarsChanged = true; - if (EProfileChangedFlags.Profile == (EProfileChangedFlags.Profile & Flags)) + if (EProfileChangedFlags.Profile == (EProfileChangedFlags.Profile & flags)) _ProfilesChanged = true; } @@ -387,7 +388,7 @@ namespace Vocaluxe.Screens private void _DeleteProfile() { _EditMode = EEditMode.None; - + CProfiles.DeleteProfile(_SelectSlides[_SelectSlideProfiles].ValueIndex); int selection = _SelectSlides[_SelectSlideProfiles].Selection; @@ -397,7 +398,7 @@ namespace Vocaluxe.Screens _SelectSlides[_SelectSlideProfiles].Selection = selection - 1; } - private void _LoadProfiles(bool Keep) + private void _LoadProfiles(bool keep) { string name = String.Empty; if (_EditMode == EEditMode.PlayerName) @@ -407,12 +408,14 @@ namespace Vocaluxe.Screens _SelectSlides[_SelectSlideProfiles].Clear(); CProfile[] profiles = CProfiles.GetProfiles(); - for (int i = 0; i < profiles.Length; i++) + foreach (CProfile profile in profiles) + { _SelectSlides[_SelectSlideProfiles].AddValue( - profiles[i].PlayerName, - new STexture(-1), - profiles[i].ID, + profile.PlayerName, + null, + profile.ID, -1); + } if (CProfiles.NumProfiles > 0 && CProfiles.NumAvatars > 0) { @@ -424,7 +427,7 @@ namespace Vocaluxe.Screens selectedProfileID = _SelectSlides[_SelectSlideProfiles].ValueIndex; } - if (!Keep) + if (!keep) { _SelectSlides[_SelectSlideDifficulty].Selection = (int)CProfiles.GetDifficulty(selectedProfileID); _SelectSlides[_SelectSlideGuestProfile].Selection = (int)CProfiles.GetGuestProfile(selectedProfileID); @@ -438,19 +441,21 @@ namespace Vocaluxe.Screens _ProfilesChanged = false; } - private void _LoadAvatars(bool Keep) + private void _LoadAvatars(bool keep) { int selectedAvatarID = _SelectSlides[_SelectSlideAvatars].ValueIndex; _SelectSlides[_SelectSlideAvatars].Clear(); - CAvatar[] avatars = CProfiles.GetAvatars(); - for (int i = 0; i < avatars.Length; i++) + IEnumerable avatars = CProfiles.GetAvatars(); + foreach (CAvatar avatar in avatars) + { _SelectSlides[_SelectSlideAvatars].AddValue( - Path.GetFileName(avatars[i].FileName), - new STexture(-1), - avatars[i].ID, + Path.GetFileName(avatar.FileName), + null, + avatar.ID, -1); + } - if (Keep) + if (keep) { _SelectSlides[_SelectSlideAvatars].SetSelectionByValueIndex(selectedAvatarID); CProfiles.SetAvatar(_SelectSlides[_SelectSlideProfiles].ValueIndex, selectedAvatarID); @@ -459,6 +464,6 @@ namespace Vocaluxe.Screens _SelectSlides[_SelectSlideAvatars].SetSelectionByValueIndex(CProfiles.GetAvatarID(_SelectSlides[_SelectSlideProfiles].ValueIndex)); _AvatarsChanged = false; - } + } } } \ No newline at end of file diff --git a/Vocaluxe/Screens/CScreenScore.cs b/Vocaluxe/Screens/CScreenScore.cs index 22756d7f..94838312 100644 --- a/Vocaluxe/Screens/CScreenScore.cs +++ b/Vocaluxe/Screens/CScreenScore.cs @@ -333,7 +333,7 @@ namespace Vocaluxe.Screens _Statics[_StaticPointsBarBG[p, CGame.NumPlayer - 1]].Rect.Y - _Statics[_StaticPointsBar[p, CGame.NumPlayer - 1]].Rect.H; } - if (CProfiles.ICProfileIDValid(players[p].ProfileID)) + if (CProfiles.IsProfileIDValid(players[p].ProfileID)) _Statics[_StaticAvatar[p, CGame.NumPlayer - 1]].Texture = CProfiles.GetAvatarTextureFromProfile(players[p].ProfileID); } @@ -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; } } } diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index 3803e9bc..ed6aebde 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -27,9 +27,8 @@ 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; using VocaluxeLib.Songs; namespace Vocaluxe.Screens @@ -88,6 +87,9 @@ namespace Vocaluxe.Screens private const string _SingBars = "SingBars"; + private bool _DynamicLyricsTop; + private bool _DynamicLyricsBottom; + private SRectF _TimeLineRect; private List _TimeRects; private bool _FadeOut; @@ -98,9 +100,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; @@ -397,7 +399,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) @@ -413,8 +415,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; @@ -455,33 +457,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)); } } @@ -558,7 +554,7 @@ namespace Vocaluxe.Screens CSound.RecordStop(); if (_CurrentVideo != -1) { - CVideo.VdClose(_CurrentVideo); + CVideo.Close(_CurrentVideo); _CurrentVideo = -1; CDraw.RemoveTexture(ref _CurrentVideoTexture); } @@ -621,15 +617,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(); @@ -652,12 +648,21 @@ namespace Vocaluxe.Screens CGame.Players[i].LineNr = duetPlayer[i]; } } - _SetDuetLyricsVisibility(song.IsDuet); - _SetNormalLyricsVisibility(); + + _DynamicLyricsTop = false; + _DynamicLyricsBottom = false; for (int p = 0; p < CGame.NumPlayer; p++) + { _NoteLines[p] = _SingNotes[_SingBars].AddPlayer(_SingNotes[_SingBars].BarPos[p, CGame.NumPlayer - 1], CTheme.GetPlayerColor(p + 1), p); + if (_SingNotes[_SingBars].BarPos[p, CGame.NumPlayer - 1].Y + _SingNotes[_SingBars].BarPos[p, CGame.NumPlayer - 1].H >= CSettings.RenderH / 2) + _DynamicLyricsBottom = true; + else + _DynamicLyricsTop = true; + } + _SetDuetLyricsVisibility(song.IsDuet); + _SetNormalLyricsVisibility(); /* case 4: NoteLines[0] = SingNotes[SingBars].AddPlayer(new SRectF(35f, 100f, 590f, 200f, -0.5f), CTheme.ThemeColors.Player[0]); @@ -693,9 +698,9 @@ namespace Vocaluxe.Screens } else { - bool lyricsOnTop = CConfig.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_TOP - || CConfig.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_BOTH - || (CConfig.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_DYNAMIC && (CGame.NumPlayer > 2 && CGame.NumPlayer != 4)); + 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; _Statics[_StaticLyricsTop].Visible = lyricsOnTop; @@ -704,7 +709,9 @@ namespace Vocaluxe.Screens private void _SetNormalLyricsVisibility() { - bool visible = CConfig.LyricsPosition != ELyricsPosition.TR_CONFIG_LYRICSPOSITION_TOP; + bool visible = CConfig.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_BOTTOM + || CConfig.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_BOTH + || (CConfig.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_DYNAMIC && _DynamicLyricsBottom); _Lyrics[_LyricMain].Visible = visible; _Lyrics[_LyricSub].Visible = visible; _Statics[_StaticLyrics].Visible = visible; @@ -1363,7 +1370,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), @@ -1383,7 +1390,7 @@ namespace Vocaluxe.Screens { for (int i = 0; i < CGame.NumPlayer; i++) { - if (CProfiles.ICProfileIDValid(CGame.Players[i].ProfileID)) + if (CProfiles.IsProfileIDValid(CGame.Players[i].ProfileID)) _Statics[_StaticAvatars[i, CGame.NumPlayer - 1]].Texture = CProfiles.GetAvatarTextureFromProfile(CGame.Players[i].ProfileID); else _Statics[_StaticAvatars[i, CGame.NumPlayer - 1]].Visible = false; @@ -1394,7 +1401,7 @@ namespace Vocaluxe.Screens { for (int i = 0; i < CGame.NumPlayer; i++) { - if (CProfiles.ICProfileIDValid(CGame.Players[i].ProfileID)) + if (CProfiles.IsProfileIDValid(CGame.Players[i].ProfileID)) _Texts[_TextNames[i, CGame.NumPlayer - 1]].Text = CProfiles.GetPlayerName(CGame.Players[i].ProfileID); else _Texts[_TextNames[i, CGame.NumPlayer - 1]].Visible = false; diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index b9d85084..40e9582d 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -20,11 +20,11 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Linq; using System.Windows.Forms; using Vocaluxe.Base; using VocaluxeLib; using VocaluxeLib.Menu; -using VocaluxeLib.Menu.SongMenu; using VocaluxeLib.PartyModes; using VocaluxeLib.Songs; @@ -884,9 +884,7 @@ namespace Vocaluxe.Screens CGame.Reset(); CGame.ClearSongs(); - List ids = new List(); - for (int i = 0; i < CSongs.VisibleSongs.Count; i++) - ids.Add(CSongs.VisibleSongs[i].ID); + List ids = CSongs.VisibleSongs.Select(t => t.ID).ToList(); while (ids.Count > 0) { @@ -910,17 +908,15 @@ namespace Vocaluxe.Screens CGame.Reset(); CGame.ClearSongs(); - List ids = new List(); + List ids; if (allSongs) { + ids = new List(); for (int i = 0; i < CSongs.AllSongs.Count; i++) ids.Add(i); } else - { - for (int i = 0; i < CSongs.VisibleSongs.Count; i++) - ids.Add(CSongs.VisibleSongs[i].ID); - } + ids = CSongs.VisibleSongs.Select(t => t.ID).ToList(); int s = 0; while (s < numSongs && ids.Count > 0) { diff --git a/Vocaluxe/Screens/CScreenTest.cs b/Vocaluxe/Screens/CScreenTest.cs index 358fcabe..52a6ed1f 100644 --- a/Vocaluxe/Screens/CScreenTest.cs +++ b/Vocaluxe/Screens/CScreenTest.cs @@ -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); } diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index f89a8e6c..bf1a10cf 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -178,6 +178,7 @@ + diff --git a/VocaluxeLib/CBasic.cs b/VocaluxeLib/CBasic.cs index 5c32807e..432a4f28 100644 --- a/VocaluxeLib/CBasic.cs +++ b/VocaluxeLib/CBasic.cs @@ -17,8 +17,6 @@ // */ #endregion -using VocaluxeLib.Menu; - namespace VocaluxeLib { public static class CBase diff --git a/VocaluxeLib/CHelper.cs b/VocaluxeLib/CHelper.cs index 22a7fbed..bb0ead1f 100644 --- a/VocaluxeLib/CHelper.cs +++ b/VocaluxeLib/CHelper.cs @@ -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 ListFiles(string path, string cast, bool recursive = false, bool fullpath = false) @@ -146,7 +143,9 @@ namespace VocaluxeLib try { + // ReSharper disable LoopCanBeConvertedToQuery foreach (FileInfo file in dir.GetFiles(cast)) + // ReSharper restore LoopCanBeConvertedToQuery files.Add(!fullpath ? file.Name : file.FullName); if (recursive) diff --git a/VocaluxeLib/Draw/CTexture.cs b/VocaluxeLib/Draw/CTexture.cs new file mode 100644 index 00000000..bcfec7df --- /dev/null +++ b/VocaluxeLib/Draw/CTexture.cs @@ -0,0 +1,151 @@ +#region license +// /* +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +// */ +#endregion + +using System.Drawing; + +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 = ""; + + /// + /// Original size (e.g. of bmp) + /// + public readonly Size OrigSize; + public float OrigAspect + { + get { return (float)OrigSize.Width / OrigSize.Height; } + } + + /// + /// Current size when drawn + /// + public SRectF Rect; + + public SColorF Color = new SColorF(1f, 1f, 1f, 1f); + + private int _W2, _H2; + private readonly bool _UseFullTexture; + /// + /// Internal texture width (on device), a power of 2 if necessary + /// + public int W2 + { + get { return _W2; } + set + { + _W2 = value; + if (_UseFullTexture) + WidthRatio = 1; + else + WidthRatio = (float)OrigSize.Width / _W2; + } + } + /// + /// Internal texture height (on device), a power of 2 if necessary + /// + public int H2 + { + get { return _H2; } + set + { + _H2 = value; + if (_UseFullTexture) + HeightRatio = 1; + else + HeightRatio = (float)OrigSize.Height / _H2; + } + } + + /// + /// Internal use. Specifies which part of texture memory is actually used + /// + public float WidthRatio { get; private set; } + /// + /// Internal use. Specifies which part of texture memory is actually used + /// + public float HeightRatio { get; private set; } + + /// + /// Actual texture space used in x direction + /// + public int UsedWidth + { + get { return (int)(_W2 * WidthRatio); } + } + + /// + /// Actual texture space used in y direction + /// + public int UsedHeight + { + get { return (int)(_H2 * HeightRatio); } + } + + /* + /// + /// Internal use. Specifies if full texture memory should be used + /// Set to true if you resized the original image to the maximum + /// + 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; + } + } + } +*/ + + /// + /// Creates a new texture reference + /// + /// Original width (Bitmap size) + /// Original height (Bitmap size) + /// Width in video memory + /// Height in video memory + /// True if it is using the full size of the video memory (no blank parts due to Pow-2-Issue) + 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; + } + } +} \ No newline at end of file diff --git a/VocaluxeLib/IBasic.cs b/VocaluxeLib/IBasic.cs index 2d71e3ae..54860c5b 100644 --- a/VocaluxeLib/IBasic.cs +++ b/VocaluxeLib/IBasic.cs @@ -1,27 +1,34 @@ -using System; +#region license +// /* +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +// */ +#endregion + +using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Drawing; -using System.Linq; -using System.Text; - +using VocaluxeLib.Draw; using VocaluxeLib.Game; using VocaluxeLib.Menu; -using VocaluxeLib.PartyModes; using VocaluxeLib.Profile; using VocaluxeLib.Songs; namespace VocaluxeLib { - public interface IMenuParty - { - void SetPartyModeID(int partyModeID); - int GetPartyModeID(); - - void AssingPartyMode(IPartyMode partyMode); - void DataToScreen(Object data); - } - public interface IConfig { void SetBackgroundMusicVolume(int newVolume); @@ -78,8 +85,8 @@ namespace VocaluxeLib { string GetThemeScreensPath(int partyModeID); int GetSkinIndex(int partyModeID); - STexture GetSkinTexture(string textureName, int partyModeID); - STexture GetSkinVideoTexture(string videoName, int partyModeID); + CTexture GetSkinTexture(string textureName, int partyModeID); + CTexture GetSkinVideoTexture(string videoName, int partyModeID); void SkinVideoResume(string videoName, int partyModeID); void SkinVideoPause(string videoName, int partyModeID); @@ -109,18 +116,18 @@ namespace VocaluxeLib void ApplyVolume(); - STexture GetVideoTexture(); + CTexture GetVideoTexture(); } public interface IDrawing { - void DrawTexture(STexture texture, SRectF rect); - void DrawTexture(STexture texture, SRectF rect, SColorF color); - void DrawTexture(STexture texture, SRectF rect, SColorF color, SRectF bounds, bool mirrored = false); - void DrawTextureReflection(STexture texture, SRectF rect, SColorF color, SRectF bounds, float reflectionSpace, float reflectionHeight); + void DrawTexture(CTexture texture, SRectF rect); + void DrawTexture(CTexture texture, SRectF rect, SColorF color); + void DrawTexture(CTexture texture, SRectF rect, SColorF color, SRectF bounds, bool mirrored = false); + void DrawTextureReflection(CTexture texture, SRectF rect, SColorF color, SRectF bounds, float reflectionSpace, float reflectionHeight); - STexture AddTexture(string fileName); - void RemoveTexture(ref STexture texture); + CTexture AddTexture(string fileName); + void RemoveTexture(ref CTexture texture); void DrawColor(SColorF color, SRectF rect); void DrawColorReflection(SColorF color, SRectF rect, float space, float height); @@ -225,7 +232,7 @@ namespace VocaluxeLib { int Load(string videoFileName); bool Skip(int videoStream, float startPosition, float videoGap); - bool GetFrame(int videoStream, ref STexture videoTexture, float time, out float videoTime); + bool GetFrame(int videoStream, ref CTexture videoTexture, float time, out float videoTime); bool IsFinished(int videoStream); bool Close(int videoStream); } @@ -248,12 +255,12 @@ namespace VocaluxeLib public interface ICover { - STexture GetNoCover(); + CTexture GetNoCover(); } public interface IDataBase { - bool GetCover(string fileName, ref STexture texture, int coverSize); + bool GetCover(string fileName, ref CTexture texture, int coverSize); } public interface IControllers @@ -283,4 +290,4 @@ namespace VocaluxeLib int GetPlaylistSongCount(int playlistID); CPlaylistSong GetPlaylistSong(int playlistID, int songIndex); } -} +} \ No newline at end of file diff --git a/VocaluxeLib/Menu/CBackground.cs b/VocaluxeLib/Menu/CBackground.cs index 11cf7124..068ea9fc 100644 --- a/VocaluxeLib/Menu/CBackground.cs +++ b/VocaluxeLib/Menu/CBackground.cs @@ -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(": Background color for type \"Color\" from ColorScheme (high priority)"); writer.WriteComment("or , , , (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; diff --git a/VocaluxeLib/Menu/CButton.cs b/VocaluxeLib/Menu/CButton.cs index 976da6b4..e5551a93 100644 --- a/VocaluxeLib/Menu/CButton.cs +++ b/VocaluxeLib/Menu/CButton.cs @@ -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(": Button color from ColorScheme (high priority)"); writer.WriteComment("or , , , (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(": Selected button color from ColorScheme (high priority)"); writer.WriteComment("or , , , (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); } diff --git a/VocaluxeLib/Menu/CEqualizer.cs b/VocaluxeLib/Menu/CEqualizer.cs index 5c258229..c65b42c0 100644 --- a/VocaluxeLib/Menu/CEqualizer.cs +++ b/VocaluxeLib/Menu/CEqualizer.cs @@ -175,7 +175,7 @@ namespace VocaluxeLib.Menu writer.WriteComment(": Equalizer color from ColorScheme (high priority)"); writer.WriteComment("or , , , (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(": Equalizer color for maximal volume from ColorScheme (high priority)"); writer.WriteComment("or , , , (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); } diff --git a/VocaluxeLib/Menu/CLyric.cs b/VocaluxeLib/Menu/CLyric.cs index a501afe3..a57b5f6a 100644 --- a/VocaluxeLib/Menu/CLyric.cs +++ b/VocaluxeLib/Menu/CLyric.cs @@ -172,7 +172,7 @@ namespace VocaluxeLib.Menu writer.WriteComment(": Lyric text color from ColorScheme (high priority)"); writer.WriteComment("or , , , (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(": Highlighted lyric color from ColorScheme (high priority)"); writer.WriteComment("or , , , (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); } diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs index 9a5d6da8..3de37a98 100644 --- a/VocaluxeLib/Menu/CMenu.cs +++ b/VocaluxeLib/Menu/CMenu.cs @@ -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); } diff --git a/VocaluxeLib/Menu/CNameSelection.cs b/VocaluxeLib/Menu/CNameSelection.cs index 1f3d7038..5c3c043f 100644 --- a/VocaluxeLib/Menu/CNameSelection.cs +++ b/VocaluxeLib/Menu/CNameSelection.cs @@ -21,7 +21,7 @@ using System; using System.Collections.Generic; using System.Windows.Forms; using System.Xml; - +using VocaluxeLib.Draw; using VocaluxeLib.Profile; namespace VocaluxeLib.Menu @@ -71,8 +71,8 @@ namespace VocaluxeLib.Menu public SRectF Rect; private readonly List _Tiles; - private STexture _TextureEmptyTile; - private STexture _TextureTileSelected; + private CTexture _TextureEmptyTile; + private CTexture _TextureTileSelected; public SColorF ColorEmptyTile; @@ -194,7 +194,7 @@ namespace VocaluxeLib.Menu writer.WriteComment(": Static color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.ColorEmptyTileName != "") + if (!String.IsNullOrEmpty(_Theme.ColorEmptyTileName)) writer.WriteElementString("ColorEmptyTile", _Theme.ColorEmptyTileName); else { @@ -225,7 +225,7 @@ namespace VocaluxeLib.Menu writer.WriteComment(": Text font name"); writer.WriteElementString("Font", _Theme.NameFont); writer.WriteComment(": Text color from ColorScheme (high priority)"); - if (_Theme.NameColorName != "") + if (!String.IsNullOrEmpty(_Theme.NameColorName)) writer.WriteElementString("Color", _Theme.NameColorName); else { @@ -350,7 +350,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 +465,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); } @@ -488,8 +488,7 @@ namespace VocaluxeLib.Menu for (int j = 0; j < _NumW; j++) { SRectF rect = new SRectF(Rect.X + j * (_TileW + _SpaceW), Rect.Y + i * (_TileH + _SpaceH), _TileW, _TileH, Rect.Z); - CStatic tileStatic = new CStatic(_PartyModeID, _TextureEmptyTile, ColorEmptyTile, rect); - tileStatic.Aspect = EAspect.Crop; + CStatic tileStatic = new CStatic(_PartyModeID, _TextureEmptyTile, ColorEmptyTile, rect) {Aspect = EAspect.Crop}; CText tileText = new CText(rect.X + rect.W / 2, rect.Y + rect.H + _Theme.NameSpace, rect.Z, _Theme.NameHeight, rect.W, EAlignment.Center, _Theme.NameStyle, _Theme.NameFont, _Theme.NameColor, ""); _Tiles.Add(new CTile(tileStatic, tileText, -1)); diff --git a/VocaluxeLib/Menu/CParticle.cs b/VocaluxeLib/Menu/CParticle.cs index e9a832cc..3e49902b 100644 --- a/VocaluxeLib/Menu/CParticle.cs +++ b/VocaluxeLib/Menu/CParticle.cs @@ -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(": ParticleEffect color from ColorScheme (high priority)"); writer.WriteComment("or , , , (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); } diff --git a/VocaluxeLib/Menu/CPlaylist.cs b/VocaluxeLib/Menu/CPlaylist.cs index acc1d704..cdb49cbd 100644 --- a/VocaluxeLib/Menu/CPlaylist.cs +++ b/VocaluxeLib/Menu/CPlaylist.cs @@ -21,7 +21,6 @@ using System; using System.Collections.Generic; using System.Windows.Forms; using System.Xml; -using VocaluxeLib.Menu.SongMenu; using VocaluxeLib.Songs; namespace VocaluxeLib.Menu @@ -373,7 +372,7 @@ namespace VocaluxeLib.Menu writer.WriteComment(": Button color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.ColorBackgroundName != "") + if (!String.IsNullOrEmpty(_Theme.ColorBackgroundName)) writer.WriteElementString("ColorBackground", _Theme.ColorBackgroundName); else { @@ -385,7 +384,7 @@ namespace VocaluxeLib.Menu writer.WriteComment(": Selected paylist-entry color from ColorScheme (high priority)"); writer.WriteComment("or , , , (lower priority)"); - if (_Theme.SelColorBackgroundName != "") + if (!String.IsNullOrEmpty(_Theme.SelColorBackgroundName)) writer.WriteElementString("SColorBackground", _Theme.SelColorBackgroundName); else { @@ -464,10 +463,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 +517,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; } diff --git a/VocaluxeLib/Menu/CScreenSetting.cs b/VocaluxeLib/Menu/CScreenSetting.cs index 691074f9..ffe6e98f 100644 --- a/VocaluxeLib/Menu/CScreenSetting.cs +++ b/VocaluxeLib/Menu/CScreenSetting.cs @@ -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); } diff --git a/VocaluxeLib/Menu/CSelectSlide.cs b/VocaluxeLib/Menu/CSelectSlide.cs index 488d2af6..b7f62571 100644 --- a/VocaluxeLib/Menu/CSelectSlide.cs +++ b/VocaluxeLib/Menu/CSelectSlide.cs @@ -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 _ValueNames; private readonly List _ValuePartyModeIDs; - private readonly List _Textures; + private readonly List _Textures; private readonly List _ValueIndexes; private readonly List _ValueBounds = new List(); @@ -178,7 +179,7 @@ namespace VocaluxeLib.Menu MaxW = 0f; _Selected = false; - _Textures = new List(); + _Textures = new List(); _ValueIndexes = new List(); _ValueNames = new List(); _ValuePartyModeIDs = new List(); @@ -226,7 +227,7 @@ namespace VocaluxeLib.Menu MaxW = slide.MaxW; _Selected = slide._Selected; - _Textures = new List(slide._Textures); + _Textures = new List(slide._Textures); _ValueIndexes = new List(slide._ValueIndexes); _ValueNames = new List(slide._ValueNames); _ValueBounds = new List(slide._ValueBounds); @@ -411,7 +412,7 @@ namespace VocaluxeLib.Menu writer.WriteComment(": SelectSlide color from ColorScheme (high priority)"); writer.WriteComment("or , , , (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(": Selected SelectSlide color from ColorScheme (high priority)"); writer.WriteComment("or , , , (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(": Highlighted SelectSlide color from ColorScheme (high priority)"); writer.WriteComment("or
, , , (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(": Arrow color from ColorScheme (high priority)"); writer.WriteComment("or , , , (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(": Selected arrow color from ColorScheme (high priority)"); writer.WriteComment("or , , , (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(": Text color from ColorScheme (high priority)"); writer.WriteComment("or , , , (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(": Selected text color from ColorScheme (high priority)"); writer.WriteComment("or , , , (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 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); } diff --git a/VocaluxeLib/Menu/CStatic.cs b/VocaluxeLib/Menu/CStatic.cs index 8dfa8d07..159b6319 100644 --- a/VocaluxeLib/Menu/CStatic.cs +++ b/VocaluxeLib/Menu/CStatic.cs @@ -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(": Static color from ColorScheme (high priority)"); writer.WriteComment("or , , ,
(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); } diff --git a/VocaluxeLib/Menu/CText.cs b/VocaluxeLib/Menu/CText.cs index ac8bd1c8..8299e395 100644 --- a/VocaluxeLib/Menu/CText.cs +++ b/VocaluxeLib/Menu/CText.cs @@ -169,7 +169,7 @@ namespace VocaluxeLib.Menu } /// - /// Do NOT read/write this anywhere but in _UpdateTextPosition! + /// Do NOT read/write this anywhere but in _UpdateTextPosition! /// private SRectF _Rect; public SRectF Rect @@ -396,7 +396,7 @@ namespace VocaluxeLib.Menu writer.WriteComment(": Text color from ColorScheme (high priority)"); writer.WriteComment("or , , , (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(": Selected Text color from ColorScheme (high priority)"); writer.WriteComment("or , , , (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); } diff --git a/VocaluxeLib/Menu/IMenu.cs b/VocaluxeLib/Menu/IMenu.cs index 38f856b3..b16a2ab2 100644 --- a/VocaluxeLib/Menu/IMenu.cs +++ b/VocaluxeLib/Menu/IMenu.cs @@ -17,17 +17,6 @@ // */ #endregion -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Drawing; -using VocaluxeLib; -using VocaluxeLib.Game; -using VocaluxeLib.Menu.SongMenu; -using VocaluxeLib.PartyModes; -using VocaluxeLib.Profile; -using VocaluxeLib.Songs; - namespace VocaluxeLib.Menu { public interface IMenu diff --git a/VocaluxeLib/Menu/SingNotes/CSingNotes.cs b/VocaluxeLib/Menu/SingNotes/CSingNotes.cs index a31cc03b..01846d46 100644 --- a/VocaluxeLib/Menu/SingNotes/CSingNotes.cs +++ b/VocaluxeLib/Menu/SingNotes/CSingNotes.cs @@ -21,7 +21,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Xml; - +using VocaluxeLib.Draw; using VocaluxeLib.Songs; namespace VocaluxeLib.Menu.SingNotes @@ -386,9 +386,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 +469,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 +524,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 +619,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 +676,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); diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs index b3f6fa87..5dc0dbd8 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuFramework.cs @@ -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 _Streams = new List(); 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(": Tile color from ColorScheme (high priority)"); writer.WriteComment("or , , , (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); } diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs index 7a7710f4..7cdc4dec 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuTileBoard.cs @@ -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 diff --git a/VocaluxeLib/PartyModes/CPartyMode.cs b/VocaluxeLib/PartyModes/CPartyMode.cs index cbc74a52..a8f31d23 100644 --- a/VocaluxeLib/PartyModes/CPartyMode.cs +++ b/VocaluxeLib/PartyModes/CPartyMode.cs @@ -25,6 +25,7 @@ namespace VocaluxeLib.PartyModes { public abstract class CPartyMode : IPartyMode { + protected string _Folder; protected SScreenSongOptions _ScreenSongOptions; protected readonly Dictionary _Screens; @@ -101,6 +102,16 @@ namespace VocaluxeLib.PartyModes return 1; } + public string GetFolder() + { + return _Folder; + } + + public void SetFolder(string folder) + { + _Folder = folder; + } + public virtual void SetSearchString(string searchString, bool visible) {} public virtual void JokerUsed(int teamNr) diff --git a/VocaluxeLib/PartyModes/CPartyModeNone.cs b/VocaluxeLib/PartyModes/CPartyModeNone.cs index bb75b0b0..57ffd217 100644 --- a/VocaluxeLib/PartyModes/CPartyModeNone.cs +++ b/VocaluxeLib/PartyModes/CPartyModeNone.cs @@ -18,7 +18,6 @@ #endregion using System; -using VocaluxeLib.Menu; namespace VocaluxeLib.PartyModes { diff --git a/VocaluxeLib/PartyModes/IPartyMode.cs b/VocaluxeLib/PartyModes/IPartyMode.cs index a747638d..6d383046 100644 --- a/VocaluxeLib/PartyModes/IPartyMode.cs +++ b/VocaluxeLib/PartyModes/IPartyMode.cs @@ -104,6 +104,8 @@ namespace VocaluxeLib.PartyModes int GetMaxTeams(); int GetMinTeams(); int GetMaxNumRounds(); + string GetFolder(); + void SetFolder(string folder); void SetSearchString(string searchString, bool visible); diff --git a/VocaluxeLib/Profile/CAvatar.cs b/VocaluxeLib/Profile/CAvatar.cs index 36567868..36c7c840 100644 --- a/VocaluxeLib/Profile/CAvatar.cs +++ b/VocaluxeLib/Profile/CAvatar.cs @@ -1,40 +1,49 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +#region license +// /* +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +// */ +#endregion -using VocaluxeLib.Menu; +using VocaluxeLib.Draw; namespace VocaluxeLib.Profile { public class CAvatar { public int ID; - public string FileName; - public STexture Texture; + public string FileName = ""; + public CTexture Texture; - public CAvatar(int ID) + public CAvatar(int id) { - this.ID = ID; - FileName = String.Empty; - Texture = new STexture(-1); + ID = id; } - public bool LoadFromFile(string NewFileName) + public bool LoadFromFile(string fileName) { - FileName = NewFileName; - CBase.Drawing.RemoveTexture(ref Texture); - Texture = CBase.Drawing.AddTexture(FileName); - return (Texture.Index != -1); + FileName = fileName; + return Reload(); } public bool Reload() { - STexture oldTexture = Texture; + CBase.Drawing.RemoveTexture(ref Texture); Texture = CBase.Drawing.AddTexture(FileName); - CBase.Drawing.RemoveTexture(ref oldTexture); - return Texture.Index != -1; + return Texture != null; } public void Unload() @@ -42,4 +51,4 @@ namespace VocaluxeLib.Profile CBase.Drawing.RemoveTexture(ref Texture); } } -} +} \ No newline at end of file diff --git a/VocaluxeLib/Profile/CProfile.cs b/VocaluxeLib/Profile/CProfile.cs index c4b9b0ac..8bcd7eaa 100644 --- a/VocaluxeLib/Profile/CProfile.cs +++ b/VocaluxeLib/Profile/CProfile.cs @@ -1,7 +1,24 @@ -using System; -using System.Collections.Generic; +#region license +// /* +// This file is part of Vocaluxe. +// +// Vocaluxe is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Vocaluxe is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Vocaluxe. If not, see . +// */ +#endregion + +using System; using System.IO; -using System.Linq; using System.Text; using System.Xml; @@ -9,15 +26,15 @@ namespace VocaluxeLib.Profile { public class CProfile { - private static readonly XmlWriterSettings _Settings = new XmlWriterSettings() - { + private static readonly XmlWriterSettings _Settings = new XmlWriterSettings + { Indent = true, Encoding = Encoding.UTF8, ConformanceLevel = ConformanceLevel.Document }; public int ID; - + public string PlayerName; public string FileName; public string AvatarFileName; @@ -55,9 +72,9 @@ namespace VocaluxeLib.Profile return LoadProfile(FileName); } - public bool LoadProfile(string NewFileName) + public bool LoadProfile(string fileName) { - FileName = NewFileName; + FileName = fileName; CXMLReader xmlReader = CXMLReader.OpenFile(FileName); if (xmlReader == null) @@ -85,7 +102,9 @@ namespace VocaluxeLib.Profile if (FileName == String.Empty) { string filename = string.Empty; + // ReSharper disable LoopCanBeConvertedToQuery foreach (char chr in PlayerName) + // ReSharper restore LoopCanBeConvertedToQuery { if (char.IsLetter(chr)) filename += chr.ToString(); @@ -142,4 +161,4 @@ namespace VocaluxeLib.Profile } } } -} +} \ No newline at end of file diff --git a/VocaluxeLib/Songs/CCategory.cs b/VocaluxeLib/Songs/CCategory.cs index 2f863dc6..4101d746 100644 --- a/VocaluxeLib/Songs/CCategory.cs +++ b/VocaluxeLib/Songs/CCategory.cs @@ -18,16 +18,15 @@ #endregion 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 Songs = new List(); public CCategory(string name) @@ -35,26 +34,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; diff --git a/VocaluxeLib/Songs/CSong.cs b/VocaluxeLib/Songs/CSong.cs index 98275199..adf7f34d 100644 --- a/VocaluxeLib/Songs/CSong.cs +++ b/VocaluxeLib/Songs/CSong.cs @@ -20,8 +20,10 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text; using System.Text.RegularExpressions; +using VocaluxeLib.Draw; 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() @@ -818,9 +806,7 @@ namespace VocaluxeLib.Songs return null; // build sentences list - List sentences = new List(); - foreach (CLine line in voice.Lines) - sentences.Add(line.Points != 0 ? line.Lyrics : String.Empty); + List sentences = voice.Lines.Select(line => line.Points != 0 ? line.Lyrics : String.Empty).ToList(); // find equal sentences series List series = new List(); diff --git a/VocaluxeLib/Structs.cs b/VocaluxeLib/Structs.cs index a6384802..e94c3359 100644 --- a/VocaluxeLib/Structs.cs +++ b/VocaluxeLib/Structs.cs @@ -99,45 +99,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 diff --git a/VocaluxeLib/VocaluxeLib.csproj b/VocaluxeLib/VocaluxeLib.csproj index acfc3146..25869d1a 100644 --- a/VocaluxeLib/VocaluxeLib.csproj +++ b/VocaluxeLib/VocaluxeLib.csproj @@ -131,6 +131,7 @@ +