Advertisement
ExtremeHunter

Spinning Disc Image Viewer (for pre 1.5 wsh)

Aug 8th, 2013
329
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ================================================== //
  2. // @name "Spinning Disc Image Viewer (for pre 1.5 WSH) (08.08.2013)"
  3. // @author "eXtremeHunter"
  4. // ================================================== //
  5.  
  6. function RGB(r, g, b) {
  7.     return (0xff000000 | (r << 16) | (g << 8) | (b));
  8. }
  9. window.DlgCode = 0x0001; // arrow keys for DUI
  10.  
  11. var defaultDisc = gdi.Image(fb.FoobarPath + "images\\disc.jpg");
  12. var margin = window.GetProperty("Margin", 50);
  13. var zoomStep = window.GetProperty("Zoom Step", 30);
  14. var useDiscMask = window.GetProperty("Use Disc Mask", true);
  15.  
  16. var angle = 0;
  17. var minSize = 20;
  18. var disc = defaultDisc;
  19. var rotationInterval = 50;
  20. var rotationTimer;
  21. var rotationTimerStarted = false;
  22. // ============================== //
  23.  
  24. function on_paint(gr) {
  25.  
  26.     gr.FillGradRect(0, 0, ww, wh, 65, RGB(50, 50, 50), RGB(105, 105, 105), 0.5);
  27.  
  28.     disc && gr.DrawImage(resizedDisc, discX, discY, discW, discH, 0, 0, resizedDisc.Width, resizedDisc.Height, angle);
  29.  
  30. }
  31. // ============================== //
  32.  
  33. function on_mouse_wheel(step) {
  34.  
  35.     if (utils.IsKeyPressed(16)) {
  36.  
  37.         if (step == -1 && discW <= minSize) return;
  38.  
  39.         var s = step * zoomStep;
  40.         margin = margin -= s;
  41.         window.SetProperty("Margin", margin);
  42.         on_size();
  43.  
  44.         window.Repaint();
  45.  
  46.     }
  47.  
  48. }
  49. // ============================== //
  50.  
  51. function on_key_down(vkey) {
  52.  
  53.     if (vkey == 38) on_mouse_wheel(1) //UP ARROW
  54.     if (vkey == 40) on_mouse_wheel(-1); //DOWN ARROW
  55.  
  56. }
  57. // ============================== //
  58.  
  59. function on_size() {
  60.  
  61.     ww = window.Width;
  62.     wh = window.Height;
  63.  
  64.     discW = Math.max(minSize, ww - margin);
  65.     discH = Math.max(minSize, wh - margin);
  66.  
  67.     if (discH < discW) discW = discH;
  68.     else if (discW < discH) discH = discW;
  69.  
  70.     discX = ww / 2 - discW / 2;
  71.     discY = wh / 2 - discH / 2;
  72.  
  73.     resizedDisc = disc.resize(discW, discH);
  74.  
  75.     if (useDiscMask) {
  76.  
  77.         var discMask = gdi.CreateImage(discW, discH);
  78.         var g = discMask.GetGraphics();
  79.         g.FillSolidRect(0, 0, discW, discH, 0xffffffff);
  80.         g.SetSmoothingMode(2);
  81.         g.FillEllipse(1, 1, discW - 2, discH - 2, 0xff000000);
  82.         discMask.ReleaseGraphics(g);
  83.         resizedDisc.ApplyMask(discMask);
  84.         discMask.Dispose();
  85.  
  86.     }
  87.  
  88. }
  89. // ============================== //
  90. (function onRotationTimer() {
  91.  
  92.     getDiscImage();
  93.  
  94.     if (!fb.IsPlaying || fb.IsPaused) {
  95.         return;
  96.     }
  97.  
  98.     if (!rotationTimerStarted) {
  99.  
  100.         rotationTimer = window.CreateTimerInterval(rotationInterval);
  101.         rotationTimerStarted = true;
  102.     }
  103.  
  104. })();
  105. // ============================== //
  106.  
  107. function stopRotationTimer() {
  108.  
  109.     window.KillTimer(rotationTimer);
  110.     rotationTimerStarted = false;
  111.  
  112. }
  113. // ============================== //
  114.  
  115. function on_timer(id) {
  116.  
  117.     if (rotationTimer && id == rotationTimer.ID) {
  118.  
  119.         if (angle >= 360) angle = 0;
  120.         angle += 10;
  121.         (discW >= ww || discH >= wh) ? window.Repaint() : window.RepaintRect(discX, discY, discW, discH);
  122.  
  123.     }
  124.  
  125. }
  126. // ============================== //
  127.  
  128. function on_playback_stop(reason) {
  129.  
  130.     if (reason != 2) {
  131.         stopRotationTimer();
  132.         getDiscImage();
  133.     }
  134. }
  135. // ============================== //
  136.  
  137. function on_playback_pause(state) {
  138.  
  139.     state ? stopRotationTimer() : onRotationTimer();
  140.  
  141. }
  142. // ============================== //
  143.  
  144. function on_playback_new_track() {
  145.  
  146.     onRotationTimer();
  147.  
  148. }
  149. // ============================== //
  150. var tempAlbum;
  151.  
  152. function getDiscImage() {
  153.  
  154.     var nowPlayingDisc;
  155.  
  156.     var metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();
  157.  
  158.     if (!metadb) return;
  159.  
  160.     var currentAlbum = fb.TitleFormat("%album%").EvalWithMetadb(metadb);
  161.  
  162.     if (currentAlbum == tempAlbum) return;
  163.  
  164.     nowPlayingDisc = utils.GetAlbumArtV2(metadb, 2);
  165.  
  166.     nowPlayingDisc ? disc = nowPlayingDisc : disc = defaultDisc;
  167.  
  168.     tempAlbum = currentAlbum;
  169.  
  170.     on_size();
  171.     window.Repaint();
  172.  
  173. }
  174. // ============================== //
  175.  
  176. function on_selection_changed(metadb) {
  177.     if (!fb.IsPlaying) getDiscImage();
  178. }
  179. // ============================== //
  180.  
  181. function on_playlist_items_removed() {
  182.  
  183.     if (!plman.PlaylistItemCount(plman.ActivePlaylist)) disc = defaultDisc;
  184.     on_size();
  185.     window.Repaint();
  186.  
  187. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement