diff options
Diffstat (limited to 'src/FbTk')
-rw-r--r-- | src/FbTk/Font.cc | 58 |
1 files changed, 30 insertions, 28 deletions
diff --git a/src/FbTk/Font.cc b/src/FbTk/Font.cc index 5665993..6ac7d74 100644 --- a/src/FbTk/Font.cc +++ b/src/FbTk/Font.cc | |||
@@ -19,7 +19,7 @@ | |||
19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
20 | // DEALINGS IN THE SOFTWARE. | 20 | // DEALINGS IN THE SOFTWARE. |
21 | 21 | ||
22 | //$Id: Font.cc,v 1.19 2004/09/01 00:09:03 akir Exp $ | 22 | //$Id: Font.cc,v 1.20 2004/09/03 14:17:47 akir Exp $ |
23 | 23 | ||
24 | 24 | ||
25 | #include "StringUtil.hh" | 25 | #include "StringUtil.hh" |
@@ -357,42 +357,44 @@ bool Font::load(const std::string &name) { | |||
357 | // everything after ':' is a fontoption | 357 | // everything after ':' is a fontoption |
358 | // -> extract 'halo' and 'shadow' and | 358 | // -> extract 'halo' and 'shadow' and |
359 | // load remaining fname | 359 | // load remaining fname |
360 | std::list< std::string > tokens; | ||
361 | size_t sep= name.find_first_of(':'); | 360 | size_t sep= name.find_first_of(':'); |
362 | std::string fname; | ||
363 | 361 | ||
364 | if ( sep != std::string::npos ) { | 362 | if ( sep != std::string::npos ) { |
363 | |||
364 | std::list< std::string > tokens; | ||
365 | std::string fname; | ||
366 | |||
365 | fname= std::string(name.c_str(), sep + 1); | 367 | fname= std::string(name.c_str(), sep + 1); |
366 | FbTk::StringUtil::stringtok(tokens, name.substr(sep + 1, name.length()), ","); | 368 | FbTk::StringUtil::stringtok(tokens, name.substr(sep + 1, name.length()), ","); |
369 | |||
370 | tokens.unique(); | ||
371 | bool firstone= true; | ||
372 | std::list< std::string >::const_iterator token; | ||
373 | |||
374 | // check tokens and extract extraoptions for halo and shadow | ||
375 | for( token= tokens.begin(); token != tokens.end(); token++ ) { | ||
376 | if ( (*token).find("halo",0) != std::string::npos ) { | ||
377 | m_halo= true; | ||
378 | extract_halo_options(*token, m_halo_color); | ||
379 | } | ||
380 | else if ( (*token).find("shadow", 0) != std::string::npos ) { | ||
381 | m_shadow= true; | ||
382 | extract_shadow_options(*token, m_shadow_color, m_shadow_offx, m_shadow_offy); | ||
367 | } | 383 | } |
368 | else | 384 | else { |
369 | fname= name; | 385 | if ( !firstone ) |
370 | 386 | fname+= ", "; | |
371 | tokens.unique(); | 387 | else |
372 | bool firstone= true; | 388 | firstone= false; |
373 | std::list< std::string >::const_iterator token; | 389 | fname= fname + *token; |
374 | |||
375 | // check tokens and extract extraoptions for halo and shadow | ||
376 | for( token= tokens.begin(); token != tokens.end(); token++ ) { | ||
377 | if ( (*token).find("halo",0) != std::string::npos ) { | ||
378 | m_halo= true; | ||
379 | extract_halo_options(*token, m_halo_color); | ||
380 | } | ||
381 | else if ( (*token).find("shadow", 0) != std::string::npos ) { | ||
382 | m_shadow= true; | ||
383 | extract_shadow_options(*token, m_shadow_color, m_shadow_offx, m_shadow_offy); | ||
384 | } | 390 | } |
385 | else { | ||
386 | if ( !firstone ) | ||
387 | fname+= ", "; | ||
388 | else | ||
389 | firstone= false; | ||
390 | fname= fname + *token; | ||
391 | } | 391 | } |
392 | } | ||
393 | 392 | ||
394 | m_fontstr = fname; | 393 | m_fontstr = fname; |
395 | return m_fontimp->load(fname.c_str()); | 394 | } else |
395 | m_fontstr = name; | ||
396 | |||
397 | return m_fontimp->load(m_fontstr.c_str()); | ||
396 | } | 398 | } |
397 | 399 | ||
398 | unsigned int Font::textWidth(const char * const text, unsigned int size) const { | 400 | unsigned int Font::textWidth(const char * const text, unsigned int size) const { |