From: Abdelrazak Younes Date: Mon, 4 Dec 2006 10:09:22 +0000 (+0000) Subject: * enable font metrics cache for all platforms. X-Git-Tag: 1.6.10~11653 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=e318e0e4ef0019c3b3a15b2eb68870da6801a333;p=features.git * enable font metrics cache for all platforms. * introduce defaultDimension() and dimension() in preparation of Dimension class cleanup. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@16165 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/frontends/FontMetrics.h b/src/frontends/FontMetrics.h index 20c7808f9f..89890c1ba0 100644 --- a/src/frontends/FontMetrics.h +++ b/src/frontends/FontMetrics.h @@ -47,6 +47,8 @@ namespace lyx { +class Dimension; + namespace frontend { class FontMetrics @@ -58,6 +60,9 @@ public: virtual int maxAscent() const = 0; /// return the maximum descent of the font virtual int maxDescent() const = 0; + /// return default dimension of the font. + /// \warning \c width is set to zero. + virtual Dimension const defaultDimension() const = 0; /// return the width of the char in the font virtual int width(char_type c) const = 0; /// return the ascent of the char in the font @@ -72,6 +77,8 @@ public: virtual int width(char_type const * s, size_t n) const = 0; /// FIXME ?? virtual int signedWidth(docstring const & s) const = 0; + /// return char dimension for the font. + virtual Dimension const dimension(char_type c) const = 0; /** * fill in width,ascent,descent with the values for the * given string in the font. diff --git a/src/frontends/qt4/GuiFontMetrics.C b/src/frontends/qt4/GuiFontMetrics.C index ecfe48722e..0b0dbaf085 100644 --- a/src/frontends/qt4/GuiFontMetrics.C +++ b/src/frontends/qt4/GuiFontMetrics.C @@ -16,6 +16,7 @@ #include "qt_helpers.h" #include "language.h" +#include "dimension.h" #include "support/unicode.h" @@ -155,22 +156,18 @@ void GuiFontMetrics::buttonText(docstring const & str, descent = metrics_.descent() + d; } -#ifndef USE_LYX_FONTCACHE -int GuiFontMetrics::ascent(char_type c) const +Dimension const GuiFontMetrics::defaultDimension() const { - QRect const & r = metrics_.boundingRect(ucs4_to_qchar(c)); - return -r.top(); + return Dimension(maxAscent(), maxDescent(), 0); } -int GuiFontMetrics::descent(char_type c) const +Dimension const GuiFontMetrics::dimension(char_type c) const { - QRect const & r = metrics_.boundingRect(ucs4_to_qchar(c)); - return r.bottom() + 1; + return Dimension(ascent(c), descent(c), width(c)); } -#else void GuiFontMetrics::fillMetricsCache(char_type c) const { @@ -209,7 +206,5 @@ int GuiFontMetrics::descent(char_type c) const return metrics_cache_.value(c).descent; } -#endif - } // frontend } // lyx diff --git a/src/frontends/qt4/GuiFontMetrics.h b/src/frontends/qt4/GuiFontMetrics.h index a3b680d661..bb320dcce1 100644 --- a/src/frontends/qt4/GuiFontMetrics.h +++ b/src/frontends/qt4/GuiFontMetrics.h @@ -19,9 +19,6 @@ #include #include -#if defined(Q_WS_MACX) || defined(Q_WS_WIN32) -#define USE_LYX_FONTCACHE -#endif namespace lyx { namespace frontend { @@ -37,19 +34,16 @@ public: virtual int maxAscent() const; virtual int maxDescent() const; -#ifndef USE_LYX_FONTCACHE - virtual int width(char_type c) const { - return metrics_.width(QChar(static_cast(c))); - } -#else + virtual Dimension const defaultDimension() const; 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 Dimension const dimension(char_type c) const; + virtual void rectText(docstring const & str, int & width, int & ascent, @@ -70,8 +64,6 @@ private: bool smallcaps_shape_; -#ifdef USE_LYX_FONTCACHE - /// Cache of char widths mutable QHash width_cache_; @@ -83,8 +75,6 @@ private: mutable QHash metrics_cache_; /// fill in \c metrics_cache_ at specified value. void fillMetricsCache(char_type) const; - -#endif // USE_LYX_FONTCACHE }; } // namespace frontend