X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FRow.cpp;h=3fb87bd7e1f3b80504742a85654fa361aca2c4b0;hb=4480b72a9dc8a5453a17edf55d4d4a60847a68ae;hp=70e3dcafc3ac3683d72d4d9555e2b7a59df19fc3;hpb=1fca708c7f33f089055d8ca258d8cd6a357cf2a6;p=lyx.git diff --git a/src/Row.cpp b/src/Row.cpp index 70e3dcafc3..3fb87bd7e1 100644 --- a/src/Row.cpp +++ b/src/Row.cpp @@ -115,14 +115,13 @@ pos_type Row::Element::x2pos(int &x) const case SPACE: // those elements contain only one position. Round to // the closest side. - if (x > full_width()) { + if (x > (full_width() + 1) / 2) { x = int(full_width()); i = !isRTL(); } else { x = 0; i = isRTL(); } - } //lyxerr << "=> p=" << pos + i << " x=" << x << endl; return pos + i; @@ -163,19 +162,13 @@ Row::Row() : separator(0), label_hfill(0), left_margin(0), right_margin(0), sel_beg(-1), sel_end(-1), begin_margin_sel(false), end_margin_sel(false), - changed_(false), crc_(0), + changed_(true), pit_(0), pos_(0), end_(0), - right_boundary_(false), flushed_(false), rtl_(false) + right_boundary_(false), flushed_(false), rtl_(false), + changebar_(false) {} -void Row::setCrc(size_type crc) const -{ - changed_ = crc != crc_; - crc_ = crc; -} - - bool Row::isMarginSelected(bool left_margin, DocIterator const & beg, DocIterator const & end) const { @@ -210,8 +203,8 @@ void Row::setSelectionAndMargins(DocIterator const & beg, setSelection(beg.pos(), end.pos()); if (selection()) { - end_margin_sel = isMarginSelected(false, beg, end); - begin_margin_sel = isMarginSelected(true, beg, end); + change(end_margin_sel, isMarginSelected(false, beg, end)); + change(begin_margin_sel, isMarginSelected(true, beg, end)); } } @@ -219,18 +212,18 @@ void Row::setSelectionAndMargins(DocIterator const & beg, void Row::setSelection(pos_type beg, pos_type end) const { if (pos_ >= beg && pos_ <= end) - sel_beg = pos_; + change(sel_beg, pos_); else if (beg > pos_ && beg <= end_) - sel_beg = beg; + change(sel_beg, beg); else - sel_beg = -1; + change(sel_beg, -1); if (end_ >= beg && end_ <= end) - sel_end = end_; + change(sel_end,end_); else if (end < end_ && end >= pos_) - sel_end = end; + change(sel_end, end); else - sel_end = -1; + change(sel_end, -1); } @@ -276,7 +269,7 @@ ostream & operator<<(ostream & os, Row const & row) << " ascent: " << row.dim_.asc << " descent: " << row.dim_.des << " separator: " << row.separator - << " label_hfill: " << row.label_hfill + << " label_hfill: " << row.label_hfill << " row_boundary: " << row.right_boundary() << "\n"; double x = row.left_margin; Row::Elements::const_iterator it = row.elements_.begin(); @@ -372,6 +365,8 @@ void Row::finalizeLast() if (elt.final) return; elt.final = true; + if (elt.change.changed()) + changebar_ = true; if (elt.type == STRING) { dim_.wid -= elt.dim.wid;