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 :

Afficher une image de fond dans une fenêtre gtk4


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Avatar de Code Rom
    Homme Profil pro
    Cherche et essaie de corriger les bugs, ici ou là.
    Inscrit en
    Juin 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Cherche et essaie de corriger les bugs, ici ou là.

    Informations forums :
    Inscription : Juin 2009
    Messages : 139
    Par défaut Afficher une image de fond dans une fenêtre gtk4
    Bonjour,

    j'ai un petit soucis j'arrive a charger puis afficher mon image de fond, mais elle s'affiche en tout petit, alors qu'elle est bien au dimension de ma fenêtre.

    J'aimerais donc qu'elle s'affiche correctement et remplisse bien tout l'arrière plan.

    Voici le code, je précise que je découvre gtk4, donc soyez indulgent, merci.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    static void activate(GtkApplication* app, gpointer user_data)
    {
        GtkWidget *window;
        GtkWidget *background;
        GtkWidget *browse_button[3];
        GtkWidget *convert_button[3];
        GtkWidget *frame[3] = {NULL};
        GtkWidget *box;
     
        GtkWidget *video_entry = NULL;
        GtkWidget *image_entry = NULL;
        GtkWidget *audio_entry = NULL;
     
        GtkWidget *zone = NULL;
        GtkWidget *grid = NULL;
     
        GtkWidget *videos_files_label = NULL;
        gchar *utf8_videos_files;
     
        GtkWidget *images_files_label = NULL;
        gchar *utf8_images_files;
     
        GtkWidget *audio_files_label = NULL;
        gchar *utf8_audio_files;
     
        size_t i = 0;
     
        window = gtk_application_window_new (app);
        gtk_window_set_title (GTK_WINDOW (window), "FilesConverter");
        gtk_window_set_default_size (GTK_WINDOW (window), 800, 600);
     
        zone = gtk_fixed_new();
     
        box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
        gtk_widget_set_halign (box, GTK_ALIGN_CENTER);
        gtk_widget_set_valign (box, GTK_ALIGN_CENTER);
        gtk_window_set_child (GTK_WINDOW(window), zone);
     
        background = gtk_image_new_from_file("images/BG.jpeg");
        gtk_fixed_put(GTK_FIXED(zone), background, 100, 150);
     
        videos_files_label = gtk_label_new(NULL);
     
        utf8_videos_files = g_locale_to_utf8("<span foreground=\"#000000\">Videos Files</span>\n", -1, NULL, NULL, NULL);
        gtk_label_set_markup(GTK_LABEL(videos_files_label), utf8_videos_files);
        gtk_fixed_put(GTK_FIXED(zone), videos_files_label, 20, 20);
     
        frame[0] = gtk_frame_new(NULL);
        gtk_widget_set_size_request(frame[0], 780, 160);
        gtk_fixed_put(GTK_FIXED(zone), frame[0], 10, 10);
     
        images_files_label = gtk_label_new(NULL);
     
        utf8_images_files = g_locale_to_utf8("<span foreground=\"#000000\">Images Files</span>\n", -1, NULL, NULL, NULL);
        gtk_label_set_markup(GTK_LABEL(images_files_label), utf8_images_files);
        gtk_fixed_put(GTK_FIXED(zone), images_files_label, 20, 230);
     
        frame[1] = gtk_frame_new(NULL);
        gtk_widget_set_size_request(frame[1], 780, 160);
        gtk_fixed_put(GTK_FIXED(zone), frame[1], 10, 220);
     
     
        audio_files_label = gtk_label_new(NULL);
     
        utf8_audio_files = g_locale_to_utf8("<span foreground=\"#000000\">Audio Files</span>\n", -1, NULL, NULL, NULL);
        gtk_label_set_markup(GTK_LABEL(audio_files_label), utf8_audio_files);
        gtk_fixed_put(GTK_FIXED(zone), audio_files_label, 20, 430);
     
        frame[2] = gtk_frame_new(NULL);
        gtk_widget_set_size_request(frame[2], 780, 160);
        gtk_fixed_put(GTK_FIXED(zone), frame[2], 10, 420);
     
     
        for(i = 0; i < 3; i++)
        {
            browse_button[i] = gtk_button_new_with_label ("Browse");
            convert_button[i] = gtk_button_new_with_label("Convert");
        }
     
        gtk_fixed_put(GTK_FIXED(zone), browse_button[0], 450, 60);
        gtk_fixed_put(GTK_FIXED(zone), browse_button[1], 450, 270);
        gtk_fixed_put(GTK_FIXED(zone), browse_button[2], 450, 470);
     
        gtk_fixed_put(GTK_FIXED(zone), convert_button[0], 550, 60);
        gtk_fixed_put(GTK_FIXED(zone), convert_button[1], 550, 270);
        gtk_fixed_put(GTK_FIXED(zone), convert_button[2], 550, 470);
     
        g_signal_connect (browse_button[0], "clicked", G_CALLBACK(print_hello), NULL);
        g_signal_connect_swapped (browse_button[0], "clicked", G_CALLBACK(gtk_window_destroy), window);
     
        video_entry = gtk_entry_new();
        gtk_widget_set_size_request(video_entry, 400, 30);
        gtk_fixed_put(GTK_FIXED(zone), video_entry, 20, 60);
     
        image_entry = gtk_entry_new();
        gtk_widget_set_size_request(image_entry, 400, 10);
        gtk_fixed_put(GTK_FIXED(zone), image_entry, 20, 270);
     
        audio_entry= gtk_entry_new();
        gtk_widget_set_size_request(audio_entry, 400, 10);
        gtk_fixed_put(GTK_FIXED(zone), audio_entry, 20, 470);
     
        gtk_window_present(GTK_WINDOW (window));
     
    }
     
     
    int main (int argc, char *argv[])
    {
        GtkApplication *app;
        int status;
     
        app = gtk_application_new("org.gtk.example", G_APPLICATION_DEFAULT_FLAGS);
        g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
        status = g_application_run(G_APPLICATION(app), argc, argv);
        g_object_unref(app);
     
      return status;
    }
    Et voici une capture d'écran avec mon background en tout petit :

    Nom : Capture d’écran du 2024-10-11 18-25-08.png
