NAME¶
gii_pmove_event - LibGII pointer movement events
SYNOPSIS¶
#include <ggi/events.h>
typedef struct gii_pmove_event {
    COMMON_DATA;
    int32_t  x, y;           /* absolute/relative position   */
    int32_t  z, wheel;
} gii_pmove_event;
 
DESCRIPTION¶
The 
gii_pmove_event structure is used to report change of pointer
  position. Depending on the event type, the values are either absolute or
  relative.
GENERATED EVENTS¶
This structure is used for 
evPtrRelative and 
evPtrAbsolute events.
STRUCTURE MEMBERS¶
The 
gii_pmove_event structure describes pointer (mice, etc.) motion in
  terms of the 
x, 
y, 
z coordinates and the 
wheel
  values of the device. The motion described may be relative (offset from the
  current location) or absolute (a specific location on the 'screen'), depending
  on whether the event is of type 
evPtrRelative or 
evPtrAbsolute,
  respectively.
 
LibGII does not attempt to interpolate or keep track of the 
current
  pointer position. (This is the application's responsibility.) LibGII may also
  report both relative and absolute pointer motion for the same input, which may
  happen when the mouse is being emulated using a keyboard on an input/target
  that is normally reports absolute motion.
EXAMPLES¶
Input handling for applications expecting absolute pointer position:
 
{
    static int mousex,mousey;
    ggiEventPoll(vis, emKey|emPointer, NULL);
    events = ggiEventsQueued(vis, emKey|emPointer);
    while (events--) {
        ggiEventRead(vis, &event, emKey|emPointer);
        switch(event.any.type) {
        case evPtrButtonPress:
                switch(event.pbutton.button) {
                case GII_PBUTTON_FIRST:
                    do_something_as_appropriate(mousex,mousey);
                    break;
                case GII_PBUTTON_SECOND:
                    /* ... */
                }
                break;
        case evPtrButtonRelease:
            /* ... if needed ... */
            break;
        case evPtrAbsolute:
            mousex = event.pmove.x;
            mousey = event.pmove.y;
            break;
        case evPtrRelative:
            mousex += event.pmove.x;
            mousey += event.pmove.y;
            break;
        }
        /* Constrain mouse in any case */
        if (mousex < 0) mousex = 0;
        if (mousey < 0) mousey = 0;
        if (mousex > xmax) mousex = xmax;
        if (mousey > ymax) mousey = ymax;
    } /* while */
}
 
SEE ALSO¶
gii_event(3)