1 program stutter;
2
3 {$mode objfpc}{$H+}
4
5 uses
6 Classes, SysUtils, gtk2, gdk2, gdk2pixbuf, glib2;
7
8 var
9 LastCall: TDateTime;
10 FrameCount: Integer;
11
gtkExposeEventAfternull12 function gtkExposeEventAfter(Widget: PGtkWidget; Event : PGDKEventExpose;
13 Data: gPointer): GBoolean; cdecl;
14 var
15 children: PGList;
16 n: TDateTime;
17 begin
18 Result:=false;
19 inc(FrameCount);
20 n:=Now;
21 if (n-LastCall)*86400>1 then begin
22 writeln('gtkExposeEventAfter ',FrameCount);
23 FrameCount:=0;
24 LastCall:=LastCall+(1/86400);
25 end;
26 end;
27
28 var
29 GtkWindow: PGtkWidget;
30 GtkFixed: PGtkWidget;
31 GtkCheckButton: PGtkWidget;
32 FixedName: String;
33 CheckButtonName: String;
34 begin
35 FrameCount:=0;
36 LastCall:=Now;
37
38 gtk_init(@ARGC,@ARGV);
39 GtkWindow:=gtk_window_new(GTK_WINDOW_TOPLEVEL);
40
41 GtkFixed := gtk_fixed_new ();
42 gtk_fixed_set_has_window(PGtkFixed(GtkFixed), True);
43 FixedName:='GtkFixed';
44 g_signal_connect_after(PGtkObject(GtkFixed), 'expose-event',
45 TGTKSignalFunc(@gtkExposeEventAfter), PChar(FixedName));
46
47 gtk_container_add (PGtkContainer(GtkWindow), GtkFixed);
48
49 GtkCheckButton:=gtk_check_button_new_with_label('Second');
50 CheckButtonName:='GtkCheckButton';
51 g_signal_connect_after(PGtkObject(GtkCheckButton), 'expose-event',
52 TGTKSignalFunc(@gtkExposeEventAfter), PChar(CheckButtonName));
53 gtk_fixed_put(PGtkFixed(GtkFixed),GtkCheckButton,300,300);
54
55
56 gtk_widget_show_all(GtkWindow);
57
58 repeat
59 // process all gtk messages
60 gtk_main_iteration_do(True);
61 // idle
62 // invalidate
63 gtk_widget_queue_clear_area(GtkFixed,0,0,1000,1000);
64 gtk_widget_queue_draw_area(GtkFixed,0,0,1000,1000);
65 until false;
66 //gtk_main;
67 end.
68
69