[Scummvm-cvs-logs] CVS: scummvm/scumm charset.cpp,2.84,2.85 nut_renderer.cpp,1.40,1.41
Max Horn
fingolfin at users.sourceforge.net
Thu Jan 15 14:38:08 CET 2004
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/queen cutaway.cpp,1.115,1.116 display.cpp,1.56,1.57 display.h,1.40,1.41 queen.cpp,1.75,1.76 queen.h,1.28,1.29
- Next message: [Scummvm-cvs-logs] CVS: scummvm TODO,1.65,1.66
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv6332
Modified Files:
charset.cpp nut_renderer.cpp
Log Message:
do a better job at charset clipping; some reengineering. However, to properly fix text drawing in COMI, we need to do some major changes
Index: charset.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/charset.cpp,v
retrieving revision 2.84
retrieving revision 2.85
diff -u -d -r2.84 -r2.85
--- charset.cpp 8 Jan 2004 17:41:11 -0000 2.84
+++ charset.cpp 15 Jan 2004 22:37:48 -0000 2.85
@@ -1296,7 +1296,7 @@
shadow.bottom = _top + height + 2;
_hasMask = true;
- _current->drawShadowChar(chr, _left, _top - _vm->_screenTop, _color, !_ignoreCharsetMask);
+ _current->drawShadowChar(chr, _left, _top, _color, !_ignoreCharsetMask);
_vm->markRectAsDirty(kMainVirtScreen, shadow);
if (_str.left > _left)
Index: nut_renderer.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/nut_renderer.cpp,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -d -r1.40 -r1.41
--- nut_renderer.cpp 8 Jan 2004 01:43:32 -0000 1.40
+++ nut_renderer.cpp 15 Jan 2004 22:37:48 -0000 1.41
@@ -31,7 +31,7 @@
_initialized(false),
_loaded(false),
_nbChars(0) {
-
+
for (int i = 0; i < 256; i++)
_chars[i].src = NULL;
}
@@ -237,9 +237,9 @@
}
void NutRenderer::drawShadowChar(int c, int x, int y, byte color, bool useMask) {
- debug(8, "NutRenderer::drawChar('%c', %d, %d, %d, %d) called", c, x, y, (int)color, useMask);
+ debug(8, "NutRenderer::drawShadowChar('%c', %d, %d, %d, %d) called", c, x, y, (int)color, useMask);
if (!_loaded) {
- warning("NutRenderer::drawChar() Font is not loaded");
+ warning("NutRenderer::drawShadowChar() Font is not loaded");
return;
}
@@ -253,7 +253,7 @@
// some "font shadow" resource we don't know yet.
// One problem remains: the fonts on the save/load screen don't have a
// shadow. So how do we know whether to draw text with or without shadow?
-
+
int offsetX[7] = { -1, 0, 1, 0, 1, 2, 0 };
int offsetY[7] = { 0, -1, 0, 1, 2, 1, 0 };
int cTable[7] = { 0, 0, 0, 0, 0, 0, color };
@@ -263,14 +263,18 @@
y += offsetY[i];
color = cTable[i];
- dst = vs->screenPtr + (y + _vm->_screenTop) * vs->width + x + vs->xstart;
+ if (y >= vs->height || x + vs->xstart >= vs->width) {
+ continue;
+ }
+
+ dst = vs->screenPtr + y * vs->width + x + vs->xstart;
if (useMask)
- mask = _vm->getMaskBuffer(x, y + _vm->_screenTop, 0);
+ mask = _vm->getMaskBuffer(x, y, 0);
if (c >= 256 && _vm->_CJKMode)
- draw2byte(dst, mask, c, x, y, color);
+ draw2byte(dst, mask, c, x, y - _vm->_screenTop, color);
else
- drawChar(dst, mask, (byte)c, x, y, color);
+ drawChar(dst, mask, (byte)c, x, y - _vm->_screenTop, color);
x -= offsetX[i];
y -= offsetY[i];
@@ -287,13 +291,16 @@
const int minX = x < 0 ? -x : 0;
const int minY = y < 0 ? -y : 0;
+ if (height <= 0 || width <= 0) {
+ return;
+ }
+
dst += _vm->_screenWidth * y + x;
if (minY) {
src += minY * srcPitch;
dst += minY * _vm->_screenWidth;
}
-
-
+
for (int ty = minY; ty < height; ty++) {
for (int tx = minX; tx < width; tx++) {
bits = src[tx];
@@ -314,17 +321,21 @@
byte maskmask;
int maskpos;
-
+
const int minX = x < 0 ? -x : 0;
const int minY = y < 0 ? -y : 0;
+ if (height <= 0 || width <= 0) {
+ return;
+ }
+
if (minY) {
src += minY * srcPitch;
dst += minY * _vm->_screenWidth;
if (mask)
mask += minY * _vm->gdi._numStrips;
}
-
+
for (int ty = minY; ty < height; ty++) {
maskmask = revBitMask[(x + minX) & 7];
maskpos = (x%8 + minX) / 8;
@@ -353,14 +364,18 @@
return;
}
- int width = _vm->_2byteWidth;
- int height = MIN(_vm->_2byteHeight, _vm->_screenHeight - y);
+ const int width = _vm->_2byteWidth;
+ const int height = MIN(_vm->_2byteHeight, _vm->_screenHeight - y);
byte *src = _vm->get2byteCharPtr(c);
byte bits = 0;
byte maskmask;
int maskpos;
+ if (height <= 0 || width <= 0) {
+ return;
+ }
+
for (int ty = 0; ty < height; ty++) {
maskmask = revBitMask[x & 7];
maskpos = 0;
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/queen cutaway.cpp,1.115,1.116 display.cpp,1.56,1.57 display.h,1.40,1.41 queen.cpp,1.75,1.76 queen.h,1.28,1.29
- Next message: [Scummvm-cvs-logs] CVS: scummvm TODO,1.65,1.66
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list