X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FRow.h;h=f053b4c5a9913106237a17143cdbab07b9519917;hb=2f271f61bcd514da3ab5b44d2b7bf61e12ac0c44;hp=7d9a891fd13d2a0c16173375f6d152ed65bdabf3;hpb=f630be890494c849981e4fb52ea4740506e92bed;p=lyx.git diff --git a/src/Row.h b/src/Row.h index 7d9a891fd1..f053b4c5a9 100644 --- a/src/Row.h +++ b/src/Row.h @@ -17,9 +17,13 @@ #include "support/types.h" +#include "Dimension.h" + namespace lyx { +class DocIterator; + /** * An on-screen row of text. A paragraph is broken into a * RowList for display. Each Row contains position pointers @@ -32,57 +36,84 @@ public: /// Row(pos_type pos); /// - void pos(pos_type p); + bool changed() const { return changed_; } /// - pos_type pos() const; + void setChanged(bool c) { changed_ = c; } /// - void endpos(pos_type p); + void setCrc(size_type crc) const; + /// Set the selection begin and end. + /** + * This is const because we update the selection status only at draw() + * time. + */ + void setSelection(pos_type sel_beg, pos_type sel_end) const; /// - pos_type endpos() const; + bool selection() const; + /// Set the selection begin and end and whether the left and/or right + /// margins are selected. + void setSelectionAndMargins(DocIterator const & beg, + DocIterator const & end) const; + /// - int height() const { return ascent_ + descent_; } + void pos(pos_type p); /// - void width(int w); + pos_type pos() const { return pos_; } /// - int width() const; + void endpos(pos_type p); /// - void ascent(int b); + pos_type endpos() const { return end_; } /// - int ascent() const; + void setDimension(Dimension const & dim); /// - void descent(int b) { descent_ = b; } + Dimension const & dimension() const { return dim_; } /// - int descent() const { return descent_; } - /// current debugging only - void dump(const char * = "") const; - -private: - /// first pos covered by this row - pos_type pos_; - /// one behind last pos covered by this row - pos_type end_; + int height() const { return dim_.height(); } /// - int ascent_; + int width() const { return dim_.wid; } /// - int descent_; + int ascent() const { return dim_.asc; } /// - int width_; -}; + int descent() const { return dim_.des; } + /// current debugging only + void dump(char const * = "") const; -class RowMetrics { -public: - RowMetrics(); /// width of a separator (i.e. space) double separator; - /// width of hfills in the body - double hfill; /// width of hfills in the label double label_hfill; /// the x position of the row double x; -}; + /// + mutable pos_type sel_beg; + /// + mutable pos_type sel_end; + /// + mutable bool left_margin_sel; + /// + mutable bool right_margin_sel; +private: + /// Decides whether the margin is selected. + /** + * \param margin_begin + * \param beg + * \param end + */ + bool isMarginSelected(bool left_margin, DocIterator const & beg, + DocIterator const & end) const; + + /// has the Row appearance changed since last drawing? + mutable bool changed_; + /// CRC of row contents. + mutable size_type crc_; + /// first pos covered by this row + pos_type pos_; + /// one behind last pos covered by this row + pos_type end_; + /// Row dimension. + Dimension dim_; +}; } // namespace lyx