Gtk2
view release on metacpan or search on metacpan
xs/GdkEvent.xs view on Meta::CPAN
=for apidoc Gtk2::Gdk::Event::state __hide__
=cut
=for apidoc
=for signature $modifiertype = $event->get_state
=for signature $modifiertype = $event->state
=for arg ... (hide)
Get I<$event>'s state. Croaks if that event type doesn't have a state.
=cut
GdkModifierType
gdk_event_get_state (event, ...)
GdkEvent *event
ALIAS:
Gtk2::Gdk::Event::state = 1
Gtk2::Gdk::Event::set_state = 2
CODE:
if (ix == 0 && items != 1)
croak ("Usage: Gtk2::Gdk::Event::get_state (event)");
if (ix == 2 && items != 2)
croak ("Usage: Gtk2::Gdk::Event::set_state (event, newstate)");
if (items == 2 || ix == 2) {
/* set; return old value. */
if (!gdk_event_get_state (event, &RETVAL)) {
/* Use pass_unknown to prevent getting the rather
* unhelpful "invalid enum value" exception here for
* events added in newer gdks than that for which we
* were built. If we're going to throw an exception,
* it should at least be somewhat meaningful. */
SV * s = gperl_convert_back_enum_pass_unknown
(GDK_TYPE_EVENT_TYPE, event->type);
croak ("events of type %s have no state member",
SvPV_nolen (s));
}
gtk2perl_gdk_event_set_state (event,
SvGdkModifierType (ST (1)));
} else {
/* just get */
if (!gdk_event_get_state (event, &RETVAL))
XSRETURN_UNDEF;
}
OUTPUT:
RETVAL
=for apidoc Gtk2::Gdk::Event::get_coords
=for signature ($x, $y) = $event->get_coords
=cut
=for apidoc Gtk2::Gdk::Event::coords
=for signature ($x, $y) = $event->coords
=cut
## gboolean gdk_event_get_coords (GdkEvent *event, gdouble *x_win, gdouble *y_win)
void
gdk_event_get_coords (event)
GdkEvent *event
ALIAS:
Gtk2::Gdk::Event::coords = 1
PREINIT:
gdouble x;
gdouble y;
PPCODE:
if (!gdk_event_get_coords (event, &x, &y))
XSRETURN_EMPTY;
PERL_UNUSED_VAR (ix);
EXTEND (SP, 2);
PUSHs (sv_2mortal (newSVnv (x)));
PUSHs (sv_2mortal (newSVnv (y)));
=for apidoc Gtk2::Gdk::Event::get_root_coords
=for signature ($x_root, $y_root) = $event->get_root_coords
=cut
=for apidoc Gtk2::Gdk::Event::root_coords
=for signature ($x_root, $y_root) = $event->root_coords
=cut
=for apidoc Gtk2::Gdk::Event::x_root
=for signature integer = $event->x_root
=cut
=for apidoc Gtk2::Gdk::Event::y_root
=for signature integer = $event->y_root
=cut
## gboolean gdk_event_get_root_coords (GdkEvent *event, gdouble *x_root, gdouble *y_root)
void
gdk_event_get_root_coords (event)
GdkEvent *event
ALIAS:
Gtk2::Gdk::Event::root_coords = 1
Gtk2::Gdk::Event::x_root = 2
Gtk2::Gdk::Event::y_root = 3
PREINIT:
gdouble x_root;
gdouble y_root;
PPCODE:
if (!gdk_event_get_root_coords (event, &x_root, &y_root))
XSRETURN_EMPTY;
switch (ix) {
case 2: /* x */
PUSHs (sv_2mortal (newSVnv (x_root)));
break;
case 3: /* y */
PUSHs (sv_2mortal (newSVnv (y_root)));
break;
default:
EXTEND (SP, 2);
PUSHs (sv_2mortal (newSVnv (x_root)));
PUSHs (sv_2mortal (newSVnv (y_root)));
}
## gboolean gdk_event_get_axis (GdkEvent *event, GdkAxisUse axis_use, gdouble *value)
gdouble
gdk_event_get_axis (event, axis_use)
GdkEvent *event
GdkAxisUse axis_use
ALIAS:
Gtk2::Gdk::Event::axis = 1
CODE:
PERL_UNUSED_VAR (ix);
if (!gdk_event_get_axis (event, axis_use, &RETVAL))
XSRETURN_UNDEF;
OUTPUT:
RETVAL
## void gdk_event_handler_set (GdkEventFunc func, gpointer data, GDestroyNotify notify)
=for apidoc
=for arg func (subroutine) function to get called for each event.
Set the function that handles all events from GDK. GTK+ uses this to
dispatch events, and as such this is rarely of use to applications,
unless you are implementing completely custom event dispatching (unlikely)
or preprocess events somehow and then pass them on to
C<Gtk2::main_do_event>. As a special case, if I<func> is undef,
we "reset" the handler by passing the actual C function gtk_main_do_event
to GDK, to bypass the Perl marshaling (and take things back up to full
speed).
=cut
void
gdk_event_handler_set (class, func, data=NULL)
SV * func
SV * data
PREINIT:
GPerlCallback *callback;
GType params[1];
CODE:
params[0] = GDK_TYPE_EVENT;
if (gperl_sv_is_defined (func)) {
callback = gperl_callback_new (func, data,
G_N_ELEMENTS (params),
params, 0);
gdk_event_handler_set (gtk2perl_event_func,
callback,
(GDestroyNotify) gperl_callback_destroy);
} else {
/* reset to gtk+'s event handler. */
xs/GdkEvent.xs view on Meta::CPAN
#struct _GdkEventClient
#{
#// GdkEventType type; <- GdkEventAny
#// GdkWindow *window; <- GdkEventAny
#// gint8 send_event; <- GdkEventAny
# GdkAtom message_type;
# gushort data_format;
# union {
# char b[20];
# short s[10];
# long l[5];
# } data;
#};
GdkAtom
message_type (GdkEvent * eventclient, GdkAtom newvalue=0)
CODE:
RETVAL = eventclient->client.message_type;
if (items == 2)
eventclient->client.message_type = newvalue;
OUTPUT:
RETVAL
=for apidoc
This should be set to either $Gtk2::Gdk::CHARS, $Gtk2::Gdk::SHORTS, or
$Gtk2::Gdk::LONGS. See I<data> for a full explanation.
=cut
gushort
data_format (GdkEvent * eventclient, gushort newvalue=0)
CODE:
RETVAL = eventclient->client.data_format;
if (items == 2)
eventclient->client.data_format = newvalue;
OUTPUT:
RETVAL
=for apidoc
=for signature old_string = $eventclient->data (string)
=for signature old_list = $eventclient->data (list of ten shorts)
=for signature old_list = $eventclient->data (list of five longs)
Depending on the value of I<data_format>, I<data> takes one of three different
kinds of values:
+-------------------+-----------------------+
| data_format | data |
+-------------------+-----------------------+
| Gtk2::Gdk::CHARS | a string of length 20 |
| Gtk2::Gdk::SHORTS | a list of ten shorts |
| Gtk2::Gdk::LONGS | a list of five longs |
+-------------------+-----------------------+
=cut
void
data (GdkEvent * eventclient, ...)
PREINIT:
int i, first_index = 1;
PPCODE:
switch (eventclient->client.data_format) {
case 8: {
if (items == first_index + 1) {
char *data = SvPV_nolen (ST (first_index));
char old[20];
for (i = 0; i < 20; i++) {
old[i] = eventclient->client.data.b[i];
eventclient->client.data.b[i] = data[i];
}
XPUSHs (sv_2mortal (newSVpv (old, 20)));
} else {
XPUSHs (sv_2mortal (newSVpv (eventclient->client.data.b, 20)));
}
break;
}
case 16: {
if (items == first_index + 10) {
short old[10];
for (i = first_index; i < items; i++) {
old[i - first_index] = eventclient->client.data.s[i - first_index];
eventclient->client.data.s[i - first_index] = (gint16) SvIV (ST (i));
}
for (i = 0; i < 10; i++)
XPUSHs (sv_2mortal (newSViv (old[i])));
} else {
for (i = 0; i < 10; i++)
XPUSHs (sv_2mortal (newSViv (eventclient->client.data.s[i])));
}
break;
}
case 32: {
if (items == first_index + 5) {
long old[5];
for (i = first_index; i < items; i++) {
old[i - first_index] = eventclient->client.data.l[i - first_index];
eventclient->client.data.l[i - first_index] = SvIV (ST (i));
}
for (i = 0; i < 5; i++)
XPUSHs (sv_2mortal (newSViv (old[i])));
} else {
for (i = 0; i < 5; i++)
XPUSHs (sv_2mortal (newSViv (eventclient->client.data.l[i])));
}
break;
}
default:
croak ("Illegal format value %d used; should be either 8, 16 or 32",
eventclient->client.data_format);
}
( run in 1.286 second using v1.01-cache-2.11-cpan-5511b514fd6 )