KWin事件总结和相关类介绍
目录
KWin事件总结和相关类介绍
1、事件相关模块
1.1 事件类型
1.2 事件管理
1.3 事件过滤器
2、KWin其他模块整理
2.1 窗口
2.2 Item
2.3 scene
3、事件传递流程
3.1 事件整体流程
3.2 事件传递时序图
4、事件流程样例
4.1 鼠标拖动修改窗口大小
4.2 鼠标样式修改
1、事件相关模块
1.1 事件类型
-
MouseEvent:鼠标事件
MouseEvent
类通常包含以下属性:Qt::MouseButton button
:表示鼠标按下的按钮。Qt::MouseButtons buttons
:表示当前鼠标按下的所有按钮。Qt::KeyboardModifiers modifiers
:表示与鼠标事件关联的键盘修饰符,如Shift、Ctrl等。QPointF pos
:表示鼠标事件发生的位置,通常以窗口或屏幕坐标系表示。QPointF globalPos
:表示鼠标事件在全局屏幕坐标系中的位置。QPointF globalPosF
:与globalPos
相同,但以浮点数表示。QPoint globalPos().toPoint()
:以整数形式表示的全局屏幕坐标位置。
-
WheelEvent:滚轮事件
WheelEvent
类通常包含以下属性:Qt::Orientation orientation
:表示滚轮事件的方向,可以是水平方向或垂直方向。int delta
:表示滚轮滚动的距离或步数,正值表示向上滚动,负值表示向下滚动。Qt::KeyboardModifiers modifiers
:表示与滚轮事件关联的键盘修饰符,如Shift、Ctrl等。QPointF pos
:表示滚轮事件发生的位置,通常以窗口或屏幕坐标系表示。QPointF globalPos
:表示滚轮事件在全局屏幕坐标系中的位置
-
KeyEvent:键盘事件
KeyEvent
类通常包含以下属性:Qt::Key key
:表示按下或释放的键盘按键。Qt::KeyboardModifiers modifiers
:表示与键盘事件关联的键盘修饰符,如Shift、Ctrl等。QString text
:表示与键盘事件关联的字符文本。bool isAutoRepeat
:表示键盘事件是否是自动重复的(按住不放的情况下)。int count
:表示键盘事件的计数,指示重复事件的次数。
-
SwitchEvent:切换事件(窗口切换)
SwitchEvent
类通常包含以下属性::SwitchEvent::Type
:表示切换事件的类型,可以是切换到上一个窗口、下一个窗口或特定窗口的事件。SwitchEvent::Modifiers
:表示切换事件时使用的修饰键,例如 Alt、Shift 等。SwitchEvent::Direction
:表示切换的方向,可以是向前切换或向后切换。SwitchEvent::Window
:表示切换事件所涉及的窗口对象。
-
TabletEvent:处理与平板电脑(或支持触摸笔的设备)相关的事件
TabletEvent
类通常包含以下属性:QPointF pos
:表示绘图板事件发生的位置,通常以窗口或屏幕坐标系表示。QPointF globalPos
:表示绘图板事件在全局屏幕坐标系中的位置。int device
:表示与事件相关的绘图板设备的ID。int pointer
:表示绘图板事件所使用的指针的ID。QTabletEvent::TabletDevice deviceType
:表示绘图板设备的类型,如触摸笔、橡皮擦等。Qt::KeyboardModifiers modifiers
:表示与绘图板事件关联的键盘修饰符,如Shift、Ctrl等。
1.2 事件管理
-
InputDeviceHandler:输入设备管理器
该类主要用于以下功能:
-
注册和管理输入设备:
InputDeviceHandler
负责注册和管理系统中连接的输入设备,例如键盘、鼠标、触摸板等。它会跟踪输入设备的状态变化,并与输入设备的驱动程序进行通信。 -
处理输入事件:
InputDeviceHandler
接收来自输入设备的事件,例如按键事件、鼠标事件、触摸事件等。它会将这些事件传递给适当的事件处理程序进行处理,如窗口管理、窗口操作等。 -
分发输入事件:
InputDeviceHandler
会根据输入事件的类型和目标,将事件分发给合适的接收者进行处理。例如,鼠标事件可能会被发送给当前活动窗口进行处理,键盘事件可能会被发送给具有焦点的窗口。 -
输入设备配置:
InputDeviceHandler
也提供了一些接口和方法,用于配置和管理输入设备的行为和设置,例如设置按键映射、调整鼠标速度等。 -
PointerInputRedirection:鼠标相关输入管理器
PointerInputRedirection
类提供了以下主要功能:- 监听指针设备的事件:
PointerInputRedirection
通过与操作系统或底层输入系统进行交互,监听指针设备(例如鼠标)发送的事件。这些事件可能包括鼠标移动、按下和释放按钮等。 - 事件转发:一旦
PointerInputRedirection
接收到指针事件,它会根据事件的属性和状态,将事件转发给适当的窗口或应用程序进行处理。这通常涉及确定事件所属的窗口或应用程序,并将事件传递给它们的事件处理程序进行处理。 - 事件处理:一旦事件被传递给目标窗口或应用程序,它们可以根据需要执行相应的操作。例如,对于鼠标移动事件,窗口可以更新其位置或触发特定的绘图操作;对于鼠标按下事件,窗口可以执行相应的响应操作,如选中、拖动等
- 监听指针设备的事件:
-
TabletInputRedirection:用于在桌面环境中处理平板电脑或触摸笔的输入管理器
TabletInputRedirection
类提供了以下主要功能:- 注册和管理绘图板设备:
TabletInputRedirection
负责注册和管理系统中的绘图板设备。它会跟踪绘图板设备的状态变化,并与绘图板设备的驱动程序进行通信。 - 处理绘图板事件:
TabletInputRedirection
接收来自绘图板设备的输入事件,包括笔尖接触、笔尖移动和按下按钮等。它会将这些事件传递给适当的事件处理程序进行处理。 - 分发绘图板事件:
TabletInputRedirection
根据绘图板事件的类型和目标,将事件分发给合适的接收者进行处理。例如,绘图板事件可能会被发送给当前活动的绘画应用程序进行处理,或者用于实现特定的绘图操作。 - 绘图板事件路由:
TabletInputRedirection
负责将绘图板事件正确地路由到合适的窗口或功能。它会根据绘图板事件的位置、压力等信息,决定事件的接收者
- 注册和管理绘图板设备:
-
TouchInputRedirection:触摸屏相关输入管理器
TouchInputRedirection
类提供了以下主要功能:- 注册和管理触摸设备:
TouchInputRedirection
负责注册和管理系统中的触摸设备。它会跟踪触摸设备的状态变化,并与触摸设备的驱动程序进行通信。 - 处理触摸事件:
TouchInputRedirection
接收来自触摸设备的触摸事件,包括触摸开始、触摸移动和触摸结束等。它会将这些事件传递给适当的事件处理程序进行处理。 - 分发触摸事件:
TouchInputRedirection
根据触摸事件的类型和目标,将事件分发给合适的接收者进行处理。例如,触摸事件可能会被发送给当前活动窗口进行处理,或者用于实现特定的手势操作。 - 触摸事件路由:
TouchInputRedirection
负责将触摸事件正确地路由到合适的窗口或功能。它会根据触摸事件的位置、手指数量等信息,决定事件的接收者。
- 注册和管理触摸设备:
-
1.3 事件过滤器
-
InputEventFilter:处理输入事件的过滤器
它可以用于以下目的:
- 事件过滤:
InputEventFilter
可以拦截输入事件,检查事件的属性和状态,并决定是否继续传递给下一个处理程序或应用程序。它可以用于实现特定的输入事件过滤逻辑,例如忽略某些特定的事件、修改事件的属性或创建新的事件。 - 事件预处理:
InputEventFilter
可以在事件传递给应用程序之前对事件进行预处理。它可以检查事件的类型和属性,并进行相应的修改或处理。例如,它可以调整鼠标事件的坐标、修正触摸事件的多点触控信息等。 - 事件后处理:
InputEventFilter
可以在事件传递给应用程序后执行一些附加操作。它可以监视应用程序对事件的响应,并根据需要执行额外的处理。例如,它可以记录应用程序对输入事件的响应时间、统计事件的使用情况等。
-
DpmsInputEventFilter:处理DPMS(Display Power Management Signaling,显示器电源管理信号)相关的事件过滤器
它可以用于以下目的:
- 监听显示器状态:通过监听输入事件,
DpmsInputEventFilter
可以获取显示器的状态变化信息,例如显示器的开启、关闭或休眠状态的变化。 - 处理显示器状态变化:当接收到与 DPMS 相关的输入事件时,
DpmsInputEventFilter
可以执行相应的处理逻辑。例如,根据显示器的状态变化,自动调整其他相关的显示设置或执行特定的操作。 - 控制显示器电源:
DpmsInputEventFilter
可以通过向系统发送 DPMS 控制信号来控制显示器的电源状态。例如,在一段时间内没有用户活动时,可以通过DpmsInputEventFilter
控制显示器进入休眠状态以节省能源
- 监听显示器状态:通过监听输入事件,
-
VirtualTerminalFilter:处理虚拟终端(Virtual Terminal)相关的输入的事件过滤器
它可以用于以下目的:
- 监听虚拟终端切换:通过监听输入事件,
VirtualTerminalFilter
可以获取虚拟终端切换的相关信息。当用户在系统中切换虚拟终端时,VirtualTerminalFilter
可以捕获到这些事件。 - 处理虚拟终端切换事件:当接收到与虚拟终端切换相关的输入事件时,
VirtualTerminalFilter
可以执行相应的处理逻辑。例如,根据用户切换的虚拟终端,调整窗口管理器的显示设置或执行特定的操作。 - 虚拟终端状态管理:
VirtualTerminalFilter
可以管理虚拟终端的状态信息。它可以跟踪当前活动的虚拟终端,记录各个虚拟终端的状态变化,并在需要时通知其他组件或模块。
- 监听虚拟终端切换:通过监听输入事件,
-
TerminateServerFilter:处理终止服务器(Server Termination,如用户请求关闭窗口管理器或系统即将关闭)相关的输入的事件过滤器(X Window System)
它可以用于以下目的:
- 监听终止服务器事件:
TerminateServerFilter
监听用户的输入事件,以便捕获与终止服务器相关的操作。例如,当用户按下特定的组合键或执行终止命令时,TerminateServerFilter
可以获取到这些事件。 - 处理终止服务器事件:一旦
TerminateServerFilter
接收到终止服务器事件,它会执行相应的处理逻辑。这可能涉及到关闭当前的 X 会话、终止相关的进程和服务等操作。 - 安全性检查:在执行终止服务器操作之前,
TerminateServerFilter
可能会执行一些安全性检查,以确保用户具有足够的权限和授权来终止服务器。这有助于防止意外或未经授权的终止服务器操作发生。
- 监听终止服务器事件:
-
LockScreenFilter:处理锁屏相关的输入的事件过滤器
它可以用于以下目的:
- 当用户请求锁屏时,KWin 接收到锁屏信号并通知
LockScreenFilter
类。 LockScreenFilter
类开始工作,并将自身注册为输入事件过滤器,以截取和处理输入事件。- 当有输入事件发生时,输入事件系统首先将事件传递给
LockScreenFilter
类进行处理。 LockScreenFilter
类检查当前是否处于锁屏状态。如果是,则阻止事件传递给其他窗口,并将事件视为已处理。- 如果不是锁屏状态,则允许事件传递给其他窗口
- 当用户请求锁屏时,KWin 接收到锁屏信号并通知
-
EffectsFilter:处理窗口特效相关的输入的事件过滤器
它可以用于以下目的:
- 监听用户输入事件:
EffectsFilter
监听用户的输入事件,例如鼠标点击、窗口拖动等操作。它会捕获这些事件以便后续的特效应用和处理。 - 控制窗口特效:一旦
EffectsFilter
接收到用户的输入事件,它会根据预定义的规则和设置来决定是否应用窗口特效以及如何应用。例如,在用户拖动窗口时,可以应用拖动窗口的动画特效。 - 提供特效管理功能:
EffectsFilter
还提供了特效管理的功能,包括启用、禁用和配置各种窗口特效。它可以与其他模块和插件交互,确保特效的正确应用和协调。
- 监听用户输入事件:
-
MoveResizeFilter:处理窗口移动和调整大小的相关输入的事件过滤器
它可以用于以下目的:
- 当用户开始拖动窗口或调整窗口大小时,KWin 接收到相应的输入事件,并通知
MoveResizeFilter
类。 MoveResizeFilter
类开始工作,并将自身注册为输入事件过滤器,以截取和处理输入事件。- 当有鼠标或触摸事件发生时,输入事件系统首先将事件传递给
MoveResizeFilter
类进行处理。 MoveResizeFilter
类根据事件类型和当前的窗口状态,判断是否需要进行窗口的移动或调整大小操作。- 如果是移动操作,
MoveResizeFilter
类会更新窗口的位置,并将事件视为已处理。 - 如果是调整大小操作,
MoveResizeFilter
类会根据事件的位置和方向,计算新的窗口尺寸,并更新窗口的大小。 - 根据窗口的新位置和尺寸,更新窗口的外观以反映新的状态。
- 如果窗口的位置或尺寸发生了变化,通知系统进行相应的调整,如重新布局窗口、更新窗口管理器的内部状态等。
- 当用户开始拖动窗口或调整窗口大小时,KWin 接收到相应的输入事件,并通知
-
WindowSelectorFilter:处理窗口选择器(Alt+Tab)相关的输入的事件过滤器
它可以用于以下目的:
- 当用户触发窗口选择器操作时,KWin 接收到相应的输入事件,并通知
WindowSelectorFilter
类。 WindowSelectorFilter
类开始工作,并将自身注册为输入事件过滤器,以截取和处理输入事件。- 当有鼠标或触摸事件发生时,输入事件系统首先将事件传递给
WindowSelectorFilter
类进行处理。 WindowSelectorFilter
类根据事件类型和当前的上下文状态,判断是否处于窗口选择器模式。- 如果处于窗口选择器模式,
WindowSelectorFilter
类会根据事件的位置和动作,实时更新选择器的状态,如绘制选择框、突出显示可选择的窗口等。 - 如果用户选择了一个窗口,
WindowSelectorFilter
类会将选择的窗口信息传递给相应的处理逻辑,如窗口管理器进行窗口切换或移动操作。
- 当用户触发窗口选择器操作时,KWin 接收到相应的输入事件,并通知
-
GlobalShortcutFilter:处理全局快捷键的事件过滤器
它可以用于以下目的:
- 注册全局快捷键:
GlobalShortcutFilter
允许应用程序注册全局快捷键,以便在任何时候都能够捕捉到这些快捷键的触发事件。 - 监听键盘输入事件:
GlobalShortcutFilter
监听用户的键盘输入事件,并根据注册的全局快捷键进行匹配。 - 触发相应的操作:当用户按下注册的全局快捷键时,
GlobalShortcutFilter
会触发相应的操作或命令。这可以是启动应用程序、切换工作区、执行特定功能等。 - 提供配置和管理功能:
GlobalShortcutFilter
还提供了配置和管理全局快捷键的功能,包括注册、修改、删除等操作。
- 注册全局快捷键:
-
InternalWindowEventFilter:处理与窗口内部操作相关的事件过滤器
它可以用于以下目的:
- 捕获内部窗口事件:
InternalWindowEventFilter
监听和捕获与内部窗口相关的事件,例如窗口的移动、大小调整、关闭等操作。 - 处理内部窗口事件:一旦
InternalWindowEventFilter
捕获到内部窗口事件,它会根据事件的类型和具体情况进行适当的处理。例如,当用户关闭一个内部窗口时,InternalWindowEventFilter
可能会触发相应的操作,如隐藏任务栏上的对应按钮。 - 协调内部窗口和外部窗口的交互:
InternalWindowEventFilter
还可以协调内部窗口和外部窗口之间的交互。例如,当用户拖动一个内部窗口时,InternalWindowEventFilter
可能会通知 KWin 更新窗口位置,并触发对应的重绘操作。
- 捕获内部窗口事件:
-
DecorationEventFilter:处理窗口装饰相关的事件过滤器
它可以用于以下目的:
- 当用户与窗口装饰器进行交互时(如点击装饰器、拖动装饰器等),KWin 接收到相应的输入事件,并将其传递给
DecorationEventFilter
类。 DecorationEventFilter
类将自身注册为装饰器事件过滤器,以截取和处理装饰器相关的输入事件。- 当装饰器事件发生时,输入事件系统首先将事件传递给
DecorationEventFilter
类进行处理。 DecorationEventFilter
类根据事件类型和当前的上下文状态,判断是否需要执行特定的操作,如移动窗口、调整窗口大小、最大化、最小化等。- 如果需要执行操作,
DecorationEventFilter
类将相应的命令发送给窗口管理器,以便进行相应的窗口管理操作。
- 当用户与窗口装饰器进行交互时(如点击装饰器、拖动装饰器等),KWin 接收到相应的输入事件,并将其传递给
-
TabBoxInputFilter:用于处理Tab Box(任务切换器,任务栏应用切换)相关输入的事件过滤器
它可以用于以下目的:
- 当用户触发 Tab Box 操作时,KWin 接收到相应的输入事件,并通知
TabBoxInputFilter
类。 TabBoxInputFilter
类开始工作,并将自身注册为输入事件过滤器,以截取和处理输入事件。- 当有鼠标或键盘事件发生时,输入事件系统首先将事件传递给
TabBoxInputFilter
类进行处理。 TabBoxInputFilter
类根据事件类型和当前的上下文状态,判断是否处于 Tab Box 模式。- 如果处于 Tab Box 模式,
TabBoxInputFilter
类会根据事件的位置和动作,实时更新 Tab Box 的状态,如绘制窗口缩略图、突出显示可切换的窗口等。 - 如果用户选择了一个窗口,
TabBoxInputFilter
类会将选择的窗口信息传递给相应的处理逻辑,如窗口管理器进行窗口切换操作。
- 当用户触发 Tab Box 操作时,KWin 接收到相应的输入事件,并通知
-
ScreenEdgeInputFilter:处理屏幕边缘输入的事件过滤器
它可以用于以下目的:
- 当用户将鼠标光标移动到屏幕的边缘时,KWin 接收到相应的鼠标事件,并通知
ScreenEdgeInputFilter
类。 ScreenEdgeInputFilter
类开始工作,并将自身注册为输入事件过滤器,以截取和处理鼠标事件。- 当鼠标事件发生时,输入事件系统首先将事件传递给
ScreenEdgeInputFilter
类进行处理。 ScreenEdgeInputFilter
类根据事件的位置和边缘设置,判断是否触发了屏幕边缘操作。- 如果触发了屏幕边缘操作,
ScreenEdgeInputFilter
类会根据事件的位置和动作,执行相应的操作,如窗口管理操作、工作区切换、窗口最大化等。 - 如果需要,
ScreenEdgeInputFilter
类将相应的命令发送给窗口管理器,以便进行相应的窗口管理操作。
- 当用户将鼠标光标移动到屏幕的边缘时,KWin 接收到相应的鼠标事件,并通知
-
WindowActionInputFilter:责捕获和处理用户的窗口操作行为(最大化、最小化、关闭)的事件过滤器
它可以用于以下目的:
- 当用户执行窗口操作时(如拖动窗口、调整窗口大小等),KWin 接收到相应的输入事件,并通知
WindowActionInputFilter
类。 WindowActionInputFilter
类开始工作,并将自身注册为输入事件过滤器,以截取和处理输入事件。- 当鼠标事件或键盘事件发生时,输入事件系统首先将事件传递给
WindowActionInputFilter
类进行处理。 WindowActionInputFilter
类根据事件的类型和当前窗口的状态,判断是否需要执行特定的窗口操作。- 如果需要执行窗口操作,
WindowActionInputFilter
类会根据事件的位置和动作,更新窗口的位置、大小等属性,并通知窗口管理器进行相应的窗口调整。 - 如果需要,
WindowActionInputFilter
类将相应的命令发送给窗口管理器,以便进行窗口操作。
- 当用户执行窗口操作时(如拖动窗口、调整窗口大小等),KWin 接收到相应的输入事件,并通知
-
InputKeyboardFilter:处理键盘输入的事件过滤器
它可以用于以下目的:
- 捕获键盘输入事件:
InputKeyboardFilter
监听用户的键盘输入事件,并捕获按键操作、组合键等信息。 - 进行按键映射和处理:一旦
InputKeyboardFilter
捕获到键盘输入事件,它会进行按键映射,将按键码转换为对应的字符或功能键,并根据预定义的键盘布局和设置进行处理。这包括处理快捷键、执行命令、触发特定操作等。 - 提供键盘事件的通知和转发:
InputKeyboardFilter
可以向其他模块或组件发送键盘事件的通知,以便进行进一步的处理。它可以将键盘事件转发给应用程序窗口、输入法引擎等,以实现正确的键盘输入行为。 - 处理键盘布局和设置:
InputKeyboardFilter
还负责处理键盘布局和设置方面的操作。它可以根据用户的配置选择正确的键盘布局,并应用特定的键盘设置,如键盘重复速率、修饰键设置等。
- 捕获键盘输入事件:
-
ForwardInputFilter:将输入事件转发给其他应用程序或组件的事件过滤器
它可以用于以下目的:
- 当输入事件发生时,KWin 接收到相应的事件。
ForwardInputFilter
类将自身注册为输入事件过滤器,以截取和处理输入事件。ForwardInputFilter
类根据事件的类型和条件,判断是否需要转发该事件。- 如果需要转发事件,
ForwardInputFilter
类将事件传递给指定的目标组件或应用程序。 - 目标组件或应用程序接收到转发的事件,并根据需要进行相应的处理。
-
TabletInputFilter:用于在软件系统中处理平板电脑或触摸笔输入的事件过滤器
它可以用于以下目的:
- 事件过滤:平板输入过滤器可以对接收到的平板输入事件进行过滤和筛选,根据开发者定义的规则或条件来确定哪些事件应该被传递给应用程序进行处理,哪些事件应该被忽略或阻止。
- 事件转换:平板输入过滤器可以对平板输入事件进行转换或重映射,将其转换为另一种类型的事件或映射到不同的操作。例如,将平板绘画事件转换为鼠标事件,以便应用程序可以处理绘画操作。
- 事件增强:平板输入过滤器可以对平板输入事件进行增强,添加额外的信息或属性,以便应用程序可以更丰富地利用这些事件。例如,通过平板输入过滤器可以计算触摸笔的压力级别或倾斜角度,并将这些信息添加到事件中。
- 手势识别:平板输入过滤器可以用于识别和处理手势操作,例如捏合、滑动、旋转等。它可以根据一系列平板输入事件来判断是否发生了特定的手势,并向应用程序传递相应的手势事件。
-
DragAndDropInputFilter:处理拖放操作的输入的事件过滤器
它可以用于以下目的:
- 当用户开始拖动一个对象时,KWin 接收到相应的拖动开始事件,并通知
DragAndDropInputFilter
类。 DragAndDropInputFilter
类开始工作,并将自身注册为输入事件过滤器,以截取和处理拖放相关的输入事件。- 当鼠标事件发生时,输入事件系统首先将事件传递给
DragAndDropInputFilter
类进行处理。 DragAndDropInputFilter
类根据事件的类型和当前的拖放状态,判断是否需要执行相应的拖放操作。- 如果需要执行拖放操作,
DragAndDropInputFilter
类会跟踪鼠标的移动并更新拖动对象的位置。 - 当用户释放拖动对象时,KWin 接收到相应的拖动释放事件,并通知
DragAndDropInputFilter
类。 DragAndDropInputFilter
类根据释放事件的位置和规则,执行相应的拖放操作,例如将对象放置到指定的目标位置。一步的处理。它可以将拖放事件转发给应用程序窗口、剪贴板管理器等,以实现正确的拖放行为。
- 当用户开始拖动一个对象时,KWin 接收到相应的拖动开始事件,并通知
-
PopupInputFilter:处理弹出窗口的输入相关的事件过滤器
它可以用于以下目的:
- 过滤输入事件:
PopupInputFilter
会拦截输入事件,包括键盘事件和鼠标事件。它会检查当前是否有弹出式窗口处于活动状态,并决定是否将输入事件传递给该窗口。 - 管理弹出式窗口:
PopupInputFilter
负责跟踪当前的弹出式窗口,并确保输入事件仅传递给活动的弹出窗口。它会根据弹出窗口的位置、焦点状态等信息,判断输入事件的接收者。 - 防止输入事件穿透:
PopupInputFilter
可以防止输入事件穿透到后面的窗口,即使弹出窗口没有完全覆盖后面的窗口。它会确保只有弹出窗口处于活动状态时,才将输入事件传递给它。
- 过滤输入事件:
- 事件过滤:
2、KWin其他模块整理
2.1 窗口
-
Window:窗口
Window
类的主要功能包括:- 窗口属性管理:
Window
类存储和管理窗口的各种属性,例如窗口的位置、大小、标题、图标等。它提供了方法来获取和设置窗口的属性,并处理窗口属性的变化。 - 窗口管理:
Window
类负责管理窗口的生命周期和状态。它可以创建和销毁窗口,跟踪窗口的打开和关闭状态,并处理窗口的最小化、最大化、恢复等操作。 - 窗口布局:
Window
类可以协助窗口的布局管理。它可以与窗口管理器交互,调整窗口的位置和大小,以适应窗口的排列和屏幕布局。 - 窗口装饰:
Window
类负责窗口的装饰,即窗口边框、标题栏等视觉元素的管理和渲染。它可以应用窗口装饰主题,并处理窗口装饰的绘制和交互事件。 - 窗口操作:
Window
类提供了一系列方法来执行窗口操作,如移动窗口、调整窗口大小、关闭窗口等。它还可以处理窗口操作的快捷键和手势等用户输入。
-
Deleted:删除的窗口
Deleted
状态的窗口具有以下功能和用途:- 清理资源:当窗口状态为
Deleted
时,KWin 会执行一些清理操作,例如释放与该窗口相关的资源和内存。这确保了在窗口被关闭后,相关资源能够被正确释放,避免资源泄漏和内存占用。 - 窗口管理:
Deleted
状态的窗口不再参与窗口管理和显示。它们被视为已经被关闭或销毁的窗口,不会出现在任务栏、窗口列表或其他窗口管理器功能中。这样可以确保用户界面的一致性和窗口管理的正确性。 - 事件处理:
Deleted
状态的窗口不会再接收和处理鼠标、键盘等事件。KWin 在窗口状态为Deleted
时会忽略对该窗口的输入事件,避免发送无效的事件到已经被关闭的窗口。 - 内部处理:KWin 内部的一些模块和功能可能会根据窗口的状态进行相应的处理。当窗口状态为
Deleted
时,相关的内部处理可能会被触发,例如刷新窗口列表、更新窗口状态等。
- 清理资源:当窗口状态为
-
InternalWindow:内部窗口
InternalWindow
类具有以下功能和用途:- 面板和工作区:
InternalWindow
用于创建和管理面板和工作区窗口。面板是桌面上常见的工具栏、任务栏或应用启动器等元素,工作区是桌面的工作区域。KWin 使用InternalWindow
来创建和管理这些特殊类型的窗口,并提供与其交互的功能。 - 菜单和弹出窗口:
InternalWindow
用于创建和管理菜单和弹出窗口。菜单是应用程序的上下文菜单或全局菜单,弹出窗口是窗口管理器中的弹出对话框或通知窗口。KWin 使用InternalWindow
来创建和管理这些弹出式窗口,并处理与其交互的事件。 - 桌面效果:
InternalWindow
用于实现桌面效果,如窗口阴影、透明度、动画效果等。KWin 使用InternalWindow
来创建和管理这些效果窗口,并在窗口管理器的渲染过程中应用这些效果。 - 内部状态窗口:
InternalWindow
用于创建和管理内部状态窗口,用于存储和管理 KWin 内部的一些状态信息。这些窗口通常不可见,并且不与用户进行交互。它们用于实现特定功能或存储临时数据。
- 面板和工作区:
-
Unmanaged:已经被删除或者关闭的窗口
Deleted
状态的窗口具有以下功能和用途:- 清理资源:当窗口状态为
Deleted
时,KWin 会执行一些清理操作,例如释放与该窗口相关的资源和内存。这确保了在窗口被关闭后,相关资源能够被正确释放,避免资源泄漏和内存占用。 - 窗口管理:
Deleted
状态的窗口不再参与窗口管理和显示。它们被视为已经被关闭或销毁的窗口,不会出现在任务栏、窗口列表或其他窗口管理器功能中。这样可以确保用户界面的一致性和窗口管理的正确性。 - 事件处理:
Deleted
状态的窗口不会再接收和处理鼠标、键盘等事件。KWin 在窗口状态为Deleted
时会忽略对该窗口的输入事件,避免发送无效的事件到已经被关闭的窗口。 - 内部处理:KWin 内部的一些模块和功能可能会根据窗口的状态进行相应的处理。当窗口状态为
Deleted
时,相关的内部处理可能会被触发,例如刷新窗口列表、更新窗口状态等。
- 清理资源:当窗口状态为
-
WaylandWindow:Wayland协议下的窗口
WaylandWindow
类的主要功能包括:- 窗口管理:
WaylandWindow
负责管理 Wayland 窗口的创建、关闭、最小化、最大化等操作。它与 Wayland 服务器进行通信,以执行窗口管理的相关指令。 - 事件处理:
WaylandWindow
处理来自 Wayland 服务器的输入事件,例如鼠标、键盘和触摸事件。它将这些事件转发给窗口对应的客户端程序,以实现用户与窗口的交互。 - 显示渲染:
WaylandWindow
与 Wayland 服务器协作,负责将窗口的内容进行渲染和显示。它管理窗口的缓冲区和帧缓冲区,以实现窗口的绘制和刷新。 - 窗口属性和状态:
WaylandWindow
提供了访问和修改窗口属性和状态的接口。例如,可以通过WaylandWindow
设置窗口的标题、位置、大小等属性。 - 窗口装饰:
WaylandWindow
支持窗口装饰的管理。它与窗口装饰器协作,控制窗口的边框、按钮等装饰元素的显示和交互。
-
InputPanelV1Window:输入面板窗口(软键盘或者输入法窗口)
InputPanelV1Window
类主要用于以下功能:- 窗口管理:
InputPanelV1Window
负责管理输入面板窗口的创建、关闭和显示。它与底层的窗口管理器进行交互,控制输入面板窗口的位置、大小和显示状态。 - 事件处理:
InputPanelV1Window
处理与输入面板窗口相关的事件,例如触摸事件和按键事件。它将这些事件转发给输入法引擎或其他相关组件,以实现输入面板的交互和文本输入功能。 - 显示渲染:
InputPanelV1Window
负责输入面板窗口的显示和渲染。它管理输入面板的视图、布局和样式,以确保输入面板以适当的方式呈现给用户。 - 窗口属性和状态:
InputPanelV1Window
提供了访问和修改输入面板窗口属性和状态的接口。例如,可以通过InputPanelV1Window
控制输入面板的透明度、边框样式等。 - 输入法交互:
InputPanelV1Window
与输入法引擎或输入法框架进行交互,以实现输入法相关的功能,如候选词显示、输入法切换等。
- 窗口管理:
-
XdgSurfaceWindow: XDG Surface 窗口
XdgSurfaceWindow
类主要用于以下功能:- 窗口管理:
XdgSurfaceWindow
负责管理 XDG Surface 窗口的创建、关闭和显示。它与底层的窗口管理器进行交互,控制窗口的位置、大小和显示状态。 - 事件处理:
XdgSurfaceWindow
处理与 XDG Surface 窗口相关的事件,例如触摸事件、按键事件和鼠标事件。它将这些事件转发给相应的窗口处理程序或其他相关组件,以实现窗口的交互功能。 - 窗口属性和状态:
XdgSurfaceWindow
提供了访问和修改窗口属性和状态的接口。例如,可以通过XdgSurfaceWindow
控制窗口的标题栏、边框样式、窗口类型等。 - 窗口布局和渲染:
XdgSurfaceWindow
负责窗口的布局和渲染。它根据窗口的属性和状态,决定窗口的大小、位置和外观,并将窗口内容绘制到屏幕上。 - 窗口的生命周期管理:
XdgSurfaceWindow
监听窗口的生命周期事件,如窗口的创建、关闭和销毁。它根据这些事件更新窗口的状态,并执行相应的操作。
-
XdgTopLevelWindow:XDG 顶层窗口
XdgTopLevelWindow
类主要用于以下功能:- 窗口管理:
XdgTopLevelWindow
负责管理 XDG Top Level 窗口的创建、关闭和显示。它与底层的窗口管理器进行交互,控制窗口的位置、大小和显示状态。 - 事件处理:
XdgTopLevelWindow
处理与 XDG Top Level 窗口相关的事件,例如触摸事件、按键事件和鼠标事件。它将这些事件转发给相应的窗口处理程序或其他相关组件,以实现窗口的交互功能。 - 窗口属性和状态:
XdgTopLevelWindow
提供了访问和修改窗口属性和状态的接口。例如,可以通过XdgTopLevelWindow
控制窗口的标题栏、边框样式、窗口类型等。 - 窗口布局和渲染:
XdgTopLevelWindow
负责窗口的布局和渲染。它根据窗口的属性和状态,决定窗口的大小、位置和外观,并将窗口内容绘制到屏幕上。 - 窗口的生命周期管理:
XdgTopLevelWindow
监听窗口的生命周期事件,如窗口的创建、关闭和销毁。它根据这些事件更新窗口的状态,并执行相应的操作。
- 窗口管理:
-
XdgPopupWindow: XDG 弹出窗口
XdgPopupWindow
类主要用于以下功能:- 窗口管理:
XdgPopupWindow
负责管理 XDG Popup 窗口的创建、关闭和显示。它与底层的窗口管理器进行交互,控制窗口的位置、大小和显示状态。 - 事件处理:
XdgPopupWindow
处理与 XDG Popup 窗口相关的事件,例如触摸事件、按键事件和鼠标事件。它将这些事件转发给相应的窗口处理程序或其他相关组件,以实现窗口的交互功能。 - 窗口属性和状态:
XdgPopupWindow
提供了访问和修改窗口属性和状态的接口。例如,可以通过XdgPopupWindow
控制窗口的标题、内容、外观和行为。 - 窗口布局和渲染:
XdgPopupWindow
负责窗口的布局和渲染。它根据窗口的属性和状态,决定窗口的大小、位置和外观,并将窗口内容绘制到屏幕上。 - 窗口的生命周期管理:
XdgPopupWindow
监听窗口的生命周期事件,如窗口的创建、关闭和销毁。它根据这些事件更新窗口的状态,并执行相应的操作。
- 窗口管理:
- 窗口管理:
- 窗口管理:
-
X11Window:X11协议窗口
X11Window
类主要用于以下功能:- 窗口管理:
X11Window
负责管理 X11 窗口的创建、关闭和显示。它与底层的 X11 服务器进行通信,控制窗口的位置、大小和显示状态。 - 事件处理:
X11Window
处理与 X11 窗口相关的事件,例如鼠标事件、键盘事件和窗口管理事件。它将这些事件转发给相应的窗口处理程序或其他相关组件,以实现窗口的交互功能。 - 窗口属性和状态:
X11Window
提供了访问和修改 X11 窗口属性和状态的接口。例如,可以通过X11Window
获取窗口的标题、位置、大小以及其他与窗口相关的属性。 - 窗口布局和渲染:
X11Window
负责窗口的布局和渲染。它根据窗口的属性和状态,决定窗口的位置、大小和外观,并将窗口内容绘制到屏幕上。 - 窗口的生命周期管理:
X11Window
监听窗口的生命周期事件,如窗口的创建、关闭和销毁。它根据这些事件更新窗口的状态,并执行相应的操作。
- 窗口管理:
- 窗口属性管理:
2.2 Item
-
Item:用于在图形界面中显示可视化的内容。提供了在场景中放置、显示和操作可视化元素的功能。
Item
类具有以下主要功能:- 绘制和显示:
Item
可以绘制自己的内容并在界面上显示出来。它提供了一些方法来定义和定制绘制的方式,如paint()
方法。 - 位置和尺寸管理:
Item
可以通过属性设置自己的位置和尺寸。它提供了方法来获取和设置位置、大小、边界框等属性。 - 交互和事件处理:
Item
可以处理用户输入事件,如鼠标点击、键盘输入等。它提供了事件处理函数来响应这些事件,并可以定义自己的交互行为。 - 变换和动画:
Item
可以通过变换操作来实现平移、缩放、旋转等效果。它提供了方法来设置和应用这些变换,并支持动画效果。 - 父子关系和层次管理:
Item
可以通过父子关系进行组织和管理。它可以作为其他项的父项,形成层次结构,并可以使用 Z 值控制显示的顺序
-
CursorItem:用于在窗口管理器中显示光标的图形项
CursorItem
类具有以下主要功能:- 光标形状的设置:
CursorItem
可以根据当前的光标形状设置来显示相应的光标图标。它可以根据系统配置或用户设置来获取当前光标形状,并相应地显示光标图标。 - 光标位置的更新:
CursorItem
可以根据输入设备的事件更新光标的位置。它可以捕获鼠标移动事件,并相应地更新光标的位置,以保持光标图标在屏幕上正确显示。 - 光标样式的定制:
CursorItem
提供了一些方法来定制光标的样式,如光标图标的大小、颜色、透明度等。这些方法可以用于调整光标图标的外观,以满足特定的视觉需求。 - 光标动画的支持:
CursorItem
可以提供光标的动画效果,使光标图标在屏幕上平滑移动。它可以使用动画库或定时器来实现光标动画,并提供方法来控制动画的速度和效果。
- 光标形状的设置:
-
DecorationItem:用于绘制窗口装饰的图形项。负责绘制窗口的装饰元素,如边框、标题栏、按钮等
DecorationItem
类具有以下主要功能:- 绘制窗口装饰:
DecorationItem
使用指定的样式和参数绘制窗口的装饰元素。它可以根据当前窗口的状态和属性,如活动状态、最大化状态等,来绘制相应的装饰效果。 - 响应用户交互:
DecorationItem
监听用户的鼠标事件,以便处理窗口装饰的交互操作,如拖动窗口、调整窗口大小、最小化、最大化等。它可以捕获鼠标点击和移动事件,并根据用户的操作更新窗口的位置和大小。 - 样式定制:
DecorationItem
提供了一些方法和属性,用于定制窗口装饰的样式。可以设置边框颜色、标题栏背景、按钮图标等,以满足特定的视觉需求。 - 窗口管理:
DecorationItem
与窗口管理器紧密配合,以确保窗口装饰的正确显示和交互。它与窗口管理器的其他组件进行通信,如处理窗口状态变化、更新窗口属性等。
- 绘制窗口装饰:
-
DragAndDropIconItem:用于表示拖放操作中的图标项。
DragAndDropIconItem
类具有以下主要功能:- 显示拖动图标:
DragAndDropIconItem
负责在拖放操作期间显示拖动的图标。它可以根据拖动的数据类型和内容,在拖放过程中实时更新图标的位置和外观。 - 响应用户交互:
DragAndDropIconItem
监听用户的鼠标事件,以便处理拖放操作的交互。它可以捕获鼠标点击和移动事件,并根据用户的操作更新图标的位置和状态。 - 样式定制:
DragAndDropIconItem
提供了一些方法和属性,用于定制拖动图标的样式。可以设置图标的外观、大小、透明度等,以满足特定的视觉需求。 - 拖放管理:
DragAndDropIconItem
与拖放管理器紧密配合,以确保拖放操作的正确进行。它与拖放管理器的其他组件进行通信,如处理拖放事件、更新拖放数据等。
- 显示拖动图标:
-
ImageItem:用于在窗口管理器中显示图像的图元(item)。在窗口界面中展示静态或动态的图像内容。
ImageItem
类具有以下主要功能:- 显示图像:
ImageItem
负责加载和显示图像内容。它可以从文件、内存或其他数据源中加载图像,并将其呈现在窗口界面中。 - 样式定制:
ImageItem
提供了一系列属性和方法,以定制图像的外观。可以设置图像的位置、大小、透明度等,以满足特定的界面需求。 - 动画效果:
ImageItem
支持动画效果,可以创建和控制图像的动态变化。可以通过设置动画属性、指定关键帧等方式实现图像的平滑过渡和动态效果。 - 交互响应:
ImageItem
可以监听用户的输入事件,例如鼠标点击、悬停等,以响应用户的交互操作。可以通过设置事件处理函数来实现与图像相关的交互逻辑。
-
ImageItemOpenGL:用于在基于 OpenGL 的渲染环境中显示图像。它扩展了
ImageItem
,以利用 OpenGL 加速渲染图像内容,提高性能和效率。ImageItemOpenGL
类主要通过以下方式与 OpenGL 进行交互:- 创建和管理 OpenGL 纹理:在 OpenGL 环境中,图像数据通常以纹理的形式存储和处理。
ImageItemOpenGL
负责将图像数据转换为 OpenGL 纹理,并管理纹理的创建、绑定和释放。 - 利用 OpenGL 着色器进行渲染:OpenGL 着色器是一种可编程的图形处理单元,用于控制图像的渲染方式。
ImageItemOpenGL
使用合适的着色器来处理图像的渲染过程,包括纹理采样、颜色处理等操作。 - OpenGL 相关配置和状态管理:
ImageItemOpenGL
负责管理 OpenGL 的相关配置和状态,以确保图像的正确渲染。它会设置适当的 OpenGL 上下文、纹理过滤方式、混合模式等参数,以获得所需的渲染效果。
- 创建和管理 OpenGL 纹理:在 OpenGL 环境中,图像数据通常以纹理的形式存储和处理。
- 显示图像:
-
ShadowItem:用于在窗口周围绘制阴影效果。它负责在窗口边界绘制模糊和透明的阴影,以增加窗口的立体感和层次感。
ShadowItem
类主要通过以下方式实现阴影效果:- 绘制阴影纹理:
ShadowItem
使用一个单独的纹理来存储阴影的图像数据。这个纹理的尺寸比窗口的尺寸稍大,以容纳阴影的边界部分。 - 使用模糊效果:为了实现阴影的柔和效果,
ShadowItem
会对阴影纹理应用模糊滤镜。这通常涉及到高斯模糊算法,通过对纹理进行多次模糊处理,使阴影边界变得更加平滑。 - 绘制阴影形状:
ShadowItem
根据窗口的几何形状计算阴影的形状,并将其绘制到窗口周围。通常,阴影形状会比窗口的形状稍大,以便在渲染时能够覆盖窗口的边界。 - 控制阴影的显示与隐藏:
ShadowItem
根据窗口的状态和属性来控制阴影的显示与隐藏。当窗口处于激活状态或需要显示阴影时,ShadowItem
将进行渲染;否则,阴影将被隐藏。
- 绘制阴影纹理:
-
SurfaceItem:用于在窗口管理器中绘制和管理窗口的可见内容。它代表了一个窗口的图形表面,并负责将窗口的内容绘制到屏幕上。
SurfaceItem
类主要实现以下功能:- 窗口内容的绘制:
SurfaceItem
将窗口的图形内容绘制到屏幕上。它通过与窗口管理器和图形系统的交互,获取窗口的图形数据并进行绘制操作。这包括窗口的背景、边框、标题栏、窗口内容等。 - 窗口的可见性控制:
SurfaceItem
根据窗口的可见性状态来决定是否绘制窗口的内容。当窗口被最小化、隐藏或关闭时,SurfaceItem
会相应地调整窗口内容的绘制。 - 窗口位置和大小的管理:
SurfaceItem
根据窗口的位置和大小信息,将窗口内容绘制到正确的位置上。它通过与窗口管理器的交互,获取窗口的几何信息,并在屏幕上适当的位置上绘制窗口内容。 - 窗口的输入事件处理:
SurfaceItem
负责处理与窗口相关的输入事件,例如鼠标点击、键盘输入等。它将这些事件传递给窗口管理器进行处理,以便正确地处理窗口的交互操作。
-
SurfaceItemInternal:管理与窗口相关的内部表面。它负责处理和绘制窗口的内容,并与显示器进行交互。
SurfaceItemInternal类的功能包括:
- 渲染窗口内容:SurfaceItemInternal负责将窗口的内容渲染到内部表面上,以便在屏幕上显示。
- 窗口属性管理:它可能包含与窗口相关的属性信息,如位置、大小、透明度等。SurfaceItemInternal负责管理和更新这些属性,以确保窗口在屏幕上正确位置和呈现效果。
- 窗口事件处理:SurfaceItemInternal处理与窗口相关的输入事件,如鼠标点击、键盘输入等。它将这些事件传递给正确的窗口处理逻辑,以实现窗口的交互功能。
- 窗口状态管理:它可能维护窗口的状态信息,如最大化、最小化、焦点状态等。SurfaceItemInternal跟踪并管理窗口的状态变化,并相应地更新内部表面的显示。
-
SurfaceItemWayland:用于在Wayland环境下管理和呈现Wayland表面(surface)的窗口项。
该类主要提供以下功能:
- Wayland表面管理:
SurfaceItemWayland
与Wayland服务器通信,接收有关Wayland表面的更新信息。它通过使用Wayland协议和相应的接口,获取表面的位置、大小、可见性等属性。 - 窗口绘制:根据接收到的表面更新信息,
SurfaceItemWayland
负责将Wayland表面的内容绘制到屏幕上。它使用底层的渲染引擎(如OpenGL或QPainter)执行绘制操作。 - 事件处理:
SurfaceItemWayland
处理与Wayland表面相关的用户输入事件,例如鼠标点击、拖拽和键盘输入等。它将这些事件传递给相应的处理程序,以便进行适当的响应和处理。 - 窗口状态管理:
SurfaceItemWayland
跟踪Wayland表面的状态,例如焦点状态、活动状态和最大化状态等。根据表面的状态,它相应地调整窗口项的外观和行为。
-
SurfaceItemXwayland:用于在X11窗口管理器下管理和呈现XWayland窗口的窗口项。
该类主要提供以下功能:
- XWayland窗口管理:
SurfaceItemXwayland
与XWayland服务器通信,接收有关XWayland窗口的更新信息。它通过与X11协议交互,获取窗口的位置、大小、可见性等属性。 - 窗口绘制:根据接收到的窗口更新信息,
SurfaceItemXwayland
负责将XWayland窗口的内容绘制到屏幕上。它使用底层的渲染引擎(如OpenGL或QPainter)执行绘制操作。 - 事件处理:
SurfaceItemXwayland
处理与XWayland窗口相关的用户输入事件,例如鼠标点击、拖拽和键盘输入等。它将这些事件传递给相应的处理程序,以便进行适当的响应和处理。 - 窗口状态管理:
SurfaceItemXwayland
跟踪XWayland窗口的状态,例如焦点状态、活动状态和最大化状态等。根据窗口的状态,它相应地调整窗口项的外观和行为。
- XWayland窗口管理:
- Wayland表面管理:
-
SurfaceItemX11:用于在X11窗口管理器下管理和呈现X11窗口的窗口项。
该类主要提供以下功能:
- X11窗口管理:
SurfaceItemX11
与X11窗口系统通信,接收有关X11窗口的更新信息。它通过与X11窗口系统交互,获取窗口的位置、大小、可见性等属性。 - 窗口绘制:根据接收到的窗口更新信息,
SurfaceItemX11
负责将X11窗口的内容绘制到屏幕上。它使用底层的渲染引擎(如OpenGL或QPainter)执行绘制操作。 - 事件处理:
SurfaceItemX11
处理与X11窗口相关的用户输入事件,例如鼠标点击、拖拽和键盘输入等。它将这些事件传递给相应的处理程序,以便进行适当的响应和处理。 - 窗口状态管理:
SurfaceItemX11
跟踪X11窗口的状态,例如焦点状态、活动状态和最大化状态等。根据窗口的状态,它相应地调整窗口项的外观和行为。
- X11窗口管理:
- 窗口内容的绘制:
-
SurfacePixmap:通常用于描述在图形编程中表示窗口或图像的位图数据。
SurfacePixmap
类包含以下主要功能:- 像素数据:
SurfacePixmap
保存窗口的像素数据,包括绘制内容和透明度。它可以存储像素数据的指针或使用图形库提供的数据结构,如QPixmap
或QImage
。 - 大小和几何信息:
SurfacePixmap
记录窗口的大小和几何信息,用于正确绘制窗口的位置和大小。 - 绘制操作:
SurfacePixmap
提供了绘制和更新像素数据的方法。它可以接收绘制命令,并将绘制的结果存储在像素数据中。 - 缓存管理:
SurfacePixmap
可以管理绘制数据的缓存,以提高绘制性能。它可以根据需要创建和销毁缓存,并在窗口的大小或内容发生变化时更新缓存。
- 像素数据:
-
WindowItem:用于表示窗口的图形化项。
WindowItem
类的主要功能包括:- 窗口绑定:
WindowItem
可以与一个具体的窗口进行绑定,从而在图形界面中显示该窗口的内容和状态。它可以通过与窗口相关联的ID或句柄来确定绑定的窗口。 - 位置和大小控制:
WindowItem
可以控制窗口的位置和大小。它可以通过属性或方法来设置窗口的位置坐标、宽度和高度,从而实现窗口的移动和调整大小操作。 - 窗口状态管理:
WindowItem
可以管理窗口的状态,包括最小化、最大化、激活等状态。它可以响应用户的操作或接收来自窗口管理器的信号,以更新窗口的状态并反映在图形界面中。 - 窗口样式和装饰:
WindowItem
可以应用窗口的样式和装饰效果,使其在图形界面中呈现出正确的外观。它可以绘制窗口的边框、标题栏和其他装饰元素,并根据窗口的状态进行相应的更新。
-
WindowItemX11:用于在X11窗口系统下显示和操作窗口。
WindowItemX11
类的主要功能包括:- X11窗口绑定:通过与X11窗口系统交互,
WindowItemX11
可以与一个具体的X11窗口进行绑定。它可以通过与窗口相关联的窗口ID或句柄来确定绑定的窗口。 - X11窗口属性获取:
WindowItemX11
可以获取与X11窗口相关的属性,例如窗口的标题、类名、窗口类型等。这些属性可以用于在图形界面中显示窗口的信息。 - X11窗口操作:
WindowItemX11
可以执行与X11窗口相关的操作,例如移动窗口、调整窗口大小、最小化、最大化等。它可以与窗口管理器进行交互,并通过X11协议发送相应的请求以执行这些操作。
- X11窗口绑定:通过与X11窗口系统交互,
-
WindowItemWayland:用于在Wayland窗口系统下显示和操作窗口。
WindowItemWayland
类的主要功能包括:- Wayland窗口绑定:通过与Wayland窗口系统交互,
WindowItemWayland
可以与一个具体的Wayland窗口进行绑定。它可以通过与窗口相关联的窗口ID或对象来确定绑定的窗口。 - Wayland窗口属性获取:
WindowItemWayland
可以获取与Wayland窗口相关的属性,例如窗口的标题、应用程序ID、窗口类型等。这些属性可以用于在图形界面中显示窗口的信息。 - Wayland窗口操作:
WindowItemWayland
可以执行与Wayland窗口相关的操作,例如移动窗口、调整窗口大小、最小化、最大化等。它可以与窗口管理器进行交互,并通过Wayland协议发送相应的请求以执行这些操作。
- Wayland窗口绑定:通过与Wayland窗口系统交互,
-
WindowItemInternal:作用是为窗口的可视化表示提供基本的功能和行为。它充当了窗口在KWin场景中的代理,负责处理与窗口相关的绘制、交互和布局等任务。
具体而言,WindowItemInternal类的功能包括:
- 绘制窗口内容:它负责将窗口的可视化内容绘制到屏幕上。这包括窗口的边框、标题栏、客户区等。WindowItemInternal管理窗口的绘制过程,使用相关的样式、装饰和主题来确保窗口的外观一致性。
- 处理窗口事件:WindowItemInternal处理与窗口相关的输入事件,如鼠标点击、键盘输入等。它将这些事件传递给正确的窗口处理逻辑,以实现窗口的交互功能。
- 窗口布局管理:它可能负责管理窗口在KWin场景中的布局。这包括确定窗口的位置、大小、层级关系等。WindowItemInternal根据窗口管理策略和布局规则,将窗口放置在适当的位置,并处理窗口的堆叠顺序。
- 窗口状态管理:它可能维护窗口的状态信息,如最大化、最小化、焦点状态等。WindowItemInternal跟踪并管理窗口的状态变化,并相应地更新窗口的可视化表示。
- 窗口绑定:
- 绘制和显示:
2.3 scene
-
Scene:用于管理窗口的绘制和呈现
Scene
类的主要职责包括:- 窗口管理:
Scene
负责管理窗口的创建、关闭和显示。它与窗口管理器和窗口系统进行通信,处理窗口的生命周期事件,例如窗口的创建、关闭和销毁。 - 窗口绘制:
Scene
负责窗口的绘制操作。它根据窗口的位置、大小和绘制属性,将窗口的内容绘制到屏幕上。这包括窗口的边框、标题栏、内容区域等部分的绘制。 - 窗口层叠管理:
Scene
负责管理窗口的层叠关系。它确定窗口的显示顺序和层叠顺序,确保窗口在屏幕上正确显示,并处理窗口的叠放顺序变化。 - 窗口布局:
Scene
负责窗口的布局管理。它根据窗口的位置、大小和布局策略,计算窗口的布局信息,并将窗口放置在正确的位置上。 - 窗口的交互和事件处理:
Scene
监听窗口的输入事件,并将其传递给相应的窗口处理程序。它处理鼠标事件、键盘事件和其他与窗口交互相关的事件,以实现窗口的交互功能。
-
WorkspaceScene:负责管理整个工作区的窗口绘制和布局
WorkspaceScene
类的主要职责包括:- 窗口布局:
WorkspaceScene
负责计算和管理工作区中各个窗口的布局。它根据窗口的位置、大小和布局策略,确定窗口在工作区中的位置,并处理窗口的布局变化。 - 窗口的层叠管理:
WorkspaceScene
负责管理工作区中窗口的层叠关系。它确定窗口的显示顺序和层叠顺序,确保窗口在工作区中正确显示,并处理窗口的叠放顺序变化。 - 背景绘制:
WorkspaceScene
负责绘制工作区的背景。它可以绘制桌面壁纸、面板、工具栏等工作区的背景元素。 - 窗口切换和焦点管理:
WorkspaceScene
处理窗口的切换和焦点管理。它管理当前活动窗口和焦点窗口,并处理窗口切换和焦点变化的相关操作。 - 窗口动画:
WorkspaceScene
可以处理窗口动画效果,例如窗口的出现、关闭、最小化和最大化时的动画效果。
-
WorkspaceSceneOpenGL:用于 OpenGL 渲染的工作区场景,负责在支持 OpenGL 加速的环境中进行窗口绘制和布局
WorkspaceSceneOpenGL
类具有以下主要功能:- OpenGL 渲染:
WorkspaceSceneOpenGL
使用 OpenGL 进行窗口的绘制和渲染。它通过 OpenGL API 调用来实现窗口的绘制操作,利用 GPU 加速来提高绘制性能和效果。 - 硬件加速:
WorkspaceSceneOpenGL
利用 GPU 的硬件加速能力,可以在支持 OpenGL 的系统上实现更流畅的窗口绘制和动画效果。它能够利用 GPU 的并行处理能力和专门的图形硬件,提供更高的渲染性能和更复杂的视觉效果。 - OpenGL 上下文管理:
WorkspaceSceneOpenGL
负责管理 OpenGL 上下文的创建和销毁,以及与其他 OpenGL 相关的资源管理。它确保在合适的时机创建和销毁 OpenGL 上下文,并正确管理 OpenGL 资源的生命周期。
- OpenGL 渲染:
-
WorkspaceSceneQPainter:用于 QPainter 进行渲染的工作区场景,负责在不支持或不启用 OpenGL 加速的环境中进行窗口绘制和布局。
WorkspaceSceneQPainter
类具有以下主要功能:- QPainter 渲染:
WorkspaceSceneQPainter
使用 QPainter 进行窗口的绘制和渲染。QPainter 是 Qt 提供的跨平台的 2D 绘图引擎,它能够在不依赖特定硬件加速的情况下进行窗口绘制和效果渲染。 - 软件渲染:
WorkspaceSceneQPainter
使用软件渲染技术来处理窗口的绘制和布局。它利用 CPU 进行计算和绘制操作,而不依赖于 GPU 的硬件加速能力。这种软件渲染方式在不支持或不启用 OpenGL 加速的系统上提供基本的窗口渲染功能。 - QPainter 上下文管理:
WorkspaceSceneQPainter
负责管理 QPainter 上下文的创建和销毁,以及与其他 QPainter 相关的资源管理。它确保在合适的时机创建和销毁 QPainter 上下文,并正确管理 QPainter 资源的生命周期。
- QPainter 渲染:
- 窗口布局:
-
CursorScene:用于管理和渲染鼠标光标的场景。它负责跟踪和更新鼠标光标的位置,并在屏幕上正确绘制光标
CursorScene
类具有以下主要功能:- 光标位置跟踪:
CursorScene
跟踪鼠标光标在屏幕上的位置。它接收来自输入设备的光标移动事件,并根据这些事件更新光标的位置。 - 光标渲染:
CursorScene
使用渲染器来绘制光标。它可以使用 OpenGL 渲染器或 QPainter 渲染器进行绘制,具体取决于 KWin 的配置和系统支持的渲染方式。 - 光标样式管理:
CursorScene
管理光标的样式。它可以根据应用程序的要求或系统设置更改光标的外观。光标样式包括形状、颜色、大小等。 - 光标动画效果:
CursorScene
可以应用动画效果来使光标的移动更加平滑和流畅。它可以使用过渡效果、缓动函数等技术来实现光标的动画化。
- 光标位置跟踪:
- 窗口管理:
3、事件传递流程
3.1 事件整体流程
- 输入事件的捕获:底层窗口系统(如X11或Wayland)通过事件循环机制捕获输入事件,如鼠标点击、键盘按键等
- 事件分发:底层窗口系统将事件传递给KWin的事件过滤器链。这是一系列事件过滤器的链表,每个过滤器都有机会检查并处理事件,或将事件传递给下一个过滤器
- 输入设备处理:Compositor将事件传递给当前的输入设备对象,如鼠标设备和键盘设备。输入设备对象会处理事件并根据需要更新内部状态,如鼠标位置或键盘按键状态
- 窗口事件传递:如果事件与窗口交互相关,Compositor将事件传递给受影响的窗口
- 窗口事件处理:在受影响窗口中,窗口对象会执行事件处理方法
- 窗口绘制:在事件处理过程中,窗口可能会请求外观更改或内容更新
- 窗口管理事件:除了与特定窗口交互相关的事件之外,还有一些与窗口管理相关的事件,如窗口焦点变化、虚拟桌面切换等。
- 事件传递到底层窗口系统:在事件处理完毕后,Compositor将事件传递回底层窗口系统,以确保事件在整个窗口系统中正确传递和处理
3.2 事件传递时序图
4、事件流程样例
4.1 鼠标拖动修改窗口大小
- 鼠标按下事件(Mouse Press Event):当用户按下鼠标按钮时,底层窗口系统(如X11或Wayland)捕获该事件。
- 事件分发:底层窗口系统将事件传递给KWin的事件过滤器。
- 窗口选择:Compositor确定鼠标事件发生的位置,并确定受影响的窗口。遍历窗口树来找到包含鼠标位置的窗口。
- 捕获鼠标输入:Compositor将鼠标输入焦点设置为拖动窗口大小的目标窗口。这样,后续的鼠标移动事件将直接发送到目标窗口。
- 鼠标移动事件(Mouse Move Event):当用户拖动鼠标时,底层窗口系统捕获鼠标移动事件。
- 事件分发:底层窗口系统将鼠标移动事件传递给KWin的事件过滤器。
- 窗口大小调整:Compositor根据鼠标移动的位置和方式计算出窗口的新大小。
- 更新窗口外观:Compositor更新目标窗口的外观以反映新的大小。
- 窗口绘制:Compositor将更新后的窗口视图提交到屏幕缓冲区,以便在屏幕上呈现新的窗口大小。
- 鼠标释放事件(Mouse Release Event):当用户释放鼠标按钮时,底层窗口系统捕获鼠标释放事件。
- 事件分发:底层窗口系统将鼠标释放事件传递给KWin的事件过滤器。
- 释放鼠标输入焦点:Compositor释放窗口的鼠标输入焦点,完成窗口大小调整操作。
- 事件传递到底层窗口系统:在事件处理完成后,KWin将事件传递回底层窗口系统,以确保事件在整个窗口系统中正确传递和处理。
4.2 鼠标样式修改
- 鼠标移动事件(Mouse Move Event):当用户移动鼠标时,底层窗口系统捕获鼠标移动事件。
- 事件分发:底层窗口系统将鼠标移动事件传递给KWin的事件过滤器。
- 窗口选择:Compositor确定鼠标事件发生的位置,并确定受影响的窗口。遍历窗口树来找到包含鼠标位置的窗口。
- 捕获鼠标输入:Compositor将鼠标输入焦点设置为拖动窗口大小的目标窗口。这样,后续的鼠标移动事件将直接发送到目标窗口。
- 鼠标状态变更:如果鼠标悬浮在窗口边框上,Compositor将鼠标的状态设置为拖拽状态。这通常通过操作底层窗口系统提供的接口来实现。
- 窗口边框样式变更:Compositor可能会根据拖拽状态来改变窗口边框的外观,以提供视觉反馈。
- 窗口绘制:Compositor将更新后的窗口视图提交到屏幕缓冲区,以呈现新的窗口外观和鼠标状态。
- 鼠标离开边框检测:如果鼠标移出了窗口边框区域,Compositor将鼠标状态恢复为默认状态。
- 事件传递到底层窗口系统:在事件处理完成后,KWin将事件传递回底层窗口系统,以确保事件在整个窗口系统中正确传递和处理。