Changeset - r26666:9fe31537462b
[Not reviewed]
master
0 1 0
PeterN - 21 months ago 2022-12-21 22:21:50
peter1138@openttd.org
Fix #10151: Use smaller padding for viewport signs. (#10272)

Before variable-scaling, the padding was always 1x1 pixel. This was
changed to be scaled, except using the wrong dimension of 2x1 pixels
instead of 1x1 pixel.
1 file changed with 9 insertions and 9 deletions:
0 comments (0 inline, 0 general)
src/viewport.cpp
Show inline comments
 
@@ -1301,7 +1301,7 @@ void ViewportAddString(const DrawPixelIn
 
	int right  = left + dpi->width;
 
	int bottom = top + dpi->height;
 

	
 
	int sign_height     = ScaleByZoom(WidgetDimensions::scaled.framerect.top + FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.framerect.bottom, dpi->zoom);
 
	int sign_height     = ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.fullbevel.bottom, dpi->zoom);
 
	int sign_half_width = ScaleByZoom((small ? sign->width_small : sign->width_normal) / 2, dpi->zoom);
 

	
 
	if (bottom < sign->top ||
 
@@ -1329,8 +1329,8 @@ static Rect ExpandRectWithViewportSignMa
 
	/* Pessimistically always use normal font, but also assume small font is never larger in either dimension */
 
	const int fh = FONT_HEIGHT_NORMAL;
 
	const int max_tw = _viewport_sign_maxwidth / 2 + 1;
 
	const int expand_y = ScaleByZoom(WidgetDimensions::scaled.framerect.top + fh + WidgetDimensions::scaled.framerect.bottom, zoom);
 
	const int expand_x = ScaleByZoom(WidgetDimensions::scaled.framerect.left + max_tw + WidgetDimensions::scaled.framerect.right, zoom);
 
	const int expand_y = ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + fh + WidgetDimensions::scaled.fullbevel.bottom, zoom);
 
	const int expand_x = ScaleByZoom(WidgetDimensions::scaled.fullbevel.left + max_tw + WidgetDimensions::scaled.fullbevel.right, zoom);
 

	
 
	r.left -= expand_x;
 
	r.right += expand_x;
 
@@ -1451,14 +1451,14 @@ void ViewportSign::UpdatePosition(int ce
 
	char buffer[DRAW_STRING_BUFFER];
 

	
 
	GetString(buffer, str, lastof(buffer));
 
	this->width_normal = WidgetDimensions::scaled.framerect.left + Align(GetStringBoundingBox(buffer).width, 2) + WidgetDimensions::scaled.framerect.right;
 
	this->width_normal = WidgetDimensions::scaled.fullbevel.left + Align(GetStringBoundingBox(buffer).width, 2) + WidgetDimensions::scaled.fullbevel.right;
 
	this->center = center;
 

	
 
	/* zoomed out version */
 
	if (str_small != STR_NULL) {
 
		GetString(buffer, str_small, lastof(buffer));
 
	}
 
	this->width_small = WidgetDimensions::scaled.framerect.left + Align(GetStringBoundingBox(buffer, FS_SMALL).width, 2) + WidgetDimensions::scaled.framerect.right;
 
	this->width_small = WidgetDimensions::scaled.fullbevel.left + Align(GetStringBoundingBox(buffer, FS_SMALL).width, 2) + WidgetDimensions::scaled.fullbevel.right;
 

	
 
	this->MarkDirty();
 
}
 
@@ -1478,7 +1478,7 @@ void ViewportSign::MarkDirty(ZoomLevel m
 
		zoomlevels[zoom].left   = this->center - ScaleByZoom(this->width_normal / 2 + 1, zoom);
 
		zoomlevels[zoom].top    = this->top    - ScaleByZoom(1, zoom);
 
		zoomlevels[zoom].right  = this->center + ScaleByZoom(this->width_normal / 2 + 1, zoom);
 
		zoomlevels[zoom].bottom = this->top    + ScaleByZoom(WidgetDimensions::scaled.framerect.top + FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.framerect.bottom + 1, zoom);
 
		zoomlevels[zoom].bottom = this->top    + ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.fullbevel.bottom + 1, zoom);
 
	}
 

	
 
	for (const Window *w : Window::Iterate()) {
 
@@ -1688,7 +1688,7 @@ static void ViewportDrawStrings(ZoomLeve
 
		int w = GB(ss.width, 0, 15);
 
		int x = UnScaleByZoom(ss.x, zoom);
 
		int y = UnScaleByZoom(ss.y, zoom);
 
		int h = WidgetDimensions::scaled.framerect.top + (small ? FONT_HEIGHT_SMALL : FONT_HEIGHT_NORMAL) + WidgetDimensions::scaled.framerect.bottom;
 
		int h = WidgetDimensions::scaled.fullbevel.top + (small ? FONT_HEIGHT_SMALL : FONT_HEIGHT_NORMAL) + WidgetDimensions::scaled.fullbevel.bottom;
 

	
 
		SetDParam(0, ss.params[0]);
 
		SetDParam(1, ss.params[1]);
 
@@ -1712,7 +1712,7 @@ static void ViewportDrawStrings(ZoomLeve
 
			}
 
		}
 

	
 
		DrawString(x + WidgetDimensions::scaled.framerect.left, x + w - 1 - WidgetDimensions::scaled.framerect.right, y + WidgetDimensions::scaled.framerect.top, ss.string, colour, SA_HOR_CENTER);
 
		DrawString(x + WidgetDimensions::scaled.fullbevel.left, x + w - 1 - WidgetDimensions::scaled.fullbevel.right, y + WidgetDimensions::scaled.fullbevel.top, ss.string, colour, SA_HOR_CENTER);
 
	}
 
}
 

	
 
@@ -2131,7 +2131,7 @@ static bool CheckClickOnViewportSign(con
 
{
 
	bool small = (vp->zoom >= ZOOM_LVL_OUT_16X);
 
	int sign_half_width = ScaleByZoom((small ? sign->width_small : sign->width_normal) / 2, vp->zoom);
 
	int sign_height = ScaleByZoom(WidgetDimensions::scaled.framerect.top + (small ? FONT_HEIGHT_SMALL : FONT_HEIGHT_NORMAL) + WidgetDimensions::scaled.framerect.bottom, vp->zoom);
 
	int sign_height = ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + (small ? FONT_HEIGHT_SMALL : FONT_HEIGHT_NORMAL) + WidgetDimensions::scaled.fullbevel.bottom, vp->zoom);
 

	
 
	return y >= sign->top && y < sign->top + sign_height &&
 
			x >= sign->center - sign_half_width && x < sign->center + sign_half_width;
0 comments (0 inline, 0 general)