]> git.proxmox.com Git - spiceterm.git/blame - test_display_base.h
correct set bg color, try to use g_alloc/g_free
[spiceterm.git] / test_display_base.h
CommitLineData
cc04455b
DM
1#ifndef __TEST_DISPLAY_BASE_H__
2#define __TEST_DISPLAY_BASE_H__
3
4#include <glib.h>
5#include <spice.h>
6#include "basic_event_loop.h"
7
8
9#define COUNT(x) ((sizeof(x)/sizeof(x[0])))
10
11/*
12 * simple queue for commands.
13 * each command can have up to two parameters (grow as needed)
14 *
15 * TODO: switch to gtk main loop. Then add gobject-introspection. then
16 * write tests in python/guile/whatever.
17 */
18typedef enum {
19 PATH_PROGRESS,
20 SIMPLE_CREATE_SURFACE,
21 SIMPLE_DRAW,
22 SIMPLE_DRAW_BITMAP,
23 SIMPLE_DRAW_SOLID,
24 SIMPLE_COPY_BITS,
25 SIMPLE_DESTROY_SURFACE,
26 SIMPLE_UPDATE,
27 DESTROY_PRIMARY,
28 CREATE_PRIMARY,
29 SLEEP
30} CommandType;
31
32typedef struct CommandCreatePrimary {
33 uint32_t width;
34 uint32_t height;
35} CommandCreatePrimary;
36
37typedef struct CommandCreateSurface {
38 uint32_t surface_id;
39 uint32_t format;
40 uint32_t width;
41 uint32_t height;
42 uint8_t *data;
43} CommandCreateSurface;
44
45typedef struct CommandDrawBitmap {
46 QXLRect bbox;
47 uint8_t *bitmap;
48 uint32_t surface_id;
49 uint32_t num_clip_rects;
50 QXLRect *clip_rects;
51} CommandDrawBitmap;
52
53typedef struct CommandDrawSolid {
54 QXLRect bbox;
55 uint32_t color;
56 uint32_t surface_id;
57} CommandDrawSolid;
58
59typedef struct CommandSleep {
60 uint32_t secs;
61} CommandSleep;
62
63typedef struct Command Command;
64typedef struct Test Test;
65
66struct Command {
67 CommandType command;
68 void (*cb)(Test *test, Command *command);
69 void *cb_opaque;
70 union {
71 CommandCreatePrimary create_primary;
72 CommandDrawBitmap bitmap;
73 CommandDrawSolid solid;
74 CommandSleep sleep;
75 CommandCreateSurface create_surface;
76 };
77};
78
79#define MAX_HEIGHT 2048
80#define MAX_WIDTH 2048
81
82#define SURF_WIDTH 320
83#define SURF_HEIGHT 240
84
85struct Test {
86 SpiceCoreInterface *core;
87 SpiceServer *server;
88
89 QXLInstance qxl_instance;
90 QXLWorker *qxl_worker;
91
8a22eb4f
DM
92 SpiceKbdInstance keyboard_sin;
93
cc04455b
DM
94 uint8_t primary_surface[MAX_HEIGHT * MAX_WIDTH * 4];
95 int primary_height;
96 int primary_width;
97
f6cb554c
DM
98 SpiceTimer *conn_timeout_timer;
99
cc04455b
DM
100 int cursor_notify;
101
102 uint8_t secondary_surface[SURF_WIDTH * SURF_HEIGHT * 4];
103 int has_secondary;
104
105 // Current mode (set by create_primary)
106 int width;
107 int height;
108
109 // qxl scripted rendering commands and io
110 Command *commands;
111 int num_commands;
112 int cmd_index;
113
114 int target_surface;
115
116 // callbacks
117 void (*on_client_connected)(Test *test);
118 void (*on_client_disconnected)(Test *test);
119};
120
121void test_set_simple_command_list(Test *test, int *command, int num_commands);
122void test_set_command_list(Test *test, Command *command, int num_commands);
123void test_add_display_interface(Test *test);
124void test_add_agent_interface(SpiceServer *server); // TODO - Test *test
8a22eb4f 125void test_add_keyboard_interface(Test *test);
cc04455b
DM
126Test* test_new(SpiceCoreInterface* core);
127
128uint32_t test_get_width(void);
129uint32_t test_get_height(void);
130
131void spice_test_config_parse_args(int argc, char **argv);
132
133#endif /* __TEST_DISPLAY_BASE_H__ */