From 19bd3fead832efe2a7fe0fbca4a5e34f2207e3c5 Mon Sep 17 00:00:00 2001 From: Peter Kohaut Date: Sun, 4 Feb 2018 18:01:19 +0100 Subject: BLADERUNNER: Fixed compilation warnings --- engines/bladerunner/ui/esper.cpp | 421 ++++++++++++++++++++------------------- engines/bladerunner/ui/esper.h | 29 +-- 2 files changed, 227 insertions(+), 223 deletions(-) (limited to 'engines/bladerunner/ui') diff --git a/engines/bladerunner/ui/esper.cpp b/engines/bladerunner/ui/esper.cpp index ea1df6bd38..3efbcf4832 100644 --- a/engines/bladerunner/ui/esper.cpp +++ b/engines/bladerunner/ui/esper.cpp @@ -44,11 +44,11 @@ namespace BladeRunner { -const Common::Rect ESPER::kScreen = Common::Rect(135, 123, 435, 387); - ESPER::ESPER(BladeRunnerEngine *vm) { _vm = vm; + _screen = Common::Rect(135, 123, 435, 387); + _isWaiting = false; _shapeButton = nullptr; _shapeThumbnail = nullptr; @@ -65,7 +65,8 @@ ESPER::ESPER(BladeRunnerEngine *vm) { _script = nullptr; reset(); - _buttons = new UIImagePicker(vm, 16); + + _buttons = new UIImagePicker(vm, kPhotoCount + 4); } ESPER::~ESPER() { @@ -98,7 +99,7 @@ void ESPER::open(Graphics::Surface *surface) { _photoData->create(kPhotoWidth, kPhotoHeight, createRGB555()); _viewportData = new Graphics::Surface(); - _viewportData->create(kScreen.width(), kScreen.height(), createRGB555()); + _viewportData->create(_screen.width(), _screen.height(), createRGB555()); _viewportNext = _viewport; @@ -193,7 +194,7 @@ void ESPER::handleMouseDown(int x, int y, bool mainButton) { if (mainButton) { if (_statePhoto != kEsperPhotoStateVideoZoomOut) { - if (kScreen.contains(x, y)) { + if (_screen.contains(x, y)) { _isMouseDown = true; playSound(460, 100); } @@ -253,21 +254,22 @@ void ESPER::resume() { void ESPER::addPhoto(const char *name, int photoId, int shapeId) { int i = findEmptyPhoto(); if (i >= 0) { - _photos[i].shapeId = shapeId; + _photos[i].shapeId = shapeId; _photos[i].isPresent = true; - _photos[i].photoId = photoId; - strcpy(_photos[i].name, name); + _photos[i].photoId = photoId; + _photos[i].name = name; assert((uint)shapeId < _shapesPhotos.size()); + _shapesPhotos[shapeId] = new Shape(_vm); _shapesPhotos[shapeId]->open("ESPTHUMB.SHP", shapeId); _buttons->defineImage(i, Common::Rect( - 100 * (i % 3) + kScreen.left + 3, - 66 * (i / 3) + kScreen.top + 3, - 100 * (i % 3) + kScreen.left + 100 - 3, - 66 * (i / 3) + kScreen.top + 66 - 3 + 100 * (i % 3) + _screen.left + 3, + 66 * (i / 3) + _screen.top + 3, + 100 * (i % 3) + _screen.left + 100 - 3, + 66 * (i / 3) + _screen.top + 66 - 3 ), _shapesPhotos[shapeId], _shapesPhotos[shapeId], @@ -282,13 +284,12 @@ void ESPER::addPhoto(const char *name, int photoId, int shapeId) { void ESPER::defineRegion(int regionId, Common::Rect inner, Common::Rect outer, Common::Rect selection, const char *name) { int i = findEmptyRegion(); if (i >= 0) { - _regions[i].isPresent = true; - _regions[i].regionId = regionId; - _regions[i].rectInner = inner; - _regions[i].rectOuter = outer; + _regions[i].isPresent = true; + _regions[i].regionId = regionId; + _regions[i].rectInner = inner; + _regions[i].rectOuter = outer; _regions[i].rectSelection = selection; - strncpy(_regions[i].name, name, 13); - _regions[i].name[13] = 0; + _regions[i].name = name; } } @@ -348,36 +349,32 @@ void ESPER::resetData() { delete _vqaPhotoPlayer; _vqaPhotoPlayer = nullptr; } + if (_shapeThumbnail) { delete _shapeThumbnail; _shapeThumbnail = nullptr; } - _viewport.left = 0; - _viewport.top = 0; + _viewport = Common::Rect(); + _viewportNext = Common::Rect(); + _selection = Common::Rect(-1, -1, -1, -1); _regionSelectedAck = false; - _mouseOverScroll = -1; - _isMouseDown = 0; - _viewportNext.left = 0; - _viewportNext.top = 0; - _selectionRect.left = -1; - _selectionRect.top = -1; - _selectionRect.right = -1; - _selectionRect.bottom = -1; + _mouseOverScroll = -1; + _scrollingDirection = -1; _selectionCrosshairX = -1; _selectionCrosshairY = -1; - _stateMain = kEsperMainStatePhoto; + _stateMain = kEsperMainStatePhoto; _statePhoto = kEsperPhotoStateShow; + _isMouseDown = false; _isDrawingSelection = false; - _flash = false; - _isScrolling = false; + _flash = false; + _isScrolling = false; - _scrollingDirection = -1; _timeScrollNext = 0; resetPhotos(); @@ -396,60 +393,63 @@ void ESPER::resetData() { void ESPER::resetPhotos() { for (int i = 0; i < kPhotoCount; ++i) { _photos[i].isPresent = false; - _photos[i].photoId = -1; + _photos[i].photoId = -1; } } void ESPER::resetRegions() { for (int i = 0; i < kRegionCount; ++i) { _regions[i].isPresent = false; - _regions[i].regionId = -1; + _regions[i].regionId = -1; } } void ESPER::resetViewport() { - _zoomHorizontal = (float)(kScreen.width()) / (float)kPhotoWidth; - _zoomVertical = (float)(kScreen.height()) / (float)kPhotoHeight; + _zoomHorizontal = (float)(_screen.width()) / (float)kPhotoWidth; + _zoomVertical = (float)(_screen.height()) / (float)kPhotoHeight; _zoom = _zoomVertical; _zoomMin = _zoom; _timeZoomOutNext = 0; - _viewportPositionX = kPhotoWidth / 2; + + _viewportPositionX = kPhotoWidth / 2; _viewportPositionY = kPhotoHeight / 2; updateViewport(); - _screenHalfWidth = kScreen.width() / 2; - _screenHalfHeight = kScreen.height() / 2; + _screenHalfWidth = _screen.width() / 2; + _screenHalfHeight = _screen.height() / 2; } void ESPER::resetSelectionRect() { - _selectionRect = kScreen; + _selection = _screen; _selectionCrosshairX = -1; _selectionCrosshairY = -1; } void ESPER::resetSelectionBlinking() { - _selectionBlinkingCounter = 0; - _selectionBlinkingStyle = 0; + _selectionBlinkingCounter = 0; + _selectionBlinkingStyle = 0; _timeSelectionBlinkingNext = 0; } void ESPER::resetPhotoZooming() { - _zoomStep = 0; + _zoomStep = 0; _timeZoomNext = 0; } void ESPER::resetPhotoOpening() { - _photoOpeningWidth = kScreen.left + 1; - _photoOpeningHeight = kScreen.top + 1; + _photoOpeningWidth = _screen.left + 1; + _photoOpeningHeight = _screen.top + 1; _timePhotoOpeningNext = 0; } void ESPER::updateViewport() { float halfWidth = (1.0f / 2.0f) * ((float)kPhotoWidth * (_zoomHorizontal / _zoom)); + _viewport.left = _viewportPositionX - halfWidth; _viewport.right = _viewportPositionX + halfWidth; + if (_viewport.left < 0) { _viewport.right -= _viewport.left; _viewport.left = 0; @@ -463,8 +463,10 @@ void ESPER::updateViewport() { } float halfHeight = 1.0f / 2.0f * ((float)kPhotoHeight * (_zoomVertical / _zoom)); + _viewport.top = _viewportPositionY - halfHeight; _viewport.bottom = _viewportPositionY + halfHeight; + if (_viewport.top < 0) { _viewport.bottom -= _viewport.top; _viewport.top = 0; @@ -480,16 +482,16 @@ void ESPER::updateViewport() { _viewportWidth = _viewport.right + 1 - _viewport.left; _viewportHeight = _viewport.bottom + 1 - _viewport.top; - int centerX = (_viewport.left + _viewport.right) / 2; - int centerY = (_viewport.top + _viewport.bottom) / 2; + int centerX = (_viewport.left + _viewport.right ) / 2; + int centerY = (_viewport.top + _viewport.bottom) / 2; - float v50 = _zoom / _zoomHorizontal * 1.0f; - if ((_viewportPositionX > centerX + v50) || (_viewportPositionX < centerX - v50)) { + float range = _zoom / _zoomHorizontal * 1.0f; + if ((_viewportPositionX > centerX + range) || (_viewportPositionX < centerX - range)) { _viewportPositionX = centerX; } - float v51 = _zoom / _zoomVertical * 1.0f; - if ((_viewportPositionY > centerY + v51) || (_viewportPositionY < centerY - v51)) { + range = _zoom / _zoomVertical * 1.0f; + if ((_viewportPositionY > centerY + range) || (_viewportPositionY < centerY - range)) { _viewportPositionY = centerY; } } @@ -550,13 +552,13 @@ void ESPER::wait(int timeout) { void ESPER::playSound(int soundId, int volume) { if (_soundId1 == -1) { _soundId1 = soundId; - _volume1 = volume; + _volume1 = volume; } else if (_soundId2 == -1) { _soundId2 = soundId; - _volume2 = volume; + _volume2 = volume; } else if (_soundId3 == -1) { _soundId3 = soundId; - _volume3 = volume; + _volume3 = volume; } } @@ -573,7 +575,7 @@ void ESPER::draw(Graphics::Surface &surface) { drawPhotoOpening(surface); break; case kEsperMainStateClear: - surface.fillRect(kScreen, 0x0000); + surface.fillRect(_screen, 0x0000); break; case kEsperMainStatePhoto: if (_isScrolling) { @@ -659,21 +661,21 @@ void ESPER::drawPhotoOpening(Graphics::Surface &surface) { bool needMoreZooming = true; int timeNow = _vm->getTotalPlayTime(); if (timeNow >= _timePhotoOpeningNext) { - _photoOpeningWidth = MIN(_photoOpeningWidth + 8, kScreen.right - 1); - _photoOpeningHeight = MIN(_photoOpeningHeight + 7, kScreen.bottom - 1); + _photoOpeningWidth = MIN(_photoOpeningWidth + 8, _screen.right - 1); + _photoOpeningHeight = MIN(_photoOpeningHeight + 7, _screen.bottom - 1); - if (_photoOpeningWidth == kScreen.right - 1 && _photoOpeningHeight == kScreen.bottom - 1) { + if (_photoOpeningWidth == _screen.right - 1 && _photoOpeningHeight == _screen.bottom - 1) { needMoreZooming = false; } _timePhotoOpeningNext = timeNow + 20; } - copyImageScale(_photoData, _viewport, &surface, Common::Rect(kScreen.left, kScreen.top, _photoOpeningWidth, _photoOpeningHeight)); + copyImageScale(_photoData, _viewport, &surface, Common::Rect(_screen.left, _screen.top, _photoOpeningWidth, _photoOpeningHeight)); - surface.hLine(kScreen.left, _photoOpeningHeight, kScreen.right - 1, 0x03E0); - surface.vLine(_photoOpeningWidth, kScreen.top, kScreen.bottom - 1, 0x03E0); - surface.hLine(kScreen.left, _photoOpeningHeight - 1, kScreen.right - 1, 0x0240); - surface.vLine(_photoOpeningWidth - 1, kScreen.top, kScreen.bottom - 1, 0x0240); + surface.hLine(_screen.left, _photoOpeningHeight, _screen.right - 1, 0x03E0); + surface.vLine(_photoOpeningWidth, _screen.top, _screen.bottom - 1, 0x03E0); + surface.hLine(_screen.left, _photoOpeningHeight - 1, _screen.right - 1, 0x0240); + surface.vLine(_photoOpeningWidth - 1, _screen.top, _screen.bottom - 1, 0x0240); drawGrid(surface); @@ -690,18 +692,18 @@ bool ESPER::drawSelectionZooming(Graphics::Surface &surface) { int timeNow = _vm->getTotalPlayTime(); if (timeNow > _timeSelectionZoomNext) { zooming = true; - _selectionRect.left += _selectionRectDelta.left; - _selectionRect.top += _selectionRectDelta.top; - _selectionRect.right += _selectionRectDelta.right; - _selectionRect.bottom += _selectionRectDelta.bottom; + _selection.left += _selectionDelta.left; + _selection.top += _selectionDelta.top; + _selection.right += _selectionDelta.right; + _selection.bottom += _selectionDelta.bottom; ++_selectionZoomStep; _timeSelectionZoomNext = timeNow + 150; if (_selectionZoomStep > kSelectionZoomSteps) { needMoreZooming = false; - _selectionRect.left = _selectionRectTarget.left; - _selectionRect.top = _selectionRectTarget.top; - _selectionRect.right = _selectionRectTarget.right; - _selectionRect.bottom = _selectionRectTarget.bottom; + _selection.left = _selectionTarget.left; + _selection.top = _selectionTarget.top; + _selection.right = _selectionTarget.right; + _selection.bottom = _selectionTarget.bottom; } } drawSelection(surface, false, 1); @@ -742,8 +744,8 @@ void ESPER::drawPhotoZooming(Graphics::Surface &surface) { _viewportPositionXCurrent += _viewportPositionXDelta; _viewportPositionYCurrent += _viewportPositionYDelta; - _viewportPositionX = _viewportPositionXCurrent; - _viewportPositionY = _viewportPositionYCurrent; + _viewportPositionX = _viewportPositionXCurrent; + _viewportPositionY = _viewportPositionYCurrent; _zoom += _zoomDelta; if (_zoomDelta > 0.0f) { @@ -778,7 +780,7 @@ void ESPER::drawPhotoZooming(Graphics::Surface &surface) { if ((timeNow > _timeZoomNext) && (_zoomStep >= _zoomSteps)) { if (_regionSelectedAck) { - if (_regions[_regionSelected].name[0]) { + if (!_regions[_regionSelected].name.empty()) { if (_zoomDelta < 0.0f) { _blur = 1.0f; _zoomDelta = (_zoom * 1.5f - _zoom) / (float)_zoomSteps; // 0.5f * _zoom ??? @@ -787,10 +789,10 @@ void ESPER::drawPhotoZooming(Graphics::Surface &surface) { _timeZoomNext += 300; } else { _regionSelectedAck = false; - _selectionRect.left = viewportXToScreenX(_regions[_regionSelected].rectInner.left); - _selectionRect.right = viewportXToScreenX(_regions[_regionSelected].rectInner.right); - _selectionRect.top = viewportYToScreenY(_regions[_regionSelected].rectInner.top); - _selectionRect.bottom = viewportYToScreenY(_regions[_regionSelected].rectInner.bottom); + _selection.left = viewportXToScreenX(_regions[_regionSelected].rectInner.left); + _selection.right = viewportXToScreenX(_regions[_regionSelected].rectInner.right); + _selection.top = viewportYToScreenY(_regions[_regionSelected].rectInner.top); + _selection.bottom = viewportYToScreenY(_regions[_regionSelected].rectInner.bottom); prepareZoom(); resetPhotoZooming(); updateSelection(); @@ -807,33 +809,33 @@ void ESPER::drawPhotoSharpening(Graphics::Surface &surface) { int timeNow = _vm->getTotalPlayTime(); bool needMoreSharpening = true; if (timeNow >= _timePhotoOpeningNext) { - _photoOpeningWidth = MIN(_photoOpeningWidth + 8, kScreen.right - 1); - _photoOpeningHeight = MIN(_photoOpeningHeight + 7, kScreen.bottom - 1); + _photoOpeningWidth = MIN(_photoOpeningWidth + 8, _screen.right - 1); + _photoOpeningHeight = MIN(_photoOpeningHeight + 7, _screen.bottom - 1); - if (_photoOpeningWidth == kScreen.right - 1 && _photoOpeningHeight == kScreen.bottom - 1) { + if (_photoOpeningWidth == _screen.right - 1 && _photoOpeningHeight == _screen.bottom - 1) { needMoreSharpening = false; } _timePhotoOpeningNext = timeNow + 50; } - if (_regionSelectedAck && _regions[_regionSelected].name[0]) { + if (_regionSelectedAck && !_regions[_regionSelected].name.empty()) { _vqaPhotoPlayer->update(true, false); - copyImageBlur(_viewportData, Common::Rect(0, 0, 299, 263), &surface, kScreen, _blur); - copyImageBlit(_viewportData, Common::Rect(0, 0, 0, 0), &surface, Common::Rect(kScreen.left, kScreen.top, _photoOpeningWidth, _photoOpeningHeight)); + copyImageBlur(_viewportData, Common::Rect(0, 0, 299, 263), &surface, _screen, _blur); + copyImageBlit(_viewportData, Common::Rect(0, 0, 0, 0), &surface, Common::Rect(_screen.left, _screen.top, _photoOpeningWidth, _photoOpeningHeight)); } else { drawPhoto(surface); - copyImageScale(_photoData, _viewport, _viewportData, Common::Rect(0, 0, kScreen.width(), kScreen.height())); - copyImageBlit(_viewportData, Common::Rect(0, 0, 0, 0), &surface, Common::Rect(kScreen.left, kScreen.top, _photoOpeningWidth, _photoOpeningHeight)); + copyImageScale(_photoData, _viewport, _viewportData, Common::Rect(0, 0, _screen.width(), _screen.height())); + copyImageBlit(_viewportData, Common::Rect(0, 0, 0, 0), &surface, Common::Rect(_screen.left, _screen.top, _photoOpeningWidth, _photoOpeningHeight)); } drawGrid(surface); - surface.hLine(kScreen.left, _photoOpeningHeight, kScreen.right - 1, 0x03E0); - surface.vLine(_photoOpeningWidth, kScreen.top, kScreen.bottom - 1, 0x03E0); - surface.hLine(kScreen.left, _photoOpeningHeight - 1, kScreen.right - 1, 0x0240); - surface.vLine(_photoOpeningWidth - 1, kScreen.top, kScreen.bottom - 1, 0x0240); + surface.hLine(_screen.left, _photoOpeningHeight, _screen.right - 1, 0x03E0); + surface.vLine(_photoOpeningWidth, _screen.top, _screen.bottom - 1, 0x03E0); + surface.hLine(_screen.left, _photoOpeningHeight - 1, _screen.right - 1, 0x0240); + surface.vLine(_photoOpeningWidth - 1, _screen.top, _screen.bottom - 1, 0x0240); if (!needMoreSharpening) { - if (_regionSelectedAck && _regions[_regionSelected].name[0]){ + if (_regionSelectedAck && !_regions[_regionSelected].name.empty()){ setStatePhoto(kEsperPhotoStateVideoShow); } else { setStatePhoto(kEsperPhotoStateShow); @@ -905,7 +907,7 @@ void ESPER::drawVideoZooming(Graphics::Surface &surface) { if (flash) { flashViewport(); } - copyImageBlur(_viewportData, Common::Rect(0, 0, 299, 263), &surface, kScreen, _blur); + copyImageBlur(_viewportData, Common::Rect(0, 0, 299, 263), &surface, _screen, _blur); drawGrid(surface); } @@ -933,7 +935,7 @@ void ESPER::drawVideoZoomOut(Graphics::Surface &surface) { if (flash) { flashViewport(); } - copyImageBlit(_viewportData, Common::Rect(0, 0, 0, 0), &surface, kScreen); + copyImageBlit(_viewportData, Common::Rect(0, 0, 0, 0), &surface, _screen); drawGrid(surface); if (timeNow > _timeZoomNext && _vqaLastFrame <= 0) { _vqaPhotoPlayer->close(); @@ -951,29 +953,29 @@ void ESPER::drawVideoZoomOut(Graphics::Surface &surface) { } void ESPER::drawPhoto(Graphics::Surface &surface) { - copyImageBlur(_photoData, _viewport, &surface, kScreen, _blur); + copyImageBlur(_photoData, _viewport, &surface, _screen, _blur); } void ESPER::drawGrid(Graphics::Surface &surface) { for (int i = 0; i < 7; ++i) { - surface.drawLine(kScreen.left + i * 50, kScreen.top, kScreen.left + i * 50, kScreen.bottom - 1, 0x109C); + surface.drawLine(_screen.left + i * 50, _screen.top, _screen.left + i * 50, _screen.bottom - 1, 0x109C); } for (int i = 0; i < 7; ++i) { - surface.drawLine(kScreen.left, kScreen.top + i * 44, kScreen.right - 1, kScreen.top + i * 44, 0x109C); + surface.drawLine(_screen.left, _screen.top + i * 44, _screen.right - 1, _screen.top + i * 44, 0x109C); } } void ESPER::drawPhotoWithGrid(Graphics::Surface &surface) { - copyImageScale(_photoData, _viewport, &surface, kScreen); + copyImageScale(_photoData, _viewport, &surface, _screen); drawGrid(surface); } void ESPER::drawSelection(Graphics::Surface &surface, bool crosshair, int style) { - int left = CLIP(_selectionRect.left, kScreen.left, (int16)(kScreen.right - 1)); - int top = CLIP(_selectionRect.top, kScreen.top, (int16)(kScreen.bottom - 1)); - int right = CLIP(_selectionRect.right, kScreen.left, (int16)(kScreen.right - 1)); - int bottom = CLIP(_selectionRect.bottom, kScreen.top, (int16)(kScreen.bottom - 1)); + int left = CLIP(_selection.left, _screen.left, (int16)(_screen.right - 1)); + int top = CLIP(_selection.top, _screen.top, (int16)(_screen.bottom - 1)); + int right = CLIP(_selection.right, _screen.left, (int16)(_screen.right - 1)); + int bottom = CLIP(_selection.bottom, _screen.top, (int16)(_screen.bottom - 1)); int color = 0x0240; if (style) { @@ -989,23 +991,23 @@ void ESPER::drawSelection(Graphics::Surface &surface, bool crosshair, int style) if (crosshair) { if (_selectionCrosshairX == -1) { - if (_selectionRect.left < (kScreen.left + kScreen.right) / 2) { - _selectionCrosshairX = kScreen.left; + if (_selection.left < (_screen.left + _screen.right) / 2) { + _selectionCrosshairX = _screen.left; } else { - _selectionCrosshairX = kScreen.right - 1; + _selectionCrosshairX = _screen.right - 1; } } if (_selectionCrosshairY == -1) { - if (_selectionRect.top < (kScreen.top + kScreen.bottom) / 2) { - _selectionCrosshairY = kScreen.top; + if (_selection.top < (_screen.top + _screen.bottom) / 2) { + _selectionCrosshairY = _screen.top; } else { - _selectionCrosshairY = kScreen.bottom - 1; + _selectionCrosshairY = _screen.bottom - 1; } } // ghosting if (_selectionCrosshairX != right) { - surface.vLine(_selectionCrosshairX, kScreen.top, kScreen.bottom - 1, 0x0240); + surface.vLine(_selectionCrosshairX, _screen.top, _screen.bottom - 1, 0x0240); if (abs(_selectionCrosshairX - right) <= 1) { _selectionCrosshairX = right; } else { @@ -1013,7 +1015,7 @@ void ESPER::drawSelection(Graphics::Surface &surface, bool crosshair, int style) } } if (_selectionCrosshairY != bottom) { - surface.hLine(kScreen.left, _selectionCrosshairY, kScreen.right - 1, 0x0240); + surface.hLine(_screen.left, _selectionCrosshairY, _screen.right - 1, 0x0240); if (abs(_selectionCrosshairY - bottom) <= 1) { _selectionCrosshairY = bottom; } else { @@ -1021,19 +1023,19 @@ void ESPER::drawSelection(Graphics::Surface &surface, bool crosshair, int style) } } - surface.vLine(right, kScreen.top, kScreen.bottom - 1, 0x03E0); - surface.hLine(kScreen.left, bottom, kScreen.right - 1, 0x03E0); + surface.vLine(right, _screen.top, _screen.bottom - 1, 0x03E0); + surface.hLine(_screen.left, bottom, _screen.right - 1, 0x03E0); } } void ESPER::drawVideoFrame(Graphics::Surface &surface) { _vqaPhotoPlayer->update(true, false); - copyImageBlit(_viewportData, Common::Rect(0, 0, 0, 0), &surface, kScreen); + copyImageBlit(_viewportData, Common::Rect(0, 0, 0, 0), &surface, _screen); } void ESPER::drawTextCoords(Graphics::Surface &surface) { _vm->_mainFont->drawColor(Common::String::format("ZM %04.0f", _zoom / _zoomMin * 2.0f ), surface, 155, 364, 0x001F); - _vm->_mainFont->drawColor(Common::String::format("NS %04d", 12 * _viewport.top + 98 ), surface, 260, 364, 0x001F); + _vm->_mainFont->drawColor(Common::String::format("NS %04d", 12 * _viewport.top + 98), surface, 260, 364, 0x001F); _vm->_mainFont->drawColor(Common::String::format("EW %04d", 12 * _viewport.left + 167), surface, 364, 364, 0x001F); } @@ -1043,7 +1045,7 @@ void ESPER::flashViewport() { int8 r = (*ptr >> 10) & 0x1F; int8 g = (*ptr >> 5) & 0x1F; int8 b = (*ptr ) & 0x1F; - b = MIN(b * 2, 31); + b = MIN(b * 2, 0x1F); *ptr = r << 10 | g << 5 | b; ++ptr; @@ -1076,7 +1078,7 @@ void ESPER::copyImageScale(Graphics::Surface *src, Common::Rect srcRect, Graphic int8 g = (*srcPtr >> 5) & 0x1F; int8 b = (*srcPtr ) & 0x1F; // add blue-ish tint - b = MIN(b * 2, 31); + b = MIN(b * 2, 0x1F); *dstPtr = r << 10 | g << 5 | b; } else { *dstPtr = *srcPtr; @@ -1118,7 +1120,7 @@ void ESPER::copyImageScale(Graphics::Surface *src, Common::Rect srcRect, Graphic int8 g = (*srcPtr >> 5) & 0x1F; int8 b = (*srcPtr ) & 0x1F; // add blue-ish tint - b = MIN(b * 2, 31); + b = MIN(b * 2, 0x1F); *dstPtr = r << 10 | g << 5 | b; } else { *dstPtr = *srcPtr; @@ -1182,7 +1184,7 @@ void ESPER::copyImageBlur(Graphics::Surface *src, Common::Rect srcRect, Graphics int8 g = (*srcPtr >> 5) & 0x1F; int8 b = (*srcPtr ) & 0x1F; // add blue-ish tint - b = MIN(b * 2, 31); + b = MIN(b * 2, 0x1F); *dstPtr = r << 10 | g << 5 | b; } else { *dstPtr = *srcPtr; @@ -1252,7 +1254,7 @@ void ESPER::copyImageBlur(Graphics::Surface *src, Common::Rect srcRect, Graphics int8 g = (*srcPtr >> 5) & 0x1F; int8 b = (*srcPtr ) & 0x1F; // add blue-ish tint - b = MIN(b * 2, 31); + b = MIN(b * 2, 0x1F); *dstPtr = r << 10 | g << 5 | b; } else { *dstPtr = *srcPtr; @@ -1313,41 +1315,40 @@ void ESPER::tickMouse(Graphics::Surface &surface) { _mouseOverScroll = 4; if (_stateMain == kEsperMainStatePhoto) { - if (kScreen.contains(p)) { - if (_statePhoto == kEsperPhotoStateShow) { - if ( _zoom != 2.0f) { - if (_isMouseDown) { - if (_isDrawingSelection) { - _selectionRect.right = p.x; - _selectionRect.bottom = p.y; - } else { - _selectionRect.left = p.x; - _selectionRect.top = p.y; - _selectionRect.right = p.x + 1; - _selectionRect.bottom = p.y + 1; - _isDrawingSelection = true; - } + if (_screen.contains(p)) { + if ((_statePhoto == kEsperPhotoStateShow) && ( _zoom != 2.0f)) { + if (_isMouseDown) { + if (_isDrawingSelection) { + _selection.right = p.x; + _selection.bottom = p.y; } else { - if (_isDrawingSelection) { - _selectionRect.right = p.x; - _selectionRect.bottom = p.y; - if (_selectionRect.right < _selectionRect.left) { - SWAP(_selectionRect.left, _selectionRect.right); - } - if (_selectionRect.bottom < _selectionRect.top) { - SWAP(_selectionRect.bottom, _selectionRect.top); - } - - if (_selectionRect.right >= _selectionRect.left + 3) { - updateSelection(); - _vm->_mouse->disable(); - zoomingStart(); - } else { - resetSelectionRect(); - } + _selection.left = p.x; + _selection.top = p.y; + _selection.right = p.x + 1; + _selection.bottom = p.y + 1; + _isDrawingSelection = true; + } + } else { + if (_isDrawingSelection) { + _selection.right = p.x; + _selection.bottom = p.y; + + if (_selection.right < _selection.left) { + SWAP(_selection.left, _selection.right); + } + if (_selection.bottom < _selection.top) { + SWAP(_selection.bottom, _selection.top); + } + + if (_selection.right >= _selection.left + 3) { + updateSelection(); + _vm->_mouse->disable(); + zoomingStart(); + } else { + resetSelectionRect(); } - _isDrawingSelection = false; } + _isDrawingSelection = false; } } surface.vLine(p.x, p.y - 8, p.y - 1, 0x03E0); @@ -1357,7 +1358,7 @@ void ESPER::tickMouse(Graphics::Surface &surface) { _mouseOverScroll = -1; } else if (p.x >= 85 && p.y >= 73 && p.x <= 484 && p.y <= 436) { if (!_isDrawingSelection && _statePhoto != kEsperPhotoStateVideoShow && _zoom != 2.0f) { - _mouseOverScroll = (angle_1024((kScreen.left + kScreen.right) / 2, (kScreen.top + kScreen.bottom) / 2, p.x, p.y) + 128) / 256; + _mouseOverScroll = (angle_1024((_screen.left + _screen.right) / 2, (_screen.top + _screen.bottom) / 2, p.x, p.y) + 128) / 256; if (_mouseOverScroll >= 4) { _mouseOverScroll = 0; } @@ -1510,8 +1511,8 @@ void ESPER::zoomOutStop() { void ESPER::scrollingStart(int direction) { scrollingStop(); if ((direction != 3 || _viewport.left > 0) - && (direction != 0 || _viewport.top > 0) - && (direction != 1 || _viewport.right != kPhotoWidth - 1) + && (direction != 0 || _viewport.top > 0) + && (direction != 1 || _viewport.right != kPhotoWidth - 1) && (direction != 2 || _viewport.bottom != kPhotoHeight - 1)) { _isScrolling = true; _scrollingDirection = direction; @@ -1530,14 +1531,16 @@ void ESPER::scrollUpdate() { } if (_viewport.left != _viewportNext.left) { - _viewport.left = _viewportNext.left; - _viewport.right = _viewportNext.right; + _viewport.left = _viewportNext.left; + _viewport.right = _viewportNext.right; + _viewportPositionX = (_viewportNext.left + _viewportNext.right) / 2; } if (_viewport.top != _viewportNext.top) { - _viewport.top = _viewportNext.top; - _viewport.bottom = _viewportNext.bottom; + _viewport.top = _viewportNext.top; + _viewport.bottom = _viewportNext.bottom; + _viewportPositionY = (_viewportNext.top + _viewportNext.bottom) / 2; } } @@ -1583,8 +1586,8 @@ void ESPER::scrollRight() { _viewportNext.bottom = _viewport.bottom; if (_viewportNext.right > kPhotoWidth - 1) { - _viewportNext.left -= _viewportNext.right - (kPhotoWidth - 1); - _viewportNext.right = kPhotoWidth - 1; + _viewportNext.left -= _viewportNext.right - (kPhotoWidth - 1); + _viewportNext.right = kPhotoWidth - 1; scrollingStop(); } } @@ -1601,8 +1604,8 @@ void ESPER::scrollDown() { _viewportNext.right = _viewport.right; if (_viewportNext.bottom > kPhotoHeight - 1) { - _viewportNext.top -= _viewportNext.bottom - (kPhotoHeight - 1); - _viewportNext.bottom = kPhotoHeight - 1; + _viewportNext.top -= _viewportNext.bottom - (kPhotoHeight - 1); + _viewportNext.bottom = kPhotoHeight - 1; scrollingStop(); } } @@ -1620,17 +1623,17 @@ void ESPER::goBack() { } void ESPER::prepareZoom() { - _selectionZoomStep = 0; - _timeSelectionZoomNext = 0; + _selectionZoomStep = 0; + _timeSelectionZoomNext = 0; - _selectionRectTarget = _selectionRect; + _selectionTarget = _selection; resetSelectionRect(); - _selectionRectDelta.left = (_selectionRectTarget.left - _selectionRect.left) / kSelectionZoomSteps; - _selectionRectDelta.top = (_selectionRectTarget.top - _selectionRect.top) / kSelectionZoomSteps; - _selectionRectDelta.right = (_selectionRectTarget.right - _selectionRect.right) / kSelectionZoomSteps; - _selectionRectDelta.bottom = (_selectionRectTarget.bottom - _selectionRect.bottom) / kSelectionZoomSteps; + _selectionDelta.left = (_selectionTarget.left - _selection.left) / kSelectionZoomSteps; + _selectionDelta.top = (_selectionTarget.top - _selection.top) / kSelectionZoomSteps; + _selectionDelta.right = (_selectionTarget.right - _selection.right) / kSelectionZoomSteps; + _selectionDelta.bottom = (_selectionTarget.bottom - _selection.bottom) / kSelectionZoomSteps; - Common::Rect rect = _selectionRectTarget; + Common::Rect rect = _selectionTarget; if (_regionSelectedAck) { rect.left = viewportXToScreenX(_regions[_regionSelected].rectSelection.left); rect.top = viewportYToScreenY(_regions[_regionSelected].rectSelection.top); @@ -1639,7 +1642,7 @@ void ESPER::prepareZoom() { } _zoomSteps = 10; - float ratio = (rect.width() + 1.0f) / (float)kScreen.width(); + float ratio = (rect.width() + 1.0f) / (float)_screen.width(); if (ratio == 0.0f) { _zoomTarget = ratio; _zoomDelta = 0.0f; @@ -1651,8 +1654,8 @@ void ESPER::prepareZoom() { _blur = 1.0f; - _viewportPositionXTarget = _viewport.left + ((rect.left + rect.right) / 2 - kScreen.left) * _viewport.width() / kScreen.width(); - _viewportPositionYTarget = _viewport.top + ((rect.top + rect.bottom) / 2 - kScreen.top ) * _viewport.height() / kScreen.height(); + _viewportPositionXTarget = _viewport.left + ((rect.left + rect.right) / 2 - _screen.left) * _viewport.width() / _screen.width(); + _viewportPositionYTarget = _viewport.top + ((rect.top + rect.bottom) / 2 - _screen.top ) * _viewport.height() / _screen.height(); _viewportPositionXDelta = (_viewportPositionXTarget - _viewportPositionX) / (float)_zoomSteps; _viewportPositionYDelta = (_viewportPositionYTarget - _viewportPositionY) / (float)_zoomSteps; _viewportPositionXCurrent = _viewportPositionX; @@ -1660,55 +1663,55 @@ void ESPER::prepareZoom() { } void ESPER::updateSelection() { - int selectionWidth = abs(_selectionRect.right + 1 - _selectionRect.left); - int selectionHeight = abs(_selectionRect.bottom + 1 - _selectionRect.top); + int selectionWidth = abs(_selection.right + 1 - _selection.left); + int selectionHeight = abs(_selection.bottom + 1 - _selection.top); - int photoSelectedWidth = _viewport.width() * selectionWidth / kScreen.width(); + int photoSelectedWidth = _viewport.width() * selectionWidth / _screen.width(); if (photoSelectedWidth < _screenHalfWidth) { // minimal width of selection - selectionWidth = kScreen.width() * _screenHalfWidth / _viewport.width(); + selectionWidth = _screen.width() * _screenHalfWidth / _viewport.width(); } - photoSelectedWidth = _viewport.height() * selectionHeight / kScreen.height(); + photoSelectedWidth = _viewport.height() * selectionHeight / _screen.height(); if (photoSelectedWidth < _screenHalfHeight) { // minimal height of selection - selectionHeight = kScreen.height() * _screenHalfHeight / _viewport.height(); + selectionHeight = _screen.height() * _screenHalfHeight / _viewport.height(); } // correct aspect ratio - if (selectionWidth / (float)kScreen.width() <= selectionHeight / (float)kScreen.height()) { - while (selectionWidth / (float)kScreen.width() <= selectionHeight / (float)kScreen.height()) { + if (selectionWidth / (float)_screen.width() <= selectionHeight / (float)_screen.height()) { + while (selectionWidth / (float)_screen.width() <= selectionHeight / (float)_screen.height()) { ++selectionWidth; } } else { - while (selectionHeight / (float)kScreen.height() <= selectionWidth / (float)kScreen.width()) { + while (selectionHeight / (float)_screen.height() <= selectionWidth / (float)_screen.width()) { ++selectionHeight; } } - if (selectionWidth > kScreen.width()) { - selectionWidth = kScreen.width(); + if (selectionWidth > _screen.width()) { + selectionWidth = _screen.width(); } - if (selectionHeight > kScreen.height()) { - selectionHeight = kScreen.height(); + if (selectionHeight > _screen.height()) { + selectionHeight = _screen.height(); } - int left = _viewport.right - (kScreen.right - 1 - _selectionRect.left) * _viewport.width() / kScreen.width(); - int right = _viewport.left + (_selectionRect.right - kScreen.left ) * _viewport.width() / kScreen.width(); - int top = _viewport.bottom - (kScreen.bottom - 1 - _selectionRect.top ) * _viewport.height() / kScreen.height(); - int bottom = _viewport.top + (_selectionRect.bottom - kScreen.top ) * _viewport.height() / kScreen.height(); + int left = _viewport.right - (_screen.right - 1 - _selection.left) * _viewport.width() / _screen.width(); + int right = _viewport.left + (_selection.right - _screen.left ) * _viewport.width() / _screen.width(); + int top = _viewport.bottom - (_screen.bottom - 1 - _selection.top ) * _viewport.height() / _screen.height(); + int bottom = _viewport.top + (_selection.bottom - _screen.top ) * _viewport.height() / _screen.height(); bool stop = false; bool alternate = false; - while (selectionWidth > abs(_selectionRect.right + 1 - _selectionRect.left)) { + while (selectionWidth > abs(_selection.right + 1 - _selection.left)) { if (alternate) { - --_selectionRect.left; - if (_selectionRect.left < 0) { - left = _viewport.right - (kScreen.right - 1 + 100 - _selectionRect.left) * _viewport.width() / kScreen.width(); + --_selection.left; + if (_selection.left < 0) { + left = _viewport.right - (_screen.right - 1 + 100 - _selection.left) * _viewport.width() / _screen.width(); if (left < 0) { left = 0; - ++_selectionRect.left; + ++_selection.left; if (stop) { break; } @@ -1717,12 +1720,12 @@ void ESPER::updateSelection() { } } } else { - ++_selectionRect.right; - if (_selectionRect.right > kScreen.right - 1) { - right = _viewport.left + (_selectionRect.right - kScreen.left) * _viewport.width() / kScreen.width(); + ++_selection.right; + if (_selection.right > _screen.right - 1) { + right = _viewport.left + (_selection.right - _screen.left) * _viewport.width() / _screen.width(); if (right > kPhotoWidth - 1) { right = kPhotoWidth - 1; - --_selectionRect.right; + --_selection.right; if (stop) { break; } @@ -1738,14 +1741,14 @@ void ESPER::updateSelection() { alternate = false; stop = false; - while (selectionHeight > abs(_selectionRect.bottom + 1 - _selectionRect.top)) { + while (selectionHeight > abs(_selection.bottom + 1 - _selection.top)) { if (alternate) { - --_selectionRect.top; - if (_selectionRect.top < 0) { - top = _viewport.bottom - (kScreen.bottom - 1 - _selectionRect.top) * _viewport.height() / kScreen.height(); + --_selection.top; + if (_selection.top < 0) { + top = _viewport.bottom - (_screen.bottom - 1 - _selection.top) * _viewport.height() / _screen.height(); if (top < 0) { top = 0; - ++_selectionRect.top; + ++_selection.top; if (stop) { break; } @@ -1754,12 +1757,12 @@ void ESPER::updateSelection() { } } } else { - ++_selectionRect.bottom; - if (_selectionRect.bottom > kScreen.bottom - 1) { - bottom = _viewport.top + (_selectionRect.bottom - kScreen.top) * _viewport.height() / kScreen.height(); + ++_selection.bottom; + if (_selection.bottom > _screen.bottom - 1) { + bottom = _viewport.top + (_selection.bottom - _screen.top) * _viewport.height() / _screen.height(); if (bottom > kPhotoHeight - 1) { bottom = kPhotoHeight - 1; - --_selectionRect.bottom; + --_selection.bottom; if (stop) { break; } @@ -1781,11 +1784,11 @@ void ESPER::updateSelection() { } int ESPER::viewportXToScreenX(int x) { - return kScreen.width() * (x - _viewport.left) / _viewport.width() + kScreen.left; + return _screen.width() * (x - _viewport.left) / _viewport.width() + _screen.left; } int ESPER::viewportYToScreenY(int y) { - return kScreen.height() * (y - _viewport.top) / _viewport.height() + kScreen.top; + return _screen.height() * (y - _viewport.top) / _viewport.height() + _screen.top; } } // End of namespace BladeRunner diff --git a/engines/bladerunner/ui/esper.h b/engines/bladerunner/ui/esper.h index 9d0dd6d012..d63efa31bd 100644 --- a/engines/bladerunner/ui/esper.h +++ b/engines/bladerunner/ui/esper.h @@ -73,19 +73,19 @@ class ESPER { static const Common::Rect kScreen; struct Photo { - bool isPresent; - char name[13]; - int photoId; - int shapeId; + bool isPresent; + int photoId; + int shapeId; + Common::String name; }; struct Region { - bool isPresent; - int regionId; - Common::Rect rectInner; - Common::Rect rectOuter; - Common::Rect rectSelection; - char name[13]; + bool isPresent; + int regionId; + Common::Rect rectInner; + Common::Rect rectOuter; + Common::Rect rectSelection; + Common::String name; }; BladeRunnerEngine *_vm; @@ -135,6 +135,8 @@ class ESPER { bool _isZoomingOut; int _timeZoomOutNext; + Common::Rect _screen; + Common::Rect _viewport; Common::Rect _viewportNext; int _viewportPositionX; @@ -153,9 +155,9 @@ class ESPER { int _flash; - Common::Rect _selectionRect; - Common::Rect _selectionRectTarget; - Common::Rect _selectionRectDelta; + Common::Rect _selection; + Common::Rect _selectionTarget; + Common::Rect _selectionDelta; int _selectionCrosshairX; int _selectionCrosshairY; @@ -277,7 +279,6 @@ private: int viewportXToScreenX(int x); int viewportYToScreenY(int y); - }; } // End of namespace BladeRunner -- cgit v1.2.3