-
Notifications
You must be signed in to change notification settings - Fork 0
DPI scaling and custom UI scaling (RU)
(Sorry, no english translation at the moment.)
Указанные фичи должны быть реализованы к релизу 2.26
Реализованное API позволяет независимо масштабировать следующее в зависимости от особенностей дисплея и потребностей пользователя:
- Размеры "геометрии" пользовательского интерфейса, то есть размеры виджетов, окон и т.п.
- Размеры иконок в пользовательском интерфейсе.
- Размеры "тонких элементов" в пользовательском интерфейсе, таких как линии, рамки, обводки и т.п.
- Размеры шрифтов в пользовательском интерфейсе.
- Размеры при представлении данных в виде WYSIWYG, когда картинка на экране должна иметь заданные физические размеры.
Геометрия окон
Класс GdkScreen предоставляет функции, позволяющие преобразовать пиксельные размеры из условных "традиционных" величин (рассчитанных на мониторы с 96 DPI) в актуальные для данного экрана размеры:
gint gdk_screen_apply_ui_scale_for_int(GdkScreen *screen, GdkUiScaleType scale_type, gint unscaled_value);
gdouble gdk_screen_apply_ui_scale_for_double(GdkScreen *screen, GdkUiScaleType scale_type, gdouble unscaled_value);
Это масштабирование может выполняться:
- с учетом DPI;
- с учётом заданных пользователем множителей;
- с учётом иных факторов, которые могут быть добавлены в будущем.
Приложение не должно рассчитывать на то, что после трансформации полученные размеры будут находиться в соответствии с какими-либо физическими размерами картинки на экране. Трансформация выполняется с целью получить наиболее подходящий для пользователя результат, а не физически точный.
Размеры шрифтов и WYSIWYG-представлений
Следующая функция объявлена устаревшей и не должна использоваться в новом коде:
gdouble gdk_screen_get_resolution (GdkScreen *screen);
Вместо неё вводится две новые функции:
gdouble gdk_screen_get_resolution_for_ui_fonts (GdkScreen *screen);
gdouble gdk_screen_get_resolution_for_wysiwyg_representation (GdkScreen *screen);
Первая функция выступает в качестве замены gdk_screen_get_resolution()
для рендеринга шрифтов UI, таких как кнопки и пункты меню.
Вторая функция выступает в качестве замены gdk_screen_get_resolution()
для рендеринга представлений, которые должны иметь заданные физические размеры. Например, для рендеринга страницы A4 в текстовом процессоре в масштабе 100% таким образом, чтобы физические размеры на экране максимально соответствовали размерам, полученным при выводе на печать.
Любые рассчеты размеров, которые должны соответствовать некоторым физическим размерам на экране, следует проводить с использованием значения, возвращенного функцией gdk_screen_get_resolution_for_wysiwyg_representation()
.
Результат, возвращаемый вызовом gdk_screen_get_resolution()
, совпадает либо с первой функцией, либо со второй, в зависимости от настроек совместимости, заданных пользователем.
Размеры иконок
Размеры иконок, возвращаемые вызовом gtk_icon_size_lookup_for_settings()
, уже отмасштабированы в соответствии настройками масштабирования, заданными параметром settings.
Размеры иконок, возвращаемые вызовом gtk_icon_size_lookup()
, уже отмасштабированы в соответствии с настройками для дефолтного экрана.
В подавляющем большинстве случаев результат вызова gtk_icon_size_lookup()
вернёт корректный результат, поскольку run-time конфигурации со множественными GdkScreen вряд ли встречаются на практике.
Для обеспечения абсолютной теоретической корректности кода следует заменить вызовы gtk_icon_size_lookup()
на вызовы gtk_icon_size_lookup_for_settings()
, передавая туда GtkSettings от требуемого GdkScreen.
Если приложение использует иконки с размерами, полученными в обход указанных функций, оно должно перемасштабировать их самостоятельно при помощи вызова gdk_screen_apply_ui_scale_for_int()
с параметром scale_type
равным GDK_UI_SCALE_ICONS
.
Размеры , определяемые темой оформления
TODO: document me!
TODO: document me!