QNX screen使用介绍 第四章

十、screen 剪辑缓冲区

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

QNX screen使用介绍 第四章_第1张图片

 

  • 设置窗口缓冲区和源尺寸
 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此节点获取触摸事件。

 

你可能感兴趣的:(QNX,screen)