Масштабирование панелей в PPS

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

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

Сообщение #1 Heaven » 06.04.2014, 12:10

Есть background с нарисованными рамками под панели Плейлист, Эквалайзер, кнопки управления и тп.
Я никак не могу "сделать привязку" к моему Background'у. При изменении размера окна Foobar2000 элементы не меняют размер что не скажешь про background рисунок. Так вот, как это исправить?
Heaven
Автор темы
Репутация: 0
С нами: 9 лет 11 месяцев

Сообщение #2 kgena_ua » 06.04.2014, 12:36

Heaven, а если выводить панели, координаты которых вычислять в процентах от ширины или высоты панели.
А использование фона под панели мне кажется не очень удобным. Может лучше "нарисовать" фон, используя средства PSS.
Я, к примеру, в качестве фона вывожу или изображение исполнителя или какие-либо другие графические изображения под настроение.
Последний раз редактировалось kgena_ua 06.04.2014, 13:06, всего редактировалось 1 раз.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #3 Heaven » 06.04.2014, 13:06

kgena_ua, выводить панели, координаты которых вычислять в процентах от ширины или высоты панели, как этого добиться?
Heaven
Автор темы
Репутация: 0
С нами: 9 лет 11 месяцев

Сообщение #4 onv » 06.04.2014, 13:09

В этой сборке все, что Вам нужно по автомасштабированию кнопок, рамок и т.д. реализовано. http://foobar2000.ru/forum/viewtopic.php?t=4880
Смотрите, разбирайтесь.
onv M
Откуда: Харьков
Репутация: 52
С нами: 11 лет 10 месяцев

Сообщение #5 kgena_ua » 06.04.2014, 13:13

Heaven,

$muldiv(%ps_width%,a,1000)
$muldiv(%ps_height%,b,1000)
$muldiv(%ps_width%,c,1000)
$muldiv(%ps_height%,d,1000)

123.png
123.png (5.68 КБ) Просмотров: 5471


Я сторонник сборок, в которых нет фиксированных координат, как верно назвал onv - "резиновых" сборок,
где информация выводиться корректно вне зависимости от размеров окна.
Пользуясь случаем, предложу Вам посмотреть и мою сборку. Если найдете что-то полезное для себя - буду рад.
http://foobar2000.ru/forum/viewtopic.php?t=5193
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #6 sudden » 10.04.2014, 10:30

kgena_ua, а можно подробней, куда писать эти значения?
kgena_ua:$muldiv(%ps_width%,a,1000)
$muldiv(%ps_height%,b,1000)
$muldiv(%ps_width%,c,1000)
$muldiv(%ps_height%,d,1000)
Вложения
Буфер обмена-1.png
sudden M
Репутация: 22
С нами: 17 лет 1 месяц

Сообщение #7 kgena_ua » 10.04.2014, 10:49

sudden, задать координаты для панели: слева, сверху, ширина и высота.
Функция $muldiv(a,b,c) умножает a на b, затем делит на c.

Безымянный.png
Безымянный.png (22.58 КБ) Просмотров: 5420
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #8 sudden » 10.04.2014, 10:56

kgena_ua, если я так задаю координаты, то панелька исчезает совсем
видимо надо еще что-то где-то изменять
sudden M
Репутация: 22
С нами: 17 лет 1 месяц

Сообщение #9 kgena_ua » 10.04.2014, 11:08

sudden, это тот-же процент. Место букв a, b, c и d числовые значения.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #10 sudden » 10.04.2014, 11:20

kgena_ua, уже понял, но что-то я не заметил разницы с тем вариантом, который у меня
все также сдвигается и сжимается при изменении размера окна
sudden M
Репутация: 22
С нами: 17 лет 1 месяц

Сообщение #11 vladj » 10.04.2014, 11:31

