Changeset - r11249:3a4ef570bee2
[Not reviewed]
master
0 2 0
rubidium - 15 years ago 2009-03-03 20:33:57
rubidium@openttd.org
(svn r15603) -Fix [FS#2696]: crash when using an extraordinarily large sprite as cursor.
2 files changed with 13 insertions and 4 deletions:
0 comments (0 inline, 0 general)
src/core/alloc_type.hpp
Show inline comments
 
@@ -123,6 +123,15 @@ public:
 
		}
 
		return this->buffer;
 
	}
 

	
 
	/**
 
	 * Get the currently allocated buffer.
 
	 * @return the buffer
 
	 */
 
	FORCEINLINE const T *GetBuffer() const
 
	{
 
		return this->buffer;
 
	}
 
};
 

	
 
/**
src/gfx.cpp
Show inline comments
 
@@ -52,7 +52,7 @@ static int ReallyDoDrawString(const char
 

	
 
FontSize _cur_fontsize;
 
static FontSize _last_fontsize;
 
static uint8 _cursor_backup[64 * 64 * 4];
 
static ReusableBuffer<uint8> _cursor_backup;
 

	
 
/**
 
 * The rect for repaint.
 
@@ -1288,7 +1288,7 @@ void UndrawMouseCursor()
 
	if (_cursor.visible) {
 
		Blitter *blitter = BlitterFactoryBase::GetCurrentBlitter();
 
		_cursor.visible = false;
 
		blitter->CopyFromBuffer(blitter->MoveTo(_screen.dst_ptr, _cursor.draw_pos.x, _cursor.draw_pos.y), _cursor_backup, _cursor.draw_size.x, _cursor.draw_size.y);
 
		blitter->CopyFromBuffer(blitter->MoveTo(_screen.dst_ptr, _cursor.draw_pos.x, _cursor.draw_pos.y), _cursor_backup.GetBuffer(), _cursor.draw_size.x, _cursor.draw_size.y);
 
		_video_driver->MakeDirty(_cursor.draw_pos.x, _cursor.draw_pos.y, _cursor.draw_size.x, _cursor.draw_size.y);
 
	}
 
}
 
@@ -1337,10 +1337,10 @@ void DrawMouseCursor()
 
	_cursor.draw_pos.y = y;
 
	_cursor.draw_size.y = h;
 

	
 
	assert(blitter->BufferSize(w, h) < (int)sizeof(_cursor_backup));
 
	uint8 *buffer = _cursor_backup.Allocate(blitter->BufferSize(w, h));
 

	
 
	/* Make backup of stuff below cursor */
 
	blitter->CopyToBuffer(blitter->MoveTo(_screen.dst_ptr, _cursor.draw_pos.x, _cursor.draw_pos.y), _cursor_backup, _cursor.draw_size.x, _cursor.draw_size.y);
 
	blitter->CopyToBuffer(blitter->MoveTo(_screen.dst_ptr, _cursor.draw_pos.x, _cursor.draw_pos.y), buffer, _cursor.draw_size.x, _cursor.draw_size.y);
 

	
 
	/* Draw cursor on screen */
 
	_cur_dpi = &_screen;
0 comments (0 inline, 0 general)