Скрипты для foo_uie_wsh_panel_mod

Список разделов foobar2000 Секреты foobar2000

Описание: Кнопочки, конфиги, секреты, советы.

Сообщение #381 AHAPXICT » 06.06.2015, 21:07

kgena_ua, я сгорел!!! Как всегда, пока рисовал новые картинки кнопок, пропустил интересное обсуждение! Минут за двадцать путём переноса целого скрипта для отображения картинок ИРадио станций в оригинальный скрипт DarkOne Cover Panel и по быстрому распихивая что куда нужно ( в on_paint(gr) например) добился работы двух скриптов одновременно. С глюками конечно но пашет! Жаль что сейчас нет времени досконально изучить что я там напартачил и где ещё ошибки.
seriousstas, наверно можно))))
MC Web:Остается написать поисковик и загрузчик этих файлов.
По моему это достаточно сложно, хотя сам специалистом в этом деле не являюсь. Как по мне не сложно самому найти или сделать наконец изображение любимой станции. Что бы не было потом как в скрипте от marc2003 что запахаешься эти картинки удалять)))))
MC Web:также изображения жанра трека
У самого такая мысль есть. Для ELP Playlist менять картинки для радио в зависимости от жанра. У меня в сборке уже давно лежат 4 разных изображения.
Так что если кто займётся дайте знать. Или в этом скрипте добавить штук пять дефолтных картинок привязанных к жанру.

Добавлено спустя 5 часов 41 минуту:
По моему этот скрипт можно повесить даже на CoverFlow от Br3tt))))
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 4 месяца

Сообщение #382 kgena_ua » 07.06.2015, 11:13

seriousstas:осталось как-то объединить с WSH плейлистом
А если не через WSH плейлист, а в PSS, при условии что плейлист прозрачный.
В корне создаем папку settings.
В скрипте:

в function on_metadb_changed() внизу прописываем create_file_name();
и добавляем в конец скрипта
Код: Выделить всё
var set_path = fb.ProfilePath + "\\settings\\";

function create_file_name() {
    try {
        fso.deleteFile( set_path + "radio_logo_" + "*" )
    } catch(e) {};
    fso.CreateTextFile( set_path + "radio_logo_" + file_name.replace(/.jpg|.jpeg|.png|.gif|.bmp|.tiff/g,'') );
}

В PSS пищем:
Код: Выделить всё
$puts(logo,$findfile(%ps_foobar2000_path%/settings/radio_logo_*))
$puts(logo,$right($get(logo),$sub($len($get(logo)),$strrchr($get(logo),'\'),11)))
$puts(f_logo,$findfile(%ps_foobar2000_path%/Logos/$get(logo).*))

$drawimage(20,20, $sub(%ps_width%,40)  ,  $sub(%ps_height%,40) ,$get(f_logo),,,50)
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #383 seriousstas » 08.06.2015, 19:17

А если не через WSH плейлист, а в PSS, при условии что плейлист прозрачный.
В корне создаем папку settings.
Нормально решение для фонового отображения картинки радиостанций .

По моему этот скрипт можно повесить даже на CoverFlow от Br3tt))))
Если у Вас будет пример с возможной заменой именно иконки играющей станции (в CoverFlow или этого http://br3tt.deviantart.com/art/JSPlaylist-509803158 плейлиста) - поделитесь пожалуйста .
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #384 AHAPXICT » 08.06.2015, 23:33

seriousstas, около четырёх тысяч строк программного кода не для птицы моего полёта)))) Проверил и на CoverFlow, вставляя туда код от kgena_ua, этот эксперимент показал что такая возможность есть, но как вы понимаете нормальной работой скрипта это назвать сложно))))
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 4 месяца

Сообщение #385 kgena_ua » 26.06.2015, 21:45

Опять часы :smile: .
Изменения: переключение аналоговые часы - цифровые, "плавное" переключение цвета, мелкие изменения.
Главное для пользователя:
ранее для установки своих цветов необходимо было менять скрипт в нескольких местах. Теперь достаточно добавить (удалить) всего одну строку (строки), указав код RGB и наименование (стр. 48 и далее).

var colors = [
[ RGB(0,157,255),"Blue" ],
[ RGB(140,164,179),"Slate Gray" ],
[ RGB(200,200,200),"Gray" ],
[ RGB(255,255,224),"Light Yellow" ]
];


Обязательно сохранение синтаксиса - последняя строка без запятой.
Код: Выделить всё
// ==PREPROCESSOR==
// @name "fooClock 1.0"
// @author "Hunter modifed kgena_ua"
// ==/PREPROCESSOR==

function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }   
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }    

DT_CENTER = 0x00000001;
DT_LEFT = 0x00000000;
DT_RIGHT = 0x00000002;

var hour_font = gdi.Font("Arial", 11, 0);
var date_font = gdi.Font("Arial", 11, 0);
var dclock_font = gdi.Font("Arial", 14, 1);

var d = new Date();
var clock_timer = window.SetInterval(function() {d = new Date(); window.Repaint()}, 1000);
/*
var clock_timer = window.SetInterval(on_timer, 1000);
function on_timer(id) {
    d = new Date();
    window.Repaint();
}
*/
var days = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

var radius_h = 68;  //65
var radius_h_dot = 3;
var radius_h_numbers = radius_h - 15;
var radius_h_hand = radius_h - 24;
var h_hand_w = 4;

var radius_m = radius_h;
var radius_m_dot = 3;
var radius_m_hand = radius_m - 9;
var m_hand_w = 2;

var radius_s_hand = radius_m - 9;
var s_hand_w = 1;

var center_r = 10;
var center_r2 = 4;

var x, y, ww, wh, w_h;

var colors = [
    [ RGB(0,157,255),"Blue" ],
    [ RGB(140,164,179),"Slate Gray" ],
    [ RGB(200,200,200),"Gray" ],
    [ RGB(255,255,224),"Light Yellow" ]
];

get_color();

function get_color() {
    try {
        color = colors[window.GetProperty("Color",0)][0];
    } catch(e) {
        color = window.SetProperty("Color",0);
    }
    R = getRed(color);   
    G = getGreen(color);   
    B = getBlue(color);
}   

function on_paint(gr) {
    gr.FillSolidRect(0, 0, ww, wh, RGB(20,20,20));   

    dcac = window.GetProperty("dcac",true)

    RGBtoHSV(R, G, B);
   
    var colorY1 = HSVtoRGB(H, S, V);                        // Second Hand   
    var colorY2 = HSVtoRGB(H, S, Math.round(V / 100 * 90)); // Minute Hand
    var colorY3 = HSVtoRGB(H, S, Math.round(V / 100 * 75)); // Hour Hand, Text
    var colorY4 = HSVtoRGB(H, S, Math.round(V / 100 * 75)); // Minute Dots, Hour Numbers

//    gr.SetTextRenderingHint(5);
    gr.SetSmoothingMode(4);
   
    // ************* Minute Dots
   
    var steps = 60;
    var radius =  radius_m;
    var minute_r = radius_m_dot;

    for (var i = 0; i < steps; i++) {
//        xV = (radius * Math.cos(Math.PI * i / steps * 2));
//        yV = (radius * Math.sin(Math.PI * i / steps * 2));
//        gr.FillEllipse(x + xV - minute_r / 2, y + yV - minute_r / 2, minute_r, minute_r, colorY3);
       
        xV2 = (radius * Math.cos(Math.PI * i / steps * 2));
        yV2 = (radius * Math.sin(Math.PI * i / steps * 2));
        xV1 = ((radius - minute_r) * Math.cos(Math.PI * i / steps * 2));
        yV1 = ((radius - minute_r) * Math.sin(Math.PI * i / steps * 2));

        dcac && gr.DrawLine(x + xV1 + 1, y + yV1 + 1, x + xV2 + 1, y + yV2 + 1, minute_r, RGB(0,0,0));
        dcac && gr.DrawLine(x + xV1, y + yV1, x + xV2, y + yV2, minute_r, colorY4);
    } 
   
    // ************* Hour Dots
   
    var steps = 12;
    var radius = radius_h;
    var hour_r = radius_h_dot;

    for (var i = 0; i < steps; i++) {
//        xV = (radius * Math.cos(Math.PI * i / steps * 2 - Math.PI / 2));
//        yV = (radius * Math.sin(Math.PI * i / steps * 2 - Math.PI / 2));
//        gr.FillEllipse(x + xV - hour_r / 2, y + yV - hour_r / 2, hour_r, hour_r, colorY3);

        xV2 = (radius * Math.cos(Math.PI * i / steps * 2));
        yV2 = (radius * Math.sin(Math.PI * i / steps * 2));
        xV1 = ((radius - hour_r - 3) * Math.cos(Math.PI * i / steps * 2));
        yV1 = ((radius - hour_r - 3) * Math.sin(Math.PI * i / steps * 2));

        dcac && gr.DrawLine(x + xV1 + 1, y + yV1 + 1, x + xV2 + 1, y + yV2 + 1, hour_r, RGB(0,0,0));
        dcac && gr.DrawLine(x + xV1, y + yV1, x + xV2, y + yV2, hour_r, colorY4);
    }
   
    // ************* Hour Numbers

    var radius =  radius_h_numbers;

    for (var i = 0; i < steps; i++) {
       
        i == 0 ? hours = 12 : hours = i;

        xV = (radius * Math.cos(Math.PI * i / steps * 2 - Math.PI / 2));
        yV = (radius * Math.sin(Math.PI * i / steps * 2 - Math.PI / 2));

        shift = i > 0 && i < 6 ? 2 : 0;

        dcac && gr.DrawString(hours, hour_font, RGB(0,0,0) + 1, x + xV - hour_r / 2 + shift + 1, y + yV - hour_r / 2 + 1, hour_r, hour_r, 0x11005000); //
        dcac && gr.DrawString(hours, hour_font, colorY4, x + xV - hour_r / 2 + shift, y + yV - hour_r / 2, hour_r, hour_r, 0x11005000); //
    }
   
    // ************* Hour Hand
   
    var steps = 12;
    var radius = radius_h_hand;
    var m_angle = d.getHours() % 12 + d.getMinutes() / 60;

    xV = (radius * Math.cos(Math.PI * m_angle / steps * 2 - Math.PI / 2));
    yV = (radius * Math.sin(Math.PI * m_angle / steps * 2 - Math.PI / 2));

    dcac && gr.DrawLine(x + 1, y + 1, x + xV + 1, y + yV + 1, h_hand_w, RGB(0,0,0));
    dcac && gr.DrawLine(x, y, x + xV, y + yV, h_hand_w, colorY3);   
   
    // ************* Minute Hand

    var steps = 60;
    var radius = radius_m_hand;
    var m_angle = d.getMinutes() + d.getSeconds() / 60;

    xV = (radius * Math.cos(Math.PI * m_angle / steps * 2 - Math.PI / 2));
    yV = (radius * Math.sin(Math.PI * m_angle / steps * 2 - Math.PI / 2));

    dcac && gr.DrawLine(x + 1, y + 1, x + xV + 1, y + yV + 1, m_hand_w, RGB(0,0,0));
    dcac && gr.DrawLine(x, y, x + xV, y + yV, m_hand_w, colorY2);

    // ************* center dot (shadow)

    dcac && gr.FillEllipse(x - center_r / 2 + 1, y - center_r / 2 + 1, center_r + 1, center_r + 1, RGBA(0,0,0,40)); //Center dot

    // ************* Second Hand

    var steps = 60;
    var radius = radius_s_hand;
    var s_angle = d.getSeconds();

    xV = (radius * Math.cos(Math.PI * s_angle / steps * 2 - Math.PI / 2));
    yV = (radius * Math.sin(Math.PI * s_angle / steps * 2 - Math.PI / 2));

    dcac && gr.DrawLine(x+1, y+1 , x + xV+1, y + yV+1, s_hand_w, RGB(0,0,0));
    dcac && gr.DrawLine(x, y , x + xV, y + yV, s_hand_w, colorY1);

    // ************* Second Hand  (opposite side)
   
    var radius = radius_s_hand / 3;
    var s_angle = 90 + d.getSeconds();

    xV = (radius * Math.cos(Math.PI * s_angle / steps * 2 - Math.PI / 2));
    yV = (radius * Math.sin(Math.PI * s_angle / steps * 2 - Math.PI / 2));

    dcac && gr.DrawLine(x + 1, y + 1, x + xV + 1, y + yV + 1, s_hand_w, RGB(0,0,0));
    dcac && gr.DrawLine(x, y, x + xV, y + yV, s_hand_w, colorY1);

    // ************* center dot

    dcac && gr.FillEllipse(x - center_r / 2, y - center_r / 2, center_r, center_r, colorY1); //Center dot
    dcac && gr.FillEllipse(x - center_r2 / 2, y - center_r2 / 2, center_r2, center_r2, RGB(0,0,0)); //Center dot2

    // ************* Date, Digital Clock

    if(window.GetProperty("calendar",true)) {
        y_txt = dcac ? y + radius_h + 8 : y + 20;
        txt = days[d.getDay()] + "\r\n" + d.getDate() + " " + months[d.getMonth()] + ", " + d.getYear();
        gr.GdiDrawText(txt, date_font, RGB(0,0,0), 1, y_txt + 1, ww, wh, DT_CENTER);
        gr.GdiDrawText(txt, date_font, colorY2, 0, y_txt + 0, ww, wh, DT_CENTER);
    }

    !dcac && gr.GdiDrawText(d.toLocaleTimeString(), dclock_font, RGB(0,0,0), 1, y + 1, ww, wh, DT_CENTER);
    !dcac && gr.GdiDrawText(d.toLocaleTimeString(), dclock_font, colorY1, 0, y, ww, wh, DT_CENTER);
   
//    gr.GdiDrawText(colors.length, dclock_font, colors[2][0], 10, 10, ww, wh, DT_LEFT);
}

