View difference between Paste ID: f1e4b9ee6 and
SHOW: | | - or go back to the newest paste.
1
// ==PREPROCESSOR==
2
// @import "%fb2k_path%scripts\getColoursFonts.js"
3
// ==/PREPROCESSOR==
4
5
// args: h_align, v_align, trimming, flags
6
function StringFormat()
7
{
8
	var h_align = 0, v_align = 0, trimming = 0, flags = 0;
9
	switch (arguments.length)
10
	{
11
	// fall-thru
12
	case 4:
13
		flags = arguments[3];
14
	case 3:
15
		trimming = arguments[2];
16
	case 2:
17
		v_align = arguments[1];
18
	case 1:
19
		h_align = arguments[0];
20
		break;
21
	default:
22
		return 0;
23
	}
24
	return ((h_align << 28) | (v_align << 24) | (trimming << 20) | flags);
25
}
26
// h_align/v_align:
27
StringAlignment = {
28
	Near: 0,
29
	Center: 1,
30
	Far: 2
31
};
32
//Colour funcs
33
function RGB(r, g, b)
34
{	return (0xff000000 | (r << 16) | (g << 8) | (b)); }
35
36
var fontname = "Segoe UI";
37
38
text = {
39
	metadata: fb.TitleFormat("$if2(%STREAM_NAME%,[%artist%][ $char(8226) %conductor%][ $char(8226) %performer%]$crlf()[$num(%tracknumber%,0). ][%title%])$crlf()$if(%STREAM_NAME%,[%artist% - ][%title%],[%album%[ $char(8226) %set subtitle%]])"),
40
	font: gdi.Font(fontname, 18, 1)
41
};
42
lyrics = {
43
	metadata: fb.TitleFormat("[$if2(%unsynched lyrics%,%lyrics%)]"),
44
	font: gdi.Font(fontname, 13, 0)
45
};
46
indfnt = gdi.Font(fontname, 9, 1);    
47
indfmt = StringFormat(1, 0);
48
lyr_stringformat = StringFormat(StringAlignment.Center);
49
var ww, wh;
50
//Stuff for text
51
var textsize;
52
var lyricsize = 0;
53
var txtx=2;
54
var lyry=0;
55
var scroll=0;
56
var txty;
57
var txtwid;
58
var img_x,img_y,img_w,img_h;
59
var imgr_x,imgr_y;
60
var fcstrk = false;
61
var showlyrics = false;
62
var padh = 2;
63
var padt = 2;
64
var textrender = gdi.CreateStyleTextRender();
65
var txtev = evaldata(text.metadata);
66
var lyrev = evaldata(lyrics.metadata);
67
//Art
68
var arttype = 0;
69
var g_img = (fb.IsPlaying||fb.GetFocusItem())?utils.GetAlbumArtV2((fb.IsPlaying&&!fcstrk)?fb.GetNowPlaying():fb.GetFocusItem(), arttype):gdi.CreateImage(1000,1);
70
AlbumArtName = new Array("Front","Back","Disc","Icon","Artist");
71
72
function on_paint(gr)
73
{
74
    gr.FillSolidRect(0,0,ww,wh,bg);
75
	gr.SetInterpolationMode(3);
76
    textsize = gr.MeasureString(txtev, text.font, 0, 0, ww, wh).Height;
77
	//Draw front cover
78
	if(g_img && !(showlyrics && lyrev))
79
	{
80
		//Normal
81
		gr.DrawImage(g_img, img_x, img_y, img_w, img_h, 0, 0, g_img.Width, g_img.Height);
82
		//Rotated
83
		gr.DrawImage(g_img, imgr_x, imgr_y, -img_w, img_h/2, 0, g_img.Height/2, g_img.Width, g_img.Height/2,180,220);
84
		//Mirror mask
85
		gr.FillGradRect(img_x-1, imgr_y-1, img_w+2, img_h/2+2,91,bg-0x80000000,bg);
86
    }
87
	//Draw lyrics
88
	if(showlyrics && lyrev)
89
	{
90
		lyricsize = gr.MeasureString(lyrev, lyrics.font, 0, 0, txtwid, 9999999999).Height;
91
		gr.SetTextRenderingHint(5);
92
		gr.DrawString(lyrev, lyrics.font, txtcol, txtx, 12+textsize+lyry+scroll, txtwid, lyricsize, lyr_stringformat);
93
		gr.FillSolidRect(0,0,ww,textsize+8,bg);
94
		gr.FillSolidRect(0,wh-18,ww,18,bg);
95
	}
96
    //Draw track info
97
	gr.SetSmoothingMode(4);
98
    gr.SetTextRenderingHint(5);
99
	textrender.OutlineText(txtcol, bg, 3);
100
	textrender.RenderStringRect(gr, txtev, text.font, 0, (showlyrics && lyrev)?0:Math.min(wh-16-textsize,img_y+img_h), ww, Math.max(textsize,wh-img_y-img_h), (showlyrics && lyrev)?0x10000000:0x11000000);
101
    //draw state indicator
102
    gr.DrawString((fcstrk?"Prefer Focused Track":"Prefer Now Playing")+" | "+(showlyrics?"Prefer Lyrics":"Prefer Art")+" | Art Type: "+AlbumArtName[arttype], indfnt, RGB(0,200,0),0,wh-12,ww,12,indfmt);
103
}
104
105
function on_size()
106
{
107
	ww = window.Width;
108
	wh = window.Height;
109
	txtwid = ww-2*txtx;
110
	if(g_img && !(showlyrics && lyrev))
111
	{
112
		img_w = Math.min(ww-2*padh,(4/5)*(wh*g_img.Width/g_img.Height));
113
		img_h = Math.min((ww-2*padh)*g_img.Height/g_img.Width,(4/5)*(wh-2*padh));
114
		img_x = (img_w==ww-2*padh)?padh:(ww-(4/5)*(wh*g_img.Width/g_img.Height))/2;
115
		img_y = padt;
116
		imgr_x = img_x+img_w;
117
		imgr_y = img_y+img_h-1;
118
	}
119
}
120
function evaldata(txt)
121
{
122
	return (fb.IsPlaying&&!fcstrk)?txt.Eval():fb.GetFocusItem()?txt.EvalWithMetadb(fb.GetFocusItem()):"No Selection";
123
}
124
/////Update display
125
function on_playback_new_track(metadb)
126
{
127
	if(!fcstrk)
128
	{
129
		lyry = 0;
130
		scroll=0;
131
		g_img = utils.GetAlbumArtV2(metadb, arttype);
132
		txtev = evaldata(text.metadata);
133
		lyrev = evaldata(lyrics.metadata);
134
		on_size();
135
		window.Repaint();
136
	}
137
}
138
139
function on_item_focus_change()
140
{
141
	if(!fb.IsPlaying||fcstrk&&fb.GetFocusItem())
142
	{
143
		lyry = 0;
144
		scroll=0;
145
		g_img = fb.GetFocusItem()?utils.GetAlbumArtV2(fb.GetFocusItem(), arttype):null;
146
		txtev = evaldata(text.metadata);
147
		lyrev = evaldata(lyrics.metadata);
148
		on_size();
149
		window.Repaint();
150
	}
151
}
152
153
function on_playlist_switch()
154
{
155
    if(fb.GetFocusItem()) on_item_focus_change();
156
}
157
158
function on_playback_dynamic_info_track()
159
{
160
    txtev = evaldata(text.metadata);
161
	window.Repaint();
162
}
163
164
function on_playback_stop()
165
{
166
	window.Repaint();
167
}
168
169
function on_playback_time(time)
170
{
171
	if(showlyrics && lyrev && !fcstrk)
172
	{
173
		lyry = (wh-textsize-32)>lyricsize?0:(wh-textsize-32-lyricsize)*fb.PlaybackTime/fb.PlaybackLength;
174
		window.Repaint();
175
	}
176
}
177
178
////////Interaction
179
function on_mouse_lbtn_dblclk(x, y)
180
{
181
	fcstrk = !fcstrk;
182
	if(fcstrk){on_item_focus_change()}
183
	else if(fb.IsPlaying){on_playback_new_track(fb.GetNowPlaying());}
184
	window.Repaint();
185
}
186
function on_mouse_mbtn_up(x, y)
187
{
188
	lyrev = evaldata(lyrics.metadata);
189
	showlyrics = !showlyrics;
190
	if(fcstrk||!fb.IsPlaying){on_item_focus_change()}
191
	else if(fb.IsPlaying){on_playback_new_track(fb.GetNowPlaying());}
192
	window.repaint();
193
}
194
function on_mouse_wheel(step)
195
{
196
	if(showlyrics && lyrev)
197
	{
198
		if(step>0)
199
		{		
200
			if(lyry+scroll < 0)
201
			{
202
				scroll = scroll+60;
203
			}
204
		}
205
		else
206
		{
207
			if( wh-(42+textsize+lyry+scroll) < lyricsize)
208
			{
209
				scroll = scroll-60;
210
			}
211
		}
212
	}
213
    else
214
    {
215
        arttype=((arttype+step)%5+5)%5;
216
        if(fcstrk||!fb.IsPlaying){on_item_focus_change()}
217
        else if(fb.IsPlaying){on_playback_new_track(fb.GetNowPlaying());}
218
    }
219
    window.Repaint();
220
}
221