Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ================================================== //
- // @name "Spinning Disc Image Viewer (for pre 1.5 WSH and for portable foobar2000) (13.09.2013)"
- // @author "eXtremeHunter"
- // ================================================== //
- var WshShell = new ActiveXObject("WScript.Shell");
- var fso = new ActiveXObject("Scripting.FileSystemObject");
- function RGB(r, g, b) {
- return (0xff000000 | (r << 16) | (g << 8) | (b));
- }
- window.DlgCode = 0x0001; // arrow keys for DUI
- var defaultImage = "\\disc.jpg";
- var folder_path_panel = fb.ProfilePath + "user-addons\\wsh-spinning-disc-image";
- var defaultDisc = gdi.Image(folder_path_panel + defaultImage);
- var defaultMargin = 50;
- var margin = window.GetProperty("Margin", defaultMargin);
- var zoomStep = window.GetProperty("Zoom Step", 30);
- var useDiscMask = window.GetProperty("Use Disc Mask", true);
- var angle = 0;
- var minSize = 20;
- var disc = defaultDisc;
- var rotationInterval = 50;
- var rotationTimer;
- var rotationTimerStarted = false;
- var discPath;
- // ============================== //
- function on_paint(gr) {
- gr.FillGradRect(0, 0, ww, wh, 65, RGB(50, 50, 50), RGB(105, 105, 105), 0.5);
- disc && gr.DrawImage(resizedDisc, discX, discY, discW, discH, 0, 0, resizedDisc.Width, resizedDisc.Height, angle);
- }
- // ============================== //
- function on_mouse_wheel(step) {
- if (utils.IsKeyPressed(16)) {
- if (step == -1 && discW <= minSize) return;
- var s = step * zoomStep;
- margin = margin -= s;
- window.SetProperty("Margin", margin);
- on_size();
- window.Repaint();
- }
- }
- // ============================== //
- function on_key_down(vkey) {
- if (vkey == 38) on_mouse_wheel(1) //UP ARROW
- if (vkey == 40) on_mouse_wheel(-1); //DOWN ARROW
- }
- // ============================== //
- function on_size() {
- ww = window.Width;
- wh = window.Height;
- discW = Math.max(minSize, ww - margin);
- discH = Math.max(minSize, wh - margin);
- if (discH < discW) discW = discH;
- else if (discW < discH) discH = discW;
- discX = ww / 2 - discW / 2;
- discY = wh / 2 - discH / 2;
- if (!disc) return;
- resizedDisc = disc.resize(discW, discH);
- if (useDiscMask) {
- var discMask = gdi.CreateImage(discW, discH);
- var g = discMask.GetGraphics();
- g.FillSolidRect(0, 0, discW, discH, 0xffffffff);
- g.SetSmoothingMode(2);
- g.FillEllipse(1, 1, discW - 2, discH - 2, 0xff000000);
- discMask.ReleaseGraphics(g);
- resizedDisc.ApplyMask(discMask);
- discMask.Dispose();
- }
- }
- // ============================== //
- (function onRotationTimer() {
- getDiscImage();
- if (!fb.IsPlaying || fb.IsPaused) {
- return;
- }
- if (!rotationTimerStarted) {
- rotationTimer = window.CreateTimerInterval(rotationInterval);
- rotationTimerStarted = true;
- }
- })();
- // ============================== //
- function stopRotationTimer() {
- window.KillTimer(rotationTimer);
- rotationTimerStarted = false;
- }
- // ============================== //
- function on_timer(id) {
- if (rotationTimer && id == rotationTimer.ID) {
- if (angle >= 360) angle = 0;
- angle += 10;
- (discW >= ww || discH >= wh) ? window.Repaint() : window.RepaintRect(discX, discY, discW, discH);
- }
- }
- // ============================== //
- function on_playback_stop(reason) {
- if (reason != 2) {
- stopRotationTimer();
- getDiscImage();
- }
- }
- // ============================== //
- function on_playback_pause(state) {
- state ? stopRotationTimer() : onRotationTimer();
- }
- // ============================== //
- function on_playback_new_track() {
- onRotationTimer();
- }
- // ============================== //
- var tempAlbum;
- function getDiscImage() {
- var metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();
- if (!metadb) return;
- var currentAlbum = fb.TitleFormat("%album%%discnumber%").EvalWithMetadb(metadb);
- if (currentAlbum == tempAlbum) return;
- utils.GetAlbumArtAsync(window.ID, metadb, 2);
- tempAlbum = currentAlbum;
- }
- function on_get_album_art_done(metadb, art_id, image, image_path) {
- if (image) {
- disc = image;
- discPath = image_path;
- } else {
- disc = defaultDisc;
- discPath = folder_path_panel + defaultImage;
- }
- on_size();
- window.Repaint();
- }
- // ============================== //
- function on_selection_changed(metadb) {
- if (!fb.IsPlaying) getDiscImage();
- }
- // ============================== //
- function on_playlist_items_removed() {
- if (!plman.PlaylistItemCount(plman.ActivePlaylist)) disc = defaultDisc;
- on_size();
- window.Repaint();
- }
- // ============================== //
- MF_GRAYED = 0x00000001;
- MF_STRING = 0x00000000;
- function on_mouse_rbtn_up(x, y) {
- metadb = fb.GetNowPlaying();
- var _menu = window.CreatePopupMenu();
- var idx = 0;
- _menu.AppendMenuItem(discPath ? MF_STRING : MF_GRAYED, 1, "Open folder of this disc");
- _menu.AppendMenuSeparator();
- _menu.AppendMenuItem(fso.FolderExists(folder_path_panel) ? MF_STRING : MF_GRAYED, 2, "Open folder of this panel");
- _menu.AppendMenuSeparator();
- _menu.AppendMenuItem(MF_STRING, 3, "Fit image");
- _menu.CheckMenuItem(3, !margin);
- _menu.AppendMenuSeparator();
- _menu.AppendMenuItem(MF_STRING, 100, "Configure...");
- idx = _menu.TrackPopupMenu(x, y);
- switch (idx) {
- case 1:
- try {
- WshShell.Run("explorer /select," + "\"" + discPath + "\"");
- } catch (e) {}
- break;
- case 2:
- try {
- WshShell.Run("explorer /n," + folder_path_panel);
- } catch (e) {}
- break;
- case 3:
- margin ? margin = 0 : margin = defaultMargin;
- window.SetProperty("margin", margin);
- on_size();
- window.Repaint();
- break;
- case 100:
- window.ShowConfigure();
- break;
- }
- _menu.Dispose();
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement