2017-10-06 99 views
-3

我想知道GUI元素的外观如何?我猜想最基本的代码将是操作系统代码的一部分?GUI源代码是什么样的?

我对此感到好奇的最大原因是因为我想知道每个GUI元素需要处理多少。例如。每个按钮是否按每个时钟周期是否被按下?图像对于GPU来说是什么样的?他们只是2D矩阵,每个时钟周期都更新一次?

原谅我在一个多个问题。我已经做了一些四处寻找,但我还没有找到GUI的低级工作方式,以及这些指令的外观。

+0

有它:https:// github。com/GNOME/gtk – ceejayoz

+0

你真是太过于复杂了。像素是RAM中的位或字节,逻辑读取并转换为显示器的正确信号。一个按钮只是像素。点击它与显示器或像素无关,它是具有计算x/y的输入设备,该软件映射到gui以找到软件反应的按钮的边界框。并根据需要制作新的像素。 –

+0

为什么倒票?这是我的第一个问题,所以如果有更好的方式可以说出这个问题,我会很感激建设性的批评。 – Shaws34

回答

0

不,任何象样的图形用户界面都不会遍历每个元素在忙等待循环中轮询鼠标位置和按钮状态。

当事情发生时,最常见的设计会向客户端进程发送事件。他们等待它们并运行回调函数以响应用户操作。

通常有一个GUI服务器(内置于“操作系统”(Windows)或运行在用户空间进程(Linux上的X服务器))与物理和虚拟鼠标/键盘进行对话,并将其转换为虚拟鼠标指针的位置/按钮状态更新。

例如,当需要时,它将事件发送到客户端进程的用户所点击的窗口。

客户端向服务器注册它想知道的事件,并使用系统调用/ GUI库函数等待事件。这就像一个等待网络套接字或串口上的数据的进程。在使用X11的Linux中,它实际上是插座(位于X服务器和客户端之间),并使用与系统调用完全相同的系统selectpollepoll来等待事件,因为它将等待网络数据。实际上,它可以通过等待多个文件描述符在一个线程中同时等待两者。见poll(2)


当客户端得到一个事件,它指出哪个按钮或文本框或任何事件是,并运行时被创建按钮较早注册的回调函数。

在一些GUI系统中,客户端进程可以告诉服务器它的按钮,所以服务器检查边界框矩形,而不是发送有关客户端的每个鼠标事件的消息以进行分类。


图像看起来像在GPU什么?他们只是2D矩阵,

是的,或多或少。例如参见https://www.khronos.org/opengl/wiki/Image_Format。 GPU硬件本身可以处理几种不同格式的图像,如各种宽度(比特深度)的RGBA或YUV。

每个时钟周期更新一次?

不,如果他们没有移动或改变!