X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiFontMetrics.h;h=4f83c3807a96c288f1ed5b459fb8a51cc22570cd;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=194c8f828d33df7a25ce99fedbb6036a4fa10e79;hpb=56be946751c66eca49b8b7861111901754f2ca59;p=lyx.git diff --git a/src/frontends/qt4/GuiFontMetrics.h b/src/frontends/qt4/GuiFontMetrics.h index 194c8f828d..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,28 +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 { -class GuiFontMetrics: public FontMetrics +class GuiFontMetrics : public FontMetrics { public: - GuiFontMetrics(QFont const & font); GuiFontMetrics(QFont const & font, QFont const & smallcaps_font); @@ -38,17 +32,21 @@ 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, + virtual Dimension const defaultDimension() const; + virtual int width(char_type c) const; + 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(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, int & descent) const; - virtual void buttonText(lyx::docstring const & str, + virtual void buttonText(docstring const & str, int & width, int & ascent, int & descent) const; @@ -56,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_; @@ -64,20 +62,23 @@ 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; - /// Cache of char widths - mutable int widthcache_[65536]; -#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