Bug 48744

Summary: Анимация масштабирования текста при смене шрифта в GTK 3 ломает определение размера виджета в wxWidgets
Product: Sisyphus Reporter: Mikhail Efremov <sem>
Component: mate-themesAssignee: Valery Inozemtsev <shrek>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: antohami, aris, cas, das, mike, qa-p8, shrek
Version: unstable   
Hardware: x86_64   
OS: Linux   
Bug Depends on:    
Bug Blocks: 45758    

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() на родительскую панель, то подхватывается правильная информация о размере.

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