X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiFontMetrics.h;h=4f83c3807a96c288f1ed5b459fb8a51cc22570cd;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=f7360506ec1aa4b2ab080b9a3271db11e7f75099;hpb=52dc269faecec157ba3e8f037a3fdfbc12300a83;p=lyx.git diff --git a/src/frontends/qt4/GuiFontMetrics.h b/src/frontends/qt4/GuiFontMetrics.h index f7360506ec..4f83c3807a 100644 --- a/src/frontends/qt4/GuiFontMetrics.h +++ b/src/frontends/qt4/GuiFontMetrics.h @@ -1,6 +1,6 @@ // -*- C++ -*- /** - * \file FontMetrics.h + * \file GuiFontMetrics.h * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * @@ -9,38 +9,22 @@ * Full author contact details are available in file CREDITS. */ -#ifndef QT4_FONT_METRICS_H -#define QT4_FONT_METRICS_H +#ifndef GUI_FONT_METRICS_H +#define GUI_FONT_METRICS_H #include "frontends/FontMetrics.h" #include "support/docstring.h" #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 -#endif +#include namespace lyx { namespace frontend { -size_t const MaxCharType = 65536; - -struct CharMetrics -{ - short int width; - short int ascent; - short int descent; -}; - - -class GuiFontMetrics: public FontMetrics +class GuiFontMetrics : public FontMetrics { public: - GuiFontMetrics(QFont const & font); GuiFontMetrics(QFont const & font, QFont const & smallcaps_font); @@ -48,19 +32,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 width(docstring const & s) 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, @@ -73,7 +54,7 @@ public: int width(QString const & str) const; private: - int smallcapsWidth(QString const & s) const; + int smallcapsWidth(char_type c) const; /// Metrics on the font QFontMetrics metrics_; @@ -81,20 +62,23 @@ private: bool smallcaps_shape_; -#ifdef USE_LYX_FONTCACHE - /// fill in \c metrics_cache_ at specified value. - void fillCache(unsigned short val) const; /// Cache of char widths - /** 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 CharMetrics metrics_cache_[MaxCharType]; -#endif // USE_LYX_FONTCACHE + mutable QHash width_cache_; + + struct AscendDescend { + short int ascent; + short int descent; + }; + /// Cache of char ascends and descends + mutable QHash metrics_cache_; + /// fill in \c metrics_cache_ at specified value. + AscendDescend const fillMetricsCache(char_type) const; + + /// Cache of char right bearings + mutable QHash rbearing_cache_; }; } // namespace frontend } // namespace lyx -#endif // QT4_FONT_METRICS_H +#endif // GUI_FONT_METRICS_H