#1 Le 28/08/2021, à 19:07
- pol2095
[RESOLU] Récupérer le scale factor en c++
Bonjour,
je voudrais récupérer en c++ le scale factor qui apparaît dans les paramètres d'affichage ?
Merci de votre aide.
Dernière modification par pol2095 (Le 20/09/2021, à 08:43)
Hors ligne
#2 Le 28/08/2021, à 19:42
- kamaris
Re : [RESOLU] Récupérer le scale factor en c++
char *value = getenv ("GDK_SCALE");
?
Hors ligne
#3 Le 28/08/2021, à 22:07
- pol2095
Re : [RESOLU] Récupérer le scale factor en c++
https://149366088.v2.pressablecdn.com/w … upport.jpg
Est-ce faisable de récupérer la valeur double en c++, si oui qu'elle bibliothèque faut-il utiliser ?
Modération : merci d'utiliser des images de petite taille (300x300) ou des miniatures pointant sur ces images.
Dernière modification par cqfd93 (Le 28/08/2021, à 22:35)
Hors ligne
#4 Le 29/08/2021, à 13:22
- pol2095
Re : [RESOLU] Récupérer le scale factor en c++
getenv ("GDK_SCALE")
retourne
null
Hors ligne
#5 Le 29/08/2021, à 13:25
- kamaris
Re : [RESOLU] Récupérer le scale factor en c++
Tu récupères la valeur avec ce que j'ai mis ci-dessus ?
Si oui, pour la conversion :
double dvalue = strtod (value, NULL);
Tout ça est dans stdlib.h.
C'est du C, peut-être y a -t-il quelque chose de mieux / plus spécifique en C++…
EDIT : on s'est croisés.
Du coup je ne sais pas.
Dernière modification par kamaris (Le 29/08/2021, à 13:26)
Hors ligne
#6 Le 29/08/2021, à 13:46
- kamaris
Re : [RESOLU] Récupérer le scale factor en c++
Le paramètre doit être accessible via gsettings sinon.
Donc après ça dépend avec quoi tu travailles comme bibliothèques pour ton projet : si tu utilises GTK, tu dois pouvoir y accéder via GtkSettings (entre autres peut-être), sinon tu peux toujours appeler gsettings depuis ton code C++.
Hors ligne
#7 Le 30/08/2021, à 13:26
- pol2095
Re : [RESOLU] Récupérer le scale factor en c++
J'ai essayé cet exemple
mais j'ai ce message :
Package glibmm-2.4 was not found in the pkg-config search path.
Perhaps you should add the directory containing `glibmm-2.4.pc'
to the PKG_CONFIG_PATH environment variable
No package 'glibmm-2.4' found
Package giomm-2.4 was not found in the pkg-config search path.
Perhaps you should add the directory containing `giomm-2.4.pc'
to the PKG_CONFIG_PATH environment variable
No package 'giomm-2.4' found
Hors ligne
#8 Le 30/08/2021, à 16:40
- kamaris
Re : [RESOLU] Récupérer le scale factor en c++
Il faut que tu installes libglibmm-2.4-dev apparemment : https://packages.ubuntu.com/hirsute/amd … v/filelist
Hors ligne
#9 Le 04/09/2021, à 08:21
- pol2095
Re : [RESOLU] Récupérer le scale factor en c++
J'ai essayé en utilisant GTK3 :
sudo apt-get install libgtk-3-dev
#include <gtk/gtk.h>
gdouble scale = gdk_monitor_get_scale_factor( gdk_display_get_monitor (gdk_display_get_default(), 0));
mais "gdk_display_get_monitor()" provoque le crash de l'application
Hors ligne
#10 Le 04/09/2021, à 08:36
- hotnuma
Re : [RESOLU] Récupérer le scale factor en c++
Il y a quelques exemples ici :
https://cpp.hotexamples.com/fr/examples … mples.html
Chez moi ça a l'air de marcher :
GdkMonitor *monitor = gdk_display_get_primary_monitor(gdk_display_get_default());
int scale = gdk_monitor_get_scale_factor(monitor);
printf("scale = %d\n", scale);
GdkRectangle rect;
gdk_monitor_get_geometry(monitor, &rect);
printf("w = %d, h = %d\n", rect.width, rect.height);
Xfce 4.18 / https://github.com/hotnuma
En ligne
#11 Le 04/09/2021, à 09:07
- kamaris
Re : [RESOLU] Récupérer le scale factor en c++
Ah oui il faut passer par ces APIs c'est vrai.
GDK_SCALE est faite pour outrepasser les valeurs par défaut, et c'est d'ailleurs spécifique à X11 : https://docs.gtk.org/gtk3/x11.html.
Hors ligne
#12 Le 04/09/2021, à 15:27
- pol2095
Re : [RESOLU] Récupérer le scale factor en c++
/usr/lib/x86_64-linux-gnu/libgdk-3.so.0(gdk_display_manager_get_default_display+0x4) [0x7fc138a7b084]
/usr/lib/x86_64-linux-gnu/libgdk-3.so.0(gdk_screen_get_default+0xd) [0x7fc138a7b15d]
J'ai ces erreurs :
GLib-GObject-WARNING **: 15:16:36.923: cannot register existing type 'GdkDisplayManager'
GLib-CRITICAL **: 15:16:36.923: g_once_init_leave: assertion 'result != 0' failed
GLib-GObject-CRITICAL **: 15:16:36.923: g_object_new_with_properties: assertion 'G_TYPE_IS_OBJECT (object_type)' failed
mon application utilise GTK2, peut-être la cause du problème ?
Dernière modification par pol2095 (Le 04/09/2021, à 15:31)
Hors ligne
#13 Le 04/09/2021, à 19:06
- kamaris
Re : [RESOLU] Récupérer le scale factor en c++
Si tu as comme backtrace ce que tu montres ci-dessus, c'est que ton code utilise GTK3, pas GTK2.
Maintenant pour pouvoir avancer il faudrait que tu donnes :
le code que tu compiles ;
comment tu le compiles ;
quel message d'erreur (exhaustif) tu obtiens.
Hors ligne
#14 Le 12/09/2021, à 09:29
- pol2095
Re : [RESOLU] Récupérer le scale factor en c++
J'appelle une librairie *.so utilisant GTK3 depuis une app en GTK2, certaines méthodes fonctionnent, d'autres non.
J'arrive à récupérer le scale factor mais seulement un entier (pas le fractional scaling) mais ça suffit pour mon projet.
ça fonctionne aussi sur Fedora.
Merci.
Hors ligne