1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
/*
* Copyright (C) 2006-2012 by the Widelands Development Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
#ifndef WL_GRAPHIC_TEXT_LAYOUT_H
#define WL_GRAPHIC_TEXT_LAYOUT_H
#include <string>
#include <unicode/uchar.h>
#include "graphic/align.h"
#include "graphic/color.h"
#include "graphic/font.h"
#include "graphic/font_handler1.h"
#include "graphic/image.h"
#include "graphic/text/font_set.h"
#include "graphic/text_constants.h"
/**
* This function replaces some HTML entities in strings, e.g. %nbsp;.
* It is used by the renderers after the tags have been parsed.
*/
void replace_entities(std::string* text);
/**
* Returns the exact width of the text rendered as editorfont for the given font size.
* This function is inefficient; only call when we need the exact width.
*/
uint32_t text_width(const std::string& text, int ptsize);
/**
* Returns the exact height of the text rendered as editorfont for the given font size.
* This function is inefficient; only call when we need the exact height.
*/
uint32_t text_height(const std::string& text, int ptsize);
/**
* Checks it the given string is RichText or not. Does not do validity checking.
*/
inline bool is_richtext(const std::string& text) {
return text.compare(0, 3, "<rt") == 0;
}
/**
* Escapes reserved characters for Richtext.
*/
std::string richtext_escape(const std::string& given_text);
/**
* Convenience functions to convert simple text into a valid block
* of rich text which can be rendered.
*/
std::string as_uifont(const std::string&,
int ptsize = UI_FONT_SIZE_SMALL,
const RGBColor& clr = UI_FONT_CLR_FG,
UI::FontSet::Face face = UI::FontSet::Face::kSans);
// Same as as_aligned, but with the condensed font preselected.
std::string as_condensed(const std::string& text,
UI::Align align = UI::Align::kLeft,
int ptsize = UI_FONT_SIZE_SMALL,
const RGBColor& clr = UI_FONT_CLR_FG);
std::string as_editorfont(const std::string& text,
int ptsize = UI_FONT_SIZE_SMALL,
const RGBColor& clr = UI_FONT_CLR_FG);
std::string as_aligned(const std::string& txt,
UI::Align align,
int ptsize = UI_FONT_SIZE_SMALL,
const RGBColor& clr = UI_FONT_CLR_FG,
UI::FontSet::Face face = UI::FontSet::Face::kSans);
std::string as_tooltip(const std::string&);
std::string as_waresinfo(const std::string&);
std::string as_game_tip(const std::string&);
/**
* Render 'text' as ui_font. If 'width' > 0 and the rendered image is too
* wide, it will first use the condensed font face and then make the text
* smaller until it fits 'width'. The resulting font size will not go below
* 'kMinimumFontSize'.
*/
const Image* autofit_ui_text(const std::string& text,
int width = 0,
RGBColor color = UI_FONT_CLR_FG,
int fontsize = UI_FONT_SIZE_SMALL);
namespace UI {
/**
* Text style combines font with other characteristics like color
* and style (italics, bold).
*/
// TODO(GunChleoc): This struct will disappear with the old font handler
struct TextStyle {
TextStyle();
static TextStyle makebold(Font* font, RGBColor fg) {
TextStyle ts;
ts.font = font;
ts.bold = true;
ts.fg = fg;
return ts;
}
uint32_t calc_bare_width(const std::string& text) const;
uint32_t calc_width_for_wrapping(const UChar& c) const;
uint32_t calc_width_for_wrapping(const std::string& text) const;
void calc_bare_height_heuristic(const std::string& text, int32_t& miny, int32_t& maxy) const;
void setup() const;
Font* font;
RGBColor fg;
bool bold : 1;
bool italics : 1;
bool underline : 1;
bool operator==(const TextStyle& o) const {
return font == o.font && fg == o.fg && bold == o.bold && italics == o.italics &&
underline == o.underline;
}
bool operator!=(const TextStyle& o) const {
return !(*this == o);
}
};
} // namespace UI
#endif // end of include guard: WL_GRAPHIC_TEXT_LAYOUT_H
|