/** * Copy axes from event */ void InputSequence::copyAxes(GdkEvent* event) { XOJ_CHECK_TYPE(InputSequence); clearAxes(); setAxes((gdouble*)g_memdup(event->motion.axes, sizeof(gdouble) * gdk_device_get_n_axes(device))); }
void on_device_added (GdkDeviceManager *device_manager, GdkDevice *device, gpointer user_data) { GromitData *data = (GromitData *) user_data; GdkInputSource hardware_type = gdk_device_get_source(device); if( hardware_type == GDK_SOURCE_KEYBOARD || gdk_device_get_n_axes(device) < 2) return; if(data->debug) g_printerr("DEBUG: device '%s' added\n", gdk_device_get_name(device)); setup_input_devices(data); }
static VALUE device_get_axis(VALUE self, VALUE rbaxes, VALUE rbuse) { GdkDevice *device = _SELF(self); GdkAxisUse use = RVAL2GENUM(rbuse, GDK_TYPE_AXIS_USE); long n; gdouble *axes = RVAL2GDOUBLES(rbaxes, &n); gint device_n_axes = gdk_device_get_n_axes(device); gdouble value; gboolean found; if (n != device_n_axes) rb_raise(rb_eArgError, "unexpected number of axes: %ld != %d", n, device_n_axes); found = gdk_device_get_axis(device, axes, use, &value); g_free(axes); return found ? DBL2NUM(value) : Qnil; }
void _gdk_device_wintab_translate_axes (GdkDeviceWintab *device_wintab, GdkSurface *window, gdouble *axes, gdouble *x, gdouble *y) { GdkDevice *device; GdkSurface *impl_surface; gint root_x, root_y; gdouble temp_x, temp_y; gint i; device = GDK_DEVICE (device_wintab); impl_surface = _gdk_surface_get_impl_surface (window); temp_x = temp_y = 0; gdk_surface_get_origin (impl_surface, &root_x, &root_y); for (i = 0; i < gdk_device_get_n_axes (device); i++) { GdkAxisUse use; use = gdk_device_get_axis_use (device, i); switch (use) { case GDK_AXIS_X: case GDK_AXIS_Y: if (gdk_device_get_mode (device) == GDK_MODE_SURFACE) _gdk_device_translate_surface_coord (device, window, i, device_wintab->last_axis_data[i], &axes[i]); else { HMONITOR hmonitor; MONITORINFO minfo = {sizeof (MONITORINFO),}; hmonitor = MonitorFromWindow (GDK_SURFACE_HWND (window), MONITOR_DEFAULTTONEAREST); GetMonitorInfo (hmonitor, &minfo); /* XXX: the dimensions from minfo may need to be scaled for HiDPI usage */ _gdk_device_translate_screen_coord (device, window, root_x, root_y, minfo.rcWork.right - minfo.rcWork.left, minfo.rcWork.bottom - minfo.rcWork.top, i, device_wintab->last_axis_data[i], &axes[i]); } if (use == GDK_AXIS_X) temp_x = axes[i]; else if (use == GDK_AXIS_Y) temp_y = axes[i]; break; default: _gdk_device_translate_axis (device, i, device_wintab->last_axis_data[i], &axes[i]); break; } } if (x) *x = temp_x; if (y) *y = temp_y; }
void setup_input_devices (GromitData *data) { /* ungrab all */ release_grab (data, NULL); /* and clear our own device data list */ GHashTableIter it; gpointer value; g_hash_table_iter_init (&it, data->devdatatable); while (g_hash_table_iter_next (&it, NULL, &value)) g_free(value); g_hash_table_remove_all(data->devdatatable); /* get devices */ GdkDeviceManager *device_manager = gdk_display_get_device_manager(data->display); GList *devices, *d; int i = 0; devices = g_list_concat(gdk_device_manager_list_devices (device_manager, GDK_DEVICE_TYPE_MASTER), gdk_device_manager_list_devices (device_manager, GDK_DEVICE_TYPE_SLAVE)); for(d = devices; d; d = d->next) { GdkDevice *device = (GdkDevice *) d->data; /* only enable devices with 2 ore more axes */ if (gdk_device_get_source(device) != GDK_SOURCE_KEYBOARD && gdk_device_get_n_axes(device) >= 2) { gdk_device_set_mode (device, GDK_MODE_SCREEN); GromitDeviceData *devdata; devdata = g_malloc0(sizeof (GromitDeviceData)); devdata->device = device; devdata->index = i; /* get attached keyboard and grab the hotkey */ if (!data->hot_keycode) { g_printerr("ERROR: Grabbing hotkey from attached keyboard " "of '%s' failed, no hotkey defined.\n", gdk_device_get_name(device)); g_free(devdata); continue; } /* if this is a slave device, we need the master */ GdkDevice *kdevice=device; if(gdk_device_get_device_type (device) == GDK_DEVICE_TYPE_SLAVE) kdevice=gdk_device_get_associated_device (device); gint dev_id = -1; g_object_get(kdevice, "device-id", &dev_id, NULL); gint kbd_dev_id = -1; XIDeviceInfo* devinfo; int devicecount = 0; devinfo = XIQueryDevice(GDK_DISPLAY_XDISPLAY(data->display), dev_id, &devicecount); if(devicecount) kbd_dev_id = devinfo->attachment; XIFreeDeviceInfo(devinfo); if(kbd_dev_id != -1) { if(data->debug) g_printerr("DEBUG: Grabbing hotkey from keyboard '%d' .\n", kbd_dev_id); XIEventMask mask; unsigned char bits[4] = {0,0,0,0}; mask.mask = bits; mask.mask_len = sizeof(bits); XISetMask(bits, XI_KeyPress); XISetMask(bits, XI_KeyRelease); XIGrabModifiers modifiers[] = {{XIAnyModifier, 0}}; int nmods = 1; gdk_error_trap_push (); XIGrabKeycode( GDK_DISPLAY_XDISPLAY(data->display), kbd_dev_id, data->hot_keycode, GDK_WINDOW_XID(data->root), GrabModeAsync, GrabModeAsync, True, &mask, nmods, modifiers); XSync(GDK_DISPLAY_XDISPLAY(data->display), False); if(gdk_error_trap_pop()) { g_printerr("ERROR: Grabbing hotkey from keyboard device %d failed.\n", kbd_dev_id); g_free(devdata); continue; } } g_hash_table_insert(data->devdatatable, device, devdata); g_printerr ("Enabled Device %d: \"%s\", (Type: %d)\n", i++, gdk_device_get_name(device), gdk_device_get_source(device)); } } g_printerr ("Now %d enabled devices.\n", g_hash_table_size(data->devdatatable)); }