mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 10:00:33 +00:00
Store change bar information in row element
It is wrong to compute this at paint time. In general, painting a row
should not require any access to a paragraph object, but we are far
from there now.
(cherry picked from commit 4858bb3bb6
)
This commit is contained in:
parent
4ecbff0019
commit
d2e15bd189
@ -164,7 +164,8 @@ Row::Row()
|
|||||||
begin_margin_sel(false), end_margin_sel(false),
|
begin_margin_sel(false), end_margin_sel(false),
|
||||||
changed_(false), crc_(0),
|
changed_(false), crc_(0),
|
||||||
pit_(0), pos_(0), end_(0),
|
pit_(0), pos_(0), end_(0),
|
||||||
right_boundary_(false), flushed_(false), rtl_(false)
|
right_boundary_(false), flushed_(false), rtl_(false),
|
||||||
|
changebar_(false)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -371,6 +372,8 @@ void Row::finalizeLast()
|
|||||||
if (elt.final)
|
if (elt.final)
|
||||||
return;
|
return;
|
||||||
elt.final = true;
|
elt.final = true;
|
||||||
|
if (elt.change.changed())
|
||||||
|
changebar_ = true;
|
||||||
|
|
||||||
if (elt.type == STRING) {
|
if (elt.type == STRING) {
|
||||||
dim_.wid -= elt.dim.wid;
|
dim_.wid -= elt.dim.wid;
|
||||||
|
@ -266,6 +266,11 @@ public:
|
|||||||
void reverseRTL(bool rtl_par);
|
void reverseRTL(bool rtl_par);
|
||||||
///
|
///
|
||||||
bool isRTL() const { return rtl_; }
|
bool isRTL() const { return rtl_; }
|
||||||
|
///
|
||||||
|
bool needsChangeBar() const { return changebar_; }
|
||||||
|
///
|
||||||
|
void needsChangeBar(bool ncb) { changebar_ = ncb; }
|
||||||
|
|
||||||
/// Find row element that contains \c pos, and compute x offset.
|
/// Find row element that contains \c pos, and compute x offset.
|
||||||
const_iterator const findElement(pos_type pos, bool boundary, double & x) const;
|
const_iterator const findElement(pos_type pos, bool boundary, double & x) const;
|
||||||
|
|
||||||
@ -326,6 +331,8 @@ private:
|
|||||||
Dimension dim_;
|
Dimension dim_;
|
||||||
/// true when this row lives in a right-to-left paragraph
|
/// true when this row lives in a right-to-left paragraph
|
||||||
bool rtl_;
|
bool rtl_;
|
||||||
|
/// true when a changebar should be drawn in the margin
|
||||||
|
bool changebar_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -247,18 +247,6 @@ void RowPainter::paintChange(Row::Element const & e) const
|
|||||||
|
|
||||||
void RowPainter::paintChangeBar() const
|
void RowPainter::paintChangeBar() const
|
||||||
{
|
{
|
||||||
pos_type const start = row_.pos();
|
|
||||||
pos_type end = row_.endpos();
|
|
||||||
|
|
||||||
if (par_.size() == end) {
|
|
||||||
// this is the last row of the paragraph;
|
|
||||||
// thus, we must also consider the imaginary end-of-par character
|
|
||||||
end++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (start == end || !par_.isChanged(start, end))
|
|
||||||
return;
|
|
||||||
|
|
||||||
int const height = tm_.isLastRow(row_)
|
int const height = tm_.isLastRow(row_)
|
||||||
? row_.ascent()
|
? row_.ascent()
|
||||||
: row_.height();
|
: row_.height();
|
||||||
|
@ -964,6 +964,10 @@ bool TextMetrics::breakRow(Row & row, int const right_margin) const
|
|||||||
row.addVirtual(end, docstring(1, char_type(0x00B6)), f, Change());
|
row.addVirtual(end, docstring(1, char_type(0x00B6)), f, Change());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Is there a end-of-paragaph change?
|
||||||
|
if (i == end && par.lookupChange(end).changed() && !need_new_row)
|
||||||
|
row.needsChangeBar(true);
|
||||||
|
|
||||||
// if the row is too large, try to cut at last separator. In case
|
// if the row is too large, try to cut at last separator. In case
|
||||||
// of success, reset indication that the row was broken abruptly.
|
// of success, reset indication that the row was broken abruptly.
|
||||||
int const next_width = max_width_ - leftMargin(row.pit(), row.endpos())
|
int const next_width = max_width_ - leftMargin(row.pit(), row.endpos())
|
||||||
@ -1937,7 +1941,8 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type const pit, int const
|
|||||||
rp.paintSelection();
|
rp.paintSelection();
|
||||||
rp.paintAppendix();
|
rp.paintAppendix();
|
||||||
rp.paintDepthBar();
|
rp.paintDepthBar();
|
||||||
rp.paintChangeBar();
|
if (row.needsChangeBar())
|
||||||
|
rp.paintChangeBar();
|
||||||
if (i == 0 && !row.isRTL())
|
if (i == 0 && !row.isRTL())
|
||||||
rp.paintFirst();
|
rp.paintFirst();
|
||||||
if (i == nrows - 1 && row.isRTL())
|
if (i == nrows - 1 && row.isRTL())
|
||||||
|
Loading…
Reference in New Issue
Block a user