lazarus/lcl/interfaces/gtk2/tests/stutter.pas
mattias 684200b7bd gtk2 intf: added example to test paint speed
git-svn-id: trunk@21096 -
2009-08-04 14:51:59 +00:00

69 lines
1.6 KiB
ObjectPascal

program stutter;
{$mode objfpc}{$H+}
uses
Classes, SysUtils, gtk2, gdk2, gdk2pixbuf, glib2;
var
LastCall: TDateTime;
FrameCount: Integer;
function gtkExposeEventAfter(Widget: PGtkWidget; Event : PGDKEventExpose;
Data: gPointer): GBoolean; cdecl;
var
children: PGList;
n: TDateTime;
begin
Result:=false;
inc(FrameCount);
n:=Now;
if (n-LastCall)*86400>1 then begin
writeln('gtkExposeEventAfter ',FrameCount);
FrameCount:=0;
LastCall:=LastCall+(1/86400);
end;
end;
var
GtkWindow: PGtkWidget;
GtkFixed: PGtkWidget;
GtkCheckButton: PGtkWidget;
FixedName: String;
CheckButtonName: String;
begin
FrameCount:=0;
LastCall:=Now;
gtk_init(@ARGC,@ARGV);
GtkWindow:=gtk_window_new(GTK_WINDOW_TOPLEVEL);
GtkFixed := gtk_fixed_new ();
gtk_fixed_set_has_window(PGtkFixed(GtkFixed), True);
FixedName:='GtkFixed';
g_signal_connect_after(PGtkObject(GtkFixed), 'expose-event',
TGTKSignalFunc(@gtkExposeEventAfter), PChar(FixedName));
gtk_container_add (PGtkContainer(GtkWindow), GtkFixed);
GtkCheckButton:=gtk_check_button_new_with_label('Second');
CheckButtonName:='GtkCheckButton';
g_signal_connect_after(PGtkObject(GtkCheckButton), 'expose-event',
TGTKSignalFunc(@gtkExposeEventAfter), PChar(CheckButtonName));
gtk_fixed_put(PGtkFixed(GtkFixed),GtkCheckButton,300,300);
gtk_widget_show_all(GtkWindow);
repeat
// process all gtk messages
gtk_main_iteration_do(True);
// idle
// invalidate
gtk_widget_queue_clear_area(GtkFixed,0,0,1000,1000);
gtk_widget_queue_draw_area(GtkFixed,0,0,1000,1000);
until false;
//gtk_main;
end.