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



Hi, 
I post the question week ago, still can't find the answer.
Can some one take a look and help me out this problem? I need this to be
done.
Thanks.
Tom.

-----Original Message-----
From: Tom Liu [mailto:tom liu flextrade com]
Sent: Tuesday, July 06, 2004 11:55 AM
To: 'Owen Taylor'; 'Jan-Marek Glogowski'
Cc: 'gtk-app-devel-list gnome org'
Subject: RE: The Window expose-event with gtk_window_resize() problem:

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-
allocation.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]