Changeset - r22506:56889061f470
[Not reviewed]
master
0 1 0
frosch - 7 years ago 2016-12-25 17:57:47
frosch@openttd.org
(svn r27713) -Fix [FS#6527]: Setup clipping areas for individual widgets when drawing. (adf88)
1 file changed with 12 insertions and 3 deletions:
0 comments (0 inline, 0 general)
src/widget.cpp
Show inline comments
 
@@ -2393,15 +2393,22 @@ void NWidgetLeaf::Draw(const Window *w)
 
{
 
	if (this->current_x == 0 || this->current_y == 0) return;
 

	
 
	/* Setup a clipping rectangle... */
 
	DrawPixelInfo new_dpi;
 
	if (!FillDrawPixelInfo(&new_dpi, this->pos_x, this->pos_y, this->current_x, this->current_y)) return;
 
	/* ...but keep coordinates relative to the window. */
 
	new_dpi.left += this->pos_x;
 
	new_dpi.top += this->pos_y;
 

	
 
	DrawPixelInfo *old_dpi = _cur_dpi;
 
	_cur_dpi = &new_dpi;
 

	
 
	Rect r;
 
	r.left = this->pos_x;
 
	r.right = this->pos_x + this->current_x - 1;
 
	r.top = this->pos_y;
 
	r.bottom = this->pos_y + this->current_y - 1;
 

	
 
	const DrawPixelInfo *dpi = _cur_dpi;
 
	if (dpi->left > r.right || dpi->left + dpi->width <= r.left || dpi->top > r.bottom || dpi->top + dpi->height <= r.top) return;
 

	
 
	bool clicked = this->IsLowered();
 
	switch (this->type) {
 
		case WWT_EMPTY:
 
@@ -2512,6 +2519,8 @@ void NWidgetLeaf::Draw(const Window *w)
 
	if (this->IsDisabled()) {
 
		GfxFillRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, _colour_gradient[this->colour & 0xF][2], FILLRECT_CHECKER);
 
	}
 

	
 
	_cur_dpi = old_dpi;
 
}
 

	
 
/**
0 comments (0 inline, 0 general)