mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-29 21:05:12 +00:00
Cache the value of GuiFontMetrics::lbearing().
This seems to be necessary on windows, where math editing can get very slow. Note that other methods like rbearing already use a cache. In the future all these caches for single characters shall be unified.
This commit is contained in:
parent
b6ab5cd962
commit
d3979e798c
@ -148,20 +148,29 @@ int GuiFontMetrics::strikeoutPos() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int GuiFontMetrics::lbearing(char_type c) const
|
namespace {
|
||||||
{
|
int const outOfLimitMetric = -10000;
|
||||||
if (!is_utf16(c))
|
|
||||||
// FIXME: QFontMetrics::leftBearing does not support the
|
|
||||||
// full unicode range. Once it does, we could use:
|
|
||||||
//return metrics_.leftBearing(toqstr(docstring(1, c)));
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return metrics_.leftBearing(ucs4_to_qchar(c));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
int GuiFontMetrics::lbearing(char_type c) const
|
||||||
int const outOfLimitMetric = -10000;
|
{
|
||||||
|
int value = lbearing_cache_.value(c, outOfLimitMetric);
|
||||||
|
if (value != outOfLimitMetric)
|
||||||
|
return value;
|
||||||
|
|
||||||
|
if (is_utf16(c))
|
||||||
|
value = metrics_.leftBearing(ucs4_to_qchar(c));
|
||||||
|
else {
|
||||||
|
// FIXME: QFontMetrics::leftBearing does not support the
|
||||||
|
// full unicode range. Once it does, we could use:
|
||||||
|
// metrics_.leftBearing(toqstr(docstring(1, c)));
|
||||||
|
value = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
lbearing_cache_.insert(c, value);
|
||||||
|
|
||||||
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -103,6 +103,8 @@ private:
|
|||||||
/// fill in \c metrics_cache_ at specified value.
|
/// fill in \c metrics_cache_ at specified value.
|
||||||
AscendDescend const fillMetricsCache(char_type) const;
|
AscendDescend const fillMetricsCache(char_type) const;
|
||||||
|
|
||||||
|
/// Cache of char leftt bearings
|
||||||
|
mutable QHash<char_type, int> lbearing_cache_;
|
||||||
/// Cache of char right bearings
|
/// Cache of char right bearings
|
||||||
mutable QHash<char_type, int> rbearing_cache_;
|
mutable QHash<char_type, int> rbearing_cache_;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user