mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-09 05:28:25 +02:00
69 lines
1.6 KiB
ObjectPascal
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.
|
|
|