Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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);

Xubuntu / GitHub

Hors 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