aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Percival2020-01-11 12:31:53 +0800
committerScott Percival2020-01-11 12:31:53 +0800
commitff6e864392cdf9089aeaeee085dcafd0440b8049 (patch)
treeee9f12b75928dcff831821be4beda9bfea800727
parent56aa8f3448c168abd0dc62ed283e92f7cb29f04b (diff)
downloadscummvm-rg350-ff6e864392cdf9089aeaeee085dcafd0440b8049.tar.gz
scummvm-rg350-ff6e864392cdf9089aeaeee085dcafd0440b8049.tar.bz2
scummvm-rg350-ff6e864392cdf9089aeaeee085dcafd0440b8049.zip
DIRECTOR: Seperate render pass for shape fill and stroke
-rw-r--r--engines/director/frame.cpp56
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);