Salut,

Comment dois-je concevoir mon widget, pour pouvoir utiliser une feuille de style comme suit ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
style "my_widget_border" {
  MyWidget::border = 1px solid red
}
Ou encore:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
style "my_widget_border" {
  MyWidget::border-top-color = red
  MyWidget::border-bottom-color = red
  MyWidget::border-style = solid
  MyWidget::border-width = 1px 0 1px 0
}
Ou même de combiner les deux:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
style "my_widget_border" {
  MyWidget::border = 1px solid red
  MyWidget::border-width = 1px 0 1px 0
}

J'ai crée mon parser et mes structure:
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
MyStyleBorder {
  struct {
    MyStyleColor top;
    MyStyleColor right;
    MyStyleColor bottom;
    MyStyleColor left;
  } color;
  struct {
    MyStyleLine top;
    MyStyleLine right;
    MyStyleLine bottom;
    MyStyleLine left;
  } style;
  struct {
    MyStyleWidth top;
    MyStyleWidth right;
    MyStyleWidth bottom;
    MyStyleWidth left;
  } width;
}
J'appel gtk_widget_class_install_style_property_parser pour chaque propriété (border, border-style, border-color, ..., border-top, ..., border-top-style, border-top-color, ...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
  gtk_widget_class_install_style_property_parser(widget_class,
                                          g_param_spec_boxed("border-bottom-color",
                                                             "Border bottom color",
                                                             "Display a border",
                                                             MY_TYPE_STYLE_COLOR,
                                                             G_PARAM_WRITABLE|G_PARAM_READABLE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB
                                                             ),
                                          my_rc_parser_border_bottom_color
  );
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
gboolean my_rc_parser_border_bottom_color(const GParamSpec *pspec,
                             const GString    *rc_string,
                             GValue           *property_value)
{
  // ? ? ? gtk_widget_style_get(widget, "border", &border) réalise une copie de MyStyleBorder (qui est un boxed) et non pas sa référence
}
Comment utiliser/retrouver la propriété "border" de mon widget dans cette dernière ? Ou comment dois-je m'y prendre ?

PS: Je m'interdit les static: "par-ce que" (c'est tout...). En attendant une éventuelle réponse de votre part, je vais éviter les propriétés raccourcit (C'est peut être ça la clé) ...