Скрипты для foo_uie_wsh_panel_mod

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

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

Сообщение #1561 kgena_ua » 05.01.2017, 16:33

AHAPXICT, добрый день.
AHAPXICT писал(а):сразу за один присест увеличить шрифт от 16 до 96
Нет, не пробовал.
Если имеется в виду скорость изменения размера, то может мешает моя задержка (delay), которая не позволяет обрабатывать каждый щелчок колеса при быстрой прокрутке колеса. Я это делал намеренно, чтоб не было "перескоков".
В вашем скрипте стр.1013, 1014 и 1015.
Код: Выделить всё
    if (on_text && ShiftDown && !delay){
        delay = true;
        fdelay();
если дело в быстром изменении размера шрифта, тогда это то.
Код: Выделить всё
    if (on_text && ShiftDown){
        //delay = true;
        //fdelay();
если нет, то я пью пиво :wink:
,я тогда писал про включение Grab Focus
Я все-таки в какой-то период что-то многое пропустил...

Добавлено спустя 4 часа 5 минут:
Было такое видео по анимации кнопок.
phpBB [media]

Готовый скрипт.
buttons.rar
(4.5 КБ) Скачиваний: 236

Папку buttons из архива к паку с Фубаром.
Код: Выделить всё
// ==PREPROCESSOR==
// @name "control buttons"
// ==/PREPROCESSOR==

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

var font = gdi.Font("Arial",12,0);
var ww, wh;

DT_LEFT = 0x00000000;
DT_WORD_ELLIPSIS = 0x00040000;

MF_ENABLED = 0x00000000;   
MF_GRAYED = 0x00000001;
MF_SEPARATOR = 0x00000800;

var img_path = fb.ProfilePath + "\\buttons\\";

var b = 5;
var b_x = [];
var b_y = 10;
var b_w = 26; // png 26 x 26

var b_this, b_this_old;
var b_hover_state = [];
var b_hover_alpha = [];
var b_down_state = [];
var b_down_alpha = [];

for (var i = 0; i < b; i++) {
    if (!b_hover_state[i]) b_hover_state[i] = 0;
}

var b_mouse_leave = false;
var b_timer_started = false;

var playback_state = 0;
playback_state_is();

var btn = [
    gdi.Image(img_path + "stop.png"),
    gdi.Image(img_path + "pause.png"),
    gdi.Image(img_path + "previous.png"),
    gdi.Image(img_path + "play.png"),
    gdi.Image(img_path + "next.png")
];

var btn_on = [
    gdi.Image(img_path + "stop_on.png"),
    gdi.Image(img_path + "pause_on.png"),
    gdi.Image(img_path + "previous_on.png"),
    gdi.Image(img_path + "play_on.png"),
    gdi.Image(img_path + "next_on.png")
];

var btn_is = [
    gdi.Image(img_path + "stop_is.png"),
    gdi.Image(img_path + "pause_is.png"),
    gdi.Image(img_path + "previous_is.png"),
    gdi.Image(img_path + "play_is.png"),
    gdi.Image(img_path + "next_is.png")
];

function on_paint(gr) {
    gr.FillSolidRect(0, 0, ww, wh, RGB(55,70,83));

    for (var i = 0; i < b; i++) {
        img = btn[i];
        gr.DrawImage( img, b_x[i], b_y, b_w, b_w, 0, 0, b_w, b_w, 0, 255);
       
        img = btn_on[i];
        b_hover_alpha[i] && gr.DrawImage( img, b_x[i], b_y, b_w, b_w, 0, 0, b_w, b_w, 0, b_hover_alpha[i]);
       
        img = btn_is[i];
        b_down_alpha[i] && gr.DrawImage( img, b_x[i], b_y, b_w, b_w, 0, 0, b_w, b_w, 0, b_down_alpha[i]);
    }
}

function on_mouse_lbtn_up(x, y) {
    button_up_change_state();

    if (mouse_on_b(x, y) == 0) {fb.Stop()};
    if (mouse_on_b(x, y) == 1) {fb.Pause()};
    if (mouse_on_b(x, y) == 2) {fb.Prev()};
    if (mouse_on_b(x, y) == 3) {fb.Play()};
    if (mouse_on_b(x, y) == 4) {fb.Next()};

    playback_state_is();
    //window.Repaint();
}

function on_mouse_lbtn_down(x, y) {
    button_down_change_state(x, y);
    //window.Repaint();
}

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

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

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

function on_mouse_rbtn_up (x, y){   
    var _menu = window.CreatePopupMenu();

    _menu.AppendMenuItem(MF_ENABLED, 20, "Properties");
    _menu.AppendMenuItem(MF_ENABLED, 30, "Configure ...");

    ret = _menu.TrackPopupMenu(x, y);   
    if (ret == 0) return;
       
    switch (ret) {   
    case 20:
        window.ShowProperties();
        break;   
    case 30:
        window.ShowConfigure();      
        break;
    }
    _menu.Dispose();
    return true;
}


// *************  buttons state

function playback_state_is() {
    playback_state = fb.IsPaused ? 1 : fb.IsPlaying ? 3 : 0;
    b_down_state[playback_state] = 1;
   
    for (var i in b_hover_state) {
        if (b_down_state[i] != 0 && i != playback_state) {
            b_down_state[i] = 0;
            button_change_state();
        }
    }
}

function on_playback_starting(){
    playback_state_is();
}

function on_playback_pause(state) {
    playback_state_is();
}

function on_playback_stop() {
    playback_state_is();
}


// *************  anim buttons

function button_down_change_state(x, y) {
    b_this = mouse_on_b(x, y)
    b_down_state[b_this] = 1;
}

function button_up_change_state() {
    for (var i in b_down_state) {
        b_down_state[i] = 0;
    }
}

function button_change_state(x, y) {
    if (!b_timer_started) button_alpha_timer();

    for (var i in b_x) {
        b_this = mouse_on_b(x, y);
    }
   
    if (b_this) {
        b_hover_state[b_this] = 1;
    }
   
    if (!b_this) {
        b_hover_state[b_this_old] = 0;
    }
   
    b_this_old = b_this;
}

function button_leave_change_state() {   
    for (var i in b_hover_state) {
        if (b_hover_state[i] != 0) {
            b_hover_state[i] = 0;
        }
    }
    b_mouse_leave = true;
}

function button_alpha_timer() {
    b_timer_started = true;
   
    on_step = 64;
    off_step = 10;
   
    b_timer = window.SetInterval(function() {
        for (var i in b_hover_state) {
            if (!b_hover_alpha[i]) b_hover_alpha[i] = 0;
           
            switch (b_hover_state[i]) {
            case 0:
                b_hover_alpha[i] = Math.max(0, b_hover_alpha[i] -= off_step);
                break;
            case 1:
                b_hover_alpha[i]= Math.min(255, b_hover_alpha[i] += on_step);
                break;
            }
            window.Repaint();
        }
       
        for (var i in b_down_state) {
            if (!b_down_alpha[i]) b_down_alpha[i] = 0;
           
            switch (b_down_state[i]) {
            case 0:
                b_down_alpha[i] = Math.max(0, b_down_alpha[i] -= off_step);
                break;
            case 1:
                b_down_alpha[i]= Math.min(255, b_down_alpha[i] += on_step);
                break;
            }
            window.Repaint();
        }

        if (b_mouse_leave && Math.max.apply(null, b_hover_alpha) <= 0){
            b_timer_started = false;
            b_mouse_leave = false;
            window.ClearInterval(b_timer);
        }
    }, 30);
}

function button_dim() {
    b_x = [];
    bw = ww / (b + 1);
    for (var i = 1; i <= b; i++) {
        b_x.push(Math.round( bw * i - b_w / 2 ));
    }
}

function mouse_on_b(x, y){
    for (var i in b_x) {
        if (x >= b_x[i] && x <= b_x[i] + b_w && y >= b_y && y <= b_y + b_w) return i;
    }
}


I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 331
С нами: 4 года 4 месяца

Сообщение #1562 AHAPXICT » 06.01.2017, 11:19

kgena_ua, приветствую! :beer:
kgena_ua писал(а):Если имеется в виду скорость изменения размера, то может мешает моя задержка (delay), которая не позволяет обрабатывать каждый щелчок колеса при быстрой прокрутке колеса. Я это делал намеренно, чтоб не было "перескоков".
У вас всё правильно сделано! Это я не обратил внимание на этот нюанс! В своём плеере использую шаг 2(по умолчанию) от 16 до 96 и с таким шагом получается 40 щелчков колеса мыши. Для "Times New Roman" использую только чётные значения(16,18,20 и т.д.), вот и получается что с задержкой, если быстро крутануть колесом мыши, текст прокручивается плавно без рывков. А выложил то с шагом 1 от 11 до 48 что составляет 37 щелчков на меньшем увеличении(в два раза), а это почти те же 40 :oops: Сейчас проверил на полном экране и таки да, с задержкой(delay) с шагом 1 создается впечатление медленного увеличения(с залипанием). Вот что значит моя невнимательность! Когда тестировал на DUI, то проверял всё в маленьком окошке ну и шаг 1 поставил только для того что бы можно было выбрать чётные и нечётные размеры для шрифта.
P.S. Когда тестировал компенсацию жирного шрифта на разных шрифтах, то заметил что не на всех шрифтах одинаковая граница перехода. Не помню какие, но Tahoma (стоит по умолчанию в DUI) точно имеет разницу при переходе, по моему с 16, а большинство с 17. Для меня это не понятно, ведь Arial и Tahoma по виду не сильно отличаются.
С наступающим Рождеством Христовым!

Добавлено спустя 20 минут 10 секунд:
P.P.S Сейчас попробовал наверно всё таки лучше делей оставить(защита от быстрой прокрутки) Smooth Mouse Scroll, уменьшил в два раза поставил 100мс (это для шага 1). По моему теперь супер.
С наступающим Рождеством Христовым!
AHAPXICT M
Мастер
Аватара
Возраст: 46
Откуда: Киев
Репутация: 106
С нами: 3 года 9 месяцев

Сообщение #1563 vladj » 06.01.2017, 12:33

Интересно, а почему не применяете фишку seriousstas-а, когда био полностью (или как было ранее выставлено),
выходит при тапе по заголовку и так-же скрывается. Таскать за заголовок в нужное положение текст биографии
с зажатой кнопкой мыши это одно, просто тапнуть по заголовку намного, имхо, проще.
HTPC Termaltake, Onkyo 525E, цап SMSL, фронт Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 278
С нами: 7 лет 6 месяцев

Сообщение #1564 AHAPXICT » 06.01.2017, 13:22

vladj, так и собираюсь сделать, но не сейчас и не завтра, но обязательно сделаю. На данном этапе развития мне это сложно: выделить область, назначить на неё функцию, добавить дополнительные txt_x1 и txt_y1 для запоминания положения, добавить для выделенной области изменение цвета при наведении курсора мыши или появление рамки и т.д. Это надо пол скрипта переделывать, а взять кусок скрипта у seriousstas не получится, у меня отличается концепция (это мы с ним осуждали), а идея конечно его и правильная не только с точки зрения тач скрина. Сам как правило прячу текст в правый нижний угол и бывает что он там (если очень много) чуть залипает и его с первого раза не вытащишь.
hide.png
hide.png (7.25 КБ) Просмотров: 1375
AHAPXICT M
Мастер
Аватара
Возраст: 46
Откуда: Киев
Репутация: 106
С нами: 3 года 9 месяцев

Сообщение #1565 kgena_ua » 06.01.2017, 21:37

vladj писал(а):при тапе по заголовку и так-же скрывается
Т.е. при двойном клике текст опускается вниз (вправо) - виден только артист. Еще раз двойной клик по артисту - предыдущее размещение текста.
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 331
С нами: 4 года 4 месяца

Сообщение #1566 vladj » 07.01.2017, 00:42

kgena_ua писал(а):
vladj писал(а):при тапе по заголовку и так-же скрывается
Т.е. при двойном клике текст опускается вниз (вправо) - виден только артист.
У него по одинарному клику, видна картинка ну и заголовок естественно. В ранних скриптах
скрывали по крестику, но по заголовку намного удобней, имхо.
HTPC Termaltake, Onkyo 525E, цап SMSL, фронт Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 278
С нами: 7 лет 6 месяцев

Сообщение #1567 kgena_ua » 07.01.2017, 11:55

vladj,
пока сделал на среднюю клавишу.
Получился такой скрипт (добавить внизу):
Код: Выделить всё
var t_hiden = window.GetProperty("t_hiden", false);

function hide_text(x,y){ 
    if (t_hiden) return;

    window.SetProperty("tmp_txt_x", txt_x);
    window.SetProperty("tmp_txt_y", txt_y);
   
    txt_x = ww - 50;
    txt_y = wh - (h_text_row_height + t_margin);
    get_text_array();
}

function restore_text(){ 
    if (!t_hiden) return;

    txt_x = window.GetProperty("tmp_txt_x");
    txt_y = window.GetProperty("tmp_txt_y");
    get_text_array();
}

function on_mouse_mbtn_down (x,y){
    if (on_header){
        hide_text(x,y);
        restore_text();
        t_hiden = !t_hiden;
        window.SetProperty("t_hiden", t_hiden);
       
        window.SetProperty("txt_x", txt_x);
        window.SetProperty("txt_y", txt_y);
    }
}


и добавить строку (для проверки, выведен-ли текст из "спрятанного положения"):
Код: Выделить всё
    if (on_header && on_text_down) {
        t_hiden = false;
        window.SetProperty("t_hiden", t_hiden);
    }
в функцию function on_mouse_move(x, y)
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 331
С нами: 4 года 4 месяца

Сообщение #1568 kgena_ua » 11.01.2017, 17:34

Biography Text & Album Info & Picture. www.last.fm
version 07012017


- минимальный и максимальный размер шрифт вынесен в Properties;
- включение отключение тени для текста - Properties;
- информация о файле (имя и размер в пикселях) при нажатом Shift - Properties;
- при нажатии на среднюю клавишу на заголовке сворачивание текста - перемещение вниз - вправо, остается видимой только первая буква заголовка, повторное нажатие - возврат в пред.состояние;
- разбивка на строки с переносом текста заголовка при большой длине.

Безымянный1.png
Безымянный2.png




Скрипт в архиве, т.к. появляется вот такое сообщение:
"Ваше сообщение содержит слишком много знаков: 60720. Максимальное разрешённое количество: 60000".
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 331
С нами: 4 года 4 месяца

Сообщение #1569 pois22ple » 11.01.2017, 19:44

kgena_ua,
Скачал твой последний скрипт.
1. Работает нормально, только на пустом плейлисте заканчивается аварийно:
Код: Выделить всё
JScript Panel (Biography Text & Album Info & Picture. www.last.fm v07012017 by kgena_ua)
Ошибка выполнения JavaScript:
Не удалось получить свойство "substr" ссылки, значение которой не определено или является NULL
File: <main>
Line: 594, Col: 5
<source text only available at compile time>

Вот эта строка:
Код: Выделить всё
    h1_char_width = temp_gr.CalcTextWidth(artist.substr(0,1), h1_font);

2. Ты пишешь, что при нажатии Shift+Properties можно посмотреть имя файла и его размер, не понял как это сделать.
pois22ple
Бывалый
Репутация: 8
С нами: 11 лет

Сообщение #1570 kgena_ua » 11.01.2017, 21:04

Cerberus, по первому, нужно сделать проверку, т.е. строка должна выглядеть так:
Код: Выделить всё
    if (artist) h1_char_width = temp_gr.CalcTextWidth(artist.substr(0,1), h1_font);

В Properties переменную file info в состояние True.
И при нажатом Shift, при этом курсор мыши на картинке, как если время цикла выставлять.
Безымянный.png
Безымянный.png (80.42 КБ) Просмотров: 1050
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 331
С нами: 4 года 4 месяца

Сообщение #1571 pois22ple » 11.01.2017, 21:33

kgena_ua,
Спасибо за быстрый ответ. теперь все понятно.
Последний вопрос, зачем в выборе языка есть - zh.
Вы батенька, случаем не китайский ли шпиён?
pois22ple
Бывалый
Репутация: 8
С нами: 11 лет

Сообщение #1572 MC Web » 11.01.2017, 21:47

kgena_ua, спасибо.

Особенно за перенос заголовков при большой длине и информации о файле.
По средней кнопке у меня не сворачивается - да для меня это и не важно.

pois22ple писал(а):Последний вопрос, зачем в выборе языка есть - zh.
Вы батенька, случаем не китайский ли шпиён?

Это по просьбе китайских товарищей...
Если глаза мозолит - заремить строки, в начале строк поставить //

Код: Выделить всё
//var lang_query = new Array("", "ru/", "zh/");
//var lang_text = new Array("in", "ru", "zh");
Код: Выделить всё
//_menu.AppendMenuItem(MF_ENABLED, 12, lang_text[2] + " text");
MC Web
Мастер
Репутация: 78
С нами: 3 года 11 месяцев

Сообщение #1573 kgena_ua » 11.01.2017, 22:28

pois22ple писал(а):Последний вопрос, зачем в выборе языка есть - zh.Вы батенька, случаем не китайский ли шпиён?
:wink: :beer:
На этот форум заходит пользователь из Китая, интересовался именно биографией.
MC Web писал(а):Особенно за перенос заголовков при большой длине
Я помню, это было Ваше пожелание. Почему так долго. Делал другим способом, мне не нравилось. А на днях пробило.
MC Web писал(а):По средней кнопке у меня не сворачивается
MC Web,
у меня со средней кнопкой тоже какая-то беда, вернее с одним кликом. Дома работает, а на работе нет. Именно в Фубаре и не работает. Не понятно.
Для этого и оставил
Код: Выделить всё
//function on_mouse_mbtn_dblclk (x,y){
function on_mouse_mbtn_down (x,y){
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 331
С нами: 4 года 4 месяца

Сообщение #1574 MC Web » 11.01.2017, 23:00

kgena_ua,
немного переделал под себя:
- Исполнителя выделил цветом и заглавные буквы
- Размер шрифта Названия альбома меняется вместе с Исполнителем, а не текстом
- Сделал центровку заголовков

Получилось так
Изображение
kgena_ua писал(а):у меня со средней кнопкой тоже какая-то беда, вернее с одним кликом. Дома работает, а на работе нет. Именно в Фубаре и не работает. Не понятно.

Также, попробовал изменить на двойной клик - свернулось совсем и стало не видимо. У меня думаю это связано с центровкой заголовков. Да мне эта функция и не нужна.
MC Web
Мастер
Репутация: 78
С нами: 3 года 11 месяцев

Сообщение #1575 Aliado_71 » 12.01.2017, 01:33

kgena_ua, Вечер добрый. :hi: Есть ли возможность добавить в Properties изменение цвета шрифта и фона? а то как то грустно смотрится.

Изображение
Aliado_71 M
Бывалый
Аватара
Возраст: 46
Откуда: Украина, Донецк,
Репутация: 30
С нами: 2 года 5 месяцев

Сообщение #1576 kgena_ua » 12.01.2017, 13:27

Aliado_71, скрипт берет цвета из настроек фубара.
Например для CUI из Display - Columns UI - Colors and Fonts:
Безымянный.png
Безымянный.png (8.38 КБ) Просмотров: 931

Цвета будут:
Код: Выделить всё
        bgcolor = window.GetColorCUI(ColorTypeCUI.background);
        h_color = window.GetColorCUI(ColorTypeCUI.text);
        t_color = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);

Для DUI нужно установить цвета в Display - Default User Interface - Colors and Fonts:
соответственно:
Код: Выделить всё
        bgcolor = window.GetColorDUI(ColorTypeDUI.background);
        h_color = window.GetColorDUI(ColorTypeDUI.text);
        t_color = window.GetColorDUI(ColorTypeDUI.highlight);

Мне кажется, что брать цвета из настроек Фубара более правильно - один раз выставил, и все панели используют эти настройки.
Если это не устраивает, то наверное нужно сделать.
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 331
С нами: 4 года 4 месяца

Сообщение #1577 Aliado_71 » 12.01.2017, 15:55

kgena_ua, :hi: Спасибо! теперь понятно, меня смутило что у меня цвет текста в Display - Columns UI - Colors and Fonts - черный, а у вас так

Изображение

PS. скрипт поправил, сделал и на заголовок и на текст Item. :beer:
Aliado_71 M
Бывалый
Аватара
Возраст: 46
Откуда: Украина, Донецк,
Репутация: 30
С нами: 2 года 5 месяцев

Сообщение #1578 ximenlangzige » 13.01.2017, 20:49

Привет всем! Спасибо за kgena_ua постоянно обновляется сценарий! :biggrin: Некоторые люди говорят плохие вещи обо мне еще? Хотя это и не читать по-русски, но с Google Translate, наверное, понимаете, что я имею в виду, я так плохо? :zombie:
ximenlangzige
Новичок
Репутация: 2
С нами: 2 года 8 месяцев

Сообщение #1579 pois22ple » 13.01.2017, 21:03

kgena_ua,
У Вас все картинки качаются из инета. Хочу предложить нормальную фичу - как правило при добавлении в библиотеку нового альбома, в папку с музыкой помещаются уже заранее скачаные файлы картинок (front.jpg, back.jpg, cd.jpg и т.д.), эти картинки при использовании скрипта Thumbs и выборе пункта меню "Custom folder" можно прокрутить.
Хотелось бы иметь такое и в Вашем скрипте.
pois22ple
Бывалый
Репутация: 8
С нами: 11 лет

Сообщение #1580 kgena_ua » 13.01.2017, 21:57

pois22ple, я понимаю Вас. Только эта панель - панель биографии.
Для просмотра картинок из папки, папок ниже, выше и т.д у меня есть скрипт Get Covers (Artwork).
Сделав два скрипта в одном окне и две кнопки, переключение будет и есть, как у меня в сборке, даже быстрее, чем зайти в меню, затем выбрать пункт меню...
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 331
С нами: 4 года 4 месяца

Пред.След.

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