IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

[Gtk+2.24] GdkColor widget style property


Sujet :

GTK+ avec C & C++

  1. #1
    Membre chevronné Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Par défaut [Gtk+2.24] GdkColor widget style property
    Bonjour,

    Je voudrai ajouter une propriété de style de type GdkColor à mon widget.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    style "my_style" {
        MyWidget::my-color = shade(@bg_color, 0.96)
    }
    widget_class "*<MyWidget>" style "my_style"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    // ...
    static void
    my_widget_class_init (MyWidgetClass *klass)
    {
      GtkWidgetClass *widget_class = (GtkWidgetClass *) klass;
      //...
      gtk_widget_class_install_style_property(widget_class,
                                              g_param_spec_boxed("my-color",
                                                                 "My color",
                                                                 "Display my color",
                                                                 GDK_TYPE_COLOR,
                                                                 G_PARAM_WRITABLE|G_PARAM_READABLE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB
                                                                 )
      );
    }
    // ...
    static void
    my_widget_expose (MyWidget *my)
    {
        GdkColor color_property;
        gtk_widget_style_get (widget,
                              "my-color", &color_property,
                              NULL);
        g_print("my-color: {red: %x, green: %x, blue: %x}\n", color_property.red, color_property.green, color_property.blue);
    }
    Mais j'obtiens cette erreur:
    Failed to retrieve property `MyWidget::my-color' of type `GdkColor' from rc file value "((GString*) 0x7f8fe00018a0)" of type `GString'
    Pouvez-vous m'aider a trouver mon erreur ?

    Edit:
    Si, dans ma feuille de style, je remplace "shade(@bg_color, 0.96)" par "@bg_color" Alors là ca marche ...

  2. #2
    Membre chevronné Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Par défaut
    Okay,

    Conformément a la documentation Gtk+2, il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyWidget::my-color = shade (1.09, @bg_color)

  3. #3
    Membre chevronné Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Par défaut J'ai un peu triché en faite ...
    Voici mon vrai fichié (J'utilise dark_bg_color et non pas bg_color)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # @file: my-prog.rc
    gtk-color-scheme = "dark_bg_color:#3c3b37\ndark_fg_color:#dfdbd2"
    style "my_style" {
        MyWidget::my-color = shade(0.96, @dark_bg_color)
    }
    widget_class "*<MyWidget>" style "my_style"
    J'ai fait un petit test en utilisant @bg_color et j'obtiens l'erreur :
    themes/Ambiance/gtk-2.0/apps/my-prog.rc:12: Invalid symbolic color 'bg_color'
    themes/Ambiance/gtk-2.0/apps/my-prog.rc:12: error: invalid identifier 'bg_color', expected valid identifier
    Donc on ne peut pas utiliser les couleurs définie dans le fichier gtkrc (Mais en utilisant sont propre parseur on peut la retrouver grace a un style_lookup )

    Quoi qu'il en soit. Quand je fais un shade(1.09, @dark_bg_color) la couleur vire au violet (un bug c sûr) Mais peut être pas de gtk
    J'utilise cette fonction pour convertir une couleur Gdk en cairo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    typedef struct _MurrineRGB {
        gdouble r;
        gdouble g;
        gdouble b;
    } MurrineRGB;
     
    void
    my_style_color_get_rgb(guint32 *color, MurrineRGB *rgb) {
        rgb->r = (gdouble) (((*color)&0xFF0000) >> 16)/G_MAXUINT8;
        rgb->g = (gdouble) (((*color)&0x00FF00) >>  8)/G_MAXUINT8;
        rgb->b = (gdouble) (((*color)&0x0000FF) >>  0)/G_MAXUINT8;
    }
    Voyez-vous l'erreur ?

    Jetez y un oeil rien que le temps d'une
    ...

  4. #4
    Membre chevronné Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Par défaut
    Bon, j'viens de checker, ma fonction me retourne le bon code couleur.

    Quand je fais :
    J'obtiens le code couleur :
    Au lieu d'après un algo fait maison ..
    Et ca, ca me rend dingue


    a noté que 51e1e1 (turquaz) pourrais me donner un rouge foncé #e15151 mais là c'est du délire ... Ce poste est un délire, genre en posant mon problème sur un forum ca va me donner du recule :/

    Je note que :
    Me retourne le code couleur Sans succès, je viens de réinstallé libgtk-2.0. Je vais essayer de le compiler moi même ...

  5. #5
    Membre chevronné Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Par défaut Un petit mot pour finir: Conversion INT16 -> INT8
    Mon erreur était dans le code que je n'ai pas montré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void
    my_style_color_set_from_gdk(MyStyleColor *color, GdkColor *gdk)
    {
        color->type = MY_STYLE_COLOR_RGB;
        color->value = 0x000000;
        color->value |= (gdk->red/G_MAXUINT16*G_MAXUINT8) << 16;// gdk->red/G_MAXUINT16 == 0x00
        color->value |= (gdk->green/G_MAXUINT16*G_MAXUINT8) << 8;// gdk->green/G_MAXUINT16 == 0x00
        color->value |= (gdk->blue/G_MAXUINT16*G_MAXUINT8) << 0;// gdk->blue/G_MAXUINT16 == 0x00
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    void
    my_style_color_set_from_gdk(MyStyleColor *color, GdkColor *gdk)
    {
        gdouble maxuint16 = G_MAXUINT16;
     
        guint red   = gdk->red/maxuint16*G_MAXUINT8;
        guint green = gdk->green/maxuint16*G_MAXUINT8;
        guint blue  = gdk->blue/maxuint16*G_MAXUINT8;
     
        color->type = MY_STYLE_COLOR_RGB;
        color->value = 0x000000;
        color->value |= red << 16;
        color->value |= green << 8;
        color->value |= blue << 0;
    }
    et maintenant shade (0.7, "#FF0000") me retourne #98511ae11ae1 soit #971a1a

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Gtk+2.24] gtk install style property parser
    Par Gaulouis dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 18/11/2015, 15h05
  2. widget style machintosh
    Par elmcherqui dans le forum Qt
    Réponses: 5
    Dernier message: 13/05/2008, 11h13
  3. Widget Table Properties Sheet
    Par azerr dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 24/03/2008, 20h44
  4. [Gtk] sortir d'un widget
    Par Katyucha dans le forum Ruby
    Réponses: 5
    Dernier message: 19/02/2008, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo