Window creation/X11: Difference between revisions

→‎{{header|Perl 6}}: Minimal changes to make runnable
No edit summary
(→‎{{header|Perl 6}}: Minimal changes to make runnable)
Line 824:
=={{header|Perl 6}}==
{{trans|C}}
{{broken|Perl 6}}
 
There is not yet a X11 library in Perl 6 but we can write the minimal C mappings for this task.
Notice that the mapping for XEvent requires a manual set up which depends on the number of bits of your machine. This is due to a current bug in NativeCall on MoarVM.
 
<lang perl6>use NativeCall;
 
class Display is repr('CStruct') {}
has int32 $!screen;
class GC is repr('CStruct') {}
has int32 $!window;
}
class GC is repr('CStruct') {}
has int32 $!context;
}
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('libX11X11') { * }
sub XDefaultScreen(Display $) returns intint32 is native('libX11X11') { * }
sub XRootWindow(Display $, intint32 $screen_number) returns intint32 is native('libX11X11') { * }
sub XBlackPixel(Display $, intint32 $screen_number) returns intint32 is native('libX11X11') { * }
sub XWhitePixel(Display $, intint32 $screen_number) returns intint32 is native('libX11X11') { * }
sub XCreateSimpleWindow(
Display $, intint32 $parent_window, intint32 $x, intint32 $y,
intint32 $width, intint32 $height, intint32 $border_width,
intint32 $border, intint32 $background
) returns intint32 is native('libX11X11') { * }
sub XMapWindow(Display $, intint32 $window) is native('libX11X11') { * }
sub XSelectInput(Display $, intint32 $window, intint32 $mask) is native('libX11X11') { * }
sub XFillRectangle(
Display $, intint32 $window, GC $, intint32 $x, intint32 $y, intint32 $width, intint32 $height
) is native('libX11X11') { * }
sub XDrawString(
Display $, intint32 $window, GC $, intint32 $x, intint32 $y, Str $, intint32 $str_length
) is native('libX11X11') { * }
sub XDefaultGC(Display $, intint32 $screen) returns GC is native('libX11X11') { * }
sub XNextEvent(Display $, XEvent $e) is native('libX11X11') { * }
sub XCloseDisplay(Display $) is native('libX11X11') { * }
 
my Display $display = XOpenDisplay()
Line 879 ⟶ 881:
XNextEvent($display, $e);
if $e.type == 12 {
XFillRectangle($display, $window, XDefaultGC($display, $screen), 20, 20, 10, 10);
XDrawString($display, $window, XDefaultGC($display, $screen), 10, 50, $msg, my int $ = $msg.chars);
}
elsif $e.type == 2 {
last;
}
}
10,327

edits