Changeset 260817 in webkit
- Timestamp:
- Apr 28, 2020 4:50:39 AM (4 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r260816 r260817 1 2020-04-26 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK4] Add support for scroll events 4 https://bugs.webkit.org/show_bug.cgi?id=211045 5 6 Reviewed by Adrian Perez de Castro. 7 8 Use an event controller to connect to scroll signal and get the GdkEvent. 9 10 * UIProcess/API/gtk/WebKitWebViewBase.cpp: 11 (webkitWebViewBaseHandleWheelEvent): 12 (webkitWebViewBaseScroll): 13 (webkitWebViewBaseConstructed): 14 1 15 2020-04-28 Carlos Garcia Campos <cgarcia@igalia.com> 2 16 -
trunk/Source/WebKit/Shared/NativeWebWheelEvent.h
r260752 r260817 61 61 NativeWebWheelEvent(GdkEvent*); 62 62 NativeWebWheelEvent(GdkEvent*, WebWheelEvent::Phase, WebWheelEvent::Phase momentumPhase); 63 NativeWebWheelEvent(GdkEvent*, const WebCore::IntPoint&); 63 64 #elif USE(LIBWPE) 64 65 NativeWebWheelEvent(struct wpe_input_axis_event*, float deviceScaleFactor, WebWheelEvent::Phase, WebWheelEvent::Phase momentumPhase); -
trunk/Source/WebKit/Shared/gtk/NativeWebWheelEventGtk.cpp
r260752 r260817 44 44 } 45 45 46 NativeWebWheelEvent::NativeWebWheelEvent(GdkEvent* event, const WebCore::IntPoint& position) 47 : WebWheelEvent(WebEventFactory::createWebWheelEvent(event, position, position, WebWheelEvent::Phase::PhaseChanged, WebWheelEvent::Phase::PhaseNone)) 48 , m_nativeEvent(gdk_event_copy(event)) 49 { 50 } 51 46 52 NativeWebWheelEvent::NativeWebWheelEvent(const NativeWebWheelEvent& event) 47 : WebWheelEvent(WebEventFactory::createWebWheelEvent(event.nativeEvent(), event.p hase(), event.momentumPhase()))53 : WebWheelEvent(WebEventFactory::createWebWheelEvent(event.nativeEvent(), event.position(), event.globalPosition(), event.phase(), event.momentumPhase())) 48 54 , m_nativeEvent(gdk_event_copy(event.nativeEvent())) 49 55 { -
trunk/Source/WebKit/Shared/gtk/WebEventFactory.cpp
r260752 r260817 37 37 #include <gdk/gdkkeysyms.h> 38 38 #include <wtf/ASCIICType.h> 39 #include <wtf/MathExtras.h> 39 40 40 41 namespace WebKit { … … 205 206 WebWheelEvent WebEventFactory::createWebWheelEvent(const GdkEvent* event, WebWheelEvent::Phase phase, WebWheelEvent::Phase momentumPhase) 206 207 { 207 FloatSize wheelTicks = FloatSize(0, 0);208 208 double x, y; 209 209 gdk_event_get_coords(event, &x, &y); … … 211 211 gdk_event_get_root_coords(event, &xRoot, &yRoot); 212 212 213 return createWebWheelEvent(event, { clampToInteger(x), clampToInteger(y) }, { clampToInteger(xRoot), clampToInteger(yRoot) }, phase, momentumPhase); 214 } 215 216 WebWheelEvent WebEventFactory::createWebWheelEvent(const GdkEvent* event, const IntPoint& position, const IntPoint& globalPosition, WebWheelEvent::Phase phase, WebWheelEvent::Phase momentumPhase) 217 { 218 Optional<FloatSize> wheelTicks; 213 219 GdkScrollDirection direction; 214 220 if (!gdk_event_get_scroll_direction(event, &direction)) { … … 219 225 } 220 226 221 if ( wheelTicks.isZero()) {227 if (!wheelTicks) { 222 228 switch (direction) { 223 229 case GDK_SCROLL_UP: … … 234 240 break; 235 241 case GDK_SCROLL_SMOOTH: 236 break; 237 default: 238 ASSERT_NOT_REACHED(); 242 wheelTicks = FloatSize(0, 0); 243 break; 239 244 } 240 245 } … … 243 248 // https://bugs.webkit.org/show_bug.cgi?id=54826 244 249 float step = static_cast<float>(Scrollbar::pixelsPerLineStep()); 245 FloatSize delta(wheelTicks .width() * step, wheelTicks.height() * step);250 FloatSize delta(wheelTicks->width() * step, wheelTicks->height() * step); 246 251 247 252 return WebWheelEvent(WebEvent::Wheel, 248 IntPoint(x, y),249 IntPoint(xRoot, yRoot),253 position, 254 globalPosition, 250 255 delta, 251 wheelTicks ,256 wheelTicks.value(), 252 257 phase, 253 258 momentumPhase, -
trunk/Source/WebKit/Shared/gtk/WebEventFactory.h
r260752 r260817 42 42 static WebWheelEvent createWebWheelEvent(const GdkEvent*); 43 43 static WebWheelEvent createWebWheelEvent(const GdkEvent*, WebWheelEvent::Phase, WebWheelEvent::Phase momentumPhase); 44 static WebWheelEvent createWebWheelEvent(const GdkEvent*, const WebCore::IntPoint&, const WebCore::IntPoint&, WebWheelEvent::Phase, WebWheelEvent::Phase momentumPhase); 44 45 static WebKeyboardEvent createWebKeyboardEvent(const GdkEvent*, const String&, bool handledByInputMethod, Optional<Vector<WebCore::CompositionUnderline>>&&, Optional<EditingRange>&&, Vector<String>&& commands); 45 46 #if ENABLE(TOUCH_EVENTS) -
trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp
r260816 r260817 70 70 #include <wtf/Compiler.h> 71 71 #include <wtf/HashMap.h> 72 #include <wtf/MathExtras.h> 72 73 #include <wtf/glib/GRefPtr.h> 73 74 #include <wtf/glib/RunLoopSourcePriority.h> … … 598 599 } 599 600 600 static void webkitWebViewBaseConstructed(GObject* object)601 {602 G_OBJECT_CLASS(webkit_web_view_base_parent_class)->constructed(object);603 604 GtkWidget* viewWidget = GTK_WIDGET(object);605 gtk_widget_set_can_focus(viewWidget, TRUE);606 #if !USE(GTK4)607 gtk_drag_dest_set(viewWidget, static_cast<GtkDestDefaults>(0), nullptr, 0,608 static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_PRIVATE));609 gtk_drag_dest_set_target_list(viewWidget, PasteboardHelper::singleton().targetList());610 #endif611 612 WebKitWebViewBasePrivate* priv = WEBKIT_WEB_VIEW_BASE(object)->priv;613 priv->pageClient = makeUnique<PageClientImpl>(viewWidget);614 priv->dialog = nullptr;615 }616 617 601 #if USE(GTK4) 618 602 void webkitWebViewBaseSnapshot(GtkWidget* widget, GtkSnapshot* snapshot) … … 1026 1010 return GDK_EVENT_STOP; 1027 1011 } 1028 1012 #endif 1013 1014 #if USE(GTK4) 1015 static gboolean webkitWebViewBaseScroll(WebKitWebViewBase* webViewBase, double x, double y, GtkEventController* controller) 1016 { 1017 if (webViewBase->priv->dialog) 1018 return GDK_EVENT_PROPAGATE; 1019 1020 // FIXME: invert axis in case of SHIFT. 1021 webViewBase->priv->pageProxy->handleWheelEvent(NativeWebWheelEvent(gtk_event_controller_get_current_event(controller), { clampToInteger(x), clampToInteger(y) })); 1022 1023 return GDK_EVENT_STOP; 1024 } 1025 #endif 1026 1027 #if !USE(GTK4) 1029 1028 static gboolean webkitWebViewBasePopupMenu(GtkWidget* widget) 1030 1029 { … … 1504 1503 } 1505 1504 1505 static void webkitWebViewBaseConstructed(GObject* object) 1506 { 1507 G_OBJECT_CLASS(webkit_web_view_base_parent_class)->constructed(object); 1508 1509 GtkWidget* viewWidget = GTK_WIDGET(object); 1510 gtk_widget_set_can_focus(viewWidget, TRUE); 1511 #if !USE(GTK4) 1512 gtk_drag_dest_set(viewWidget, static_cast<GtkDestDefaults>(0), nullptr, 0, 1513 static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_PRIVATE)); 1514 gtk_drag_dest_set_target_list(viewWidget, PasteboardHelper::singleton().targetList()); 1515 #endif 1516 1517 WebKitWebViewBasePrivate* priv = WEBKIT_WEB_VIEW_BASE(object)->priv; 1518 priv->pageClient = makeUnique<PageClientImpl>(viewWidget); 1519 1520 #if USE(GTK4) 1521 auto* controller = gtk_event_controller_scroll_new(GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES); 1522 g_signal_connect_object(controller, "scroll", G_CALLBACK(webkitWebViewBaseScroll), viewWidget, G_CONNECT_SWAPPED); 1523 gtk_widget_add_controller(viewWidget, controller); 1524 #endif 1525 } 1526 1506 1527 static void webkit_web_view_base_class_init(WebKitWebViewBaseClass* webkitWebViewBaseClass) 1507 1528 {
Note: See TracChangeset
for help on using the changeset viewer.