OpenTTD Source: LinkGraphOverlay Class Reference

OpenTTD Source 13.2.1

Public Types | Public Member Functions | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes
LinkGraphOverlay Class Reference

Handles drawing of links into some window. More...

`#include <linkgraph_gui.h>`

## Public Types
typedef std::map< StationID, LinkProperties > | StationLinkMap
typedef std::map< StationID, StationLinkMap > | LinkMap
typedef std::vector< std::pair< StationID, uint > > | StationSupplyList

## Public Member Functions
| LinkGraphOverlay (Window *w, uint wid, CargoTypes cargo_mask, uint32 company_mask, uint scale)
| Create a link graph overlay for the specified window. More...
void | Draw (const DrawPixelInfo *dpi)
| Draw the linkgraph overlay or some part of it, in the area given. More...
void | SetCargoMask (CargoTypes cargo_mask)
| Set a new cargo mask and rebuild the cache. More...
void | SetCompanyMask (uint32 company_mask)
| Set a new company mask and rebuild the cache. More...
bool | ShowTooltip (Point pt, TooltipCloseCondition close_cond)
void | SetDirty ()
| Mark the linkgraph dirty to be rebuilt next time Draw() is called.
CargoTypes | GetCargoMask ()
| Get a bitmask of the currently shown cargoes.
uint32 | GetCompanyMask ()
| Get a bitmask of the currently shown companies.

## Static Public Attributes
static const uint8 | LINK_COLOURS [][12]
| Colours for the various "load" states of links. More...

## Protected Member Functions
Point | GetStationMiddle (const Station *st) const
| Determine the middle of a station in the current window. More...
void | AddLinks (const Station *sta, const Station *stb)
| Add all "interesting" links between the given stations to the cache. More...
void | DrawLinks (const DrawPixelInfo *dpi) const
| Draw the cached links or part of them into the given area. More...
void | DrawStationDots (const DrawPixelInfo *dpi) const
| Draw dots for stations into the smallmap. More...
void | DrawContent (Point pta, Point ptb, const LinkProperties &cargo) const
| Draw one specific link. More...
bool | IsLinkVisible (Point pta, Point ptb, const DrawPixelInfo *dpi, int padding=0) const
| Determine if a certain link crosses through the area given by the dpi with some lee way. More...
bool | IsPointVisible (Point pt, const DrawPixelInfo *dpi, int padding=0) const
| Determine if a certain point is inside the given DPI, with some lee way. More...
void | GetWidgetDpi (DrawPixelInfo *dpi) const
| Get a DPI for the widget we will be drawing to. More...
void | RebuildCache ()
| Rebuild the cache and recalculate which links and stations to be shown.

## Static Protected Member Functions
static void | AddStats (CargoID new_cargo, uint new_cap, uint new_usg, uint new_flow, uint32 time, bool new_shared, LinkProperties &cargo)
| Add information from a given pair of link stat and flow stat to the given link properties. More...
static void | DrawVertex (int x, int y, int size, int colour, int border_colour)
| Draw a square symbolizing a producer of cargo. More...

## Protected Attributes
Window * | window
| Window to be drawn into.
const uint | widget_id
| ID of Widget in Window to be drawn to.
CargoTypes | cargo_mask
| Bitmask of cargos to be displayed.
uint32 | company_mask
| Bitmask of companies to be displayed.
LinkMap | cached_links
| Cache for links to reduce recalculation.
StationSupplyList | cached_stations
| Cache for stations to be drawn.
uint | scale
| Width of link lines.
bool | dirty
| Set if overlay should be rebuilt.

## Detailed Description

Handles drawing of links into some window.

The window must either be a smallmap or have a valid viewport.

Definition at line 43 of file linkgraph_gui.h.

## Constructor & Destructor Documentation

## ◆ LinkGraphOverlay()

LinkGraphOverlay::LinkGraphOverlay | ( | Window * | w,
|  | uint | wid,
|  | CargoTypes | cargo_mask,
|  | uint32 | company_mask,
|  | uint | scale
| ) |  |
| inline

Create a link graph overlay for the specified window.

Parameters

  w | Window to be drawn into.
  wid | ID of the widget to draw into.
  cargo_mask | Bitmask of cargoes to be shown.
  company_mask | Bitmask of companies to be shown.
  scale | Desired thickness of lines and size of station dots.

