| 1773 | } |
| 1774 | |
| 1775 | static void ViewportDrawStrings(ZoomLevel zoom, const StringSpriteToDrawVector *sstdv) |
| 1776 | { |
| 1777 | for (const StringSpriteToDraw &ss : *sstdv) { |
| 1778 | bool small = ss.flags.Test(ViewportStringFlag::Small); |
| 1779 | int w = ss.width; |
| 1780 | int x = UnScaleByZoom(ss.x, zoom); |
| 1781 | int y = UnScaleByZoom(ss.y, zoom); |
| 1782 | int h = WidgetDimensions::scaled.fullbevel.top + GetCharacterHeight(small ? FS_SMALL : FS_NORMAL) + WidgetDimensions::scaled.fullbevel.bottom; |
| 1783 | |
| 1784 | TextColour colour = TC_WHITE; |
| 1785 | if (ss.flags.Test(ViewportStringFlag::ColourRect)) { |
| 1786 | if (ss.colour != INVALID_COLOUR) DrawFrameRect(x, y, x + w - 1, y + h - 1, ss.colour, {}); |
| 1787 | colour = TC_BLACK; |
| 1788 | } else if (ss.flags.Test(ViewportStringFlag::TransparentRect)) { |
| 1789 | DrawFrameRect(x, y, x + w - 1, y + h - 1, ss.colour, FrameFlag::Transparent); |
| 1790 | } |
| 1791 | |
| 1792 | if (ss.flags.Test(ViewportStringFlag::TextColour)) { |
| 1793 | if (ss.colour != INVALID_COLOUR) colour = GetColourGradient(ss.colour, SHADE_LIGHTER).ToTextColour(); |
| 1794 | } |
| 1795 | |
| 1796 | int left = x + WidgetDimensions::scaled.fullbevel.left; |
| 1797 | int right = x + w - 1 - WidgetDimensions::scaled.fullbevel.right; |
| 1798 | int top = y + WidgetDimensions::scaled.fullbevel.top; |
| 1799 | |
| 1800 | int shadow_offset = 0; |
| 1801 | if (small && ss.flags.Test(ViewportStringFlag::Shadow)) { |
| 1802 | /* Shadow needs to be shifted 1 pixel. */ |
| 1803 | shadow_offset = WidgetDimensions::scaled.fullbevel.top; |
| 1804 | DrawString(left + shadow_offset, right + shadow_offset, top, ss.string, TC_BLACK, SA_HOR_CENTER, false, FS_SMALL); |
| 1805 | } |
| 1806 | |
| 1807 | DrawString(left, right, top - shadow_offset, ss.string, colour, SA_HOR_CENTER, false, small ? FS_SMALL : FS_NORMAL); |
| 1808 | } |
| 1809 | } |
| 1810 | |
| 1811 | void ViewportDoDraw(const Viewport &vp, int left, int top, int right, int bottom) |
| 1812 | { |
no test coverage detected