@@ -244,29 +244,35 @@ struct MainWindow : Window
CLRBITS(this->flags, WF_WHITE_BORDER);
ResizeWindow(this, _screen.width, _screen.height);
NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_M_VIEWPORT);
nvp->InitializeViewport(this, TileXY(32, 32), ZOOM_LVL_VIEWPORT);
this->viewport->overlay = new LinkGraphOverlay(this, WID_M_VIEWPORT, 0, 0, 3);
this->refresh = LINKGRAPH_DELAY;
}
virtual void OnTick()
{
if (--refresh == 0) {
this->viewport->overlay->RebuildCache();
this->GetWidget<NWidgetBase>(WID_M_VIEWPORT)->SetDirty(this);
this->refresh = LINKGRAPH_REFRESH_PERIOD;
if (--this->refresh > 0) return;
if (this->viewport->overlay->GetCargoMask() == 0 ||
this->viewport->overlay->GetCompanyMask() == 0) {
return;
virtual void OnPaint()
this->DrawWidgets();
if (_game_mode == GM_MENU) {
static const SpriteID title_sprites[] = {SPR_OTTD_O, SPR_OTTD_P, SPR_OTTD_E, SPR_OTTD_N, SPR_OTTD_T, SPR_OTTD_T, SPR_OTTD_D};
static const uint LETTER_SPACING = 10;
int name_width = (lengthof(title_sprites) - 1) * LETTER_SPACING;
for (uint i = 0; i < lengthof(title_sprites); i++) {
name_width += GetSpriteSize(title_sprites[i]).width;
@@ -1468,35 +1468,37 @@ void ViewportDoDraw(const ViewPort *vp,
ViewportDrawParentSprites(&_vd.parent_sprites_to_sort, &_vd.child_screen_sprites_to_draw);
if (_draw_bounding_boxes) ViewportDrawBoundingBoxes(&_vd.parent_sprites_to_sort);
if (_draw_dirty_blocks) ViewportDrawDirtyBlocks();
DrawPixelInfo dp = _vd.dpi;
ZoomLevel zoom = _vd.dpi.zoom;
dp.zoom = ZOOM_LVL_NORMAL;
dp.width = UnScaleByZoom(dp.width, zoom);
dp.height = UnScaleByZoom(dp.height, zoom);
_cur_dpi = &dp;
/* translate to window coordinates */
dp.left = x;
dp.top = y;
if (vp->overlay != NULL) vp->overlay->Draw(&dp);
/* translate back to world coordinates */
dp.left = UnScaleByZoom(_vd.dpi.left, zoom);
dp.top = UnScaleByZoom(_vd.dpi.top, zoom);
if (_vd.string_sprites_to_draw.Length() != 0) ViewportDrawStrings(zoom, &_vd.string_sprites_to_draw);
if (vp->overlay != NULL && vp->overlay->GetCargoMask() != 0 && vp->overlay->GetCompanyMask() != 0) {
vp->overlay->Draw(&dp);
if (_vd.string_sprites_to_draw.Length() != 0) {
/* translate to world coordinates */
ViewportDrawStrings(zoom, &_vd.string_sprites_to_draw);
_cur_dpi = old_dpi;
_vd.string_sprites_to_draw.Clear();
_vd.tile_sprites_to_draw.Clear();
_vd.parent_sprites_to_draw.Clear();
_vd.parent_sprites_to_sort.Clear();
_vd.child_screen_sprites_to_draw.Clear();
/**
* Make sure we don't draw a too big area at a time.
Status change: