Subversion Repositories Kolibri OS

Rev

Rev 4666 | Rev 5598 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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