function on_mouse_move(x,y) {
    window.SetCursor(32649);
}

function on_mouse_leave() {
    window.SetCursor(32512);
    window.Repaint();
}

function on_size() {
    ww = window.Width;
    wh = window.Height;
    x = ww / 2;         // CENTER
    y = wh / 2 - 10;    // CENTER
}

function on_colors_changed() {
    window.Repaint();
}

function on_mouse_lbtn_down(x, y) {
    ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
}

function on_mouse_lbtn_up(x, y) {
    MF_STRING = 0x00000000;
    MF_SEPARATOR = 0x00000800;
 
    var _menu = window.CreatePopupMenu();
    var idx;

    for (var i = 0; i < colors.length; i++) {
        _menu.AppendMenuItem(MF_STRING, i, colors[i][1]);
        _menu.CheckMenuRadioItem(0, colors.length, window.GetProperty("Color"));
        _menu.EnableMenuItem(window.GetProperty("Color"),1);
    }

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_STRING, 20, "Analogl clock");
    _menu.CheckMenuItem(20, window.GetProperty("dcac"));
    _menu.AppendMenuItem(MF_STRING, 30, "Calendar");
    _menu.CheckMenuItem(30, window.GetProperty("calendar"));
   
    if (ShiftDown) {
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
        _menu.AppendMenuItem(MF_STRING, 40, "Properties");
        _menu.AppendMenuItem(MF_STRING, 500, "Configure...");
    }
   
    idx = _menu.TrackPopupMenu(x, y);
   
    switch(true) {
    case (idx >= 0 && idx < colors.length):
        ch_color(idx);
        break;
    case (idx == 20):
        window.GetProperty("dcac") == false ? window.SetProperty("dcac", true) : window.SetProperty("dcac", false);
        window.Repaint();
        break;
    case (idx == 30):
        window.GetProperty("calendar") == false ? window.SetProperty("calendar", true) : window.SetProperty("calendar", false);
        break;
    case (idx == 40):
        window.ShowProperties();
         break;
    case (idx == 50):
        window.ShowConfigure();
        break;
    }
    _menu.Dispose();
    return true;
}

function ch_color(idx) {
    g_timer && window.ClearInterval(g_timer);
    old_R = R; old_G = G; old_B = B;
   
    window.SetProperty("Color", idx);
   
    get_color();
    new_R = R; new_G = G; new_B = B;

    step_R = (new_R - old_R)/255; step_G = (new_G - old_G)/255; step_B = (new_B - old_B)/255;

    var g_timer = window.SetInterval(function() {
        old_R = old_R + step_R; old_G = old_G + step_G; old_B = old_B + step_B;
        R = Math.round(old_R); G = Math.round(old_G); B = Math.round(old_B);
        window.Repaint();
        if (
            step_R < 0 && R <= new_R || step_G < 0 && G <= new_G || step_B < 0 && B <= new_B ||
            step_R > 0 && R >= new_R || step_G > 0 && G >= new_G || step_B > 0 && B >= new_B
        ) {window.ClearInterval(g_timer); R = new_R; G = new_G; B = new_B};
    }, 3);
}

function getRed(color) {
   return ((color >> 16) & 0xff);
}

function getGreen(color) {
   return ((color >> 8) & 0xff);
}

function getBlue(color) {
   return (color & 0xff);
}

var R, G, B, H, S, V;

function RGBtoHSV(r, g, b) {
    var r = (r / 255);  
    var g = (g / 255);
    var b = (b / 255);

    var min = Math.min( r, g, b );    
    var max = Math.max( r, g, b );   
    var delta = max - min;             

    v = max;

    if (delta == 0) {
        h = 0;                           
        s = 0;
    } else {
        s = delta / max;

        delta_r = (((max - r) / 6) + (delta / 2)) / delta;
        delta_g = (((max - g) / 6) + (delta / 2)) / delta;
        delta_b = (((max - b) / 6) + (delta / 2)) / delta;

        if      (r == max) h = delta_b - delta_g;
        else if (g == max) h = (1 / 3) + delta_r - delta_b;
        else if (b == max) h = (2 / 3) + delta_g - delta_r;

        if ( h < 0 ) h += 1;
        if ( h > 1 ) h -= 1;
    }
    H = Math.round(h * 360);
    S = Math.round(s * 100);
    V = Math.round(v * 100);
}

