RE: The Window expose-event with gtk_window_resize() problem:



Hi Owen:
Set_double_buffered will bring another problem. If I put an label in the
window, when other windows covers this window and move away, the label
will disappear!

Please try the following code.
//----------------------------------------------------------------------
----
#include "gtk/gtk.h"
#include "stdio.h"

static gboolean expose(GtkWidget * widget, GdkEvent *event, gpointer
data)
{
        int x,y,w,h;
        x=y=0;
        w=widget->allocation.width;
        h=widget->allocation.height;
        
fprintf(stderr,"Debug:%s,%d:expose:wid:%d,hi:%d,\n",__FILE__,__LINE__,w,
h);

        gdk_window_clear(widget->window);// clear all this window;
        
gdk_draw_rectangle(widget->window,(widget->style->black_gc),false,5,5,w-
10,h-10);
        return FALSE;
}
static gboolean press(GtkWidget * widget, GdkEvent *event, gpointer
data)
{
        
gtk_window_resize(GTK_WINDOW(widget),widget->allocation.width+20,widget-
allocation.height+20);
//
gdk_window_resize(widget->window,widget->allocation.width+20,widget->all
ocation.height+20);
        return FALSE;
}

int main( int   argc, char *argv[] )
{
        GtkWidget *window;
        GtkWidget *lbl;
        gtk_init (&argc, &argv);
        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_widget_set_app_paintable(window, TRUE);
        gtk_widget_set_double_buffered (window,false);
        gtk_widget_set_events(window,GDK_BUTTON_PRESS_MASK|
GDK_EXPOSURE_MASK);
    g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK
(gtk_main_quit), NULL);
        
g_signal_connect(G_OBJECT(window),"expose-event",G_CALLBACK(expose),NULL
);
        g_signal_connect(G_OBJECT(window), "button_press_event",
G_CALLBACK(press), NULL);
        gtk_container_set_border_width(GTK_CONTAINER(window),40);
        lbl=gtk_label_new("this is a label");
        gtk_widget_set_double_buffered (lbl,false);
        gtk_container_add(GTK_CONTAINER(window),lbl);


        gtk_widget_show_all(window);
        gtk_main ();
        return 0;

}
//----------------------------------------------------------------------
--

Thanks.
Tom.




-----Original Message-----
From: Owen Taylor [mailto:otaylor redhat com]
Sent: Friday, July 02, 2004 3:25 PM
To: Jan-Marek Glogowski
Cc: Tom Liu; gtk-app-devel-list gnome org
Subject: RE: The Window expose-event with gtk_window_resize() problem:

On Sat, 2004-07-03 at 01:04, Jan-Marek Glogowski wrote:
Hi

I think there might be a problem in the "double buffering" code. If
you
set

gtk_widget_set_double_buffered( window, FALSE );

you get single exposures.

What's a single exposure?

set_double_buffered (widget, FALSE) makes that widget *not*
double buffered. widgets are double buffered by default.

                                              Owen




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]