aboutsummaryrefslogtreecommitdiffstats
path: root/7_2/include/drawable.h
blob: 8986342d37cc2135ad3a209732aafab36aa03b63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#ifndef JCG_DRAWABLE_H
#define JCG_DRAWABLE_H

#define FILL_CHR '#'
#define SPACE_CHR ' '

#include <X11/Xlib.h>
#include <X11/Xutil.h>
extern struct X11context {
	enum {CTX_NO, CTX_INIT, CTX_FAIL} init;
	Display *d;
	Window r, w;
	int s;
	GC gctx;
	XVisualInfo v;
	XImage *i;
	int* data;
} X11;

// что угодно, на чём можно ''нарисовать''
// должно иметь размер, размер пикселей, данные
// функция put записывает пиксель по координатам x, y на поле
// функция show выводит данные на экран/куда угодно ещё
struct drawable {
	long x, y, pix_s;
	void *data;
	void (*put)(struct drawable *self, long x, long y);
	void(*show)(const struct drawable *self);
};


// конструктор
void drawable_init(struct drawable* self, 
		   void(*put_f)(struct drawable *, long, long), 
		   void(*show_f)(const struct drawable *), 
		   long width, 
		   long height, 
		   long pix_s);
// деструктор
void drawable_destroy(struct drawable *self);
// конструктор для консольного поля
struct drawable drawable_plaintxt(long width, long height);
// конструктор для графического поля
struct drawable drawable_X11(long width, long height);

// put для консольного drawable
void put_plaintxt(struct drawable *self, long x, long y);
// show для консольного drawable
void show_plaintxt(const struct drawable *self);
// put для графического drawable
void put_X11(struct drawable *self, long x, long y); 
// show для графического drawable
void show_X11(const struct drawable *self);

#endif // JCG_DRAWABLE_H