Window creation/X11: Difference between revisions

Perl 6 entry
m (Omited Erlang)
(Perl 6 entry)
Line 411:
{{omit from|TI-83 BASIC}} {{omit from|TI-89 BASIC}} <!-- Does not have a local X server or network access. -->
{{omit from|PureBasic}}
 
=={{header|Perl 6}}==
{{trans|C}}
 
See in XEvent code for a manual set up to make depending on the number of bits of your machine.
 
<lang perl6>use NativeCall;
 
class Display is repr('CStruct') {}
class GC is repr('CStruct') {}
class XEvent is repr('CStruct') {
has int32 $.type; # for 32 bits machine
#has int $.type; # for 64 bits machine
method init { $!type = 0 }
}
 
sub XOpenDisplay(Str $name = ':0') returns Display is native('libX11') { * }
sub XDefaultScreen(Display $) returns int is native('libX11') { * }
sub XRootWindow(Display $, int $screen_number) returns int is native('libX11') { * }
sub XBlackPixel(Display $, int $screen_number) returns int is native('libX11') { * }
sub XWhitePixel(Display $, int $screen_number) returns int is native('libX11') { * }
sub XCreateSimpleWindow(
Display $, int $parent_window, int $x, int $y,
int $width, int $height, int $border_width,
int $border, int $background
) returns int is native('libX11') { * }
sub XMapWindow(Display $, int $window) is native('libX11') { * }
sub XSelectInput(Display $, int $window, int $mask) is native('libX11') { * }
sub XFillRectangle(
Display $,
int $window,
GC $,
int $x, int $y,
int $width, int $height
) is native('libX11') { * }
sub XDrawString(
Display $,
int $window,
GC $,
int $x, int $y,
Str $,
int $str_length
) is native('libX11') { * }
sub XDefaultGC(Display $, int $screen) returns GC is native('libX11') { * }
 
sub XNextEvent(Display $, XEvent $e) is native('libX11') { * }
 
sub XCloseDisplay(Display $) is native('libX11') { * }
 
my Display $display = XOpenDisplay()
or die "Can not open display";
 
my int $screen = XDefaultScreen($display);
my int $window = XCreateSimpleWindow(
$display,
XRootWindow($display, $screen),
10, 10, 100, 100, 1,
XBlackPixel($display, $screen), XWhitePixel($display, $screen)
);
XSelectInput($display, $window, 1 +< 15 +| 1);
XMapWindow($display, $window);
 
my Str $msg = 'Hello, World!';
my XEvent $e .= new; $e.init;
loop {
XNextEvent($display, $e);
note $e.perl;
if $e.type == 12 {
XFillRectangle($display, $window, XDefaultGC($display, $screen), 20, 20, 10, 10);
XDrawString($display, $window, XDefaultGC($display, $screen), 10, 50, "Hello, World!", 13);
}
elsif $e.type == 2 {
last;
}
}
XCloseDisplay($display);
</lang>
 
=={{header|Perl}}==
1,934

edits