[TT# 1592][t] Improve test for open opcode delegation. All tests in the file pass...
[parrot.git] / examples / nci / xlibtest.nqp
blob31b09fbccb86ac6773b872b463050517a211973c
1 # Copyright (C) 2008, Parrot Foundation.
2 # $Id$
4 =head1 TITLE
6 xlibtest.pl - A test of Xlib.pir usage from nqp
8 =head1 SYNOPSYS
10 This is an initial version, be careful and not expect too much.
12 Compile Xlib.pir to Xlib.pbc before usage:
14     ../../parrot -o Xlib.pbc Xlib.pir
16 To run this file, execute the following command from the
17 current directory:
19     ../../parrot ../../compilers/nqp/nqp.pbc xlibtest.nqp
21 Press any key to exit.
23 =cut
25 PIR q< load_bytecode 'Xlib.pbc' >;
27 my $a := Xlib::DisplayName();
28 say("Display: ", Xlib::DisplayName());
30 my $display := Xlib::OpenDisplay('');
32 say("Default screen: ", $display.DefaultScreen());
34 $display.hello();
36 my $white := $display.WhitePixel(0);
37 my $root := $display.RootWindow();
38 my $window := $display.CreateSimpleWindow($root, 0, 0, 600, 400, 0, 0, $white);
39 $window.StoreName("Hello, nqp");
40 $window.SelectInput(163919);
41 $window.Map();
43 my $event := Xlib::newEvent();
45 my $type := 0;
47 my $x := 0;
48 my $y := 0;
49 my $lastx := 0;
50 my $lasty := 0;
51 my $pressed := 0;
53 my @points;
54 my @lines;
56 while ($type != 17) {
57     $display.NextEvent($event);
58     $type := $event.type();
59     if ($type == 4) {
60         $x := $event.x();
61         $y := $event.y();
62         $window.DrawPoint($x, $y);
63         @points.push($x);
64         @points.push($y);
65     $lastx := $x;
66     $lasty := $y;
67     $pressed := 1;
68     }
69     if ($type == 5) {
70         $pressed := 0;
71     }
72     elsif ($type == 6 && $pressed) {
73         $x := $event.x();
74         $y := $event.y();
75         $window.DrawLine($lastx, $lasty, $x, $y);
76         @lines.push($lastx);
77         @lines.push($lasty);
78         @lines.push($x);
79         @lines.push($y);
80         $lastx := $x;
81         $lasty := $y;
82     }
83     elsif ($type == 2) {
84         $window.Unmap();
85         $window.Destroy();
86     }
87     elsif ($type == 33) {
88         $window.Unmap();
89         $window.Destroy();
90     }
91     elsif $type == 12 {
92         say("Redrawing...");
93         my $i := 0;
94         while ($i < @points) {
95             $window.DrawPoint(@points[$i], @points[$i+1]);
96             $i :=  $i + 2;
97         }
98         $i := 0;
99         while ($i < @lines) {
100             $window.DrawLine(@lines[$i], @lines[$i+1],
101                              @lines[$i+2], @lines[$i+3]);
102             $i := $i + 4;
103         }
104     }
107 $display.Close();
109 say("Bye");
112 # vim: expandtab shiftwidth=4 ft=perl6: