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:
|