X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FRow.h;h=13a11b4870e361365bf9a47ae7e049b23f2ed425;hb=d1858b89d0828c3fe8f4e898f609aaed93333d33;hp=2aa09a697e9e2e3f5231393fc3d829c4ba420c35;hpb=2ff639a0e6d051c6411fe6655cefc36a4e902211;p=lyx.git diff --git a/src/Row.h b/src/Row.h index 2aa09a697e..13a11b4870 100644 --- a/src/Row.h +++ b/src/Row.h @@ -29,6 +29,18 @@ namespace lyx { class DocIterator; class Inset; +/** + * FIXME: Change Row object to operate only on integers and not doubles. + * + * This use of double is only useful to distribute the extra + * horizontal space between separators in justified text. If we do + * integer arithmetic, then it is possible to have two groups of + * separators, with size s or s+1. Then strings can be drawn without + * cutting at separators in justfied text, as it is done in + * non-justified text. This will improve performance. + */ + + /** * An on-screen row of text. A paragraph is broken into a RowList for * display. Each Row contains a tokenized description of the contents @@ -63,17 +75,21 @@ public: : type(t), pos(p), endpos(p + 1), inset(0), extra(0), font(f), change(ch), final(false) {} - // returns total width of element, including separator overhead + // Return total width of element, including separator overhead double width() const { return dim.wid + extra; }; - // returns position in pixels (from the left) of position - // \param i in the row element. + /** Return position in pixels (from the left) of position + * \param i in the row element. + */ double pos2x(pos_type const i) const; - /** Return character position that is the closest to * pixel position \param x. The value \param x is * adjusted to the actual pixel position. */ pos_type x2pos(double &x) const; + /** Break the element if possible, so that its width is + * less then \param w. Returns true on success. + */ + bool breakAt(double w); // Returns the position on left side of the element. pos_type left_pos() const; @@ -149,7 +165,7 @@ public: Dimension & dimension() { return dim_; } /// int height() const { return dim_.height(); } - /// + /// The width of the row, including the left margin, but not the right one. int width() const { return dim_.wid; } /// int ascent() const { return dim_.asc; } @@ -207,7 +223,7 @@ public: * \param body_pos minimum amount of text to keep. * \param width maximum width of the row */ - void shorten_if_needed(pos_type const body_pos, int const width); + void shortenIfNeeded(pos_type const body_pos, int const width); /** * If last element of the row is a string, compute its width