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