]> git.lyx.org Git - lyx.git/blobdiff - src/TextMetrics.cpp
* doxy
[lyx.git] / src / TextMetrics.cpp
index 80a644905334eba3fa2f5e3e6cb55276123c7525..19a71ffbb99154ad41ed597c0ab4431929aaf0b5 100644 (file)
@@ -322,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())
@@ -343,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     )
@@ -359,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;
 }