]> mj.ucw.cz Git - anim.git/blob - test0.pl
Added hints.
[anim.git] / test0.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Gtk2 -init;
7 use Cairo;
8
9 my $area = Gtk2::DrawingArea->new();
10 my $cairo;
11 my $xx=0;
12 my $pixmap;
13 my ($pixw, $pixh, $pixd) = (-1, -1, -1);
14 sub draw() {
15         my $win = $area->window;
16         my $alloc = $area->allocation;
17         my $w = $alloc->width;
18         my $h = $alloc->height;
19         my $d = $win->get_depth;
20         # print "Area $w x $h x $d, xx=$xx\n";
21
22         if (!defined($pixmap) || $pixw != $w || $pixh != $h || $pixd != $d) {
23                 $pixmap = Gtk2::Gdk::Pixmap->new($win, $w, $h, $d);
24                 ($pixw, $pixh, $pixd) = ($w, $h, $d);
25                 $cairo = Gtk2::Gdk::Cairo::Context->create($pixmap);
26         }
27
28         $cairo->rectangle(0, 0, $w, $h);
29         $cairo->set_source_rgb(0, 0, 0);
30         $cairo->fill;
31
32         $cairo->rectangle($xx, 10, 40, 40);
33         $cairo->set_source_rgb(0, 0, 1);
34         $cairo->fill;
35
36         #my $gc = Gtk2::Gdk::GC->new($pixmap);
37         #$gc->set_rgb_background(0x000000);
38         #$gc->set_rgb_foreground(0x00ff00);
39         #$pixmap->draw_line($gc, $xx, 0, $w-1, $h-1);
40
41         my $wgc = Gtk2::Gdk::GC->new($win);
42         $win->draw_drawable($wgc, $pixmap, 0, 0, 0, 0, $w, $h);
43
44         $xx+=1;
45 }
46
47 my $timer;
48 $area->signal_connect("expose-event" => sub {
49         draw();
50         if (!defined $timer) {
51                 $timer = Glib::Timeout->add(10, sub { draw(); return 1; });
52         }
53 });
54 $area->set_flags('can-focus');
55 # $area->add_events('key-press-mask');
56 $area->signal_connect('key-press-event' => sub {
57         my ($w, $evt) = @_;
58         my $k = Gtk2::Gdk::keyval_name(0, $evt->keyval);
59         print "Pressed key $k\n";
60         if ($k eq "Escape") {
61                 Gtk2->main_quit;
62         }
63 });
64
65 my $window = Gtk2::Window->new ('toplevel');
66 $window->signal_connect ("delete-event" => sub { Gtk2->main_quit });
67 $window->set_title("Brum");
68 $window->set_wmclass("anim", "Anim");
69 $window->set_default_size(640, 480);
70 $window->add ($area);
71 $window->show_all;
72 $window->fullscreen;
73
74 Gtk2->main;