Themes
[xdock.git] / src / lib / libxdock.c
blobc2b67c3d40546f8ec4c5fcdc637a22230d6ac395
1 #include "xdock.h"
2 #include "network.h"
3 #include "../../config.h"
5 #include <string.h>
6 #include <stdio.h>
8 int cp(int var, int min, int max, char* var_name, char* function_name)
10 if(var < min || var > max)
12 fprintf(stderr, "Error: Parameter %s (%d~%d) from function %s has value %d.\n", var_name, min, max, function_name, var);
13 return 0;
15 else
16 return -1;
19 int xd_connect()
21 return open_connection("localhost");
24 void xd_disconnect()
26 close_connection();
29 void xd_flush()
31 send_command(1, 0x0);
34 const char* xd_version()
36 return VERSION;
39 void xd_draw_point(uchar color, uchar x, uchar y)
41 if(cp(x, 0, 63, "x", "xd_draw_point")
42 && cp(y, 0, 63, "y", "xd_draw_point"))
43 send_command(4, 0x1, color, x, y);
46 void xd_draw_line(uchar color, uchar x1, uchar y1, uchar x2, uchar y2)
48 if(cp(x1, 0, 63, "x1", "xd_draw_line")
49 && cp(y1, 0, 63, "y1", "xd_draw_line")
50 && cp(x2, 0, 63, "x2", "xd_draw_line")
51 && cp(y2, 0, 63, "y2", "xd_draw_line"))
52 send_command(6, 0x2, color, x1, y1, x2, y2);
55 void xd_draw_rectangle(uchar color, uchar x1, uchar y1, uchar x2, uchar y2)
57 if(cp(x1, 0, 63, "x1", "xd_draw_rectangle")
58 && cp(y1, 0, 63, "y1", "xd_draw_rectangle")
59 && cp(x2, 0, 63, "x2", "xd_draw_rectangle")
60 && cp(y2, 0, 63, "y2", "xd_draw_rectangle"))
61 send_command(6, 0x8, color, x1, y1, x2, y2);
64 void xd_draw_box(uchar fgcolor, uchar bgcolor, uchar x1, uchar y1, uchar x2, uchar y2)
66 if(cp(x1, 0, 63, "x1", "xd_draw_box")
67 && cp(y1, 0, 63, "y1", "xd_draw_box")
68 && cp(x2, 0, 63, "x2", "xd_draw_box")
69 && cp(y2, 0, 63, "y2", "xd_draw_box"))
70 send_command(7, 0x9, fgcolor, bgcolor, x1, y1, x2, y2);
73 void xd_move_box(uchar x1, uchar y1, uchar x2, uchar y2, uchar direction, uchar step, uchar bg_color)
75 if(cp(x1, 0, 63, "x1", "xd_move_box")
76 && cp(y1, 0, 63, "y1", "xd_move_box")
77 && cp(x2, 0, 63, "x2", "xd_move_box")
78 && cp(y2, 0, 63, "y2", "xd_move_box")
79 && cp(direction, 0, 3, "direction", "xd_move_box"))
80 send_command(8, 0x3, x1, y1, x2, y2, direction, step, bg_color);
83 void xd_set_color(uchar color, uchar r, uchar g, uchar b)
85 // can't send 0xFF since it's a EOF sign
86 if(r >= 0x80)
87 r--;
88 if(g >= 0x80)
89 g--;
90 if(b >= 0x80)
91 b--;
93 if(cp(color, 0x80, 0xFF, "color", "xd_set_color"))
94 send_command(5, 0x7, color, r, g, b);
97 void xd_write(uchar theme, uchar font, uchar x, uchar y, const char* text)
99 if(cp(x, 0, 63, "x", "xd_write")
100 && cp(y, 0, 63, "y", "xd_write")
101 && cp(font, 0, N_FONTS-1, "font", "xd_write"))
103 send_without_eof(5, 0x4, theme, font, x, y);
104 send_bytes(strlen(text), (unsigned char*)text);
108 void xd_send_xpm(uchar n, char** xpm)
110 int junk, h, colors;
111 int i = 0;
112 size_t ct = 0;
113 char* str = malloc(1);
115 // get xpm size
116 sscanf(xpm[0], "%d %d %d", &junk, &h, &colors);
118 for(i=0; i<(1+colors+h); i++)
120 ct += strlen(xpm[i])+1;
121 str = realloc(str, ct);
122 memcpy(&str[ct - (strlen(xpm[i])+1)], xpm[i], strlen(xpm[i])+1);
125 send_without_eof(2, 0x5, n);
126 send_bytes(ct, str);
127 free(str);
130 void xd_draw_image(uchar n, uchar x, uchar y)
132 if(cp(x, 0, 63, "x", "xd_draw_image")
133 && cp(y, 0, 63, "y", "xd_draw_image"))
134 send_command(4, 0x6, n, x, y);
137 void xd_led_draw_panel(uchar x1, uchar y1, uchar x2, uchar y2)
139 if(cp(x1, 0, 63, "x1", "xd_led_draw_panel")
140 && cp(y1, 0, 63, "y1", "xd_led_draw_panel")
141 && cp(x2, 0, 63, "x2", "xd_led_draw_panel")
142 && cp(y2, 0, 63, "y2", "xd_led_draw_panel"))
143 send_command(5, 0xA0, x1, y1, x2, y2);
146 void xd_draw_panel(uchar theme, uchar x1, uchar y1, uchar x2, uchar y2)
148 if(cp(theme, 0, 31, "theme", "xd_draw_panel")
149 && cp(x1, 0, 63, "x1", "xd_draw_panel")
150 && cp(y1, 0, 63, "y1", "xd_draw_panel")
151 && cp(x2, 0, 63, "x2", "xd_draw_panel")
152 && cp(y2, 0, 63, "y2", "xd_draw_panel"))
153 send_command(6, 0xA1, theme, x1, y1, x2, y2);
156 void xd_grab_events(uchar event_mask, uchar x1, uchar y1, uchar x2, uchar y2)
158 if(cp(x1, 0, 63, "x1", "xd_grab_events")
159 && cp(y1, 0, 63, "y1", "xd_grab_events")
160 && cp(x2, 0, 63, "x2", "xd_grab_events")
161 && cp(y2, 0, 63, "y2", "xd_grab_events")
162 && cp(event_mask, 0, 7, "event_mask", "xd_grab_events"))
163 send_command(6, 0x0A, event_mask, x1, y1, x2, y2);
166 int xd_next_event(xd_event_t* event)
168 unsigned char* c = read_data(4);
169 if(c == NULL)
170 return 0;
171 else
173 event->type = c[0];
174 event->x = c[1];
175 event->y = c[2];
176 event->button = c[3];
177 free(c);
178 return 1;