diff options
| author | Vicent Marti | 2008-07-13 10:50:57 +0000 | 
|---|---|---|
| committer | Vicent Marti | 2008-07-13 10:50:57 +0000 | 
| commit | 4cb2b8c3c43d26569960e271ac35e0dd9f4de5b4 (patch) | |
| tree | 331ccedacdbceddb63d0e15eabd817d9150de80e /graphics/VectorRenderer.cpp | |
| parent | 4539cdf2188d6461ecdc2fbc485d49eab1fb7311 (diff) | |
| download | scummvm-rg350-4cb2b8c3c43d26569960e271ac35e0dd9f4de5b4.tar.gz scummvm-rg350-4cb2b8c3c43d26569960e271ac35e0dd9f4de5b4.tar.bz2 scummvm-rg350-4cb2b8c3c43d26569960e271ac35e0dd9f4de5b4.zip | |
Improved support for graphics positioning.
More widgets.
New triangle drawing function.
svn-id: r33027
Diffstat (limited to 'graphics/VectorRenderer.cpp')
| -rw-r--r-- | graphics/VectorRenderer.cpp | 46 | 
1 files changed, 43 insertions, 3 deletions
| diff --git a/graphics/VectorRenderer.cpp b/graphics/VectorRenderer.cpp index 8856386819..efdaea80c8 100644 --- a/graphics/VectorRenderer.cpp +++ b/graphics/VectorRenderer.cpp @@ -399,7 +399,12 @@ drawTriangle(int x, int y, int w, int h, TriangleOrientation orient) {  	switch(orient) {  		case kTriangleUp:  		case kTriangleDown: -			drawTriangleVertAlg(x, y, w, h, (orient == kTriangleDown), color, Base::_fillMode); +#ifdef VECTOR_RENDERER_FAST_TRIANGLES +			if (w == h) +				drawTriangleFast(x, y, w, (orient == kTriangleDown), color, Base::_fillMode); +			else +#endif +				drawTriangleVertAlg(x, y, w, h, (orient == kTriangleDown), color, Base::_fillMode);  			break;  		case kTriangleLeft: @@ -408,8 +413,14 @@ drawTriangle(int x, int y, int w, int h, TriangleOrientation orient) {  	}  	if (Base::_strokeWidth > 0) -		if (Base::_fillMode == kFillBackground || Base::_fillMode == kFillGradient) -			drawTriangleVertAlg(x, y, w, h, (orient == kTriangleDown), _fgColor, kFillDisabled); +		if (Base::_fillMode == kFillBackground || Base::_fillMode == kFillGradient) { +#ifdef VECTOR_RENDERER_FAST_TRIANGLES +			if (w == h) +				drawTriangleFast(x, y, w, (orient == kTriangleDown), _fgColor, kFillDisabled); +			else +#endif +				drawTriangleVertAlg(x, y, w, h, (orient == kTriangleDown), _fgColor, kFillDisabled); +		}  }  /******************************************************************** @@ -616,6 +627,35 @@ drawTriangleVertAlg(int x1, int y1, int w, int h, bool inverted, PixelType color  } +/** VERTICAL TRIANGLE DRAWING - FAST VERSION FOR SQUARED TRIANGLES */ +template<typename PixelType, typename PixelFormat> +void VectorRendererSpec<PixelType,PixelFormat>:: +drawTriangleFast(int x1, int y1, int size, bool inverted, PixelType color, VectorRenderer::FillMode fill_m) { +	int pitch = Base::surfacePitch(); +	int hstep = 0; +	 +	PixelType *ptr_right = 0, *ptr_left = 0; +	 +	if (inverted) { +		ptr_left = (PixelType *)_activeSurface->getBasePtr(x1, y1); +		ptr_right = (PixelType *)_activeSurface->getBasePtr(x1 + size, y1); +	} else { +		ptr_left = (PixelType *)_activeSurface->getBasePtr(x1, y1 + size); +		ptr_right = (PixelType *)_activeSurface->getBasePtr(x1 + size, y1 + size); +		pitch = -pitch; +	} +	 +	while (ptr_left != ptr_right) { +		colorFill(ptr_left, ptr_right, color); +		ptr_left += pitch; +		ptr_right += pitch; +		if (hstep++ % 3) { +			ptr_left++; +			ptr_right--; +		}	 +	}	 +} +  /** ROUNDED SQUARE ALGORITHM **/  template<typename PixelType, typename PixelFormat>  void VectorRendererSpec<PixelType, PixelFormat>:: | 
