diff options
author | Scott Percival | 2020-01-11 12:31:53 +0800 |
---|---|---|
committer | Scott Percival | 2020-01-11 12:31:53 +0800 |
commit | ff6e864392cdf9089aeaeee085dcafd0440b8049 (patch) | |
tree | ee9f12b75928dcff831821be4beda9bfea800727 /engines/director | |
parent | 56aa8f3448c168abd0dc62ed283e92f7cb29f04b (diff) | |
download | scummvm-rg350-ff6e864392cdf9089aeaeee085dcafd0440b8049.tar.gz scummvm-rg350-ff6e864392cdf9089aeaeee085dcafd0440b8049.tar.bz2 scummvm-rg350-ff6e864392cdf9089aeaeee085dcafd0440b8049.zip |
DIRECTOR: Seperate render pass for shape fill and stroke
Diffstat (limited to 'engines/director')
-rw-r--r-- | engines/director/frame.cpp | 56 |
1 files changed, 31 insertions, 25 deletions
diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp index 71bbc348d3..880842f20a 100644 --- a/engines/director/frame.cpp +++ b/engines/director/frame.cpp @@ -708,14 +708,7 @@ void Frame::renderShape(Graphics::ManagedSurface &surface, uint16 spriteId) { } // for outlined shapes, line thickness of 1 means invisible. - // filled shapes need at least a line thickness of 1 for MacPlot to render them - if (spriteType == kOutlinedRectangleSprite || - spriteType == kOutlinedRoundedRectangleSprite || - spriteType == kOutlinedOvalSprite || - spriteType == kLineBottomTopSprite || - spriteType == kLineTopBottomSprite) { - lineSize -= 1; - } + lineSize -= 1; Common::Rect shapeRect = Common::Rect(sp->_startPoint.x, sp->_startPoint.y, @@ -726,42 +719,55 @@ void Frame::renderShape(Graphics::ManagedSurface &surface, uint16 spriteId) { tmpSurface.create(shapeRect.width(), shapeRect.height(), Graphics::PixelFormat::createFormatCLUT8()); tmpSurface.clear(255); - // No minus one on the pattern here! MacPlotData will do that for us! - //Graphics::MacPlotData pd(&tmpSurface, &_vm->getPatterns(), 1, 0, 0, 1, sp->_backColor); - Graphics::MacPlotData pd(&tmpSurface, &_vm->getPatterns(), sp->getPattern(), -shapeRect.left, -shapeRect.top, lineSize, backColor); - Common::Rect fillRect(MAX((int)shapeRect.width() - lineSize, 0), MAX((int)shapeRect.height() - lineSize, 0)); + // Draw fill + Common::Rect fillRect((int)shapeRect.width(), (int)shapeRect.height()); + Graphics::MacPlotData plotFill(&tmpSurface, &_vm->getPatterns(), sp->getPattern(), -shapeRect.left, -shapeRect.top, 1, backColor); switch (spriteType) { case kRectangleSprite: - Graphics::drawFilledRect(fillRect, foreColor, Graphics::macDrawPixel, &pd); + Graphics::drawFilledRect(fillRect, foreColor, Graphics::macDrawPixel, &plotFill); break; case kRoundedRectangleSprite: - Graphics::drawRoundRect(fillRect, 12, foreColor, true, Graphics::macDrawPixel, &pd); + Graphics::drawRoundRect(fillRect, 12, foreColor, true, Graphics::macDrawPixel, &plotFill); break; case kOvalSprite: - Graphics::drawEllipse(fillRect.left, fillRect.top, fillRect.right, fillRect.bottom, foreColor, true, Graphics::macDrawPixel, &pd); + Graphics::drawEllipse(fillRect.left, fillRect.top, fillRect.right, fillRect.bottom, foreColor, true, Graphics::macDrawPixel, &plotFill); + break; + case kCastMemberSprite: // Face kit D3 + Graphics::drawFilledRect(fillRect, foreColor, Graphics::macDrawPixel, &plotFill); break; + default: + break; + } + + // Draw stroke + Common::Rect strokeRect(MAX((int)shapeRect.width() - lineSize, 0), MAX((int)shapeRect.height() - lineSize, 0)); + Graphics::MacPlotData plotStroke(&tmpSurface, &_vm->getPatterns(), 1, -shapeRect.left, -shapeRect.top, lineSize, backColor); + switch (spriteType) { case kLineTopBottomSprite: - Graphics::drawLine(fillRect.left, fillRect.top, fillRect.right, fillRect.bottom, foreColor, Graphics::macDrawPixel, &pd); + Graphics::drawLine(strokeRect.left, strokeRect.top, strokeRect.right, strokeRect.bottom, foreColor, Graphics::macDrawPixel, &plotStroke); break; case kLineBottomTopSprite: - Graphics::drawLine(fillRect.left, fillRect.bottom, fillRect.right, fillRect.top, foreColor, Graphics::macDrawPixel, &pd); + Graphics::drawLine(strokeRect.left, strokeRect.bottom, strokeRect.right, strokeRect.top, foreColor, Graphics::macDrawPixel, &plotStroke); break; + case kRectangleSprite: + // fall through case kOutlinedRectangleSprite: // this is actually a mouse-over shape? I don't think it's a real button. - //Graphics::drawRect(fillRect, sp->_foreColor, Graphics::macDrawPixel, &pd); - tmpSurface.fillRect(Common::Rect(shapeRect.width(), shapeRect.height()), (_vm->getCurrentScore()->_currentMouseDownSpriteId == spriteId ? 0 : 0xff)); + Graphics::drawRect(strokeRect, foreColor, Graphics::macDrawPixel, &plotStroke); + //tmpSurface.fillRect(Common::Rect(shapeRect.width(), shapeRect.height()), (_vm->getCurrentScore()->_currentMouseDownSpriteId == spriteId ? 0 : 0xff)); break; + case kRoundedRectangleSprite: + // fall through case kOutlinedRoundedRectangleSprite: - Graphics::drawRoundRect(fillRect, 12, foreColor, false, Graphics::macDrawPixel, &pd); + Graphics::drawRoundRect(strokeRect, 12, foreColor, false, Graphics::macDrawPixel, &plotStroke); break; + case kOvalSprite: + // fall through case kOutlinedOvalSprite: - Graphics::drawEllipse(fillRect.left, fillRect.top, fillRect.right, fillRect.bottom, foreColor, false, Graphics::macDrawPixel, &pd); - break; - case kCastMemberSprite: // Face kit D3 - Graphics::drawFilledRect(fillRect, foreColor, Graphics::macDrawPixel, &pd); + Graphics::drawEllipse(strokeRect.left, strokeRect.top, strokeRect.right, strokeRect.bottom, foreColor, false, Graphics::macDrawPixel, &plotStroke); break; default: - warning("Frame::renderShape(): Unhandled sprite type: %d", sp->_spriteType); + break; } addDrawRect(spriteId, shapeRect); |