Subversion Repositories Kolibri OS

Rev

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