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

@@ -37,6 +37,7 @@
#include "station_func.h" #include "station_func.h"
#include "zoom_func.h" #include "zoom_func.h"
#include "sortlist_type.h" #include "sortlist_type.h"
#include "core/backup_type.hpp"
#include "widgets/company_widget.h" #include "widgets/company_widget.h"
@@ -2087,8 +2088,7 @@ struct CompanyInfrastructureWindow : Window
DrawPixelInfo tmp_dpi; DrawPixelInfo tmp_dpi;
if (!FillDrawPixelInfo(&tmp_dpi, r.left, r.top, width + 1, r.bottom - r.top + 1)) return; if (!FillDrawPixelInfo(&tmp_dpi, r.left, r.top, width + 1, r.bottom - r.top + 1)) return;
DrawPixelInfo *old_dpi = _cur_dpi; AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi);
_cur_dpi = &tmp_dpi;
int y = -this->vscroll->GetPosition(); int y = -this->vscroll->GetPosition();
@@ -2198,9 +2198,6 @@ struct CompanyInfrastructureWindow : Window
break; break;
} }
} }
/* Restore clipping region. */
_cur_dpi = old_dpi;
} }
virtual void OnResize() override virtual void OnResize() override

View File

@@ -33,6 +33,7 @@
#include "departures_func.h" #include "departures_func.h"
#include "cargotype.h" #include "cargotype.h"
#include "zoom_func.h" #include "zoom_func.h"
#include "core/backup_type.hpp"
#include "table/sprites.h" #include "table/sprites.h"
#include "table/strings.h" #include "table/strings.h"
@@ -1001,8 +1002,7 @@ void DeparturesWindow<Twaypoint>::DrawDeparturesListItems(const Rect &r) const
y += this->entry_height; y += this->entry_height;
continue; continue;
} }
DrawPixelInfo *old_dpi = _cur_dpi; AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi);
_cur_dpi = &tmp_dpi;
/* The scrolling text starts out of view at the right of the screen and finishes when it is out of view at the left of the screen. */ /* The scrolling text starts out of view at the right of the screen and finishes when it is out of view at the left of the screen. */
int pos = ltr int pos = ltr
@@ -1011,8 +1011,6 @@ void DeparturesWindow<Twaypoint>::DrawDeparturesListItems(const Rect &r) const
ltr ? DrawString( pos, INT16_MAX, 0, buffer, TC_FROMSTRING, SA_LEFT | SA_FORCE) ltr ? DrawString( pos, INT16_MAX, 0, buffer, TC_FROMSTRING, SA_LEFT | SA_FORCE)
: DrawString(-INT16_MAX, pos, 0, buffer, TC_FROMSTRING, SA_RIGHT | SA_FORCE); : DrawString(-INT16_MAX, pos, 0, buffer, TC_FROMSTRING, SA_RIGHT | SA_FORCE);
_cur_dpi = old_dpi;
} }
y += this->entry_height; y += this->entry_height;

View File

@@ -1752,9 +1752,8 @@ void DrawDirtyBlocks()
cleared_overlays = true; cleared_overlays = true;
}; };
DrawPixelInfo *old_dpi = _cur_dpi;
DrawPixelInfo bk; DrawPixelInfo bk;
_cur_dpi = &bk; Backup dpi_backup(_cur_dpi, &bk, FILE_LINE);
for (Window *w : Window::IterateFromBack()) { for (Window *w : Window::IterateFromBack()) {
w->flags &= ~WF_DRAG_DIRTIED; w->flags &= ~WF_DRAG_DIRTIED;
@@ -1899,7 +1898,7 @@ void DrawDirtyBlocks()
} }
} }
_cur_dpi = old_dpi; dpi_backup.Restore();
for (const Rect &r : _dirty_blocks) { for (const Rect &r : _dirty_blocks) {
RedrawScreenRect(r.left, r.top, r.right, r.bottom); RedrawScreenRect(r.left, r.top, r.right, r.bottom);

View File

@@ -34,6 +34,7 @@
#include "error.h" #include "error.h"
#include "tracerestrict.h" #include "tracerestrict.h"
#include "scope.h" #include "scope.h"
#include "core/backup_type.hpp"
#include "widgets/order_widget.h" #include "widgets/order_widget.h"
@@ -1171,12 +1172,9 @@ void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int
Dimension lock_d = GetSpriteSize(SPR_LOCK); Dimension lock_d = GetSpriteSize(SPR_LOCK);
DrawPixelInfo tmp_dpi; DrawPixelInfo tmp_dpi;
if (FillDrawPixelInfo(&tmp_dpi, rtl ? left : middle, y, rtl ? middle - left : right - middle, lock_d.height)) { if (FillDrawPixelInfo(&tmp_dpi, rtl ? left : middle, y, rtl ? middle - left : right - middle, lock_d.height)) {
DrawPixelInfo *old_dpi = _cur_dpi; AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi);
_cur_dpi = &tmp_dpi;
DrawSprite(SPR_LOCK, PAL_NONE, rtl ? edge - 3 - lock_d.width - left : edge + 3 - middle, 0); DrawSprite(SPR_LOCK, PAL_NONE, rtl ? edge - 3 - lock_d.width - left : edge + 3 - middle, 0);
_cur_dpi = old_dpi;
} }
} }
} }

