[GTK]Modifier la couleur d'un widget

Modifier la couleur d'un widget [GTK] - Divers - Programmation

Marsh Posté le 24-12-2015 à 03:42:38    

Bonjour ,
 
Le code compile , mais aucun changement de couleur de la boite .  :sweat:  
Et 0 message du compilateur .
 

Code :
  1. WITH Gtk.Main ;          USE Gtk.Main ;
  2. WITH Gtk.Window ;        USE Gtk.Window ;
  3. WITH Gtk.Enums ;         USE Gtk.Enums ;
  4. WITH Gtk.Box ;           USE Gtk.Box ;
  5. WITH Gtk.Drawing_Area;   USE Gtk.Drawing_Area;
  6. WITH Gtk.Frame;        USE Gtk.Frame;
  7. WITH Gtk.Handlers;
  8. WITH Gtk.Widget ;        USE Gtk.Widget ;
  9. WITH Gdk.Color;        USE Gdk.Color;
  10.  
  11. Procedure graphismes is
  12.  
  13. -----------------------
  14.   -- VARIABLES --    |
  15. ----------------------------------------------------------
  16.   win : Gtk_window ;
  17.  
  18.   Boite  : Gtk_VBox ;
  19.  
  20.   conteneur_1_enfant : Gtk_Frame;
  21.  
  22.   planche : Gtk_Drawing_Area ;
  23.  
  24.  
  25.  
  26.   -- colors
  27.   couleur : Gdk_Color ;
  28.  
  29.   Success : Boolean ;
  30.  
  31. ----------------------------------------------------------
  32. --Instanciation package(s) for connexion
  33. ----------------------------------------------------------
  34.  
  35.   PACKAGE P_Callback IS NEW Gtk.Handlers.Callback(Gtk_Widget_Record);
  36.    
  37.   USE P_Callback ;
  38.  
  39. ----------------------------------------------------------
  40. --  Handlers (or callbacks)   |
  41. ----------------------------------------------------------
  42.  
  43.   procedure Stop_Program(Emetteur : access Gtk_Widget_Record'class)
  44.   is
  45.  
  46.      PRAGMA Unreferenced (Emetteur);
  47.      
  48.   begin
  49.  
  50.      Main_Quit;
  51.  
  52.   end Stop_Program ;
  53.  
  54. -------------------------------------------------
  55. BEGIN
  56.  
  57.   Init ;
  58.    
  59. ----------------
  60.   -- NEW --   |
  61. -------------------------------------------------    
  62.  
  63.   Gtk_New(win);  
  64.  
  65.   Gtk_New(planche);
  66.    
  67.   Gtk_New_VBox
  68.  (Boite, homogeneous => false, Spacing => 0) ;
  69.  
  70.   Gtk_New(Frame => conteneur_1_enfant);
  71.  
  72. ------------------------------------------
  73. --  Color                  |
  74. ------------------------------------------
  75.   Set_Rgb
  76.   (Color=> couleur , Red => 0 , Green => 90 , Blue => 93);
  77.  
  78.    Alloc_Color (Colormap   => Gtk.Widget.Get_Default_Colormap,
  79.                 Color      => couleur,
  80.                 Writeable  => false,
  81.                 Best_Match => True,
  82.                 Success    => Success);  
  83.    
  84.     Set_Colormap
  85.       (Widget => Boite ,
  86.        Cmap  => Gtk.Widget.Get_Default_Colormap);
  87.  
  88. ---------------------------------
  89. --  Add                    |
  90. ---------------------------------
  91.  
  92.   win.Add(Boite);
  93.  
  94.   conteneur_1_enfant.Add(planche);
  95.  
  96. ------------------------------------------
  97. --  Connect                   |
  98. ------------------------------------------
  99.  
  100. Connect(Widget => win ,
  101.          Name => "destroy" ,
  102.            Cb => Stop_Program'access);
  103.            
  104.    
  105. ------------------------------------------
  106. --  Design Window          |
  107. ------------------------------------------
  108.  
  109.   Set_Label
  110.      (Frame => conteneur_1_enfant ,
  111.       Label => "entoure : conteneur_stock_1 => planche" );
  112.  
  113.   Size
  114.      (Drawing_Area => planche ,
  115.       Width => 100 ,
  116.       Height => 100);
  117.      
  118.  
  119.   Set_Border_Width
  120.        (Container => conteneur_1_enfant ,
  121.         Border_Width => 60);  
  122.     
  123.   Pack_End
  124.      (In_Box => Boite ,
  125.       Child => conteneur_1_enfant ,
  126.       Expand => false ,
  127.       Fill => false);
  128.     
  129.     
  130.   win.Set_Default_Size(500,500) ;  
  131.  
  132.   win.set_position(Win_Pos_Mouse) ;
  133.    
  134.   win.Show_all ;
  135.   Main ;
  136.  
  137. END graphismes;


Message édité par eroge le 08-01-2016 à 21:03:26
Reply

Marsh Posté le 24-12-2015 à 03:42:38   

Reply

Marsh Posté le 28-12-2015 à 06:24:42    

Aucune réponse des développeurs de la bibliothéque , alors que mon code est compilable :
https://github.com/AdaCore/gtkada/issues/2

Reply

Marsh Posté le 28-12-2015 à 12:36:48    

A mon avis:
1) Il faut d'abord que tu récupères une Colormap en faisant  Get_Default_Colormap
2) Tu modifies cette Colormap avec Alloc_Color
3) Tu remplaces la Colormap par défaut par celle modifiée avec Set_Default_Colormap
Comme ça, quand tu feras Set_Colormap, le paramètre Gtk.Widget.Get_Default_Colormap sera bien ta colormap modifiée
Ou bien sinon, tu ne fais pas l'étape 3, et tu fais Set_Colormap directement avec la Colormap modifiée comme Cmap.
 
