Use backup/restore wrappers for various _cur_dpi changes

This commit is contained in:
Jonathan G Rennison
2023-02-15 21:13:58 +00:00
parent 85889143c7
commit fef39b5797
11 changed files with 34 additions and 69 deletions

View File

@@ -115,6 +115,7 @@
#include "tracerestrict.h"
#include "worker_thread.h"
#include "vehiclelist.h"
#include "core/backup_type.hpp"
#include <map>
#include <vector>
@@ -2482,10 +2483,9 @@ static inline void DrawRouteStep(const Viewport * const vp, const TileIndex tile
DrawSprite(SetBit(s, PALETTE_MODIFIER_TRANSPARENT), PALETTE_TO_TRANSPARENT, _cur_dpi->left + x_bottom_spr, _cur_dpi->top + y2);
/* Fill with the data. */
DrawPixelInfo *old_dpi = _cur_dpi;
y2 = y + _vp_route_step_height_top;
DrawPixelInfo dpi_for_text = _vdd->MakeDPIForText();
_cur_dpi = &dpi_for_text;
AutoRestoreBackup dpi_backup(_cur_dpi, &dpi_for_text);
const int x_str = x_centre - (str_width / 2);
if (list.size() > max_rank_order_type_count) {
@@ -2521,7 +2521,6 @@ static inline void DrawRouteStep(const Viewport * const vp, const TileIndex tile
}
}
}
_cur_dpi = old_dpi;
}
static bool ViewportPrepareVehicleRouteSteps(const Vehicle * const veh)
@@ -3325,9 +3324,8 @@ static void ViewportMapDrawScrollingViewportBox(const Viewport * const vp)
static void ViewportMapDrawSelection(const Viewport * const vp)
{
DrawPixelInfo *old_dpi = _cur_dpi;
DrawPixelInfo dpi_for_text = _vdd->MakeDPIForText();
_cur_dpi = &dpi_for_text;
AutoRestoreBackup dpi_backup(_cur_dpi, &dpi_for_text);
auto draw_line = [&](Point from_pt, Point to_pt) {
GfxDrawLine(from_pt.x, from_pt.y, to_pt.x, to_pt.y, PC_WHITE, 2, 0);
@@ -3368,8 +3366,6 @@ static void ViewportMapDrawSelection(const Viewport * const vp)
} else {
draw_line(start_pt, end_pt);
}
_cur_dpi = old_dpi;
}
template <bool is_32bpp>
@@ -3627,9 +3623,6 @@ void ViewportDoDraw(Viewport *vp, int left, int top, int right, int bottom, uint
_spare_viewport_drawers.pop_back();
}
DrawPixelInfo *old_dpi = _cur_dpi;
_cur_dpi = &_vdd->dpi;
_vdd->display_flags = display_flags;
_vdd->transparency_opt = _transparency_opt;
_vdd->invisibility_opt = _invisibility_opt;
@@ -3643,7 +3636,7 @@ void ViewportDoDraw(Viewport *vp, int left, int top, int right, int bottom, uint
_vdd->dpi.height = (bottom - top) & mask;
_vdd->dpi.left = left & mask;
_vdd->dpi.top = top & mask;
_vdd->dpi.pitch = old_dpi->pitch;
_vdd->dpi.pitch = _cur_dpi->pitch;
_vd.last_child = nullptr;
_vdd->offset_x = UnScaleByZoomLower(_vdd->dpi.left - (vp->virtual_left & mask), vp->zoom);
@@ -3651,7 +3644,9 @@ void ViewportDoDraw(Viewport *vp, int left, int top, int right, int bottom, uint
int x = _vdd->offset_x + vp->left;
int y = _vdd->offset_y + vp->top;
_vdd->dpi.dst_ptr = BlitterFactory::GetCurrentBlitter()->MoveTo(old_dpi->dst_ptr, x - old_dpi->left, y - old_dpi->top);
_vdd->dpi.dst_ptr = BlitterFactory::GetCurrentBlitter()->MoveTo(_cur_dpi->dst_ptr, x - _cur_dpi->left, y - _cur_dpi->top);
AutoRestoreBackup dpi_backup(_cur_dpi, &_vdd->dpi);
if (vp->overlay != nullptr && vp->overlay->GetCargoMask() != 0 && vp->overlay->GetCompanyMask() != 0) {
vp->overlay->PrepareDraw();
@@ -3698,8 +3693,6 @@ void ViewportDoDraw(Viewport *vp, int left, int top, int right, int bottom, uint
}, vp, _vdd.release());
}
}
_cur_dpi = old_dpi;
}
/* This is run in a worker thread */
@@ -3776,9 +3769,10 @@ void ViewportDoDrawProcessAllPending()
_viewport_drawer_returns.pop_back();
lk.unlock();
DrawPixelInfo *old_dpi = _cur_dpi;
ViewportDoDrawPhase3(vp);
_cur_dpi = old_dpi;
{
AutoRestoreBackup dpi_backup(_cur_dpi, AutoRestoreBackupNoNewValueTag{});
ViewportDoDrawPhase3(vp);
}
_viewport_drawer_jobs--;
if (_viewport_drawer_jobs == 0) return;