LINUX.ORG.RU

SwayWM: Авто масштабирование интерфейса под разрешение экрана

 ,


0

1

Здравствуйте! Недавно открыл для себя тайловые оконные менеджеры , в роле первого из которых выступил SwayWM.

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

Сегодня впервые подключил ноут к 4k монику. Первое , что бросилось в глаза - мелкота расчитанного на 1080p интерфейса. Более того , по какой-то причине , все маломальски «видюха-ёмкие» программы ( даже некоторые страницы в firefox ) начали дико лагать , хотя встройка обещалась поддерживать данное разрешение в интерфейсе.

Как я правил:
W=$(wlr-randr | awk '/current/ {print $1}' | awk -Fx '{print $1}')
H=$(wlr-randr | awk '/current/ {print $1}' | awk -Fx '{print $2}')

swaymsg output HDMI-A-1 scale \
    $(( $(($W*$H)) / $((1920*1080)) / 2 ))

Конечно , написанный мной говноскрипт решил все вышеперечисленные проблемы. Интерфейс нормальный , да и прекрасно работает. Вот только это убивает почти все преимущества 4k монитора , фактически превращая его в гладкий 1080p. Буду рад любой помощи! Спасибо!



Последнее исправление: MrProblem (всего исправлений: 4)
Ответ на: комментарий от MrProblem

А, извиняюсь.
На экране телефона скрипт поплыл и я не увидел деления.

В общем-то ты всё правильно сделал.

IIIypuk ★★★★
()
Ответ на: комментарий от IIIypuk

Прошу прощения , но могу я задать вам ещё один небольшой вопрос? ( после этого закрою топик )

Мой скрипт , как вы сказали , решает проблему. Однако это работает лишь для «чётных» разрешений и совершенно не подходит для например , 1366x768. Подскажите пожалуйста «победную формулу»

MrProblem
() автор топика
Ответ на: комментарий от MrProblem

Wayland умеет только в кратное увеличение, так заложено в протоколе. Меньше чем 2x сделать нельзя, точнее можно, но через уменьшение уже увеличенного с потерей качества отображения шрифтов например.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)
Ответ на: комментарий от Extraterrestrial

Честно говоря , я тоже пока не в востроге. Но попробовать хочется)

MrProblem
() автор топика
Ответ на: комментарий от MrProblem

HD , HD+

Это какие то маркетинговые обозначения форматов, давай в пикселях? Wayland умеет только в целое масштабирование, независимо от исходного разрешения, то есть 1920x1080 можно отмасштабировать минимум в два раза, до 3840x2160. Короче если всё без масштабирования слишком «мелкое» - берёшь нативное разрешение матрицы твоего монитора, если оно меньше чем 3840x2160 например, делишь его пополам, прописываешь то что получилось и scale=2.

Для 4k (маркетинговое название 3840x2160 монитора) это будет как у тебя и написано, 1920x1080. А добиваться финального масштаба не совпадающего с «родным» пиксельным разрешением твоей матрицы не нужно, зачем тебе ещё и интерполяции сделанные самим монитором в этот бардак добавлять.

Масштабирование картинки не «тупое», векторные шрифты и графика будут рисоваться уже с учётом увеличения, так что выглядеть будут нормально. Просто увеличится видимый размер иконок и контролов, но линии не станут в два раза жирнее.

Некоторые композиторы умеют в дробное увеличение, но через хак, сначала увеличивают в два раза, а потом масштабируют вниз уже битовый растр. Это портит шрифты и линии конечно, но иначе никак, так как стандартом дробное масштабирование не поддерживается.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 3)
Ответ на: комментарий от Jameson

Это какие то маркетинговые обозначения форматов, давай в пикселях?

HD - имел в ввиду 720p HD+ - 1366x768

делишь его пополам, прописываешь то что получилось и scale=2.

именно это я и сделал , благодарю за пояснение

Понимаете , если я использую монитор , разрешение которого превышает натив - проблем больше нет. Но что если разрешение меньше натива? Всё станет слишком крупным. Хотя по хорошему я должен выставить scale=0.5 при разрешении HD+. А мой скрипт выдаст там 0

Это , так сказать доп вопрос для удовлетворения внутреннего перфекциониста.

Некоторые композиторы умеют в дробное увеличение, но через хак

Да , я также могу прописать туда дробь.

MrProblem
() автор топика
Ответ на: комментарий от MrProblem

использую монитор, разрешение которого превышает натив

Это как? Натив это и есть физическое разрешение матрицы твоего монитора в пикселях, физических, материальных. Поэтому оно так и называется — натив, то бишь «родное».

Если у тебя монитор с матрицей 1366x768 просто прописывай это разрешение и всё. Я так понял тебе нужно не upscale, а downscale сделать? Я если честно никогда не думал что такое может кому то понадобиться, но думаю что без искажения шрифтов это тоже только в два раза можно делать, то бишь 1366x768 умножать на два, а вот что в scale писать я ХЗ, -2?

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)
Ответ на: комментарий от Jameson

Это как?

Под нативом подразумеваю матрицу своего нотбука. Всё остальное - дискретные моники.

Я если честно никогда не думал что такое может кому то понадобиться

просто хочу сделать систему «на все случае» , так сказать

а вот что в scale писать я ХЗ, -2?

вот я посчитал что ~0.5. Мой скрипт обрежет точку - будет мелочный 0.

Но да ладно , не буду делать мозги. Большое спасибо всем за помощь)

MrProblem
() автор топика
Ответ на: комментарий от Extraterrestrial

А что не так-то? Человек поставил себе scale = 2 и всё заработало как надо.

Интерфейс нормальный , да и прекрасно работает.

Более того, Sway даже поддерживает дробное масштабирование, если ему захочется использовать более мелкие элементы интерфейса.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Прямо как в цитате с баша:

«А нам и не надо поворачивать»

i-rinat ★★★★★
()
Ответ на: комментарий от MrProblem

Хотя по хорошему я должен выставить scale=0.5 при разрешении HD+. А мой скрипт выдаст там 0

Не совсем понятно что именно ты хочешь?

Чтобы кто-то подсказал тебе как написать скрипт без целочисленного деления? Всякие bc тебе в помощь и последующие округления через printf, можно и awk заюзать.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Не совсем понятно что именно ты хочешь?

Идея была - создать максимально универсальный скейлинг.

  • Подключил 2160p - 2-йка в скейле , всё читаемо!

  • Подключил 1366x768 - всё читаемо!

У меня там явно так не получится.

Чтобы кто-то подсказал тебе как написать скрипт

Ну типа))). Только проблема не в делении , а общем подправить. Может как лучше можно.

По большому счёту проблема решена и всё ок. Напишу сам как надо будет.

Вам тоже персонально спасибо за внимание

MrProblem
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.