X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiFontMetrics.h;h=e2e168a9ff9464deea2cde79841c4d4c38ab354a;hb=591d47a64b8ba894be5c793472397374d0496984;hp=44ee9c38205a06fc89c837f80a89ce44b6c90047;hpb=00edcc582ff7cfe9cbbc8f7458ea29649bd642d9;p=lyx.git diff --git a/src/frontends/qt4/GuiFontMetrics.h b/src/frontends/qt4/GuiFontMetrics.h index 44ee9c3820..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,20 +39,29 @@ 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; + /// + int width(QString const & str) const; private: int smallcapsWidth(QString const & s) const; @@ -63,17 +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)); } +#ifdef USE_LYX_FONTCACHE -#else - /// Return pixel width for the given unicode char - int width(unsigned short val) const; - - typedef std::map WidthCache; /// Cache of char widths - mutable WidthCache widthcache; + /** 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 };