X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiFontMetrics.h;h=3f50dfe5d29902d0516e2b27c3ca2ec32fa4d4e4;hb=28be7d552f62cc02fa86d7f79201d089bfb2d7b5;hp=a2c57ecc8bdf3d25282ca7e756e5671e073a9489;hpb=8539f756ed20092fc6ea6273e77299963f6cc7b6;p=lyx.git diff --git a/src/frontends/qt4/GuiFontMetrics.h b/src/frontends/qt4/GuiFontMetrics.h index a2c57ecc8b..3f50dfe5d2 100644 --- a/src/frontends/qt4/GuiFontMetrics.h +++ b/src/frontends/qt4/GuiFontMetrics.h @@ -14,12 +14,15 @@ #include "frontends/FontMetrics.h" +#include "support/Cache.h" #include "support/docstring.h" -#include - +#include #include #include +#include + +#include namespace lyx { namespace frontend { @@ -34,6 +37,10 @@ public: virtual int maxAscent() const; virtual int maxDescent() const; 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; virtual int ascent(char_type c) const; virtual int descent(char_type c) const; @@ -41,6 +48,9 @@ public: virtual int rbearing(char_type c) 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, @@ -48,22 +58,39 @@ public: 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: + + std::pair breakAt_helper(docstring const & s, int const x, + bool const rtl, bool const force) const; + + /// The font + QFont font_; + /// Metrics on the font QFontMetrics metrics_; /// Cache of char widths mutable QHash width_cache_; - /// Cache of string widths - /// FIXME Try to use a QHash (this requires to define qHash(docstring)) - mutable std::map strwidth_cache_; + mutable Cache strwidth_cache_; + /// Cache for breakAt + mutable Cache> breakat_cache_; + /// Cache for QTextLayout + mutable Cache> qtextlayout_cache_; struct AscendDescend { int ascent; @@ -76,6 +103,7 @@ private: /// Cache of char right bearings mutable QHash rbearing_cache_; + }; } // namespace frontend