OpenTTD Source 20241224-master-gf74b0cf984
Layouter Class Reference

The layouter performs all the layout work. More...

#include <gfx_layout.h>

Inheritance diagram for Layouter:

Data Structures

struct  LineCacheCompare
 Comparator for std::map. More...
 
struct  LineCacheItem
 Item in the linecache. More...
 
struct  LineCacheKey
 Key into the linecache. More...
 
struct  LineCacheQuery
 

Public Member Functions

 Layouter (std::string_view str, int maxw=INT32_MAX, FontSize fontsize=FS_NORMAL)
 Create a new layouter.
 
Dimension GetBounds ()
 Get the boundaries of this paragraph.
 
ParagraphLayouter::Position GetCharPosition (std::string_view::const_iterator ch) const
 Get the position of a character in the layout.
 
ptrdiff_t GetCharAtPosition (int x, size_t line_index) const
 Get the character that is at a pixel position in the first line of the layouted text.
 

Static Public Member Functions

static FontGetFont (FontSize size, TextColour colour)
 Get a static font instance.
 
static void Initialize ()
 Perform initialization of layout engine.
 
static void ResetFontCache (FontSize size)
 Reset cached font information.
 
static void ResetLineCache ()
 Clear line cache.
 
static void ReduceLineCache ()
 Reduce the size of linecache if necessary to prevent infinite growth.
 

Private Types

typedef std::map< LineCacheKey, LineCacheItem, LineCacheCompareLineCache
 
using FontColourMap = std::map< TextColour, std::unique_ptr< Font > >
 

Static Private Member Functions

static LineCacheItemGetCachedParagraphLayout (std::string_view str, const FontState &state)
 Get reference to cache item.
 

Private Attributes

std::string_view string
 Pointer to the original string.
 

Static Private Attributes

static LineCache * linecache
 Cache of ParagraphLayout lines.
 
static FontColourMap fonts [FS_END]
 Cache of Font instances.
 

Detailed Description

The layouter performs all the layout work.

It also accounts for the memory allocations and frees.

Definition at line 138 of file gfx_layout.h.

Member Typedef Documentation

◆ FontColourMap

using Layouter::FontColourMap = std::map<TextColour, std::unique_ptr<Font> >
private

Definition at line 185 of file gfx_layout.h.

◆ LineCache

typedef std::map<LineCacheKey, LineCacheItem, LineCacheCompare> Layouter::LineCache
private

Definition at line 180 of file gfx_layout.h.

Constructor & Destructor Documentation

◆ Layouter()

Layouter::Layouter ( std::string_view  str,
int  maxw = INT32_MAX,
FontSize  fontsize = FS_NORMAL 
)

Create a new layouter.

Parameters
strThe string to create the layout for.
maxwThe maximum width.
fontsizeThe size of font to use.

Definition at line 130 of file gfx_layout.cpp.

References GetCachedParagraphLayout(), Layouter::LineCacheItem::layout, and Layouter::LineCacheItem::state_after.

Member Function Documentation

◆ GetBounds()

Dimension Layouter::GetBounds ( )

Get the boundaries of this paragraph.

Returns
The boundaries.

Definition at line 199 of file gfx_layout.cpp.

Referenced by DrawStringMultiLine(), GetStringBoundingBox(), and GetStringHeight().

◆ GetCachedParagraphLayout()

Layouter::LineCacheItem & Layouter::GetCachedParagraphLayout ( std::string_view  str,
const FontState state 
)
staticprivate

Get reference to cache item.

If the item does not exist yet, it is default constructed.

Parameters
strSource string of the line (including colour and font size codes).
stateState of the font at the beginning of the line.
Returns
Reference to cache item.

Definition at line 375 of file gfx_layout.cpp.

References linecache, Layouter::LineCacheKey::state_before, and Layouter::LineCacheKey::str.

Referenced by Layouter().

◆ GetCharAtPosition()

ptrdiff_t Layouter::GetCharAtPosition ( int  x,
size_t  line_index 
) const

Get the character that is at a pixel position in the first line of the layouted text.

Parameters
xPosition in the string.
line_indexWhich line of the layout to search
Returns
String offset of the position (bytes) or -1 if no character is at the position.

Definition at line 290 of file gfx_layout.cpp.

References IsConsumedFormattingCode(), and IsInsideMM().

Referenced by TextfileWindow::CheckHyperlinkClick(), and GetCharAtPosition().

◆ GetCharPosition()

ParagraphLayouter::Position Layouter::GetCharPosition ( std::string_view::const_iterator  ch) const

Get the position of a character in the layout.

Parameters
chCharacter to get the position of. Must be an iterator of the string passed to the constructor.
Returns
Upper left corner of the character relative to the start of the string.
Note
Will only work right for single-line strings.

Definition at line 228 of file gfx_layout.cpp.

References _current_text_dir, IsConsumedFormattingCode(), and TD_LTR.

Referenced by GetCharPosInString().

◆ GetFont()

Font * Layouter::GetFont ( FontSize  size,
TextColour  colour 
)
static

Get a static font instance.

Definition at line 330 of file gfx_layout.cpp.

References fonts.

Referenced by GetLayouter().

◆ Initialize()

void Layouter::Initialize ( )
static

Perform initialization of layout engine.

Definition at line 342 of file gfx_layout.cpp.

References ICUParagraphLayoutFactory::InitializeLayouter().

Referenced by ReadLanguagePack().

◆ ReduceLineCache()

void Layouter::ReduceLineCache ( )
static

Reduce the size of linecache if necessary to prevent infinite growth.

Definition at line 405 of file gfx_layout.cpp.

References linecache, and ResetLineCache().

Referenced by GenerateTownName(), and StateGameLoop().

◆ ResetFontCache()

void Layouter::ResetFontCache ( FontSize  size)
static

Reset cached font information.

Parameters
sizeFont size to reset.

Definition at line 353 of file gfx_layout.cpp.

References fonts, MacOSResetScriptCache(), and ResetLineCache().

Referenced by SpriteFontCache::ClearFontCache(), TrueTypeFontCache::ClearFontCache(), FontCache::FontCache(), and FontCache::~FontCache().

◆ ResetLineCache()

void Layouter::ResetLineCache ( )
static

Clear line cache.

Definition at line 397 of file gfx_layout.cpp.

References linecache.

Referenced by ReduceLineCache(), and ResetFontCache().

Field Documentation

◆ fonts

Layouter::FontColourMap Layouter::fonts
staticprivate

Cache of Font instances.

Definition at line 186 of file gfx_layout.h.

Referenced by GetFont(), and ResetFontCache().

◆ linecache

Layouter::LineCache * Layouter::linecache
staticprivate

Cache of ParagraphLayout lines.

Definition at line 181 of file gfx_layout.h.

Referenced by GetCachedParagraphLayout(), ReduceLineCache(), and ResetLineCache().

◆ string

std::string_view Layouter::string
private

Pointer to the original string.

Definition at line 139 of file gfx_layout.h.


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