function HSVtoRGB(h, s, v) {
    var h = h / 360;
    var s = s / 100;
    var v = v / 100;
   
    if (s == 0) {
        var r = v * 255;
        var g = v * 255;
        var b = v * 255;
    } else {
        h = h * 6;
        if ( h == 6 ) h = 0;

        var var_i = Math.floor( h );
        var var_1 = v * (1 - s);
        var var_2 = v * (1 - s * (h - var_i));
        var var_3 = v * (1 - s * (1 - (h - var_i)));

        if      (var_i == 0) {r = v;     g = var_3; b = var_1}
        else if (var_i == 1) {r = var_2; g = v;     b = var_1}
        else if (var_i == 2) {r = var_1; g = v;     b = var_3}
        else if (var_i == 3) {r = var_1; g = var_2; b = v}
        else if (var_i == 4) {r = var_3; g = var_1; b = v}
        else                 {r = v;     g = var_1; b = var_2};

        r = r * 255;          
        g = g * 255;
        b = b * 255;
    }
   return RGB( Math.round(r), Math.round(g), Math.round(b));
}

var idx = 0;
function on_mouse_wheel(delta) {
    if (delta < 0) {idx = idx >= colors.length - 1 ? 0 : idx + 1};
    if (delta > 0) {idx = idx <= 0 ? colors.length - 1 : idx - 1};   
//    if (delta < 0) {idx = idx >= colors.length - 1 ? colors.length - 1 : idx + 1};
//    if (delta > 0) {idx = idx <= 0 ? 0 : idx - 1};
    ch_color(idx);
}

kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #386 MC Web » 27.06.2015, 13:49

kgena_ua, может объединить два скрипта Digital Clock и Logo Radio.
При прослушивании Интернет-радио левая часть панели все равно пустует, а так вроде лучше смотрится и место заполнено.
MC Web
Репутация: 248
С нами: 10 лет 7 месяцев

Сообщение #387 kgena_ua » 28.06.2015, 09:01

MC Web, я так понимаю этот скрин из Модификация темы DarkOne v4. А там у нас AHAPXICT рулит. Он появится, сделаем.
В архиве набор логотипов для Logo Radio, который я использую и дополняю.
http://rghost.ru/7KjJjHcCx
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #388 MC Web » 28.06.2015, 13:11

kgena_ua, я потихоньку довожу свою сборку DarkOne_v3.0 + 4.0_Rus на основе тем от tedgo, поэтому экспериментирую.
Посмотрел архив с набором логотипов для Logo Radio (спасибо кстати), в основном они имеют квадратный размер и не прозрачный фон. Поэтому в узком окне панели со скриптом Digital Clock эти логотипы смотреться не будут. Лучшим вариантом, наверное, будет объединить скрипт Logo Radio (если возможно) со скриптом DarkOne Cover Panel, где отображаются обложки.

Спойлер
Image 1.png

Сам скрипт DarkOne Cover Panel не привожу, т.к. нужна связка с файлами из папок DarkOne. При желании сборку можно скачать отсюда.
MC Web
Репутация: 248
С нами: 10 лет 7 месяцев

Сообщение #389 kgena_ua » 28.06.2015, 13:41

MC Web, обязательно посмотрю. Только изображения лого нужно будет выводить размером не более 150 на 150.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #390 MC Web » 28.06.2015, 14:07

kgena_ua:Только изображения лого нужно будет выводить размером не более 150 на 150.
Почему?
Изображение no_pic.png (250х250) из архива логотипов у меня в этом скрипте (DarkOne Cover Panel) прекрасно "растягивается"...
Если вопрос качества картинок, поищем с большим разрешением.
MC Web
Репутация: 248
С нами: 10 лет 7 месяцев

Сообщение #391 kgena_ua » 28.06.2015, 14:50

MC Web, да, только качество.
MC Web:поищем
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #392 kgena_ua » 30.06.2015, 15:06

MC Web,
DarkOne Cover Panel + Logo Radio.

Radio Logo Script.rar
(627 байт) Скачиваний: 330

Файл в папку themes\DarkOne\Others\WSH Scripts\
(в основном скрипте почему-то не определялся fso).

Папку Logos в корень (сообщение от 28.06.2015, 07:01 )

Скрипт DarkOne Cover Panel заменить на:
Код: Выделить всё
// ==PREPROCESSOR==
// @name "DarkOne Cover Panel"
// @version "3.0"
// @author "tedGo, includes partial code by T.P Wang"
// @import "%fb2k_path%themes\DarkOne\Others\WSH Scripts\DO Global Script.js"
// @import "%fb2k_path%themes\DarkOne\Others\WSH Scripts\Radio Logo Script.js"
// ==/PREPROCESSOR==

// ----- VARIABLES -----
var g_font = gdi.Font("Arial", 30, 1);
var g_textrender = gdi.CreateStyleTextRender();
var g_img = descr_timer = cycle_timer = null;
var g_active = false;
var g_fade = 255;
var g_state = 0;
var metadb;

// ----- CREATE OPTIONS -----
var a_arr = new Array("Изображение 1", "Изображение 2", "Изображение 3", "Изображение 4", "Изображение 5");
var b_arr = new Array("Лицевая обложка", "Задняя обложка", "Компакт-диск", "Пиктограмма", "Исполнитель");

function artType() {
   at = window.GetProperty("Enable Custom Pictures", false);
   c_arr = at ? a_arr : b_arr;
}

artType();

function aspectRatio() {
   ar = window.GetProperty("Aspect ratio", 0);
   if (typeof ar < 0 || ar > 2) ar = 0;
   return ar;
}

aspectRatio();

