Functions | Variables

# Dirty

Handles the repaint of some part of the screen. More...

## Functions
void | MarkWholeScreenDirty ()
| This function mark the whole screen as dirty.
static void | TerraformAddDirtyTile (TerraformerState *ts, TileIndex tile)
| Adds a tile to the "tile_table" in a TerraformerState.
static void | TerraformAddDirtyTileAround (TerraformerState *ts, TileIndex tile)
| Adds all tiles that incident with the north corner of a specific tile to the "tile_table" in a TerraformerState.
virtual void | Vehicle::MarkDirty ()
| Marks the vehicles to be redrawn and updates cached variables.
static void | MarkViewportDirty (const ViewPort *vp, int left, int top, int right, int bottom)
| Marks a viewport as dirty for repaint if it displays (a part of) the area the needs to be repainted.
void | MarkAllViewportsDirty (int left, int top, int right, int bottom)
| Mark all viewports that display an area as dirty (in need of repaint).
void | MarkTileDirtyByTile (TileIndex tile)
| Mark a tile given by its index dirty for repaint.
static void | SetSelectionTilesDirty ()
| Marks the selected tiles as dirty.
static void | MarkCanalsAndRiversAroundDirty (TileIndex tile)
| Marks the tiles around a tile as dirty, if they are canals or rivers.
void | Station::MarkTilesDirty (bool cargo_change) const
| Marks the tiles of the station as dirty.
void | ViewportSign::MarkDirty (ZoomLevel maxzoom=ZOOM_LVL_MAX) const
| Mark the sign dirty in all viewports.
void | Window::SetDirty () const
| Mark entire window as dirty (in need of re-paint).
## Variables
static Rect | _invalid_rect
| The rect for repaint.
TileIndex | TerraformerState::tile_table [TERRAFORMER_TILE_TABLE_SIZE]
| Dirty tiles, i.e. at least one corner changed.

## Detailed Description

Handles the repaint of some part of the screen.

Some places in the code are called functions which makes something "dirty". This has nothing to do with making a Tile or Window darker or less visible. This term comes from memory caching and is used to define an object must be repaint. If some data of an object (like a Tile, Window, Vehicle, whatever) are changed which are so extensive the object must be repaint its marked as "dirty". The video driver repaint this object instead of the whole screen (this is btw. also possible if needed). This is used to avoid a flickering of the screen by the video driver constantly repainting it.

This whole mechanism is controlled by an rectangle defined in _invalid_rect. This rectangle defines the area on the screen which must be repaint. If a new object needs to be repainted this rectangle is extended to 'catch' the object on the screen. At some point (which is normally uninteresting for patch writers) this rectangle is send to the video drivers method VideoDriver::MakeDirty and it is truncated back to an empty rectangle. At some later point (which is uninteresting, too) the video driver repaints all these saved rectangle instead of the whole screen and drop the rectangle informations. Then a new round begins by marking objects "dirty".

See also:
  VideoDriver::MakeDirty
  _invalid_rect
  _screen

## Function Documentation

void MarkAllViewportsDirty | ( | int | left,
|  | int | top,
|  | int | right,
|  | int | bottom |
| ) |  |  |

Mark all viewports that display an area as dirty (in need of repaint).

Parameters:

  | left | Left edge of area to repaint
  | top | Top edge of area to repaint
  | right | Right edge of area to repaint
  | bottom | Bottom edge of area to repaint

Definition at line 1675 of file viewport.cpp.

References MarkViewportDirty(), Window::viewport, and ViewPort::width.

Referenced by MarkSingleVehicleDirty(), MarkTileDirtyByTile(), SetSelectionTilesDirty(), and VehicleUpdateViewport().

static void MarkCanalsAndRiversAroundDirty | ( | TileIndex | tile | ) | `[static]`

Marks the tiles around a tile as dirty, if they are canals or rivers.

Parameters:

  | tile | The center of the tile where all other tiles are marked as dirty

Definition at line 83 of file water_cmd.cpp.

References DIR_BEGIN, MarkTileDirtyIfCanalOrRiver(), and TileOffsByDir().

Referenced by CmdBuildCanal(), DoBuildLock(), DoFloodTile(), and RemoveLock().

void ViewportSign::MarkDirty | ( | ZoomLevel | maxzoom = `ZOOM_LVL_MAX` | ) | const`[inherited]`

Mark the sign dirty in all viewports.

Parameters:

  | maxzoom | Maximum ZoomLevel at which the text is visible.

Definition at line 1254 of file viewport.cpp.

References ViewportSign::center, FONT_HEIGHT_NORMAL, MarkViewportDirty(), ScaleByZoom(), Window::viewport, VPSM_BOTTOM, VPSM_TOP, ViewPort::width, ViewportSign::width_normal, ViewPort::zoom, and ZOOM_LVL_BEGIN.

Referenced by CmdRenameSign(), TextEffect::Reset(), and ViewportSign::UpdatePosition().

virtual void Vehicle::MarkDirty | ( |  | ) | `[inline, virtual, inherited]`

Marks the vehicles to be redrawn and updates cached variables.

This method marks the area of the vehicle on the screen as dirty. It can be use to repaint the vehicle.

Reimplemented in Aircraft, RoadVehicle, Ship, and Train.

Definition at line 267 of file vehicle_base.h.

Referenced by Vehicle::BeginLoading(), CmdStartStopVehicle(), Vehicle::HandleBreakdown(), LoadUnloadVehicle(), RunVehicleDayProc(), and VehicleEnterDepot().

void MarkTileDirtyByTile | ( | TileIndex | tile | ) |

Mark a tile given by its index dirty for repaint.

Parameters:

  | tile | The tile to mark dirty.

Definition at line 1706 of file viewport.cpp.

References GetTilePixelZ(), MarkAllViewportsDirty(), RemapCoords(), TILE_SIZE, TileX(), and TileY().

Referenced by AddAnimatedTile(), AnimationBase< IndustryAnimationBase, IndustryTileSpec, Industry, int, GetSimpleIndustryCallback >::AnimateTile(), AnimateTile_Town(), BuildObject(), CheckTrainStayInDepot(), ClearMakeHouseTile(), ClearPathReservation(), CmdBuildBridge(), CmdBuildCanal(), CmdBuildRailWaypoint(), CmdBuildRoad(), CmdBuildRoadDepot(), CmdBuildRoadStop(), CmdBuildShipDepot(), CmdBuildSingleRail(), CmdBuildSingleSignal(), CmdBuildTrainDepot(), CmdConvertRail(), CmdPlantTree(), CmdRemoveSingleRail(), CmdRemoveSingleSignal(), CmdTerraformLand(), DeleteAnimatedTile(), DoBuildLock(), DoClearBridge(), DoDryUp(), DoFloodTile(), DoTriggerIndustryTile(), FloodHalftile(), FreeTrainTrackReservation(), GenerateDesertArea(), GenerateRockyArea(), IncreaseAnimationStage(), MakeSingleHouseBigger(), MarkTileDirtyIfCanalOrRiver(), Station::MarkTilesDirty(), MaybeBarCrossingWithSound(), NPFMarkTile(), BuildRoadToolbarWindow::OnKeyPress(), BuildRailToolbarWindow::OnKeyPress(), RemoveDock(), RemoveRoad(), CYapfReserveTrack< Types >::ReserveRailStationPlatform(), SetRailStationPlatformReservation(), SetRedErrorSquare(), SetSelectionTilesDirty(), SetWaterClassDependingOnSurroundings(), TileLoopClearAlps(), TownActionBuildStatue(), TrainController(), TriggerStationRandomisation(), TryPathReserve(), TryReserveRailTrack(), UnreserveRailTrack(), UpdateLevelCrossing(), UpdateSignalsAroundSegment(), and VehicleEnterDepot().

static void MarkViewportDirty | ( | const ViewPort * | vp,
|  | int | left,
|  | int | top,
|  | int | right,
|  | int | bottom |
| ) |  |  | `[static]`

Marks a viewport as dirty for repaint if it displays (a part of) the area the needs to be repainted.

Parameters:

  | vp | The viewport to mark as dirty
  | left | Left edge of area to repaint
  | top | Top edge of area to repaint
  | right | Right edge of area to repaint
  | bottom | Bottom edge of area to repaint

Definition at line 1643 of file viewport.cpp.

References ViewPort::left, max(), SetDirtyBlocks(), ViewPort::top, UnScaleByZoom(), UnScaleByZoomLower(), ViewPort::virtual_height, ViewPort::virtual_left, ViewPort::virtual_top, ViewPort::virtual_width, and ViewPort::zoom.

Referenced by MarkAllViewportsDirty(), and ViewportSign::MarkDirty().

void MarkWholeScreenDirty | ( |  | ) |

This function mark the whole screen as dirty.

This results in repainting the whole screen. Use this with care as this function will break the idea about marking only parts of the screen as 'dirty'.

Definition at line 1893 of file gfx.cpp.

References SetDirtyBlocks().

Referenced by ChangeOwnershipOfCompanyItems(), CleanupGeneration(), CmdCompanyCtrl(), CmdRenameCompany(), CmdRenameEngine(), CmdRenamePresident(), CmdRenameVehicle(), CmdSetCompanyColour(), CmdSetCompanyManagerFace(), DoScanNewGRFFiles(), FlatEmptyWorld(), GameSizeChanged(), GenerateCompanyName(), HandleMouseEvents(), IConsoleResize(), IConsoleSwitch(), LoadHeightmap(), VideoDriver_Win32::MainLoop(), MenuClickCompany(), MenuClickSettings(), BuildTreesWindow::OnClick(), TransparenciesWindow::OnClick(), SpriteAlignerWindow::OnClick(), CompanyWindow::OnClick(), GameOptionsWindow::OnDropdownSelect(), MainWindow::OnKeyPress(), IConsoleWindow::OnKeyPress(), CustomCurrencyWindow::OnQueryTextFinished(), ReInitAllWindows(), ReinitGuiAfterToggleElrail(), ReloadNewGRFData(), ResetLandscapeConfirmationCallback(), ResetRestoreAllTransparency(), ScanNewGRFFiles(), SetLocalCompany(), VideoDriver_Win32::Start(), VideoDriver_SDL::Start(), ToggleBoundingBoxes(), ToggleDirtyBlocks(), and Town::~Town().

static void SetSelectionTilesDirty | ( |  | ) | `[static]`

Marks the selected tiles as dirty.

This function marks the selected tiles as dirty for repaint

Definition at line 1724 of file viewport.cpp.

References Clamp(), TileHighlightData::diagonal, GetTileMaxPixelZ(), GetTilePixelZ(), MapMaxX(), MapMaxY(), MapSizeX(), MapSizeY(), MarkAllViewportsDirty(), MarkTileDirtyByTile(), TileHighlightData::offs, TileHighlightData::outersize, TileHighlightData::pos, RemapCoords(), TileHighlightData::size, TILE_HEIGHT, TILE_PIXELS, TILE_SIZE, TileVirtXY(), and TileXY().

Referenced by UpdateTileSelection().

static void TerraformAddDirtyTile | ( | TerraformerState * | ts,
|  | TileIndex | tile |
| ) |  |  | `[static]`

Adds a tile to the "tile_table" in a TerraformerState.

Parameters:

  | ts | TerraformerState.
  | tile | Tile.

Definition at line 117 of file terraform_cmd.cpp.

References TerraformerState::tile_table, and TerraformerState::tile_table_count.

Referenced by TerraformAddDirtyTileAround().

static void TerraformAddDirtyTileAround | ( | TerraformerState * | ts,
|  | TileIndex | tile |
| ) |  |  | `[static]`

Adds all tiles that incident with the north corner of a specific tile to the "tile_table" in a TerraformerState.

Parameters:

  | ts | TerraformerState.
  | tile | Tile.

Definition at line 137 of file terraform_cmd.cpp.

References TerraformAddDirtyTile(), TileDiffXY(), TileX(), and TileY().

Referenced by TerraformTileHeight().

## Variable Documentation

Rect _invalid_rect`[static]`

The rect for repaint.

This rectangle defines the area which should be repaint by the video driver.

Definition at line 104 of file gfx.cpp.

TileIndex TerraformerState::tile_table[TERRAFORMER_TILE_TABLE_SIZE]`[inherited]`

Dirty tiles, i.e. at least one corner changed.

This array contains the tiles which are or will be marked as dirty.

Definition at line 54 of file terraform_cmd.cpp.

Referenced by CmdTerraformLand(), and TerraformAddDirtyTile().