void TouchInputHandler::actionStart(GdkEvent* event) { XOJ_CHECK_TYPE(TouchInputHandler); gdk_event_get_root_coords(event, &this->lastPosX, &this->lastPosY); }
void TouchInputHandler::actionMotion(GdkEvent* event) { XOJ_CHECK_TYPE(TouchInputHandler); // Manually scroll when gesture is active if (this->inputContext->getView()->getZoomGestureHandler()->isGestureActive()) { gdouble currentPosX, currentPosY; gdk_event_get_root_coords(event, ¤tPosX, ¤tPosY); double offsetX = currentPosX - this->lastPosX; double offsetY = currentPosY - this->lastPosY; this->lastPosX = currentPosX; this->lastPosY = currentPosY; ZoomControl* zoomControl = this->inputContext->getView()->getControl()->getZoomControl(); std::tuple<double, double> pos = zoomControl->getScrollPositionAfterZoom(); double newX = std::get<0>(pos) - offsetX; double newY = std::get<1>(pos) - offsetY; zoomControl->setScrollPositionAfterZoom(newX, newY); } }
WebMouseEvent WebEventFactory::createWebMouseEvent(const GdkEvent* event, int currentClickCount) { double x, y, xRoot, yRoot; gdk_event_get_coords(event, &x, &y); gdk_event_get_root_coords(event, &xRoot, &yRoot); WebEvent::Type type = static_cast<WebEvent::Type>(0); switch (event->type) { case GDK_MOTION_NOTIFY: type = WebEvent::MouseMove; break; case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: type = WebEvent::MouseDown; break; case GDK_BUTTON_RELEASE: type = WebEvent::MouseUp; break; default : ASSERT_NOT_REACHED(); } return WebMouseEvent(type, buttonForEvent(event), IntPoint(x, y), IntPoint(xRoot, yRoot), 0 /* deltaX */, 0 /* deltaY */, 0 /* deltaZ */, currentClickCount, modifiersForEvent(event), gdk_event_get_time(event)); }
static VALUE gdkevent_get_root_coords(VALUE self) { gdouble x_root, y_root; gboolean ret = gdk_event_get_root_coords(RVAL2GDKEVENT(self), &x_root, &y_root); return ret ? rb_ary_new3(2, rb_float_new(x_root), rb_float_new(y_root)) : Qnil; }
WebWheelEvent WebEventFactory::createWebWheelEvent(const GdkEvent* event) { double x, y, xRoot, yRoot; gdk_event_get_coords(event, &x, &y); gdk_event_get_root_coords(event, &xRoot, &yRoot); FloatSize wheelTicks; switch (event->scroll.direction) { case GDK_SCROLL_UP: wheelTicks = FloatSize(0, 1); break; case GDK_SCROLL_DOWN: wheelTicks = FloatSize(0, -1); break; case GDK_SCROLL_LEFT: wheelTicks = FloatSize(1, 0); break; case GDK_SCROLL_RIGHT: wheelTicks = FloatSize(-1, 0); break; #if GTK_CHECK_VERSION(3, 3, 18) case GDK_SCROLL_SMOOTH: { double deltaX, deltaY; gdk_event_get_scroll_deltas(event, &deltaX, &deltaY); wheelTicks = FloatSize(-deltaX, -deltaY); } break; #endif default: ASSERT_NOT_REACHED(); } // FIXME: [GTK] Add a setting to change the pixels per line used for scrolling // https://bugs.webkit.org/show_bug.cgi?id=54826 float step = static_cast<float>(Scrollbar::pixelsPerLineStep()); FloatSize delta(wheelTicks.width() * step, wheelTicks.height() * step); return WebWheelEvent(WebEvent::Wheel, IntPoint(x, y), IntPoint(xRoot, yRoot), delta, wheelTicks, WebWheelEvent::ScrollByPixelWheelEvent, modifiersForEvent(event), gdk_event_get_time(event)); }
static void move_item_cb (GtkAction *action, EggEditableToolbar *etoolbar) { GtkWidget *toolitem = gtk_widget_get_ancestor (egg_editable_toolbar_get_selected (etoolbar), GTK_TYPE_TOOL_ITEM); GtkTargetList *list = gtk_target_list_new (dest_drag_types, G_N_ELEMENTS (dest_drag_types)); GdkEvent *realevent = gtk_get_current_event(); GdkEventMotion event; event.type = GDK_MOTION_NOTIFY; event.window = realevent->any.window; event.send_event = FALSE; event.axes = NULL; event.time = gdk_event_get_time (realevent); gdk_event_get_state (realevent, &event.state); gdk_event_get_coords (realevent, &event.x, &event.y); gdk_event_get_root_coords (realevent, &event.x_root, &event.y_root); gtk_drag_begin (toolitem, list, GDK_ACTION_MOVE, 1, (GdkEvent *)&event); gtk_target_list_unref (list); }
void _gtk_tooltip_handle_event (GdkEvent *event) { gint x, y; gboolean return_value = FALSE; GtkWidget *has_tooltip_widget = NULL; GdkDisplay *display; GtkTooltip *current_tooltip; if (!tooltips_enabled (event->any.window)) return; /* Returns coordinates relative to has_tooltip_widget's allocation. */ has_tooltip_widget = find_topmost_widget_coords_from_event (event, &x, &y); display = gdk_drawable_get_display (event->any.window); current_tooltip = g_object_get_data (G_OBJECT (display), "gdk-display-current-tooltip"); if (current_tooltip) { gtk_tooltip_set_last_window (current_tooltip, event->any.window); gdk_event_get_root_coords (event, ¤t_tooltip->last_x, ¤t_tooltip->last_y); } if (current_tooltip && current_tooltip->keyboard_mode_enabled) { has_tooltip_widget = current_tooltip->keyboard_widget; if (!has_tooltip_widget) return; return_value = gtk_tooltip_run_requery (&has_tooltip_widget, current_tooltip, &x, &y); if (!return_value) gtk_tooltip_hide_tooltip (current_tooltip); else gtk_tooltip_start_delay (display); return; } #ifdef DEBUG_TOOLTIP if (has_tooltip_widget) g_print ("%p (%s) at (%d, %d) %dx%d pointer: (%d, %d)\n", has_tooltip_widget, gtk_widget_get_name (has_tooltip_widget), has_tooltip_widget->allocation.x, has_tooltip_widget->allocation.y, has_tooltip_widget->allocation.width, has_tooltip_widget->allocation.height, x, y); #endif /* DEBUG_TOOLTIP */ /* Always poll for a next motion event */ gdk_event_request_motions (&event->motion); /* Hide the tooltip when there's no new tooltip widget */ if (!has_tooltip_widget) { if (current_tooltip) gtk_tooltip_hide_tooltip (current_tooltip); return; } switch (event->type) { case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: case GDK_KEY_PRESS: case GDK_DRAG_ENTER: case GDK_GRAB_BROKEN: gtk_tooltip_hide_tooltip (current_tooltip); break; case GDK_MOTION_NOTIFY: case GDK_ENTER_NOTIFY: case GDK_LEAVE_NOTIFY: case GDK_SCROLL: if (current_tooltip) { gboolean tip_area_set; GdkRectangle tip_area; gboolean hide_tooltip; tip_area_set = current_tooltip->tip_area_set; tip_area = current_tooltip->tip_area; return_value = gtk_tooltip_run_requery (&has_tooltip_widget, current_tooltip, &x, &y); /* Requested to be hidden? */ hide_tooltip = !return_value; /* Leave notify should override the query function */ hide_tooltip = (event->type == GDK_LEAVE_NOTIFY); /* Is the pointer above another widget now? */ if (GTK_TOOLTIP_VISIBLE (current_tooltip)) hide_tooltip |= has_tooltip_widget != current_tooltip->tooltip_widget; /* Did the pointer move out of the previous "context area"? */ if (tip_area_set) hide_tooltip |= (x <= tip_area.x || x >= tip_area.x + tip_area.width || y <= tip_area.y || y >= tip_area.y + tip_area.height); if (hide_tooltip) gtk_tooltip_hide_tooltip (current_tooltip); else gtk_tooltip_start_delay (display); } else { /* Need a new tooltip for this display */ current_tooltip = g_object_new (GTK_TYPE_TOOLTIP, NULL); g_object_set_data_full (G_OBJECT (display), "gdk-display-current-tooltip", current_tooltip, g_object_unref); g_signal_connect (display, "closed", G_CALLBACK (gtk_tooltip_display_closed), current_tooltip); gtk_tooltip_set_last_window (current_tooltip, event->any.window); gdk_event_get_root_coords (event, ¤t_tooltip->last_x, ¤t_tooltip->last_y); gtk_tooltip_start_delay (display); } break; default: break; } }