// ----- GET PICTURE -----
var imgPath = configPath + "Images\\";
var a_img = gdi.Image(imgPath + "DarkOne.png");
var b_img = gdi.Image(imgPath + "Radio.png");
var c_img = gdi.Image(imgPath + "AudioCD.png");
var d_img = gdi.Image(imgPath + "NoImage.png");

var e_arr = [];
e_arr[0] = gdi.Image(imgPath + "NoFront.png");
e_arr[1] = gdi.Image(imgPath + "NoBack.png");
e_arr[2] = gdi.Image(imgPath + "NoDisc.png");
e_arr[3] = gdi.Image(imgPath + "NoIcon.png");
e_arr[4] = gdi.Image(imgPath + "NoArtist.png");

var f_arr = [];
f_arr[0] = window.GetProperty(a_arr[0],"");
f_arr[1] = window.GetProperty(a_arr[1],"");
f_arr[2] = window.GetProperty(a_arr[2],"");
f_arr[3] = window.GetProperty(a_arr[3],"");
f_arr[4] = window.GetProperty(a_arr[4],"");

var g_ext = window.GetProperty("File extension order", "jpg|png|gif|bmp|tif");
var g_arr = g_ext.split("|");

var g_art = null;

function getRightImage(switchstate) {
//   metadb = fb.GetNowPlaying();
    on_item_focus_change();

   if (g_art) {
      g_img.Dispose();
      g_art = null;
   }

   if (metadb) {
      var f_img = null;
      if (fb.PlaybackLength <= 0) {
         f_img = file_name ? gdi.Image(dir_name + file_name) : b_img;
//         f_img = b_img;;
         g_active = false;
      } else if (metadb.RawPath.indexOf("cdda://") == 0) {
         f_img = c_img;
         g_active = false;
      } else {
         var old_state = g_state;
         do {
            switchstate && switchState();
            if (at) {
               var arr = utils.Glob(fb.TitleFormat(f_arr[g_state]).Eval() + ".*").toArray();
               var g_break = false;
               for (var n = 0; n < g_arr.length && !g_break; n++) {
                  for (var i = 0; i < arr.length; i++) {
                     var re = new RegExp("\." + g_arr[n] + "$", "i");
                     if (arr[i].match(re)) {
                        g_art = gdi.Image(arr[i]);
                        g_break = true;
                        break;
                     }
                  }
               }
               f_img = g_art;
            } else {
               g_art = utils.GetAlbumArtV2(metadb, g_state);
               f_img = g_art;
            }
         }
         while (switchstate && old_state != g_state && !f_img);
         g_active = true;
      }
   } else {
      f_img = a_img;
      g_active = false;
   }

   if (f_img) g_img = f_img;
   else if (!switchstate) g_img = at ? d_img : e_arr[g_state];

   return g_img ? true : false;
}

getRightImage(false);

// ----- CREATE ACTIONS -----
function getTimer() {
   if (descr_timer) {
      window.ClearTimeout(descr_timer);
      descr_timer = null;
   }

   descr_timer = window.SetTimeout(
      function () {
         window.RepaintRect(0, wh / 2, ww, wh / 2);
         window.ClearTimeout(descr_timer);
         descr_timer = null;
      }, 1500);

   window.Repaint();
}

function switchState() {
   if (g_state == 4) g_state = 0;
   else g_state++;
}

function switchType() {
   window.SetProperty("Enable Custom Pictures", at ? false : true);
   artType();
   g_state = 0;
   getRightImage(false);
   if (g_active && !g_art) getRightImage(true);
   getTimer();
}

// ----- CREATE MENU -----
function CustomMenu(x, y) {
   var a = window.CreatePopupMenu();
    var b = window.CreatePopupMenu();
   var idx = 0;

   if (!ac) {
      for (var i = 0; i < c_arr.length; i++) {
         b.AppendMenuItem(0, 101 + i, c_arr[i]);
      }
      b.CheckMenuRadioItem(101, 105, g_state + 101);
   }

   a.AppendMenuItem(0, 1, "Сохранять пропорции");
   a.AppendMenuItem(0, 2, "Не растягивать");
   a.AppendMenuItem(0, 3, "Растянуть");
   a.CheckMenuRadioItem(1, 3, ar + 1);
   a.AppendMenuSeparator();
   a.AppendMenuItem(0, 4, at ? "Обложка альбома" : "Пользовательские изображения");
   a.AppendMenuSeparator();
   b.AppendTo(a, 0 | 16, at ? "Изображения" : "Тип обложки");
   a.AppendMenuSeparator();
   a.AppendMenuItem(ac ? 8 : 0, 5, "Зациклить изображения");
   ac && a.AppendMenuItem(ct ? 8 : 0, 6, "Плавный переход изображений");
   a.AppendMenuSeparator();
   a.AppendMenuItem(0, 7, "Управление встроенными изображениями");
   a.AppendMenuItem(0, 8, "Удалить все встроенные изображения");
   a.AppendMenuSeparator();
   a.AppendMenuItem(0, 9, "Свойства WSH");
   a.AppendMenuItem(0, 10, "Настройки WSH...");

   idx = a.TrackPopupMenu(x, y);

   switch (true) {
      case (idx >= 101 && idx <= 105):
         g_state = idx - 101;
         getRightImage(false);
         getTimer();
         break;

      case (idx >= 1 && idx <= 3):
         window.SetProperty("Aspect ratio", idx - 1);
         aspectRatio();
         window.Repaint();
         break;

      case (idx == 4):
         switchType();
         break;

      case (idx == 5):
         window.SetProperty("Auto Cycle Image", ac ? false : true);
         ac = window.GetProperty("Auto Cycle Image");
         break;

      case (idx == 6):
         window.SetProperty("Auto Cycle Transition Fader on", ct ? false : true);
         ct = window.GetProperty("Auto Cycle Transition Fader on");
         break;

      case (idx == 7):
         fb.RunContextCommand("Управление встроенными изображениями");
         break;

      case (idx == 8):
         fb.RunContextCommand("Удалить все встроенные изображения");
         break;

      case (idx == 9):
         window.ShowProperties();
         break;

      case (idx == 10):
         window.ShowConfigure();
         break;
   }

   a.Dispose();
}

