LINUX.ORG.RU

История изменений

Исправление wandrien, (текущая версия) :

Скейлить UI в приложении можно либо на уровне всего приложения целиком, либо на уровне отдельных окон.

Второе необходимо для случае, если мы хотим менять скейлинг окон при переносе на другой монитор.

Первая задача требует меньшего объёма изменений со стороны кода приложений, вторая – большего. Это связано с тем, что масштабирование на уровне отдельных окон требует контекста в виде объекта типа GdkWindow. Не во всех случаях, когда приложение вычисляет какие-либо размеры, у него доступен объект этого типа. То есть может потребоваться более сущестенная переделка кода приложения.

Теперь собственно к самому GTK.

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

Каждый GdkScreen держит указатель на экземпляр GtkSettings – класса, отвечающего за хранение и получение настроек.

Работа с иконками в основном сосредоточена в модуле gtkiconfactory.c. Там содержится функция, которая возврвщает пиксельные размеры иконки для заданного логического размера:

gboolean
gtk_icon_size_lookup_for_settings (
        GtkSettings *settings,
        GtkIconSize  size,
        gint        *width,
        gint        *height);

Документация в качестве лучшей альтернативы предлагает использовать функцию gtk_widget_render_icon().

gtk_widget_render_icon() через цепочку вызовов обращается к gtk_icon_size_lookup_for_settings() для получения размеров иконок.

Отсюда такой вывод:

Прикладной код, который использует gtk_widget_render_icon(), может быть легко переведён на per-window скейлинг иконок. Прикладной код, который напрямую использует gtk_icon_size_lookup_for_settings(), будет требовать более существенной модификации.

Исходная версия wandrien, :

Скейлить UI в приложении можно либо на уровне всего приложения целиком, либо на уровне отдельных окон.

Второе необходимо для случае, если мы хотим менять скейлинг окон при переносе на другой монитор.

Первая задача требует меньшего объёма изменений со стороны кода приложений, вторая – большего. Это связано с тем, что масштабирование на уровне отдельных окон требует контекста в виде объекта типа GdkWindow. Не во всех случаях, когда приложение вычисляет какие-либо размеры, у него доступен объект этого типа. То есть может потребоваться более сущестенная переделка кода приложения.

Теперь собственно к самому GTK.

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

Каждый GdkScreen держит указатель на экземпляр GtkSettings – класса, отвечающего за хранение и получение настроек.

Работа с иконками в основном сосредоточена в модуле gtkiconfactory.c. Там содержится функция, которая возврвщает пиксельные размеры иконки для заданного логического размера:

gboolean
gtk_icon_size_lookup_for_settings (
        GtkSettings *settings,
        GtkIconSize  size,
        gint        *width,
        gint        *height);

Документация в качестве лучшей альтернативы предлагагает использовать функцию gtk_widget_render_icon().

gtk_widget_render_icon() через цепочку вызовов обращается к gtk_icon_size_lookup_for_settings() для получения размеров иконок.

Отсюда такой вывод:

Прикладной код, который использует gtk_widget_render_icon(), может быть легко переведён на per-window скейлинг иконок. Прикладной код, который напрямую использует gtk_icon_size_lookup_for_settings(), будет требовать более существенной модификации.