Do not require an extra pit parameter when a row is available

Now that Row has a pit() member, it is possible to use it instead of passing an extra pit_type parameter to a function which already has access to a Row.
This commit is contained in:
Jean-Marc Lasgouttes 2016-05-18 09:39:47 +02:00
parent 4c19c5149d
commit e39e4cf96b
6 changed files with 70 additions and 69 deletions

View File

@ -123,6 +123,11 @@ In particular, if text is painted last, it will be more visible in the
presence of underlines (foreign language, change tracking, spell presence of underlines (foreign language, change tracking, spell
check). check).
** DONE remove pit argument to breakRow
There are probably other places where the pit is not needed anymore:
computeRowMetrics, labelFill, setRowHeight, isLastRow, isFirstRow
** Remember rtl status in the row object ** Remember rtl status in the row object
This will avoid to pass a Paragraph object to methods that do not need it. This will avoid to pass a Paragraph object to methods that do not need it.

View File

@ -2999,8 +2999,7 @@ void BufferView::checkCursorScrollOffset(PainterInfo & pi)
bool const drawing = pi.pain.isDrawingEnabled(); bool const drawing = pi.pain.isDrawingEnabled();
pi.pain.setDrawingEnabled(false); pi.pain.setDrawingEnabled(false);
// No need to care about vertical position. // No need to care about vertical position.
RowPainter rp(pi, buffer().text(), d->cursor_.bottom().pit(), row, RowPainter rp(pi, buffer().text(), row, -d->horiz_scroll_offset_, 0);
-d->horiz_scroll_offset_, 0);
rp.paintText(); rp.paintText();
pi.pain.setDrawingEnabled(drawing); pi.pain.setDrawingEnabled(drawing);
} }

View File

