File: eventhandler.pir

package info (click to toggle)
parrot 6.6.0-1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 25,164 kB
  • ctags: 16,050
  • sloc: ansic: 110,715; perl: 94,382; yacc: 1,911; lex: 1,529; lisp: 1,163; cpp: 782; python: 646; ruby: 335; sh: 140; makefile: 129; cs: 49; asm: 30
file content (154 lines) | stat: -rw-r--r-- 2,459 bytes parent folder | download
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# Copyright (C) 2001-2012, Parrot Foundation.

=head1 NAME

eventhandler.pir - a minesweeper event handler

=head1 SYNOPSIS

    $P0 = new ['SDL'; 'Event']

    $P1 = new "Mines::EventHandler"

    $P0."process_events"( 0.1, $P1, field )

=head1 DESCRIPTION

This is a simple SDL event handler class.

=cut

.namespace ["Mines::EventHandler"]

.sub __onload :load

    $P0 = get_class "Mines::EventHandler"
    unless null $P0 goto END

    newclass $P0, "Mines::EventHandler"

END:

.end

=head1 METHODS

=over 4

=item mouse_button_down( event, field )

Handles mouse click events.
Reveals a field or sets a flag.

=cut

.sub mouse_button_down :method
    .param pmc event
    .param pmc field

    event = event.'event'( 'MouseButton' )

    .local int state
    .local int x
    .local int y

    state = event["state"]

    # SDL_BUTTON_LEFT
    if state != 1 goto DONE
    x = event["x"]
    y = event["y"]
    $I0 = field."mark"( x, y )
    if $I0 goto DONE
    field."click"( x, y, 1 )
DONE:
.end

=item mouse_motion( event, field )

Handles mouse click events.
Reveals a field or sets a flag.

=cut

.sub mouse_motion :method
    .param pmc event
    .param pmc field

    event = event.'event'( 'MouseMotion' )

    .local int state
    .local int x
    .local int y

    state = event["state"]

    # SDL_BUTTON_LEFT
    if state != 1 goto DONE
    x = event["x"]
    y = event["y"]
    $I0 = field."mark"( x, y )
    field."click"( x, y, 1 )
    branch EXIT
DONE:
    field."click"( x, y, 0 )
EXIT:
.end

=item mouse_button_up( event, field )

Handles mouse click events.
Reveals a field or sets a flag.

=cut

.sub mouse_button_up :method
    .param pmc event
    .param pmc field

    event = event.'event'( 'MouseButton' )

    .local int state
    .local int x
    .local int y
    .local int ret

    state = event["state"]
    x = event["x"]
    y = event["y"]

    # SDL_BUTTON_LEFT
    if state == 1 goto REVEAL
    # SDL_BUTTON_RIGHT
    if state == 3 goto SETFLAG
    branch DONE

REVEAL:
    ret = field."reveal"( x, y )
    branch DONE

SETFLAG:
    ret = field."setFlag"( x, y )

DONE:
    if ret goto EXIT
    field."click"( x, y, 0 )

EXIT:
.end

=back

=head1 AUTHOR

Jens Rieks E<lt>parrot at jensbeimsurfen dot deE<gt> is the author
and maintainer.
Please send patches and suggestions to the Perl 6 Internals mailing list.

=cut

# Local Variables:
#   mode: pir
#   fill-column: 100
# End:
# vim: expandtab shiftwidth=4 ft=pir: