]> git.lyx.org Git - lyx.git/blobdiff - src/TextMetrics.cpp
* doxy
[lyx.git] / src / TextMetrics.cpp
index b713cd5f7ea16c31c2e8616c81e996f4a9e79eb8..19a71ffbb99154ad41ed597c0ab4431929aaf0b5 100644 (file)
@@ -179,17 +179,6 @@ ParagraphMetrics & TextMetrics::parMetrics(pit_type pit, bool redo)
 }
 
 
-int TextMetrics::parPosition(pit_type pit) const
-{
-       if (pit < par_metrics_.begin()->first)
-               return -1000000;
-       if (pit > par_metrics_.rbegin()->first)
-               return +1000000;
-
-       return par_metrics_[pit].position();
-}
-
-
 bool TextMetrics::metrics(MetricsInfo & mi, Dimension & dim, int min_width)
 {
        LASSERT(mi.base.textwidth > 0, /**/);
@@ -333,13 +322,14 @@ bool TextMetrics::isRTLBoundary(pit_type pit, pos_type pos) const
 bool TextMetrics::isRTLBoundary(pit_type pit, pos_type pos,
                Font const & font) const
 {
-       if (!lyxrc.rtl_support)
+       if (!lyxrc.rtl_support
+           // no RTL boundary at paragraph start
+           || pos == 0
+           // if the metrics have not been calculated, then we are not
+           // on screen and can safely ignore issues about boundaries.
+           || !contains(pit))
                return false;
 
-       // no RTL boundary at paragraph start
-       if (pos == 0)
-               return false;
-       
        ParagraphMetrics & pm = par_metrics_[pit];
        // no RTL boundary in empty paragraph
        if (pm.rows().empty())
@@ -354,13 +344,6 @@ bool TextMetrics::isRTLBoundary(pit_type pit, pos_type pos,
                return false;
 
        Paragraph const & par = text_->getPar(pit);
-       bool left = font.isVisibleRightToLeft();
-       bool right;
-       if (pos == par.size())
-               right = par.isRTL(bv_->buffer().params());
-       else
-               right = displayFont(pit, pos).isVisibleRightToLeft();
-       
        // no RTL boundary at line break:
        // abc|\n    -> move right ->   abc\n       (and not:    abc\n|
        // FED                          FED|                     FED     )
@@ -370,6 +353,13 @@ bool TextMetrics::isRTLBoundary(pit_type pit, pos_type pos,
                        || par.isSeparator(pos - 1)))
                return false;
        
+       bool left = font.isVisibleRightToLeft();
+       bool right;
+       if (pos == par.size())
+               right = par.isRTL(bv_->buffer().params());
+       else
+               right = displayFont(pit, pos).isVisibleRightToLeft();
+       
        return left != right;
 }
 
@@ -2266,7 +2256,7 @@ void TextMetrics::drawRowSelection(PainterInfo & pi, int x, Row const & row,
 
        // go through row and draw from RTL boundary to RTL boundary
        while (cur < end) {
-               bool drawNow = false;
+               bool draw_now = false;
 
                // simplified cursorForward code below which does not
                // descend into insets and which does not go into the
@@ -2281,7 +2271,7 @@ void TextMetrics::drawRowSelection(PainterInfo & pi, int x, Row const & row,
                        // because:  ab|cDDEEFFghi -> abc|DDEEFFghi
                        ++cur.pos();
                        cur.boundary(true);
-                       drawNow = true;
+                       draw_now = true;
                } else {
                        // move right
                        ++cur.pos();
@@ -2296,7 +2286,7 @@ void TextMetrics::drawRowSelection(PainterInfo & pi, int x, Row const & row,
                        x1 = cursorX(cur.top(), cur.boundary());
                }
 
-               if (!(cur < end) || drawNow) {
+               if (!(cur < end) || draw_now) {
                        x2 = cursorX(cur.top(), cur.boundary());
                        pi.pain.fillRectangle(x + min(x1,x2), y1, abs(x2 - x1), y2 - y1,
                                Color_selection);