// ----- DRAW -----
var overlay_active = window.GetProperty("Back Overlay: Activate", true);
var overlay_colour = window.GetProperty("Back Overlay: Colour", "19-30-38-255");
var g_acol = CustomColour(overlay_colour);

var descr_tcolour = window.GetProperty("Description: Text Colour", "191-224-255-255");
var g_bcol = CustomColour(descr_tcolour);

var descr_bcolour = window.GetProperty("Description: Back Colour", "19-30-38-255");
var g_ccol = CustomColour(descr_bcolour);

function on_paint(gr) {
   !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, ui_backcol);
   fb.IsPlaying && overlay_active && gr.FillSolidRect(0, 0, ww, wh, g_acol);

   if (g_img) {
      var w, h, x, y;
      if (ar == 0 || ar == 1 && (g_img.Width > ww || g_img.Height > wh)) {
         var img_scale = Math.min(ww / g_img.Width, wh / g_img.Height);
         w = g_img.Width * img_scale;
         h = g_img.Height * img_scale;
         x = (ww - w) / 2;
         y = (wh - h) / 2;
      } else if (ar == 1) {
         w = g_img.Width;
         h = g_img.Height;
         x = (ww - w) / 2;
         y = (wh - h) / 2;
      } else {
         w = ww;
         h = wh;
         x = y = 0;
      }
        gr.DrawImage(g_img, x, y, w, h, 0, 0, g_img.Width, g_img.Height, 0, Math.abs(g_fade));   
   }

   if (descr_timer) {
      gr.SetTextRenderingHint(5);
      gr.SetSmoothingMode(4);
      gr.SetInterpolationMode(7);
      gr.FillGradRect(-1, wh / 2, ww + 1, wh / 2, 90, 0, g_ccol);
      g_textrender.GlowText(g_bcol, RGBA(128, 192, 255, 4), 32);
      g_textrender.EnableShadow(true);
      g_textrender.ResetShadow();
      g_textrender.RenderStringRect(gr, c_arr[g_state], g_font, 0, wh - 50, ww, 30, 0x11005000);
   }
}

// ----- MOUSE ACTIONS -----
function on_mouse_move(x, y) {
   !ac && g_active && window.SetCursor(32649);
}

function on_mouse_lbtn_down(x, y) {
   if (!ac && g_active) {
      getRightImage(true);
      getTimer();
   }
}

function on_mouse_mbtn_down(x, y) {
   g_active && switchType();
}

function on_mouse_rbtn_up(x, y) {
   if (g_active) {
      CustomMenu(x, y);
      return true;
   }
}

function on_mouse_wheel(step) {
   if (!ac && g_active) {
        g_state -= step;
        if (g_state < 0 ) g_state = 4;
        else if (g_state > 4) g_state = 0;
        getRightImage(false);
        getTimer();
    }
}

// ----- EVENTS -----
var ac = window.GetProperty("Auto Cycle Image", false);
var ci = window.GetProperty("Auto Cycle Interval in s", 15);
var ct = window.GetProperty("Auto Cycle Transition Fader on", false);

function on_size() {
   ww = window.Width;
   wh = window.Height;
}

function on_playback_new_track(metadb) {
   getRightImage(false);
   window.Repaint();
}

function on_playback_time(time) {
   if (ac && g_active && g_art && time > 1 && Math.round(time % ci) == 1) {
      if (ct) {
         if (cycle_timer) {
            window.ClearInterval(cycle_timer);
            cycle_timer = null;
         }
         cycle_timer = window.SetInterval(
            function () {
               g_fade -= 51;
               if (g_fade <= -255) {
                  g_fade = 255;
                  window.ClearInterval(cycle_timer);
                  cycle_timer = null;
               }
               if (g_fade == 0) getRightImage(true);
               window.Repaint();
            }, 50);           
      } else {
         getRightImage(true);
         window.Repaint();
      }
   }
}

function on_playback_stop(reason) {
   if (cycle_timer) {
      window.ClearInterval(cycle_timer);
      cycle_timer = null;
      g_fade = 255;
   }

   if (descr_timer) {
      window.ClearTimeout(descr_timer);
      descr_timer = null;
   }

   if (reason != 2) {
      getRightImage(false);
      window.Repaint();
   }
}

function on_item_focus_change() {      
   metadb = fb.GetNowPlaying();
    if (metadb) getRadioLogImage();
    window.Repaint();   
}
Ничего не удалял, заремил две строки и одна функция внизу добавлена.
Плюс еще другой файл Radio.png, в тон сборки.
Radio.rar
(19.17 КБ) Скачиваний: 351

Вот еще логотипы, только Radio_ удалить:
http://rghost.ru/8jFRQNBFL
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #393 MC Web » 30.06.2015, 16:34

kgena_ua, спасибо, скачаю, посмотрю и отпишусь.
MC Web
Репутация: 248
С нами: 10 лет 7 месяцев

Сообщение #394 kgena_ua » 30.06.2015, 16:36

MC Web, там я создал тему foo_uie_mega_panel_splitter, интерисует мнение пользователей о плагине. Если будет желание посмотрите. Интересно как на других системах.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #395 MC Web » 30.06.2015, 16:54

kgena_ua, видел, даже между делом локализовал этот компонент, на будущее если понадобится в сборке. На первый взгляд интересный, но надо их тестировать на предмет стабильности (часто все эти модификации на основе предыдущих глючат). Но до конца не разбирался...
MC Web
Репутация: 248
С нами: 10 лет 7 месяцев

Сообщение #396 kgena_ua » 30.06.2015, 17:04

MC Web, спасибо. Я два дня занимался этим скриптом - вроде пока нормально работает.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #397 MC Web » 30.06.2015, 17:37

