X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2FFontMetrics.h;h=8358e2eb1eadbf70204c7a3443006c4a828d3319;hb=1f10969bb5c5f36017bf5ba8671381b09945cf57;hp=59de63088c17c7d7cacfd833105a3209329f4e9e;hpb=0ee7c6e283bb6a592f6f86a2c45d34c60ba4026e;p=lyx.git diff --git a/src/frontends/FontMetrics.h b/src/frontends/FontMetrics.h index 59de63088c..8358e2eb1e 100644 --- a/src/frontends/FontMetrics.h +++ b/src/frontends/FontMetrics.h @@ -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 @@ -77,6 +88,31 @@ public: 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; /** @@ -106,6 +142,10 @@ public: inline int center(char_type c) const { return (rbearing(c) - lbearing(c)) / 2; } + + /// return the number of expanding characters taken into account for + /// increased inter-word spacing during justification + virtual int countExpanders(docstring const & str) const = 0; };