kgena_ua:умножает a на b, затем делит на c
Это для меня например тёмный лес, нужно проще объяснять наверное, типа...
Не желаешь менять при изменении всего интерфейса высоту какой-либо панели, ставь просто фиксированное значение.
Далее, насколько я понимаю(а понимаю очень слабо), выражение $muldiv(%ps_width% используется для панели, которая
находится между других и должна растягиватся относительно их.
Чаще используется $sub(%ps_width%, т.е. когда панель при изменении размеров остаётся фиксированной по ширине, высоте.
Самое простое при обучении, это начать работать ( поставив панель со стандартными размерами для данного размера окна)
именно с одной панелью. Начиная растягивать окно и смотреть куда уезжает панель, куда не желательно ей уезжать и т.д.
Например имеем сик бар с выставленными
7
$sub(%ps_height%,62)
$sub(%ps_width%,204)
56
Т.е. значение первое от левого края тут постоянно, положение по вертикали меняется, что-бы по вертикали не уезжала,
следующее значение по ширине, что-бы сикбар тянулся в ширину, когда окно сборки по горизонтали растягиваем
и последнее значение постоянно, это-же высота нашего сикбара, нам не нужно менять высоту.
Значит $sub(%ps задаёт величину от какого-то края окна.
А $muldiv(%ps_ применяется, если панель не с края, а между другими и изменяется уже относительно их границ.
Объяснение конечно сумбурным получилось, но думаю понятней чем, умножает a на b, затем делит на c
vladj M
Аватара
Откуда: Пермский край
Репутация: 427
С нами: 14 лет 1 месяц

Сообщение #12 kgena_ua » 10.04.2014, 12:00

vladj, толково все объяснил. Я только приведу такой пример:

0
0
$muldiv(%ps_width%,300,1000)
0

ширина панели будет равняться одной трети ширины окна фубара.
Можно написать и $muldiv(%ps_width%,3,10), но в некоторых случаях, для точности, я использую большие значения.
Последний раз редактировалось kgena_ua 10.04.2014, 12:03, всего редактировалось 1 раз.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #13 sudden » 10.04.2014, 12:02

kgena_ua, откуда взято значение "1000", оно постоянно или тоже подбирается?
sudden M
Репутация: 22
С нами: 17 лет 1 месяц

Сообщение #14 kgena_ua » 10.04.2014, 12:18

sudden, "1000" - такой точности мне вполне хватает.
Можно,конечно, 1680 - для ширины и 1050 для высоты, тогда точность будет до пикселя, но это уже слишком :smile: .
Тут каждый сходит с ума по своему. Вот пример скрпта, которым я задаю координаты по высоте для панелей:
Код: Выделить всё
////////////////////////// y h  панелей

$puts(y_VB_SB,$max(75,$muldiv(%ps_height%,110,1000)))
$puts(h_VB_SB,$max(22,$muldiv(%ps_height%,35,1000)))

$puts(y_CHSP,$muldiv(%ps_height%,900,1000))
$puts(h_CHSP,$muldiv(%ps_height%,100,1000))

$puts(y_p,$max(100,$muldiv(%ps_height%,150,1000)))
$puts(h_p,$sub($sub(%ps_height%,$muldiv(%ps_height%,110,1000)),$max(100,$muldiv(%ps_height%,150,1000))))
$puts(h_p_01,$sub($sub(%ps_height%,25),$max(100,$muldiv(%ps_height%,150,1000))))

$puts(h_LIB_01,$sub($sub(%ps_height%,0),$max(100,$muldiv(%ps_height%,150,1000))))
т.е.при изменении высоты окна фубара высоты панелей и расстояние меду панелями пропорциональны.
Есть только один недостаток. Перед тем как что-то изменить, приходиться разбираться и вспоминать что за "хрень" я написал.
Последний раз редактировалось kgena_ua 10.04.2014, 12:32, всего редактировалось 1 раз.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #15 sudden » 10.04.2014, 12:30

kgena_ua, вы взорвали мой мозг :smile:
мне просто хочется чтобы панельки уменьшались с сохранением пропорций при изменении размера окна плеера, естественно оставаясь на своих местах
P.S. Куда этот скрипт прописывать? Или вы только кусочек кода привели?
sudden M
Репутация: 22
С нами: 17 лет 1 месяц

Сообщение #16 vladj » 10.04.2014, 15:03

sudden, при написании скрипта для сборки и размещению панелей два подхода по их расположению.
Когда ты открываешь Настройки PSS ( ну вот как у тебя на скрине), то видишь например, что положение стрелочника задано
индивидуально, именно для одной, этой панельки.
Но в большинстве случаев (допустим несколько панелей открываются в одном месте всегда) и тогда их положение прописывается для каждой
в основном скрипте, если посмотреть снова на твой скрин, то там не будут заполнены значения вообще, только галочка на Прикрепить к стилю.
Так и в примере от kgena_ua, строчки эти вписаны в основной скрипт, это даже для меня сложно понять, о чём идёт речь,
не имея под руками самой этой сборки.
Ты-бы хоть скрин сборки дал для общего представления, что и куда у тебя должно растянутся, что на месте остатся.
Если-же просто хочешь понять и научится, то как я написал выше только изменение размеров на чьей-то готовой сборке,
потренируешся, поймёшь, тогда и свою можно с нуля собирать.
vladj M
Аватара
Откуда: Пермский край
Репутация: 427
С нами: 14 лет 1 месяц

Сообщение #17 sudden » 10.04.2014, 15:21

vladj:что и куда у тебя должно растянутся, что на месте остатся.
sudden:чтобы панельки уменьшались с сохранением пропорций при изменении размера окна плеера
Ты-бы хоть скрин сборки дал для общего представления
Буфер обмена-1.png
Буфер обмена-2.png
sudden M
Репутация: 22
С нами: 17 лет 1 месяц

Сообщение #18 kgena_ua » 10.04.2014, 16:16

sudden, для VUmetr и Peakmeter (если правильно понимаю) наверное лучше высоту панели привязать к ширине панели,
дабы не искажались пропорции панели.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #19 vladj » 10.04.2014, 17:50

Нужно было сразу скрин показать, это обычная, старенькая сборка и растягивается у тебя в ней неправильно всего лишь одна панелька
пикметра. Левая и правая панели фиксированы по ширине, растягивается центральная со спектрометром при изменении размеров.
Поэтому только с панелью пикметра левого, верхнего и тренируйся.
Если есть желание, что-бы и левая с правой растягивались вместе с центральной, забодаешся делать, ибо там и панели и скрипты отдельные
на кнопки верхние и нижние.
Единственно, что ещё можно сделать в ней, то это центровать инфопанель левую, ибо при увеличении по вертикали текст не остаётся в центре.
vladj M
Аватара
Откуда: Пермский край
Репутация: 427
С нами: 14 лет 1 месяц

Сообщение #20 Гость » 10.04.2014, 22:34

sudden:чтобы панельки уменьшались с сохранением пропорций при изменении размера окна плеера
Объявляешь глобальную переменную - некую "условную единицу" которая являет собой производное от каких либо арифметических действий с высотой и длинной окна PSS, тем самым получаешь "условный миллиметр" для окна, например, vumetr'a у него обычно высота к ширине соотносится как 1 к 2, вот и указываешь в скрипте 35 "усл.мм" на 70 "усл.мм". Пропорции выдержанны, а размеры будут зависеть от размера PSS.
Гость
Гость


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