Bug 48744 - Анимация масштабирования текста при смене шрифта в GTK 3 ломает определение размера виджета в wxWidgets
Summary: Анимация масштабирования текста при смене шрифта в GTK 3 ломает определение р...
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: mate-themes (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Valery Inozemtsev
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks: 45758
  Show dependency tree
 
Reported: 2023-12-08 16:06 MSK by Mikhail Efremov
Modified: 2023-12-08 16:06 MSK (History)
7 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Mikhail Efremov 2023-12-08 16:06:20 MSK
+++ This bug was initially created as a clone of Bug #45758 +++

Заметил в Mate окружении в стандартной теме (BlueMenta) уникальную особенность в GTK 3. Сценарий следующий: в процессе работы программы создаём новый виджет-надпись (wxStaticText, который внутри представляет собой GtkLabel) и выставляем ему увеличенный шрифт. В процессе отображения надпись появляется стандартного мелкого шрифта, а потом в течение некоторого времени увеличивается с анимацией. Такое поведение с анимацией ломает алгоритм расчёта размера виджета в wxWidgets: размер фиксируется в момент отображения текста, после чего увеличенный текст не помещается в отведённое ему поле. Ошибка проявляется только на темах Menta и BlueMenta, в остальных работает нормально, то есть без анимации, как и в других окружениях/дистрибутивах.
Возможно ли отключить эту анимацию?

Ссылка на демонстрацию в видео: https://t.me/alt_linux/282391
Могу приложить здесь файл с видео, если это уместно.

Историческая справка:
В GTK 3.6 появилось кэширование размеров, так что определение размера надписи при смене шрифта происходит не сразу, а только при его реальном отображении. В wxw для обхода проблемы стали дополнительно обновлять собственную информацию о размере после отображения элемента:
https://github.com/wxWidgets/wxWidgets/issues/16088
Такой подход работает во всех окружениях, кроме описанного случая в Mate: в нормальных ситуациях надписи появляются без анимации, сразу правильного размера.
Дополнительно проверил: если с задержкой в секунду после отображения вызывать InvalidateBestSize() на wxStaticText и Layout() на родительскую панель, то подхватывается правильная информация о размере.

При необходимости позже могу сделать минимальный пример, демонстрирующий проблему.