home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 January / 01_03.iso / service / winamp3 / files / skins / Chronabie.wal / scripts / volume.m < prev    next >
Text File  |  2002-05-12  |  6KB  |  216 lines

  1. // RhinoTrip's funky volumebar control script
  2. // contact:  jkaczmar@wso.williams.edu  and  www.stefanweb.com
  3. //
  4. // This script will control an animated volume bar
  5. //
  6. //
  7. // Add the following lines to your .xml
  8. //
  9. //   <layer x="25" y="1" id="volumeaniminfo" image="player.anim.volume" move="0" ghost="1"/>
  10. //
  11. //   <AnimatedLayer 
  12. //      x="121" y="231" 
  13. //      w="25" h="25"
  14. //      id="VolumeAnim" 
  15. //      image="player.anim.volume" 
  16. //      move="0"
  17. //      autoplay="0"
  18. //      autoreplay="0"
  19. //   />
  20. //
  21. //   <slider id="HiddenVolume" 
  22. //       ACTION="Volume" x="400" y="400" w="40" h="2"
  23. //       thumb="player.anim.volume" />
  24. //
  25. // You change the x and y, w and h of the animatedlayer to reflect the specifics of your 
  26. // animation.  w and h define the frame size, btw.  Not the entire image.  
  27. //
  28. // volumeaniminfo:  set the x = the number of frames of animation
  29. // volumeaniminfo:  the y value:
  30. //                               set to 0 if you do NOT have a song title ticker text area
  31. //                 set to 1 if you DO have a song title ticker text area
  32. //
  33. //       IMPORTANT NOTE:  this song ticker text area MUST HAVE an id="songticker" of you
  34. //                        will die.
  35. //
  36. //       The reason I include this option is so the script can write the volume level to 
  37. //       the songticker as the volume changes.
  38. //
  39. // Do NOT change the id= of either the volumeaniminfo or VolumeAnim or the script won't work.
  40. //
  41. // Make sure that the slider HiddenVolume is NOT showing on your skin by adjusting x and y if
  42. // necessary.  Don't change anything else though.
  43. //
  44. // You must also create a map file on a gradient to place underneath the animation.  You 
  45. // don't need to put it in the container section of the xml file, but you do have to load
  46. // it in the elements:
  47. //
  48. // <bitmap id="player.map.volume" file="player/player-map-volume.png"/>
  49. //
  50. // Again, DO NOT change the id.  It must be called player.map.volume for the script to work.
  51. //
  52. // If you need help creating a map file, check http://www.stefanweb.com/wa3/tutorials.html#UsingMaps
  53. //
  54. // Don't forget to include the script in your .xml
  55. //  <script id="volumeanim" file="volume.maki"/>
  56. //
  57. // Finally, if you want to use this script for something other than the "main" container, 
  58. // "normal" layout, you must change the names in the System.getContainer().getLayout() lines
  59. // just below to reflect what you want and recompile.  The compiler can be found at
  60. // http://www.stefanweb.com/wa3/index.html on the front page.
  61. //
  62.  
  63. #include "../../../lib/std.mi"
  64.  
  65. Function updateVolume(int v);
  66. Function initVolume();
  67. Function initTicker();
  68.  
  69. Global AnimatedLayer Volume;
  70. Global Layer VolumeInfo;
  71. Global Map volMap;
  72. Global Timer SongTickerTimer;
  73. Global Text SongTicker;
  74. Global Slider HiddenVolume;
  75.  
  76. Global Int VolChanging, VolFrames, VolFlag, TickerExist;
  77.  
  78. System.onScriptLoaded() {
  79.  
  80. volMap = new Map;
  81. volMap.loadMap("player.map.volume");
  82.  
  83. Volume = System.getContainer("main").getLayout("normal").getObject("VolumeAnim");
  84. VolumeInfo = System.getContainer("main").getLayout("normal").getObject("volumeaniminfo");
  85. HiddenVolume = System.getContainer("main").getLayout("normal").getObject("HiddenVolume");
  86.  
  87. initVolume();
  88.  
  89. }
  90.  
  91. // Initialzes song ticker
  92. initTicker() {
  93. SongTicker = System.getContainer("main").getLayout("normal").getObject("songticker");
  94.  
  95. SongTickerTimer = new Timer;
  96. SongTickerTimer.setDelay(1000);
  97. }
  98.  
  99. // Clears text area
  100. SongTickerTimer.onTimer() {
  101.   SongTicker.setText("");
  102. }
  103.  
  104. // Initializes volume anim
  105. initVolume() {
  106.  
  107.   VolumeInfo.setAlpha(0);
  108.  
  109.   VolChanging = 0;
  110.   VolFlag = 0;
  111.   VolFrames = Volume.getLength();
  112.   VolFrames = VolFrames - 1;
  113.   TickerExist = VolumeInfo.getTop();
  114.  
  115.   float u;
  116.   u = System.getVolume();
  117.   u = u / 255;
  118.   int k = u * VolFrames;
  119.   Volume.gotoFrame(k);
  120.  
  121.   if (TickerExist) initTicker();
  122. }
  123.  
  124. // Reads mouse drag on volume knob
  125. Volume.onMouseMove(int x, int y) {
  126.  
  127.     if (VolChanging) 
  128.     {
  129.     x = x - Volume.getLeft();
  130.     y = y - Volume.getTop();
  131.  
  132.     if (volMap.inRegion(x, y)) { 
  133.           float v = volMap.getValue(x, y);
  134.           if (!VolFlag) { 
  135.             updateVolume(v); 
  136.             if (v > 245) { 
  137.               VolFlag = 2;
  138.               updateVolume(255);
  139.             }
  140.             if (v < 10) { 
  141.               VolFlag = 1;
  142.               updateVolume(0);
  143.             }
  144.           }
  145.           else {
  146.             if ((VolFlag == 2) && (v > 120) && (v < 252)) VolFlag = 0;
  147.             if ((VolFlag == 1) && (v < 120) && (v > 2)) VolFlag = 0;
  148.           }
  149.         }
  150.     }
  151. }
  152.  
  153. // Reads mouse clicks on volume knob
  154. Volume.onLeftButtonDown(int x, int y) {
  155.     VolChanging = 1;
  156. }
  157.  
  158.  
  159. Volume.onLeftButtonUp(int x, int y) {
  160.  
  161.    if (VolChanging) {
  162.     x = x - Volume.getLeft();
  163.     y = y - Volume.getTop();
  164.  
  165.     if (volMap.inRegion(x, y)) { 
  166.        float v = volMap.getValue(x, y);
  167.        if (!VolFlag) { 
  168.          updateVolume(v); 
  169.          if (v > 245) { 
  170.            VolFlag = 2;
  171.            updateVolume(255);
  172.          }
  173.          if (v < 10) { 
  174.            VolFlag = 1;
  175.            updateVolume(0);
  176.          }
  177.        }
  178.        else {
  179.          if ((VolFlag == 2) && (v > 120) && (v < 252)) VolFlag = 0;
  180.          if ((VolFlag == 1) && (v < 120) && (v > 2)) VolFlag = 0;
  181.        }
  182.      }
  183.  
  184.     VolChanging = 0;
  185.    }
  186. }
  187.  
  188. // Updates Volume after drag/click
  189. updateVolume(float v) {
  190.  
  191.     if (v >= 0)
  192.     {
  193.     float k = v / 255;
  194.         int g = k * VolFrames;
  195.     Volume.gotoFrame(g);
  196.  
  197.         System.setVolume(v); 
  198.  
  199.         int p = k * 100;
  200.     SongTickerTimer.stop();
  201.     SongTickerTimer.start();
  202.     SongTicker.setText("Vol: " + System.integerToString(p) + "%");
  203.      }
  204. }
  205.  
  206. // Reads System Volume Changes
  207. HiddenVolume.onPostedPosition(int p) {
  208.   if (!VolChanging) {
  209.     Float f = getVolume();
  210.     f = f * VolFrames;
  211.     f = f / 255;
  212.     Volume.gotoFrame(f);    
  213.   }
  214. }
  215.  
  216.