@ -54,12 +54,12 @@ using frontend::FontMetrics;
RowPainter::RowPainter(PainterInfo & pi, RowPainter::RowPainter(PainterInfo & pi,
Text const & text, pit_type pit, Row const & row, int x, int y) Text const & text, Row const & row, int x, int y)
: pi_(pi), text_(text), : pi_(pi), text_(text),
text_metrics_(pi_.base.bv->textMetrics(&text)), text_metrics_(pi_.base.bv->textMetrics(&text)),
pars_(text.paragraphs()), pars_(text.paragraphs()),
row_(row), pit_(pit), par_(text.paragraphs()[pit]), row_(row), par_(text.paragraphs()[row.pit()]),
pm_(text_metrics_.parMetrics(pit)), change_(pi_.change_), pm_(text_metrics_.parMetrics(row.pit())), change_(pi_.change_),
xo_(x), yo_(y), width_(text_metrics_.width()), xo_(x), yo_(y), width_(text_metrics_.width()),
solid_line_thickness_(1), solid_line_offset_(1), solid_line_thickness_(1), solid_line_offset_(1),
dotted_line_thickness_(1) dotted_line_thickness_(1)
@ -84,8 +84,8 @@ RowPainter::RowPainter(PainterInfo & pi,
//lyxerr << "RowPainter: x: " << x_ << " xo: " << xo_ << " yo: " << yo_ << endl; //lyxerr << "RowPainter: x: " << x_ << " xo: " << xo_ << " yo: " << yo_ << endl;
//row_.dump(); //row_.dump();
LBUFERR(pit >= 0); LBUFERR(row.pit() >= 0);
LBUFERR(pit < int(text.paragraphs().size())); LBUFERR(row.pit() < int(text.paragraphs().size()));
} }
@ -280,7 +280,7 @@ void RowPainter::paintChangeBar() const
if (start == end || !par_.isChanged(start, end)) if (start == end || !par_.isChanged(start, end))
return; return;
int const height = text_metrics_.isLastRow(pit_, row_) int const height = text_metrics_.isLastRow(row_)
? row_.ascent() ? row_.ascent()
: row_.height(); : row_.height();
@ -312,16 +312,16 @@ void RowPainter::paintDepthBar() const
return; return;
depth_type prev_depth = 0; depth_type prev_depth = 0;
if (!text_metrics_.isFirstRow(pit_, row_)) { if (!text_metrics_.isFirstRow(row_)) {
pit_type pit2 = pit_; pit_type pit2 = row_.pit();
if (row_.pos() == 0) if (row_.pos() == 0)
--pit2; --pit2;
prev_depth = pars_[pit2].getDepth(); prev_depth = pars_[pit2].getDepth();
} }
depth_type next_depth = 0; depth_type next_depth = 0;
if (!text_metrics_.isLastRow(pit_, row_)) { if (!text_metrics_.isLastRow(row_)) {
pit_type pit2 = pit_; pit_type pit2 = row_.pit();
if (row_.endpos() >= pars_[pit2].size()) if (row_.endpos() >= pars_[pit2].size())
++pit2; ++pit2;
next_depth = pars_[pit2].getDepth(); next_depth = pars_[pit2].getDepth();
@ -396,7 +396,7 @@ void RowPainter::paintFirst() const
paintAppendixStart(yo_ - row_.ascent() + 2 * defaultRowHeight()); paintAppendixStart(yo_ - row_.ascent() + 2 * defaultRowHeight());
bool const is_first = bool const is_first =
text_.isFirstInSequence(pit_) || !layout.isParagraphGroup(); text_.isFirstInSequence(row_.pit()) || !layout.isParagraphGroup();
//lyxerr << "paintFirst: " << par_.id() << " is_seq: " << is_seq << endl; //lyxerr << "paintFirst: " << par_.id() << " is_seq: " << is_seq << endl;
if (layout.labelIsInline() if (layout.labelIsInline()
@ -500,7 +500,7 @@ static int getEndLabel(pit_type p, Text const & text)
void RowPainter::paintLast() const void RowPainter::paintLast() const
{ {
bool const is_rtl = text_.isRTL(par_); bool const is_rtl = text_.isRTL(par_);
int const endlabel = getEndLabel(pit_, text_); int const endlabel = getEndLabel(row_.pit(), text_);
// paint imaginary end-of-paragraph character // paint imaginary end-of-paragraph character
@ -626,11 +626,11 @@ void RowPainter::paintSelection() const
return; return;
Cursor const & curs = pi_.base.bv->cursor(); Cursor const & curs = pi_.base.bv->cursor();
DocIterator beg = curs.selectionBegin(); DocIterator beg = curs.selectionBegin();
beg.pit() = pit_; beg.pit() = row_.pit();
beg.pos() = row_.sel_beg; beg.pos() = row_.sel_beg;
DocIterator end = curs.selectionEnd(); DocIterator end = curs.selectionEnd();
end.pit() = pit_; end.pit() = row_.pit();
end.pos() = row_.sel_end; end.pos() = row_.sel_end;
bool const begin_boundary = beg.pos() >= row_.endpos(); bool const begin_boundary = beg.pos() >= row_.endpos();

View File

@ -43,7 +43,7 @@ class RowPainter {
public: public:
/// initialise and run painter /// initialise and run painter
RowPainter(PainterInfo & pi, Text const & text, RowPainter(PainterInfo & pi, Text const & text,
pit_type pit, Row const & row, int x, int y); Row const & row, int x, int y);
/// paint various parts /// paint various parts
/// FIXME: transfer to TextMetrics /// FIXME: transfer to TextMetrics
@ -86,7 +86,6 @@ private:
Row const & row_; Row const & row_;
/// Row's paragraph /// Row's paragraph
pit_type const pit_;
Paragraph const & par_; Paragraph const & par_;
ParagraphMetrics const & pm_; ParagraphMetrics const & pm_;

View File

@ -445,8 +445,9 @@ bool TextMetrics::redoParagraph(pit_type const pit)
Row & row = pm.rows()[row_index]; Row & row = pm.rows()[row_index];
row.pit(pit); row.pit(pit);
row.pos(first); row.pos(first);
need_new_row = breakRow(row, right_margin, pit); row.pit(pit);
setRowHeight(row, pit); need_new_row = breakRow(row, right_margin);
setRowHeight(row);
row.setChanged(false); row.setChanged(false);
if (row_index || row.endpos() < par.size() if (row_index || row.endpos() < par.size()
|| (row.right_boundary() && par.inInset().lyxCode() != CELL_CODE)) { || (row.right_boundary() && par.inInset().lyxCode() != CELL_CODE)) {
@ -463,7 +464,7 @@ bool TextMetrics::redoParagraph(pit_type const pit)
dim_.wid = max_width_; dim_.wid = max_width_;
} }
int const max_row_width = max(dim_.wid, row.width()); int const max_row_width = max(dim_.wid, row.width());
computeRowMetrics(pit, row, max_row_width); computeRowMetrics(row, max_row_width);
first = row.endpos(); first = row.endpos();
++row_index; ++row_index;
@ -563,13 +564,12 @@ LyXAlignment TextMetrics::getAlign(Paragraph const & par, Row const & row) const
} }
void TextMetrics::computeRowMetrics(pit_type const pit, void TextMetrics::computeRowMetrics(Row & row, int width) const
Row & row, int width) const
{ {
row.label_hfill = 0; row.label_hfill = 0;
row.separator = 0; row.separator = 0;
Paragraph const & par = text_->getPar(pit); Paragraph const & par = text_->getPar(row.pit());
int const w = width - row.right_margin - row.width(); int const w = width - row.right_margin - row.width();
// FIXME: put back this assertion when the crash on new doc is solved. // FIXME: put back this assertion when the crash on new doc is solved.
@ -593,11 +593,11 @@ void TextMetrics::computeRowMetrics(pit_type const pit,
++nlh; ++nlh;
if (nlh && !par.getLabelWidthString().empty()) if (nlh && !par.getLabelWidthString().empty())
row.label_hfill = labelFill(pit, row) / double(nlh); row.label_hfill = labelFill(row) / double(nlh);
} }
// are there any hfills in the row? // are there any hfills in the row?
ParagraphMetrics & pm = par_metrics_[pit]; ParagraphMetrics & pm = par_metrics_[row.pit()];
int nh = numberOfHfills(row, pm, par.beginOfBody()); int nh = numberOfHfills(row, pm, par.beginOfBody());
int hfill = 0; int hfill = 0;
int hfill_rem = 0; int hfill_rem = 0;
@ -674,9 +674,9 @@ void TextMetrics::computeRowMetrics(pit_type const pit,
} }
int TextMetrics::labelFill(pit_type const pit, Row const & row) const int TextMetrics::labelFill(Row const & row) const
{ {
Paragraph const & par = text_->getPar(pit); Paragraph const & par = text_->getPar(row.pit());
LBUFERR(par.beginOfBody() > 0 || par.isEnvSeparator(0)); LBUFERR(par.beginOfBody() > 0 || par.isEnvSeparator(0));
int w = 0; int w = 0;
@ -787,9 +787,9 @@ private:
* very sensitive to small changes :) Note that part of the * very sensitive to small changes :) Note that part of the
* intelligence is also in Row::shortenIfNeeded. * intelligence is also in Row::shortenIfNeeded.
*/ */
bool TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit) const bool TextMetrics::breakRow(Row & row, int const right_margin) const
{ {
Paragraph const & par = text_->getPar(pit); Paragraph const & par = text_->getPar(row.pit());
pos_type const end = par.size(); pos_type const end = par.size();
pos_type const pos = row.pos(); pos_type const pos = row.pos();
pos_type const body_pos = par.beginOfBody(); pos_type const body_pos = par.beginOfBody();
@ -797,7 +797,7 @@ bool TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit
bool need_new_row = false; bool need_new_row = false;
row.clear(); row.clear();
row.left_margin = leftMargin(max_width_, pit, pos); row.left_margin = leftMargin(max_width_, row.pit(), pos);
row.right_margin = right_margin; row.right_margin = right_margin;
if (is_rtl) if (is_rtl)
swap(row.left_margin, row.right_margin); swap(row.left_margin, row.right_margin);
@ -823,13 +823,13 @@ bool TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit
// check for possible inline completion // check for possible inline completion
DocIterator const & ic_it = bv_->inlineCompletionPos(); DocIterator const & ic_it = bv_->inlineCompletionPos();
pos_type ic_pos = -1; pos_type ic_pos = -1;
if (ic_it.inTexted() && ic_it.text() == text_ && ic_it.pit() == pit) if (ic_it.inTexted() && ic_it.text() == text_ && ic_it.pit() == row.pit())
ic_pos = ic_it.pos(); ic_pos = ic_it.pos();
// Now we iterate through until we reach the right margin // Now we iterate through until we reach the right margin
// or the end of the par, then build a representation of the row. // or the end of the par, then build a representation of the row.
pos_type i = pos; pos_type i = pos;
FontIterator fi = FontIterator(*this, par, pit, pos); FontIterator fi = FontIterator(*this, par, row.pit(), pos);
do { do {
// this can happen for an empty row after a newline // this can happen for an empty row after a newline
if (i >= end) if (i >= end)
@ -849,7 +849,7 @@ bool TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit
// this is needed to make sure that the row width is correct // this is needed to make sure that the row width is correct
row.finalizeLast(); row.finalizeLast();
int const add = max(fm.width(par.layout().labelsep), int const add = max(fm.width(par.layout().labelsep),
labelEnd(pit) - row.width()); labelEnd(row.pit()) - row.width());
row.addSpace(i, add, *fi, par.lookupChange(i)); row.addSpace(i, add, *fi, par.lookupChange(i));
} else if (c == '\t') } else if (c == '\t')
row.addSpace(i, theFontMetrics(*fi).width(from_ascii(" ")), row.addSpace(i, theFontMetrics(*fi).width(from_ascii(" ")),
@ -906,11 +906,11 @@ bool TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit
// End of paragraph marker // End of paragraph marker
ParagraphList const & pars = text_->paragraphs(); ParagraphList const & pars = text_->paragraphs();
if (lyxrc.paragraph_markers && !need_new_row if (lyxrc.paragraph_markers && !need_new_row
&& i == end && size_type(pit + 1) < pars.size()) { && i == end && size_type(row.pit() + 1) < pars.size()) {
// add a virtual element for the end-of-paragraph // add a virtual element for the end-of-paragraph
// marker; it is shown on screen, but does not exist // marker; it is shown on screen, but does not exist
// in the paragraph. // in the paragraph.
Font f(text_->layoutFont(pit)); Font f(text_->layoutFont(row.pit()));
f.fontInfo().setColor(Color_paragraphmarker); f.fontInfo().setColor(Color_paragraphmarker);
BufferParams const & bparams BufferParams const & bparams
= text_->inset().buffer().params(); = text_->inset().buffer().params();
@ -931,16 +931,15 @@ bool TextMetrics::breakRow(Row & row, int const right_margin, pit_type const pit
} }
void TextMetrics::setRowHeight(Row & row, pit_type const pit, void TextMetrics::setRowHeight(Row & row, bool topBottomSpace) const
bool topBottomSpace) const
{ {
Paragraph const & par = text_->getPar(pit); Paragraph const & par = text_->getPar(row.pit());
Layout const & layout = par.layout(); Layout const & layout = par.layout();
double const spacing_val = layout.spacing.getValue() double const spacing_val = layout.spacing.getValue()
* text_->spacing(par); * text_->spacing(par);
// Initial value for ascent (useful if row is empty). // Initial value for ascent (useful if row is empty).
Font const font = displayFont(pit, row.pos()); Font const font = displayFont(row.pit(), row.pos());
FontMetrics const & fm = theFontMetrics(font); FontMetrics const & fm = theFontMetrics(font);
int maxasc = int(fm.maxAscent() * spacing_val); int maxasc = int(fm.maxAscent() * spacing_val);
int maxdes = int(fm.maxDescent() * spacing_val); int maxdes = int(fm.maxDescent() * spacing_val);
@ -978,10 +977,10 @@ void TextMetrics::setRowHeight(Row & row, pit_type const pit,
if (bufparams.paragraph_separation == BufferParams::ParagraphSkipSeparation if (bufparams.paragraph_separation == BufferParams::ParagraphSkipSeparation
&& !inset.getLayout().parbreakIsNewline() && !inset.getLayout().parbreakIsNewline()
&& !par.layout().parbreak_is_newline && !par.layout().parbreak_is_newline
&& pit > 0 && row.pit() > 0
&& ((layout.isParagraph() && par.getDepth() == 0) && ((layout.isParagraph() && par.getDepth() == 0)
|| (pars[pit - 1].layout().isParagraph() || (pars[row.pit() - 1].layout().isParagraph()
&& pars[pit - 1].getDepth() == 0))) { && pars[row.pit() - 1].getDepth() == 0))) {
maxasc += bufparams.getDefSkip().inPixels(*bv_); maxasc += bufparams.getDefSkip().inPixels(*bv_);
} }
@ -990,7 +989,7 @@ void TextMetrics::setRowHeight(Row & row, pit_type const pit,
// special code for the top label // special code for the top label
if (layout.labelIsAbove() if (layout.labelIsAbove()
&& (!layout.isParagraphGroup() || text_->isFirstInSequence(pit)) && (!layout.isParagraphGroup() || text_->isFirstInSequence(row.pit()))
&& !par.labelString().empty()) { && !par.labelString().empty()) {
FontInfo labelfont = text_->labelFont(par); FontInfo labelfont = text_->labelFont(par);
FontMetrics const & lfm = theFontMetrics(labelfont); FontMetrics const & lfm = theFontMetrics(labelfont);
@ -1005,24 +1004,24 @@ void TextMetrics::setRowHeight(Row & row, pit_type const pit,
// a section, or between the items of a itemize or enumerate // a section, or between the items of a itemize or enumerate
// environment. // environment.
pit_type prev = text_->depthHook(pit, par.getDepth()); pit_type prev = text_->depthHook(row.pit(), par.getDepth());
Paragraph const & prevpar = pars[prev]; Paragraph const & prevpar = pars[prev];
if (prev != pit if (prev != row.pit()
&& prevpar.layout() == layout && prevpar.layout() == layout
&& prevpar.getDepth() == par.getDepth() && prevpar.getDepth() == par.getDepth()
&& prevpar.getLabelWidthString() && prevpar.getLabelWidthString()
== par.getLabelWidthString()) { == par.getLabelWidthString()) {
layoutasc = layout.itemsep * dh; layoutasc = layout.itemsep * dh;
} else if (pit != 0 || row.pos() != 0) { } else if (row.pit() != 0 || row.pos() != 0) {
if (layout.topsep > 0) if (layout.topsep > 0)
layoutasc = layout.topsep * dh; layoutasc = layout.topsep * dh;
} }
prev = text_->outerHook(pit); prev = text_->outerHook(row.pit());
if (prev != pit_type(pars.size())) { if (prev != pit_type(pars.size())) {
maxasc += int(pars[prev].layout().parsep * dh); maxasc += int(pars[prev].layout().parsep * dh);
} else if (pit != 0) { } else if (row.pit() != 0) {
Paragraph const & prevpar = pars[pit - 1]; Paragraph const & prevpar = pars[row.pit() - 1];
if (prevpar.getDepth() != 0 || if (prevpar.getDepth() != 0 ||
prevpar.layout() == layout) { prevpar.layout() == layout) {
maxasc += int(layout.parsep * dh); maxasc += int(layout.parsep * dh);
@ -1035,9 +1034,9 @@ void TextMetrics::setRowHeight(Row & row, pit_type const pit,
// add the layout spaces, for example before and after // add the layout spaces, for example before and after
// a section, or between the items of a itemize or enumerate // a section, or between the items of a itemize or enumerate
// environment // environment
pit_type nextpit = pit + 1; pit_type nextpit = row.pit() + 1;
if (nextpit != pit_type(pars.size())) { if (nextpit != pit_type(pars.size())) {
pit_type cpit = pit; pit_type cpit = row.pit();
if (pars[cpit].getDepth() > pars[nextpit].getDepth()) { if (pars[cpit].getDepth() > pars[nextpit].getDepth()) {
double usual = pars[cpit].layout().bottomsep * dh; double usual = pars[cpit].layout().bottomsep * dh;
@ -1056,8 +1055,8 @@ void TextMetrics::setRowHeight(Row & row, pit_type const pit,
} }
// incalculate the layout spaces // incalculate the layout spaces
maxasc += int(layoutasc * 2 / (2 + pars[pit].getDepth())); maxasc += int(layoutasc * 2 / (2 + pars[row.pit()].getDepth()));
maxdes += int(layoutdesc * 2 / (2 + pars[pit].getDepth())); maxdes += int(layoutdesc * 2 / (2 + pars[row.pit()].getDepth()));
row.dimension().asc = maxasc + labeladdon; row.dimension().asc = maxasc + labeladdon;
row.dimension().des = maxdes; row.dimension().des = maxdes;
@ -1593,17 +1592,17 @@ void TextMetrics::deleteLineForward(Cursor & cur)
} }
bool TextMetrics::isLastRow(pit_type pit, Row const & row) const bool TextMetrics::isLastRow(Row const & row) const
{ {
ParagraphList const & pars = text_->paragraphs(); ParagraphList const & pars = text_->paragraphs();
return row.endpos() >= pars[pit].size() return row.endpos() >= pars[row.pit()].size()
&& pit + 1 == pit_type(pars.size()); && row.pit() + 1 == pit_type(pars.size());
} }
bool TextMetrics::isFirstRow(pit_type pit, Row const & row) const bool TextMetrics::isFirstRow(Row const & row) const
{ {
return row.pos() == 0 && pit == 0; return row.pos() == 0 && row.pit() == 0;
} }
@ -1843,7 +1842,7 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type const pit, int const
if (i) if (i)
y += row.ascent(); y += row.ascent();
RowPainter rp(pi, *text_, pit, row, row_x, y); RowPainter rp(pi, *text_, row, row_x, y);
rp.paintOnlyInsets(); rp.paintOnlyInsets();
y += row.descent(); y += row.descent();
@ -1887,7 +1886,7 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type const pit, int const
if (i) if (i)
y += row.ascent(); y += row.ascent();
RowPainter rp(pi, *text_, pit, row, row_x, y); RowPainter rp(pi, *text_, row, row_x, y);
// It is not needed to draw on screen if we are not inside. // It is not needed to draw on screen if we are not inside.
bool const inside = (y + row.descent() >= 0 bool const inside = (y + row.descent() >= 0
@ -2012,7 +2011,7 @@ void TextMetrics::completionPosAndDim(Cursor const & cur, int & x, int & y,
Row row; Row row;
row.pos(wordStart.pos()); row.pos(wordStart.pos());
row.endpos(bvcur.pos()); row.endpos(bvcur.pos());
setRowHeight(row, bvcur.pit(), false); setRowHeight(row, false);
dim = row.dimension(); dim = row.dimension();
dim.wid = abs(rxy.x_ - lxy.x_); dim.wid = abs(rxy.x_ - lxy.x_);

View File

@ -116,15 +116,14 @@ public:
/// Returns the height of the row (width member is set to 0). /// Returns the height of the row (width member is set to 0).
/// If \c topBottomSpace is true, extra space is added for the /// If \c topBottomSpace is true, extra space is added for the
/// top and bottom row. /// top and bottom row.
void setRowHeight(Row & row, pit_type const pit, void setRowHeight(Row & row, bool topBottomSpace = true) const;
bool topBottomSpace = true) const;
private: private:
/// ///
ParagraphMetrics & parMetrics(pit_type, bool redo_paragraph); ParagraphMetrics & parMetrics(pit_type, bool redo_paragraph);
/// the minimum space a manual label needs on the screen in pixels /// the minimum space a manual label needs on the screen in pixels
int labelFill(pit_type const pit, Row const & row) const; int labelFill(Row const & row) const;
/// FIXME?? /// FIXME??
int labelEnd(pit_type const pit) const; int labelEnd(pit_type const pit) const;
@ -132,13 +131,13 @@ private:
/// sets row.end to the pos value *after* which a row should break. /// sets row.end to the pos value *after* which a row should break.
/// for example, the pos after which isNewLine(pos) == true /// for example, the pos after which isNewLine(pos) == true
/// \return true when another row is required (after a newline) /// \return true when another row is required (after a newline)
bool breakRow(Row & row, int right_margin, pit_type const pit) const; bool breakRow(Row & row, int right_margin) const;
// Expand the alignment of row \param row in paragraph \param par // Expand the alignment of row \param row in paragraph \param par
LyXAlignment getAlign(Paragraph const & par, Row const & row) const; LyXAlignment getAlign(Paragraph const & par, Row const & row) const;
/** this calculates the specified parameters. needed when setting /** this calculates the specified parameters. needed when setting
* the cursor and when creating a visible row */ * the cursor and when creating a visible row */
void computeRowMetrics(pit_type pit, Row & row, int width) const; void computeRowMetrics(Row & row, int width) const;
// Helper function for the other checkInsetHit method. // Helper function for the other checkInsetHit method.
InsetList::InsetTable * checkInsetHit(pit_type pit, int x, int y); InsetList::InsetTable * checkInsetHit(pit_type pit, int x, int y);
@ -208,9 +207,9 @@ public:
void deleteLineForward(Cursor & cur); void deleteLineForward(Cursor & cur);
/// is this row the last in the text? /// is this row the last in the text?
bool isLastRow(pit_type pit, Row const & row) const; bool isLastRow(Row const & row) const;
/// is this row the first in the text? /// is this row the first in the text?
bool isFirstRow(pit_type pit, Row const & row) const; bool isFirstRow(Row const & row) const;
/// Returns an inset if inset was hit, or 0 if not. /// Returns an inset if inset was hit, or 0 if not.
/// \warning This method is not recursive! It will return the /// \warning This method is not recursive! It will return the