diff options
Diffstat (limited to 'graphics/VectorRendererSpec.cpp')
-rw-r--r-- | graphics/VectorRendererSpec.cpp | 526 |
1 files changed, 70 insertions, 456 deletions
diff --git a/graphics/VectorRendererSpec.cpp b/graphics/VectorRendererSpec.cpp index a13c281327..6b8c6eb693 100644 --- a/graphics/VectorRendererSpec.cpp +++ b/graphics/VectorRendererSpec.cpp @@ -689,46 +689,23 @@ gradientFillClip(PixelType *ptr, int width, int x, int y, int realX, int realY) template<typename PixelType> void VectorRendererSpec<PixelType>:: fillSurface() { - byte *ptr = (byte *)_activeSurface->getPixels(); + Common::Rect drawRect(0, 0, _activeSurface->w, _activeSurface->h); + drawRect.clip(_clippingArea); - int h = _activeSurface->h; - int pitch = _activeSurface->pitch; - - if (Base::_fillMode == kFillBackground) { - colorFill<PixelType>((PixelType *)ptr, (PixelType *)(ptr + pitch * h), _bgColor); - } else if (Base::_fillMode == kFillForeground) { - colorFill<PixelType>((PixelType *)ptr, (PixelType *)(ptr + pitch * h), _fgColor); - } else if (Base::_fillMode == kFillGradient) { - precalcGradient(h); - - for (int i = 0; i < h; i++) { - gradientFill((PixelType *)ptr, _activeSurface->w, 0, i); - - ptr += pitch; - } + if (drawRect.isEmpty()) { + return; } -} -template<typename PixelType> -void VectorRendererSpec<PixelType>:: -fillSurfaceClip(Common::Rect clipping) { - int w = _activeSurface->w; int h = _activeSurface->h; - if (clipping.isEmpty() || (clipping.left == 0 && clipping.top == 0 && clipping.right == w && clipping.bottom == h)) { - fillSurface(); - return; - } + int pitch = _activeSurface->pitch / _activeSurface->format.bytesPerPixel; - byte *ptr = (byte *)_activeSurface->getPixels(); - int pitch = _activeSurface->pitch; + PixelType *ptr = (PixelType *)_activeSurface->getBasePtr(0, drawRect.top); if (Base::_fillMode == kFillBackground || Base::_fillMode == kFillForeground) { PixelType color = (Base::_fillMode == kFillBackground ? _bgColor : _fgColor); - byte *ptrLeft = (ptr + _clippingArea.left), *ptrRight = ptr + _clippingArea.right; - for (int i = 0; i < h; i++) { - if (_clippingArea.top <= i && i < _clippingArea.bottom) { - colorFill<PixelType>((PixelType *)ptrLeft, (PixelType *)ptrRight, color); - } + PixelType *ptrLeft = (ptr + drawRect.left), *ptrRight = ptr + drawRect.right; + for (int i = drawRect.top; i < drawRect.bottom; i++) { + colorFill<PixelType>(ptrLeft, ptrRight, color); ptrLeft += pitch; ptrRight += pitch; @@ -737,10 +714,8 @@ fillSurfaceClip(Common::Rect clipping) { } else if (Base::_fillMode == kFillGradient) { precalcGradient(h); - for (int i = 0; i < h; i++) { - if (_clippingArea.top <= i && i < _clippingArea.bottom) { - gradientFill((PixelType *)ptr + _clippingArea.left, _clippingArea.width(), 0, i); - } + for (int i = drawRect.top; i < drawRect.bottom; i++) { + gradientFill(ptr + drawRect.left, drawRect.width(), 0, i); ptr += pitch; } @@ -781,67 +756,25 @@ blitSurface(const Graphics::Surface *source, const Common::Rect &r) { template<typename PixelType> void VectorRendererSpec<PixelType>:: -blitSubSurface(const Graphics::Surface *source, const Common::Rect &r) { - byte *dst_ptr = (byte *)_activeSurface->getBasePtr(r.left, r.top); - const byte *src_ptr = (const byte *)source->getPixels(); +blitSubSurface(const Graphics::Surface *source, const Common::Point &p) { + Common::Rect drawRect(p.x, p.y, p.x + source->w, p.y + source->h); + drawRect.clip(_clippingArea); - const int dst_pitch = _activeSurface->pitch; - const int src_pitch = source->pitch; - - int h = r.height(); - const int w = r.width() * sizeof(PixelType); - - while (h--) { - memcpy(dst_ptr, src_ptr, w); - dst_ptr += dst_pitch; - src_ptr += src_pitch; - } -} - -template<typename PixelType> -void VectorRendererSpec<PixelType>:: -blitSubSurfaceClip(const Graphics::Surface *source, const Common::Rect &r, const Common::Rect &clipping) { - if (clipping.isEmpty() || clipping.contains(r)) { - blitSubSurface(source, r); + if (drawRect.isEmpty()) { return; } - int16 x = r.left; - int16 y = r.top; - - if (r.width() > source->w) - x = x + (r.width() >> 1) - (source->w >> 1); - - if (r.height() > source->h) - y = y + (r.height() >> 1) - (source->h >> 1); - - int w = source->w, h = source->h; - int usedW = w, usedH = h; - int offsetX = 0, offsetY = 0; - - if (x > clipping.right || x + w < clipping.left) return; - if (y > clipping.bottom || y + h < clipping.top) return; - if (x < clipping.left) { - offsetX = clipping.left - x; - usedW -= offsetX; - x = clipping.left; - } - if (y < clipping.top) { - offsetY = clipping.top - y; - usedH -= offsetY; - y = clipping.top; - } - if (usedW > clipping.width()) usedW = clipping.width(); - if (usedH > clipping.height()) usedH = clipping.height(); + int sourceOffsetX = drawRect.left - p.x; + int sourceOffsetY = drawRect.top - p.y; - byte *dst_ptr = (byte *)_activeSurface->getBasePtr(x, y); - const byte *src_ptr = (const byte *)source->getBasePtr(offsetX, offsetY); + byte *dst_ptr = (byte *)_activeSurface->getBasePtr(drawRect.left, drawRect.top); + const byte *src_ptr = (const byte *)source->getBasePtr(sourceOffsetX, sourceOffsetY); const int dst_pitch = _activeSurface->pitch; const int src_pitch = source->pitch; - int lines = usedH; - const int sz = usedW * sizeof(PixelType); + int lines = drawRect.height(); + const int sz = drawRect.width() * sizeof(PixelType); while (lines--) { memcpy(dst_ptr, src_ptr, sz); @@ -852,26 +785,27 @@ blitSubSurfaceClip(const Graphics::Surface *source, const Common::Rect &r, const template<typename PixelType> void VectorRendererSpec<PixelType>:: -blitKeyBitmap(const Graphics::Surface *source, const Common::Rect &r) { - int16 x = r.left; - int16 y = r.top; +blitKeyBitmap(const Graphics::Surface *source, const Common::Point &p) { + Common::Rect drawRect(p.x, p.y, p.x + source->w, p.y + source->h); + drawRect.clip(_clippingArea); - if (r.width() > source->w) - x = x + (r.width() >> 1) - (source->w >> 1); + if (drawRect.isEmpty()) { + return; + } - if (r.height() > source->h) - y = y + (r.height() >> 1) - (source->h >> 1); + int sourceOffsetX = drawRect.left - p.x; + int sourceOffsetY = drawRect.top - p.y; - PixelType *dst_ptr = (PixelType *)_activeSurface->getBasePtr(x, y); - const PixelType *src_ptr = (const PixelType *)source->getPixels(); + PixelType *dst_ptr = (PixelType *)_activeSurface->getBasePtr(drawRect.left, drawRect.top); + const PixelType *src_ptr = (const PixelType *)source->getBasePtr(sourceOffsetX, sourceOffsetY); int dst_pitch = _activeSurface->pitch / _activeSurface->format.bytesPerPixel; int src_pitch = source->pitch / source->format.bytesPerPixel; - int w, h = source->h; + int w, h = drawRect.height(); while (h--) { - w = source->w; + w = drawRect.width(); while (w--) { if (*src_ptr != _bitmapAlphaColor) @@ -881,8 +815,8 @@ blitKeyBitmap(const Graphics::Surface *source, const Common::Rect &r) { src_ptr++; } - dst_ptr = dst_ptr - source->w + dst_pitch; - src_ptr = src_ptr - source->w + src_pitch; + dst_ptr = dst_ptr - drawRect.width() + dst_pitch; + src_ptr = src_ptr - drawRect.width() + src_pitch; } } @@ -922,57 +856,6 @@ blitAlphaBitmap(Graphics::TransparentSurface *source, const Common::Rect &r, GUI template<typename PixelType> void VectorRendererSpec<PixelType>:: -blitKeyBitmapClip(const Graphics::Surface *source, const Common::Rect &r, const Common::Rect &clipping) { - if (clipping.isEmpty() || clipping.contains(r)) { - blitKeyBitmap(source, r); - return; - } - - int16 x = r.left; - int16 y = r.top; - - if (r.width() > source->w) - x = x + (r.width() >> 1) - (source->w >> 1); - - if (r.height() > source->h) - y = y + (r.height() >> 1) - (source->h >> 1); - - Common::Rect drawRect(x, y, x + source->w, y + source->h); - drawRect.clip(clipping); - - if (drawRect.isEmpty()) { - return; - } - - int sourceOffsetX = drawRect.left - x; - int sourceOffsetY = drawRect.top - y; - - PixelType *dst_ptr = (PixelType *)_activeSurface->getBasePtr(drawRect.left, drawRect.top); - const PixelType *src_ptr = (const PixelType *)source->getBasePtr(sourceOffsetX, sourceOffsetY); - - int dst_pitch = _activeSurface->pitch / _activeSurface->format.bytesPerPixel; - int src_pitch = source->pitch / source->format.bytesPerPixel; - - int w, h = drawRect.height(); - - while (h--) { - w = drawRect.width(); - - while (w--) { - if (*src_ptr != _bitmapAlphaColor) - *dst_ptr = *src_ptr; - - dst_ptr++; - src_ptr++; - } - - dst_ptr = dst_ptr - drawRect.width() + dst_pitch; - src_ptr = src_ptr - drawRect.width() + src_pitch; - } -} - -template<typename PixelType> -void VectorRendererSpec<PixelType>:: applyScreenShading(GUI::ThemeEngine::ShadingStyle shadingStyle) { int pixels = _activeSurface->w * _activeSurface->h; PixelType *ptr = (PixelType *)_activeSurface->getPixels(); @@ -1179,7 +1062,6 @@ drawString(const Graphics::Font *font, const Common::String &text, const Common: } } -/** LINES **/ template<typename PixelType> void VectorRendererSpec<PixelType>:: drawLine(int x1, int y1, int x2, int y2) { @@ -1208,87 +1090,35 @@ drawLine(int x1, int y1, int x2, int y2) { int pitch = _activeSurface->pitch / _activeSurface->format.bytesPerPixel; int st = Base::_strokeWidth >> 1; - if (dy == 0) { // horizontal lines - // these can be filled really fast with a single memset. - colorFill<PixelType>(ptr, ptr + dx + 1, (PixelType)_fgColor); - - for (int i = 0, p = pitch; i < st; ++i, p += pitch) { - colorFill<PixelType>(ptr + p, ptr + dx + 1 + p, (PixelType)_fgColor); - colorFill<PixelType>(ptr - p, ptr + dx + 1 - p, (PixelType)_fgColor); - } - - } else if (dx == 0) { // vertical lines - // these ones use a static pitch increase. - while (y1++ <= y2) { - colorFill<PixelType>(ptr - st, ptr + st, (PixelType)_fgColor); - ptr += pitch; - } - - } else if (dx == dy) { // diagonal lines - // these ones also use a fixed pitch increase - pitch += (x2 > x1) ? 1 : -1; - - while (dy--) { - colorFill<PixelType>(ptr - st, ptr + st, (PixelType)_fgColor); - ptr += pitch; - } - - } else { // generic lines, use the standard algorithm... - drawLineAlg(x1, y1, x2, y2, dx, dy, (PixelType)_fgColor); - } -} - -template<typename PixelType> -void VectorRendererSpec<PixelType>:: -drawLineClip(int x1, int y1, int x2, int y2, Common::Rect clipping) { - x1 = CLIP(x1, 0, (int)Base::_activeSurface->w); - x2 = CLIP(x2, 0, (int)Base::_activeSurface->w); - y1 = CLIP(y1, 0, (int)Base::_activeSurface->h); - y2 = CLIP(y2, 0, (int)Base::_activeSurface->h); - - // we draw from top to bottom - if (y2 < y1) { - SWAP(x1, x2); - SWAP(y1, y2); - } - - uint dx = ABS(x2 - x1); - uint dy = ABS(y2 - y1); - - // this is a point, not a line. stoopid. - if (dy == 0 && dx == 0) - return; - - if (Base::_strokeWidth == 0) - return; - - PixelType *ptr = (PixelType *)_activeSurface->getBasePtr(x1, y1); - int pitch = _activeSurface->pitch / _activeSurface->format.bytesPerPixel; - int st = Base::_strokeWidth >> 1; - - Common::Rect backup = _clippingArea; - _clippingArea = clipping; - bool needsClipping = !_clippingArea.isEmpty() && (!_clippingArea.contains(x1, y1) || !_clippingArea.contains(x2, y2)); - if (!needsClipping) { - drawLine(x1, y1, x2, y2); - _clippingArea = backup; - return; - } + bool useClippingVersions = !_clippingArea.contains(x1, y1) || !_clippingArea.contains(x2, y2); int ptr_x = x1, ptr_y = y1; if (dy == 0) { // horizontal lines - colorFillClip<PixelType>(ptr, ptr + dx + 1, (PixelType)_fgColor, x1, y1, _clippingArea); + if (useClippingVersions) { + colorFillClip<PixelType>(ptr, ptr + dx + 1, (PixelType)_fgColor, x1, y1, _clippingArea); + } else { + colorFill<PixelType>(ptr, ptr + dx + 1, (PixelType)_fgColor); + } for (int i = 0, p = pitch; i < st; ++i, p += pitch) { - colorFillClip<PixelType>(ptr + p, ptr + dx + 1 + p, (PixelType)_fgColor, x1, y1 + p/pitch, _clippingArea); - colorFillClip<PixelType>(ptr - p, ptr + dx + 1 - p, (PixelType)_fgColor, x1, y1 - p/pitch, _clippingArea); + if (useClippingVersions) { + colorFillClip<PixelType>(ptr + p, ptr + dx + 1 + p, (PixelType)_fgColor, x1, y1 + p/pitch, _clippingArea); + colorFillClip<PixelType>(ptr - p, ptr + dx + 1 - p, (PixelType)_fgColor, x1, y1 - p/pitch, _clippingArea); + } else { + colorFill<PixelType>(ptr + p, ptr + dx + 1 + p, (PixelType)_fgColor); + colorFill<PixelType>(ptr - p, ptr + dx + 1 - p, (PixelType)_fgColor); + } } } else if (dx == 0) { // vertical lines // these ones use a static pitch increase. while (y1++ <= y2) { - colorFillClip<PixelType>(ptr - st, ptr + st, (PixelType)_fgColor, x1 - st, ptr_y, _clippingArea); + if (useClippingVersions) { + colorFillClip<PixelType>(ptr - st, ptr + st, (PixelType)_fgColor, x1 - st, ptr_y, _clippingArea); + } else { + colorFill<PixelType>(ptr - st, ptr + st, (PixelType)_fgColor); + } ptr += pitch; ++ptr_y; } @@ -1298,66 +1128,34 @@ drawLineClip(int x1, int y1, int x2, int y2, Common::Rect clipping) { pitch += (x2 > x1) ? 1 : -1; while (dy--) { - colorFillClip<PixelType>(ptr - st, ptr + st, (PixelType)_fgColor, ptr_x - st, ptr_y, _clippingArea); + if (useClippingVersions) { + colorFillClip<PixelType>(ptr - st, ptr + st, (PixelType)_fgColor, ptr_x - st, ptr_y, _clippingArea); + } else { + colorFill<PixelType>(ptr - st, ptr + st, (PixelType)_fgColor); + } ptr += pitch; ++ptr_y; if (x2 > x1) ++ptr_x; else --ptr_x; } } else { // generic lines, use the standard algorithm... - drawLineAlgClip(x1, y1, x2, y2, dx, dy, (PixelType)_fgColor); - } -} - -/** CIRCLES **/ -template<typename PixelType> -void VectorRendererSpec<PixelType>:: -drawCircle(int x, int y, int r) { - if (x + r > Base::_activeSurface->w || y + r > Base::_activeSurface->h || - x - r < 0 || y - r < 0 || x == 0 || y == 0 || r <= 0) - return; - - if (Base::_fillMode != kFillDisabled && Base::_shadowOffset - && x + r + Base::_shadowOffset < Base::_activeSurface->w - && y + r + Base::_shadowOffset < Base::_activeSurface->h) { - drawCircleAlg(x + Base::_shadowOffset + 1, y + Base::_shadowOffset + 1, r, 0, kFillForeground); - } - - switch (Base::_fillMode) { - case kFillDisabled: - if (Base::_strokeWidth) - drawCircleAlg(x, y, r, _fgColor, kFillDisabled); - break; - - case kFillForeground: - drawCircleAlg(x, y, r, _fgColor, kFillForeground); - break; - - case kFillBackground: - if (Base::_strokeWidth > 1) { - drawCircleAlg(x, y, r, _fgColor, kFillForeground); - drawCircleAlg(x, y, r - Base::_strokeWidth, _bgColor, kFillBackground); + if (useClippingVersions) { + drawLineAlgClip(x1, y1, x2, y2, dx, dy, (PixelType)_fgColor); } else { - drawCircleAlg(x, y, r, _bgColor, kFillBackground); - drawCircleAlg(x, y, r, _fgColor, kFillDisabled); + drawLineAlg(x1, y1, x2, y2, dx, dy, (PixelType)_fgColor); } - break; - - case kFillGradient: - break; } } +/** CIRCLES **/ template<typename PixelType> void VectorRendererSpec<PixelType>:: -drawCircleClip(int x, int y, int r, Common::Rect clipping) { +drawCircle(int x, int y, int r) { if (x + r > Base::_activeSurface->w || y + r > Base::_activeSurface->h || x - r < 0 || y - r < 0 || x == 0 || y == 0 || r <= 0) return; - Common::Rect backup = _clippingArea; - _clippingArea = clipping; - bool useClippingVersions = !(_clippingArea.isEmpty() || _clippingArea.contains(Common::Rect(x - r, y - r, x + r, y + r))); + bool useClippingVersions = !_clippingArea.contains(Common::Rect(x - r, y - r, x + r, y + r)); if (Base::_fillMode != kFillDisabled && Base::_shadowOffset && x + r + Base::_shadowOffset < Base::_activeSurface->w @@ -1408,8 +1206,6 @@ drawCircleClip(int x, int y, int r, Common::Rect clipping) { case kFillGradient: break; } - - _clippingArea = backup; } /** SQUARES **/ @@ -1420,45 +1216,7 @@ drawSquare(int x, int y, int w, int h) { w <= 0 || h <= 0 || x < 0 || y < 0) return; - if (Base::_fillMode != kFillDisabled && Base::_shadowOffset - && x + w + Base::_shadowOffset < Base::_activeSurface->w - && y + h + Base::_shadowOffset < Base::_activeSurface->h) { - drawSquareShadow(x, y, w, h, Base::_shadowOffset); - } - - switch (Base::_fillMode) { - case kFillDisabled: - if (Base::_strokeWidth) - drawSquareAlg(x, y, w, h, _fgColor, kFillDisabled); - break; - - case kFillForeground: - drawSquareAlg(x, y, w, h, _fgColor, kFillForeground); - break; - - case kFillBackground: - drawSquareAlg(x, y, w, h, _bgColor, kFillBackground); - drawSquareAlg(x, y, w, h, _fgColor, kFillDisabled); - break; - - case kFillGradient: - VectorRendererSpec::drawSquareAlg(x, y, w, h, 0, kFillGradient); - if (Base::_strokeWidth) - drawSquareAlg(x, y, w, h, _fgColor, kFillDisabled); - break; - } -} - -template<typename PixelType> -void VectorRendererSpec<PixelType>:: -drawSquareClip(int x, int y, int w, int h, Common::Rect clipping) { - if (x + w > Base::_activeSurface->w || y + h > Base::_activeSurface->h || - w <= 0 || h <= 0 || x < 0 || y < 0) - return; - - Common::Rect backup = _clippingArea; - _clippingArea = clipping; - bool useClippingVersions = !(_clippingArea.isEmpty() || _clippingArea.contains(Common::Rect(x, y, x + w, y + h))); + bool useClippingVersions = !_clippingArea.contains(Common::Rect(x, y, x + w, y + h)); if (Base::_fillMode != kFillDisabled && Base::_shadowOffset && x + w + Base::_shadowOffset < Base::_activeSurface->w @@ -1506,8 +1264,6 @@ drawSquareClip(int x, int y, int w, int h, Common::Rect clipping) { } break; } - - _clippingArea = backup; } /** ROUNDED SQUARES **/ @@ -1519,37 +1275,12 @@ drawRoundedSquare(int x, int y, int r, int w, int h) { return; if ((r * 2) > w || (r * 2) > h) - r = MIN(w /2, h / 2); - - if (r <= 0) - return; - - if (Base::_fillMode != kFillDisabled && Base::_shadowOffset - && x + w + Base::_shadowOffset + 1 < Base::_activeSurface->w - && y + h + Base::_shadowOffset + 1 < Base::_activeSurface->h - && h > (Base::_shadowOffset + 1) * 2) { - drawRoundedSquareShadow(x, y, r, w, h, Base::_shadowOffset); - } - - drawRoundedSquareAlg(x, y, r, w, h, _fgColor, Base::_fillMode); -} - -template<typename PixelType> -void VectorRendererSpec<PixelType>:: -drawRoundedSquareClip(int x, int y, int r, int w, int h, Common::Rect clipping) { - if (x + w > Base::_activeSurface->w || y + h > Base::_activeSurface->h || - w <= 0 || h <= 0 || x < 0 || y < 0 || r <= 0) - return; - - if ((r * 2) > w || (r * 2) > h) r = MIN(w / 2, h / 2); if (r <= 0) return; - Common::Rect backup = _clippingArea; - _clippingArea = clipping; - bool useOriginal = (_clippingArea.isEmpty() || _clippingArea.contains(Common::Rect(x, y, x + w, y + h))); + bool useOriginal = _clippingArea.contains(Common::Rect(x, y, x + w, y + h)); if (Base::_fillMode != kFillDisabled && Base::_shadowOffset && x + w + Base::_shadowOffset + 1 < Base::_activeSurface->w @@ -1567,8 +1298,6 @@ drawRoundedSquareClip(int x, int y, int r, int w, int h, Common::Rect clipping) } else { drawRoundedSquareAlgClip(x, y, r, w, h, _fgColor, Base::_fillMode); } - - _clippingArea = backup; } template<typename PixelType> @@ -1578,64 +1307,23 @@ drawTab(int x, int y, int r, int w, int h) { w <= 0 || h <= 0 || x < 0 || y < 0 || r > w || r > h) return; - if (r == 0 && Base::_bevel > 0) { - drawBevelTabAlg(x, y, w, h, Base::_bevel, _bevelColor, _fgColor, (Base::_dynamicData >> 16), (Base::_dynamicData & 0xFFFF)); - return; - } - - if (r == 0) return; - - switch (Base::_fillMode) { - case kFillDisabled: - // FIXME: Implement this - return; - - case kFillGradient: - case kFillBackground: - // FIXME: This is broken for the AA renderer. - // See the rounded rect alg for how to fix it. (The border should - // be drawn before the interior, both inside drawTabAlg.) - drawTabShadow(x, y, w - 2, h, r); - drawTabAlg(x, y, w - 2, h, r, _bgColor, Base::_fillMode); - if (Base::_strokeWidth) - drawTabAlg(x, y, w, h, r, _fgColor, kFillDisabled, (Base::_dynamicData >> 16), (Base::_dynamicData & 0xFFFF)); - break; - - case kFillForeground: - drawTabAlg(x, y, w, h, r, _fgColor, Base::_fillMode); - break; - } -} - -template<typename PixelType> -void VectorRendererSpec<PixelType>:: -drawTabClip(int x, int y, int r, int w, int h, Common::Rect clipping) { - if (x + w > Base::_activeSurface->w || y + h > Base::_activeSurface->h || - w <= 0 || h <= 0 || x < 0 || y < 0 || r > w || r > h) - return; - - Common::Rect backup = _clippingArea; - _clippingArea = clipping; - bool useClippingVersions = !(_clippingArea.isEmpty() || _clippingArea.contains(Common::Rect(x, y, x + w, y + h))); + bool useClippingVersions = !_clippingArea.contains(Common::Rect(x, y, x + w, y + h)); if (r == 0 && Base::_bevel > 0) { if (useClippingVersions) drawBevelTabAlgClip(x, y, w, h, Base::_bevel, _bevelColor, _fgColor, (Base::_dynamicData >> 16), (Base::_dynamicData & 0xFFFF)); else drawBevelTabAlg(x, y, w, h, Base::_bevel, _bevelColor, _fgColor, (Base::_dynamicData >> 16), (Base::_dynamicData & 0xFFFF)); - _clippingArea = backup; return; } if (r == 0) { - _clippingArea = backup; return; } switch (Base::_fillMode) { case kFillDisabled: // FIXME: Implement this - _clippingArea = backup; return; case kFillGradient: @@ -1663,81 +1351,11 @@ drawTabClip(int x, int y, int r, int w, int h, Common::Rect clipping) { drawTabAlg(x, y, w, h, r, _fgColor, Base::_fillMode); break; } - - _clippingArea = backup; } template<typename PixelType> void VectorRendererSpec<PixelType>:: drawTriangle(int x, int y, int w, int h, TriangleOrientation orient) { - - if (x + w > Base::_activeSurface->w || y + h > Base::_activeSurface->h) - return; - - PixelType color = 0; - - if (Base::_strokeWidth <= 1) { - if (Base::_fillMode == kFillForeground) - color = _fgColor; - else if (Base::_fillMode == kFillBackground) - color = _bgColor; - } else { - if (Base::_fillMode == kFillDisabled) - return; - color = _fgColor; - } - - if (Base::_dynamicData != 0) - orient = (TriangleOrientation)Base::_dynamicData; - - if (w == h) { - int newW = w; - - switch (orient) { - case kTriangleUp: - case kTriangleDown: - //drawTriangleFast(x, y, newW, (orient == kTriangleDown), color, Base::_fillMode); - drawTriangleVertAlg(x, y, newW, newW, (orient == kTriangleDown), color, Base::_fillMode); - break; - - case kTriangleLeft: - case kTriangleRight: - case kTriangleAuto: - break; - } - - if (Base::_strokeWidth > 0) - if (Base::_fillMode == kFillBackground || Base::_fillMode == kFillGradient) { - //drawTriangleFast(x, y, newW, (orient == kTriangleDown), _fgColor, kFillDisabled); - drawTriangleVertAlg(x, y, newW, newW, (orient == kTriangleDown), color, Base::_fillMode); - } - } else { - int newW = w; - int newH = h; - - switch (orient) { - case kTriangleUp: - case kTriangleDown: - drawTriangleVertAlg(x, y, newW, newH, (orient == kTriangleDown), color, Base::_fillMode); - break; - - case kTriangleLeft: - case kTriangleRight: - case kTriangleAuto: - break; - } - - if (Base::_strokeWidth > 0) { - if (Base::_fillMode == kFillBackground || Base::_fillMode == kFillGradient) { - drawTriangleVertAlg(x, y, newW, newH, (orient == kTriangleDown), _fgColor, kFillDisabled); - } - } - } -} - -template<typename PixelType> -void VectorRendererSpec<PixelType>:: -drawTriangleClip(int x, int y, int w, int h, TriangleOrientation orient, Common::Rect clipping) { if (x + w > Base::_activeSurface->w || y + h > Base::_activeSurface->h) return; @@ -1757,9 +1375,7 @@ drawTriangleClip(int x, int y, int w, int h, TriangleOrientation orient, Common: if (Base::_dynamicData != 0) orient = (TriangleOrientation)Base::_dynamicData; - Common::Rect backup = _clippingArea; - _clippingArea = clipping; - bool useClippingVersions = !(_clippingArea.isEmpty() || _clippingArea.contains(Common::Rect(x, y, x + w, y + h))); + bool useClippingVersions = !_clippingArea.contains(Common::Rect(x, y, x + w, y + h)); if (w == h) { int newW = w; @@ -1814,8 +1430,6 @@ drawTriangleClip(int x, int y, int w, int h, TriangleOrientation orient, Common: } } } - - _clippingArea = backup; } @@ -2345,7 +1959,7 @@ drawSquareAlgClip(int x, int y, int w, int h, PixelType color, VectorRenderer::F /** SQUARE ALGORITHM **/ template<typename PixelType> void VectorRendererSpec<PixelType>:: -drawBevelSquareAlg(int x, int y, int w, int h, int bevel, PixelType top_color, PixelType bottom_color, bool fill) { +drawBevelSquareAlg(int x, int y, int w, int h, int bevel, PixelType top_color, PixelType bottom_color) { int pitch = _activeSurface->pitch / _activeSurface->format.bytesPerPixel; int i, j; PixelType *ptr_left; @@ -2405,7 +2019,7 @@ drawBevelSquareAlg(int x, int y, int w, int h, int bevel, PixelType top_color, P template<typename PixelType> void VectorRendererSpec<PixelType>:: -drawBevelSquareAlgClip(int x, int y, int w, int h, int bevel, PixelType top_color, PixelType bottom_color, bool fill) { +drawBevelSquareAlgClip(int x, int y, int w, int h, int bevel, PixelType top_color, PixelType bottom_color) { int pitch = _activeSurface->pitch / _activeSurface->format.bytesPerPixel; int i, j; PixelType *ptr_left; |