GUI源代码是什么样的?

时间:2017-10-06 19:06:32

标签: user-interface low-level

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

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

请原谅我的多个问题。我已经做了一些环顾四周,但我还没有找到任何关于GUI如何在低级工作的良好来源,以及这些指令的外观。

1 个答案:

答案 0 :(得分:0)

不,任何体面的GUI都不会遍历在忙等待循环中轮询鼠标位置和按钮状态的每个元素。

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

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

如果需要,它会向用户点击的窗口发送一个事件,例如。

客户端向服务器注册它想要了解的事件,并使用系统调用/ GUI库函数来等待事件。这就像在网络套接字上,或在串行端口上等待数据的过程。在使用X11的Linux中,它实际上套接字(在X服务器和客户端之间)并使用完全相同的系统selectpollepoll系统调用等待事件,因为它会等待网络数据。实际上,它可以通过等待多个文件描述符在一个线程中同时等待两个。请参阅poll(2)

当客户端获取事件时,它会找出哪个按钮或文本框或者事件的用途,并运行在创建按钮时先前注册的回调函数。

在某些GUI系统中,客户端进程可以告诉服务器其按钮,因此服务器会检查边界框矩形,而不是发送有关每个鼠标事件的消息,以便客户端进行整理。

  

GPU的图像是什么样的?它们只是2D矩阵吗?

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

  

每个时钟周期更新一次?

不,如果他们没有移动或改变,那就不行了!