X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2FFontMetrics.h;h=c02606c4384f3536c0759b13503bbc4413e30022;hb=b7f6b979d0f889f08e735f35378bb20ba3788b4b;hp=89890c1ba005ff9e7c3b6dab00cb7c41158752ce;hpb=e318e0e4ef0019c3b3a15b2eb68870da6801a333;p=lyx.git diff --git a/src/frontends/FontMetrics.h b/src/frontends/FontMetrics.h index 89890c1ba0..c02606c438 100644 --- a/src/frontends/FontMetrics.h +++ b/src/frontends/FontMetrics.h @@ -14,7 +14,7 @@ #ifndef FONT_METRICS_H #define FONT_METRICS_H -#include "support/docstring.h" +#include "support/strfwd.h" /** * A class holding helper functions for determining @@ -63,6 +63,17 @@ public: /// return default dimension of the font. /// \warning \c width is set to zero. virtual Dimension const defaultDimension() const = 0; + /// return the em size + virtual int em() const = 0; + /// return the width of a line for underlining + virtual int lineWidth() const = 0; + /// return the distance from the base line to where an underline + /// should be drawn. + virtual int underlinePos() const = 0; + /// return the distance from the base line to where the strike out line + /// should be drawn. + virtual int strikeoutPos() 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 @@ -74,9 +85,34 @@ public: /// return the right bearing of the char in the font virtual int rbearing(char_type c) const = 0; /// return the width of the string in the font - virtual int width(char_type const * s, size_t n) const = 0; + virtual int width(docstring const & s) const = 0; /// FIXME ?? virtual int signedWidth(docstring const & s) const = 0; + /** + * return the x offset of a position in the string. The + * direction of the string is forced, and the returned value + * is from the left edge of the word, not from the start of the string. + * \param rtl is true for right-to-left layout + * \param ws is the amount of extra inter-word space applied text justication. + */ + virtual int pos2x(docstring const & s, int pos, bool rtl, double ws) const = 0; + /** + * return the position in the string for a given x offset. The + * direction of the string is forced, and the returned value + * is from the left edge of the word, not from the start of the string. + * the offset x is updated to match the closest position in the string. + * \param rtl is true for right-to-left layout + * \param ws is the amount of extra inter-word space applied text justication. + */ + virtual int x2pos(docstring const & s, int & x, bool rtl, double ws) const = 0; + /** + * Break string at width at most x. + * \return true if successful + * \param rtl is true for right-to-left layout + * \param force is false for breaking at word separator, true for + * arbitrary position. + */ + virtual bool breakAt(docstring & s, int & x, bool rtl, bool force) const = 0; /// return char dimension for the font. virtual Dimension const dimension(char_type c) const = 0; /** @@ -89,43 +125,39 @@ public: int & descent) const = 0; /** * fill in width,ascent,descent with the values for the - * given string in the font for a button. + * given string in the font for a button with given offset. */ virtual void buttonText(docstring const & str, + const int offset, int & width, int & ascent, int & descent) const = 0; /// return the maximum descent of the font - inline int maxHeight() const { - return maxAscent() + maxDescent(); - } + inline int maxHeight() const { return maxAscent() + maxDescent(); } /// return the descent of the char in the font - inline int height(char_type c) const - { - return ascent(c) + descent(c); - } + inline int height(char_type c) const { return ascent(c) + descent(c); } /// return the inner width of the char in the font inline int center(char_type c) const { return (rbearing(c) - lbearing(c)) / 2; } - /// return the width of the string in the font - inline int width(docstring const & s) const - { - return s.empty() ? 0 : width(s.data(), s.length()); - } + /// return the number of expanding characters taken into account for + /// increased inter-word spacing during justification + virtual int countExpanders(docstring const & str) const = 0; }; } // namespace frontend -class LyXFont; +class Font; +class FontInfo; -/// Implementation is in Application.C -frontend::FontMetrics const & theFontMetrics(LyXFont const & f); +/// Implementation is in Application.cpp +frontend::FontMetrics const & theFontMetrics(Font const & f); +frontend::FontMetrics const & theFontMetrics(FontInfo const & fi); } // namespace lyx