PlatformWheelEventGtk.cpp [plain text]
#include "config.h"
#include "PlatformWheelEvent.h"
#include "FloatPoint.h"
#include "GtkUtilities.h"
#include "PlatformKeyboardEvent.h"
#include "Scrollbar.h"
#include <gdk/gdk.h>
#include <gtk/gtk.h>
#include <wtf/WallTime.h>
namespace WebCore {
PlatformWheelEvent::PlatformWheelEvent(GdkEventScroll* event)
{
static const float delta = 1;
m_type = PlatformEvent::Wheel;
m_timestamp = wallTimeForEvent(event);
if (event->state & GDK_SHIFT_MASK)
m_modifiers |= Modifier::ShiftKey;
if (event->state & GDK_CONTROL_MASK)
m_modifiers |= Modifier::CtrlKey;
if (event->state & GDK_MOD1_MASK)
m_modifiers |= Modifier::AltKey;
if (event->state & GDK_META_MASK)
m_modifiers |= Modifier::MetaKey;
if (PlatformKeyboardEvent::modifiersContainCapsLock(event->state))
m_modifiers |= PlatformEvent::Modifier::CapsLockKey;
m_deltaX = 0;
m_deltaY = 0;
switch (event->direction) {
case GDK_SCROLL_UP:
m_deltaY = delta;
break;
case GDK_SCROLL_DOWN:
m_deltaY = -delta;
break;
case GDK_SCROLL_LEFT:
m_deltaX = delta;
break;
case GDK_SCROLL_RIGHT:
m_deltaX = -delta;
break;
#if GTK_CHECK_VERSION(3, 3, 18)
case GDK_SCROLL_SMOOTH: {
gdouble deltaX, deltaY;
gdk_event_get_scroll_deltas(reinterpret_cast<GdkEvent*>(event), &deltaX, &deltaY);
m_deltaX = -deltaX;
m_deltaY = -deltaY;
}
break;
#endif
}
m_wheelTicksX = m_deltaX;
m_wheelTicksY = m_deltaY;
#ifndef GTK_API_VERSION_2
#if GTK_CHECK_VERSION(3, 20, 0)
m_phase = event->is_stop ?
PlatformWheelEventPhaseEnded :
PlatformWheelEventPhaseChanged;
#else
m_phase = event->direction == GDK_SCROLL_SMOOTH && !m_deltaX && !m_deltaY ?
PlatformWheelEventPhaseEnded :
PlatformWheelEventPhaseChanged;
#endif
#else
m_phase = PlatformWheelEventPhaseChanged;
#endif // GTK_API_VERSION_2
m_position = IntPoint(static_cast<int>(event->x), static_cast<int>(event->y));
m_globalPosition = IntPoint(static_cast<int>(event->x_root), static_cast<int>(event->y_root));
m_granularity = ScrollByPixelWheelEvent;
m_directionInvertedFromDevice = false;
m_deltaX *= static_cast<float>(Scrollbar::pixelsPerLineStep());
m_deltaY *= static_cast<float>(Scrollbar::pixelsPerLineStep());
}
FloatPoint PlatformWheelEvent::swipeVelocity() const
{
return isTransitioningToMomentumScroll() ? FloatPoint(m_wheelTicksX, m_wheelTicksY) : FloatPoint();
}
}