X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiFontMetrics.C;h=ecfe48722e07ae3c5bf8d75683f58db5147b9d11;hb=591d47a64b8ba894be5c793472397374d0496984;hp=a10381096fdf4683098d373359ce2251ce58b01a;hpb=8f98ec35e41b8cbeda39dd95aa812c3a6839c152;p=lyx.git diff --git a/src/frontends/qt4/GuiFontMetrics.C b/src/frontends/qt4/GuiFontMetrics.C index a10381096f..ecfe48722e 100644 --- a/src/frontends/qt4/GuiFontMetrics.C +++ b/src/frontends/qt4/GuiFontMetrics.C @@ -24,17 +24,9 @@ using std::string; namespace lyx { namespace frontend { - GuiFontMetrics::GuiFontMetrics(QFont const & font) : metrics_(font), smallcaps_metrics_(font), smallcaps_shape_(false) { -#ifdef USE_LYX_FONTCACHE - for (int i = 0; i != 65536; ++i) { - metrics_cache_[i].width = -1000; - metrics_cache_[i].ascent = -1000; - metrics_cache_[i].descent = -1000; - } -#endif } @@ -180,44 +172,41 @@ int GuiFontMetrics::descent(char_type c) const #else -void GuiFontMetrics::fillCache(unsigned short val) const +void GuiFontMetrics::fillMetricsCache(char_type c) const { - QRect const & r = metrics_.boundingRect(QChar(val)); - metrics_cache_[val].descent = r.bottom() + 1; - metrics_cache_[val].ascent = -r.top(); + QRect const & r = metrics_.boundingRect(ucs4_to_qchar(c)); + AscendDescend ad = { -r.top(), r.bottom() + 1}; // We could as well compute the width but this is not really // needed for now as it is done directly in width() below. - //metrics_cache_[val].width = metrics_.width(QChar(val)); + metrics_cache_.insert(c, ad); } int GuiFontMetrics::width(char_type c) const { - unsigned short val = static_cast(c); - if (metrics_cache_[val].width == -1000) - metrics_cache_[val].width = metrics_.width(QChar(val)); + if (!width_cache_.contains(c)) { + width_cache_.insert(c, metrics_.width(ucs4_to_qchar(c))); + } - return metrics_cache_[val].width; + return width_cache_.value(c); } int GuiFontMetrics::ascent(char_type c) const { - unsigned short val = static_cast(c); - if (metrics_cache_[val].ascent == -1000) - fillCache(val); + if (!metrics_cache_.contains(c)) + fillMetricsCache(c); - return metrics_cache_[val].ascent; + return metrics_cache_.value(c).ascent; } int GuiFontMetrics::descent(char_type c) const { - unsigned short val = static_cast(c); - if (metrics_cache_[val].descent == -1000) - fillCache(val); + if (!metrics_cache_.contains(c)) + fillMetricsCache(c); - return metrics_cache_[val].descent; + return metrics_cache_.value(c).descent; } #endif