J'essaie de porter mon application de Linux à Windows et j'ai un problème de thématisation. Sous Linux, cela fonctionne à partir d'une boîte, il suffit de le compiler et l'application utilise un bon thème et semble native.
J'ai installé gtkmm3 et gtk3 dans MSYS2 et je le construis avec CMake. C'est OK, j'ai dû copier toutes les dll dans un répertoire avec binaire pour pouvoir l'exécuter. Je n'ai rien copié d'autre. J'essaie de créer un package "décompresser et exécuter".
Mon problème est, cette application semble hors de propos. Il ne semble pas du tout natif. Il y a des ombres autour de la fenêtre, ce qui convient à Windows 10, mais sous Windows 7, cela ne semble pas natif. Plusieurs icônes sont également manquantes.
Même gitk3-demo ne semble pas natif de la même manière (mais au moins les icônes minimiser/maximiser/fermer sont correctes).
La question est donc: comment puis-je obtenir l’apparence native de l’application GTK3 sous Windows? Ou du moins des décorations de fenêtre indigènes?
Merci
Il existe deux sous-problèmes: les icônes manquantes et la définition du bon thème.
Pour les icônes manquantes, il suffisait de copier ces icônes
from: C:\msys64\mingw32\share\icons\Adwaita\22x22\actions
to: "votre dossier exécutable"\share\icons\Adwaita\22x22\actions
Il y a en fait un thème intégré de type natif dans GTK3. Pour utiliser un thème de type natif, créez simplement le fichier "votre dossier exécutable"\etc\gtk-3.0\settings.ini contenant ceci
[Settings]
gtk-theme-name=win32
le thème win32 est intégré à GTK3 et seules trois icônes de l’étape précédente semblent nécessaires.
Sous Windows 7, cela ressemble à ce qui suit:
Le problème est que les décorations ont la même apparence sous Windows 10 (y compris les décorations de fenêtres).
Extrait du commentaire de @andlabs: GTK + 3 utilise les API uxtheme.dll pour obtenir son apparence Windows. Malheureusement, Microsoft a conservé ces fenêtres de type Windows 7 pour les bordures de fenêtres. (plus dans les commentaires)
Vous pouvez voir l'application Windows 10 Gtk3 avec le thème win32
ici:
Et si vous n'êtes pas satisfait du thème par défaut ou win32, vous pouvez utiliser des thèmes personnalisés (comme ce Flat-Pat ) à partir d'Internet. :) Pour ce faire, vous devez créer un fichier de configuration:
"votre dossier exécutable"\etc\gtk-3.0\settings.ini avec ceci dedans
[Settings]
gtk-theme-name=Flat-Plat
et vous devez copier les fichiers de thème dans le répertoire dans le chemin de votre exécutable
"votre dossier exécutable"\share\themes\Flat-Plat
dans ce dossier, les fichiers index.theme
et gtk-x.x
doivent être présents. De toute évidence, gtk-theme-name
et le nom du dossier doivent correspondre.
Après avoir exécuté l'exécutable, vous devriez pouvoir obtenir un thème différent.
EDIT: Donc, il y a un thème win32 intégré, merci @andlabs
EDIT2: Ajout de captures d'écran
EDIT3: Ajout de la capture d'écran Windows 10 et des faits corrigés.
Vous pouvez définir la variable d'environnement GTK_CSD = 0 pour désactiver les décorations de fenêtre côté client et activer les décorations natives de Windows, ce qui supprime la barre de titre laide, semblable à win7, ainsi que la barre de titre semblable à Adwaita.
Pour les personnes comme moi qui utilisent (activestate) Perl, les fichiers/share et/etc doivent être placés dans un répertoire au-dessus du fichier Perl.exe (par exemple, dans C:\Perl64 si Perl.exe se trouve dans C:\Perl64\bin).