1 /*
2  * Project: VizKit
3  * Version: 2.3
4 
5  * Date: 20090823
6  * File: TrackLyrics.cpp
7  *
8  */
9 
10 /***************************************************************************
11 
12 Copyright (c) 2004-2009 Heiko Wichmann (http://www.imagomat.de/vizkit)
13 
14 
15 This software is provided 'as-is', without any expressed or implied warranty.
16 In no event will the authors be held liable for any damages
17 arising from the use of this software.
18 
19 Permission is granted to anyone to use this software for any purpose,
20 including commercial applications, and to alter it and redistribute it
21 freely, subject to the following restrictions:
22 
23 1. The origin of this software must not be misrepresented;
24    you must not claim that you wrote the original software.
25    If you use this software in a product, an acknowledgment
26    in the product documentation would be appreciated
27    but is not required.
28 
29 2. Altered source versions must be plainly marked as such,
30    and must not be misrepresented as being the original software.
31 
32 3. This notice may not be removed or altered from any source distribution.
33 
34  ***************************************************************************/
35 
36 #include "TrackLyrics.h"
37 #include "VisualConfiguration.h"
38 #include "VisualErrorHandling.h"
39 #include "VisualActorGraphics.h"
40 #include "VisualImage.h"
41 #include "VisualStageBox.h"
42 #include "VisualDispatch.h"
43 #include "VisualDataStore.h"
44 #include "VisualPreferences.h"
45 #include "VisualStyledString.h"
46 #include "VisualAnimation.h"
47 #include "VisualTimeline.h"
48 
49 #include "VisualFile.h" // test
50 
51 
52 using namespace VizKit;
53 
54 
TrackLyrics()55 TrackLyrics::TrackLyrics() {
56 	trackLyricsAsset.setOpacityValue(0.0);
57 }
58 
59 
~TrackLyrics()60 TrackLyrics::~TrackLyrics() {
61 	// NULL
62 }
63 
64 
show()65 void TrackLyrics::show() {
66 	this->trackLyricsAsset.draw(this->vertexChainId);
67 }
68 
69 
getTrackLyricsStringStyle()70 VisualStringStyle TrackLyrics::getTrackLyricsStringStyle() {
71 
72 	VisualStringStyle stringStyle;
73 
74 	VisualPreferences::getValue(VisualPreferences::kTrackLyricsFont, stringStyle.fontNameStr);
75 
76 	stringStyle.fontSize = (float)(VisualPreferences::getValue(VisualPreferences::kTrackLyricsFontSize));
77 
78 	stringStyle.fontColor.r = VisualPreferences::getValue(VisualPreferences::kTrackLyricsFontColorRedFloat);
79 	stringStyle.fontColor.g = VisualPreferences::getValue(VisualPreferences::kTrackLyricsFontColorGreenFloat);
80 	stringStyle.fontColor.b = VisualPreferences::getValue(VisualPreferences::kTrackLyricsFontColorBlueFloat);
81 	stringStyle.fontColor.red = VisualPreferences::getValue(VisualPreferences::kTrackLyricsFontColorRedFloat);
82 	stringStyle.fontColor.green = VisualPreferences::getValue(VisualPreferences::kTrackLyricsFontColorGreenFloat);
83 	stringStyle.fontColor.blue = VisualPreferences::getValue(VisualPreferences::kTrackLyricsFontColorBlueFloat);
84 
85 	stringStyle.horizontalAlignment = kLeftAligned;
86 
87 	return stringStyle;
88 }
89 
90 
setTrackLyricsImage(VisualImage & styledTrackLyricsStringImage)91 void TrackLyrics::setTrackLyricsImage(VisualImage& styledTrackLyricsStringImage) {
92 
93 	// test
94 	/*
95 	VisualFile testFile;
96 	bool success = testFile.initWithUserDesktopDirectory();
97 	VisualString fileName("testDaten.txt");
98 	success = testFile.appendFileName(fileName);
99 	VisualString testString;
100 	testString.initWithContentsOfFile(testFile);
101 	bool success = lyricsImage.initWithString(testString, stringStyle);
102 	*/
103 	// test
104 
105 	this->clear();
106 	this->trackLyricsAsset.setImage(styledTrackLyricsStringImage);
107 
108 /*
109 	VisualFile aFile;
110 	aFile.initWithUserDesktopDirectory();
111 	VisualString fileName("testLyrics.png");
112 	bool success = false;
113 	success = aFile.appendFileName(fileName);
114 	styledTrackLyricsStringImage.writeToPNGFile(aFile);
115 */
116 }
117 
118 
reshape()119 void TrackLyrics::reshape() {
120 
121 	VisualStageBox* trackLyricsAssetBox = this->trackLyricsAsset.getBox();
122 	trackLyricsAssetBox->setScalingBehaviour(kPreserveAspectRatio);
123 
124 	VisualStagePosition trackLyricsAssetPosition = this->trackLyricsAsset.getPosition();
125 
126 	trackLyricsAssetPosition.reset();
127 
128 	trackLyricsAssetPosition.horizontalAlignment = kCenterAligned;
129 	trackLyricsAssetPosition.verticalAlignment = kTopAligned;
130 
131 	trackLyricsAssetPosition.minMarginBottom = (double)VisualDataStore::getValueInt(VisualDataStore::kTrackInfoTextureHeight) + 5.0;
132 	trackLyricsAssetPosition.minMarginBottomUnit = kPixel;
133 
134 	trackLyricsAssetPosition.minMarginTop = 5;
135 	trackLyricsAssetPosition.minMarginTopUnit = kPixel;
136 
137 	trackLyricsAssetPosition.minMarginLeft = 5;
138 	trackLyricsAssetPosition.minMarginLeftUnit = kPixel;
139 
140 	trackLyricsAssetPosition.minMarginRight = 5;
141 	trackLyricsAssetPosition.minMarginRightUnit = kPixel;
142 
143 	this->trackLyricsAsset.setPosition(trackLyricsAssetPosition);
144 
145 	VisualVertex* aVertex = NULL;
146 	trackLyricsAssetBox->initializeVertexChain(this->vertexChainId);
147 
148 	VertexColor aVertexColor;
149 	for (uint8 i = 0; i < 4; i++) {
150 		switch (i) {
151 			case 0:
152 				aVertexColor.r = VisualPreferences::getValue(VisualPreferences::kTrackLyricsTextureColorTopLeftRed);
153 				aVertexColor.g = VisualPreferences::getValue(VisualPreferences::kTrackLyricsTextureColorTopLeftGreen);
154 				aVertexColor.b = VisualPreferences::getValue(VisualPreferences::kTrackLyricsTextureColorTopLeftBlue);
155 				aVertexColor.a = VisualPreferences::getValue(VisualPreferences::kTrackLyricsTextureColorTopLeftAlpha);
156 				aVertexColor.red = aVertexColor.r;
157 				aVertexColor.green = aVertexColor.g;
158 				aVertexColor.blue = aVertexColor.b;
159 				aVertexColor.alpha = aVertexColor.a;
160 				aVertex = trackLyricsAssetBox->createVertex(0.0, 1.0, 0.0, 0.0, 1.0, aVertexColor);
161 				trackLyricsAssetBox->addVertexToChain(this->vertexChainId, aVertex);
162 				break;
163 			case 1:
164 				aVertexColor.r = VisualPreferences::getValue(VisualPreferences::kTrackLyricsTextureColorBottomLeftRed);
165 				aVertexColor.g = VisualPreferences::getValue(VisualPreferences::kTrackLyricsTextureColorBottomLeftGreen);
166 				aVertexColor.b = VisualPreferences::getValue(VisualPreferences::kTrackLyricsTextureColorBottomLeftBlue);
167 				aVertexColor.a = VisualPreferences::getValue(VisualPreferences::kTrackLyricsTextureColorBottomLeftAlpha);
168 				aVertexColor.red = aVertexColor.r;
169 				aVertexColor.green = aVertexColor.g;
170 				aVertexColor.blue = aVertexColor.b;
171 				aVertexColor.alpha = aVertexColor.a;
172 				aVertex = trackLyricsAssetBox->createVertex(0.0, 0.0, 0.0, 0.0, 0.0, aVertexColor);
173 				trackLyricsAssetBox->addVertexToChain(this->vertexChainId, aVertex);
174 				break;
175 			case 2:
176 				aVertexColor.r = VisualPreferences::getValue(VisualPreferences::kTrackLyricsTextureColorBottomRightRed);
177 				aVertexColor.g = VisualPreferences::getValue(VisualPreferences::kTrackLyricsTextureColorBottomRightGreen);
178 				aVertexColor.b = VisualPreferences::getValue(VisualPreferences::kTrackLyricsTextureColorBottomRightBlue);
179 				aVertexColor.a = VisualPreferences::getValue(VisualPreferences::kTrackLyricsTextureColorBottomRightAlpha);
180 				aVertexColor.red = aVertexColor.r;
181 				aVertexColor.green = aVertexColor.g;
182 				aVertexColor.blue = aVertexColor.b;
183 				aVertexColor.alpha = aVertexColor.a;
184 				aVertex = trackLyricsAssetBox->createVertex(1.0, 0.0, 0.0, 1.0, 0.0, aVertexColor);
185 				trackLyricsAssetBox->addVertexToChain(this->vertexChainId, aVertex);
186 				break;
187 			case 3:
188 				aVertexColor.r = VisualPreferences::getValue(VisualPreferences::kTrackLyricsTextureColorTopRightRed);
189 				aVertexColor.g = VisualPreferences::getValue(VisualPreferences::kTrackLyricsTextureColorTopRightGreen);
190 				aVertexColor.b = VisualPreferences::getValue(VisualPreferences::kTrackLyricsTextureColorTopRightBlue);
191 				aVertexColor.a = VisualPreferences::getValue(VisualPreferences::kTrackLyricsTextureColorTopRightAlpha);
192 				aVertexColor.red = aVertexColor.r;
193 				aVertexColor.green = aVertexColor.g;
194 				aVertexColor.blue = aVertexColor.b;
195 				aVertexColor.alpha = aVertexColor.a;
196 				aVertex = trackLyricsAssetBox->createVertex(1.0, 1.0, 0.0, 1.0, 1.0, aVertexColor);
197 				trackLyricsAssetBox->addVertexToChain(this->vertexChainId, aVertex);
198 				break;
199 			default:
200 				writeLog("ERR: switch case unknown");
201 		}
202 	}
203 
204 	char trackLyricsLayoutPos[128];
205 	sprintf(trackLyricsLayoutPos, "trackLyrics top: %f, left: %f, bottom: %f, right: %f", trackLyricsAssetBox->getTopCoord(), trackLyricsAssetBox->getLeftCoord(), trackLyricsAssetBox->getBottomCoord(), trackLyricsAssetBox->getRightCoord());
206 	setProcessInfo("TrackLyricsLayout", trackLyricsLayoutPos);
207 
208 }
209 
210 
fadeIn(uint32 durationInMilliseconds)211 void TrackLyrics::fadeIn(uint32 durationInMilliseconds) {
212 	VisualAnimation fadeInAnimation(kAnimatedOpacity);
213 	fadeInAnimation.setDurationInMilliseconds(durationInMilliseconds);
214 	this->trackLyricsAsset.addAnimation(fadeInAnimation);
215 }
216 
217 
fadeOut(uint32 durationInMilliseconds,float clampValue)218 void TrackLyrics::fadeOut(uint32 durationInMilliseconds, float clampValue) {
219 	VisualAnimation fadeOutAnimation(kAnimatedOpacity);
220 	fadeOutAnimation.setDurationInMilliseconds(durationInMilliseconds);
221 	fadeOutAnimation.setStartValue(1.0);
222 	fadeOutAnimation.setStopValue(0.0);
223 	//VisualTimeline* fadeOutTimeline = fadeOutAnimation.getTimeline();
224 	//fadeOutTimeline->setInterpolationType(kSinusoidalInterpolation);
225 	if (clampValue > 0.0) {
226 		//fadeOutAnimation.setMinClampValue(clampValue);
227 	}
228 	this->trackLyricsAsset.addAnimation(fadeOutAnimation);
229 }
230 
231 
clear()232 void TrackLyrics::clear() {
233 
234 	//this->trackLyricsAsset.disposeTextureData();
235 
236 	VisualStageBox* trackLyricsAssetBox = this->trackLyricsAsset.getBox();
237 
238 	trackLyricsAssetBox->setContentPixelWidth(0);
239 	trackLyricsAssetBox->setContentPixelHeight(0);
240 
241 	VisualStagePosition trackLyricsAssetPosition = this->trackLyricsAsset.getPosition();
242 	trackLyricsAssetPosition.reset();
243 	this->trackLyricsAsset.setPosition(trackLyricsAssetPosition);
244 
245 	this->trackLyricsAsset.removeAnimations();
246 
247 	this->trackLyricsAsset.setOpacityValue(0.0);
248 }
249