首页 > 代码库 > SPICE协议----光标通道定义

SPICE协议----光标通道定义

1  指针通道定义

SPICE协议定义了一组消息用来控制光标在远程桌面显示区域的形状和位置。光标位置消息和客户端鼠标模式是无关的。SPICE协议还定义了一组消息用来管理在客户端侧的光标形状缓存。客户端必须严格遵守所有的指令。服务器发送SPICE_MSG_CURSOR_INIT消息设置当前指针状态(形状,位置,能见度)和清楚缓存,后续会发送除初始化之外的其他命令。服务器可以发送SPICE_MSG_CURSOR_RESET消息将禁用指针及重置光标缓存。此消息后SPICE_MSG_CURSOR_INIT是有效的。

1.1.1服务器—》客户端

enum {
    SPICE_MSG_CURSOR_INIT = 101,
    SPICE_MSG_CURSOR_RESET,
    SPICE_MSG_CURSOR_SET,
    SPICE_MSG_CURSOR_MOVE,
    SPICE_MSG_CURSOR_HIDE,
    SPICE_MSG_CURSOR_TRAIL,
    SPICE_MSG_CURSOR_INVAL_ONE,
    SPICE_MSG_CURSOR_INVAL_ALL,
 
    SPICE_MSG_END_CURSOR
};


1.1.2  光标类型

typedef enumSpiceCursorType {
SPICE_CURSOR_TYPE_ALPHA,
//数据包含pre-multiplied ARGB8888象素映射。线跨越<宽度* 4 >
    SPICE_CURSOR_TYPE_MONO,
    SPICE_CURSOR_TYPE_COLOR4,
    SPICE_CURSOR_TYPE_COLOR8,
    SPICE_CURSOR_TYPE_COLOR16,
    SPICE_CURSOR_TYPE_COLOR24,
    SPICE_CURSOR_TYPE_COLOR32,
    SPICE_CURSOR_TYPE_ENUM_END
}SpiceCursorType;


1.1.3  SpiceCursorFlags定义

typedef enumSpiceCursorFlags {
SPICE_CURSOR_FLAGS_NONE = (1 << 0),
//设置无效
SPICE_CURSOR_FLAGS_CACHE_ME = (1 << 1),
//客户端应该将这个形状添加到缓存
    SPICE_CURSOR_FLAGS_FROM_CACHE = (1 <<2),
         //客户端应该从光标缓存中获取光标的形状。SpiceCursorHeader结构体中其他字段除了unique都是无效的。
    SPICE_CURSOR_FLAGS_MASK = 0x7
} SpiceCursorFlags;


1.1.4  SpiceCursorHeader结构体

typedef structSpiceCursorHeader {
    uint64_t unique; //对应光标形状的唯一标示,用于在缓存中存储或检索
    uint16_t type;  //光标类型
    uint16_t width; //光标的宽度
    uint16_t height; //光标高度
    uint16_t hot_spot_x;//光标热点X位置
    uint16_t hot_spot_y; //光标热点Y位置
}SpiceCursorHeader;
 
typedef structSpiceCursor {
    uint32_t flags;    // SpiceCursorFlags 标示
    SpiceCursorHeader header;//光标头
    uint32_t data_size;//数据大小
    uint8_t *data;//数据实际光标形状数据,
} SpiceCursor;

1.1.5  光标初始化结构体

typedef structSpiceMsgCursorInit {
    SpicePoint16 position; //鼠标指针的位置相关的显示区域
    uint16_t trail_length;
    uint16_t trail_frequency; //
    uint8_t visible; //可见性 1:可见,0:不可见
    SpiceCursor cursor; //当前光标形状
} SpiceMsgCursorInit;


1.1.6  SpiceMsgCursorSet结构体

typedef structSpiceMsgCursorSet {
    SpicePoint16 position; /鼠标指针的位置相关的显示区域
    uint8_t visible; //可见性 1:可见,0:不可见
    SpiceCursor cursor; //当前光标形状
}SpiceMsgCursorSet;


1.1.7  SpiceMsgCursorMove结构体

typedef structSpiceMsgCursorMove {
    SpicePoint16 position; /鼠标指针的位置相关的显示区域
}SpiceMsgCursorMove;


1.1.8  SpiceMsgCursorTrail结构体

typedef structSpiceMsgCursorTrail {
    uint16_t length;//
    uint16_t frequency;//更新频率
}SpiceMsgCursorTrail;


SPICE协议----光标通道定义