Implement GPUTCHR(1*1)
This commit is contained in:
@@ -803,7 +803,7 @@ class Graphic2 : Graphic
|
|||||||
|
|
||||||
override void gpset(int page, int x, int y, uint color)
|
override void gpset(int page, int x, int y, uint color)
|
||||||
{
|
{
|
||||||
buffer[y * height + x] = color;
|
buffer[y * width + x] = color;
|
||||||
df = true;
|
df = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -829,7 +829,7 @@ class Graphic2 : Graphic
|
|||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
if (x >= wa.x && y >= wa.y && x < cx2 && y < cy2)
|
if (x >= wa.x && y >= wa.y && x < cx2 && y < cy2)
|
||||||
buffer[y * height + x] = color;
|
buffer[y * width + x] = color;
|
||||||
if (x == x2 && y == y2) break;
|
if (x == x2 && y == y2) break;
|
||||||
int e2 = 2 * err;
|
int e2 = 2 * err;
|
||||||
if (e2 > -dy)
|
if (e2 > -dy)
|
||||||
@@ -887,7 +887,7 @@ class Graphic2 : Graphic
|
|||||||
for (int y = sy; y <= ey; y++)
|
for (int y = sy; y <= ey; y++)
|
||||||
{
|
{
|
||||||
if (x >= wa.x && y >= wa.y && x < cx2 && y < cy2)
|
if (x >= wa.x && y >= wa.y && x < cx2 && y < cy2)
|
||||||
buffer[y * height + x] = color;
|
buffer[y * width + x] = color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
drawLine2(ex);
|
drawLine2(ex);
|
||||||
@@ -956,7 +956,7 @@ class Graphic2 : Graphic
|
|||||||
}
|
}
|
||||||
for (y = sy; y <= ey; y++)
|
for (y = sy; y <= ey; y++)
|
||||||
{
|
{
|
||||||
(buffer + y * height + sx)[0..(ex - sx + 1)] = color;
|
(buffer + y * width + sx)[0..(ex - sx + 1)] = color;
|
||||||
}
|
}
|
||||||
df = true;
|
df = true;
|
||||||
}
|
}
|
||||||
@@ -982,16 +982,54 @@ class Graphic2 : Graphic
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawCharacter(int x, int y, int scalex, int scaley, wchar c)
|
int mulColor(int color, int color2)
|
||||||
|
{
|
||||||
|
ubyte r1, g1, b1, a1;
|
||||||
|
ubyte r2, g2, b2, a2;
|
||||||
|
PetitComputer.RGBRead(color, r1, g1, b1, a1);
|
||||||
|
PetitComputer.RGBRead(color2, r2, g2, b2, a2);
|
||||||
|
r1 = cast(ubyte)((r1 * r2) / 255);
|
||||||
|
g1 = cast(ubyte)((g1 * g2) / 255);
|
||||||
|
b1 = cast(ubyte)((b1 * b2) / 255);
|
||||||
|
if (a2 && a1)
|
||||||
|
a1 = 255;
|
||||||
|
else
|
||||||
|
a1 = 0;
|
||||||
|
return PetitComputer.RGB(a1, r1, g1, b1);
|
||||||
|
}
|
||||||
|
void drawCharacter(int x, int y, int scalex, int scaley, uint color, immutable wchar c)
|
||||||
{
|
{
|
||||||
auto rect = petitcom.console.fontTable[c];
|
auto rect = petitcom.console.fontTable[c];
|
||||||
|
int[8 * 8] font;
|
||||||
|
int* grpfbuffer = cast(int*)petitcom.console.GRPF.surface.pixels;
|
||||||
|
for (int i = 0; i < 8; i ++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 8; j++)
|
||||||
|
{
|
||||||
|
font[i * 8 + j] = mulColor(grpfbuffer[rect.x + j + (rect.y + i) * GRPFWidth], color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (scalex == 1 && scaley == 1)
|
||||||
|
{
|
||||||
|
for (int iy = 0; iy < rect.h; iy++)
|
||||||
|
{
|
||||||
|
for (int ix = 0; ix < rect.w; ix++)
|
||||||
|
{
|
||||||
|
if (font[iy * 8 + ix] >> 24/*is trans*/)
|
||||||
|
{
|
||||||
|
(buffer + (y + iy) * width + x + ix)[0] = font[iy * 8 + ix];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
override void gputchr(int page, int x, int y, wstring text, int scalex, int scaley, uint color)
|
override void gputchr(int page, int x, int y, wstring text, int scalex, int scaley, uint color)
|
||||||
{
|
{
|
||||||
int* grpfbuffer = cast(int*)petitcom.console.GRPF.surface.pixels;
|
foreach (i, c; text)
|
||||||
foreach (c; text)
|
|
||||||
{
|
{
|
||||||
|
drawCharacter(x + scalex * cast(int)i * 8, y, scalex, scaley, color, c);
|
||||||
}
|
}
|
||||||
|
df = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
override int gspoit(int page, int x, int y)
|
override int gspoit(int page, int x, int y)
|
||||||
|
|||||||
Reference in New Issue
Block a user