Affichages : 192
Taille : 21,7 Ko

    Bien à vous.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 307
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Avant toute chose, bienvenu à toi dans le monde "merveilleux" de Gtk .

    La réponse qui vient a été un peu tardive. Je me suis arraché les cheveux pour tenter de trouver une solution à ton problème. Malheureusement je n'ai qu"une réponse partielle et qui plus est avec des fonctions dépréciées depuis la v4.10 . Sont vraiment gentils les développeurs Gtk à tout changer en permanence !

    Commençons par ton code actuel. Il intègre bien les principes de Gtk4. C'est déjà ça. Cependant ta construction de l'interface n'est pas cohérente. Tu crées un GtkBox que tu insères dans la fenêtre principale. Jusque là tout va bien. Puis tu insères un GtkFixed dans cette box. Ici ça se gâte franchement . On peut déjà se demander pourquoi le GtkBox dans ces conditions ? Il est inutile puisque tu insères tous les éléments dans le GtkFixed. Nous pourrions donc supprimer la box. Cependant, en lisant la documentation officielle on peut lire pour les GtkFixed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...For most applications, you should not use this container! It keeps you from having to learn about the other GTK containers, but it results in broken applications. With GtkFixed, the following things will result in truncated text, overlapping widgets, and other display bugs:
    
    - Themes, which may change widget sizes.
    - Fonts other than the one you used to write the app will of course change the size of widgets containing text; keep in mind that users may use a larger font because of difficulty reading the default, or they may be using a different OS that provides different fonts.
    - Translation of text into other languages changes its size. Also, display of non-English text will use a different font in many cases.
    ...
    Même si nous ne sommes pas très bon en anglais nous comprenons tout de même que ce container c'est beurk !

    Tous les chemins mènent à Rome. Il est possible d'obtenir une interface identique en utilisant des containers différents. J'ai "copieusement" modifié ton code pour te donner un exemple que tu pourras trifouiller/modifier à loisir .

    Bon tout ça c'est bien gentil, mais ça ne répond pas à la question posée. La solution réside dans l'affectation d'un style CSS. Il est possible de modifier l'apparence d'un widget par ce biais. En introduction j'ai commencé par écrire que ma réponse est partielle. Je ne suis pas arrivé à manipuler l'attribut "background-image" dans le style CSS. Il n'y a pas d'erreur en console mais l'image ne s'affiche pas (d'où ma calvitie citée en introduction ). D'autres pourrons surement apporter une précision sur ce point.

    • Comment appliquer un style CSS ?


    Un deuxième écueil apparait ici. Les fonctions nécessaires sont devenues dépréciées. Qu'importe, utilisons les tout de même. Il nous faut créer un GtkCssProvider dans lequel nous insérons notre style. Il nous faut ensuite récupérer le GtkStyleContext du widget concerné auquel nous appliquons le GtkCssProvider précédemment créé. Pour simplifier le code j'ai factorisé tout ce petit monde dans une fonction :
    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
    27
    /* Affecte un style CSS au widget transmis avec un nom pour ce dernier */
    static void
    change_style (GtkWidget *widget, const gchar *widget_name,  const gchar *style_css)
    {
      /* Changement du nom du widget */
      gtk_widget_set_name (widget, widget_name);
     
      /* Modification de l'apparence du bouton */
      /* Initialisation d'un GtkCssProvider */
      GtkCssProvider *css_provider = gtk_css_provider_new ();
     
      /* Création d'un texte au format css en fonction de flag */
      gchar *css = g_strdup_printf ("#%s %s", widget_name, style_css);
     
      /* Insertion du descriptif d'apparence dans le GtkCssProvider */
      gtk_css_provider_load_from_string (css_provider, css);
     
      /* Application de l'apparence au widget transmis.
       / GTK_STYLE_PROVIDER_PRIORITY_USER force le style utilisateur */
      GtkStyleContext *context = gtk_widget_get_style_context (widget);
      gtk_style_context_add_provider (context,
    				  GTK_STYLE_PROVIDER (css_provider),
    				  GTK_STYLE_PROVIDER_PRIORITY_USER);
      /* Libération mémoire */
      g_object_unref (css_provider);
      g_free (css);
    }
    • Comment écrire un style CSS ?


    Comme pour une feuille de style pour une page web. Pour le code exemple j'ai écris ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gchar *frame_style_css = "{\n color: black;\n background-image: none;\n background-color: Orange;\n box-shadow: 5px 5px 5px 5px rgba(0,0,0,0.4), 5px 5px 5px 5px rgba(0,0,0,0.4);\n}";
    Ce style créé un bord noir ombragé avec un fond orange et une couleur de texte noire. Comme tu peux le voir l'attribut "background-image" vaut "none". En théorie il faudrait écrire "url("image.jpg"); mais ceci ne donne rien non plus.

    • Factorisation du code complet


    Voila un code exemple reprenant les caractéristiques de ton interface. Elle se compose d'un GtkBox vertical dans lequel j'insère trois GtkFrame. Chaque frame est constitué d'un GtkBox horizontal. À l’intérieur de ce dernier est inséré un GtkEntry et deux GtkButton. Comme chaque frame est identique j'ai factorisé le code dans une fonction qui intègre aussi les callbacks pour gérer les buttons. Cette fonction renvoie la frame créée. Ce n'est pas forcément nécessaire ici. Voila le résultat :

    Nom : Capture d’écran_2024-10-13_13-51-40.png
