/
TextView.pm6
71 lines (60 loc) · 1.7 KB
/
TextView.pm6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
use NativeCall;
use GTK::Simple::Raw :text-view, :DEFAULT;
use GTK::Simple::Common;
use GTK::Simple::Widget;
unit class GTK::Simple::TextView does GTK::Simple::Widget;
has $!buffer;
submethod BUILD() {
$!gtk_widget = gtk_text_view_new();
$!buffer = gtk_text_view_get_buffer($!gtk_widget);
}
# this one can't use the trait for the time being as
# the functions need an additional argument.
method text() {
Proxy.new:
FETCH => {
gtk_text_buffer_get_text($!buffer, self!start-iter(),
self!end-iter(), 1)
},
STORE => -> \c, \text {
gtk_text_buffer_set_text($!buffer, text.Str, -1);
}
}
method !start-iter() {
my $iter_mem = CArray[int32].new;
$iter_mem[31] = 0; # Just need a blob of memory.
gtk_text_buffer_get_start_iter($!buffer, $iter_mem);
$iter_mem
}
method !end-iter() {
my $iter_mem = CArray[int32].new;
$iter_mem[16] = 0;
gtk_text_buffer_get_end_iter($!buffer, $iter_mem);
$iter_mem
}
has $!changed_supply;
method changed() {
$!changed_supply //= do {
my $s = Supplier.new;
g_signal_connect_wd(
$!buffer, "changed",
-> $, $ {
$s.emit(self);
CATCH { default { note $_; } }
},
OpaquePointer, 0);
$s.Supply;
}
}
method editable()
returns Bool
is gtk-property(>k_text_view_get_editable, >k_text_view_set_editable)
{ * }
method cursor-visible()
returns Bool
is gtk-property(>k_text_view_get_cursor_visible, >k_text_view_set_cursor_visible)
{ * }
method monospace()
returns Bool
is gtk-property(>k_text_view_get_monospace, >k_text_view_set_monospace)
{ * }