A+,


Message édité par gilou le 28-12-2015 à 15:48:50

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 29-12-2015 à 13:57:44    

gilou , j'ai éssayé tes 2 méthodes , le code se compile mais aucun changement à l'éxécution .

 

Voir la partie encadrée "color"  , j'ai fais les modifications .

 
Code :
  1. WITH Gtk.Main ;          USE Gtk.Main ;
  2. WITH Gtk.Window ;        USE Gtk.Window ;
  3. WITH Gtk.Enums ;         USE Gtk.Enums ;
  4. WITH Gtk.Box ;           USE Gtk.Box ;
  5. WITH Gtk.Drawing_Area;   USE Gtk.Drawing_Area;
  6. WITH Gtk.Frame;         USE Gtk.Frame;
  7. WITH Gtk.Handlers;
  8. WITH Gtk.Widget ;        USE Gtk.Widget ;
  9. WITH Gdk.Color;         USE Gdk.Color;
  10.  
  11. Procedure graphismes is
  12.  
  13. -----------------------
  14.   -- VARIABLES --    |
  15. ----------------------------------------------------------
  16.   win : Gtk_window ;
  17.  
  18.   Boite  : Gtk_VBox ;
  19.  
  20.   conteneur_1_enfant : Gtk_Frame;
  21.  
  22.   planche : Gtk_Drawing_Area ;
  23.  
  24.  
  25.  
  26.   -- colors
  27.   couleur : Gdk_Color ;
  28.  
  29.   Success : Boolean ;
  30.  
  31.   default_colormap : Gdk_Colormap;
  32.  
  33. ----------------------------------------------------------
  34. --Instanciation package(s) for connexion
  35. ----------------------------------------------------------
  36.  
  37.   PACKAGE P_Callback IS NEW Gtk.Handlers.Callback(Gtk_Widget_Record);
  38.  
  39.   USE P_Callback ;
  40.  
  41. ----------------------------------------------------------
  42. --  Handlers (or callbacks)   |
  43. ----------------------------------------------------------
  44.  
  45.   procedure Stop_Program(Emetteur : access Gtk_Widget_Record'class)
  46.   is
  47.  
  48.      PRAGMA Unreferenced (Emetteur);
  49.  
  50.   begin
  51.  
  52.      Main_Quit;
  53.  
  54.   end Stop_Program ;
  55.  
  56. -------------------------------------------------
  57. BEGIN
  58.  
  59.   Init ;
  60.  
  61. ----------------
  62.   -- NEW --   |
  63. -------------------------------------------------    
  64.  
  65.   Gtk_New(win);  
  66.  
  67.   Gtk_New(planche);
  68.  
  69.   Gtk_New_VBox
  70.  (Boite, homogeneous => false, Spacing => 0) ;
  71.  
  72.   Gtk_New(Frame => conteneur_1_enfant);
  73.  
  74. ------------------------------------------
  75. --  Color                  |
  76. ------------------------------------------
  77.   Set_Rgb
  78.   (Color=> couleur , Red => 0 , Green => 90 , Blue => 93);
  79.  
  80.    default_colormap := Get_Default_Colormap;
  81.  
  82.    Alloc_Color (Colormap   => default_colormap ,
  83.                 Color      => couleur,
  84.                 Writeable  => false,
  85.                 Best_Match => True,
  86.                 Success    => Success);  
  87.  
  88.    Set_Default_Colormap (Cmap => default_colormap);
  89.    
  90.    Set_Colormap
  91.       (Widget => Boite ,
  92.        Cmap  => Gtk.Widget.Get_Default_Colormap);
  93.  
  94. ---------------------------------
  95. --  Add                    |
  96. ---------------------------------
  97.  
  98.   win.Add(Boite);
  99.  
  100.   conteneur_1_enfant.Add(planche);
  101.  
  102. ------------------------------------------
  103. --  Connect                   |
  104. ------------------------------------------
  105.  
  106. Connect(Widget => win ,
  107.          Name => "destroy" ,
  108.            Cb => Stop_Program'access);
  109.  
  110.  
  111. ------------------------------------------
  112. --  Design Window          |
  113. ------------------------------------------
  114.  
  115.   Set_Label
  116.      (Frame => conteneur_1_enfant ,
  117.       Label => "entoure : conteneur_stock_1 => planche" );
  118.  
  119.   Size
  120.      (Drawing_Area => planche ,
  121.       Width => 100 ,
  122.       Height => 100);
  123.  
  124.  
  125.   Set_Border_Width
  126.       (Container => conteneur_1_enfant ,
  127.        Border_Width => 60);  
  128.  
  129.   Pack_End
  130.      (In_Box => Boite ,
  131.       Child => conteneur_1_enfant ,
  132.       Expand => false ,
  133.       Fill => false);
  134.  
  135.  
  136.   win.Set_Default_Size(500,500) ;  
  137.  
  138.   win.set_position(Win_Pos_Mouse) ;
  139.  
  140.   win.Show_all ;
  141.   Main ;
  142.  
  143. END graphismes;


Message édité par eroge le 30-12-2015 à 07:24:18
Reply

Marsh Posté le 30-12-2015 à 05:12:49    

En Vala ou C on modifie le widget avec override_*_color ou en Css avec un CssProvider  (gtk3). Jamais tenté ada  :(

Message cité 1 fois
Message édité par PetitJean le 30-12-2015 à 08:41:30

---------------
Non
Reply

Marsh Posté le 30-12-2015 à 07:20:38    

PetitJean a écrit :

En Vala ou C on modifie le widget avec override_*_color (gtk2) ou en Css avec un CssProvider  (gtk3). Jamais tenté ada  :(


Bonjour ,

 

A quel endroit le prototype est-il rangé en C ? (Linux)

 

Est-ce une fonction ? Peux-tu poster un code ?

 

Ta methode est-elle en accord avec celle de @gilou ?

  


Message édité par eroge le 30-12-2015 à 07:25:20
Reply

Marsh Posté le 30-12-2015 à 08:48:36    

sa méthode semble du Gtk2. pour Gtk 2 tu peux utiliser toutes ses fonctions pour modifier le widget selon son état : https://git.gnome.org/browse/gtk+/t [...] 2-24#n1143
 
en C,

  • pour la couleur de facade de ta boîte :

    Code :
    1. gtk_widget_modify_fg (GTK_WIDGET (Boite), GTK_STATE_NORMAL)

  • pour l'arrière-plan :

    Code :
    1. gtk_widget_modify_bg (GTK_WIDGET (Boite), GTK_STATE_NORMAL)

Message cité 1 fois
Message édité par PetitJean le 30-12-2015 à 08:49:41

---------------
Non
Reply

Marsh Posté le 30-12-2015 à 10:28:10    

PetitJean a écrit :

sa méthode semble du Gtk2. pour Gtk 2 tu peux utiliser toutes ses fonctions pour modifier le widget selon son état : https://git.gnome.org/browse/gtk+/t [...] 2-24#n1143

 

en C,

  • pour la couleur de facade de ta boîte :

    Code :
    1. gtk_widget_modify_fg (GTK_WIDGET (Boite), GTK_STATE_NORMAL)

  • pour l'arrière-plan :

    Code :
    1. gtk_widget_modify_bg (GTK_WIDGET (Boite), GTK_STATE_NORMAL)


 

J'ai trouvé la traduction de ce que tu utilise , en Ada :

 
Code :
  1. procedure Modify_Fg
  2.     (Widget     : access Gtk_Widget_Record;
  3.      State_Type : Enums.Gtk_State_Type;
  4.      Color      : Gdk.Color.Gdk_Color);
  5.   --  Sets the foreground color for a widget in a particular state.  All
  6.   --  other style values are left untouched.
  7.  
  8.   procedure Modify_Bg
  9.     (Widget     : access Gtk_Widget_Record;
  10.      State_Type : Enums.Gtk_State_Type;
  11.      Color      : Gdk.Color.Gdk_Color);
  12.   --  Sets the background color for a widget in a particular state.  All
  13.   --  other style values are left untouched. This procedure has no effect
  14.   --  when Widget has no physical window associated to it (for instance
  15.   --  a Gtk_Label). In such cases, you must put widget inside a
  16.   --  Gtk_Event_Box, and set the background color of the box itself.
 

Je les ai utilisés en plus de la méthode de gilou .
Toujour 0 erreur du compilo , mais toujours aucun changement de couleur !

 


Code :
  1. WITH Gtk.Main ;          USE Gtk.Main ;
  2. WITH Gtk.Window ;        USE Gtk.Window ;
  3. WITH Gtk.Enums ;         USE Gtk.Enums ;
  4. WITH Gtk.Box ;           USE Gtk.Box ;
  5. WITH Gtk.Drawing_Area;   USE Gtk.Drawing_Area;
  6. WITH Gtk.Frame;         USE Gtk.Frame;
  7. WITH Gtk.Handlers;
  8. WITH Gtk.Widget ;        USE Gtk.Widget ;
  9. WITH Gdk.Color;         USE Gdk.Color;
  10. WITH Gtk.Enums;         USE Gtk.Enums;
  11.  
  12.  
  13. Procedure graphismes is
  14.  
  15. -----------------------
  16.   -- VARIABLES --    |
  17. ----------------------------------------------------------
  18.   win : Gtk_window ;
  19.  
  20.   Boite  : Gtk_VBox ;
  21.  
  22.   conteneur_1_enfant : Gtk_Frame;
  23.  
  24.   planche : Gtk_Drawing_Area ;
  25.  
  26.  
  27.  
  28.   -- colors
  29.   couleur : Gdk_Color ;
  30.  
  31.   Success : Boolean ;
  32.  
  33.   default_colormap : Gdk_Colormap;
  34.  
  35.   enums_etat_type : Gtk_State_Type := State_Normal ;
  36.  
  37. ----------------------------------------------------------
  38. --Instanciation package(s) for connexion
  39. ----------------------------------------------------------
  40.  
  41.   PACKAGE P_Callback IS NEW Gtk.Handlers.Callback(Gtk_Widget_Record);
  42.  
  43.   USE P_Callback ;
  44.  
  45. ----------------------------------------------------------
  46. --  Handlers (or callbacks)   |
  47. ----------------------------------------------------------
  48.  
  49.   procedure Stop_Program(Emetteur : access Gtk_Widget_Record'class)
  50.   is
  51.  
  52.      PRAGMA Unreferenced (Emetteur);
  53.  
  54.   begin
  55.  
  56.      Main_Quit;
  57.  
  58.   end Stop_Program ;
  59.  
  60. -------------------------------------------------
  61. BEGIN
  62.  
  63.   Init ;
  64.  
  65. ----------------
  66.   -- NEW --   |
  67. -------------------------------------------------    
  68.  
  69.   Gtk_New(win);  
  70.  
  71.   Gtk_New(planche);
  72.  
  73.   Gtk_New_VBox
  74.  (Boite, homogeneous => false, Spacing => 0) ;
  75.  
  76.   Gtk_New(Frame => conteneur_1_enfant);
  77.  
  78. ------------------------------------------
  79. --  Color                  |
  80. ------------------------------------------
  81.   Set_Rgb
  82.   (Color=> couleur , Red => 0 , Green => 90 , Blue => 93);
  83.  
  84.    default_colormap := Get_Default_Colormap;
  85.  
  86.    Alloc_Color (Colormap   => default_colormap ,
  87.                 Color      => couleur,
  88.                 Writeable  => false,
  89.                 Best_Match => True,
  90.                 Success    => Success);  
  91.  
  92.    Set_Default_Colormap (default_colormap);
  93.    
  94.    Set_Colormap
  95.       (Widget => Boite ,
  96.        Cmap  => default_colormap);
  97.    
  98.    Modify_Fg
  99.     (Widget  => Boite ,
  100.      State_Type => enums_etat_type ,
  101.      Color => couleur);
  102.    
  103.    Modify_Bg
  104.     (Widget  => Boite ,
  105.      State_Type => enums_etat_type ,
  106.      Color => couleur);
  107. ---------------------------------
  108. --  Add                    |
  109. ---------------------------------
  110.  
  111.   win.Add(Boite);
  112.  
  113.   conteneur_1_enfant.Add(planche);
  114.  
  115. ------------------------------------------
  116. --  Connect                   |
  117. ------------------------------------------
  118.  
  119. Connect(Widget => win ,
  120.          Name => "destroy" ,
  121.            Cb => Stop_Program'access);
  122.  
  123.  
  124. ------------------------------------------
  125. --  Design Window          |
  126. ------------------------------------------
  127.  
  128.   Set_Label
  129.      (Frame => conteneur_1_enfant ,
  130.       Label => "entoure : conteneur_stock_1 => planche" );
  131.  
  132.   Size
  133.      (Drawing_Area => planche ,
  134.       Width => 100 ,
  135.       Height => 100);
  136.  
  137.  
  138.   Set_Border_Width
  139.       (Container => conteneur_1_enfant ,
  140.        Border_Width => 60);  
  141.  
  142.   Pack_End
  143.      (In_Box => Boite ,
  144.       Child => conteneur_1_enfant ,
  145.       Expand => false ,
  146.       Fill => false);
  147.  
  148.  
  149.   win.Set_Default_Size(500,500) ;  
  150.  
  151.   win.set_position(Win_Pos_Mouse) ;
  152.  
  153.   win.Show_all ;
  154.   Main ;
  155.  
  156. END graphismes;


Message édité par eroge le 30-12-2015 à 10:43:29
Reply

Marsh Posté le 02-01-2016 à 13:28:20    

Bon , j'ai viré tout le code en plus de la boite et de la fentêtre .  

 

Même Résultat :

 
Code :
  1. WITH Gtk.Main ;          USE Gtk.Main ;
  2. WITH Gtk.Window ;        USE Gtk.Window ;
  3. WITH Gtk.Enums ;         USE Gtk.Enums ;
  4. WITH Gtk.Box ;           USE Gtk.Box ;
  5. WITH Gtk.Handlers;
  6. WITH Gtk.Widget ;        USE Gtk.Widget ;
  7. WITH Gdk.Color;         USE Gdk.Color;
  8. WITH Gtk.Enums;         USE Gtk.Enums;
  9.  
  10.  
  11. Procedure graphismes is
  12.  
  13. -----------------------
  14.   -- VARIABLES --    |
  15. ----------------------------------------------------------
  16.   win : Gtk_window ;
  17.  
  18.   Boite  : Gtk_VBox ;
  19.  
  20.  
  21.  
  22.   -- colors
  23.   couleur : Gdk_Color ;
  24.  
  25.   Success : Boolean ;
  26.  
  27.   default_colormap : Gdk_Colormap;
  28.  
  29.   enums_etat_type : Gtk_State_Type := State_Normal ;
  30.  
  31. ----------------------------------------------------------
  32. --Instanciation package(s) for connexion
  33. ----------------------------------------------------------
  34.  
  35.   PACKAGE P_Callback IS NEW Gtk.Handlers.Callback(Gtk_Widget_Record);
  36.  
  37.   USE P_Callback ;
  38.  
  39. ----------------------------------------------------------
  40. --  Handlers (or callbacks)   |
  41. ----------------------------------------------------------
  42.  
  43.   procedure Stop_Program(Emetteur : access Gtk_Widget_Record'class)
  44.   is
  45.  
  46.      PRAGMA Unreferenced (Emetteur);
  47.  
  48.   begin
  49.  
  50.      Main_Quit;
  51.  
  52.   end Stop_Program ;
  53.  
  54. -------------------------------------------------
  55. BEGIN
  56.  
  57.   Init ;
  58.  
  59. ----------------
  60.   -- NEW --   |
  61. -------------------------------------------------    
  62.  
  63.   Gtk_New(win);  
  64.  
  65.   Gtk_New_VBox
  66.  (Boite, homogeneous => false, Spacing => 0) ;
  67.  
  68. ------------------------------------------
  69. --  Color                  |
  70. ------------------------------------------
  71.   Set_Rgb
  72.   (Color=> couleur , Red => 0 , Green => 90 , Blue => 93);
  73.  
  74.    default_colormap := Get_Default_Colormap;
  75.  
  76.    Alloc_Color (Colormap   => default_colormap ,
  77.                 Color      => couleur,
  78.                 Writeable  => false,
  79.                 Best_Match => True,
  80.                 Success    => Success);  
  81.  
  82.    Set_Default_Colormap (default_colormap);
  83.    
  84.    Set_Colormap
  85.       (Widget => Boite ,
  86.        Cmap  => default_colormap);
  87.    
  88.    Modify_Fg
  89.     (Widget  => Boite ,
  90.      State_Type => enums_etat_type ,
  91.      Color => couleur);
  92.    
  93.    Modify_Bg
  94.     (Widget  => Boite ,
  95.      State_Type => enums_etat_type ,
  96.      Color => couleur);
  97. ---------------------------------
  98. --  Add                    |
  99. ---------------------------------
  100.  
  101.   win.Add(Boite);
  102.  
  103. ------------------------------------------
  104. --  Connect                   |
  105. ------------------------------------------
  106.  
  107. Connect(Widget => win ,
  108.          Name => "destroy" ,
  109.            Cb => Stop_Program'access);
  110.  
  111.  
  112. ------------------------------------------
  113. --  Design Window          |
  114. ------------------------------------------
  115.  
  116.   win.Set_Default_Size(500,500) ;  
  117.  
  118.   win.set_position(Win_Pos_Mouse) ;
  119.  
  120.   win.Show_all ;
  121.   Main ;
  122.  
  123. END graphismes;


Message édité par eroge le 08-01-2016 à 21:01:03
Reply

Marsh Posté le 08-01-2016 à 20:58:59    

Personne n'a de piste ?  


Message édité par eroge le 08-01-2016 à 21:00:38
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed