X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiFontMetrics.h;h=e2e168a9ff9464deea2cde79841c4d4c38ab354a;hb=591d47a64b8ba894be5c793472397374d0496984;hp=924c0e0cd61de3851a1fb5f4c0297a521de64581;hpb=1372f311d339d0656ab66423a32c8e4bbe5ec598;p=lyx.git diff --git a/src/frontends/qt4/GuiFontMetrics.h b/src/frontends/qt4/GuiFontMetrics.h index 924c0e0cd6..e2e168a9ff 100644 --- a/src/frontends/qt4/GuiFontMetrics.h +++ b/src/frontends/qt4/GuiFontMetrics.h @@ -17,12 +17,12 @@ #include "support/docstring.h" #include +#include // Starting with version 3.1.0, Qt/X11 does its own caching of // character width, so it is not necessary to provide ours. #if defined(Q_WS_MACX) || defined(Q_WS_WIN32) #define USE_LYX_FONTCACHE -#include #endif namespace lyx { @@ -39,17 +39,24 @@ public: virtual int maxAscent() const; virtual int maxDescent() const; - virtual int ascent(lyx::char_type c) const; - int descent(lyx::char_type c) const; - virtual int lbearing(lyx::char_type c) const; - virtual int rbearing(lyx::char_type c) const; - virtual int width(lyx::char_type const * s, size_t n) const; - virtual int signedWidth(lyx::docstring const & s) const; - virtual void rectText(lyx::docstring const & str, +#ifndef USE_LYX_FONTCACHE + virtual int width(char_type c) const { + return metrics_.width(QChar(static_cast(c))); + } +#else + virtual int width(char_type c) const; +#endif + virtual int ascent(char_type c) const; + virtual int descent(char_type c) const; + virtual int lbearing(char_type c) const; + virtual int rbearing(char_type c) const; + virtual int width(char_type const * s, size_t n) const; + virtual int signedWidth(docstring const & s) const; + virtual void rectText(docstring const & str, int & width, int & ascent, int & descent) const; - virtual void buttonText(lyx::docstring const & str, + virtual void buttonText(docstring const & str, int & width, int & ascent, int & descent) const; @@ -65,16 +72,24 @@ private: bool smallcaps_shape_; -#ifndef USE_LYX_FONTCACHE - /// Return pixel width for the given unicode char - int width(unsigned short val) const { return metrics_.width(QChar(val)); } - -#else - /// Return pixel width for the given unicode char - int width(unsigned short val) const; +#ifdef USE_LYX_FONTCACHE /// Cache of char widths - mutable int widthcache_[65536]; + /** This cache adds 20Mo of memory to the LyX executable when + * loading UserGuide.lyx which contains a good number of fonts. If + * this turns out to be too much, we can switch to a \c QHash based + * solution. + **/ + mutable QHash width_cache_; + + struct AscendDescend { + short int ascent; + short int descent; + }; + mutable QHash metrics_cache_; + /// fill in \c metrics_cache_ at specified value. + void fillMetricsCache(char_type) const; + #endif // USE_LYX_FONTCACHE };