X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiFontMetrics.h;h=3f50dfe5d29902d0516e2b27c3ca2ec32fa4d4e4;hb=28be7d552f62cc02fa86d7f79201d089bfb2d7b5;hp=a3b680d66166c25f848a36f3e4578b89e24302fd;hpb=88d16356f2926d57b261355857ccaac4c10b678e;p=lyx.git diff --git a/src/frontends/qt4/GuiFontMetrics.h b/src/frontends/qt4/GuiFontMetrics.h index a3b680d661..3f50dfe5d2 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,85 +9,104 @@ * 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/Cache.h" #include "support/docstring.h" +#include #include #include +#include -#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); virtual ~GuiFontMetrics() {} 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 em() const; + virtual int lineWidth() const; + virtual int underlinePos() const; + virtual int strikeoutPos() 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 int pos2x(docstring const & s, int pos, bool rtl, double ws) const; + virtual int x2pos(docstring const & s, int & x, bool rtl, double ws) const; + virtual bool breakAt(docstring & s, int & x, bool rtl, bool force) 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(docstring const & str, + const int offset, int & width, int & ascent, int & descent) const; + + int countExpanders(docstring const & str) const; /// int width(QString const & str) const; + /// Return a pointer to a cached QTextLayout object + std::shared_ptr + getTextLayout(docstring const & s, bool const rtl, + double const wordspacing) const; + private: - int smallcapsWidth(QString const & s) const; - /// Metrics on the font - QFontMetrics metrics_; - QFontMetrics smallcaps_metrics_; + std::pair breakAt_helper(docstring const & s, int const x, + bool const rtl, bool const force) const; - bool smallcaps_shape_; + /// The font + QFont font_; -#ifdef USE_LYX_FONTCACHE + /// Metrics on the font + QFontMetrics metrics_; /// Cache of char widths mutable QHash width_cache_; + /// Cache of string widths + mutable Cache strwidth_cache_; + /// Cache for breakAt + mutable Cache> breakat_cache_; + /// Cache for QTextLayout + mutable Cache> qtextlayout_cache_; struct AscendDescend { - short int ascent; - short int descent; + int ascent; + int descent; }; /// Cache of char ascends and descends mutable QHash metrics_cache_; /// fill in \c metrics_cache_ at specified value. - void fillMetricsCache(char_type) const; + AscendDescend const fillMetricsCache(char_type) const; + + /// Cache of char right bearings + mutable QHash rbearing_cache_; -#endif // USE_LYX_FONTCACHE }; } // namespace frontend } // namespace lyx -#endif // QT4_FONT_METRICS_H +#endif // GUI_FONT_METRICS_H