Definition at line 59 of file linkgraph_gui.h.

## Member Function Documentation

## ◆ AddLinks()

void LinkGraphOverlay::AddLinks | ( | const Station * | from,
|  | const Station * | to
| ) |  |
| protected

Add all "interesting" links between the given stations to the cache.

Parameters

  from | The source station.
  to | The destination station.

Definition at line 210 of file linkgraph_gui.cpp.

## ◆ AddStats()

void LinkGraphOverlay::AddStats | ( | CargoID | new_cargo,
|  | uint | new_cap,
|  | uint | new_usg,
|  | uint | new_plan,
|  | uint32 | time,
|  | bool | new_shared,
|  | LinkProperties & | cargo
| ) |  |
| staticprotected

Add information from a given pair of link stat and flow stat to the given link properties.

The shown usage or plan is always the maximum of all link stats involved.

Parameters

  new_cap | Capacity of the new link.
  new_usg | Usage of the new link.
  new_plan | Planned flow for the new link.
  new_shared | If the new link is shared.
  cargo | LinkProperties to write the information to.

Definition at line 241 of file linkgraph_gui.cpp.

References LinkProperties::capacity, LinkProperties::cargo, LinkProperties::planned, LinkProperties::shared, LinkProperties::time, LinkProperties::Usage(), and LinkProperties::usage.

## ◆ Draw()

void LinkGraphOverlay::Draw | ( | const DrawPixelInfo * | dpi | ) |

Draw the linkgraph overlay or some part of it, in the area given.

Parameters

  dpi | Area to be drawn to.

Definition at line 259 of file linkgraph_gui.cpp.

References dirty, DrawLinks(), DrawStationDots(), and RebuildCache().

## ◆ DrawContent()

void LinkGraphOverlay::DrawContent | ( | Point | pta,
|  | Point | ptb,
|  | const LinkProperties & | cargo
| ) |  | const
| protected

Draw one specific link.

Parameters

  pta | Source of the link.
  ptb | Destination of the link.
  cargo | Properties of the link.

Definition at line 294 of file linkgraph_gui.cpp.

References _settings_client, _settings_game, abs(), LinkProperties::capacity, ClientSettings::gui, lengthof, LINK_COLOURS, GUISettings::linkgraph_colours, VehicleSettings::road_side, scale, ScaleGUITrad(), LinkProperties::shared, LinkProperties::Usage(), and GameSettings::vehicle.

Referenced by DrawLinks().

## ◆ DrawLinks()

void LinkGraphOverlay::DrawLinks | ( | const DrawPixelInfo * | dpi | ) | const
| protected

Draw the cached links or part of them into the given area.

Parameters

  dpi | Area to be drawn to.

Definition at line 273 of file linkgraph_gui.cpp.

References cached_links, DrawContent(), SpecializedStation< Station, false >::Get(), GetStationMiddle(), IsLinkVisible(), SpecializedStation< Station, false >::IsValidID(), scale, and ScaleGUITrad().

Referenced by Draw().

## ◆ DrawStationDots()

void LinkGraphOverlay::DrawStationDots | ( | const DrawPixelInfo * | dpi | ) | const
| protected

Draw dots for stations into the smallmap.

The dots' sizes are determined by the amount of cargo produced there, their colours by the type of cargo produced.

Definition at line 319 of file linkgraph_gui.cpp.

References _colour_gradient, cached_stations, DrawVertex(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), SpecializedStation< Station, false >::GetIfValid(), GetStationMiddle(), IsPointVisible(), BaseStation::owner, OWNER_NONE, scale, and ScaleGUITrad().

Referenced by Draw().

## ◆ DrawVertex()

void LinkGraphOverlay::DrawVertex | ( | int | x,
|  | int | y,
|  | int | size,
|  | int | colour,
|  | int | border_colour
| ) |  |
| staticprotected

Draw a square symbolizing a producer of cargo.

Parameters

  x | X coordinate of the middle of the vertex.
  y | Y coordinate of the middle of the vertex.
  size | Y and y extend of the vertex.
  colour | Colour with which the vertex will be filled.
  border_colour | Colour for the border of the vertex.

Definition at line 345 of file linkgraph_gui.cpp.

