OpenTTD
|
Handling of drawing text and other gfx related stuff. More...
#include "stdafx.h"
#include "gfx_layout.h"
#include "progress.h"
#include "zoom_func.h"
#include "blitter/factory.hpp"
#include "video/video_driver.hpp"
#include "strings_func.h"
#include "settings_type.h"
#include "network/network.h"
#include "network/network_func.h"
#include "window_func.h"
#include "newgrf_debug.h"
#include "table/palettes.h"
#include "table/string_colours.h"
#include "table/sprites.h"
#include "table/control_codes.h"
#include "safeguards.h"
Go to the source code of this file.
Macros | |
#define | EXTR(p, q) (((uint16)(palette_animation_counter * (p)) * (q)) >> 16) |
#define | EXTR2(p, q) (((uint16)(~palette_animation_counter * (p)) * (q)) >> 16) |
Functions | |
static void | GfxMainBlitterViewport (const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub=NULL, SpriteID sprite_id=SPR_CURSOR_MOUSE) |
static void | GfxMainBlitter (const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub=NULL, SpriteID sprite_id=SPR_CURSOR_MOUSE, ZoomLevel zoom=ZOOM_LVL_NORMAL) |
void | GfxScroll (int left, int top, int width, int height, int xo, int yo) |
void | GfxFillRect (int left, int top, int right, int bottom, int colour, FillRectMode mode) |
Applies a certain FillRectMode-operation to a rectangle [left, right] x [top, bottom] on the screen. | |
static void | GfxDoDrawLine (void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash=0) |
Check line clipping by using a linear equation and draw the visible part of the line given by x/y and x2/y2. | |
static bool | GfxPreprocessLine (DrawPixelInfo *dpi, int &x, int &y, int &x2, int &y2, int width) |
Align parameters of a line to the given DPI and check simple clipping. | |
void | GfxDrawLine (int x, int y, int x2, int y2, int colour, int width, int dash) |
void | GfxDrawLineUnscaled (int x, int y, int x2, int y2, int colour) |
void | DrawBox (int x, int y, int dx1, int dy1, int dx2, int dy2, int dx3, int dy3) |
Draws the projection of a parallelepiped. | |
static void | SetColourRemap (TextColour colour) |
Set the colour remap to be for the given colour. | |
static int | DrawLayoutLine (const ParagraphLayouter::Line *line, int y, int left, int right, StringAlignment align, bool underline, bool truncation) |
Drawing routine for drawing a laid out line of text. | |
int | DrawString (int left, int right, int top, const char *str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize) |
Draw string, possibly truncated to make it fit in its allocated space. | |
int | DrawString (int left, int right, int top, StringID str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize) |
Draw string, possibly truncated to make it fit in its allocated space. | |
int | GetStringHeight (const char *str, int maxw, FontSize fontsize) |
Calculates height of string (in pixels). | |
int | GetStringHeight (StringID str, int maxw) |
Calculates height of string (in pixels). | |
int | GetStringLineCount (StringID str, int maxw) |
Calculates number of lines of string. | |
Dimension | GetStringMultiLineBoundingBox (StringID str, const Dimension &suggestion) |
Calculate string bounding box for multi-line strings. | |
Dimension | GetStringMultiLineBoundingBox (const char *str, const Dimension &suggestion) |
Calculate string bounding box for multi-line strings. | |
int | DrawStringMultiLine (int left, int right, int top, int bottom, const char *str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize) |
Draw string, possibly over multiple lines. | |
int | DrawStringMultiLine (int left, int right, int top, int bottom, StringID str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize) |
Draw string, possibly over multiple lines. | |
Dimension | GetStringBoundingBox (const char *str, FontSize start_fontsize) |
Return the string dimension in pixels. | |
Dimension | GetStringBoundingBox (StringID strid) |
Get bounding box of a string. | |
Point | GetCharPosInString (const char *str, const char *ch, FontSize start_fontsize) |
Get the leading corner of a character in a single-line string relative to the start of the string. | |
const char * | GetCharAtPosition (const char *str, int x, FontSize start_fontsize) |
Get the character from a string that is drawn at a specific position. | |
void | DrawCharCentered (WChar c, int x, int y, TextColour colour) |
Draw single character horizontally centered around (x,y) | |
Dimension | GetSpriteSize (SpriteID sprid, Point *offset, ZoomLevel zoom) |
Get the size of a sprite. | |
static BlitterMode | GetBlitterMode (PaletteID pal) |
Helper function to get the blitter mode for different types of palettes. | |
void | DrawSpriteViewport (SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub) |
Draw a sprite in a viewport. | |
void | DrawSprite (SpriteID img, PaletteID pal, int x, int y, const SubSprite *sub, ZoomLevel zoom) |
Draw a sprite, not in a viewport. | |
template<int ZOOM_BASE, bool SCALED_XY> | |
static void | GfxBlitter (const Sprite *const sprite, int x, int y, BlitterMode mode, const SubSprite *const sub, SpriteID sprite_id, ZoomLevel zoom) |
The code for setting up the blitter mode and sprite information before finally drawing the sprite. | |
void | DoPaletteAnimations () |
void | GfxInitPalettes () |
TextColour | GetContrastColour (uint8 background) |
Determine a contrasty text colour for a coloured background. | |
void | LoadStringWidthTable (bool monospace) |
Initialize _stringwidth_table cache. | |
byte | GetCharacterWidth (FontSize size, WChar key) |
Return width of character glyph. | |
byte | GetDigitWidth (FontSize size) |
Return the maximum width of single digit. | |
void | GetBroadestDigit (uint *front, uint *next, FontSize size) |
Determine the broadest digits for guessing the maximum width of a n-digit number. | |
void | ScreenSizeChanged () |
void | UndrawMouseCursor () |
void | DrawMouseCursor () |
void | RedrawScreenRect (int left, int top, int right, int bottom) |
void | DrawDirtyBlocks () |
Repaints the rectangle blocks which are marked as 'dirty'. | |
void | SetDirtyBlocks (int left, int top, int right, int bottom) |
This function extends the internal _invalid_rect rectangle as it now contains the rectangle defined by the given parameters. | |
void | MarkWholeScreenDirty () |
This function mark the whole screen as dirty. | |
bool | FillDrawPixelInfo (DrawPixelInfo *n, int left, int top, int width, int height) |
Set up a clipping area for only drawing into a certain area. | |
void | UpdateCursorSize () |
Update cursor dimension. | |
static void | SetCursorSprite (CursorID cursor, PaletteID pal) |
Switch cursor to different sprite. | |
static void | SwitchAnimatedCursor () |
void | CursorTick () |
void | SetMouseCursorBusy (bool busy) |
Set or unset the ZZZ cursor. | |
void | SetMouseCursor (CursorID sprite, PaletteID pal) |
Assign a single non-animated sprite to the cursor. | |
void | SetAnimatedMouseCursor (const AnimCursor *table) |
Assign an animation to the cursor. | |
bool | ChangeResInGame (int width, int height) |
bool | ToggleFullScreen (bool fs) |
static int CDECL | compare_res (const Dimension *pa, const Dimension *pb) |
void | SortResolutions (int count) |
Variables | |
byte | _dirkeys |
1 = left, 2 = up, 4 = right, 8 = down | |
bool | _fullscreen |
byte | _support8bpp |
CursorVars | _cursor |
bool | _ctrl_pressed |
Is Ctrl pressed? | |
bool | _shift_pressed |
Is Shift pressed? | |
byte | _fast_forward |
bool | _left_button_down |
Is left mouse button pressed? | |
bool | _left_button_clicked |
Is left mouse button clicked? | |
bool | _right_button_down |
Is right mouse button pressed? | |
bool | _right_button_clicked |
Is right mouse button clicked? | |
DrawPixelInfo | _screen |
bool | _screen_disable_anim = false |
Disable palette animation (important for 32bpp-anim blitter during giant screenshot) | |
bool | _exit_game |
GameMode | _game_mode |
SwitchMode | _switch_mode |
The next mainloop command. | |
PauseModeByte | _pause_mode |
The current pause mode. | |
Palette | _cur_palette |
Current palette. | |
static byte | _stringwidth_table [FS_END][224] |
Cache containing width of often used characters. | |
DrawPixelInfo * | _cur_dpi |
byte | _colour_gradient [COLOUR_END][8] |
All 16 colour gradients 8 colours per gradient from darkest (0) to lightest (7) | |
static ReusableBuffer< uint8 > | _cursor_backup |
ZoomLevelByte | _gui_zoom |
GUI Zoom level. | |
static Rect | _invalid_rect |
The rect for repaint. | |
static const byte * | _colour_remap_ptr |
static byte | _string_colourremap [3] |
Recoloursprite for stringdrawing. The grf loader ensures that ST_FONT sprites only use colours 0 to 2. | |
static const uint | DIRTY_BLOCK_HEIGHT = 8 |
static const uint | DIRTY_BLOCK_WIDTH = 64 |
static uint | _dirty_bytes_per_line = 0 |
static byte * | _dirty_blocks = NULL |
uint | _dirty_block_colour |
Handling of drawing text and other gfx related stuff.
Definition in file gfx.cpp.
void DrawBox | ( | int | x, |
int | y, | ||
int | dx1, | ||
int | dy1, | ||
int | dx2, | ||
int | dy2, | ||
int | dx3, | ||
int | dy3 | ||
) |
Draws the projection of a parallelepiped.
This can be used to draw boxes in world coordinates.
x | Screen X-coordinate of top front corner. |
y | Screen Y-coordinate of top front corner. |
dx1 | Screen X-length of first edge. |
dy1 | Screen Y-length of first edge. |
dx2 | Screen X-length of second edge. |
dy2 | Screen Y-length of second edge. |
dx3 | Screen X-length of third edge. |
dy3 | Screen Y-length of third edge. |
Definition at line 278 of file gfx.cpp.
References PC_WHITE.
Referenced by ViewportDrawBoundingBoxes().
void DrawCharCentered | ( | WChar | c, |
int | x, | ||
int | y, | ||
TextColour | colour | ||
) |
Draw single character horizontally centered around (x,y)
c | Character (glyph) to draw |
x | X position to draw character |
y | Y position to draw character |
colour | Colour to use, see DoDrawString() for details |
Definition at line 755 of file gfx.cpp.
References BM_COLOUR_REMAP, FS_NORMAL, GetCharacterWidth(), GetGlyph(), and SetColourRemap().
Referenced by OskWindow::DrawWidget().
void DrawDirtyBlocks | ( | ) |
Repaints the rectangle blocks which are marked as 'dirty'.
Definition at line 1307 of file gfx.cpp.
References _modal_progress_paint_mutex, _modal_progress_work_mutex, _realtime_tick, _switch_mode, Align(), ThreadMutex::BeginCritical(), ThreadMutex::EndCritical(), HasModalProgress(), IsFirstModalProgressLoop(), and MODAL_PROGRESS_REDRAW_TIMEOUT.
Referenced by MakeScreenshot(), and UpdateWindows().
|
static |
Drawing routine for drawing a laid out line of text.
line | String to draw. |
y | The top most position to draw on. |
left | The left most position to draw on. |
right | The right most position to draw on. |
align | The alignment of the string when drawing left-to-right. In the case a right-to-left language is chosen this is inverted so it will be drawn in the right direction. |
underline | Whether to underline what has been drawn or not. |
truncation | Whether to perform string truncation or not. |
Definition at line 343 of file gfx.cpp.
References _current_text_dir, _string_colourremap, BM_COLOUR_REMAP, FontCache::GetDrawGlyphShadow(), FontCache::GetGlyph(), FontCache::GetGlyphWidth(), GfxFillRect(), FontCache::MapCharToGlyph(), RoundDivSU(), SA_FORCE, SA_HOR_CENTER, SA_HOR_MASK, SA_LEFT, SA_RIGHT, SetColourRemap(), TC_NO_SHADE, TD_RTL, Sprite::width, and Sprite::x_offs.
Referenced by DrawString(), and DrawStringMultiLine().
void DrawSprite | ( | SpriteID | img, |
PaletteID | pal, | ||
int | x, | ||
int | y, | ||
const SubSprite * | sub, | ||
ZoomLevel | zoom | ||
) |
Draw a sprite, not in a viewport.
img | Image number to draw |
pal | Palette to use. |
x | Left coordinate of image in pixels |
y | Top coordinate of image in pixels |
sub | If available, draw only specified part of the sprite |
zoom | Zoom level of sprite |
Definition at line 833 of file gfx.cpp.
References BM_NORMAL, BM_TRANSPARENT, GB(), GetBlitterMode(), HasBit(), PALETTE_MODIFIER_TRANSPARENT, PALETTE_TEXT_RECOLOUR, PALETTE_WIDTH, SetColourRemap(), SPRITE_WIDTH, ST_NORMAL, and ST_RECOLOUR.
Referenced by VehicleSpriteSeq::Draw(), StoryBookWindow::DrawActionElement(), DrawArrowButtons(), DrawButtonDropdown(), DrawCargoIcons(), DrawCloseBox(), DrawCommonTileSeqInGUI(), DrawCompanyIcon(), DrawCompanyManagerFace(), DrawDebugBox(), DrawDefSizeBox(), DrawDropDownButton(), DrawEngineList(), VehicleGroupWindow::DrawGroupInfo(), DrawHorizontalScrollbar(), DrawImageButtons(), NetworkContentListWindow::DrawMatrix(), DrawNewObjectTileInGUI(), DrawOrderString(), TownAuthorityWindow::DrawRatings(), DrawResizeBox(), DrawRoadDepotSprite(), NetworkGameWindow::DrawServerLine(), SettingsPage::DrawSetting(), DrawShadeBox(), BuildSignalWindow::DrawSignalSprite(), Window::DrawSortButtonState(), DrawStationTile(), DrawStickyBox(), DepotWindow::DrawVehicleInDepot(), DrawVehicleProfitButton(), DrawVehicleRefitWindow(), DrawVerticalScrollbar(), TransparenciesWindow::DrawWidget(), BuildTreesWindow::DrawWidget(), StatusBarWindow::DrawWidget(), BuildBridgeWindow::DrawWidget(), CheatWindow::DrawWidget(), BuildAirportWindow::DrawWidget(), ScenarioEditorLandscapeGenerationWindow::DrawWidget(), SelectCompanyLiveryWindow::DrawWidget(), TownDirectoryWindow::DrawWidget(), NewGRFWindow::DrawWidget(), SpriteAlignerWindow::DrawWidget(), CompanyWindow::DrawWidget(), VehicleViewWindow::DrawWidget(), and MainWindow::OnPaint().
Draw a sprite in a viewport.
img | Image number to draw |
pal | Palette to use. |
x | Left coordinate of image in viewport, scaled by zoom |
y | Top coordinate of image in viewport, scaled by zoom |
sub | If available, draw only specified part of the sprite |
Definition at line 806 of file gfx.cpp.
References BM_NORMAL, BM_TRANSPARENT, GB(), GetBlitterMode(), HasBit(), PALETTE_MODIFIER_TRANSPARENT, PALETTE_TEXT_RECOLOUR, PALETTE_WIDTH, SetColourRemap(), SPRITE_WIDTH, ST_NORMAL, and ST_RECOLOUR.
int DrawString | ( | int | left, |
int | right, | ||
int | top, | ||
const char * | str, | ||
TextColour | colour, | ||
StringAlignment | align, | ||
bool | underline, | ||
FontSize | fontsize | ||
) |
Draw string, possibly truncated to make it fit in its allocated space.
left | The left most position to draw on. |
right | The right most position to draw on. |
top | The top most position to draw on. |
str | String to draw. |
colour | Colour used for drawing the string, see DoDrawString() for details |
align | The alignment of the string when drawing left-to-right. In the case a right-to-left language is chosen this is inverted so it will be drawn in the right direction. |
underline | Whether to underline what has been drawn or not. |
fontsize | The size of the initial characters. |
Definition at line 499 of file gfx.cpp.
References SmallVector< T, S >::Begin(), DrawLayoutLine(), FONT_HEIGHT_LARGE, FONT_HEIGHT_MONO, FONT_HEIGHT_NORMAL, FONT_HEIGHT_SMALL, SmallVector< T, S >::Length(), and max().
Referenced by CargoesField::Draw(), StoryBookWindow::DrawActionElement(), DrawAircraftDetails(), DrawButtonDropdown(), DrawCaption(), StationViewWindow::DrawCargoRatings(), DrawCategories(), CompanyInfrastructureWindow::DrawCountLine(), NetworkContentListWindow::DrawDetails(), DrawEngineList(), StationViewWindow::DrawEntries(), SelectCompanyManagerFaceWindow::DrawFaceStringLabel(), DrawFrame(), BaseGraphWindow::DrawGraph(), VehicleGroupWindow::DrawGroupInfo(), IndustryViewWindow::DrawInfo(), DrawInset(), DrawLabel(), NetworkContentListWindow::DrawMatrix(), DrawNewsString(), DrawOrderString(), GoalListWindow::DrawPartialGoalList(), DrawPrice(), TownAuthorityWindow::DrawRatings(), DrawRoadVehDetails(), NetworkGameWindow::DrawServerLine(), SettingEntry::DrawSetting(), SettingsPage::DrawSetting(), DrawShipDetails(), DrawString(), DrawText(), SmallMapWindow::DrawTowns(), DrawTrainDetails(), DepotWindow::DrawVehicleInDepot(), BaseVehicleListWindow::DrawVehicleListItems(), DrawVehiclePurchaseInfo(), DrawVehicleRefitWindow(), TextfileWindow::DrawWidget(), GraphLegendWindow::DrawWidget(), LandInfoWindow::DrawWidget(), LinkGraphLegendWindow::DrawWidget(), EnginePreviewWindow::DrawWidget(), AIListWindow::DrawWidget(), StatusBarWindow::DrawWidget(), SubsidyListWindow::DrawWidget(), SmallMapWindow::DrawWidget(), TownAuthorityWindow::DrawWidget(), SignListWindow::DrawWidget(), BuildObjectWindow::DrawWidget(), CheatWindow::DrawWidget(), NewGRFParametersWindow::DrawWidget(), TownViewWindow::DrawWidget(), CompanyFinancesWindow::DrawWidget(), SaveLoadWindow::DrawWidget(), TimetableWindow::DrawWidget(), ReplaceVehicleWindow::DrawWidget(), AISettingsWindow::DrawWidget(), BuildAirportWindow::DrawWidget(), MusicTrackSelectionWindow::DrawWidget(), BuildIndustryWindow::DrawWidget(), CompanyStationsWindow::DrawWidget(), NetworkChatWindow::DrawWidget(), AboutWindow::DrawWidget(), StoryBookWindow::DrawWidget(), GenerateLandscapeWindow::DrawWidget(), MusicWindow::DrawWidget(), SelectCompanyLiveryWindow::DrawWidget(), TownDirectoryWindow::DrawWidget(), AIConfigWindow::DrawWidget(), NewGRFWindow::DrawWidget(), SpriteAlignerWindow::DrawWidget(), PaymentRatesGraphWindow::DrawWidget(), MessageHistoryWindow::DrawWidget(), OrdersWindow::DrawWidget(), NetworkStartServerWindow::DrawWidget(), BuildRailStationWindow::DrawWidget(), CompanyLeagueWindow::DrawWidget(), AIDebugWindow::DrawWidget(), GenerateProgressWindow::DrawWidget(), IndustryDirectoryWindow::DrawWidget(), SelectCompanyManagerFaceWindow::DrawWidget(), PerformanceRatingDetailWindow::DrawWidget(), CompanyInfrastructureWindow::DrawWidget(), NetworkClientListPopupWindow::DrawWidget(), NetworkClientListWindow::DrawWidget(), GameSettingsWindow::DrawWidget(), NetworkJoinStatusWindow::DrawWidget(), VehicleDetailsWindow::DrawWidget(), SavePresetWindow::DrawWidget(), CompanyWindow::DrawWidget(), ScanProgressWindow::DrawWidget(), SelectStationWindow< T >::DrawWidget(), ScenarioEditorToolbarWindow::DrawWidget(), VehicleViewWindow::DrawWidget(), DrawYearColumn(), HighScoreWindow::OnPaint(), IConsoleWindow::OnPaint(), BuildAirportWindow::OnPaint(), GameSettingsWindow::OnPaint(), StationsWndShowStationRating(), TrainDetailsCapacityTab(), TrainDetailsCargoTab(), and TrainDetailsInfoTab().
int DrawString | ( | int | left, |
int | right, | ||
int | top, | ||
StringID | str, | ||
TextColour | colour, | ||
StringAlignment | align, | ||
bool | underline, | ||
FontSize | fontsize | ||
) |
Draw string, possibly truncated to make it fit in its allocated space.
left | The left most position to draw on. |
right | The right most position to draw on. |
top | The top most position to draw on. |
str | String to draw. |
colour | Colour used for drawing the string, see DoDrawString() for details |
align | The alignment of the string when drawing left-to-right. In the case a right-to-left language is chosen this is inverted so it will be drawn in the right direction. |
underline | Whether to underline what has been drawn or not. |
fontsize | The size of the initial characters. |
Definition at line 534 of file gfx.cpp.
References DRAW_STRING_BUFFER, DrawString(), and lastof.
int DrawStringMultiLine | ( | int | left, |
int | right, | ||
int | top, | ||
int | bottom, | ||
const char * | str, | ||
TextColour | colour, | ||
StringAlignment | align, | ||
bool | underline, | ||
FontSize | fontsize | ||
) |
Draw string, possibly over multiple lines.
left | The left most position to draw on. |
right | The right most position to draw on. |
top | The top most position to draw on. |
bottom | The bottom most position to draw on. |
str | String to draw. |
colour | Colour used for drawing the string, see DoDrawString() for details |
align | The horizontal and vertical alignment of the string. |
underline | Whether to underline all strings |
fontsize | The size of the initial characters. |
Definition at line 620 of file gfx.cpp.
References SmallVector< T, S >::Begin(), DrawLayoutLine(), SmallVector< T, S >::End(), Layouter::GetBounds(), RoundDivSU(), SA_BOTTOM, SA_TOP, SA_VERT_CENTER, and SA_VERT_MASK.
Referenced by StationViewWindow::DrawAcceptedCargo(), StationViewWindow::DrawCargoRatings(), NetworkContentListWindow::DrawDetails(), BaseGraphWindow::DrawGraph(), IndustryViewWindow::DrawInfo(), DrawStationCoverageAreaText(), DrawStringMultiLine(), TextfileWindow::DrawWidget(), SelectGameWindow::DrawWidget(), LandInfoWindow::DrawWidget(), EnginePreviewWindow::DrawWidget(), AIListWindow::DrawWidget(), TownAuthorityWindow::DrawWidget(), BuildObjectWindow::DrawWidget(), BuildBridgeWindow::DrawWidget(), CheatWindow::DrawWidget(), NewGRFParametersWindow::DrawWidget(), ErrmsgWindow::DrawWidget(), TownViewWindow::DrawWidget(), GameOptionsWindow::DrawWidget(), SaveLoadWindow::DrawWidget(), NewsWindow::DrawWidget(), BuildAirportWindow::DrawWidget(), BuildIndustryWindow::DrawWidget(), GoalQuestionWindow::DrawWidget(), StoryBookWindow::DrawWidget(), TooltipsWindow::DrawWidget(), RefitWindow::DrawWidget(), QueryWindow::DrawWidget(), GameSettingsWindow::DrawWidget(), CompanyWindow::DrawWidget(), BuyCompanyWindow::DrawWidget(), NetworkDrawChatMessage(), EndGameWindow::OnPaint(), HighScoreWindow::OnPaint(), IConsoleWindow::OnPaint(), GameSettingsWindow::OnPaint(), ShowAdditionalText(), and ShowRefitOptionsList().
int DrawStringMultiLine | ( | int | left, |
int | right, | ||
int | top, | ||
int | bottom, | ||
StringID | str, | ||
TextColour | colour, | ||
StringAlignment | align, | ||
bool | underline, | ||
FontSize | fontsize | ||
) |
Draw string, possibly over multiple lines.
left | The left most position to draw on. |
right | The right most position to draw on. |
top | The top most position to draw on. |
bottom | The bottom most position to draw on. |
str | String to draw. |
colour | Colour used for drawing the string, see DoDrawString() for details |
align | The horizontal and vertical alignment of the string. |
underline | Whether to underline all strings |
fontsize | The size of the initial characters. |
Definition at line 682 of file gfx.cpp.
References DRAW_STRING_BUFFER, DrawStringMultiLine(), and lastof.
bool FillDrawPixelInfo | ( | DrawPixelInfo * | n, |
int | left, | ||
int | top, | ||
int | width, | ||
int | height | ||
) |
Set up a clipping area for only drawing into a certain area.
To do this, Fill a DrawPixelInfo object with the supplied relative rectangle, backup the original (calling) _cur_dpi and assign the just returned DrawPixelInfo _cur_dpi. When you are done, give restore _cur_dpi's original value
*n | the DrawPixelInfo that will be the clipping rectangle box allowed for drawing |
left,top,width,height | the relative coordinates of the clipping rectangle relative to the current _cur_dpi. This will most likely be the offset from the calling window coordinates |
Definition at line 1480 of file gfx.cpp.
References BlitterFactory::GetCurrentBlitter(), Blitter::MoveTo(), and ZOOM_LVL_NORMAL.
Referenced by NWidgetMatrix::Draw(), DrawRoadVehImage(), DrawTrainImage(), TextfileWindow::DrawWidget(), SmallMapWindow::DrawWidget(), BuildObjectWindow::DrawWidget(), StoryBookWindow::DrawWidget(), SpriteAlignerWindow::DrawWidget(), BuildRailStationWindow::DrawWidget(), and IndustryCargoesWindow::DrawWidget().
|
static |
Helper function to get the blitter mode for different types of palettes.
pal | The palette to get the blitter mode for. |
Definition at line 788 of file gfx.cpp.
References BM_BLACK_REMAP, BM_COLOUR_REMAP, BM_CRASH_REMAP, BM_NORMAL, PALETTE_ALL_BLACK, and PALETTE_CRASH.
Referenced by DrawSprite(), and DrawSpriteViewport().
void GetBroadestDigit | ( | uint * | front, |
uint * | next, | ||
FontSize | size | ||
) |
Determine the broadest digits for guessing the maximum width of a n-digit number.
[out] | front | Broadest digit, which is not 0. (Use this digit as first digit for numbers with more than one digit.) |
[out] | next | Broadest digit, including 0. (Use this digit for all digits, except the first one; or for numbers with only one digit.) |
size | Font of the digit |
Definition at line 1176 of file gfx.cpp.
References GetCharacterWidth().
Referenced by SetDParamMaxDigits().
Return width of character glyph.
size | Font of the character |
key | Character code glyph |
Definition at line 1148 of file gfx.cpp.
References _stringwidth_table, and GetGlyphWidth().
Referenced by DrawCharCentered(), GetBroadestDigit(), GetDigitWidth(), and FallbackParagraphLayout::NextLine().
const char* GetCharAtPosition | ( | const char * | str, |
int | x, | ||
FontSize | start_fontsize | ||
) |
Get the character from a string that is drawn at a specific position.
str | String to test. |
x | Position relative to the start of the string. |
start_fontsize | Font size to start the text with. |
Definition at line 740 of file gfx.cpp.
References Layouter::GetCharAtPosition().
Referenced by IConsoleWindow::GetTextCharacterAtPosition().
Get the leading corner of a character in a single-line string relative to the start of the string.
str | String containing the character. |
ch | Pointer to the character in the string. |
start_fontsize | Font size to start the text with. |
Definition at line 727 of file gfx.cpp.
References Layouter::GetCharPosition().
Referenced by QueryString::GetBoundingRect(), IConsoleWindow::GetTextBoundingRect(), Textbuf::UpdateCaretPosition(), and Textbuf::UpdateMarkedText().
TextColour GetContrastColour | ( | uint8 | background | ) |
Determine a contrasty text colour for a coloured background.
background | Background colour. |
Definition at line 1116 of file gfx.cpp.
References Palette::palette.
Referenced by CompanyStationsWindow::DrawWidget(), and StationsWndShowStationRating().
byte GetDigitWidth | ( | FontSize | size | ) |
Return the maximum width of single digit.
size | Font of the digit |
Definition at line 1161 of file gfx.cpp.
References GetCharacterWidth(), and max().
Referenced by BaseVehicleListWindow::DrawVehicleListItems(), and BuildSignalWindow::UpdateWidgetSize().
Get the size of a sprite.
sprid | Sprite to examine. | |
[out] | offset | Optionally returns the sprite position offset. |
Definition at line 768 of file gfx.cpp.
References Sprite::height, ST_NORMAL, UnScaleByZoom(), Sprite::width, Sprite::x_offs, and Sprite::y_offs.
Referenced by VehicleGroupWindow::ComputeGroupInfoSize(), StoryBookWindow::DrawActionElement(), DrawEngineList(), DrawOrderString(), TownAuthorityWindow::DrawRatings(), DrawResizeBox(), NetworkGameWindow::DrawServerLine(), BuildSignalWindow::DrawSignalSprite(), BaseVehicleListWindow::DrawVehicleListItems(), DrawVehicleRefitWindow(), GraphLegendWindow::DrawWidget(), LinkGraphLegendWindow::DrawWidget(), StatusBarWindow::DrawWidget(), BuildBridgeWindow::DrawWidget(), TimetableWindow::DrawWidget(), BuildAirportWindow::DrawWidget(), TownDirectoryWindow::DrawWidget(), NewGRFWindow::DrawWidget(), OrdersWindow::DrawWidget(), PerformanceRatingDetailWindow::DrawWidget(), CompanyWindow::DrawWidget(), VehicleViewWindow::DrawWidget(), QueryString::GetBoundingRect(), QueryString::GetCaretPosition(), QueryString::GetCharAtPosition(), BuildTreesWindow::GetMaxTreeSpriteSize(), StoryBookWindow::GetPageElementHeight(), MakeCompanyButtonRows(), MakeNWidgetCompanyLines(), NetworkContentListWindow::NetworkContentListWindow(), SelectCompanyManagerFaceWindow::OnInit(), BuildSignalWindow::OnInit(), MainWindow::OnPaint(), NWidgetLeaf::SetupSmallestSize(), BuildBridgeWindow::UpdateWidgetSize(), ErrmsgWindow::UpdateWidgetSize(), SignListWindow::UpdateWidgetSize(), CheatWindow::UpdateWidgetSize(), BuildAirportWindow::UpdateWidgetSize(), NewsWindow::UpdateWidgetSize(), VehicleGroupWindow::UpdateWidgetSize(), NetworkGameWindow::UpdateWidgetSize(), NewGRFWindow::UpdateWidgetSize(), TownDirectoryWindow::UpdateWidgetSize(), SelectCompanyManagerFaceWindow::UpdateWidgetSize(), CompanyLeagueWindow::UpdateWidgetSize(), NetworkClientListWindow::UpdateWidgetSize(), CompanyWindow::UpdateWidgetSize(), ScenarioEditorToolbarWindow::UpdateWidgetSize(), BuyCompanyWindow::UpdateWidgetSize(), and VehicleViewWindow::UpdateWidgetSize().
Return the string dimension in pixels.
The height and width are returned in a single Dimension value. TINYFONT, BIGFONT modifiers are only supported as the first character of the string. The returned dimensions are therefore a rough estimation correct for all the current strings but not every possible combination
str | string to calculate pixel-width |
start_fontsize | Fontsize to start the text with |
Definition at line 699 of file gfx.cpp.
References Layouter::GetBounds().
Referenced by VehicleGroupWindow::ComputeGroupInfoSize(), DrawCaption(), DrawEngineList(), DrawLabel(), DrawText(), CheatWindow::DrawWidget(), TimetableWindow::DrawWidget(), OrdersWindow::DrawWidget(), BaseVehicleListWindow::GetActionDropdownSize(), ExpensesList::GetCategoriesWidth(), GetStringBoundingBox(), BaseGraphWindow::GetYLabelWidth(), SmallMapWindow::OnInit(), SelectCompanyManagerFaceWindow::OnInit(), IndustryCargoesWindow::OnInit(), RefitWindow::OnInvalidateData(), GoalListWindow::OnPaint(), TextfileWindow::SetupScrollbars(), NWidgetBackground::SetupSmallestSize(), NWidgetLeaf::SetupSmallestSize(), ViewportSign::UpdatePosition(), SelectGameWindow::UpdateWidgetSize(), LandInfoWindow::UpdateWidgetSize(), LinkGraphLegendWindow::UpdateWidgetSize(), SetDateWindow::UpdateWidgetSize(), StatusBarWindow::UpdateWidgetSize(), BuildObjectWindow::UpdateWidgetSize(), SubsidyListWindow::UpdateWidgetSize(), BuildBridgeWindow::UpdateWidgetSize(), GoalListWindow::UpdateWidgetSize(), TimetableWindow::UpdateWidgetSize(), NewGRFParametersWindow::UpdateWidgetSize(), TownAuthorityWindow::UpdateWidgetSize(), ReplaceVehicleWindow::UpdateWidgetSize(), SignListWindow::UpdateWidgetSize(), CheatWindow::UpdateWidgetSize(), BuildIndustryWindow::UpdateWidgetSize(), BuildAirportWindow::UpdateWidgetSize(), CompanyFinancesWindow::UpdateWidgetSize(), MusicTrackSelectionWindow::UpdateWidgetSize(), CompanyStationsWindow::UpdateWidgetSize(), GameOptionsWindow::UpdateWidgetSize(), VehicleGroupWindow::UpdateWidgetSize(), GenerateLandscapeWindow::UpdateWidgetSize(), NetworkChatWindow::UpdateWidgetSize(), AboutWindow::UpdateWidgetSize(), SaveLoadWindow::UpdateWidgetSize(), BaseGraphWindow::UpdateWidgetSize(), NetworkGameWindow::UpdateWidgetSize(), MusicWindow::UpdateWidgetSize(), StoryBookWindow::UpdateWidgetSize(), DepotWindow::UpdateWidgetSize(), SelectCompanyLiveryWindow::UpdateWidgetSize(), TooltipsWindow::UpdateWidgetSize(), NewGRFWindow::UpdateWidgetSize(), AIConfigWindow::UpdateWidgetSize(), TownDirectoryWindow::UpdateWidgetSize(), OrdersWindow::UpdateWidgetSize(), PaymentRatesGraphWindow::UpdateWidgetSize(), CreateScenarioWindow::UpdateWidgetSize(), MessageHistoryWindow::UpdateWidgetSize(), BuildRailStationWindow::UpdateWidgetSize(), NetworkStartServerWindow::UpdateWidgetSize(), SelectCompanyManagerFaceWindow::UpdateWidgetSize(), CompanyLeagueWindow::UpdateWidgetSize(), GenerateProgressWindow::UpdateWidgetSize(), IndustryDirectoryWindow::UpdateWidgetSize(), PerformanceRatingDetailWindow::UpdateWidgetSize(), StationViewWindow::UpdateWidgetSize(), BuildVehicleWindow::UpdateWidgetSize(), VehicleListWindow::UpdateWidgetSize(), CompanyInfrastructureWindow::UpdateWidgetSize(), NetworkClientListPopupWindow::UpdateWidgetSize(), GameSettingsWindow::UpdateWidgetSize(), NetworkClientListWindow::UpdateWidgetSize(), VehicleDetailsWindow::UpdateWidgetSize(), NetworkJoinStatusWindow::UpdateWidgetSize(), SavePresetWindow::UpdateWidgetSize(), CompanyWindow::UpdateWidgetSize(), ScanProgressWindow::UpdateWidgetSize(), SelectStationWindow< T >::UpdateWidgetSize(), ScenarioEditorToolbarWindow::UpdateWidgetSize(), CustomCurrencyWindow::UpdateWidgetSize(), and Textbuf::UpdateWidth().
Get bounding box of a string.
Uses parameters set by #DParam if needed. Has the same restrictions as #GetStringBoundingBox(const char *str).
strid | String to examine. |
Definition at line 711 of file gfx.cpp.
References DRAW_STRING_BUFFER, GetStringBoundingBox(), and lastof.
int GetStringHeight | ( | const char * | str, |
int | maxw, | ||
FontSize | fontsize | ||
) |
Calculates height of string (in pixels).
The string is changed to a multiline string if needed.
str | string to check |
maxw | maximum string width |
Definition at line 547 of file gfx.cpp.
References Layouter::GetBounds().
Referenced by EnginePreviewWindow::DrawWidget(), TextfileWindow::GetContentHeight(), TownViewWindow::GetDesiredInfoHeight(), StoryBookWindow::GetHeadHeight(), SettingEntry::GetMaxHelpHeight(), StoryBookWindow::GetPageElementHeight(), GetStringHeight(), GetStringMultiLineBoundingBox(), SelectGameWindow::UpdateWidgetSize(), EnginePreviewWindow::UpdateWidgetSize(), LandInfoWindow::UpdateWidgetSize(), ErrmsgWindow::UpdateWidgetSize(), CheatWindow::UpdateWidgetSize(), GameOptionsWindow::UpdateWidgetSize(), GoalQuestionWindow::UpdateWidgetSize(), TooltipsWindow::UpdateWidgetSize(), and BuyCompanyWindow::UpdateWidgetSize().
int GetStringHeight | ( | StringID | str, |
int | maxw | ||
) |
Calculates height of string (in pixels).
The string is changed to a multiline string if needed.
str | string to check |
maxw | maximum string width |
Definition at line 559 of file gfx.cpp.
References DRAW_STRING_BUFFER, GetStringHeight(), and lastof.
int GetStringLineCount | ( | StringID | str, |
int | maxw | ||
) |
Calculates number of lines of string.
The string is changed to a multiline string if needed.
str | string to check |
maxw | maximum string width |
Definition at line 572 of file gfx.cpp.
References DRAW_STRING_BUFFER, lastof, and SmallVector< T, S >::Length().
Referenced by NetworkDrawChatMessage(), and GameSettingsWindow::OnPaint().
Calculate string bounding box for multi-line strings.
str | String to check. |
suggestion | Suggested bounding box. |
Definition at line 587 of file gfx.cpp.
References GetStringHeight().
Referenced by NewGRFParametersWindow::UpdateWidgetSize(), TownAuthorityWindow::UpdateWidgetSize(), BuildAirportWindow::UpdateWidgetSize(), NewsWindow::UpdateWidgetSize(), and QueryWindow::UpdateWidgetSize().
Calculate string bounding box for multi-line strings.
str | String to check. |
suggestion | Suggested bounding box. |
Definition at line 599 of file gfx.cpp.
References GetStringHeight().
|
static |
The code for setting up the blitter mode and sprite information before finally drawing the sprite.
sprite | The sprite to draw. |
x | The X location to draw. |
y | The Y location to draw. |
mode | The settings for the blitter to pass. |
sub | Whether to only draw a sub set of the sprite. |
zoom | The zoom level at which to draw the sprites. |
ZOOM_BASE | The factor required to get the sub sprite information into the right size. |
SCALED_XY | Whether the X and Y are scaled or unscaled. |
Definition at line 863 of file gfx.cpp.
References _newgrf_debug_sprite_picker, NewGrfDebugSpritePicker::clicked_pixel, Sprite::data, Blitter::Draw(), Blitter::BlitterParams::dst, BlitterFactory::GetCurrentBlitter(), Blitter::GetScreenDepth(), Sprite::height, Blitter::BlitterParams::height, SmallVector< T, S >::Include(), Blitter::BlitterParams::left, max(), NewGrfDebugSpritePicker::mode, Blitter::MoveTo(), Blitter::BlitterParams::pitch, Blitter::BlitterParams::remap, ScaleByZoom(), Blitter::BlitterParams::skip_left, Blitter::BlitterParams::skip_top, SPR_CURSOR_MOUSE, Blitter::BlitterParams::sprite, Blitter::BlitterParams::sprite_height, Blitter::BlitterParams::sprite_width, NewGrfDebugSpritePicker::sprites, Blitter::BlitterParams::top, UnScaleByZoom(), UnScaleByZoomLower(), Sprite::width, Blitter::BlitterParams::width, Sprite::x_offs, and Sprite::y_offs.
|
inlinestatic |
Check line clipping by using a linear equation and draw the visible part of the line given by x/y and x2/y2.
video | Destination pointer to draw into. |
x | X coordinate of first point. |
y | Y coordinate of first point. |
x2 | X coordinate of second point. |
y2 | Y coordinate of second point. |
screen_width | With of the screen to check clipping against. |
screen_height | Height of the screen to check clipping against. |
colour | Colour of the line. |
width | Width of the line. |
dash | Length of dashes for dashed lines. 0 means solid line. |
Definition at line 173 of file gfx.cpp.
References abs(), CeilDiv(), Blitter::DrawLine(), BlitterFactory::GetCurrentBlitter(), and max().
void GfxFillRect | ( | int | left, |
int | top, | ||
int | right, | ||
int | bottom, | ||
int | colour, | ||
FillRectMode | mode | ||
) |
Applies a certain FillRectMode-operation to a rectangle [left, right] x [top, bottom] on the screen.
left | Minimum X (inclusive) |
top | Minimum Y (inclusive) |
right | Maximum X (inclusive) |
bottom | Maximum Y (inclusive) |
colour | A 8 bit palette index (FILLRECT_OPAQUE and FILLRECT_CHECKER) or a recolour spritenumber (FILLRECT_RECOLOUR) |
mode | FILLRECT_OPAQUE: Fill the rectangle with the specified colour FILLRECT_CHECKER: Like FILLRECT_OPAQUE, but only draw every second pixel (used to grey out things) FILLRECT_RECOLOUR: Apply a recolour sprite to every pixel in the rectangle currently on screen |
Definition at line 112 of file gfx.cpp.
References Blitter::DrawColourMappingRect(), Blitter::DrawRect(), FILLRECT_CHECKER, FILLRECT_RECOLOUR, GB(), BlitterFactory::GetCurrentBlitter(), Blitter::MoveTo(), PALETTE_WIDTH, Blitter::SetPixel(), and ZOOM_LVL_NORMAL.
Referenced by NWidgetMatrix::Draw(), NWidgetBackground::Draw(), NWidgetViewport::Draw(), NWidgetScrollbar::Draw(), NWidgetLeaf::Draw(), NWidgetToolbarContainer::Draw(), CargoesField::Draw(), DrawArrowButtons(), DrawCaption(), NetworkContentListWindow::DrawDetails(), DrawDropDownButton(), DrawFrame(), DrawFrameRect(), BaseGraphWindow::DrawGraph(), VehicleGroupWindow::DrawGroupInfo(), CargoesField::DrawHorConnection(), SmallMapWindow::DrawHorizMapIndicator(), DrawHorizontalScrollbar(), DrawLayoutLine(), DrawMatrix(), NetworkContentListWindow::DrawMatrix(), NetworkGameWindow::DrawServerLine(), SmallMapWindow::DrawSmallMap(), DrawTrainDetails(), LinkGraphOverlay::DrawVertex(), DrawVerticalScrollbar(), SmallMapWindow::DrawVertMapIndicator(), BootstrapBackground::DrawWidget(), LinkGraphLegendWindow::DrawWidget(), SmallMapWindow::DrawWidget(), BuildObjectWindow::DrawWidget(), DropdownWindow::DrawWidget(), CompanyFinancesWindow::DrawWidget(), SaveLoadWindow::DrawWidget(), NewsWindow::DrawWidget(), BuildAirportWindow::DrawWidget(), MusicTrackSelectionWindow::DrawWidget(), BuildIndustryWindow::DrawWidget(), CompanyStationsWindow::DrawWidget(), VehicleGroupWindow::DrawWidget(), MusicWindow::DrawWidget(), TooltipsWindow::DrawWidget(), NewGRFWindow::DrawWidget(), PaymentRatesGraphWindow::DrawWidget(), OrdersWindow::DrawWidget(), BuildRailStationWindow::DrawWidget(), AIDebugWindow::DrawWidget(), PerformanceRatingDetailWindow::DrawWidget(), CompanyInfrastructureWindow::DrawWidget(), NetworkClientListPopupWindow::DrawWidget(), BuildRailWaypointWindow::DrawWidget(), NetworkClientListWindow::DrawWidget(), SavePresetWindow::DrawWidget(), Window::DrawWidgets(), DrawYearColumn(), HighlightDragPosition(), NetworkDrawChatMessage(), IConsoleWindow::OnPaint(), and StationsWndShowStationRating().
|
inlinestatic |
Align parameters of a line to the given DPI and check simple clipping.
dpi | Screen parameters to align with. |
x | X coordinate of first point. |
y | Y coordinate of first point. |
x2 | X coordinate of second point. |
y2 | Y coordinate of second point. |
width | Width of the line. |
void LoadStringWidthTable | ( | bool | monospace | ) |
Initialize _stringwidth_table cache.
monospace | Whether to load the monospace cache or the normal fonts. |
Definition at line 1130 of file gfx.cpp.
References _stringwidth_table, FS_BEGIN, FS_MONO, GetGlyphWidth(), and ReInitAllWindows().
Referenced by AfterLoadGame(), CheckForMissingGlyphs(), GenerateWorld(), GameOptionsWindow::OnDropdownSelect(), and ReloadNewGRFData().
void SetAnimatedMouseCursor | ( | const AnimCursor * | table | ) |
Assign an animation to the cursor.
table | Array of animation states. |
Definition at line 1630 of file gfx.cpp.
References CursorVars::animate_cur, CursorVars::animate_list, PalSpriteID::pal, and CursorVars::sprite_seq.
Referenced by SetObjectToPlace().
|
static |
Set the colour remap to be for the given colour.
colour | the new colour of the remap. |
Definition at line 313 of file gfx.cpp.
References _string_colourmap, _string_colourremap, TC_IS_PALETTE_COLOUR, and TC_NO_SHADE.
Referenced by DrawCharCentered(), DrawLayoutLine(), DrawSprite(), and DrawSpriteViewport().
Switch cursor to different sprite.
Definition at line 1566 of file gfx.cpp.
References PalSpriteID::pal, PalSpriteID::sprite, CursorVars::sprite_count, CursorVars::sprite_pos, CursorVars::sprite_seq, and UpdateCursorSize().
Referenced by SetMouseCursor().
void SetDirtyBlocks | ( | int | left, |
int | top, | ||
int | right, | ||
int | bottom | ||
) |
This function extends the internal _invalid_rect rectangle as it now contains the rectangle defined by the given parameters.
Note the point (0,0) is top left.
left | The left edge of the rectangle |
top | The top edge of the rectangle |
right | The right edge of the rectangle |
bottom | The bottom edge of the rectangle |
AddDirtyBlock
as it neither set a dirty rect nor add several dirty rects although the function name is in plural. (Progman) Definition at line 1418 of file gfx.cpp.
Referenced by MarkViewportDirty(), MarkWholeScreenDirty(), PositionWindow(), NWidgetBase::SetDirty(), Window::SetDirty(), and NewsWindow::SetWindowTop().
Assign a single non-animated sprite to the cursor.
Definition at line 1617 of file gfx.cpp.
References CursorVars::animate_timeout, and SetCursorSprite().
Referenced by SetMouseCursorBusy(), and SetObjectToPlace().
void SetMouseCursorBusy | ( | bool | busy | ) |
Set or unset the ZZZ cursor.
busy | Whether to show the ZZZ cursor. |
Definition at line 1602 of file gfx.cpp.
References SetMouseCursor(), SPR_CURSOR_MOUSE, PalSpriteID::sprite, and CursorVars::sprite_seq.
Referenced by CleanupGeneration(), GenerateProgressWindow::OnClick(), SaveFileDone(), and SaveFileStart().
void UpdateCursorSize | ( | ) |
Update cursor dimension.
Called when changing cursor sprite resp. reloading grfs.
Definition at line 1530 of file gfx.cpp.
References CursorVars::dirty, GB(), GetMaxSpriteID(), Sprite::height, lengthof, max(), PalSpriteID::sprite, CursorVars::sprite_count, CursorVars::sprite_pos, CursorVars::sprite_seq, SPRITE_WIDTH, ST_NORMAL, CursorVars::total_size, UnScaleGUI(), Sprite::width, Sprite::x_offs, and Sprite::y_offs.
Referenced by GfxLoadSprites(), GameOptionsWindow::OnDropdownSelect(), SetCursorSprite(), and SetMouseCursorVehicle().
|
static |
Cache containing width of often used characters.
Definition at line 51 of file gfx.cpp.
Referenced by GetCharacterWidth(), and LoadStringWidthTable().