View difference between Paste ID: GWTrpz24 and
SHOW: | | - or go back to the newest paste.
1-
1+
// ==PREPROCESSOR==
2
// @import "%fb2k_profile_path%scripts\common.js"
3
// @name "Album Art"
4
// ==/PREPROCESSOR==
5
6
var g_img;
7
var g_text = '';
8
var artist = '';
9
var album = '';
10
var title = '';
11
var lfm_img = gdi.Image(images_path + "lastfm_red_small.gif");
12
var g_tooltip = window.CreateTooltip();
13
g_tooltip.Text = "last.fm track page";
14
var g_textrender = gdi.CreateStyleTextRender();
15
16
window.GetProperty("scale", "max");
17
window.GetProperty("playinginfo", true);
18
window.GetProperty("lastfminfo", true);
19
window.GetProperty("id",0);
20
21
on_item_focus_change();
22
23
function on_size() {
24
	ww = window.Width;
25
	wh = window.Height;
26
}
27
28
function on_notify_data(name, data) {
29
	if (name == "playingtrack") {
30
		g_text = data;
31
        window.RepaintRect(0, wh - 70, ww, 70);
32
	}
33
}
34
35
function on_paint(gr) {
36
	gr.FillSolidRect(0, 0, ww, wh, g_backcolor);
37
	if (g_img) {
38
	   scale(gr, g_img, 0, 0, ww, wh, window.GetProperty("scale"));
39
	} else {
40
		gr.GdiDrawText(g_metadb ? "[no image]" : "[no selection]", g_font, g_textcolor, 0, 0, ww, wh, DT_VCENTER | DT_CENTER | DT_WORDBREAK | DT_CALCRECT | DT_NOPREFIX);
41
	}
42
    if (!fb.IsPlaying) return;
43
    y_off = 16;
44
    g_textrender.OutLineText(g_textcolor, g_backcolor, 3);
45
    gr.SetTextRenderingHint(0);
46
    gr.SetSmoothingMode(4);
47
    gr.SetInterpolationMode(7);
48
    if (window.GetProperty("lastfminfo")) gr.DrawImage(lfm_img, ww-60, 8, 50, 18, 0, 0, 50, 18);
49
    if (g_text != "") {
50
        y_off = 0;
51
        g_textrender.RenderStringRect(gr, g_text, gdi.Font(font, 12, 1), 5, wh-22, ww-10, 14, 0x10305000);
52
    }
53
	if (window.GetProperty("playinginfo")) {
54
        g_textrender.RenderStringRect(gr, title, gdi.Font(font, 12, 1), 5, wh-70+y_off, ww-10, 14, 0x10305000);
55
        g_textrender.RenderStringRect(gr, album, gdi.Font(font, 12, 1), 5, wh-54+y_off, ww-10, 14, 0x10305000);
56
		g_textrender.RenderStringRect(gr, artist, gdi.Font(font, 12, 1), 5, wh-38+y_off, ww-10, 14, 0x10305000);		
57
	}
58
}
59
60
function scale(gr, img, pos_x, pos_y, width, height, mth) {
61
	var s = mth == "max" ? Math.max(width / img.width, height / img.height) : Math.min(width / img.width, height / img.height);
62
	var nw = Math.round(img.width * s);
63
	var nh = Math.round(img.height * s);
64
	pos_x += Math.round((width - nw) / 2);
65
	pos_y += Math.round((height - nh) / 2);
66
	gr.DrawImage(img, pos_x, pos_y, nw, nh, 0, 0, img.width, img.height);
67
}
68
69
function on_playback_new_track() {
70
    g_metadb && g_metadb.Dispose();
71
	on_item_focus_change();
72
    artist = fb.TitleFormat("%artist%").EvalWithMetadb(g_metadb);
73
    album = fb.TitleFormat("%album%").EvalWithMetadb(g_metadb);
74
    title = fb.TitleFormat("%title%").EvalWithMetadb(g_metadb);
75
    if (window.GetProperty("lastfminfo")) window.NotifyOthers("getplayinginfo", [artist, title]);
76
	update_image();
77
}
78
79
function on_metadb_changed() {
80
	if(fb.IsPlaying) return;
81
	update_image();
82
}
83
84
function on_playback_stop(reason) {
85
    if (reason != 2) window.Repaint();
86
}
87
88
function update_image() {
89
	if(!g_metadb) return;
90
	is_embedded = null;
91
	g_img && g_img.Dispose();
92
	type = window.GetProperty("id");
93
	g_img = utils.GetAlbumArtEmbedded(g_metadb.rawpath, type);
94
	if(g_img) {
95
		is_embedded = true;
96
		window.Repaint();
97
	} else {
98
		utils.GetAlbumArtAsync(window.ID, g_metadb, type);
99
	}
100
}
101
102
function on_get_album_art_done(metadb, art_id, im, ip) {
103
	g_img_path = ip;
104
	g_img = im;
105
	window.Repaint();
106
}
107
108
function on_mouse_move(x,y) {
109
	if (window.GetProperty("playinginfo") && x > ww-60 && x < ww-10 && y > 8 && y < 26) {
110
		g_tooltip.Activate();
111
		window.SetCursor(IDC_HAND);
112
	} else {
113
		g_tooltip.Deactivate();
114
		window.SetCursor(IDC_ARROW);
115
	}
116
}
117
118
function on_mouse_lbtn_up(x, y) {
119
	if (window.GetProperty("playinginfo") && x > ww-60 && x < ww-10 && y > 8 && y < 26) {
120
		WshShell.run("http://www.last.fm/music/" + encodeURIComponent(artist) + "/_/" + encodeURIComponent(title));
121
	}
122
}
123
124
function on_mouse_lbtn_dblclk() {
125
	if(!g_metadb || !g_img) return;
126
	if(is_embedded) {
127
		fb.RunContextCommandWithMetadb("Open Containing Folder", g_metadb);
128
	} else {
129
		try {WshShell.Run("\"" + g_img_path + "\""); } catch(e) {}
130
	}
131
}
132
133
function on_mouse_rbtn_up(x, y) {
134
	var _menu = window.CreatePopupMenu();
135
	var idx;
136
	_menu.AppendMenuItem(MF_STRING, 1, "Refresh");
137
	_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
138
	_menu.AppendMenuItem(MF_STRING, 2, "Front cover");
139
	_menu.AppendMenuItem(MF_STRING, 3, "Back cover");
140
	_menu.AppendMenuItem(MF_STRING, 4, "Disc");
141
	_menu.AppendMenuItem(MF_STRING, 5, "Icon");
142
	_menu.AppendMenuItem(MF_STRING, 6, "Artist");
143
	_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
144
	_menu.AppendMenuItem(MF_STRING, 7, "Fill");
145
	_menu.CheckMenuItem(7, window.GetProperty("scale") == "max");
146
    _menu.AppendMenuItem(MF_STRING, 8, "Playing track info");
147
    _menu.CheckMenuItem(8, window.GetProperty("playinginfo"));
148
    _menu.AppendMenuItem(MF_STRING, 9, "Last.fm track info");
149
    _menu.CheckMenuItem(9, window.GetProperty("lastfminfo"));
150
	if(utils.IsKeyPressed(0x10)) {
151
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
152
        _menu.AppendMenuItem(MF_STRING, 99, "Properties");
153
	    _menu.AppendMenuItem(MF_STRING, 100, "Configure...");
154
    }
155
	_menu.CheckMenuRadioItem(2, 6, window.GetProperty("id")+2);
156
	idx = _menu.TrackPopupMenu(x, y);
157
	switch(idx) {
158
		case 1:
159
			update_image();
160
			break;
161
		case 2:
162
		case 3:
163
		case 4:
164
		case 5:
165
		case 6:
166
			window.SetProperty("id", idx-2);
167
			update_image();
168
			break;
169
		case 7:
170
			window.SetProperty("scale", window.GetProperty("scale") == "max" ? "min" : "max");
171
			window.Repaint();
172
			break;
173
        case 8:
174
            window.SetProperty("playinginfo", !window.GetProperty("playinginfo"));
175
            window.RepaintRect(0, wh - 70, ww, 70);
176
            break;
177
        case 9:
178
            window.SetProperty("lastfminfo", !window.GetProperty("lastfminfo"));
179
            if (fb.IsPlaying && window.GetProperty("lastfminfo")) window.NotifyOthers("getplayinginfo", [artist, title]);
180
            if (!window.GetProperty("lastfminfo")) g_text = "";
181
            window.Repaint();
182
            break;
183
		case 99:
184
			window.ShowProperties();
185
			break;
186
		case 100:
187
			window.ShowConfigure();
188
			break;
189
	}
190
	_menu.Dispose();
191
	return true;
192
}