: type(t), pos(p), endpos(p + 1), inset(0),
extra(0), font(f), change(ch), final(false) {}
- // Return total width of element, including separator overhead
- double full_width() const { return dim.wid + extra * countSeparators(); }
// Return the number of separator in the element (only STRING type)
int countSeparators() const;
+ // Return total width of element, including separator overhead
+ // FIXME: Cache this value or the number of expanders?
+ double full_width() const { return dim.wid + extra * countExpanders(); }
+ // Return the number of expanding characters in the element (only STRING
+ // type).
+ int countExpanders() const;
+ // Return the amount of expansion: the number of expanding characters
+ // that get stretched during justification, times the em of the font
+ // (only STRING type).
+ int expansionAmount() const;
+ // set extra proportionally to the font em value.
+ void setExtra(double extra_per_em);
+
/** Return position in pixels (from the left) of position
* \param i in the row element.
*/
void setSelectionAndMargins(DocIterator const & beg,
DocIterator const & end) const;
+ ///
+ void pit(pit_type p) { pit_ = p; }
+ ///
+ pit_type pit() const { return pit_; }
///
void pos(pos_type p) { pos_ = p; }
///
// Return the number of separators in the row
int countSeparators() const;
- // Set the extra spacing for every separator in STRING elements
- void setSeparatorExtraWidth(double w);
+ // Set the extra spacing for every expanding character in STRING-type
+ // elements. \param w is the total amount of extra width for the row to be
+ // distributed among expanders. \return false if the justification fails.
+ bool setExtraWidth(int w);
///
void add(pos_type pos, Inset const * ins, Dimension const & dim,
* remains is a large word, cut it to \param width.
* \param body_pos minimum amount of text to keep.
* \param width maximum width of the row
+ * \return true if the row has been shortened.
*/
- void shortenIfNeeded(pos_type const body_pos, int const width);
+ bool shortenIfNeeded(pos_type const body_pos, int const width);
/**
* If last element of the row is a string, compute its width
mutable bool changed_;
/// CRC of row contents.
mutable size_type crc_;
+ /// Index of the paragraph that contains this row
+ pit_type pit_;
/// first pos covered by this row
pos_type pos_;
/// one behind last pos covered by this row