]> git.lyx.org Git - lyx.git/blobdiff - src/TextMetrics.C
* GuiView.C (updateTab): do not update early if current tab has
[lyx.git] / src / TextMetrics.C
index 7cc99b09050fa10834b224c6830fdf204b6f1b43..63a287a160ca8be97b465852b4d10454c1bc6822 100644 (file)
@@ -85,18 +85,16 @@ int numberOfLabelHfills(Paragraph const & par, Row const & row)
 
 int numberOfHfills(Paragraph const & par, Row const & row)
 {
-       pos_type last = row.endpos();
+       pos_type const last = row.endpos();
        pos_type first = row.pos();
-       pos_type const par_size = par.size();
 
        // hfill *DO* count at the beginning of paragraphs!
        if (first) {
-               while (first < last && first < par_size && par.isHfill(first))
+               while (first < last && par.isHfill(first))
                        ++first;
        }
 
        first = max(first, par.beginOfBody());
-       last = min(last, par_size);
 
        int n = 0;
        for (pos_type p = first; p < last; ++p) {
@@ -260,6 +258,10 @@ bool TextMetrics::redoParagraph(pit_type const pit)
 
        par_metrics_[pit] = pm;
 
+       // Update the row change statuses. The painter will need that info
+       // in order to know which row has to be repainted.
+       par_metrics_[pit].updateRowChangeStatus();
+
        return changed;
 }
 
@@ -705,11 +707,12 @@ void TextMetrics::setHeightOfRow(pit_type const pit,
                // environment.
 
                pit_type prev = depthHook(pit, pars, par.getDepth());
+               Paragraph const & prevpar = pars[prev];
                if (prev != pit
-                   && pars[prev].layout() == layout
-                   && pars[prev].getDepth() == par.getDepth()
-                   && pars[prev].getLabelWidthString() == par.getLabelWidthString())
-               {
+                   && prevpar.layout() == layout
+                   && prevpar.getDepth() == par.getDepth()
+                   && prevpar.getLabelWidthString()
+                                       == par.getLabelWidthString()) {
                        layoutasc = layout->itemsep * dh;
                } else if (pit != 0 || row.pos() != 0) {
                        if (layout->topsep > 0)
@@ -720,8 +723,9 @@ void TextMetrics::setHeightOfRow(pit_type const pit,
                if (prev != pit_type(pars.size())) {
                        maxasc += int(pars[prev].layout()->parsep * dh);
                } else if (pit != 0) {
-                       if (pars[pit - 1].getDepth() != 0 ||
-                                       pars[pit - 1].layout() == layout) {
+                       Paragraph const & prevpar = pars[pit - 1];
+                       if (prevpar.getDepth() != 0 ||
+                                       prevpar.layout() == layout) {
                                maxasc += int(layout->parsep * dh);
                        }
                }
@@ -919,6 +923,26 @@ pos_type TextMetrics::getColumnNearX(pit_type const pit,
 }
 
 
+pos_type TextMetrics::x2pos(pit_type pit, int row, int x) const
+{
+       ParagraphMetrics const & pm = parMetrics(pit);
+       BOOST_ASSERT(!pm.rows().empty());
+       BOOST_ASSERT(row < int(pm.rows().size()));
+       bool bound = false;
+       Row const & r = pm.rows()[row];
+       return r.pos() + getColumnNearX(pit, r, x, bound);
+}
+
+
+//int LyXText::pos2x(pit_type pit, pos_type pos) const
+//{
+//     ParagraphMetrics const & pm = parMetrics(pit);
+//     Row const & r = pm.rows()[row];
+//     int x = 0;
+//     pos -= r.pos();
+//}
+
+
 int defaultRowHeight()
 {
        return int(theFontMetrics(LyXFont(LyXFont::ALL_SANE)).maxHeight() *  1.2);