当根据需求只需要显示一个指定的区域时,如图所示,可以在一个大的缓冲区中剪辑一个特定的区域用于显示。注意,只能剪辑一个矩形
- 设置窗口缓冲区和源尺寸
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);
输入事件表示某种形式的用户与应用程序的交互。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: 检测到touch的press事件
SCREEN_EVENT_MTOUCH_MOVE: 检测到touch的move事件
SCREEN_EVENT_MTOUCH_RELEASE: 检测到touch的release事件
- 获取事件的坐标位置,对于触摸就是{x,y}轴坐标
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此节点获取触摸事件。