kgena_ua, ну-у-у, что сказать...
Всё замечательно, правда пока проверил с logo Ретро FM (других связок: ссылки - logo пока нет).
Теперь насчет Radio.png, в тон сборки - неплохо, но мне почему-то оригинал больше нравится, наверно из за того, что тема сборки и так темная, а тут хоть какое то просветление. У меня вообще задумка была (реализация больно трудоемкая) логотипы радиостанций в ч/б тонах с прозрачным фоном, как оригинальный Radio.png. Должно эффектно смотреться...

СПАСИБО БОЛЬШОЕ !
MC Web
Репутация: 248
С нами: 10 лет 7 месяцев

Сообщение #398 kgena_ua » 30.06.2015, 17:55

MC Web, логотипы радиостанций в ч/б тонах - это не проблема, только время.
Europa Plus.png
Europa Plus.png (6.84 КБ) Просмотров: 2851


Добавлено спустя 6 часов 47 минут:
Peak meter
Что изменено: достаточно указать пару цветов для начала и конца градиента., стр. 23-24,
var color1 = [ RGB(0,104,166), RGB(0,147,234) ];
var color2 = [ RGB(151,172,185), RGB(70,92,106) ];

Безымянный.png
Безымянный.png (2.17 КБ) Просмотров: 2759

Код: Выделить всё
// ==PREPROCESSOR==
// @name "Peak meter"
// @author "kgena_ua"
// ==/PREPROCESSOR==

// foo_vis_vumeter.dll required

function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }   
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }    

ColorTypeCUI = { background: 3,};
var bgcolor = window.GetColorCUI(ColorTypeCUI.background);

var font = gdi.Font("Arial",9,1);   

var dll;
var is_dll = utils.CheckComponent("\\user-components\\foo_vis_vumeter\\foo_vis_vumeter");
if (is_dll) {dll = false} else {dll = true};

var ww, wh;   
var on_mouse = false;   

var color1 = [ RGB(0,104,166), RGB(0,147,234) ];
var color2 = [ RGB(151,172,185), RGB(70,92,106) ];
   
var db = {   
   0:-30,
   1:-25,
   2:-20,
   3:-17.5,
   4:-15,
   5:-12.5,
   6:-10,
   7:-7.5,
   8:-5,
   9:-3.5,
   10:-3,
   11:-2.5,
   12:-2,
   13:-1.5,
   14:-1,
   15:-0.5,
   16:0,
   17:0.1,
   18:1,
   19:1.5,
   20:2,
   21:2.5,
   22:3,
   23:3.5,
   24:5,
   25:7.5,
   26:10
};   
   
if (dll) {VUMeter = new ActiveXObject("VUMeter")};   
//if (dll) {VUMeter.RegisterWindow(window.ID)}; // do not use for transparent mode   

   
function ToDB(Level){   
    return Math.round(2000*Math.log(Level)/Math.LN10)/100;   
}   
   
function on_size() {   
    ww = window.Width;   
    wh = window.Height;   
}   

var points = 27;
var col = 5;      
var yL = 2;
var h = 2;   
var yLM = yL + h + 4;
var hM = 6;   //8
var yRM = yLM + 20;    12
var yR = yRM + hM + 4; 

var wL = 0, wR = 0;   
var xLanim = 0, xRanim = 0;
var xL = 0, xR = 0;   

var xLManim = 0, xRManim = 0;
var xLM = 0, xRM = 0;   
   
var kLM = 0, kRM = 0;
var kLM2 = 0, kRM2 = 0;   
   
var xLManim2 = 0, xRManim2 = 0;

var kL = 0, kR = 0;
var wLanim = 0, wRanim = 0;

var oldwL = 0, oldwR = 0;

function on_paint(gr) {   
   !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);
   
    var color = [];
    var combinedColor1 = [];
    var combinedColor2 = [];
   
    var s = 27;
    var s1 = 16;
    var s2 = s - s1;
   
    for(var j = 0; j < s1; j++) {
        combinedColor1.push(combineColors(color1[0], color1[1], j / s1));
    }
    for(var j = 0; j < s2; j++) {
        combinedColor2.push(combineColors(color2[0], color2[1], j / s2));
    }
   
    color = combinedColor1.concat(combinedColor2);

    if (dll) {
        L = VUMeter.LeftLevel;   
        R = VUMeter.RightLevel;   
        LM = VUMeter.LeftPeak;   
        RM = VUMeter.RightPeak;   
    }
   
    var offset = (ww - col) / points;   
    var w = offset - 1;   
   
    if (fb.IsPlaying && on ==1 && dll) {   
        for (var i = 0; i <= points - 1; i = i + 1) {   
   
            if((ToDB(L) > db[i] && ToDB(L) < db[i+1])) {wL = i * offset + offset/Math.abs(db[i+1]-db[i]) * Math.abs(ToDB(L)-db[i]) }   
            if (wL > col) gr.FillSolidRect(col, yL, wL, h, color[1]);   

            if((ToDB(R) > db[i] && ToDB(R) < db[i+1])) {wR = i * offset + offset/Math.abs(db[i+1]-db[i]) * Math.abs(ToDB(R)-db[i]) }   
            if (wR > col) gr.FillSolidRect(col, yR, wR, h, color[1]);    

            if (xLanim <= wL) {xLanim = wL; kL = 0; wLanim = wL - oldwL < 1 ? wLanim : wL - oldwL + 5} else {oldwL = wL};
            if (xLanim > col) gr.FillSolidRect(col + xLanim + 2, yL, wLanim <= 0 ? 5 : wLanim, h, xRanim <= wR ? color[15] : color[8]);   

            if (xRanim <= wR) {xRanim = wR; kR = 0; wRanim = wR - oldwR < 1 ? wRanim : wR - oldwR + 5} else {oldwR = wR};
            if (xRanim > col) gr.FillSolidRect(col + xRanim + 2, yR, wRanim <= 0 ? 5 : wRanim, h, xRanim <= wR ? color[15] : color[8]);   

            var overL = col + xLanim + 2 + wLanim - ww;
            if (overL > 0) gr.FillSolidRect(ww - overL, yL - 2, ww, 1, color[10]);

            var overR = col + xRanim + 2 + wRanim - ww;
            if (overR > 0) gr.FillSolidRect(ww - overR, yR + h + 1, ww, 1, color[10]);

            if (ToDB(LM) > db[i]) gr.FillSolidRect(col + i * offset, yLM, w, hM, color[i]);    
            if (ToDB(RM) > db[i]) gr.FillSolidRect(col + i * offset, yRM, w, hM, color[i] );                       

            if (ToDB(LM) > db[i] && ToDB(LM) < db[i+1]) {xLM = i * offset};   
            if (xLManim <= xLM) {xLManim = xLM; xLManim2 = xLM; kLM = 0; kLM2 = 0};
            if (xLManim > col) gr.FillSolidRect(col + xLManim + offset, yLM, w * 0.8, hM , color[Math.round(xLManim/offset)]);    

            if (ToDB(RM) > db[i] && ToDB(RM) < db[i+1]) {xRM = i * offset};   
            if (xRManim <= xRM) {xRManim = xRM; xRManim2 = xRM; kRM = 0; kRM2 = 0};
            if (xRManim > col) gr.FillSolidRect(col + xRManim + offset, yRM, w * 0.8, hM, color[Math.round(xRManim/offset)]);    

            if (xLManim2 > col) gr.FillSolidRect(col + xLManim2 + offset - 0, yLM, 3, hM, color[Math.round(xRManim2/offset)]);    
            if (xRManim2 > col) gr.FillSolidRect(col + xRManim2 + offset - 0, yRM, 3, hM, color[Math.round(xLManim2/offset)]);    
        }
    }else {
        xLM = 0; xRM = 0; xLManim = 0; xRManim = 0;
    }      

    if (dll) {
        for (var i = 0; i <= points - 1; i = i + 2) {
            var text_w = gr.CalcTextWidth(db[i], font);   
            if (fb.IsPlaying && on ==1) if (i > 2) gr.GdiDrawText(db[i], font, color[0], col + offset * i - text_w / 2, yLM + hM + 1, ww, wh);
        }

        for (var i = 1; i <= points - 2; i = i + 2) {
            var text_w = gr.CalcTextWidth(db[i], font);   
        }
        gr.GdiDrawText("db", font, on ==1 || on_mouse ? color[0] : color[0], col, yLM + hM + 1, ww, wh);   
    }
//    gr.GdiDrawText("" + db.length, font, RGB(250,250,250), 0, yRM - 4, ww, wh);   
}   

function on_playback_new_track() {   
    seek_timer && window.ClearInterval(seek_timer);   
    seek_timer = window.SetInterval(function() {   
        kL = kL + 6;
        wLanim = wLanim - 0.01 * kL;
        kR = kR + 6;
        wRanim = wRanim - 0.01 * kR;           

        xLanim = xLanim - 0.5;   
        xRanim = xRanim - 0.5;
        kLM = kLM + 15;   
        kRM = kRM + 15;          
        xLManim = xLManim - 0.002 * kLM;           
        xRManim = xRManim - 0.002 * kRM;   
        kLM2 = kLM2 + 0.5;
        kRM2 = kRM2 + 0.5;          
        xLManim2 = xLManim2 + kLM2;
        xRManim2 = xRManim2 + kRM2;
        window.Repaint();    
    },10);   
}     
   
function on_playback_stop(reason) {   
    if(reason == 0) {   
        window.ClearInterval(seek_timer);   
        window.Repaint();    
    }
}   

var on = 1;
function on_mouse_lbtn_dblclk(x,y) {   
   on = on == 1 ? 0 : 1;
    window.Repaint();
}      

function on_mouse_move(x,y) {
    on_mouse = true;
    window.SetCursor(32649);
}

function on_mouse_leave() {
    on_mouse = false;
    window.SetCursor(32512);
    window.Repaint();
    Tooltip.Deactivate();
}

function on_mouse_wheel(step) {
    VUMeter.Offset = VUMeter.Offset + step;
    Tooltip.Text = VUMeter.Offset + " dB";
    Tooltip.Activate();
    tooltip_timer && window.ClearTimeout(tooltip_timer);
    tooltip_timer = window.SetTimeout(function() {
        Tooltip.Text = "";
        Tooltip.Deactivate();
        tooltip_timer && window.ClearTimeout(tooltip_timer);
        tooltip_timer = false;
    }, 2000);
}

function on_playback_time(){
    if(!seek_timer) on_playback_new_track();
    window.Repaint();
}
   
var Tooltip = window.CreateTooltip();
var tooltip_timer = false;
var seek_timer;   


function combineColors(c1, c2, f){ // When fraction is 0, result is 100% color1, when f is 1, result is 100% color2.
    var c1 = toRGB(c1);
    var c2 = toRGB(c2);

    var r = Math.round(c1[0] + f * (c2[0] - c1[0]));
    var g = Math.round(c1[1] + f * (c2[1] - c1[1]));
    var b = Math.round(c1[2] + f * (c2[2] - c1[2]));
   
    return (0xff000000 | (r << 16) | (g << 8) | (b));
}

function toRGB(d){ // convert back to RGB values
    var d = d-0xff000000;
    var r = d >> 16;
    var g = d >> 8 & 0xFF;
    var b = d & 0xFF;

    return [r,g,b];
}
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #399 MC Web » 01.07.2015, 00:56

kgena_ua, решил с логотипами радиостанций немного по другому. Сам сделал в одном стиле:
Спойлер
Audiophile Jazz.png
В архиве плейлист и папка Logos для радиостанций из этого плейлиста. Есть одна заковырка с названием станции chillout:justlisten! из-за двоеточия. Сокращаешь название до chillout другую с названием Chill Out Zone перестает показывать.
Скачать Logo Radio
Интересует мнение.
MC Web
Репутация: 248
С нами: 10 лет 7 месяцев

Сообщение #400 kgena_ua » 01.07.2015, 01:20

MC Web, нормально смотрится.
Безымянный.png

Есть одна заковырка с названием станции chillout:justlisten! из-за двоеточия
будем смотреть.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Пред.След.

Вернуться в Секреты foobar2000