GtkGesture

描述 [src]

abstract class Gtk.Gesture : Gtk.EventController
{
  /* No available fields */
}

GtkGesture 是手势 识别的基类。

尽管 GtkGesture 十分概括,可以作为多点触控手势的基准,但它也适合于实现单点触控和基于指针的手势(利用专门的 NULL GdkEventSequence 值 实现)。

GtkGesture 需要识别的触控数量由 GtkGesture:n-points 属性控制,如果手势正在追踪的序列数量少于或多于该数量,则它不会检查该手势是否 已被识别。

一旦手势有了预期数量的触控,它就会定期检查它是否已被识别,将手势视为“已识别”的标准留给 GtkGesture 子类。

然后,识别出的手势将发出以下 信号

事件传播

为了接收事件,手势需要通过 gtk_event_controller_set_propagation_phase() 设置一个传播 阶段。

在捕获阶段,事件会从顶级窗口向下传播到目标小部件,而连接到该小部件上方容器的手势有机会在事件到达 目标之前与该事件进行交互。

在冒泡阶段,事件会从目标小部件向上传播到顶级窗口,而连接到该小部件上方容器的手势有机会与尚未处理的 事件进行交互。

序列状态

每当发生输入交互时,单个事件都可能会触发一系列 GtkGesture,既可能会覆盖接收该事件的小部件的父级,又可能会在单个小部件内并行进行。使用这些手势的小部件负责相应地设置触控序列的状态,以便在触发这些状态的 GdkEventSequences 周围启用手势的 配合。

在小组件内,可通过 gtk_gesture_group() 将手势分组。分组的手势将同步序列的状态,因此对其中一个调用 gtk_gesture_set_state() 将有效地将状态传播到整个组中。

默认情况下,所有序列都从 GTK_EVENT_SEQUENCE_NONE 状态开始,处于此状态的序列将触发手势事件处理程序,但事件传播将继续不受手势的阻止。

如果某个序列进入 GTK_EVENT_SEQUENCE_DENIED 状态,手势组将有效地忽略序列,让事件不受手势阻止,但当触点处于活动状态时,“插槽”仍将保持占用。

如果某个序列进入 GTK_EVENT_SEQUENCE_CLAIMED 状态,手势组将在序列上获取所有交互,方法是:

  • 在小组件内对每个其他手势组将相同的序列设置为 GTK_EVENT_SEQUENCE_DENIED,并在传播链中的父小组件的每个手势中将其设置为 GTK_EVENT_SEQUENCE_DENIED
  • 在传播链的下方的每个小组件中对每个手势发出 GtkGesture::cancel
  • 在手势组处理事件后停止事件传播。

注意:如果在 GDK_TOUCH_BEGIN/GDK_BUTTON_PRESS 上将序列过早设置为 GTK_EVENT_SEQUENCE_CLAIMED(以便在事件到达事件小组件之前捕获这些事件,这表示 GTK_PHASE_CAPTURE),如果序列更改为 GTK_EVENT_SEQUENCE_DENIED,将模拟一个类似事件。在取消阻止事件传播之后,以此方式保留事件一致性。

序列状态无法随意更改。请参阅 gtk_gesture_set_state() 以了解 GdkEventSequence 的可能生命周期。

触控板手势

在支持它的平台上,GtkGesture 将透明地处理触控板手势事件。GtkGesture 用户应做的唯一预防措施是启用此支持,即:

  • 如果手势具有 GTK_PHASE_NONE,确保 GtkGesture 处理类型为 GDK_TOUCHPAD_SWIPEGDK_TOUCHPAD_PINCH 的事件。

层次结构

hierarchy this GtkGesture ancestor_0 GtkEventController ancestor_0--this ancestor_1 GObject ancestor_1--ancestor_0

实例方法

gtk_gesture_get_bounding_box

如果当前正在处理 gesture 的触点序列,则返回 TRUE,并在 rect 中填充包含所有活动触点的边框框。

gtk_gesture_get_bounding_box_center