Affichages : 151
Taille : 27,8 Ko
    En console lorsqu'on clique sur les différents boutons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Enter in browser_button_clicked_on
    Text in entry : test0
    Enter in convert_button_clicked_on
    Text in entry : test0
    Enter in browser_button_clicked_on
    Text in entry : test1
    Enter in convert_button_clicked_on
    Text in entry : test1
    Enter in browser_button_clicked_on
    Text in entry : test2
    Enter in convert_button_clicked_on
    Text in entry : test2
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    #include <gtk/gtk.h>
     
    /* Affecte un style CSS au widget transmis avec un nom pour ce dernier */
    static void
    change_style (GtkWidget *widget, const gchar *widget_name,  const gchar *style_css)
    {
      /* Changement du nom du widget */
      gtk_widget_set_name (widget, widget_name);
     
      /* Modification de l'apparence du bouton */
      /* Initialisation d'un GtkCssProvider */
      GtkCssProvider *css_provider = gtk_css_provider_new ();
     
      /* Création d'un texte au format css en fonction de flag */
      gchar *css = g_strdup_printf ("#%s %s", widget_name, style_css);
     
      /* Insertion du descriptif d'apparence dans le GtkCssProvider */
      gtk_css_provider_load_from_string (css_provider, css);
     
      /* Application de l'apparence au widget transmis.
       / GTK_STYLE_PROVIDER_PRIORITY_USER force le style utilisateur */
      GtkStyleContext *context = gtk_widget_get_style_context (widget);
      gtk_style_context_add_provider (context,
    				  GTK_STYLE_PROVIDER (css_provider),
    				  GTK_STYLE_PROVIDER_PRIORITY_USER);
      /* Libération mémoire */
      g_object_unref (css_provider);
      g_free (css);
    }
     
    /* Callback pour le bouton "Browser" */
    static void
    browser_button_clicked_on (GtkButton* self, GtkWidget *entry)
    {
      const gchar *text = gtk_editable_get_text (GTK_EDITABLE (entry));
     
      g_print ("Enter in %s\n", __func__);
      g_print ("Text in entry : %s\n", text);
    }
     
    /* Callback pour le bouton "Convert" */
    static void
    convert_button_clicked_on (GtkButton* self, GtkWidget *entry)
    {
      const gchar *text = gtk_editable_get_text (GTK_EDITABLE (entry));
     
      g_print ("Enter in %s\n", __func__);
      g_print ("Text in entry : %s\n", text);
    }
     
    /* Crée un GtkFrame avec tout son contenu et l'insére à la suite dans le
     * GtkBox transmis.
     *
     * box : dans lequel la frame sera insérée
     * style : style CSS à appliquer à la frame
     * titre : titre de la frame
     * browsebuttoncallback et convertbuttoncallback sont les pointeurs
     * respectifs des callbacks à associer aux boutons qui vont être crées.
     */
    static GtkWidget*
    create_and_insert_frame_in_box (GtkWidget *box,
    				const gchar *style,
    				const gchar *titre,
    				gpointer browsebuttoncallback,
    				gpointer convertbuttoncallback)
    {
      GtkWidget *frame = gtk_frame_new(titre);
      change_style (frame, "my_frame", style);
      gtk_box_append (GTK_BOX (box), frame);
     
      /* Création et fixation de l'espace entre chaque widget enfant d'un container
       * GtkBox. Il contiendra tous les widgets inscrits dans le GtkFrame */
      GtkWidget *internalbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 50);
      gtk_widget_set_valign (internalbox, GTK_ALIGN_CENTER);
      gtk_widget_set_margin_start (internalbox, 20);
      gtk_widget_set_margin_end (internalbox, 20);
      gtk_box_set_homogeneous (GTK_BOX (internalbox), FALSE);
     
      /* Insertion de internalbox dans le GtkFrame */
      gtk_frame_set_child (GTK_FRAME (frame), internalbox);
     
      /* Création et insertion d'un GtkEntry */
      GtkWidget *entry = gtk_entry_new();
      gtk_editable_set_width_chars (GTK_EDITABLE (entry), 50);
      gtk_box_append (GTK_BOX (internalbox), entry);
     
      /* Création et insertion des deux boutons "Browse" et "Convert" */
      GtkWidget *button = gtk_button_new_with_label ("Browse");
      gtk_box_append (GTK_BOX (internalbox), button);
      g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (browsebuttoncallback), entry);
      button = gtk_button_new_with_label ("Convert");
      gtk_box_append (GTK_BOX (internalbox), button);
      g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (convertbuttoncallback), entry);
     
      return frame;
    }
     
    static void activate(GtkApplication* app, gpointer user_data)
    {
        GtkWidget *window;
        GtkWidget *box;
        GtkWidget *frame;
     
        window = gtk_application_window_new (app);
        gtk_window_set_title (GTK_WINDOW (window), "FilesConverter");
        gtk_window_set_default_size (GTK_WINDOW (window), 800, 600);
     
        box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 50);
        gtk_box_set_homogeneous (GTK_BOX (box), TRUE);
        gtk_widget_set_margin_start (box, 20);
        gtk_widget_set_margin_end (box, 20);
        gtk_widget_set_margin_top (box, 20);
        gtk_widget_set_margin_bottom (box, 20);
        gtk_window_set_child (GTK_WINDOW(window), box);
     
        /* Création d'un style CSS pour les frames */
        gchar *frame_style_css = "{\n color: black;\n background-image: none;\n background-color: Orange;\n box-shadow: 5px 5px 5px 5px rgba(0,0,0,0.4), 5px 5px 5px 5px rgba(0,0,0,0.4);\n}";
     
        /* Création de chaque frame avec titre, style css et callbacks pour la gestion des boutons */
        frame = create_and_insert_frame_in_box (box, frame_style_css,
    					    "Videos Files",
    					    browser_button_clicked_on, convert_button_clicked_on);
        frame = create_and_insert_frame_in_box (box, frame_style_css,
    					    "Images Files",
    					    browser_button_clicked_on, convert_button_clicked_on);
        frame = create_and_insert_frame_in_box (box, frame_style_css,
    					    "Audio Files",
    					    browser_button_clicked_on, convert_button_clicked_on);
     
        gtk_window_present(GTK_WINDOW (window));
     
    }
     
     
    int main (int argc, char *argv[])
    {
        GtkApplication *app;
        int status;
     
        app = gtk_application_new("org.gtk.example", G_APPLICATION_DEFAULT_FLAGS);
        g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
        status = g_application_run(G_APPLICATION(app), argc, argv);
        g_object_unref(app);
     
      return status;
    }

  3. #3
    Membre confirmé
    Avatar de Code Rom
    Homme Profil pro
    Cherche et essaie de corriger les bugs, ici ou là.
    Inscrit en
    Juin 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Cherche et essaie de corriger les bugs, ici ou là.

    Informations forums :
    Inscription : Juin 2009
    Messages : 139
    Par défaut
    Merci pour ta réponse ultra détaillée.

    j'ai une référence indéfinie vers «*gtk_css_provider_load_from_string*»

    Peut être un problème de linker pourtant j'ai bien tout configuré :

    Compiler : `pkg-config --cflags gtk4`

    linker : `pkg-config --libs gtk4`

    Ma version de gtk4 est la 4.8.

    Edit : pour utiliser gtk4 j'ai juste a installer libgtk-4-dev pour coder avec cette bibliothèque ? rien de plus ? car c'est possible qu'il me manque un truc a installé, je suis sous debian 12.6.

    J'ai aussi gtk2.0 et gtk3 d'installé peut être des sortes de conflits, sait-on jamais.

    Je verrais ça ce soir car je ne peux pas m'en occuper maintenant.

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 307
    Billets dans le blog
    5
    Par défaut
    La réponse est toute simple (doc officielle) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    gtk_css_provider_load_from_string()
    ...
    Loads string into css_provider.
    
    This clears any previously loaded information.
    
    Available since: 4.12

  5. #5
    Membre confirmé
    Avatar de Code Rom
    Homme Profil pro
    Cherche et essaie de corriger les bugs, ici ou là.
    Inscrit en
    Juin 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Cherche et essaie de corriger les bugs, ici ou là.

    Informations forums :
    Inscription : Juin 2009
    Messages : 139
    Par défaut
    ah pardon autant pour moi.

    Mais du coup comment installer la 4.12 ?

    car moi j'ai installer libgtk-4-dev et je ne trouve pas d'autre paquet.

    Edit : j'ai trouvé ce lien : https://packages.debian.org/sid/libgtk-4-1

    Sauf lors de l'installation ça me sort plein de problème de dépendances.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    sudo dpkg -i libgtk-4-1_4.16.3+ds-1_amd64.deb 
    Sélection du paquet libgtk-4-1:amd64 précédemment désélectionné.
    (Lecture de la base de données... 247439 fichiers et répertoires déjà installés.)
    Préparation du dépaquetage de libgtk-4-1_4.16.3+ds-1_amd64.deb ...
    Dépaquetage de libgtk-4-1:amd64 (4.16.3+ds-1) ...
    dpkg: des problèmes de dépendances empêchent la configuration de libgtk-4-1:amd64*:
     libgtk-4-1:amd64 dépend de libc6 (>= 2.38); cependant :
      La version de libc6:amd64 sur le système est 2.36-9+deb12u8.
     libgtk-4-1:amd64 dépend de libcairo-gobject2 (>= 1.18.0); cependant :
      La version de libcairo-gobject2:amd64 sur le système est 1.16.0-7.
     libgtk-4-1:amd64 dépend de libcairo-script-interpreter2 (>= 1.18.0); cependant :
      La version de libcairo-script-interpreter2:amd64 sur le système est 1.16.0-7.
     libgtk-4-1:amd64 dépend de libcairo2 (>= 1.18.0); cependant :
      La version de libcairo2:amd64 sur le système est 1.16.0-7.
     libgtk-4-1:amd64 dépend de libcpdb-frontend2t64 (>= 2.0~b5); cependant :
      Le paquet libcpdb-frontend2t64 n'est pas installé.
     libgtk-4-1:amd64 dépend de libcpdb2t64 (>= 2.0~b5); cependant :
      Le paquet libcpdb2t64 n'est pas installé.
     libgtk-4-1:amd64 dépend de libglib2.0-0t64 (>= 2.80.0); cependant :
      Le paquet libglib2.0-0t64 n'est pas installé.
     libgtk-4-1:amd64 dépend de libpango-1.0-0 (>= 1.52.0); cependant :
      La version de libpango-1.0-0:amd64 sur le système est 1.50.12+ds-1.
     libgtk-4-1:amd64 dépend de libpangocairo-1.0-0 (>= 1.52.0); cependant :
      La version de libpangocairo-1.0-0:amd64 sur le système est 1.50.12+ds-1.
     libgtk-4-1:amd64 dépend de libpangoft2-1.0-0 (>= 1.52.0); cependant :
      La version de libpangoft2-1.0-0:amd64 sur le système est 1.50.12+ds-1.
     libgtk-4-1:amd64 dépend de libpng16-16t64 (>= 1.6.2); cependant :
      Le paquet libpng16-16t64 n'est pas installé.
     libgtk-4-1:amd64 dépend de libgtk-4-common (>= 4.16.3+ds-1); cependant :
      La version de libgtk-4-common sur le système est 4.8.3+ds-2+deb12u1.
     
    dpkg: erreur de traitement du paquet libgtk-4-1:amd64 (--install)*:
     problèmes de dépendances - laissé non configuré
    Traitement des actions différées («*triggers*») pour libc-bin (2.36-9+deb12u8)*...
    Des erreurs ont été rencontrées pendant l'exécution*:
     libgtk-4-1:amd64
    Et lorsque j'essaie d'installer les dépendances qu'il manque :

    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
    sudo apt install libcairo-gobject2 libcairo-script-interpreter2 libcairo2 libcpdb-frontend2t64 libcpdb2t64 libglib2.0-0t64  libpangocairo-1.0-0 libpangoft2-1.0-0 libpng16-16t64 libgtk-4-common
    Lecture des listes de paquets... Fait
    Construction de l'arbre des dépendances... Fait
    Lecture des informations d'état... Fait      
    Aucune version du paquet libcpdb-frontend2t64 n'est disponible, mais il existe dans la base
    de données. Cela signifie en général que le paquet est manquant, qu'il est devenu obsolète
    ou qu'il n'est disponible que sur une autre source
     
    Aucune version du paquet libcpdb2t64 n'est disponible, mais il existe dans la base
    de données. Cela signifie en général que le paquet est manquant, qu'il est devenu obsolète
    ou qu'il n'est disponible que sur une autre source
     
    Aucune version du paquet libglib2.0-0t64 n'est disponible, mais il existe dans la base
    de données. Cela signifie en général que le paquet est manquant, qu'il est devenu obsolète
    ou qu'il n'est disponible que sur une autre source
     
    Aucune version du paquet libpng16-16t64 n'est disponible, mais il existe dans la base
    de données. Cela signifie en général que le paquet est manquant, qu'il est devenu obsolète
    ou qu'il n'est disponible que sur une autre source
     
    E: Le paquet «*libcpdb-frontend2t64*» n'a pas de version susceptible d'être installée
    E: Le paquet «*libcpdb2t64*» n'a pas de version susceptible d'être installée
    E: Le paquet «*libglib2.0-0t64*» n'a pas de version susceptible d'être installée
    E: Le paquet «*libpng16-16t64*» n'a pas de version susceptible d'être installée

  6. #6
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Je ne suis pas arrivé à manipuler l'attribut "background-image" dans le style CSS. Il n'y a pas d'erreur en console mais l'image ne s'affiche pas (d'où ma calvitie citée en introduction ). D'autres pourrons surement apporter une précision sur ce point.
    J'ai déjà eu recours à cette réponse lors de portages gtk4, en espérant que ça aide : https://discourse.gnome.org/t/what-g...ontext/12621/2

  7. #7
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 307
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Code Rom Voir le message
    ah pardon autant pour moi.

    Mais du coup comment installer la 4.12 ?

    car moi j'ai installer libgtk-4-dev et je ne trouve pas d'autre paquet.

    Edit : j'ai trouvé ce lien : https://packages.debian.org/sid/libgtk-4-1

    Sauf lors de l'installation ça me sort plein de problème de dépendances.
    Surtout n’essayes pas. Tu risques de casser ton installation. Pour avoir la dernière version il te faut changer de version de Debian. Je suppose que tu es en version «*stable*». Si tu n’es pas sur un ordinateur professionnel et que tu n’a pas trop peur des conséquences tu peux déjà changer en passant à la version «testing»(description des différentes versions). La version «*sid*» est la version instable.

  8. #8
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 307
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par balkany Voir le message
    J'ai déjà eu recours à cette réponse lors de portages gtk4, en espérant que ça aide : https://discourse.gnome.org/t/what-g...ontext/12621/2
    Je ne sais pas si c’est parce que j’essaie d’ouvrir ton lien depuis une tablette mais ça ne fonctionne pas

  9. #9
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Je ne sais pas si c’est parce que j’essaie d’ouvrir ton lien depuis une tablette mais ça ne fonctionne pas
    Ouais, le discourse de gnome est down apparemment, il faut réessayer plus tard.

  10. #10
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 307
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par balkany Voir le message
    J'ai déjà eu recours à cette réponse lors de portages gtk4, en espérant que ça aide : https://discourse.gnome.org/t/what-g...ontext/12621/2
    Après lecture de ton lien j'ai modifié la fonction d'affectation d'un style CSS. Tout est maintenant rentré dans l'ordre. Merci balkani pour la précision apportée.

    Voici le correctif :
    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
    /* Affecte un style CSS au widget transmis avec un nom pour ce dernier */
    static void
    change_style (GtkWidget *widget, const gchar *widget_name,  const gchar *style_css)
    {
      /* Changement du nom du widget */
      gtk_widget_set_name (widget, widget_name);
     
      /* Modification de l'apparence du bouton */
      /* Initialisation d'un GtkCssProvider */
      GtkCssProvider *css_provider = gtk_css_provider_new ();
     
      /* Création d'un texte au format css en fonction de flag */
      gchar *css = g_strdup_printf ("#%s %s", widget_name, style_css);
     
      /* Insertion du descriptif d'apparence dans le GtkCssProvider */
      gtk_css_provider_load_from_string (css_provider, css);
     
      /* Application de l'apparence au widget transmis. */
      gtk_style_context_add_provider_for_display (gdk_display_get_default (),
    					      GTK_STYLE_PROVIDER (css_provider),
    					      GTK_STYLE_PROVIDER_PRIORITY_USER);
     
      /* Libération mémoire */
      g_object_unref (css_provider);
      g_free (css);
    }

Discussions similaires

  1. [CSS 3] Afficher la totalité d'une image en fond dans un div
    Par stc074 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 27/11/2019, 09h44
  2. Afficher image de fond dans une div
    Par awalter1 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 01/03/2012, 00h06
  3. Réponses: 6
    Dernier message: 21/09/2006, 18h33
  4. Réponses: 4
    Dernier message: 03/05/2005, 10h03

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