Subversion Repositories Kolibri OS

Rev

Rev 5519 | Rev 5676 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5598 pavelyakov 1
#ifndef INCLUDE_DRAW_BUF_H
2
#define INCLUDE_DRAW_BUF_H
4486 leency 3
 
5598 pavelyakov 4
#ifndef INCLUDE_KOLIBRI_H
5
#include "../lib/kolibri.h"
6
#endif
7
 
4475 leency 8
dword buf_data;
5519 leency 9
dword zbuf_data;
4475 leency 10
 
5519 leency 11
 
4475 leency 12
struct DrawBufer {
4666 leency 13
	int bufx, bufy, bufw, bufh;
5519 leency 14
	int zbufx, zbufy, zbufw, zbufh;
15
	byte zoomf;
4475 leency 16
 
17
	void Init();
4666 leency 18
	void Show();
4475 leency 19
	void Fill();
20
	void Skew();
21
	void DrawBar();
4666 leency 22
	void PutPixel();
4475 leency 23
	void AlignCenter();
24
	void AlignRight();
5519 leency 25
	void Zoom2x();
4475 leency 26
};
27
 
4666 leency 28
void DrawBufer::Init(int i_bufx, i_bufy, i_bufw, i_bufh)
4475 leency 29
{
30
	bufx = i_bufx;
31
	bufy = i_bufy;
32
	bufw = i_bufw;
33
	bufh = i_bufh;
34
	free(buf_data);
5519 leency 35
	buf_data = malloc(bufw * bufh * 4 + 8);
4475 leency 36
	ESDWORD[buf_data] = bufw;
4666 leency 37
	ESDWORD[buf_data+4] = bufh;
4475 leency 38
 
5519 leency 39
	if (zoomf != 1)
40
	{
41
		zbufx = bufx;
42
		zbufy = bufy;
43
		zbufw = bufw * zoomf;
44
		zbufh = bufh * zoomf;
45
		free(zbuf_data);
46
		zbuf_data = malloc(zbufw * zbufh * 4 + 8);
47
		ESDWORD[zbuf_data] = zbufw;
48
		ESDWORD[zbuf_data+4] = zbufh;
49
	}
4666 leency 50
}
51
 
4475 leency 52
void DrawBufer::Fill(dword fill_color)
53
{
54
	int i;
4666 leency 55
	int max_i = bufw * bufh * 4 + buf_data + 8;
4486 leency 56
	for (i=buf_data+8; i
4475 leency 57
}
58
 
59
void DrawBufer::DrawBar(dword x, y, w, h, color)
60
{
61
	int i, j;
62
	for (j=0; j
63
	{
4486 leency 64
		for (i = y+j*bufw+x*4+8+buf_data; i
4475 leency 65
	}
66
}
67
 
4666 leency 68
void DrawBufer::PutPixel(dword x, y, color)
69
{
70
	int pos = y*bufw+x*4+8+buf_data;
71
	ESDWORD[pos] = color;
72
}
73
 
4475 leency 74
char shift[]={8,8,4,4};
75
void DrawBufer::Skew(dword x, y, w, h)
76
{
77
	int i, j;
78
	for (j=0; j<=3; j++)
79
	{
80
		for (i = y+j*bufw+x+w+h*4; i>y+j*bufw+x+h-12*4 ; i-=4)
81
								ESDWORD[buf_data+i+8] = ESDWORD[-shift[j]+buf_data+i+8];
82
	}
83
}
84
 
85
void DrawBufer::AlignRight(dword x,y,w,h, content_width)
86
{
87
	int i, j, l;
88
	int content_left = w - content_width / 2;
89
	for (j=0; j
90
	{
91
		for (i=j*w+w-x*4, l=j*w+content_width+x*4; (i>=j*w+content_left*4) && (l>=j*w*4); i-=4, l-=4)
92
		{
93
			ESDWORD[buf_data+8+i] >< ESDWORD[buf_data+8+l];
94
		}
95
	}
96
}
97
 
98
void DrawBufer::AlignCenter(dword x,y,w,h, content_width)
99
{
100
	int i, j, l;
101
	int content_left = w - content_width / 2;
102
	for (j=0; j
103
	{
104
		for (i=j*w+content_width+content_left*4, l=j*w+content_width+x*4; (i>=j*w+content_left*4) && (l>=j*w*4); i-=4, l-=4)
105
		{
106
			ESDWORD[buf_data+8+i] >< ESDWORD[buf_data+8+l];
107
		}
108
	}
109
}
110
 
111
 
5519 leency 112
void DrawBufer::Zoom2x()
113
{
114
	int i, s;
115
	dword point_x, max_i, zline_w, s_inc;
4475 leency 116
 
5519 leency 117
	point_x = 0;
118
	max_i = bufw * bufh * 4 + buf_data+8;
119
	s_inc = zoomf * 4;
120
	zline_w = zbufw * 4;
121
 
122
	for (i=buf_data+8, s=zbuf_data+8; i
123
		ESDWORD[s] = ESDWORD[i];
124
		ESDWORD[s+4] = ESDWORD[i];
125
		ESDWORD[s+zline_w] = ESDWORD[i];
126
		ESDWORD[s+zline_w+4] = ESDWORD[i];
127
		if (zoomf==3)
128
		{
129
			ESDWORD[s+8] = ESDWORD[i];
130
			ESDWORD[zline_w+s+8] = ESDWORD[i];
131
			ESDWORD[zline_w*2+s] = ESDWORD[i];
132
			ESDWORD[zline_w*2+s+4] = ESDWORD[i];
133
			ESDWORD[zline_w*2+s+8] = ESDWORD[i];
134
		}
135
 
136
		point_x++;
137
		if (point_x >= bufw)
138
		{
139
			s += zoomf - 1 * zline_w;
140
			point_x = 0;
141
		}
142
	}
143
}
144
 
145
 
146
void DrawBufer::Show()
147
{
148
	if (zoomf == 1)
149
	{
150
		PutPaletteImage(buf_data+8, bufw, bufh, bufx, bufy, 32, 0);
151
	}
152
	else
153
	{
154
		Zoom2x();
155
		PutPaletteImage(zbuf_data+8, zbufw, zbufh, zbufx, zbufy, 32, 0);
156
	}
157
}
5598 pavelyakov 158
 
159
#endif