Text class. More...
#include <text.hpp>
Public Types | |
enum | FONT_STYLE { STYLE_NORMAL = 0 , STYLE_BOLD = 1 , STYLE_ITALIC = 2 , STYLE_UNDERLINE = 4 } |
Public Member Functions | |
pango_text () | |
pango_text (const pango_text &)=delete | |
pango_text & | operator= (const pango_text &)=delete |
texture | render_and_get_texture () |
Returns the cached texture, or creates a new one otherwise. More... | |
point | get_size () |
Returns the size of the text, in drawing coordinates. More... | |
bool | is_truncated () const |
Has the text been truncated? This happens if it exceeds max width or height. More... | |
unsigned | insert_text (const unsigned offset, const std::string &text, const bool use_markup=false) |
Inserts UTF-8 text. More... | |
int | get_max_glyph_height () const |
Returns the maximum glyph height of a font, in drawing coordinates. More... | |
point | get_cursor_position (const unsigned column, const unsigned line=0) const |
Gets the location for the cursor, in drawing coordinates. More... | |
point | get_cursor_pos_from_index (const unsigned offset) const |
Gets the location for the cursor, in drawing coordinates. More... | |
std::size_t | get_maximum_length () const |
Get maximum length. More... | |
std::string | get_token (const point &position, const char *delimiters=" \n\r\t") const |
Gets the largest collection of characters, including the token at position, and not including any characters from the delimiters set. More... | |
std::string | get_link (const point &position) const |
Checks if position points to a character in a link in the text, returns it if so, empty string otherwise. More... | |
point | get_column_line (const point &position) const |
Gets the column of line of the character at the position. More... | |
int | xy_to_index (const point &position) const |
std::vector< std::string > | get_lines () const |
Retrieves a list of strings with contents for each rendered line. More... | |
PangoLayoutLine * | get_line (int index) |
Get a specific line from the pango layout. More... | |
int | get_line_num_from_offset (const unsigned offset) |
Given a byte index, find out at which line the corresponding character is located. More... | |
unsigned | get_lines_count () const |
Get number of lines in the text. More... | |
std::size_t | get_length () const |
Gets the length of the text in bytes. More... | |
bool | set_text (const std::string &text, const bool markedup) |
Sets the text to render. More... | |
const std::string & | text () const |
pango_text & | set_family_class (font::family_class fclass) |
pango_text & | set_font_size (unsigned font_size) |
pango_text & | set_font_style (const FONT_STYLE font_style) |
pango_text & | set_foreground_color (const color_t &color) |
pango_text & | set_maximum_width (int width) |
pango_text & | set_characters_per_line (const unsigned characters_per_line) |
pango_text & | set_maximum_height (int height, bool multiline) |
pango_text & | set_ellipse_mode (const PangoEllipsizeMode ellipse_mode) |
pango_text & | set_alignment (const PangoAlignment alignment) |
pango_text & | set_maximum_length (const std::size_t maximum_length) |
bool | link_aware () const |
pango_text & | set_link_aware (bool b) |
pango_text & | set_link_color (const color_t &color) |
pango_text & | set_add_outline (bool do_add) |
void | add_attribute_weight (const unsigned start_offset, const unsigned end_offset, PangoWeight weight) |
Add pango font weight attribute to a specific portion of text. More... | |
void | add_attribute_style (const unsigned start_offset, const unsigned end_offset, PangoStyle style) |
Add pango font style attribute to a specific portion of text, used to set italic/oblique text. More... | |
void | add_attribute_underline (const unsigned start_offset, const unsigned end_offset, PangoUnderline underline) |
Add pango underline attribute to a specific portion of text. More... | |
void | add_attribute_fg_color (const unsigned start_offset, const unsigned end_offset, const color_t &color) |
Add pango fg color attribute to a specific portion of text. More... | |
void | add_attribute_bg_color (const unsigned start_offset, const unsigned end_offset, const color_t &color) |
Mark a specific portion of text for highlighting. More... | |
void | add_attribute_size (const unsigned start_offset, const unsigned end_offset, int size) |
Add pango font size attribute to a specific portion of text. More... | |
void | add_attribute_font_family (const unsigned start_offset, const unsigned end_offset, std::string family) |
Add pango font family attribute to a specific portion of text. More... | |
void | clear_attribute_list () |
Clears all attributes from the global attribute list. More... | |
Private Member Functions | |
texture | render_texture (const SDL_Rect &viewport) |
Wrapper around render_surface which sets texture::w() and texture::h() in the same way that render_and_get_texture does. More... | |
surface | render_surface (const SDL_Rect &viewport) |
Returns the rendered text. More... | |
void | recalculate () const |
Recalculates the text layout. More... | |
PangoRectangle | calculate_size (PangoLayout &layout) const |
Calculates surface size. More... | |
surface | create_surface () |
Equivalent to create_surface(viewport), where the viewport's top-left is at (0,0) and the area is large enough to contain the full text. More... | |
surface | create_surface (const SDL_Rect &viewport) |
Renders the text to a surface that uses surface_buffer_ as its data store, the buffer will be allocated or reallocated as necessary. More... | |
void | render (PangoLayout &layout, const SDL_Rect &viewport, const unsigned stride) |
This is part of create_surface(viewport). More... | |
bool | set_markup (std::string_view text, PangoLayout &layout) |
Sets the markup'ed text. More... | |
bool | validate_markup (std::string_view text, char **raw_text, std::string &semi_escaped) const |
std::string | format_links (std::string_view text) const |
Replaces all instances of URLs in a given string with formatted links and returns the result. More... | |
texture | with_draw_scale (const texture &t) const |
Adjust a texture's draw-width and height according to pixel scale. More... | |
int | to_draw_scale (int s) const |
Scale the given render-space size to draw-space, rounding up. More... | |
point | to_draw_scale (const point &p) const |
Scale the given render-space point to draw-space, rounding up. More... | |
void | update_pixel_scale () |
Update pixel scale, if necessary. More... | |
Static Private Member Functions | |
static void | copy_layout_properties (PangoLayout &src, PangoLayout &dst) |
Private Attributes | |
std::unique_ptr< PangoContext, std::function< void(void *)> > | context_ |
std::unique_ptr< PangoLayout, std::function< void(void *)> > | layout_ |
PangoRectangle | rect_ |
std::string | text_ |
The text to draw (stored as UTF-8). More... | |
bool | markedup_text_ |
Does the text contain pango markup? If different render routines must be used. More... | |
bool | link_aware_ |
Are hyperlinks in the text marked-up, and will get_link return them. More... | |
color_t | link_color_ |
The color to render links in. More... | |
font::family_class | font_class_ |
The font family class used. More... | |
unsigned | font_size_ |
The font size to draw. More... | |
FONT_STYLE | font_style_ |
The style of the font, this is an orred mask of the font flags. More... | |
color_t | foreground_color_ |
The foreground color. More... | |
bool | add_outline_ |
Whether to add an outline effect. More... | |
int | maximum_width_ |
The maximum width of the text. More... | |
unsigned | characters_per_line_ |
The number of characters per line. More... | |
int | maximum_height_ |
The maximum height of the text. More... | |
PangoEllipsizeMode | ellipse_mode_ |
The way too long text is shown depends on this mode. More... | |
PangoAlignment | alignment_ |
The alignment of the text. More... | |
std::size_t | maximum_length_ |
The maximum length of the text. More... | |
bool | calculation_dirty_ |
The text has two dirty states: More... | |
std::size_t | length_ |
Length of the text. More... | |
unsigned | attribute_start_offset_ |
unsigned | attribute_end_offset_ |
color_t | highlight_color_ |
PangoAttrList * | global_attribute_list_ |
Global pango attribute list. More... | |
int | pixel_scale_ |
The pixel scale, used to render high-DPI text. More... | |
std::vector< uint8_t > | surface_buffer_ |
Buffer to store the image on. More... | |
Text class.
This class represents text which is rendered using Pango.
It takes text, as a utf-8 std::string, plus formatting options including font and color. It provides a surface object which holds the rendered text.
Besides this, it can do some additional calculations using the font layout.
It can take an index into the text, and convert it to pixel coordinates, so that if we want to draw a cursor in an editbox, we know where to draw it.
It can also take a pixel coordinate with respect to the text layout, and translate it back to an index into the original text. This is useful if the user clicks on the text, and we want to know where to move the cursor.
The get_token method takes a pixel coordinate, which we assume represents a click position, and gets the corresponding "token" from the string. The default token delimiters are whitespace " \n\r\t". So, this returns the "word" that the user clicked on.
Finally, the get_link method represents special support for hyperlinks in text. A token "looks like a link" if it begins "http://" or "https://". If a text has link_aware enabled, then any such token is rendered with an underline and in a special color, see link_color
. The get_link method calls get_token and further checks if the clicked token looks like a link.
This class stores the text to draw and uses pango with the cairo backend to render the text. See http://pango.org for more info.
font::pango_text::pango_text | ( | ) |
Definition at line 66 of file text.cpp.
References alignment_, context_, ellipse_mode_, font::get_line_spacing_factor(), global_attribute_list_, and layout_.
|
delete |
void font::pango_text::add_attribute_bg_color | ( | const unsigned | start_offset, |
const unsigned | end_offset, | ||
const color_t & | color | ||
) |
Mark a specific portion of text for highlighting.
Used for selection box. BGColor is set in set_text(), this just marks the area to be colored. Markup not used because the user may enter their own markup or special characters
start_offset | Byte index of the cursor where selection/highlight starts |
end_offset | Byte index of the cursor where selection/highlight ends |
color | Highlight/Background color |
Definition at line 458 of file text.cpp.
References attribute_end_offset_, attribute_start_offset_, DBG_GUI_D, global_attribute_list_, and highlight_color_.
Referenced by gui2::text_shape::draw(), and gui2::text_box_base::set_highlight_area().
void font::pango_text::add_attribute_fg_color | ( | const unsigned | start_offset, |
const unsigned | end_offset, | ||
const color_t & | color | ||
) |
Add pango fg color attribute to a specific portion of text.
This changes the foreground color of the corresponding part of the text.
start_offset | Byte index of the cursor where color change starts |
end_offset | Byte index of the cursor where color change ends |
color | Foreground color |
Definition at line 419 of file text.cpp.
References attribute_end_offset_, attribute_start_offset_, DBG_GUI_D, and global_attribute_list_.
Referenced by gui2::text_shape::draw().
void font::pango_text::add_attribute_font_family | ( | const unsigned | start_offset, |
const unsigned | end_offset, | ||
std::string | family | ||
) |
Add pango font family attribute to a specific portion of text.
This changes the font family of the corresponding part of the text.
start_offset | Byte index of the cursor where size change starts |
end_offset | Byte index of the cursor where size change ends |
family | The font family |
Definition at line 439 of file text.cpp.
References attribute_end_offset_, attribute_start_offset_, DBG_GUI_D, and global_attribute_list_.
Referenced by gui2::text_shape::draw().
void font::pango_text::add_attribute_size | ( | const unsigned | start_offset, |
const unsigned | end_offset, | ||
int | size | ||
) |
Add pango font size attribute to a specific portion of text.
This changes the font size of the corresponding part of the text.
start_offset | Byte index of the cursor where size change starts |
end_offset | Byte index of the cursor where size change ends |
size | Font size |
Definition at line 332 of file text.cpp.
References attribute_end_offset_, attribute_start_offset_, DBG_GUI_D, prefs::font_scaled(), prefs::get(), global_attribute_list_, pixel_scale_, and utf8::size().
Referenced by gui2::text_shape::draw().
void font::pango_text::add_attribute_style | ( | const unsigned | start_offset, |
const unsigned | end_offset, | ||
PangoStyle | style | ||
) |
Add pango font style attribute to a specific portion of text, used to set italic/oblique text.
start_offset | Byte index of the cursor where font style change starts |
end_offset | Byte index of the cursor where font style change ends |
style | Pango font style (normal/italic/oblique) |
Definition at line 369 of file text.cpp.
References attribute_end_offset_, attribute_start_offset_, DBG_GUI_D, and global_attribute_list_.
Referenced by gui2::text_shape::draw().
void font::pango_text::add_attribute_underline | ( | const unsigned | start_offset, |
const unsigned | end_offset, | ||
PangoUnderline | underline | ||
) |
Add pango underline attribute to a specific portion of text.
This adds an underline to the corresponding part of the text.
start_offset | Byte index of the cursor where underline starts |
end_offset | Byte index of the cursor where underline change ends |
underline | Pango underline style |
Definition at line 388 of file text.cpp.
References attribute_end_offset_, attribute_start_offset_, DBG_GUI_D, and global_attribute_list_.
Referenced by gui2::text_shape::draw().
void font::pango_text::add_attribute_weight | ( | const unsigned | start_offset, |
const unsigned | end_offset, | ||
PangoWeight | weight | ||
) |
Add pango font weight attribute to a specific portion of text.
This changes the font weight of the corresponding part of the text.
start_offset | Byte index of the cursor where font weight change starts |
end_offset | Byte index of the cursor where font weight change ends |
weight | Pango font weight |
Definition at line 351 of file text.cpp.
References attribute_end_offset_, attribute_start_offset_, DBG_GUI_D, and global_attribute_list_.
Referenced by gui2::text_shape::draw().
|
private |
Calculates surface size.
Definition at line 742 of file text.cpp.
References characters_per_line_, context_, DBG_GUI_L, gui2::debug_truncate(), f, font_class_, font_size_, font_style_, font::get_font_families(), draw_manager::layout(), markedup_text_, maximum_height_, maximum_width_, utf8::size(), STYLE_UNDERLINE, text_, and w.
Referenced by recalculate().
void font::pango_text::clear_attribute_list | ( | ) |
Clears all attributes from the global attribute list.
Definition at line 479 of file text.cpp.
References global_attribute_list_, and layout_.
Referenced by gui2::text_shape::draw().
|
staticprivate |
|
private |
Equivalent to create_surface(viewport), where the viewport's top-left is at (0,0) and the area is large enough to contain the full text.
The top-left of the viewport will be at (0,0), regardless of the values of x and y in the rect_ member variable. If the x or y co-ordinates are non-zero, then x columns and y rows of blank space are included in the amount of memory allocated.
Definition at line 932 of file text.cpp.
References rect_.
Referenced by render_and_get_texture(), and render_surface().
|
private |
Renders the text to a surface that uses surface_buffer_ as its data store, the buffer will be allocated or reallocated as necessary.
The surface's origin will correspond to viewport.x and viewport.y, the width and height will be at least viewport.w and viewport.h (although they may be larger).
viewport | The area to draw, which can be a subset of the text. This rectangle's coordinates use render-space's scale. |
Definition at line 937 of file text.cpp.
References DBG_FT, font::from_cairo_format(), layout_, render(), and surface_buffer_.
|
private |
Replaces all instances of URLs in a given string with formatted links and returns the result.
Definition at line 1015 of file text.cpp.
References font::format_as_link(), link_color_, font::looks_like_url(), and text().
Referenced by set_markup().
Gets the column of line of the character at the position.
position | The pixel position in the text area. |
Definition at line 286 of file text.cpp.
References get_cursor_position(), i, utf8::index(), layout_, draw::line(), draw::point(), and recalculate().
Referenced by gui2::text_box_base::get_column_line().
point font::pango_text::get_cursor_pos_from_index | ( | const unsigned | offset | ) | const |
Gets the location for the cursor, in drawing coordinates.
offset | The column byte index of the cursor. |
Definition at line 225 of file text.cpp.
References layout_, draw::rect(), and to_draw_scale().
Referenced by gui2::text_box_base::get_cursor_pos_from_index(), and get_cursor_position().
point font::pango_text::get_cursor_position | ( | const unsigned | column, |
const unsigned | line = 0 |
||
) | const |
Gets the location for the cursor, in drawing coordinates.
column | The column character index of the cursor. |
line | The line character index of the cursor. |
Definition at line 185 of file text.cpp.
References get_cursor_pos_from_index(), i, layout_, draw::line(), draw::point(), and recalculate().
Referenced by get_column_line(), gui2::text_box_base::get_cursor_position(), and gui2::rich_label::get_xy_from_offset().
|
inline |
Gets the length of the text in bytes.
The text set is UTF-8 so the length of the string might not be the length of the text.
Definition at line 273 of file text.hpp.
References length_.
Referenced by gui2::text_box_base::get_length(), gui2::text_box_base::goto_end_of_data(), gui2::text_box_base::handle_editing(), gui2::text_box_base::handle_key_delete(), gui2::text_box_base::handle_key_right_arrow(), gui2::text_box_base::set_cursor(), gui2::text_box_base::set_maximum_length(), gui2::text_box_base::set_selection(), and gui2::text_box_base::set_value().
PangoLayoutLine * font::pango_text::get_line | ( | int | index | ) |
Get a specific line from the pango layout.
index | the line number of the line to retrieve |
Definition at line 1124 of file text.cpp.
References utf8::index(), and layout_.
Referenced by gui2::text_box_base::get_line().
int font::pango_text::get_line_num_from_offset | ( | const unsigned | offset | ) |
Given a byte index, find out at which line the corresponding character is located.
offset | the byte index |
Definition at line 1129 of file text.cpp.
References layout_.
Referenced by gui2::text_box_base::get_line_number().
std::vector< std::string > font::pango_text::get_lines | ( | ) | const |
Retrieves a list of strings with contents for each rendered line.
This method is not const because it requires rendering the text.
Definition at line 1098 of file text.cpp.
References i, draw_manager::layout(), layout_, and recalculate().
Referenced by gui2::text_box_base::get_lines().
|
inline |
Get number of lines in the text.
Definition at line 265 of file text.hpp.
References layout_.
Referenced by gui2::text_box_base::get_lines_count().
std::string font::pango_text::get_link | ( | const point & | position | ) | const |
Checks if position points to a character in a link in the text, returns it if so, empty string otherwise.
Link-awareness must be enabled to get results.
position | The pixel position in the text area. |
Definition at line 271 of file text.cpp.
References get_token(), link_aware_, and font::looks_like_url().
Referenced by gui2::styled_widget::get_label_link().
int font::pango_text::get_max_glyph_height | ( | ) | const |
Returns the maximum glyph height of a font, in drawing coordinates.
Definition at line 687 of file text.cpp.
References context_, f, font_class_, font_size_, font_style_, font::get_font_families(), and pixel_scale_.
Referenced by font::get_max_height().
std::size_t font::pango_text::get_maximum_length | ( | ) | const |
Get maximum length.
Definition at line 234 of file text.cpp.
References maximum_length_.
point font::pango_text::get_size | ( | ) |
Returns the size of the text, in drawing coordinates.
Definition at line 150 of file text.cpp.
References recalculate(), rect_, to_draw_scale(), and update_pixel_scale().
Referenced by gui2::text_shape::draw(), display::draw_report(), and gui2::styled_widget::get_best_text_size().
std::string font::pango_text::get_token | ( | const point & | position, |
const char * | delimiters = " \n\r\t" |
||
) | const |
Gets the largest collection of characters, including the token at position, and not including any characters from the delimiters set.
position | The pixel position in the text area. |
delimiters |
Definition at line 239 of file text.cpp.
References d, utf8::index(), layout_, and recalculate().
Referenced by gui2::styled_widget::get_label_token(), and get_link().
unsigned font::pango_text::insert_text | ( | const unsigned | offset, |
const std::string & | text, | ||
const bool | use_markup = false |
||
) |
Inserts UTF-8 text.
offset | The position to insert the text. |
text | The UTF-8 text to insert. |
use_markup | If the text is formatted or not. |
Definition at line 165 of file text.cpp.
References utf8::index(), utf8::insert(), length_, maximum_length_, set_text(), utf8::size(), text(), and text_.
Referenced by gui2::text_box_base::handle_editing(), gui2::text_box_base::insert_char(), and gui2::text_box_base::paste_selection().
bool font::pango_text::is_truncated | ( | ) | const |
Has the text been truncated? This happens if it exceeds max width or height.
Definition at line 158 of file text.cpp.
References layout_, and recalculate().
Referenced by gui2::styled_widget::get_best_text_size(), and gui2::styled_widget::place().
|
inline |
Definition at line 313 of file text.hpp.
References link_aware_.
|
delete |
|
private |
Recalculates the text layout.
Definition at line 728 of file text.cpp.
References calculate_size(), calculation_dirty_, layout_, and rect_.
Referenced by get_column_line(), get_cursor_position(), get_lines(), get_size(), get_token(), is_truncated(), render_and_get_texture(), render_surface(), and xy_to_index().
|
private |
This is part of create_surface(viewport).
The separation is a legacy from workarounds to the size limits of cairo_surface_t.
Definition at line 881 of file text.cpp.
References add_outline_, foreground_color_, draw_manager::layout(), and surface_buffer_.
Referenced by create_surface().
texture font::pango_text::render_and_get_texture | ( | ) |
Returns the cached texture, or creates a new one otherwise.
texture::w() and texture::h() methods will return the expected width and height of the texture in draw space. This may differ from the real value returned by texture::get_info().
In almost all cases, use w() and h() to get the size of the rendered text for drawing.
Definition at line 118 of file text.cpp.
References create_surface(), recalculate(), update_pixel_scale(), and with_draw_scale().
Referenced by font::floating_label::create_texture(), gui2::text_shape::draw(), and display::draw_report().
|
private |
Returns the rendered text.
The viewport rect is interpreted at the scale of render-space, not drawing-space. This function has only been made private to preserve the drawing-space encapsulation.
viewport | Only this area needs to be drawn - the returned surface's origin will correspond to viewport.x and viewport.y, the width and height will be at least viewport.w and viewport.h (although they may be larger). |
Definition at line 125 of file text.cpp.
References create_surface(), recalculate(), and update_pixel_scale().
Referenced by render_texture().
|
private |
Wrapper around render_surface which sets texture::w() and texture::h() in the same way that render_and_get_texture does.
The viewport rect is interpreted at the scale of render-space, not drawing-space. This function has only been made private to preserve the drawing-space encapsulation.
Definition at line 113 of file text.cpp.
References render_surface(), and with_draw_scale().
pango_text & font::pango_text::set_add_outline | ( | bool | do_add | ) |
Definition at line 677 of file text.cpp.
References add_outline_.
Referenced by font::floating_label::create_texture(), and gui2::text_shape::draw().
pango_text & font::pango_text::set_alignment | ( | const PangoAlignment | alignment | ) |
Definition at line 635 of file text.cpp.
References alignment_, and layout_.
Referenced by font::floating_label::create_texture(), gui2::text_shape::draw(), display::draw_report(), and gui2::styled_widget::get_best_text_size().
pango_text & font::pango_text::set_characters_per_line | ( | const unsigned | characters_per_line | ) |
Definition at line 579 of file text.cpp.
References calculation_dirty_, and characters_per_line_.
Referenced by font::floating_label::create_texture(), gui2::text_shape::draw(), display::draw_report(), and gui2::styled_widget::get_best_text_size().
pango_text & font::pango_text::set_ellipse_mode | ( | const PangoEllipsizeMode | ellipse_mode | ) |
Definition at line 615 of file text.cpp.
References calculation_dirty_, ellipse_mode_, and layout_.
Referenced by font::floating_label::create_texture(), gui2::text_shape::draw(), display::draw_report(), gui2::styled_widget::get_best_text_size(), and gui2::text_box_base::set_ellipse_mode().
pango_text & font::pango_text::set_family_class | ( | font::family_class | fclass | ) |
Definition at line 522 of file text.cpp.
References calculation_dirty_, and font_class_.
Referenced by font::floating_label::create_texture(), gui2::text_shape::draw(), display::draw_report(), gui2::styled_widget::get_best_text_size(), font::get_max_height(), and gui2::text_box_base::set_font_family().
pango_text & font::pango_text::set_font_size | ( | unsigned | font_size | ) |
Definition at line 532 of file text.cpp.
References calculation_dirty_, prefs::font_scaled(), font_size_, prefs::get(), and pixel_scale_.
Referenced by font::floating_label::create_texture(), gui2::text_shape::draw(), display::draw_report(), gui2::styled_widget::get_best_text_size(), font::get_max_height(), and gui2::text_box_base::set_font_size().
pango_text & font::pango_text::set_font_style | ( | const FONT_STYLE | font_style | ) |
Definition at line 544 of file text.cpp.
References calculation_dirty_, and font_style_.
Referenced by font::floating_label::create_texture(), gui2::text_shape::draw(), display::draw_report(), gui2::styled_widget::get_best_text_size(), font::get_max_height(), and gui2::text_box_base::set_font_style().
pango_text & font::pango_text::set_foreground_color | ( | const color_t & | color | ) |
Definition at line 554 of file text.cpp.
References foreground_color_.
Referenced by font::floating_label::create_texture(), gui2::text_shape::draw(), and display::draw_report().
pango_text & font::pango_text::set_link_aware | ( | bool | b | ) |
Definition at line 658 of file text.cpp.
References b, calculation_dirty_, and link_aware_.
Referenced by font::floating_label::create_texture(), gui2::text_shape::draw(), display::draw_report(), and gui2::styled_widget::get_best_text_size().
pango_text & font::pango_text::set_link_color | ( | const color_t & | color | ) |
Definition at line 667 of file text.cpp.
References calculation_dirty_, and link_color_.
Referenced by gui2::text_shape::draw(), and gui2::styled_widget::get_best_text_size().
|
private |
Sets the markup'ed text.
It tries to set the text as markup. If the markup is invalid it will try a bit harder to recover from the errors and still set the markup.
text | The text to set as markup. |
layout |
Definition at line 982 of file text.cpp.
References format_links(), global_attribute_list_, draw_manager::layout(), link_aware_, text(), and validate_markup().
Referenced by set_text().
pango_text & font::pango_text::set_maximum_height | ( | int | height, |
bool | multiline | ||
) |
Definition at line 590 of file text.cpp.
References calculation_dirty_, layout_, maximum_height_, and pixel_scale_.
Referenced by font::floating_label::create_texture(), gui2::text_shape::draw(), display::draw_report(), and gui2::text_box_base::set_maximum_height().
pango_text & font::pango_text::set_maximum_length | ( | const std::size_t | maximum_length | ) |
Definition at line 645 of file text.cpp.
References length_, maximum_length_, set_text(), text_, and utf8::truncate().
Referenced by gui2::text_box_base::set_maximum_length().
pango_text & font::pango_text::set_maximum_width | ( | int | width | ) |
Definition at line 563 of file text.cpp.
References calculation_dirty_, maximum_width_, and pixel_scale_.
Referenced by font::floating_label::create_texture(), gui2::text_shape::draw(), display::draw_report(), gui2::styled_widget::get_best_text_size(), and gui2::text_box_base::set_maximum_width().
bool font::pango_text::set_text | ( | const std::string & | text, |
const bool | markedup | ||
) |
Sets the text to render.
text | The text to render. |
markedup | Should the text be rendered with pango markup. If the markup is invalid it's rendered as text without markup. |
Definition at line 484 of file text.cpp.
References calculation_dirty_, context_, ERR_GUI_L, global_attribute_list_, layout_, length_, markedup_text_, set_markup(), text(), and text_.
Referenced by font::floating_label::create_texture(), gui2::text_shape::draw(), display::draw_report(), gui2::styled_widget::get_best_text_size(), gui2::text_box_base::handle_editing(), insert_text(), gui2::styled_widget::set_label(), set_maximum_length(), and gui2::text_box_base::set_value().
|
inline |
Definition at line 291 of file text.hpp.
References text_.
Referenced by gui2::text_box_base::copy_selection(), format_links(), gui2::text_box_base::get_composition_length(), gui2::text_box_base::get_value(), gui2::text_box_base::handle_editing(), insert_text(), set_markup(), set_text(), gui2::text_box_base::set_value(), gui2::text_box_base::text(), and validate_markup().
Scale the given render-space point to draw-space, rounding up.
Definition at line 144 of file text.cpp.
References p, and to_draw_scale().
|
private |
Scale the given render-space size to draw-space, rounding up.
Definition at line 139 of file text.cpp.
References i, and pixel_scale_.
Referenced by get_cursor_pos_from_index(), get_size(), to_draw_scale(), and with_draw_scale().
|
private |
Update pixel scale, if necessary.
Definition at line 707 of file text.cpp.
References calculation_dirty_, font_size_, video::get_pixel_scale(), maximum_height_, maximum_width_, and pixel_scale_.
Referenced by get_size(), render_and_get_texture(), and render_surface().
|
private |
Definition at line 1053 of file text.cpp.
References font::semi_escape_text(), text(), and WRN_GUI_L.
Referenced by set_markup().
Adjust a texture's draw-width and height according to pixel scale.
As fonts are rendered at output-scale, we need to do this just before returning the rendered texture. These attributes are stored as part of the returned texture object.
Definition at line 132 of file text.cpp.
References texture::set_draw_size(), t, and to_draw_scale().
Referenced by render_and_get_texture(), and render_texture().
int font::pango_text::xy_to_index | ( | const point & | position | ) | const |
Definition at line 320 of file text.cpp.
References utf8::index(), layout_, and recalculate().
Referenced by gui2::rich_label::get_offset_from_xy().
|
private |
Whether to add an outline effect.
Definition at line 428 of file text.hpp.
Referenced by render(), and set_add_outline().
|
private |
The alignment of the text.
Definition at line 470 of file text.hpp.
Referenced by pango_text(), and set_alignment().
|
private |
Definition at line 488 of file text.hpp.
Referenced by add_attribute_bg_color(), add_attribute_fg_color(), add_attribute_font_family(), add_attribute_size(), add_attribute_style(), add_attribute_underline(), and add_attribute_weight().
|
private |
Definition at line 487 of file text.hpp.
Referenced by add_attribute_bg_color(), add_attribute_fg_color(), add_attribute_font_family(), add_attribute_size(), add_attribute_style(), add_attribute_underline(), and add_attribute_weight().
|
mutableprivate |
The text has two dirty states:
Definition at line 482 of file text.hpp.
Referenced by recalculate(), set_characters_per_line(), set_ellipse_mode(), set_family_class(), set_font_size(), set_font_style(), set_link_aware(), set_link_color(), set_maximum_height(), set_maximum_width(), set_text(), and update_pixel_scale().
|
private |
The number of characters per line.
This can be used as an alternative of maximum_width_. The user can select a number of characters on a line for wrapping. When the value is non-zero it determines the maximum width based on the average character width.
If both maximum_width_ and characters_per_line_ are set the minimum of the two will be the maximum.
Definition at line 456 of file text.hpp.
Referenced by calculate_size(), and set_characters_per_line().
|
private |
Definition at line 393 of file text.hpp.
Referenced by calculate_size(), get_max_glyph_height(), pango_text(), and set_text().
|
private |
The way too long text is shown depends on this mode.
Definition at line 467 of file text.hpp.
Referenced by pango_text(), and set_ellipse_mode().
|
private |
The font family class used.
Definition at line 416 of file text.hpp.
Referenced by calculate_size(), get_max_glyph_height(), and set_family_class().
|
private |
The font size to draw.
Definition at line 419 of file text.hpp.
Referenced by calculate_size(), get_max_glyph_height(), set_font_size(), and update_pixel_scale().
|
private |
The style of the font, this is an orred mask of the font flags.
Definition at line 422 of file text.hpp.
Referenced by calculate_size(), get_max_glyph_height(), and set_font_style().
|
private |
The foreground color.
Definition at line 425 of file text.hpp.
Referenced by render(), and set_foreground_color().
|
private |
Global pango attribute list.
All attributes in this list will be applied one by one to the text
Definition at line 495 of file text.hpp.
Referenced by add_attribute_bg_color(), add_attribute_fg_color(), add_attribute_font_family(), add_attribute_size(), add_attribute_style(), add_attribute_underline(), add_attribute_weight(), clear_attribute_list(), pango_text(), set_markup(), and set_text().
|
private |
Definition at line 489 of file text.hpp.
Referenced by add_attribute_bg_color().
|
private |
Definition at line 394 of file text.hpp.
Referenced by clear_attribute_list(), create_surface(), get_column_line(), get_cursor_pos_from_index(), get_cursor_position(), get_line(), get_line_num_from_offset(), get_lines(), get_lines_count(), get_token(), is_truncated(), pango_text(), recalculate(), set_alignment(), set_ellipse_mode(), set_maximum_height(), set_text(), and xy_to_index().
|
mutableprivate |
Length of the text.
Definition at line 485 of file text.hpp.
Referenced by get_length(), insert_text(), set_maximum_length(), and set_text().
|
private |
Are hyperlinks in the text marked-up, and will get_link return them.
Definition at line 404 of file text.hpp.
Referenced by get_link(), link_aware(), set_link_aware(), and set_markup().
|
private |
The color to render links in.
Links are formatted using pango <span> as follows:
<span underline="single" color=" + link_color_ + ">
Definition at line 413 of file text.hpp.
Referenced by format_links(), and set_link_color().
|
private |
Does the text contain pango markup? If different render routines must be used.
Definition at line 401 of file text.hpp.
Referenced by calculate_size(), and set_text().
|
private |
The maximum height of the text.
Values less or equal to 0 mean no maximum and are internally stored as -1, since that's the value pango uses for it.
Definition at line 464 of file text.hpp.
Referenced by calculate_size(), set_maximum_height(), and update_pixel_scale().
|
private |
The maximum length of the text.
Definition at line 473 of file text.hpp.
Referenced by get_maximum_length(), insert_text(), and set_maximum_length().
|
private |
The maximum width of the text.
Values less or equal to 0 mean no maximum and are internally stored as -1, since that's the value pango uses for it.
See characters_per_line_.
Definition at line 438 of file text.hpp.
Referenced by calculate_size(), set_maximum_width(), and update_pixel_scale().
|
private |
The pixel scale, used to render high-DPI text.
Definition at line 498 of file text.hpp.
Referenced by add_attribute_size(), get_max_glyph_height(), set_font_size(), set_maximum_height(), set_maximum_width(), to_draw_scale(), and update_pixel_scale().
|
mutableprivate |
Definition at line 395 of file text.hpp.
Referenced by create_surface(), get_size(), and recalculate().
|
mutableprivate |
Buffer to store the image on.
We use a cairo surface to draw on this buffer and then use the buffer as data source for the SDL_Surface. This means the buffer needs to be stored in the object, since SDL_Surface doesn't own its buffer.
Definition at line 543 of file text.hpp.
Referenced by create_surface(), and render().
|
private |
The text to draw (stored as UTF-8).
Definition at line 398 of file text.hpp.
Referenced by calculate_size(), insert_text(), set_maximum_length(), set_text(), and text().