QNX screen使用介绍 第四章

5 篇文章 14 订阅

十、screen 剪辑缓冲区

当根据需求只需要显示一个指定的区域时,如图所示,可以在一个大的缓冲区中剪辑一个特定的区域用于显示。注意,只能剪辑一个矩形

 

  • 设置窗口缓冲区和源尺寸
 int src_size[2] = {1920, 720};
 
 screen_set_window_property_iv(screen_window, SCREEN_PROPERTY_BUFFER_SIZE, src_size);
 screen_set_window_property_iv(screen_window, SCREEN_PROPERTY_SOURCE_SIZE, src_size);
  • 设置剪辑尺寸 
 int clip_size[2] = {1280, 720};
 
 screen_set_window_property_iv(screen_window, SCREEN_PROPERTY_SOURCE_CLIP_SIZE, clip_size);
  • 设置剪辑相对偏移位置 
 int clip_pos[2] = {0, 0};
 
 screen_set_window_property_iv(screen_window, SCREEN_PROPERTY_SOURCE_CLIP_POSITION, clip_pos);
  • 设置显示窗口尺寸 
 int size[2] = {1280, 720};
 
 screen_set_window_property_iv(screen_window, SCREEN_PROPERTY_SIZE, size);

十一、Input Event

输入事件表示某种形式的用户与应用程序的交互。Screen支持多种输入事件,包括键盘,鼠标,触摸,手柄,手势等,这里主要介绍触摸事件

  • 创建一个event,以便事件数据的填充 
 screen_event_t screen_ev;

 screen_create_event(&screen_ev);
  • 等待screen事件。这里需要和screen context关联,此函数为阻塞函数,第三个参数为超时时间,单位为ns-1表示事件准备就绪之前不返回。 
 screen_get_event(screen_ctx, screen_ev, -1);
  • 等待screen事件。这里需要和screen context关联,此函数为阻塞函数,第三个参数为超时时间,单位为ns-1表示事件准备就绪之前不返回。 
 int type;

 screen_get_event_property_iv(screen_ev, SCREEN_PROPERTY_TYPE, &type);

enum {

    SCREEN_EVENT_NONE = 0,

    SCREEN_EVENT_CREATE = 1,

    SCREEN_EVENT_PROPERTY = 2,

    SCREEN_EVENT_CLOSE = 3,

    SCREEN_EVENT_INPUT = 4,

    SCREEN_EVENT_JOG = 5,

    SCREEN_EVENT_POINTER = 6,

    SCREEN_EVENT_KEYBOARD = 7,

    SCREEN_EVENT_USER = 8,

    SCREEN_EVENT_POST = 9,

    SCREEN_EVENT_DISPLAY = 11,

    SCREEN_EVENT_IDLE = 12,

    SCREEN_EVENT_UNREALIZE = 13,

    SCREEN_EVENT_GAMEPAD = 14,

    SCREEN_EVENT_JOYSTICK = 15,

    SCREEN_EVENT_DEVICE = 16,

    SCREEN_EVENT_INPUT_CONTROL = 17,

    SCREEN_EVENT_GESTURE = 18,

    SCREEN_EVENT_MANAGER = 19,

    SCREEN_EVENT_MTOUCH_PRETOUCH = 99,

    SCREEN_EVENT_MTOUCH_TOUCH = 100,

    SCREEN_EVENT_MTOUCH_MOVE = 101,

    SCREEN_EVENT_MTOUCH_RELEASE = 102

};

 SCREEN_EVENT_MTOUCH_TOUCH: 检测到touchpress事件

SCREEN_EVENT_MTOUCH_MOVE: 检测到touchmove事件

SCREEN_EVENT_MTOUCH_RELEASE: 检测到touchrelease事件

  • 获取事件的坐标位置,对于触摸就是{xy}轴坐标 
 int cur_pos[2];

 screen_get_event_property_iv(screen_ev, SCREEN_PROPERTY_POSITION, cur_pos);
  • 获取多点触摸的id,也就是按压的手指的id 
 int touch_id;

 screen_get_event_property_iv(screen_ev, SCREEN_PROPERTY_TOUCH_ID, &touch_id);

触摸事件一般是需要和display绑定的,也就是在使能一个mtouch时,需要指定display id,那么在使用Event获取触摸事件时,也是需要创建一个screen窗口用于获取指定窗口中的触发的触摸事件。

如果触摸事件不需要和display绑定,需要在使能mtouch时加上 -r 参数,这样会创建一个/dev/mtouch/touch_display0的节点,通过read此节点获取触摸事件。

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个简单的 QNX Screen 使用范例,用于创建一个窗口并显示一段文本: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <screen/screen.h> int main(int argc, char **argv) { // 创建屏幕上下文 screen_context_t context; screen_create_context(&context, 0); // 创建屏幕窗口 screen_window_t window; screen_create_window(&window, context); // 设置窗口大小和位置 int size[2] = {640, 480}; int pos[2] = {0, 0}; screen_set_window_property_iv(window, SCREEN_PROPERTY_SIZE, size); screen_set_window_property_iv(window, SCREEN_PROPERTY_POSITION, pos); // 将窗口提交到屏幕显示 screen_post_window(window, context, 0); // 显示文本 char *text = "Hello, QNX Screen!"; int len = strlen(text); int font_size = 24; int text_color[4] = {255, 255, 255, 255}; int bg_color[4] = {0, 0, 0, 255}; int text_pos[2] = {100, 100}; screen_buffer_t buf; screen_create_window_buffers(window, 1); screen_get_window_property_pv(window, SCREEN_PROPERTY_RENDER_BUFFERS, (void **)&buf); screen_fill(ctx, buf, bg_color); screen_draw_text(ctx, buf, text, len, text_pos[0], text_pos[1], SCREEN_TEXT_ALIGNMENT_LEFT, font_size, text_color); // 将绘制的内容提交到屏幕显示 int rect[4] = {0, 0, size[0], size[1]}; screen_post_window(window, buf, 1, rect, 0); // 等待用户输入 getchar(); // 销毁窗口和上下文 screen_destroy_window(window); screen_destroy_context(context); return 0; } ``` 以上代码中,首先使用 `screen_create_context()` 函数创建一个屏幕上下文,然后使用 `screen_create_window()` 函数创建一个窗口,并设置窗口大小和位置。接下来,使用 `screen_post_window()` 函数将窗口提交到屏幕显示。 然后,使用 `screen_draw_text()` 函数在窗口中绘制一段文本,并使用 `screen_post_window()` 函数将绘制的内容提交到屏幕显示。最后,使用 `getchar()` 函数等待用户输入,销毁窗口和上下文后返回。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值