- [NEW] Ara draw::draw() pot fer stretch (zoom)
This commit is contained in:
@@ -323,7 +323,7 @@ namespace draw
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Pinta un troç de la superficie "source" en la superficie "destination".
|
// Pinta un troç de la superficie "source" en la superficie "destination".
|
||||||
void draw(const int dx, const int dy, const int w, const int h, const int sx, const int sy, const int flip)
|
void draw(const int dx, const int dy, const int w, const int h, const int sx, const int sy, const int flip, int dw, int dh)
|
||||||
{
|
{
|
||||||
// Si no hi ha superficie d'oritge especificada, no fem res, o petarà el mame
|
// Si no hi ha superficie d'oritge especificada, no fem res, o petarà el mame
|
||||||
if (source == nullptr)
|
if (source == nullptr)
|
||||||
@@ -331,20 +331,26 @@ namespace draw
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dw==0) dw = w;
|
||||||
|
if (dh==0) dh = h;
|
||||||
|
|
||||||
// En principi, el quadrat de l'oritge començarà en (sx,sy) i avançarem 1 pixel en positiu tant en x com en y
|
// En principi, el quadrat de l'oritge començarà en (sx,sy) i avançarem 1 pixel en positiu tant en x com en y
|
||||||
int sdx = 1, sdy = 1, ssx = sx, ssy = sy;
|
float sdx = float(w)/float(dw);
|
||||||
|
float sdy = float(h)/float(dh);
|
||||||
|
float ssx = sx;
|
||||||
|
float ssy = sy;
|
||||||
|
|
||||||
// Però si s'ha especificat que fem flip en horitzontal...
|
// Però si s'ha especificat que fem flip en horitzontal...
|
||||||
if (flip & DRAW_FLIP_HORIZONTAL)
|
if (flip & DRAW_FLIP_HORIZONTAL)
|
||||||
{
|
{
|
||||||
sdx = -1; // Avançarem 1 pixel en negatiu
|
sdx = -sdx; // Avançarem 1 pixel en negatiu
|
||||||
ssx = sx + w - 1; // I començarem al final, o siga, sumarem a sx el ample
|
ssx = sx + w - 1; // I començarem al final, o siga, sumarem a sx el ample
|
||||||
}
|
}
|
||||||
|
|
||||||
// De igual forma per al flip en vertical, per a la y
|
// De igual forma per al flip en vertical, per a la y
|
||||||
if (flip & DRAW_FLIP_VERTICAL)
|
if (flip & DRAW_FLIP_VERTICAL)
|
||||||
{
|
{
|
||||||
sdy = -1;
|
sdy = -sdy;
|
||||||
ssy = sy + h - 1;
|
ssy = sy + h - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -352,12 +358,12 @@ namespace draw
|
|||||||
int csx = ssx;
|
int csx = ssx;
|
||||||
|
|
||||||
// Anem linea per linea. Les variables dels dos bucles for controlen les coordenades en la destinació, que sempre van avant.
|
// Anem linea per linea. Les variables dels dos bucles for controlen les coordenades en la destinació, que sempre van avant.
|
||||||
for (int y = dy; y < dy + h; ++y)
|
for (int y = dy; y < dy + dh; ++y)
|
||||||
{
|
{
|
||||||
ssx = csx; // fiquem la coordenada de l'oritge al principi
|
ssx = csx; // fiquem la coordenada de l'oritge al principi
|
||||||
|
|
||||||
// en cada linea, anem pixel a pixel
|
// en cada linea, anem pixel a pixel
|
||||||
for (int x = dx; x < dx + w; ++x)
|
for (int x = dx; x < dx + dw; ++x)
|
||||||
{
|
{
|
||||||
pset(destination, x, y, pget(source, ssx, ssy)); // Agafem pixel de l'oritge i el fiquem en la destinació
|
pset(destination, x, y, pget(source, ssx, ssy)); // Agafem pixel de l'oritge i el fiquem en la destinació
|
||||||
ssx += sdx; // avancem (o retrocedim) la coordenada x de l'oritge
|
ssx += sdx; // avancem (o retrocedim) la coordenada x de l'oritge
|
||||||
@@ -445,7 +451,7 @@ namespace draw
|
|||||||
for (int i=0;i<len;++i)
|
for (int i=0;i<len;++i)
|
||||||
{
|
{
|
||||||
char chr = text[i]-32;
|
char chr = text[i]-32;
|
||||||
draw((x+i)*8, y*8, zoom&FONT_ZOOM_HORIZONTAL?16:8, zoom&FONT_ZOOM_VERTICAL?16:8, (chr&15)*8, (chr>>4)*8);
|
draw((x+i)*8, y*8, 8, 8, (chr&15)*8, (chr>>4)*8, DRAW_FLIP_NONE,zoom&FONT_ZOOM_HORIZONTAL?16:8, zoom&FONT_ZOOM_VERTICAL?16:8);
|
||||||
}
|
}
|
||||||
source = tmp;
|
source = tmp;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ namespace draw
|
|||||||
/// @param sx coordenada x de l'oritge
|
/// @param sx coordenada x de l'oritge
|
||||||
/// @param sy coordenada y de l'oritge
|
/// @param sy coordenada y de l'oritge
|
||||||
/// @param flip si s'ha de fer flip en hortizontal o vertical (o ambdos)
|
/// @param flip si s'ha de fer flip en hortizontal o vertical (o ambdos)
|
||||||
void draw(const int dx, const int dy, const int w, const int h, const int sx, const int sy, const int flip = DRAW_FLIP_NONE);
|
void draw(const int dx, const int dy, const int w, const int h, const int sx, const int sy, const int flip = DRAW_FLIP_NONE, int dw=0, int dh=0);
|
||||||
|
|
||||||
void swapcol(const uint8_t c1, const uint8_t c2);
|
void swapcol(const uint8_t c1, const uint8_t c2);
|
||||||
void restorecol(const uint8_t c);
|
void restorecol(const uint8_t c);
|
||||||
|
|||||||
Reference in New Issue
Block a user