Subversion Repositories Kolibri OS

Rev

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