1,8 → 1,12 |
|
dword buf_data; |
dword zbuf_data; |
|
|
struct DrawBufer { |
int bufx, bufy, bufw, bufh; |
int zbufx, zbufy, zbufw, zbufh; |
byte zoomf; |
|
void Init(); |
void Show(); |
12,6 → 16,7 |
void PutPixel(); |
void AlignCenter(); |
void AlignRight(); |
void Zoom2x(); |
}; |
|
void DrawBufer::Init(int i_bufx, i_bufy, i_bufw, i_bufh) |
21,15 → 26,22 |
bufw = i_bufw; |
bufh = i_bufh; |
free(buf_data); |
buf_data = malloc(bufw * bufh * 4 + 8); //+1 for good luck |
buf_data = malloc(bufw * bufh * 4 + 8); |
ESDWORD[buf_data] = bufw; |
ESDWORD[buf_data+4] = bufh; |
} |
|
void DrawBufer::Show() |
if (zoomf != 1) |
{ |
PutPaletteImage(buf_data+8, bufw, bufh, bufx, bufy, 32,0); |
zbufx = bufx; |
zbufy = bufy; |
zbufw = bufw * zoomf; |
zbufh = bufh * zoomf; |
free(zbuf_data); |
zbuf_data = malloc(zbufw * zbufh * 4 + 8); |
ESDWORD[zbuf_data] = zbufw; |
ESDWORD[zbuf_data+4] = zbufh; |
} |
} |
|
void DrawBufer::Fill(dword fill_color) |
{ |
91,4 → 103,49 |
} |
|
|
void DrawBufer::Zoom2x() |
{ |
int i, s; |
dword point_x, max_i, zline_w, s_inc; |
|
point_x = 0; |
max_i = bufw * bufh * 4 + buf_data+8; |
s_inc = zoomf * 4; |
zline_w = zbufw * 4; |
|
for (i=buf_data+8, s=zbuf_data+8; i<max_i; i+=4, s+= s_inc) { |
ESDWORD[s] = ESDWORD[i]; |
ESDWORD[s+4] = ESDWORD[i]; |
ESDWORD[s+zline_w] = ESDWORD[i]; |
ESDWORD[s+zline_w+4] = ESDWORD[i]; |
if (zoomf==3) |
{ |
ESDWORD[s+8] = ESDWORD[i]; |
ESDWORD[zline_w+s+8] = ESDWORD[i]; |
ESDWORD[zline_w*2+s] = ESDWORD[i]; |
ESDWORD[zline_w*2+s+4] = ESDWORD[i]; |
ESDWORD[zline_w*2+s+8] = ESDWORD[i]; |
} |
|
point_x++; |
if (point_x >= bufw) |
{ |
s += zoomf - 1 * zline_w; |
point_x = 0; |
} |
} |
} |
|
|
void DrawBufer::Show() |
{ |
if (zoomf == 1) |
{ |
PutPaletteImage(buf_data+8, bufw, bufh, bufx, bufy, 32, 0); |
} |
else |
{ |
Zoom2x(); |
PutPaletteImage(zbuf_data+8, zbufw, zbufh, zbufx, zbufy, 32, 0); |
} |
} |