Referenced by DrawStationDots().

## ◆ GetStationMiddle()

Point LinkGraphOverlay::GetStationMiddle | ( | const Station * | st | ) | const
| protected

Determine the middle of a station in the current window.

Parameters

  st | The station we're looking for.

Returns
  Middle point of the station in the current window.

Definition at line 420 of file linkgraph_gui.cpp.

References Window::viewport, and window.

Referenced by DrawLinks(), DrawStationDots(), and RebuildCache().

## ◆ GetWidgetDpi()

void LinkGraphOverlay::GetWidgetDpi | ( | DrawPixelInfo * | dpi | ) | const
| protected

Get a DPI for the widget we will be drawing to.

Parameters

  dpi | DrawPixelInfo to fill with the desired dimensions.

Definition at line 57 of file linkgraph_gui.cpp.

References NWidgetBase::current_x, NWidgetBase::current_y, Window::GetWidget(), widget_id, and window.

Referenced by RebuildCache().

## ◆ IsLinkVisible()

bool LinkGraphOverlay::IsLinkVisible | ( | Point | pta,
|  | Point | ptb,
|  | const DrawPixelInfo * | dpi,
|  | int | padding = `0`
| ) |  | const
| inlineprotected

Determine if a certain link crosses through the area given by the dpi with some lee way.

Parameters

  pta | First end of the link.
  ptb | Second end of the link.
  dpi | Visible area.
  padding | Width or thickness of the link.

Returns
  If the link or any of its "thickness" is visible. This may return false positives.

Definition at line 140 of file linkgraph_gui.cpp.

Referenced by DrawLinks().

## ◆ IsPointVisible()

bool LinkGraphOverlay::IsPointVisible | ( | Point | pt,
|  | const DrawPixelInfo * | dpi,
|  | int | padding = `0`
| ) |  | const
| inlineprotected

Determine if a certain point is inside the given DPI, with some lee way.

Parameters

  pt | Point we are looking for.
  dpi | Visible area.
  padding | Extent of the point.

Returns
  If the point or any of its 'extent' is inside the dpi.

Definition at line 125 of file linkgraph_gui.cpp.

Referenced by DrawStationDots().

## ◆ SetCargoMask()

void LinkGraphOverlay::SetCargoMask | ( | CargoTypes | cargo_mask | ) |

Set a new cargo mask and rebuild the cache.

Parameters

  cargo_mask | New cargo mask.

Definition at line 434 of file linkgraph_gui.cpp.

References cargo_mask, Window::GetWidget(), RebuildCache(), SetDirty(), widget_id, and window.

Referenced by SmallMapWindow::SetOverlayCargoMask().

## ◆ SetCompanyMask()

void LinkGraphOverlay::SetCompanyMask | ( | uint32 | company_mask | ) |

Set a new company mask and rebuild the cache.

Parameters

  company_mask | New company mask.

Definition at line 445 of file linkgraph_gui.cpp.

References company_mask, Window::GetWidget(), RebuildCache(), SetDirty(), widget_id, and window.

Referenced by SmallMapWindow::OnRealtimeTick().

## Field Documentation

## ◆ LINK_COLOURS

const uint8 LinkGraphOverlay::LINK_COLOURS
| static

Initial value:
= {
{
0x0f, 0xd1, 0xd0, 0x57,
0x55, 0x53, 0xbf, 0xbd,
0xba, 0xb9, 0xb7, 0xb5
},
{
0x0f, 0xd1, 0xd0, 0x57,
0x55, 0x53, 0x96, 0x95,
0x94, 0x93, 0x92, 0x91
},
{
0x0f, 0x0b, 0x09, 0x07,
0x05, 0x03, 0xbf, 0xbd,
0xba, 0xb9, 0xb7, 0xb5
},
{
0x0f, 0x0b, 0x0a, 0x09,
0x08, 0x07, 0x06, 0x05,
0x04, 0x03, 0x02, 0x01
}
}

Colours for the various "load" states of links.

Ordered from "unused" to "overloaded".

Definition at line 49 of file linkgraph_gui.h.

Referenced by BuildLinkStatsLegend(), and DrawContent().

The documentation for this class was generated from the following files:

- src/linkgraph/linkgraph_gui.h
- src/linkgraph/linkgraph_gui.cpp