00001 #ifndef GUI_TEXT_HPP 00002 #define GUI_TEXT_HPP 00003 00004 #include <utils.hpp> 00005 #include "gui_color.hpp" 00006 00007 #include <utils_string.hpp> 00008 #include <utils_refptr.hpp> 00009 #include <map> 00010 #include <array> 00011 00012 namespace gui 00013 { 00014 class manager; 00015 class font; 00016 class sprite; 00017 struct vertex; 00018 00020 00022 class text 00023 { 00024 public : 00025 00027 struct line 00028 { 00029 utils::ustring sCaption; 00030 float fWidth; 00031 }; 00032 00033 enum color_action 00034 { 00035 COLOR_ACTION_NONE, 00036 COLOR_ACTION_SET, 00037 COLOR_ACTION_RESET 00038 }; 00039 00041 struct format 00042 { 00043 format() : mColorAction(COLOR_ACTION_NONE) 00044 {} 00045 00046 color mColor; 00047 color_action mColorAction; 00048 }; 00049 00050 enum alignment 00051 { 00052 ALIGN_LEFT, 00053 ALIGN_CENTER, 00054 ALIGN_RIGHT 00055 }; 00056 00057 enum vertical_alignment 00058 { 00059 ALIGN_TOP, 00060 ALIGN_MIDDLE, 00061 ALIGN_BOTTOM 00062 }; 00063 00065 struct letter 00066 { 00067 float fX1, fY1; 00068 float fX2, fY2; 00069 float fU1, fV1; 00070 float fU2, fV2; 00071 color mColor; 00072 bool bNoRender; 00073 }; 00074 00076 00079 text(manager* pManager, const std::string& sFileName, float fSize); 00080 00082 ~text(); 00083 00085 00087 const std::string& get_font_name() const; 00088 00090 00092 float get_font_size() const; 00093 00095 00097 float get_line_height() const; 00098 00100 00106 void set_text(const std::string& sText); 00107 00109 00112 const std::string& get_text() const; 00113 00115 00118 const utils::ustring& get_unicode_text() const; 00119 00121 00124 void set_color(const color& mColor, bool bForceColor = false); 00125 00127 00129 const color& get_color() const; 00130 00132 00136 void set_dimensions(float fW, float fH); 00137 00139 00142 void set_box_width(float fBoxW); 00143 00145 00148 void set_box_height(float fBoxH); 00149 00151 00154 float get_width(); 00155 00157 00160 float get_height(); 00161 00163 00165 float get_box_width() const; 00166 00168 00170 float get_box_height() const; 00171 00173 00176 float get_text_width() const; 00177 00179 00182 float get_string_width(const std::string& sString) const; 00183 00185 00188 float get_string_width(const utils::ustring& sString) const; 00189 00191 00194 float get_character_width(uint uiChar) const; 00195 00197 00205 float get_character_kerning(uint uiChar1, uint uiChar2) const; 00206 00208 00211 float get_text_height() const; 00212 00214 00216 void set_alignment(const alignment& mAlign); 00217 00219 00221 void set_vertical_alignment(const vertical_alignment& mVertAlign); 00222 00224 00226 const alignment& get_alignment() const; 00227 00229 00231 const vertical_alignment& get_vertical_alignment() const; 00232 00234 00238 void set_tracking(float fTracking); 00239 00241 00243 float get_tracking() const; 00244 00246 00251 void set_line_spacing(float fLineSpacing); 00252 00254 00256 float get_line_spacing() const; 00257 00259 00267 void set_remove_starting_spaces(bool bRemoveStartingSpaces); 00268 00270 00272 bool get_remove_starting_spaces() const; 00273 00275 00280 void enable_word_wrap(bool bWrap, bool bAddEllipsis); 00281 00283 00285 bool is_word_wrap_enabled() const; 00286 00288 00294 void enable_formatting(bool bFormatting); 00295 00297 00302 void render(float fX, float fY); 00303 00305 00309 void update(); 00310 00312 00315 const std::vector<letter>& get_letter_cache(); 00316 00318 00321 utils::refptr<sprite> create_sprite(uint uiChar) const; 00322 00323 private : 00324 00325 void update_lines_(); 00326 void update_cache_(); 00327 00328 manager* pManager_; 00329 00330 std::string sFileName_; 00331 00332 bool bReady_; 00333 float fSize_; 00334 float fTracking_; 00335 float fLineSpacing_; 00336 float fSpaceWidth_; 00337 bool bRemoveStartingSpaces_; 00338 bool bWordWrap_; 00339 bool bAddEllipsis_; 00340 color mColor_; 00341 bool bForceColor_; 00342 bool bFormattingEnabled_; 00343 float fW_, fH_; 00344 float fX_, fY_; 00345 float fBoxW_, fBoxH_; 00346 00347 std::string sText_; 00348 utils::ustring sUnicodeText_; 00349 alignment mAlign_; 00350 vertical_alignment mVertAlign_; 00351 00352 std::vector<line> lLineList_; 00353 std::map<uint, format> lFormatList_; 00354 00355 bool bUpdateCache_; 00356 std::vector<letter> lLetterCache_; 00357 00358 bool bUpdateQuads_; 00359 std::vector<std::array<vertex,4>> lQuadList_; 00360 utils::refptr<sprite> pSprite_; 00361 00362 utils::refptr<font> pFont_; 00363 }; 00364 } 00365 00366 #endif