Bug 45758 - Анимация масштабирования текста при смене шрифта в GTK 3 ломает определение размера виджета в wxWidgets
Summary: Анимация масштабирования текста при смене шрифта в GTK 3 ломает определение р...
Status: NEW
Alias: None
Product: Альт Рабочая станция
Classification: Distributions
Component: Ошибки работы (show other bugs)
Version: 10.1
Hardware: x86_64 Linux
: P5 normal
Assignee: Mikhail Efremov
QA Contact: qa-p8@altlinux.org
URL:
Keywords:
Depends on: 48744
Blocks:
  Show dependency tree
 
Reported: 2023-04-05 16:51 MSK by Дмитрий Щербаков
Modified: 2023-12-08 16:06 MSK (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Дмитрий Щербаков 2023-04-05 16:51:12 MSK
Заметил в 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() на родительскую панель, то подхватывается правильная информация о размере.

При необходимости позже могу сделать минимальный пример, демонстрирующий проблему.
Comment 1 Антон Мидюков 2023-04-06 11:03:35 MSK
А наблюдается ли такая проблема с приложениями на wxGTK3.2? В audacity, codelite, dvdstyler, wxMaxima?
Comment 2 Дмитрий Щербаков 2023-04-06 11:21:46 MSK
(In reply to Антон Мидюков from comment #1)
> А наблюдается ли такая проблема с приложениями на wxGTK3.2? В audacity,
> codelite, dvdstyler, wxMaxima?

Мы используем собственную сборку wxGTK (сейчас это 3.2.1). Найти пример в других приложениях, наверное, будет непросто, так как сценарий относительно специфический.