View File

@@ -1699,20 +1699,17 @@ void SmallMapWindow::TakeScreenshot()
*/ */
void SmallMapWindow::ScreenshotCallbackHandler(void *buf, uint y, uint pitch, uint n) void SmallMapWindow::ScreenshotCallbackHandler(void *buf, uint y, uint pitch, uint n)
{ {
DrawPixelInfo dpi, *old_dpi; DrawPixelInfo dpi;
AutoRestoreBackup dpi_backup(_cur_dpi, &dpi);
/* We are no longer rendering to the screen */ /* We are no longer rendering to the screen */
DrawPixelInfo old_screen = _screen; AutoRestoreBackup screen_backup(_screen, AutoRestoreBackupNoNewValueTag{});
bool old_disable_anim = _screen_disable_anim; AutoRestoreBackup screen_disable_anim_backup(_screen_disable_anim, true);
_screen.dst_ptr = buf; _screen.dst_ptr = buf;
_screen.width = pitch; _screen.width = pitch;
_screen.height = n; _screen.height = n;
_screen.pitch = pitch; _screen.pitch = pitch;
_screen_disable_anim = true;
old_dpi = _cur_dpi;
_cur_dpi = &dpi;
dpi.dst_ptr = buf; dpi.dst_ptr = buf;
dpi.height = n; dpi.height = n;
@@ -1728,12 +1725,6 @@ void SmallMapWindow::ScreenshotCallbackHandler(void *buf, uint y, uint pitch, ui
/* make the screenshot */ /* make the screenshot */
this->DrawSmallMap(&dpi, false); this->DrawSmallMap(&dpi, false);
_cur_dpi = old_dpi;
/* Switch back to rendering to the screen */
_screen = old_screen;
_screen_disable_anim = old_disable_anim;
} }
SmallMapWindow::SmallMapType SmallMapWindow::map_type = SMT_CONTOUR; SmallMapWindow::SmallMapType SmallMapWindow::map_type = SMT_CONTOUR;

View File

@@ -40,6 +40,7 @@
#include "company_base.h" #include "company_base.h"
#include "train.h" #include "train.h"
#include "newgrf_debug.h" #include "newgrf_debug.h"
#include "core/backup_type.hpp"
#include "tbtr_template_gui_create.h" #include "tbtr_template_gui_create.h"
#include "tbtr_template_vehicle.h" #include "tbtr_template_vehicle.h"
@@ -298,12 +299,11 @@ public:
} }
case TCW_INFO_PANEL: { case TCW_INFO_PANEL: {
if (this->virtual_train) { if (this->virtual_train) {
DrawPixelInfo tmp_dpi, *old_dpi; DrawPixelInfo tmp_dpi;
if (!FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.right - r.left, r.bottom - r.top)) break; if (!FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.right - r.left, r.bottom - r.top)) break;
old_dpi = _cur_dpi; AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi);
_cur_dpi = &tmp_dpi;
int y = ScaleGUITrad(4) - this->vscroll->GetPosition(); int y = ScaleGUITrad(4) - this->vscroll->GetPosition();
bool buildable = true; bool buildable = true;
@@ -380,8 +380,6 @@ public:
y += FONT_HEIGHT_NORMAL; y += FONT_HEIGHT_NORMAL;
} }
} }
_cur_dpi = old_dpi;
} }
break; break;
} }

View File

@@ -28,6 +28,7 @@
#include "network/network.h" #include "network/network.h"
#include "zoom_func.h" #include "zoom_func.h"
#include "textbuf_gui.h" #include "textbuf_gui.h"
#include "core/backup_type.hpp"
#include "table/sprites.h" #include "table/sprites.h"
#include "table/strings.h" #include "table/strings.h"
@@ -769,14 +770,13 @@ public:
return; return;
} }
DrawPixelInfo tmp_dpi, *old_dpi; DrawPixelInfo tmp_dpi;
if (!FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.right - r.left, r.bottom - r.top)) { if (!FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.right - r.left, r.bottom - r.top)) {
return; return;
} }
old_dpi = _cur_dpi; AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi);
_cur_dpi = &tmp_dpi;
const TemplateVehicle *tmp = this->templates[this->selected_template_index]; const TemplateVehicle *tmp = this->templates[this->selected_template_index];
@@ -840,8 +840,6 @@ public:
} }
} }
} }
_cur_dpi = old_dpi;
} }
void UpdateButtonState() void UpdateButtonState()

View File

@@ -124,14 +124,13 @@ void DrawTemplate(const TemplateVehicle *tv, int left, int right, int y, int hei
{ {
if (!tv) return; if (!tv) return;
DrawPixelInfo tmp_dpi, *old_dpi; DrawPixelInfo tmp_dpi;
int max_width = right - left + 1; int max_width = right - left + 1;
int veh_height = ScaleSpriteTrad(14); int veh_height = ScaleSpriteTrad(14);
int padding = height - veh_height; int padding = height - veh_height;
if (!FillDrawPixelInfo(&tmp_dpi, left, y + (padding / 2), max_width, height)) return; if (!FillDrawPixelInfo(&tmp_dpi, left, y + (padding / 2), max_width, height)) return;
old_dpi = _cur_dpi; AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi);
_cur_dpi = &tmp_dpi;
const TemplateVehicle *t = tv; const TemplateVehicle *t = tv;
int offset = 0; int offset = 0;
@@ -142,8 +141,6 @@ void DrawTemplate(const TemplateVehicle *tv, int left, int right, int y, int hei
offset += t->image_dimensions.GetDisplayImageWidth(); offset += t->image_dimensions.GetDisplayImageWidth();
t = t->Next(); t = t->Next();
} }
_cur_dpi = old_dpi;
} }
// copy important stuff from the virtual vehicle to the template // copy important stuff from the virtual vehicle to the template

View File

@@ -26,6 +26,7 @@
#include "schdispatch.h" #include "schdispatch.h"
#include "vehiclelist.h" #include "vehiclelist.h"
#include "tracerestrict.h" #include "tracerestrict.h"
#include "core/backup_type.hpp"
#include "widgets/timetable_widget.h" #include "widgets/timetable_widget.h"
@@ -723,12 +724,9 @@ struct TimetableWindow : GeneralVehicleWindow {
Dimension lock_d = GetSpriteSize(SPR_LOCK); Dimension lock_d = GetSpriteSize(SPR_LOCK);
DrawPixelInfo tmp_dpi; DrawPixelInfo tmp_dpi;
if (FillDrawPixelInfo(&tmp_dpi, rtl ? tr.left : middle, tr.top, rtl ? middle : tr.right, lock_d.height)) { if (FillDrawPixelInfo(&tmp_dpi, rtl ? tr.left : middle, tr.top, rtl ? middle : tr.right, lock_d.height)) {
DrawPixelInfo *old_dpi = _cur_dpi; AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi);
_cur_dpi = &tmp_dpi;
DrawSprite(SPR_LOCK, PAL_NONE, rtl ? edge - 3 - lock_d.width - tr.left : edge + 3 - middle, 0); DrawSprite(SPR_LOCK, PAL_NONE, rtl ? edge - 3 - lock_d.width - tr.left : edge + 3 - middle, 0);
_cur_dpi = old_dpi;
} }
} }

View File

@@ -367,8 +367,7 @@ void DrawHouseImage(HouseID house_id, int left, int top, int right, int bottom)
{ {
DrawPixelInfo tmp_dpi; DrawPixelInfo tmp_dpi;
if (!FillDrawPixelInfo(&tmp_dpi, left, top, right - left + 1, bottom - top + 1)) return; if (!FillDrawPixelInfo(&tmp_dpi, left, top, right - left + 1, bottom - top + 1)) return;
DrawPixelInfo *old_dpi = _cur_dpi; AutoRestoreBackup dpi_backup(_cur_dpi, &tmp_dpi);
_cur_dpi = &tmp_dpi;
const HouseSpec *hs = HouseSpec::Get(house_id); const HouseSpec *hs = HouseSpec::Get(house_id);
@@ -412,8 +411,6 @@ void DrawHouseImage(HouseID house_id, int left, int top, int right, int bottom)
} }
if (!ground) break; if (!ground) break;
} }
_cur_dpi = old_dpi;
} }
static int GetSlopePixelZ_Town(TileIndex tile, uint x, uint y) static int GetSlopePixelZ_Town(TileIndex tile, uint x, uint y)

View File

@@ -115,6 +115,7 @@
#include "tracerestrict.h" #include "tracerestrict.h"
#include "worker_thread.h" #include "worker_thread.h"
#include "vehiclelist.h" #include "vehiclelist.h"
#include "core/backup_type.hpp"
#include <map> #include <map>
#include <vector> #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); DrawSprite(SetBit(s, PALETTE_MODIFIER_TRANSPARENT), PALETTE_TO_TRANSPARENT, _cur_dpi->left + x_bottom_spr, _cur_dpi->top + y2);
/* Fill with the data. */ /* Fill with the data. */
DrawPixelInfo *old_dpi = _cur_dpi;
y2 = y + _vp_route_step_height_top; y2 = y + _vp_route_step_height_top;
DrawPixelInfo dpi_for_text = _vdd->MakeDPIForText(); 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); const int x_str = x_centre - (str_width / 2);
if (list.size() > max_rank_order_type_count) { 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) 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) static void ViewportMapDrawSelection(const Viewport * const vp)
{ {
DrawPixelInfo *old_dpi = _cur_dpi;
DrawPixelInfo dpi_for_text = _vdd->MakeDPIForText(); 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) { 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); 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 { } else {
draw_line(start_pt, end_pt); draw_line(start_pt, end_pt);
} }
_cur_dpi = old_dpi;
} }
template <bool is_32bpp> 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(); _spare_viewport_drawers.pop_back();
} }
DrawPixelInfo *old_dpi = _cur_dpi;
_cur_dpi = &_vdd->dpi;
_vdd->display_flags = display_flags; _vdd->display_flags = display_flags;
_vdd->transparency_opt = _transparency_opt; _vdd->transparency_opt = _transparency_opt;
_vdd->invisibility_opt = _invisibility_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.height = (bottom - top) & mask;
_vdd->dpi.left = left & mask; _vdd->dpi.left = left & mask;
_vdd->dpi.top = top & mask; _vdd->dpi.top = top & mask;
_vdd->dpi.pitch = old_dpi->pitch; _vdd->dpi.pitch = _cur_dpi->pitch;
_vd.last_child = nullptr; _vd.last_child = nullptr;
_vdd->offset_x = UnScaleByZoomLower(_vdd->dpi.left - (vp->virtual_left & mask), vp->zoom); _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 x = _vdd->offset_x + vp->left;
int y = _vdd->offset_y + vp->top; 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) { if (vp->overlay != nullptr && vp->overlay->GetCargoMask() != 0 && vp->overlay->GetCompanyMask() != 0) {
vp->overlay->PrepareDraw(); vp->overlay->PrepareDraw();
@@ -3698,8 +3693,6 @@ void ViewportDoDraw(Viewport *vp, int left, int top, int right, int bottom, uint
}, vp, _vdd.release()); }, vp, _vdd.release());
} }
} }
_cur_dpi = old_dpi;
} }
/* This is run in a worker thread */ /* This is run in a worker thread */
@@ -3776,9 +3769,10 @@ void ViewportDoDrawProcessAllPending()
_viewport_drawer_returns.pop_back(); _viewport_drawer_returns.pop_back();
lk.unlock(); lk.unlock();
DrawPixelInfo *old_dpi = _cur_dpi; {
ViewportDoDrawPhase3(vp); AutoRestoreBackup dpi_backup(_cur_dpi, AutoRestoreBackupNoNewValueTag{});
_cur_dpi = old_dpi; ViewportDoDrawPhase3(vp);
}
_viewport_drawer_jobs--; _viewport_drawer_jobs--;
if (_viewport_drawer_jobs == 0) return; if (_viewport_drawer_jobs == 0) return;