Подтвердить что ты не робот

Как получить собственные декорации окон на GTK3 в Windows 7+ и MSYS2

Я пытаюсь перенести мое приложение из linux в windows, и у меня есть проблема с theming. В linux это работает из коробки, просто скомпилируйте его, и приложение использует хорошую тему и выглядит родным.

Я установил gtkmm3 и gtk3 в MSYS2, и я создаю его с помощью CMake. Это нормально, мне пришлось скопировать все библиотеки DLL в каталог с двоичным кодом, чтобы иметь возможность его выполнить. Я ничего не копировал. Я пытаюсь создать пакет "распаковать и выполнить".

Моя проблема в том, что приложение выглядит неуместным. Он вообще не выглядит родным. В окне есть тени, что хорошо в Windows10, но в Windows 7 оно выглядит не родным. Также отсутствуют несколько значков.

плохая тема приложения gtk3 в Windows10

Даже gitk3-demo выглядит не-родным таким же образом (но у него есть, по крайней мере, значки minimize/maximize/close).

Итак, вопрос в следующем: как я могу получить собственный вид приложения GTK3 в Windows? Или, по крайней мере, локальные украшения?

Спасибо

4b9b3361

Ответ 1

Thera - это две проблемы: отсутствие значков и настройка правильной темы.

Отсутствующие значки

Для отсутствующих значков было достаточно скопировать эти значки

  • window-close-symbolic.symbolic.png
  • window-maximize-symbolic.symbolic.png
  • Окно-минимизируют-symbolic.symbolic.png

from: C:\msys64\mingw32\share\icons\Adwaita\22x22\действия

to: "ваша исполняемая папка" \share\icons\Adwaita\22x22\действия

Тема

Использование родной темы win32

В GTK3 есть встроенная натуральная тема. Для использования родной темы просто создайте файл "ваша исполняемая папка" \etc\gtk-3.0\settings.ini с этим в нем

[Settings]
gtk-theme-name=win32

win32-тема встроена в GTK3, и требуется только три значка с предыдущего шага.

В окнах 7 это выглядит следующим образом:

введите описание изображения здесь

Проблема в том, что декорации выглядят одинаково даже на Windows 10 (включая декорации окон).

Из комментария от @andlabs: GTK + 3 использует API uxtheme.dll, чтобы получить внешний вид Windows, и, к сожалению, Microsoft сохранила эти окна Windows 7 как окна. (подробнее в комментариях)

Вы можете увидеть приложение Windows 10 Gtk3 с темой win32 здесь:

введите описание изображения здесь

Использование темы по умолчанию

И если вас не устраивает тема по умолчанию или win32, вы можете использовать пользовательские темы (например, этот Flat-Pat) из Интернета.:) Для этого вам нужно создать файл конфигурации:

"ваша исполняемая папка" \etc\gtk-3.0\settings.ini с этим в ней

[Settings]
gtk-theme-name=Flat-Plat

и вам нужно скопировать файлы тем в каталог по пути к исполняемому файлу

"ваша исполняемая папка \share\themes\Flat-Plat

в этой папке должны присутствовать папки index.theme и gtk-x.x. Очевидно, что gtk-theme-name и имя папки должны совпадать.

После запуска исполняемого файла вы сможете получить другую тему.

введите описание изображения здесь

EDIT: Итак, есть встроенная тема win32, спасибо @andlabs

EDIT2: Добавлены скриншоты

EDIT3: Добавлен скриншот Windows 10 и исправлены факты.

Ответ 2

Вы можете установить переменную окружения GTK_CSD = 0, чтобы отключить декорации окон на стороне клиента и включить собственные декорации Windows, которые избавляются от уродливого win7-подобного заголовка, а также от Adwaita-подобного.

Ответ 3

Для таких людей, как я, которые используют (activestate) perl,/share и /etc должны быть размещены на один каталог выше perl.exe (например, в C:\Perl64, если perl.exe находится в C:\Perl64\bin).

Ответ 4

Собственно, Gtk + 3 совместим с Windows 10, и вы можете использовать родную тему Windows, создав эту тему по умолчанию.

gtk-theme-name = MS-Windows