Man Linux: Main Page and Category List

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)