类
GtkGesture
描述 [src]
abstract class Gtk.Gesture : Gtk.EventController
{
/* No available fields */
}
GtkGesture
是手势 识别的基类。
尽管 GtkGesture
十分概括,可以作为多点触控手势的基准,但它也适合于实现单点触控和基于指针的手势(利用专门的 NULL
GdkEventSequence
值 实现)。
GtkGesture
需要识别的触控数量由 GtkGesture:n-points
属性控制,如果手势正在追踪的序列数量少于或多于该数量,则它不会检查该手势是否 已被识别。
一旦手势有了预期数量的触控,它就会定期检查它是否已被识别,将手势视为“已识别”的标准留给 GtkGesture
子类。
然后,识别出的手势将发出以下 信号
GtkGesture::begin
当手势被 识别时。GtkGesture::update
,每当处理输入事件时。GtkGesture::end
当手势不再被 识别时。
事件传播
为了接收事件,手势需要通过 gtk_event_controller_set_propagation_phase()
设置一个传播 阶段。
在捕获阶段,事件会从顶级窗口向下传播到目标小部件,而连接到该小部件上方容器的手势有机会在事件到达 目标之前与该事件进行交互。
在冒泡阶段,事件会从目标小部件向上传播到顶级窗口,而连接到该小部件上方容器的手势有机会与尚未处理的 事件进行交互。
序列状态
每当发生输入交互时,单个事件都可能会触发一系列 GtkGesture
,既可能会覆盖接收该事件的小部件的父级,又可能会在单个小部件内并行进行。使用这些手势的小部件负责相应地设置触控序列的状态,以便在触发这些状态的 GdkEventSequence
s 周围启用手势的 配合。
在小组件内,可通过 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_SWIPE
和GDK_TOUCHPAD_PINCH
的事件。
实例方法
继承自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
属性
继承自GtkEventController(4)的属性
Gtk.EventController:name
此控制器的名称,通常用于调试目的。
Gtk.EventController:propagation-limit
此控制器将处理的事件的限制。
Gtk.EventController:propagation-phase
此控制器将处理事件的传播阶段。
Gtk.EventController:widget
接收控制器将处理的`GdkEvents`的小部件。
信号
继承自GObject(1)的信号
GObject::notify
当对象的一个属性通过g_object_set_property()、g_object_set()等设置其值时,在对象上发出通知信号。