Как использовать стиль виджета CSS через Gtk.Css_Provider / Gtk.Style_Context / Gtk.Style_Provider? - PullRequest
0 голосов
/ 20 января 2019

Я работаю с Ada / Gtk 3 / Gtkada / Adacore / Gtk.Css_Provider / Gtk.Style_Context / Gtk.Style_Provider

и я пытаюсь изменить внешний вид кнопки через CSS, но не могу заставить работать функцию Gtk.Style_Context.Add_Provider.

Вот мой код: https://pastebin.com/xrhXMkpH

   function ColorButton_v2( aButton : in out Gtk.Button.Gtk_Button ) return Gtk.Widget.Gtk_Widget is
      aCssData : String := "button { background-color: cyan; background-image: none; } " &
        "button:hover { background-color: green; background-image: none; } " & 
        "button:active { background-color: brown; background-image: none; } ";
      aError : Glib.Error.GError_Access := null;
      isCssProviderSetUp : Boolean := False;

      aCssProvider : Gtk.Css_Provider.Gtk_Css_Provider := Gtk.Css_Provider.Gtk_Css_Provider_New;
      aStyleContext : Gtk.Style_Context.Gtk_Style_Context := Gtk.Style_Context.Gtk_Style_Context_New;
      aStyleProvider : Gtk.Style_Provider.Gtk_Style_Provider := Gtk.Style_Provider.Gtk_Style_Provider( aCssProvider );
   begin
      Ada.Text_IO.Put_Line( "aCssProvider.Is_Created =" & aCssProvider.Is_Created'Img );
      isCssProviderSetUp := Gtk.Css_Provider.Load_From_Data( Self  => aCssProvider,
                                                             Data  => aCssData,
                                                             Error => aError );

      Ada.Text_IO.Put_Line( "aStyleContext.Is_Created = " & aStyleContext.Is_Created'Img );
      aStyleContext := Gtk.Style_Context.Get_Style_Context( Widget => Gtk.Widget.Gtk_Widget( aButton ) );
      Ada.Text_IO.Put_Line( "aStyleContext.Is_Created = " & aStyleContext.Is_Created'Img );

      Gtk.Style_Context.Add_Provider( Self     => aStyleContext,
                                      Provider => aStyleProvider,
                                      Priority => Gtk.Style_Provider.Priority_User );

      return Gtk.Widget.Gtk_Widget( aButton );
   end;

Он основан на этом посте: https://github.com/ruby-gnome2/ruby-gnome2/issues/1084

...