如果当前正在处理 gesture 的触点序列,则返回 TRUE,并在 xy 中填充包含所有活动触点的边框框的中心。

gtk_gesture_get_device

返回当前在 gesture 上执行操作的逻辑 GdkDevice

gtk_gesture_get_group

返回 gesture 组中的所有手势。

gtk_gesture_get_last_event

返回为 sequence 处理的最后一个事件。

gtk_gesture_get_last_updated_sequence

返回在 gesture 上最后更新的 GdkEventSequence

gtk_gesture_get_point

如果 sequence 当前正在由 gesture 解释,则返回 TRUE,并在 xy 中填充为该事件序列存储的最后坐标。

gtk_gesture_get_sequence_state

返回 sequence 状态,即 gesture 看到的状态。

gtk_gesture_get_sequences

返回当前由`` gesture``解释的`GdkEventSequences`列表。

gtk_gesture_group

将``gesture``添加到与``group_gesture`相同的组中。

gtk_gesture_handles_sequence

如果`gesture`当前处理对应于`sequence`的事件,则返回`TRUE`。

gtk_gesture_is_active

如果手势当前处于活动状态,则返回`TRUE`。

gtk_gesture_is_grouped_with

如果这两个手势都属于同一组,则返回`TRUE`。

gtk_gesture_is_recognized

如果手势当前被识别,则返回`TRUE`。

gtk_gesture_set_sequence_state

在`gesture`中设置`sequence`的状态。

已弃用:4.10。 

gtk_gesture_set_state

设置`gesture`当前与之交互的所有序列的状态。

gtk_gesture_ungroup

将`gesture`分离到一个孤立的组中。

继承自GtkEventController(13)的方法
gtk_event_controller_get_current_event

返回当前由 控制器 处理的事件。

gtk_event_controller_get_current_event_device

返回当前由 控制器 处理的事件的设备。

gtk_event_controller_get_current_event_state

返回当前由 控制器 处理的事件的修饰符状态。

gtk_event_controller_get_current_event_time

返回当前由 控制器 处理的事件的时间戳。

gtk_event_controller_get_name

获取`controller`的名称。

gtk_event_controller_get_propagation_limit

获取事件 控制器的传播限制。

gtk_event_controller_get_propagation_phase

获取`controller`处理事件的传播阶段。

gtk_event_controller_get_widget

返回此控制器所涉及的`GtkWidget`。

gtk_event_controller_reset

将`controller`重置为干净状态。

gtk_event_controller_set_name

在控制器上设置一个可用于调试的名称。

gtk_event_controller_set_propagation_limit

在事件控制器上设置事件传播限制。

gtk_event_controller_set_propagation_phase

设置控制器处理事件的传播阶段。

gtk_event_controller_set_static_name

在控制器上设置一个可用于调试的名称。

自:4.8

继承自GObject(43)的方法

有关方法的完整列表,请参阅GObject

属性

Gtk.Gesture:n-points

触发此手势识别的触控点数量。

继承自GtkEventController(4)的属性
Gtk.EventController:name

此控制器的名称,通常用于调试目的。

Gtk.EventController:propagation-limit

此控制器将处理的事件的限制。

Gtk.EventController:propagation-phase

此控制器将处理事件的传播阶段。

Gtk.EventController:widget

接收控制器将处理的`GdkEvents`的小部件。

信号

Gtk.Gesture::begin

在识别手势时发出。

Gtk.Gesture::cancel

每当取消序列时发出。

Gtk.Gesture::end

当`gesture`停止将事件序列识别为要处理的内容,或触控序列的数量变得高于或低于`GtkGesture:n-points`时,发出。

Gtk.Gesture::sequence-state-changed

每当下个状态更改时发出。

Gtk.Gesture::update

每当手势被识别时,处理事件时发出。

继承自GObject(1)的信号
GObject::notify

当对象的一个属性通过g_object_set_property()、g_object_set()等设置其值时,在对象上发出通知信号。

类结构

struct GtkGestureClass {
  /* no available fields */
}

没有可用的说明。