Hi all: I have some questions when I using the drawable area with the gtk+2.0. First, I'm building a data analyzer under thr Linux, so there is a process to generate the data and my analyzer display the data. My idea is to use a drawable area(I use the GtkDrawingArea) and get the pix buffer of it by the gdk_pixbuf_get_from_drawable(), then my background program can fill the pix buffer pix by pix.
Question 1: anytime I fill to the pixbuf, it will rendering the drawing area immediately? Question 2: the following code segment is what I done until now...what should I do? Thanks. Dave. this function put_pixel is referenced from the GDK Reference Manual 34 void 35 put_pixel (GdkPixbuf *pixbuf, int x, int y, guchar red, guchar green, guchar blue, guchar alpha) 36 { 37 int width, height, rowstride, n_channels; 38 guchar *pixels, *p; 39 40 n_channels = gdk_pixbuf_get_n_channels (pixbuf); 41 g_assert (gdk_pixbuf_get_colorspace (pixbuf) == GDK_COLORSPACE_RGB); 42 g_assert (gdk_pixbuf_get_bits_per_sample (pixbuf) == 8); 43 g_assert (gdk_pixbuf_get_has_alpha (pixbuf)); 44 g_assert (n_channels == 4); 45 46 width = gdk_pixbuf_get_width (pixbuf); 47 height = gdk_pixbuf_get_height (pixbuf); 48 49 g_assert (x >= 0 && x < width); 50 g_assert (y >= 0 && y < height); 51 52 rowstride = gdk_pixbuf_get_rowstride (pixbuf); 53 pixels = gdk_pixbuf_get_pixels (pixbuf); 54 55 p = pixels + y * rowstride + x * n_channels; 56 p[0] = red; 57 p[1] = green; 58 p[2] = blue; 59 p[3] = alpha; 60 } In the callbacks.c function on_drawingarea_virtual_LCD_configure_event() is the callback function of my drawing area. 151 gboolean 152 on_drawingarea_virtual_LCD_configure_event (GtkWidget *widget, 153 GdkEventConfigure *event) 154 { 155 gint x,y; 156 GdkPixbuf* virtual_LCD_buf; 157 GdkRectangle rect; 158 159 160 if(virtual_LCD_pixmap) 161 g_object_unref(virtual_LCD_pixmap); 162 163 virtual_LCD_pixmap = gdk_pixmap_new(widget->window, 164 widget->allocation.width, 165 widget->allocation.height, 166 -1); 167 168 gdk_window_get_origin (widget->window, &x, &y); 169 rect.x = x; 170 rect.y = y; 171 gdk_drawable_get_size (GDK_DRAWABLE (widget->window), &rect.width, 172 &rect.height); 173 174 virtual_LCD_buf = gdk_pixbuf_get_from_drawable(NULL, 175 virtual_LCD_pixmap, 176 gdk_colormap_get_system(), 177 rect.x-x, 178 rect.y-y, 179 0, 180 0, 181 rect.width, 182 rect.height 183 ); 184 gint i=0; 185 // I want to test the put_pixel when the drawing are establish. 186 for(i=0;i<100;i++){ 187 put_pixel (virtual_LCD_buf, i, i, 255-i,255-i,255-(2*i),0); 188 189 190 } -- System on Chip Design Lab. Dept. of Computer Science and Information Engineering, National Chung Cheng University E-mail : [EMAIL PROTECTED]
_______________________________________________ gtk-list mailing list gtk-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-list