Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==PREPROCESSOR==
- // ======================== //
- // @name "digital VU meter 2 (06.June.2012)"
- // @author "jscript by Hunter >> http://extremehunter1972.deviantart.com /
- // WSH Panel Mod component by Tianpeng Wang
- // VU Meter component by DRON
- // ==/PREPROCESSOR==
- // Requirements:
- // foobar2000_v1.1 or better >> http://foobar2000.org
- // WSH panel Mod v1.5.3.1 or better >> http://code.google.com/p/foo-wsh-panel-mod/downloads/list
- // VU Meter 2012-06-05 or better >> http://foobar2000.org.ru/forum/
- // Script with some examples here http://browse.deviantart.com/customization/skins/media/foobar2000/#/d51whqw
- // ======================= //
- function RGBA(r, g, b, a) {
- return ((a << 24) | (r << 16) | (g << 8) | (b));
- }
- function RGB(r, g, b) {
- return (0xff000000 | (r << 16) | (g << 8) | (b));
- }
- function StringFormat() {
- var h_align = 0,
- v_align = 0,
- trimming = 0,
- flags = 0;
- switch (arguments.length) {
- case 4:
- flags = arguments[3];
- case 3:
- trimming = arguments[2];
- case 2:
- v_align = arguments[1];
- case 1:
- h_align = arguments[0];
- break;
- default:
- return 0;
- }
- return ((h_align << 28) | (v_align << 24) | (trimming << 20) | flags);
- }
- VK_UP = 0x26;
- VK_DOWN = 0x28;
- VK_CONTROL = 0x11;
- DLGC_WANTARROWS = 0x0001;
- MF_SEPARATOR = 0x00000800;
- MF_STRING = 0x00000000;
- window.DlgCode = DLGC_WANTARROWS;
- VUMeter = new ActiveXObject("VUMeter");
- VUMeter.RegisterWindow(window.ID);
- // ======================= //
- (function init() {
- VUMeter.Offset = window.GetProperty("Offset", -10);
- })();
- // ======================= //
- function createImage() {
- if (ww <= 0 || wh <= 0) return;
- var minWidth = minHeight = 20;
- window.MinWidth = minWidth;
- orientation = "V";
- if (window.GetProperty("Orientation", "Vertical") == "Horizontal") orientation = "H";
- leftMargin = (orientation == "V" ? window.GetProperty("Margin -> Vertical Left", 5) : window.GetProperty("Margin -> Horizontal Left", 24));
- topMargin = window.GetProperty("Margin -> Top ", 5);
- bottomMargin = (orientation == "V" ? window.GetProperty("Margin -> Vertical Bottom", 24) : window.GetProperty("Margin -> Horizontal Bottom", 5));
- rightMargin = window.GetProperty("Margin -> Right", 5);
- centerPadding = window.GetProperty("Padding -> Center", 4);
- peakLevelPadding = window.GetProperty("Padding -> Peak <-> Level ", 6);
- levelLineThickness = window.GetProperty("Thickness -> Level Line", 1);
- if (levelLineThickness < 1) {
- window.SetProperty("Thickness -> Level Line", 1);
- levelLineThickness = 1;
- }
- peakLineThickness = window.GetProperty("Thickness -> Peak Line", 4);
- peakHeight = peakLineThickness;
- if (orientation == "V") {
- leftPeakX = Math.floor(ww / 2) - peakLineThickness - centerPadding;
- rightPeakX = Math.floor(ww / 2) + centerPadding;
- leftPeakY = topMargin;
- rightPeakY = topMargin;
- leftLevelX = leftMargin;
- rightLevelX = rightPeakX + peakLineThickness + peakLevelPadding;
- leftLevelWidth = leftPeakX - peakLevelPadding - leftMargin;
- rightLevelWidth = ww - rightLevelX - leftLevelX;
- leftLevelY = topMargin;
- rightLevelY = topMargin;
- leftLevelWidth = leftPeakX - peakLevelPadding - leftLevelX;
- rightLevelWidth = ww - rightMargin - rightLevelX;
- } else if (orientation == "H") {
- leftPeakX = leftMargin;
- leftPeakY = Math.floor(wh / 2) - peakHeight - centerPadding;
- leftPeakHeight = window.GetProperty("Thickness -> Peak Line", 20);
- rightPeakHeight = leftPeakHeight;
- rightPeakX = leftMargin;
- rightPeakY = Math.floor(wh / 2) + centerPadding;
- leftLevelX = leftMargin;
- rightLevelX = leftMargin;
- leftLevelWidth = leftPeakX - peakLevelPadding - leftLevelX;
- rightLevelWidth = ww - rightLevelX - leftLevelX;
- leftLevelX = leftMargin;
- rightLevelX = leftMargin;
- leftLevelY = topMargin;
- rightLevelY = rightPeakY + peakHeight + peakLevelPadding;
- leftLevelWidth = leftPeakX - peakLevelPadding - leftLevelX;
- rightLevelWidth = wh - rightLevelX - leftLevelX;
- leftLevelHeight = leftPeakY - peakLevelPadding - topMargin;
- rightLevelHeight = wh - bottomMargin - rightLevelY;
- }
- switch (window.GetProperty("Color -> Peak Preset", "Custom Peak Color")) {
- case "Yellow":
- peakGradient1 = eval(window.GetProperty("Color -> Peak Yellow Gradient 1", "RGBA(255,255,0,155)"));
- peakGradient2 = eval(window.GetProperty("Color -> Peak Yellow Gradient 2", "RGBA(200,200,0,255)"));
- id = 1;
- break;
- case "Blue":
- peakGradient1 = eval(window.GetProperty("Color -> Peak Blue Gradient 1", "RGBA(65,105,225,155)"));
- peakGradient2 = eval(window.GetProperty("Color -> Peak Blue Gradient 2", "RGBA(65,105,255,255)"));
- id = 2;
- break;
- case "Green":
- peakGradient1 = eval(window.GetProperty("Color -> Peak Green Gradient 1", "RGBA(0,255,0,155)"));
- peakGradient2 = eval(window.GetProperty("Color -> Peak Green Gradient 2", "RGBA(0,155,0,255)"));
- id = 3;
- break;
- case "White":
- peakGradient1 = eval(window.GetProperty("Color -> Peak White Gradient 1", "RGBA(255,255,255,155)"));
- peakGradient2 = eval(window.GetProperty("Color -> Peak White Gradient 2", "RGBA(235,235,235,255)"));
- id = 4;
- break;
- case "Custom Peak Color":
- peakGradient1 = eval(window.GetProperty("Color -> Peak Custom Gradient 1 ", "RGBA(255,255,255,255)"));
- peakGradient2 = eval(window.GetProperty("Color -> Peak Custom Gradient 2 ", "RGBA(155,155,155,255)"));
- id = 5;
- break;
- default:
- id = 5;
- }
- levelGradient1 = eval(window.GetProperty("Color -> Level Gradient 1", "RGBA(0,120,140,155)"));
- levelGradient2 = eval(window.GetProperty("Color -> Level Gradient 2", "RGBA(0,120,140,155)"));
- backgroundColor = eval(window.GetProperty("Color -> Background", "RGB(255,255,255)"));
- //---> create image mask
- var mask = gdi.CreateImage(ww, wh);
- var _grMask = mask.GetGraphics();
- _grMask.FillSolidRect(0, 0, ww, wh, 0xFF000000);
- if (orientation == "V") {
- count = Math.floor((wh - topMargin - bottomMargin) / levelLineThickness);
- } else if (orientation == "H") {
- count = Math.floor((ww - leftMargin - rightMargin) / levelLineThickness);
- } else count = 0;
- peakWidth = peakLineThickness;
- peakHeight = peakLineThickness;
- var levelBackgroundGrad1 = eval(window.GetProperty("Color -> Level Background Gradient 1", "RGBA(225, 235, 240, 255)"));
- var levelBackgroundGrad2 = eval(window.GetProperty("Color -> Level Background Gradient 2", "RGBA(225, 235, 240, 255)"));
- var leftLevelBackgroundFocus = eval(window.GetProperty("Focus -> Level Background Left Gradient", "0.5"));
- var rightLevelBackgroundFocus = eval(window.GetProperty("Focus -> Level Background Right Gradient", "0.5"));
- var angle = orientation == "V" ? 0 : 90;
- levelLineBackgroundImg = gdi.CreateImage(ww, wh);
- _grLBI = levelLineBackgroundImg.GetGraphics();
- for (var i = 0; i < count; i++) {
- if (window.GetProperty("Solid Level", true) ? true : !(i % 2)) {
- if (orientation == "V") {
- _grMask.FillSolidRect(leftLevelX, levelLineThickness * i + leftLevelY, leftLevelWidth, levelLineThickness, 0xFFFFFFFF);
- _grMask.FillSolidRect(rightLevelX, levelLineThickness * i + leftLevelY, rightLevelWidth, levelLineThickness, 0xFFFFFFFF);
- _grLBI.FillGradRect(leftLevelX - 2, levelLineThickness * i + leftLevelY, leftLevelWidth + 4, levelLineThickness, angle, levelBackgroundGrad1, levelBackgroundGrad2, leftLevelBackgroundFocus);
- _grLBI.FillGradRect(rightLevelX - 2, levelLineThickness * i + leftLevelY, rightLevelWidth + 4, levelLineThickness, angle, levelBackgroundGrad1, levelBackgroundGrad2, rightLevelBackgroundFocus);
- peakHeight = (i + 1) * levelLineThickness;
- }
- if (orientation == "H") {
- _grMask.FillSolidRect(levelLineThickness * i + leftLevelX, leftLevelY, levelLineThickness, leftLevelHeight, 0xFFFFFFFF);
- _grMask.FillSolidRect(levelLineThickness * i + rightLevelX, rightLevelY, levelLineThickness, leftLevelHeight, 0xFFFFFFFF);
- _grLBI.FillGradRect(levelLineThickness * i + leftLevelX, leftLevelY - 2, levelLineThickness, leftLevelHeight + 4, angle, levelBackgroundGrad1, levelBackgroundGrad2, rightLevelBackgroundFocus);
- _grLBI.FillGradRect(levelLineThickness * i + rightLevelX, rightLevelY - 2, levelLineThickness, leftLevelHeight + 4, angle, levelBackgroundGrad1, levelBackgroundGrad2, rightLevelBackgroundFocus);
- peakWidth = (i + 1) * levelLineThickness;
- }
- }
- }
- _grMask.FillSolidRect(leftPeakX, leftPeakY, peakWidth, peakHeight, 0xFFFFFFFF);
- _grMask.FillSolidRect(rightPeakX, rightPeakY, peakWidth, peakHeight, 0xFFFFFFFF);
- levelLineBackgroundImg.ReleaseGraphics(_grLBI);
- mask.ReleaseGraphics(_grMask)
- //---> create image
- img = gdi.CreateImage(ww, wh);
- _gr = img.GetGraphics();
- _gr.FillSolidRect(0, 0, ww, wh, backgroundColor);
- img.ReleaseGraphics(_gr);
- //---> apply mask to image
- var mask = mask.Resize(ww, wh);
- img.ApplyMask(mask);
- mask.Dispose();
- peakLineBackgroundImg = gdi.CreateImage(ww, wh);
- _gr = peakLineBackgroundImg.GetGraphics();
- var angle = 0;
- if (orientation == "H") {
- angle = window.GetProperty("Angle -> Peak Background Horizontal", 90);
- }
- if (orientation == "V") {
- angle = window.GetProperty("Angle -> Peak Background Vertical", angle);
- }
- var leftPeakBackgroundFocus = eval(window.GetProperty("Focus -> Peak Background Left", "0.5"));
- var rightPeakBackgroundFocus = eval(window.GetProperty("Focus -> Peak Background Right", "0.5"));
- var grad1 = eval(window.GetProperty("Color -> Peak Background Gradient 1", "RGBA(210, 210, 210, 255)"));
- var grad2 = eval(window.GetProperty("Color -> Peak Background Gradient 2", "RGBA(225, 255, 255, 255)"));
- _gr.FillGradRect(leftPeakX - 2, leftPeakY - 2, peakWidth + 4, peakHeight + 4, angle, grad1, grad2, leftPeakBackgroundFocus);
- _gr.FillGradRect(rightPeakX - 2, rightPeakY - 2, peakWidth + 4, peakHeight + 4, angle, grad1, grad2, rightPeakBackgroundFocus);
- peakLineBackgroundImg.ReleaseGraphics(_gr);
- }
- // ================= //
- function on_paint(gr) {
- if (wh > minHeight) {
- gr.DrawImage(peakLineBackgroundImg, 0, 0, ww, wh, 0, 0, ww, wh, 0, 255);
- gr.DrawImage(levelLineBackgroundImg, 0, 0, ww, wh, 0, 0, ww, wh, 0, 255);
- var swapLevelPeak = window.GetProperty("Swap -> Peak with Level");
- if (swapLevelPeak) {
- $leftPeak = VUMeter.LeftLevel;
- $rightPeak = VUMeter.RightLevel;
- $leftLevel = VUMeter.LeftPeak;
- $rightLevel = VUMeter.RightPeak;
- } else {
- $leftLevel = VUMeter.LeftLevel;
- $rightLevel = VUMeter.RightLevel;
- $leftPeak = VUMeter.LeftPeak;
- $rightPeak = VUMeter.RightPeak;
- }
- var flipLevel = window.GetProperty("Flip -> Level", false);
- var flipPeak = window.GetProperty("Flip -> Peak", false);
- if (orientation == "V") {
- var bottomM = (wh - bottomMargin);
- if (!flipPeak) {
- leftPeakY = bottomM - bottomM * $leftPeak + topMargin;
- rightPeakY = bottomM - bottomM * $rightPeak + topMargin;
- }
- leftPeakHeight = bottomM * $leftPeak - topMargin;
- rightPeakHeight = bottomM * $rightPeak - topMargin;
- leftPeakWidth = peakLineThickness;
- rightPeakWidth = peakLineThickness;
- if (!flipLevel) {
- leftLevelY = bottomM - bottomM * $leftLevel + topMargin;
- rightLevelY = bottomM - bottomM * $rightLevel + topMargin;
- }
- leftLevelHeight = bottomM * $leftLevel - topMargin;
- rightLevelHeight = bottomM * $rightLevel - topMargin;
- }
- if (orientation == "H") {
- var rightM = ww - rightMargin;
- leftPeakWidth = rightM * $leftPeak - leftMargin;
- rightPeakWidth = rightM * $rightPeak - leftMargin;
- leftPeakHeight = peakLineThickness;
- rightPeakHeight = peakLineThickness;
- leftLevelWidth = rightM * $leftLevel - leftMargin;
- rightLevelWidth = rightM * $rightLevel - leftMargin;
- if (flipPeak) {
- leftPeakX = rightM - rightM * $leftPeak + leftMargin;
- rightPeakX = rightM - rightM * $rightPeak + leftMargin;
- }
- if (flipLevel) {
- leftLevelX = rightM - rightM * $leftLevel + leftMargin;
- rightLevelX = rightM - rightM * $rightLevel + leftMargin;
- }
- }
- var angle = orientation == "V" ? 0 : 90;
- var leftPeakGradientFocus = eval(window.GetProperty("Focus -> Peak Left Gradient", "0.5"));
- var rightPeakGradientFocus = eval(window.GetProperty("Focus -> Peak Right Gradient", "0.5"));
- var leftLevelGradientFocus = eval(window.GetProperty("Focus -> Level Left Gradient", "0.5"));
- var rightLevelGradientFocus = eval(window.GetProperty("Focus -> Level Right Gradient", "0.5"));
- gr.FillGradRect(leftPeakX - 2, leftPeakY - 2, leftPeakWidth + 4, leftPeakHeight + 4, angle, peakGradient1, peakGradient2, leftPeakGradientFocus);
- gr.FillGradRect(rightPeakX - 2, rightPeakY - 2, rightPeakWidth + 4, rightPeakHeight + 4, angle, peakGradient1, peakGradient2, rightPeakGradientFocus);
- gr.FillGradRect(leftLevelX - 2, leftLevelY - 2, leftLevelWidth + 4, leftLevelHeight + 4, angle, levelGradient1, levelGradient2, leftPeakGradientFocus);
- gr.FillGradRect(rightLevelX - 2, rightLevelY - 2, rightLevelWidth + 4, rightLevelHeight + 4, angle, levelGradient1, levelGradient2, rightPeakGradientFocus);
- gr.DrawImage(img, 0, 0, ww, wh, 0, 0, ww, wh, 0, 255);
- gr.SetTextRenderingHint(5);
- var levelFont = gdi.font("Tahoma", 10, 0);
- var channelFont = gdi.font("Tahoma", 12, 1);
- var channelColor = eval(window.GetProperty("Color -> Text Channels", "RGBA(60,80,100,255)"));
- var SF = StringFormat(1, 1);
- if (orientation == "V") {
- channelLWidth = gr.CalcTextWidth("O", channelFont);
- channelLX = (ww / 2) / 2 - channelLWidth;
- channelRX = ww - (ww / 4);
- channelLY = bottomM - 1;
- channelRY = bottomM - 1;
- channelRWidth = channelLWidth;
- channelLHeight = wh - bottomM;
- channelRHeight = wh - bottomM;
- offsetX = 0;
- offsetY = bottomM;
- offsetWidth = ww;
- offsetHeight = wh - bottomM - 1;
- }
- if (orientation == "H") {
- channelLHeight = gr.CalcTextHeight("O", channelFont);
- channelLX = 0;
- channelRX = 0;
- channelLY = (wh / 2) / 2 - channelLHeight / 2;
- channelRY = wh - (wh / 4) - channelLHeight / 2;
- channelLWidth = leftMargin;
- channelRWidth = leftMargin;
- channelRHeight = channelLHeight;
- offsetX = 0;
- offsetY = 0;
- offsetWidth = leftMargin - 1;
- offsetHeight = wh;
- }
- gr.DrawString(VUMeter.Offset, levelFont, eval(window.GetProperty("Color -> Text Offset", "RGBA(55,55,55,255)")), offsetX, offsetY, offsetWidth, offsetHeight, SF);
- if (ww > channelLWidth * 5 && wh > channelLHeight * 3) {
- gr.DrawString("L", channelFont, channelColor, channelLX, channelLY, channelLWidth, channelLHeight, SF);
- gr.DrawString("R", channelFont, channelColor, channelRX, channelRY, channelRWidth, channelRHeight, SF);
- }
- }
- }
- // ======================= //
- function on_size() {
- ww = window.Width;
- wh = window.Height;
- createImage();
- }
- // ======================= //
- function on_mouse_wheel(step) {
- if (utils.IsKeyPressed(VK_CONTROL)) window.SetProperty("Offset", VUMeter.Offset + step);
- init();
- }
- // ======================= //
- function on_key_down(vkey) {
- if (vkey == VK_UP) on_mouse_wheel(1);
- if (vkey == VK_DOWN) on_mouse_wheel(-1);
- }
- // ======================= //
- function on_mouse_rbtn_up(x, y) {
- var _menu = window.CreatePopupMenu();
- _menu.AppendMenuItem(MF_STRING, 1, "Yellow");
- _menu.AppendMenuItem(MF_STRING, 2, "Blue");
- _menu.AppendMenuItem(MF_STRING, 3, "Green");
- _menu.AppendMenuItem(MF_STRING, 4, "White");
- _menu.AppendMenuItem(MF_STRING, 5, "Custom");
- _menu.CheckMenuRadioItem(1, 5, id);
- _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
- _menu.AppendMenuItem(MF_STRING, 6, window.GetProperty("Orientation") == "Horizontal" ? "Vertical" : "Horizontal");
- _menu.AppendMenuItem(MF_STRING, 7, "Flip Peak");
- _menu.CheckMenuItem(7, window.GetProperty("Flip -> Peak", false));
- _menu.AppendMenuItem(MF_STRING, 8, "Flip Level");
- _menu.CheckMenuItem(8, window.GetProperty("Flip -> Level", false));
- _menu.AppendMenuItem(MF_STRING, 9, "Swap -> Peak with Level");
- _menu.CheckMenuItem(9, window.GetProperty("Swap -> Peak with Level", false));
- _menu.AppendMenuItem(MF_STRING, 10, "Solid Level");
- _menu.CheckMenuItem(10, window.GetProperty("Solid Level", false));
- _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
- _menu.AppendMenuItem(MF_STRING, 12, "Configure...");
- _menu.AppendMenuItem(MF_STRING, 13, "Properties...");
- idx = _menu.TrackPopupMenu(x, y);
- switch (idx) {
- case 1:
- window.SetProperty("Color -> Peak Preset", "Yellow");
- createImage();
- break;
- case 2:
- window.SetProperty("Color -> Peak Preset", "Blue");
- createImage();
- break;
- case 3:
- window.SetProperty("Color -> Peak Preset", "Green");
- createImage();
- break;
- case 4:
- window.SetProperty("Color -> Peak Preset", "White");
- createImage();
- break;
- case 5:
- window.SetProperty("Color -> Peak Preset", "Custom Peak Color");
- createImage();
- break;
- case 6:
- window.SetProperty("Orientation", window.GetProperty("Orientation") == "Vertical" ? "Horizontal" : "Vertical");
- createImage();
- break;
- case 7:
- window.SetProperty("Flip -> Peak", window.GetProperty("Flip -> Peak") ? false : true);
- createImage();
- break;
- case 8:
- window.SetProperty("Flip -> Level", window.GetProperty("Flip -> Level") ? false : true);
- createImage();
- break;
- case 9:
- window.SetProperty("Swap -> Peak with Level", window.GetProperty("Swap -> Peak with Level") ? false : true);
- createImage();
- break;
- case 10:
- window.SetProperty("Solid Level", window.GetProperty("Solid Level") ? false : true);
- createImage();
- break;
- case 11:
- break;
- case 12:
- window.ShowConfigure();
- break;
- case 13:
- window.ShowProperties();
- break;
- }
- _menu.Dispose();
- return true
- }
- // ======================= //
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement