Масштабирование

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

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

Сообщение #1 macarych » 27.08.2018, 15:07

Способ, описанный ниже, наверняка знаком многим, но вряд ли знаком тем кто только начал использовать foobar2000 и задумался над тем как бы его подстроить под себя ( как, в свое время, задумались мы с onv, когда придумали выпускать сборки для тачскринов carPC)

Иногда возникает необходимость менять размеры элементов в окне плеера, с размерами панелей все понятно - набором арифметических действий они определяются и при необходимости масштабируются относительно друг-друга и относительно размеров и границ окна, инструментарий для этого, JavaScript, встроен в плеер. Размеры и расположение кнопок при этом, как правило, зафиксировано в нужных пределах, но в ряде случаев это неудобно.

Вот зафиксированная кнопка

$textbutton(2,$sub(%ps_height%,42),40,40,9,9,PANELSHOW:A:-1;PANELSHOW:B:1;REFRESH,%b_options1%,%b_options2%)

Означает сие: кнопка размером 40х40 пикселей, 2 пикселя от левого края и 42 от нижнего - ее координаты и они неизменны.
Но если в скрипте сплиттера записать вот такие глобальные переменные

$set_ps_global(sb,$div($add(%ps_width%,%ps_height%,),40))
$set_ps_global(sb2,$add(%sb%,2))


и использовать %sb% вместо "40" то размеры кнопки будут равны 1/40 от суммы длинны и ширины окна, т. е изменили окно - изменилась кнопка.

$textbutton(2,$sub(%ps_height%,%sb2%),%sb%,%sb%,9,9,PANELSHOW:A:-1;PANELSHOW:B:1;REFRESH,%b_options1%,%b_options2%)

phpBB [media]


Код: Выделить всё
//foobar2000 v1.4//goodmusic by macarych v. 08.2018
//
$set_ps_global(color3,225-150-20)
$set_ps_global(color2,100-100-100)
$set_ps_global(color0,60-60-60)
$set_ps_global(color4,225-150-20)
$set_ps_global(color5,30-30-30)
$set_ps_global(color1,$if(%isplaying%,$if(%ispaused%,%color2%,%color4%),%color2%))
$set_ps_global(color6,$if(%isplaying%,$if(%ispaused%,%color2%,%color3%),%color2%))
$set_ps_global(color1,$if(%isplaying%,$if(%ispaused%,%color2%,%color4%),%color2%))
$set_ps_global(color8,$if(%isplaying%,$if(%ispaused%,%color0%,%color4%),%color0%))
//
$set_ps_global(sb,$div($add(%ps_width%,%ps_height%,),40))         
$set_ps_global(sb2,$add(%sb%,2))         
$set_ps_global(sf,$div(%sb%,2))         
//
//%isplaying%,$if(%ispaused%,%color2%,%color4%),%color2%))
$set_ps_global(color8,$if(%isplaying%,$if(%ispaused%,%color0%,%color4%),%color0%))
//

$set_ps_global(img_path,$if(%isplaying%,$if(%ispaused%,%img_path1%,%img_path2%),%img_path1%))
$set_ps_global(b_options1,fontcolor:%color6% brushcolor:%color5% pencolor:%colo5%)
$set_ps_global(b_options2,fontcolor:%color6% brushcolor:%color0% pencolor:%color0%)
//
$font(Guifx v2 Transports,%sf%)
//
$textbutton(0,0,1,1,,,COMMAND:Help/About)
$set_ps_global(plps,$if(%isplaying%,$if(%ispaused%,1,2),1))
//
$textbutton(2,$sub(%ps_height%,%sb2%),%sb%,%sb%,9,9,PANELSHOW:A:-1;PANELSHOW:B:1;REFRESH,%b_options1%,%b_options2%)

