Browse Source

Use cel functions to blit control panel text

pull/380/head
Anders Jenbo 7 years ago
parent
commit
e8cd0aedfb
  1. 90
      Source/control.cpp

90
Source/control.cpp

@ -446,87 +446,49 @@ void CPrintString(int nOffset, int nCel, char col)
/// ASSERT: assert(gpBuffer);
int i, nDataSize;
BYTE width, pix;
BYTE *src, *dst, *end;
BYTE pix;
BYTE *src, *dst;
BYTE tbl[256];
src = CelGetFrame(pPanelText, nCel, &nDataSize);
end = &src[nDataSize];
dst = &gpBuffer[nOffset];
switch (col) {
case COL_WHITE:
CelBlit(dst, src, nDataSize, 13);
break;
return;
case COL_BLUE:
for (; src != end; dst -= BUFFER_WIDTH + 13) {
for (i = 13; i;) {
width = *src++;
if (!(width & 0x80)) {
i -= width;
while (width) {
pix = *src++;
if (pix > PAL16_GRAY + 13)
pix = PAL16_BLUE + 15;
else if (pix >= PAL16_GRAY)
pix -= PAL16_GRAY - (PAL16_BLUE + 2);
*dst++ = pix;
width--;
}
} else {
width = -(char)width;
dst += width;
i -= width;
}
}
for (i = 0; i < 256; i++) {
pix = i;
if (pix > PAL16_GRAY + 13)
pix = PAL16_BLUE + 15;
else if (pix >= PAL16_GRAY)
pix -= PAL16_GRAY - (PAL16_BLUE + 2);
tbl[i] = pix;
}
break;
case COL_RED:
for (; src != end; dst -= BUFFER_WIDTH + 13) {
for (i = 13; i;) {
width = *src++;
if (!(width & 0x80)) {
i -= width;
while (width) {
pix = *src++;
if (pix >= PAL16_GRAY)
pix -= PAL16_GRAY - PAL16_RED;
*dst++ = pix;
width--;
}
} else {
width = -(char)width;
dst += width;
i -= width;
}
}
for (i = 0; i < 256; i++) {
pix = i;
if (pix >= PAL16_GRAY)
pix -= PAL16_GRAY - PAL16_RED;
tbl[i] = pix;
}
break;
default:
for (; src != end; dst -= BUFFER_WIDTH + 13) {
for (i = 13; i;) {
width = *src++;
if (!(width & 0x80)) {
i -= width;
while (width) {
pix = *src++;
if (pix >= PAL16_GRAY) {
if (pix >= PAL16_GRAY + 14)
pix = PAL16_YELLOW + 15;
else
pix -= PAL16_GRAY - (PAL16_YELLOW + 2);
}
*dst++ = pix;
width--;
}
} else {
width = -(char)width;
dst += width;
i -= width;
}
for (i = 0; i < 256; i++) {
pix = i;
if (pix >= PAL16_GRAY) {
if (pix >= PAL16_GRAY + 14)
pix = PAL16_YELLOW + 15;
else
pix -= PAL16_GRAY - (PAL16_YELLOW + 2);
}
tbl[i] = pix;
}
break;
}
CelBlitLight(dst, src, nDataSize, 13, tbl);
}
void AddPanelString(char *str, BOOL just)
@ -1226,7 +1188,7 @@ void control_print_info_str(int y, char *str, BOOL center, int lines)
int screen_x, line, nOffset;
line = 0;
nOffset = lineoffset[y + 4 * lines + lines] + (SCREEN_WIDTH - PANEL_WIDTH) / 2;
nOffset = lineoffset[y + 5 * lines] + (SCREEN_WIDTH - PANEL_WIDTH) / 2;
if (center == 1) {
screen_x = 0;
tmp = str;

Loading…
Cancel
Save