Pages : 1
#1 Le 26/07/2007, à 10:43
- Yvesall
GTK widget transparent
salut, j' ai un petit souci pour une appli en GTK
en faite j'ai une zone de texte du type gtk_text_view et j'aimerais mettre une image de fond, mais je ne sais pas comment faire, alors j'ai trifouiller et j'ai trouver un moyen de mettre un arriere plan sur toute la fentere de type gtk_window
mais voila le resultat :
et mois ce que j'aimerais c'est ca :
(c'est un montage fait avec gimp)
voila mon code pour le moment :
#include <gtk/gtk.h>
typedef struct s_struct
{
GtkWidget *pWindow;
GtkWidget *pFrame;
GtkWidget *pVBox;
GtkWidget *pTable;
GdkPixbuf *pixbuf_fond;
GdkPixmap *pixmap_fond;
GtkWidget *text_view;
} t_struct;
void place_btn(t_struct *s)
{
GtkWidget *scrollbar;
s->pFrame = gtk_frame_new("Texte :");
gtk_frame_set_shadow_type((GtkFrame *)s->pFrame, GTK_SHADOW_IN);
s->pVBox = gtk_vbox_new(FALSE, 5);
gtk_container_add(GTK_CONTAINER(s->pFrame), s->pVBox);
scrollbar = gtk_scrolled_window_new(NULL, NULL);
gtk_box_pack_start(GTK_BOX(s->pVBox), scrollbar, TRUE, TRUE, 5);
s->text_view = gtk_text_view_new();
gtk_container_add(GTK_CONTAINER(scrollbar), s->text_view);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollbar), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_table_attach_defaults(GTK_TABLE(s->pTable), s->pFrame, 0, 1, 0, 1);
}
void fond_ecran_set(GtkWidget *pWindow, t_struct *s)
{
if (s->pixmap_fond)
gdk_window_set_back_pixmap(pWindow->window, s->pixmap_fond, FALSE);
}
gboolean fond_ecran_expose(GtkWidget *pWindow, GdkEventExpose *event, t_struct *s)
{
if (s->pixmap_fond)
{
gdk_window_set_back_pixmap(pWindow->window, s->pixmap_fond, FALSE);
return TRUE;
}
return FALSE;
}
int main(int argc, char **argv)
{
t_struct s;
gtk_init(&argc, &argv);
s.pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(s.pWindow), "Fenêtre principale");
gtk_window_set_default_size(GTK_WINDOW(s.pWindow), 800, 600);
s.pTable = gtk_table_new(1, 1, TRUE);
gtk_container_add(GTK_CONTAINER(s.pWindow), GTK_WIDGET(s.pTable));
place_btn(&s);
s.pixbuf_fond = gdk_pixbuf_new_from_file_at_size("./flammes.bmp", 800, 600, NULL);
if (s.pixbuf_fond)
{
s.pixmap_fond = gdk_pixmap_new(s.pWindow->window, gdk_pixbuf_get_width(s.pixbuf_fond),
gdk_pixbuf_get_height(s.pixbuf_fond), gdk_visual_get_system()->depth);
gdk_draw_pixbuf(s.pixmap_fond, s.pWindow->style->fg_gc[GTK_WIDGET_STATE(s.pWindow)], s.pixbuf_fond, 0, 0, 0, 0,
gdk_pixbuf_get_width(s.pixbuf_fond), gdk_pixbuf_get_height(s.pixbuf_fond),
gdk_visual_get_system()->depth, 0, 0);
g_object_unref(s.pixbuf_fond);
}
g_signal_connect(G_OBJECT(s.pWindow), "realize", G_CALLBACK(fond_ecran_set), &s);
g_signal_connect(G_OBJECT(s.pWindow), "expose-event", G_CALLBACK(fond_ecran_expose), &s);
g_signal_connect(G_OBJECT(s.pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(G_OBJECT(s.pWindow), "delete_event", G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(s.pWindow);
gtk_main();
return (0);
}
donc je ne sais pas comment rendre transparent le widget text_view
merciiiii
Dernière modification par Yvesall (Le 26/07/2007, à 10:44)
Hors ligne
#2 Le 27/07/2007, à 09:49
- Yvesall
Re : GTK widget transparent
svp ?
Hors ligne
#3 Le 27/07/2007, à 11:21
- Nicolas2b
Re : GTK widget transparent
essaye de dessiner le fond avec cairo ( cairographics.org), puis d'ajouter ton widget
Ubuntu Gutsy sur ASUS A6JA Q016H
2 Go de RAM
ATI X1600
Core Duo 1,8 GHz
Hors ligne
Pages : 1