$textbutton($add(%sb%,4),$sub(%ps_height%,%sb2%),%sb%,%sb%,5,5,COMMAND:Playback/Previous,%b_options1%,%b_options2%)
$textbutton($add($mul(%sb%,2),6),$sub(%ps_height%,%sb2%),%sb%,%sb%,%plps%,%plps%,COMMAND:Playback/Play or pause,%b_options1%,%b_options2%)
$textbutton($add($mul(%sb%,3),8),$sub(%ps_height%,%sb2%),%sb%,%sb%,6,6,COMMAND:Playback/Next,%b_options1%,%b_options2%)
$textbutton($sub(%ps_width%,$add($mul(%sb%,4),8)),$sub(%ps_height%,%sb2%),%sb%,%sb%,z,z,COMMAND:View/Popup Main Menu,%b_options1%,%b_options2%)
$textbutton($sub(%ps_width%,$add($mul(%sb%,3),6)),$sub(%ps_height%,%sb2%),%sb%,%sb%,|,|,COMMAND:View/Fullscreen,%b_options1%,%b_options2%)
$textbutton($sub(%ps_width%,$add($mul(%sb%,2),4)),$sub(%ps_height%,%sb2%),%sb%,%sb%,\,\,COMMAND:View/Hide,%b_options1%,%b_options2%)
$textbutton($sub(%ps_width%,%sb2%),$sub(%ps_height%,%sb2%),%sb%,%sb%,q,q,COMMAND:File/Exit,%b_options1%,%b_options2%)
//
$movepanel_c(A,2,2,$sub(%ps_width%,4),$sub(%ps_height%,$add(%sb%,6)))
$movepanel_c(B,2,2,$sub(%ps_width%,4),$sub(%ps_height%,$add(%sb%,6)))
$movepanel_c(sb,$add($mul(%sb%,4),10),$sub(%ps_height%,%sb2%),$Sub(%ps_width%,$add($mul(%sb%,8),22)),%sb%)
//
$fillrect($sub(%ps_width%,10),0,10,%ps_height%,%color8%)
$fillrect(0,0,%ps_width%,10,%color8%)
$fillrect(0,0,10,%ps_height%,%color8%)
$fillrect(0,$sub(%ps_height%,$add(%sb2%,4)),%ps_width%,$add(%sb2%,4),%color8%)
$fillrect($add($mul(%sb%,4),10),$sub(%ps_height%,%sb2%),$Sub(%ps_width%,$add($mul(%sb%,8),22)),%sb%,30-30-30)


P.S. Если у кого-то есть другие способы и наработки (например в WSH), давайте сюда же.
macarych M
Автор темы
Аватара
Репутация: 417
С нами: 15 лет 2 месяца

Сообщение #2 LUR » 27.08.2018, 15:56

Ну не знаю, немного странная тема. В каждой сборке будет свой случай и сведется именно к объявлению какой-то глобальной переменной, означающей масштаб, и дальше в коде пляшем вместе с ней. Это просто называется программированием. Причем в некоторых сборках, в которых используются панели не WSH-типа нельзя поменять на лету шрифт. А в том же EsPlaylist еще и высота строчки фиксированная настройка.
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 367
С нами: 11 лет 4 месяца

Сообщение #3 macarych » 27.08.2018, 16:32

Ну разумеется для тебя как для программиста странная)), но я то не программист, как и многие здесь) Для меня это приёмы или приёмчики, которые я подсмотрел или до которых додумался сам (был у меня такой "резиновый" 7 инч, автомобилисты наверно помнят)) Столько времени на это было потрачено, одно только изучение WSH "в лобовую, методом научного тыка" чего стоило...
Как бы там не было, я поделился тем что знаю, пригодится кому - хорошо, нет - ну и ладно)
macarych M
Автор темы
Аватара
Репутация: 417
С нами: 15 лет 2 месяца

Сообщение #4 LUR » 28.08.2018, 00:02

macarych, да я понял. Просто мне например всегда хочется, чтобы тема могла развиваться в универсальном направлении. Ну типа советов на каждый день, знаешь) А тут неясно что советовать, ибо всегда подход будет разный.
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 367
С нами: 11 лет 4 месяца

Сообщение #5 macarych » 28.08.2018, 00:12

ХЗ.
Может, мне надо было запостить это куда-нибудь в "панель стак сплитер" или там, в програмирование...
macarych M
Автор темы
Аватара
Репутация: 417
С нами: 15 лет 2 месяца

Сообщение #6 kgena_ua » 28.08.2018, 21:41

Я размер кнопок не масштабирую, а масштабирую расстояние между кнопками в зависимости от ширины панели.
Код: Выделить всё
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 ));
    }
    b_y = (wh - b_w) / 2;
}
где b - кол-во кнопок, b_w - размер кнопки в пикселях.
На выходе массив b_x, который содержит координаты х для каждой кнопки.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев


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