From 0bfb74fd5723c8bd6aba30a67fdcd73fd5fc5d9b Mon Sep 17 00:00:00 2001 From: Arnaud Boutonné Date: Mon, 16 Aug 2010 21:18:38 +0000 Subject: Fascination - Suppress a debug warning, and replace several warnings by errors. svn-id: r52133 --- engines/gob/draw.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'engines/gob/draw.cpp') diff --git a/engines/gob/draw.cpp b/engines/gob/draw.cpp index b572ccb566..f575292c2e 100644 --- a/engines/gob/draw.cpp +++ b/engines/gob/draw.cpp @@ -869,7 +869,6 @@ int16 Draw::handleCurWin() { } } if (bestMatch != -1) { - warning("handleCurWin - activeWin %d", matchNum); blitCursor(); activeWin(matchNum); } @@ -1007,9 +1006,9 @@ void Draw::winDraw(int16 fct) { break; default: - width = 0; - height = 0; - warning("Unexpected fct value %d", fct); +// width = 0; +// height = 0; + error("winDraw - Unexpected fct value %d", fct); break; } @@ -1132,7 +1131,7 @@ void Draw::winDraw(int16 fct) { break; default: - warning("Unexpected fct value"); + error("winDraw - Unexpected fct value %d", fct); break; } @@ -1251,7 +1250,7 @@ void Draw::winDraw(int16 fct) { break; default: - warning("Unexpected fct value"); + error("winDraw - Unexpected fct value"); break; } } -- cgit v1.2.3 From b6c929a02a7a35e0b7024b6badb1b1588c45d706 Mon Sep 17 00:00:00 2001 From: Arnaud Boutonné Date: Fri, 20 Aug 2010 20:31:05 +0000 Subject: Fascination - (SylvainTV) Implement window traces svn-id: r52238 --- engines/gob/draw.cpp | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) (limited to 'engines/gob/draw.cpp') diff --git a/engines/gob/draw.cpp b/engines/gob/draw.cpp index f575292c2e..0f5c5d83b2 100644 --- a/engines/gob/draw.cpp +++ b/engines/gob/draw.cpp @@ -733,26 +733,24 @@ void Draw::winMove(int16 id) { } void Draw::winTrace(int16 left, int16 top, int16 width, int16 height) { - // TODO: Implement proper behavior for the trace of the Window. In short, - // - drawline currently use the wrong surface, to be fixed - // - dirtiedRect should be put after the 4 drawlines when the surface is fixed <- Not in 256 col version - // - drawline should be replaced by a drawline with palette inversion - // - Shift skipped as always set to zero (?) - - int16 right, bottom; - - right = left + width - 1; - bottom = top + height - 1; - -// To be fixed : either wrong surface, or anything else, but crappy look. -// _vm->_video->drawLine(*_frontSurface, left, top, right, top, 0); -// _vm->_video->drawLine(*_frontSurface, left, top, left, bottom, 0); -// _vm->_video->drawLine(*_frontSurface, left, bottom, right, bottom, 0); -// _vm->_video->drawLine(*_frontSurface, right, top, right, bottom, 0); - -// Not in 256 col version - _vm->_video->dirtyRectsAll(); - + int16 right, bottom; + + right = left + width - 1; + bottom = top + height - 1; + + + for(int32 x = left; x < right; x++ ) { + _frontSurface->getVidMem()[_frontSurface->getWidth() * top + x] = (128 + _frontSurface->getVidMem()[_frontSurface->getWidth() * top + x]) & 0xff; + _frontSurface->getVidMem()[_frontSurface->getWidth() * bottom + x] = (128 + _frontSurface->getVidMem()[_frontSurface->getWidth() * bottom + x]) & 0xff; + } + + for(int32 y = top; y < bottom; y++ ) { + _frontSurface->getVidMem()[_frontSurface->getWidth() * y + left] = (128 + _frontSurface->getVidMem()[_frontSurface->getWidth() * y + left]) & 0xff; + _frontSurface->getVidMem()[_frontSurface->getWidth() * y + right] = (128 + _frontSurface->getVidMem()[_frontSurface->getWidth() * y + right]) & 0xff; + } + + _vm->_video->dirtyRectsAll(); + _vm->_video->retrace(true); } void Draw::handleWinBorder(int16 id) { -- cgit v1.2.3 From 5cd3ea41db71b4521954cd65bc9775c1bbeabb9f Mon Sep 17 00:00:00 2001 From: Arnaud Boutonné Date: Sat, 21 Aug 2010 18:16:04 +0000 Subject: GOB: Clean up of Fascination code Move Fascination specific function to appropriate classes, plus some style modifications svn-id: r52267 --- engines/gob/draw.cpp | 768 --------------------------------------------------- 1 file changed, 768 deletions(-) (limited to 'engines/gob/draw.cpp') diff --git a/engines/gob/draw.cpp b/engines/gob/draw.cpp index 0f5c5d83b2..62b9a5e630 100644 --- a/engines/gob/draw.cpp +++ b/engines/gob/draw.cpp @@ -530,774 +530,6 @@ void Draw::oPlaytoons_sub_F_1B(uint16 id, int16 left, int16 top, int16 right, in return; } -void Draw::activeWin(int16 id) { - bool found = false; - int16 t[10], t2[10]; - int nextId = -1; - int oldId = -1; - SurfaceDescPtr tempSrf; - SurfaceDescPtr oldSrf[10]; - - if (_fascinWin[id].id == -1) - return; - - blitInvalidated(); - - for (int i = 0; i < 10; i++) { - t[i] = -1; - t2[i] = -1; - oldSrf[i].reset(); - } - - for (int i = 0; i < 10; i++) - if ((i != id) && (_fascinWin[i].id > _fascinWin[id].id) && (winOverlap(i, id))) { - t[_fascinWin[i].id] = i; - found = true; - } - - if (found) { - for (int i = 9; i >= 0; i--) { - if (t[i] != -1) { - if (nextId != -1) - _vm->_video->drawSprite(*_backSurface, *_fascinWin[nextId].savedSurface, - _fascinWin[t[i]].left, _fascinWin[t[i]].top, - _fascinWin[t[i]].left + _fascinWin[t[i]].width - 1, - _fascinWin[t[i]].top + _fascinWin[t[i]].height - 1, - _fascinWin[t[i]].left & 7, 0, 0); - t2[i] = nextId; - restoreWin(t[i]); - nextId = t[i]; - } - } - - oldId = nextId; - _vm->_video->drawSprite(*_backSurface, *_fascinWin[nextId].savedSurface, - _fascinWin[id].left, _fascinWin[id].top, - _fascinWin[id].left + _fascinWin[id].width - 1, - _fascinWin[id].top + _fascinWin[id].height - 1, - _fascinWin[id].left & 7, 0, 0); - restoreWin(id); - nextId = id; - - for (int i = 0; i < 10; i++) { - if (t[i] != -1) { - _vm->_video->drawSprite(*_backSurface, *_fascinWin[nextId].savedSurface, - _fascinWin[t[i]].left, _fascinWin[t[i]].top, - _fascinWin[t[i]].left + _fascinWin[t[i]].width - 1, - _fascinWin[t[i]].top + _fascinWin[t[i]].height - 1, - _fascinWin[t[i]].left & 7, 0, 0); - oldSrf[t[i]] = _fascinWin[nextId].savedSurface; - if (t2[i] != -1) - _vm->_video->drawSprite(*_fascinWin[t2[i]].savedSurface, *_backSurface, - _fascinWin[t[i]].left & 7, 0, - (_fascinWin[t[i]].left & 7) + _fascinWin[t[i]].width - 1, - _fascinWin[t[i]].height - 1, _fascinWin[t[i]].left, - _fascinWin[t[i]].top, 0); - else { - // Shift skipped as always set to zero (?) - _vm->_video->drawSprite(*_frontSurface, *_backSurface, - _fascinWin[t[i]].left, _fascinWin[t[i]].top, - _fascinWin[t[i]].left + _fascinWin[t[i]].width - 1, - _fascinWin[t[i]].top + _fascinWin[t[i]].height - 1, - _fascinWin[t[i]].left, _fascinWin[t[i]].top, 0); - } - invalidateRect(_fascinWin[t[i]].left, _fascinWin[t[i]].top, - _fascinWin[t[i]].left + _fascinWin[t[i]].width - 1, - _fascinWin[t[i]].top + _fascinWin[t[i]].height - 1); - nextId = t2[i]; - } - } - - tempSrf = _vm->_video->initSurfDesc(_vm->_global->_videoMode, _winMaxWidth + 7, _winMaxHeight, 0); - _vm->_video->drawSprite(*_backSurface, *tempSrf, - _fascinWin[id].left, _fascinWin[id].top, - _fascinWin[id].left + _fascinWin[id].width - 1, - _fascinWin[id].top + _fascinWin[id].height - 1, - _fascinWin[id].left & 7, 0, 0); - _vm->_video->drawSprite(*_fascinWin[oldId].savedSurface, *_backSurface, - _fascinWin[id].left & 7, 0, - (_fascinWin[id].left & 7) + _fascinWin[id].width - 1, - _fascinWin[id].height - 1, - _fascinWin[id].left, _fascinWin[id].top, 0); - - _fascinWin[oldId].savedSurface.reset(); - _fascinWin[oldId].savedSurface = tempSrf; - oldSrf[id] = _fascinWin[oldId].savedSurface; - - invalidateRect(_fascinWin[id].left, _fascinWin[id].top, - _fascinWin[id].left + _fascinWin[id].width - 1, - _fascinWin[id].top + _fascinWin[id].height - 1); - nextId = id; - - for (int j = 0; j < 10; j++) { - if (oldSrf[j]!=0) - _fascinWin[j].savedSurface = oldSrf[j]; - } - } - - for (int i = 0; i < 10; i++) { - if ((i != id) && (_fascinWin[i].id > _fascinWin[id].id)) - _fascinWin[i].id--; - } - - _fascinWin[id].id = _winCount - 1; -} - -bool Draw::winOverlap(int16 idWin1, int16 idWin2) { - if ((_fascinWin[idWin1].left + _fascinWin[idWin1].width <= _fascinWin[idWin2].left) || - (_fascinWin[idWin2].left + _fascinWin[idWin2].width <= _fascinWin[idWin1].left) || - (_fascinWin[idWin1].top + _fascinWin[idWin1].height <= _fascinWin[idWin2].top ) || - (_fascinWin[idWin2].top + _fascinWin[idWin2].height <= _fascinWin[idWin1].top )) - return false; - - return true; -} - -void Draw::closeWin(int16 i) { - if (_fascinWin[i].id == -1) - return; - - WRITE_VAR((_winVarArrayStatus / 4) + i, VAR((_winVarArrayStatus / 4) + i) | 1); - restoreWin(i); - _fascinWin[i].id = -1; - _fascinWin[i].savedSurface.reset(); - _winCount--; -} - -void Draw::closeAllWin() { - for (int i = 0; i < 10; i++){ - activeWin(i); - closeWin(i); - } -} - -int16 Draw::openWin(int16 id) { - if (_fascinWin[id].id != -1) - return 0; - - _fascinWin[id].id = _winCount++; - _fascinWin[id].left = VAR((_winVarArrayLeft / 4) + id); - _fascinWin[id].top = VAR((_winVarArrayTop / 4) + id); - _fascinWin[id].width = VAR((_winVarArrayWidth / 4) + id); - _fascinWin[id].height = VAR((_winVarArrayHeight / 4) + id); - - _fascinWin[id].savedSurface = _vm->_video->initSurfDesc(_vm->_global->_videoMode, _winMaxWidth + 7, _winMaxHeight, 0); - - saveWin(id); - WRITE_VAR((_winVarArrayStatus / 4) + id, VAR((_winVarArrayStatus / 4) + id) & 0xFFFFFFFE); - - return 1; -} - -void Draw::restoreWin(int16 i) { - _vm->_video->drawSprite(*_fascinWin[i].savedSurface, *_backSurface, - _fascinWin[i].left & 7, 0, - (_fascinWin[i].left & 7) + _fascinWin[i].width - 1, _fascinWin[i].height - 1, - _fascinWin[i].left, _fascinWin[i].top, 0); - invalidateRect(_fascinWin[i].left, _fascinWin[i].top, - _fascinWin[i].left + _fascinWin[i].width - 1, - _fascinWin[i].top + _fascinWin[i].height - 1); -} - -void Draw::saveWin(int16 id) { - _vm->_video->drawSprite(*_backSurface, *_fascinWin[id].savedSurface, - _fascinWin[id].left, _fascinWin[id].top, - _fascinWin[id].left + _fascinWin[id].width - 1, - _fascinWin[id].top + _fascinWin[id].height - 1, - _fascinWin[id].left & 7, 0, 0); -} - -void Draw::winMove(int16 id) { - int oldLeft = _fascinWin[id].left; - int oldTop = _fascinWin[id].top; - - restoreWin(id); - - _fascinWin[id].left = _vm->_global->_inter_mouseX; - _fascinWin[id].top = _vm->_global->_inter_mouseY; - - WRITE_VAR((_winVarArrayLeft / 4) + id, _fascinWin[id].left); - WRITE_VAR((_winVarArrayTop / 4) + id, _fascinWin[id].top); - - saveWin(id); - - // Shift skipped as always set to zero (?) - _vm->_video->drawSprite(*_frontSurface, *_backSurface, - oldLeft, oldTop, - oldLeft + _fascinWin[id].width - 1, - oldTop + _fascinWin[id].height - 1, - _fascinWin[id].left, _fascinWin[id].top, 0); - invalidateRect(_fascinWin[id].left, _fascinWin[id].top, - _fascinWin[id].left + _fascinWin[id].width - 1, - _fascinWin[id].top + _fascinWin[id].height - 1); -} - -void Draw::winTrace(int16 left, int16 top, int16 width, int16 height) { - int16 right, bottom; - - right = left + width - 1; - bottom = top + height - 1; - - - for(int32 x = left; x < right; x++ ) { - _frontSurface->getVidMem()[_frontSurface->getWidth() * top + x] = (128 + _frontSurface->getVidMem()[_frontSurface->getWidth() * top + x]) & 0xff; - _frontSurface->getVidMem()[_frontSurface->getWidth() * bottom + x] = (128 + _frontSurface->getVidMem()[_frontSurface->getWidth() * bottom + x]) & 0xff; - } - - for(int32 y = top; y < bottom; y++ ) { - _frontSurface->getVidMem()[_frontSurface->getWidth() * y + left] = (128 + _frontSurface->getVidMem()[_frontSurface->getWidth() * y + left]) & 0xff; - _frontSurface->getVidMem()[_frontSurface->getWidth() * y + right] = (128 + _frontSurface->getVidMem()[_frontSurface->getWidth() * y + right]) & 0xff; - } - - _vm->_video->dirtyRectsAll(); - _vm->_video->retrace(true); -} - -void Draw::handleWinBorder(int16 id) { - int16 minX = 0; - int16 maxX = 320; - int16 minY = 0; - int16 maxY = 200; - - if (VAR((_winVarArrayStatus / 4) + id) & 8) - minX = (int16)(VAR((_winVarArrayLimitsX / 4) + id) >> 16L); - if (VAR((_winVarArrayStatus / 4) + id) & 16) - maxX = (int16)(VAR((_winVarArrayLimitsX / 4) + id) & 0xFFFFL); - if (VAR((_winVarArrayStatus / 4) + id) & 32) - minY = (int16)(VAR((_winVarArrayLimitsY / 4) + id) >> 16L); - if (VAR((_winVarArrayStatus / 4) + id) & 64) - maxY = (int16)(VAR((_winVarArrayLimitsY / 4) + id) & 0xFFFFL); - - _vm->_global->_inter_mouseX = _fascinWin[id].left; - _vm->_global->_inter_mouseY = _fascinWin[id].top; - - if (_vm->_global->_mousePresent) - _vm->_util->setMousePos(_vm->_global->_inter_mouseX, _vm->_global->_inter_mouseY); - - winTrace(_vm->_global->_inter_mouseX, _vm->_global->_inter_mouseY, _fascinWin[id].width, _fascinWin[id].height); - _cursorX = _vm->_global->_inter_mouseX; - _cursorY = _vm->_global->_inter_mouseY; - - do { - _vm->_game->checkKeys(&_vm->_global->_inter_mouseX, &_vm->_global->_inter_mouseY, &_vm->_game->_mouseButtons, 1); - - if (_vm->_global->_inter_mouseX != _cursorX || _vm->_global->_inter_mouseY != _cursorY) { - if (_vm->_global->_inter_mouseX < minX) { - _vm->_global->_inter_mouseX = minX; - if (_vm->_global->_mousePresent) - _vm->_util->setMousePos(_vm->_global->_inter_mouseX, _vm->_global->_inter_mouseY); - } - - if (_vm->_global->_inter_mouseY < minY) { - _vm->_global->_inter_mouseY = minY; - if (_vm->_global->_mousePresent) - _vm->_util->setMousePos(_vm->_global->_inter_mouseX, _vm->_global->_inter_mouseY); - } - - if (_vm->_global->_inter_mouseX + _fascinWin[id].width > maxX) { - _vm->_global->_inter_mouseX = maxX - _fascinWin[id].width; - if (_vm->_global->_mousePresent) - _vm->_util->setMousePos(_vm->_global->_inter_mouseX, _vm->_global->_inter_mouseY); - } - - if (_vm->_global->_inter_mouseY + _fascinWin[id].height > maxY) { - _vm->_global->_inter_mouseY = maxY - _fascinWin[id].height; - if (_vm->_global->_mousePresent) - _vm->_util->setMousePos(_vm->_global->_inter_mouseX, _vm->_global->_inter_mouseY); - } - - winTrace(_cursorX, _cursorY, _fascinWin[id].width, _fascinWin[id].height); - winTrace(_vm->_global->_inter_mouseX, _vm->_global->_inter_mouseY, _fascinWin[id].width, _fascinWin[id].height); - _cursorX = _vm->_global->_inter_mouseX; - _cursorY = _vm->_global->_inter_mouseY; - } - } while (_vm->_game->_mouseButtons); - winTrace(_cursorX, _cursorY, _fascinWin[id].width, _fascinWin[id].height); - _cursorX = _vm->_global->_inter_mouseX; - _cursorY = _vm->_global->_inter_mouseY; -} - -int16 Draw::handleCurWin() { - int8 matchNum = 0; - int16 bestMatch = -1; - - if ((_vm->_game->_mouseButtons != 1) || ((_renderFlags & 128) == 0)) - return 0; - - for (int i = 0; i < 10; i++) - if (_fascinWin[i].id != -1) { - if ((_vm->_global->_inter_mouseX >= _fascinWin[i].left) && - (_vm->_global->_inter_mouseX < _fascinWin[i].left + _fascinWin[i].width) && - (_vm->_global->_inter_mouseY >= _fascinWin[i].top) && - (_vm->_global->_inter_mouseY < _fascinWin[i].top + _fascinWin[i].height)) { - - if (_fascinWin[i].id == _winCount - 1) { - if ((_vm->_global->_inter_mouseX < _fascinWin[i].left + 12) && - (_vm->_global->_inter_mouseY < _fascinWin[i].top + 12) && - (VAR(_winVarArrayStatus / 4 + i) & 2)) { - - blitCursor(); - activeWin(i); - closeWin(i); - _vm->_util->waitMouseRelease(1); - return i; - } - - if ((_vm->_global->_inter_mouseX >= _fascinWin[i].left + _fascinWin[i].width - 12) && - (_vm->_global->_inter_mouseY < _fascinWin[i].top + 12) && - (VAR(_winVarArrayStatus / 4 + i) & 4) && - (_vm->_global->_mousePresent) && - (_vm->_global->_videoMode != 0x07)) { - - blitCursor(); - handleWinBorder(i); - winMove(i); - _vm->_global->_inter_mouseX = _fascinWin[i].left + _fascinWin[i].width - 11; - _vm->_util->setMousePos(_vm->_global->_inter_mouseX, _vm->_global->_inter_mouseY); - return -i; - } - - return 0; - - } else - if (_fascinWin[i].id > bestMatch) { - bestMatch = _fascinWin[i].id; - matchNum = i; - } - } - } - if (bestMatch != -1) { - blitCursor(); - activeWin(matchNum); - } - - return 0; -} - -void Draw::winDecomp(int16 x, int16 y, SurfaceDescPtr destPtr) { - Resource *resource; - resource = _vm->_game->_resources->getResource((uint16) _spriteLeft, - &_spriteRight, &_spriteBottom); - - if (!resource) - return; - - _vm->_video->drawPackedSprite(resource->getData(), - _spriteRight, _spriteBottom, x, y, _transparency, *destPtr); - - delete resource; - return; -} - -void Draw::winDraw(int16 fct) { - int16 left; - int16 top; - int16 width; - int16 height; - - bool found = false; - int len; - Resource *resource; - int table[10]; - SurfaceDescPtr tempSrf; - - if (_destSurface == kBackSurface) { - - if (_vm->_global->_curWinId) { - if (_fascinWin[_vm->_global->_curWinId].id == -1) - return; - - else { - _destSpriteX += _fascinWin[_vm->_global->_curWinId].left; - _destSpriteY += _fascinWin[_vm->_global->_curWinId].top; - if (fct == 3 || (fct >= 7 && fct <= 9)) { - _spriteRight += _fascinWin[_vm->_global->_curWinId].left; - _spriteBottom += _fascinWin[_vm->_global->_curWinId].top; - } - } - } - - left = _destSpriteX; - top = _destSpriteY; - - } else { - if (_vm->_global->_curWinId) { - if (_fascinWin[_vm->_global->_curWinId].id == -1) - return; - else { - _spriteLeft += _fascinWin[_vm->_global->_curWinId].left; - _spriteTop += _fascinWin[_vm->_global->_curWinId].top; - } - } - - left = _spriteLeft; - top = _spriteTop; - } - - for (int i = 0; i < 10; i++) - table[i] = 0; - - switch (fct) { - case DRAW_BLITSURF: // 0 - move - case DRAW_FILLRECT: // 2 - fill rectangle - width = left + _spriteRight - 1; - height = top + _spriteBottom - 1; - break; - - case DRAW_PUTPIXEL: // 1 - put a pixel - width = _destSpriteX; - height = _destSpriteY; - break; - - case DRAW_DRAWLINE: // 3 - draw line - case DRAW_DRAWBAR: // 7 - draw border - case DRAW_CLEARRECT: // 8 - clear rectangle - case DRAW_FILLRECTABS: // 9 - fill rectangle, with other coordinates - width = _spriteRight; - height = _spriteBottom; - break; - - case DRAW_INVALIDATE: // 4 - Draw a circle - left = _destSpriteX - _spriteRight; - top = _destSpriteY - _spriteRight; - width = _destSpriteX + _spriteRight; - height = _destSpriteY + _spriteBottom; - break; - - case DRAW_LOADSPRITE: // 5 - Uncompress and load a sprite - // TODO: check the implementation, currently dirty cut and paste of DRAW_SPRITE code - resource = _vm->_game->_resources->getResource((_spriteLeft & 0x3FFF), - &_spriteRight, &_spriteBottom); - - if (!resource) { - width = 0; - height = 0; - break; - } - - _vm->_video->drawPackedSprite(resource->getData(), - _spriteRight, _spriteBottom, _destSpriteX, _destSpriteY, - _transparency, *_spritesArray[_destSurface]); - - dirtiedRect(_destSurface, _destSpriteX, _destSpriteY, - _destSpriteX + _spriteRight - 1, _destSpriteY + _spriteBottom - 1); - - delete resource; - - width = _destSpriteX + _spriteRight - 1; - height = _destSpriteY + _spriteBottom - 1; - break; - - case DRAW_PRINTTEXT: // 6 - Display string - width = _destSpriteX - 1 + strlen(_textToPrint) * _fonts[_fontIndex]->getCharWidth(); - height = _destSpriteY - 1 + _fonts[_fontIndex]->getCharHeight(); - break; - - case DRAW_DRAWLETTER: // 10 - Display a character - if (_fontToSprite[_fontIndex].sprite == -1) { - width = _destSpriteX - 1 + _fonts[_fontIndex]->getCharWidth(); - height = _destSpriteY - 1 + _fonts[_fontIndex]->getCharHeight(); - } else { - width = _destSpriteX + _fontToSprite[_fontIndex].width - 1; - height = _destSpriteY + _fontToSprite[_fontIndex].height - 1; - } - break; - - default: -// width = 0; -// height = 0; - error("winDraw - Unexpected fct value %d", fct); - break; - } - - for (int i = 0; i < 10; i++) - if ((i != _vm->_global->_curWinId) && (_fascinWin[i].id != -1)) - if (!_vm->_global->_curWinId || _fascinWin[i].id>_fascinWin[_vm->_global->_curWinId].id) - if ((_fascinWin[i].left + _fascinWin[i].width > left) && (width >= _fascinWin[i].left) && - (_fascinWin[i].top + _fascinWin[i].height > top ) && (height >= _fascinWin[i].top)) { - found = true; - table[_fascinWin[i].id] = i; - } - - if ((_sourceSurface == kBackSurface) && (fct == 0)) { - _vm->_video->drawSprite(*_spritesArray[_sourceSurface], *_spritesArray[_destSurface], - _spriteLeft, _spriteTop, _spriteLeft + _spriteRight - 1, - _spriteTop + _spriteBottom - 1, _destSpriteX, _destSpriteY, _transparency); - if (!found) - return; - - int j = 0; - if (_vm->_global->_curWinId != 0) - j = _fascinWin[_vm->_global->_curWinId].id + 1; - - for (int i = 9; i >= j; i--) { - if (table[i]) - _vm->_video->drawSprite(*_fascinWin[table[i]].savedSurface, *_spritesArray[_destSurface], - _fascinWin[table[i]].left & 7, 0, - (_fascinWin[table[i]].left & 7) + _fascinWin[table[i]].width - 1, - _fascinWin[table[i]].height - 1, _fascinWin[table[i]].left - _spriteLeft + _destSpriteX, - _fascinWin[table[i]].top - _spriteTop + _destSpriteY, 0); - } - return; - } - - if (found) { - tempSrf = _vm->_video->initSurfDesc(_vm->_global->_videoMode, width - left + 1, height - top + 1, 0); - _vm->_video->drawSprite(*_backSurface, *tempSrf, left, top, width, height, 0, 0, 0); - - int max = 0; - if (_vm->_global->_curWinId != 0) - max = _fascinWin[_vm->_global->_curWinId].id + 1; - - for (int i = 9; i >= max; i--) { - if (table[i]) - _vm->_video->drawSprite(*_fascinWin[table[i]].savedSurface, *tempSrf, - _fascinWin[table[i]].left & 7, 0, - (_fascinWin[table[i]].left & 7) + _fascinWin[table[i]].width - 1, - _fascinWin[table[i]].height - 1, - _fascinWin[table[i]].left - left, - _fascinWin[table[i]].top - top , 0); - } - - invalidateRect(left, top, width, height); - - switch (fct) { - case DRAW_BLITSURF: // 0 - move - _vm->_video->drawSprite(*_spritesArray[_sourceSurface], *tempSrf, - _spriteLeft, _spriteTop, _spriteLeft + _spriteRight - 1, - _spriteTop + _spriteBottom - 1, 0, 0, _transparency); - break; - - case DRAW_PUTPIXEL: // 1 - put a pixel - _vm->_video->putPixel(0, 0, _frontColor, *tempSrf); - break; - - case DRAW_FILLRECT: // 2 - fill rectangle - _vm->_video->fillRect(*tempSrf, 0, 0, _spriteRight - 1, _spriteBottom - 1, _backColor); - break; - - case DRAW_DRAWLINE: // 3 - draw line - _vm->_video->drawLine(*tempSrf, 0, 0, _spriteRight - _destSpriteX, _spriteBottom - _destSpriteY, _frontColor); - break; - - case DRAW_INVALIDATE: // 4 - Draw a circle - _vm->_video->drawCircle(*tempSrf, _spriteRight, _spriteRight, _spriteRight, _frontColor); - break; - - case DRAW_LOADSPRITE: // 5 - Uncompress and load a sprite - winDecomp(0, 0, tempSrf); - break; - - case DRAW_PRINTTEXT: // 6 - Display string - len = strlen(_textToPrint); - for (int j = 0; j < len; j++) - _vm->_video->drawLetter(_textToPrint[j], j * _fonts[_fontIndex]->getCharWidth(), 0, - *_fonts[_fontIndex], _transparency, _frontColor, _backColor, *tempSrf); - _destSpriteX += len * _fonts[_fontIndex]->getCharWidth(); - break; - - case DRAW_DRAWBAR: // 7 - draw border - _vm->_video->drawLine(*tempSrf, 0, _spriteBottom - _destSpriteY, _spriteRight - _destSpriteX, _spriteBottom - _destSpriteY, _frontColor); - _vm->_video->drawLine(*tempSrf, 0, 0, 0, _spriteBottom - _destSpriteY, _frontColor); - _vm->_video->drawLine(*tempSrf, _spriteRight - _destSpriteX, 0, _spriteRight - _destSpriteX, _spriteBottom - _destSpriteY, _frontColor); - _vm->_video->drawLine(*tempSrf, 0, 0, _spriteRight - _destSpriteX, 0, _frontColor); - break; - - case DRAW_CLEARRECT: // 8 - clear rectangle - if (_backColor < 16) - _vm->_video->fillRect(*tempSrf, 0, 0, _spriteRight - _destSpriteX, _spriteBottom - _destSpriteY, _backColor); - break; - - case DRAW_FILLRECTABS: // 9 - fill rectangle, with other coordinates - _vm->_video->fillRect(*tempSrf, 0, 0, _spriteRight - _destSpriteX, _spriteBottom - _destSpriteY, _backColor); - break; - - case DRAW_DRAWLETTER: // 10 - Display a character - if (_fontToSprite[_fontIndex].sprite == -1) { - - if (_letterToPrint) - _vm->_video->drawLetter(_letterToPrint, 0, 0, *_fonts[_fontIndex], _transparency, _frontColor, _backColor, *tempSrf); - } else { - int xx, yy, nn; - nn = _spritesArray[_fontToSprite[_fontIndex].sprite]->getWidth() / _fontToSprite[_fontIndex].width; - yy = ((_letterToPrint - _fontToSprite[_fontIndex].base) / nn) * _fontToSprite[_fontIndex].height; - xx = ((_letterToPrint - _fontToSprite[_fontIndex].base) % nn) * _fontToSprite[_fontIndex].width; - _vm->_video->drawSprite(*_spritesArray[_fontToSprite[_fontIndex].sprite], *tempSrf, - xx, yy, xx + _fontToSprite[_fontIndex].width - 1, - yy + _fontToSprite[_fontIndex].height - 1, 0, 0, _transparency); - } - break; - - default: - error("winDraw - Unexpected fct value %d", fct); - break; - } - - int i = 0; - if (_vm->_global->_curWinId != 0) - i = _fascinWin[_vm->_global->_curWinId].id + 1; - - for (; i < 10; i++) { - if (table[i]) { - int k = table[i]; - _vm->_video->drawSprite(*tempSrf, *_fascinWin[k].savedSurface, - 0, 0, width - left, height - top, - left - _fascinWin[k].left + (_fascinWin[k].left & 7), - top - _fascinWin[k].top, 0); - // Shift skipped as always set to zero (?) - _vm->_video->drawSprite(*_frontSurface, *tempSrf, - MAX(left , _fascinWin[k].left), - MAX(top , _fascinWin[k].top), - MIN(width , (int16) (_fascinWin[k].left + _fascinWin[k].width - 1)), - MIN(height, (int16) (_fascinWin[k].top + _fascinWin[k].height - 1)), - MAX(left , _fascinWin[k].left) - left, - MAX(top , _fascinWin[k].top) - top, 0); - if (_cursorIndex != -1) - _vm->_video->drawSprite(*_cursorSpritesBack, *tempSrf, - 0, 0, _cursorWidth - 1, _cursorHeight - 1, - _cursorX - left, _cursorY - top, 0); - for (int j = 9; j > i; j--) { - if (table[j] && winOverlap(k, table[j])) { - int l = table[j]; - _vm->_video->drawSprite(*_fascinWin[l].savedSurface, *tempSrf, - MAX(_fascinWin[l].left, _fascinWin[k].left) - - _fascinWin[l].left + (_fascinWin[l].left & 7), - MAX(_fascinWin[l].top , _fascinWin[k].top ) - _fascinWin[l].top, - MIN(_fascinWin[l].left + _fascinWin[l].width - 1, _fascinWin[k].left + _fascinWin[k].width - 1) - - _fascinWin[l].left + (_fascinWin[l].left & 7), - MIN(_fascinWin[l].top + _fascinWin[l].height - 1, _fascinWin[k].top + _fascinWin[k].height - 1) - - _fascinWin[l].top, - MAX(_fascinWin[l].left, _fascinWin[k].left) - left, - MAX(_fascinWin[l].top , _fascinWin[k].top ) - top, 0); - } - } - } - } - _vm->_video->drawSprite(*tempSrf, *_backSurface, 0, 0, width - left, height - top, left, top, 0); - tempSrf.reset(); - } else { - invalidateRect(left, top, width, height); - switch (fct) { - case DRAW_BLITSURF: // 0 - move - _vm->_video->drawSprite(*_spritesArray[_sourceSurface], *_backSurface, - _spriteLeft, _spriteTop, - _spriteLeft + _spriteRight - 1, - _spriteTop + _spriteBottom - 1, - _destSpriteX, _destSpriteY, _transparency); - break; - case DRAW_PUTPIXEL: // 1 - put a pixel - _vm->_video->putPixel(_destSpriteX, _destSpriteY, _frontColor, *_backSurface); - break; - - case DRAW_FILLRECT: // 2 - fill rectangle - _vm->_video->fillRect(*_backSurface, _destSpriteX, _destSpriteY, _destSpriteX + _spriteRight - 1, _destSpriteY + _spriteBottom - 1, _backColor); - break; - - case DRAW_DRAWLINE: // 3 - draw line - _vm->_video->drawLine(*_backSurface, _destSpriteX, _destSpriteY, _spriteRight, _spriteBottom, _frontColor); - break; - - case DRAW_INVALIDATE: // 4 - Draw a circle - _vm->_video->drawCircle(*_backSurface, _spriteRight, _spriteRight, _spriteRight, _frontColor); - break; - - case DRAW_LOADSPRITE: // 5 - Uncompress and load a sprite - winDecomp(_destSpriteX, _destSpriteY, _backSurface); - break; - - case DRAW_PRINTTEXT: // 6 - Display string - len = strlen(_textToPrint); - for (int j = 0; j < len; j++) - _vm->_video->drawLetter(_textToPrint[j], _destSpriteX + j * _fonts[_fontIndex]->getCharWidth(), - _destSpriteY, *_fonts[_fontIndex], _transparency, _frontColor, _backColor, *_backSurface); - _destSpriteX += len * _fonts[_fontIndex]->getCharWidth(); - break; - - case DRAW_DRAWBAR: // 7 - draw border - _vm->_video->drawLine(*_backSurface, _destSpriteX, _spriteBottom, _spriteRight, _spriteBottom, _frontColor); - _vm->_video->drawLine(*_backSurface, _destSpriteX, _destSpriteY, _destSpriteX, _spriteBottom, _frontColor); - _vm->_video->drawLine(*_backSurface, _spriteRight, _destSpriteY, _spriteRight, _spriteBottom, _frontColor); - _vm->_video->drawLine(*_backSurface, _destSpriteX, _destSpriteY, _spriteRight, _destSpriteY, _frontColor); - break; - - case DRAW_CLEARRECT: // 8 - clear rectangle - if (_backColor < 16) - _vm->_video->fillRect(*_backSurface, _destSpriteX, _destSpriteY, _spriteRight, _spriteBottom, _backColor); - break; - - case DRAW_FILLRECTABS: // 9 - fill rectangle, with other coordinates - _vm->_video->fillRect(*_backSurface, _destSpriteX, _destSpriteY, _spriteRight, _spriteBottom, _backColor); - break; - - case DRAW_DRAWLETTER: // 10 - Display a character - if (_fontToSprite[_fontIndex].sprite == -1) { - if (_letterToPrint) - _vm->_video->drawLetter(_letterToPrint, _destSpriteX, _destSpriteY, *_fonts[_fontIndex], _transparency, - _frontColor, _backColor, *_spritesArray[_destSurface]); - } else { - int xx, yy, nn; - nn = _spritesArray[_fontToSprite[_fontIndex].sprite]->getWidth() / _fontToSprite[_fontIndex].width; - yy = ((_letterToPrint - _fontToSprite[_fontIndex].base) / nn) * _fontToSprite[_fontIndex].height; - xx = ((_letterToPrint - _fontToSprite[_fontIndex].base) % nn) * _fontToSprite[_fontIndex].width; - _vm->_video->drawSprite(*_spritesArray[_fontToSprite[_fontIndex].sprite], *_spritesArray[_destSurface], - xx, yy, - xx + _fontToSprite[_fontIndex].width - 1, - yy + _fontToSprite[_fontIndex].height - 1, - _destSpriteX, _destSpriteY, _transparency); - } - break; - - default: - error("winDraw - Unexpected fct value"); - break; - } - } - - if (_renderFlags & 16) { - if (_sourceSurface == kBackSurface) { - _spriteLeft -= _backDeltaX; - _spriteTop -= _backDeltaY; - } - if (_destSurface == kBackSurface) { - _destSpriteX -= _backDeltaX; - _destSpriteY -= _backDeltaY; - } - } - - if (_vm->_global->_curWinId) { - _destSpriteX -= _fascinWin[_vm->_global->_curWinId].left; - _destSpriteY -= _fascinWin[_vm->_global->_curWinId].top; - } -} - -int16 Draw::isOverWin(int16 &dx, int16 &dy) { - int16 bestMatch = -1; - - if ((_renderFlags & 128) == 0) - return -1; - - for (int i = 0; i < 10; i++) - if (_fascinWin[i].id != -1) { - if ((_vm->_global->_inter_mouseX >= _fascinWin[i].left) && - (_vm->_global->_inter_mouseX < _fascinWin[i].left + _fascinWin[i].width) && - (_vm->_global->_inter_mouseY >= _fascinWin[i].top) && - (_vm->_global->_inter_mouseY < _fascinWin[i].top + _fascinWin[i].height)) { - - if (_fascinWin[i].id == _winCount - 1) { - dx = _fascinWin[i].left; - dy = _fascinWin[i].top; - return(i); - } else - if (_fascinWin[i].id > bestMatch) - bestMatch = _fascinWin[i].id; - } - } - - if (bestMatch != -1) - return(0); - else - return(-1); -} int32 Draw::getSpriteRectSize(int16 index) { if (!_spritesArray[index]) return 0; -- cgit v1.2.3 From 51fd528fe56e00466255d54e1e71b19f34729bfd Mon Sep 17 00:00:00 2001 From: Sven Hesse Date: Thu, 30 Sep 2010 13:02:16 +0000 Subject: GOB: Change all drawing to use class Surface svn-id: r52947 --- engines/gob/draw.cpp | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) (limited to 'engines/gob/draw.cpp') diff --git a/engines/gob/draw.cpp b/engines/gob/draw.cpp index 62b9a5e630..960f4e9e34 100644 --- a/engines/gob/draw.cpp +++ b/engines/gob/draw.cpp @@ -263,10 +263,10 @@ void Draw::blitInvalidated() { _vm->_video->_doRangeClamp = false; for (int i = 0; i < _invalidatedCount; i++) { - _vm->_video->drawSprite(*_backSurface, *_frontSurface, + _frontSurface->blit(*_backSurface, _invalidatedLefts[i], _invalidatedTops[i], _invalidatedRights[i], _invalidatedBottoms[i], - _invalidatedLefts[i], _invalidatedTops[i], 0); + _invalidatedLefts[i], _invalidatedTops[i]); _vm->_video->dirtyRectsAdd(_invalidatedLefts[i], _invalidatedTops[i], _invalidatedRights[i], _invalidatedBottoms[i]); } @@ -300,7 +300,7 @@ void Draw::dirtiedRect(int16 surface, dirtiedRect(_spritesArray[surface], left, top, right, bottom); } -void Draw::dirtiedRect(SurfaceDescPtr surface, +void Draw::dirtiedRect(SurfacePtr surface, int16 left, int16 top, int16 right, int16 bottom) { if (surface == _backSurface) @@ -316,7 +316,7 @@ void Draw::initSpriteSurf(int16 index, int16 width, int16 height, _spritesArray[index] = _vm->_video->initSurfDesc(_vm->_global->_videoMode, width, height, flags); - _vm->_video->clearSurf(*_spritesArray[index]); + _spritesArray[index]->clear(); } void Draw::adjustCoords(char adjust, int16 *coord1, int16 *coord2) { @@ -381,14 +381,14 @@ int Draw::stringLength(const char *str, int16 fontIndex) { } void Draw::drawString(const char *str, int16 x, int16 y, int16 color1, int16 color2, - int16 transp, SurfaceDesc &dest, const Font &font) { + int16 transp, Surface &dest, const Font &font) { while (*str != '\0') { const int16 charRight = x + font.getCharWidth(*str); const int16 charBottom = y + font.getCharHeight(); if ((charRight <= dest.getWidth()) && (charBottom <= dest.getHeight())) - _vm->_video->drawLetter(*str, x, y, font, transp, color1, color2, dest); + font.drawLetter(dest, *str, x, y, color1, color2, transp); x += font.getCharWidth(*str); str++; @@ -548,14 +548,10 @@ void Draw::forceBlit(bool backwards) { return; if (!backwards) { - _vm->_video->drawSprite(*_backSurface, *_frontSurface, 0, 0, - _backSurface->getWidth() - 1, _backSurface->getHeight() - 1, - 0, 0, 0); + _frontSurface->blit(*_backSurface); _vm->_video->dirtyRectsAll(); } else - _vm->_video->drawSprite(*_frontSurface, *_backSurface, 0, 0, - _frontSurface->getWidth() - 1, _frontSurface->getHeight() - 1, - 0, 0, 0); + _backSurface->blit(*_frontSurface); } @@ -602,7 +598,7 @@ const int16 Draw::_wobbleTable[360] = { -0x0A03, -0x08E8, -0x07CC, -0x06B0, -0x0593, -0x0476, -0x0359, -0x023B, -0x011D }; -void Draw::wobble(SurfaceDesc &surfDesc) { +void Draw::wobble(Surface &surfDesc) { int16 amplitude = 32; uint16 curFrame = 0; uint16 frameWobble = 0; @@ -626,16 +622,14 @@ void Draw::wobble(SurfaceDesc &surfDesc) { amplitude--; for (uint16 y = 0; y < _vm->_height; y++) - _vm->_video->drawSprite(surfDesc, *_frontSurface, - 0, y, _vm->_width - 1, y, offsets[y], y, 0); + _frontSurface->blit(surfDesc, 0, y, _vm->_width - 1, y, offsets[y], y); _vm->_palAnim->fadeStep(0); _vm->_video->dirtyRectsAll(); _vm->_video->waitRetrace(); } - _vm->_video->drawSprite(surfDesc, *_frontSurface, - 0, 0, _vm->_width - 1, _vm->_height - 1, 0, 0, 0); + _frontSurface->blit(surfDesc); _applyPal = false; _invalidatedCount = 0; -- cgit v1.2.3