VIS_CONSCURSOR
VIS_CONSCURSOR
ioctl 命令可显示或隐藏光标。以下代码中显示了 vis_conscursor 结构。
struct vis_conscursor { screen_pos_t row; /* Row to display cursor (in pixels) */ screen_pos_t col; /* Col to display cursor (in pixels) */ screen_size_t width; /* Width of cursor (in pixels) */ screen_size_t height; /* Height of cursor (in pixels) */ color_t fg_color; /* Foreground color */ color_t bg_color; /* Background color */ short action; /* Show or Hide cursor */ };
要在控制台帧缓存器驱动程序中实现 VIS_CONSCOPY
ioctl 命令,请按照下面的通用步骤操作:
从内核终端仿真器复制 vis_conscursor 结构。
验证显示参数。如果任一显示参数超出范围,则会返回错误。
使所有用户上下文无效,以使用户应用程序不能通过用户内存映射同时访问帧缓存器硬件。在轮询式 I/O 模式下,既不允许也没有必要执行此步骤,因为用户应用程序并没有运行。请务必持有锁,以便在完成 VIS_CONSDISPLAY
ioctl 之前,用户无法通过缺页恢复映射。
终端仿真器可通过以下两个操作之一调用 VIS_CONSCOPY
ioctl: SHOW_CURSOR
和 HIDE_CURSOR
。以下步骤介绍如何通过读取和写入视频内存实现此功能。您可能也可使用呈现引擎来完成此工作。是否能够使用呈现引擎取决于帧缓存器硬件。
执行以下步骤可实现 SHOW_CURSOR
功能:
将像素保存到要在其中绘制光标的矩形内。隐藏光标时将需要使用这些保存的像素。
扫描要在其中绘制光标的矩形界定的屏幕上的所有像素。在此矩形中,将与指定光标前景色 (fg_color) 匹配的像素替换为白色像素。将与指定光标背景色 (bg_color) 匹配的像素替换为黑色像素。视觉效果为黑色光标悬停在白色文本上。此方法适用于文本的任何前景色和背景色。尝试根据色彩表位置进行反色是不切实际的。也没有必要使用更复杂的策略,例如使用 HSB(Hue, Saturation, Brightness,色调、饱和度和亮度)色彩模式进行反色。
要实现 HIDE_CURSOR
功能,请将光标矩形下方的像素替换为通过前面的 SHOW_CURSOR
操作保存的像素。