/
Widget.pm6
135 lines (112 loc) · 2.91 KB
/
Widget.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
use v6;
use NativeCall;
use GTK::Simple::Common;
use GTK::Simple::GDK;
use GTK::Simple::Raw;
unit role GTK::Simple::Widget;
has $!gtk_widget;
has $!deleted_supply;
multi method WIDGET() {
$!gtk_widget
}
multi method WIDGET($gtk-widget) {
$!gtk_widget = $gtk-widget;
}
method WINDOW() {
my $result = gtk_widget_get_window($!gtk_widget);
$result;
}
method sensitive()
returns Bool
is gtk-property(>k_widget_get_sensitive, >k_widget_set_sensitive)
{ * }
method tooltip-text()
returns Str
is gtk-property(>k_widget_get_tooltip_text, >k_widget_set_tooltip_text)
{ * }
method no-show-all()
returns Bool
is gtk-property(>k_widget_get_no_show_all, >k_widget_set_no_show_all)
{ * }
method events {
my $window = self.WINDOW;
my class GdkEventMaskWrapper {
method set(*@events) {
my $mask = gdk_window_get_events($window);
$mask +|= [+|] @events;
gdk_window_set_events($window, $mask)
}
method get {
my int32 $mask = gdk_window_get_events($window);
return do for EVENT_MASK::.values {
if $mask +& +$_ {
$_
}
}
}
method clear {
gdk_window_set_events($window, 0);
}
}
GdkEventMaskWrapper.new
}
method signal-supply(Str $name) {
my $s = Supplier.new;
g_signal_connect_wd($!gtk_widget, $name,
-> $widget, $event {
$s.emit(($widget, $event));
CATCH { default { note "in signal supply for $name:"; note $_; } }
},
OpaquePointer, 0);
$s.Supply;
}
method signal_supply(Str $name) {
DEPRECATED('signal-supply',Any,'0.3.2');
self.signal-supply($name);
}
method size-request(Cool $width, Cool $height) {
gtk_widget_set_size_request($!gtk_widget, $width.Int, $height.Int);
}
method size_request(Cool $width, Cool $height) {
DEPRECATED('size-request',Any,'0.3.2');
self.size-request($width, $height);
}
method width() {
gtk_widget_get_allocated_width($!gtk_widget);
}
method height() {
gtk_widget_get_allocated_height($!gtk_widget);
}
method queue-draw() {
gtk_widget_queue_draw($!gtk_widget);
}
method queue_draw() {
DEPRECATED('queue-draw',Any,'0.3.2');
self.queue-draw();
}
method destroy() {
gtk_widget_destroy($!gtk_widget);
}
method show() {
gtk_widget_show($!gtk_widget);
}
method hide() {
gtk_widget_hide($!gtk_widget);
}
# All widgets get the 'delete-event'
#| Tap this supply to react to the window being closed
method deleted() {
$!deleted_supply //= do {
my $s = Supplier.new;
g_signal_connect_wd($!gtk_widget, "delete-event",
-> $, $ {
$s.emit(self);
CATCH { default { note $_; } }
},
OpaquePointer, 0);
$s.Supply;
}
}
method show-all() {
gtk_widget_show_all($!gtk_widget);
}