]> git.lyx.org Git - lyx.git/blobdiff - src/TextMetrics.cpp
Fix bug #6997
[lyx.git] / src / TextMetrics.cpp
index 1aef414b7c7f983a9b77f101626522cf1c88c252..ea8e07fae67ddf732c4f377f918455cf4a3e6a67 100644 (file)
@@ -27,7 +27,6 @@
 #include "CoordCache.h"
 #include "Cursor.h"
 #include "CutAndPaste.h"
-#include "FuncRequest.h"
 #include "HSpace.h"
 #include "InsetList.h"
 #include "Layout.h"
@@ -134,8 +133,6 @@ TextMetrics::TextMetrics(BufferView * bv, Text * text)
        dim_.wid = max_width_;
        dim_.asc = 10;
        dim_.des = 10;
-
-       //text_->updateBuffer(bv->buffer());
 }
 
 
@@ -401,6 +398,9 @@ bool TextMetrics::redoParagraph(pit_type const pit)
                LYXERR(Debug::INFO, "MacroContext not initialised!"
                        << " Going through the buffer again and hope"
                        << " the context is better then.");
+               // FIXME audit updateBuffer calls
+               // This should not be here, but it is not clear yet where else it
+               // should be.
                bv_->buffer().updateBuffer();
                parPos = text_->macrocontextPosition();
                LASSERT(!parPos.empty(), /**/);
@@ -1219,10 +1219,18 @@ pos_type TextMetrics::getColumnNearX(pit_type const pit,
                return 0;
        }
 
-       // if the first character is a separator, we are in RTL
-       // text. This character will not be painted on screen
+       // This (rtl_support test) is not needed, but gives
+       // some speedup if rtl_support == false
+       bool const lastrow = lyxrc.rtl_support && row.endpos() == par.size();
+
+       // If lastrow is false, we don't need to compute
+       // the value of rtl.
+       bool const rtl = lastrow ? text_->isRTL(par) : false;
+
+       // if the first character is a separator, and we are in RTL
+       // text, this character will not be painted on screen
        // and thus we should not count it and skip to the next.
-       if (par.isSeparator(bidi.vis2log(vc)))
+       if (rtl && par.isSeparator(bidi.vis2log(vc)))
                ++vc;
 
        while (vc < end && tmpx <= x) {
@@ -1250,13 +1258,7 @@ pos_type TextMetrics::getColumnNearX(pit_type const pit,
        LASSERT(vc <= end, /**/);  // This shouldn't happen.
 
        boundary = false;
-       // This (rtl_support test) is not needed, but gives
-       // some speedup if rtl_support == false
-       bool const lastrow = lyxrc.rtl_support && row.endpos() == par.size();
 
-       // If lastrow is false, we don't need to compute
-       // the value of rtl.
-       bool const rtl = lastrow ? text_->isRTL(par) : false;
        if (lastrow &&
            ((rtl  &&  left_side && vc == row.pos() && x < tmpx - 5) ||
             (!rtl && !left_side && vc == end  && x > tmpx + 5))) {
@@ -2012,14 +2014,15 @@ int TextMetrics::leftMargin(int max_width,
                    && par.getInset(pos)->display())
                        && (!(tclass.isDefaultLayout(par.layout())
                 || tclass.isPlainLayout(par.layout()))
-               || buffer.params().paragraph_separation == BufferParams::ParagraphIndentSeparation)
+               || buffer.params().paragraph_separation 
+                               == BufferParams::ParagraphIndentSeparation)
            )
                {
-                       // use the parindent of the layout when the default indentation is used
-                       // otherwise use the indentation set in the document settings
+                       // use the parindent of the layout when the default indentation is
+                       // used otherwise use the indentation set in the document settings
                        if (buffer.params().getIndentation().asLyXCommand() == "default")
-                               l_margin += theFontMetrics(buffer.params().getFont()).signedWidth(
-                               parindent);
+                               l_margin += theFontMetrics(
+                                       buffer.params().getFont()).signedWidth(parindent);
                        else
                                l_margin += buffer.params().getIndentation().inPixels(*bv_);
                }
@@ -2078,7 +2081,7 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type pit, int x, int y) co
                // This is our text.
                && cur.text() == text_
                // if the anchor is outside, this is not our selection
-               && cur.anchor().text() == text_
+               && cur.normalAnchor().text() == text_
                && pit >= sel_beg.pit() && pit <= sel_end.pit();
 
        // We store the begin and end pos of the selection relative to this par
@@ -2129,15 +2132,7 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type pit, int x, int y) co
 
                // Take this opportunity to spellcheck the row contents.
                if (row_has_changed && lyxrc.spellcheck_continuously) {
-                       WordLangTuple wl;
-                       // dummy variable, not used.
-                       static docstring_list suggestions;
-                       pos_type from = row.pos();
-                       pos_type to = row.endpos();
-                       while (from < row.endpos()) {
-                               text_->getPar(pit).spellCheck(from, to, wl, suggestions, false);
-                               from = to + 1;
-                       }
+                       text_->getPar(pit).spellCheck();
                }
 
                // Don't paint the row if a full repaint has not been requested
@@ -2218,7 +2213,7 @@ void TextMetrics::drawRowSelection(PainterInfo & pi, int x, Row const & row,
        cur.boundary(begin_boundary);
        int x1 = cursorX(beg.top(), begin_boundary);
        int x2 = cursorX(end.top(), end_boundary);
-       int const y1 = bv_->getPos(cur, cur.boundary()).y_ - row.ascent();
+       int const y1 = bv_->getPos(cur).y_ - row.ascent();
        int const y2 = y1 + row.height();
 
        int const rm = text_->isMainText() ? bv_->rightMargin() : 0;
@@ -2307,8 +2302,10 @@ void TextMetrics::completionPosAndDim(Cursor const & cur, int & x, int & y,
        wordStart.pos() -= word.length();
 
        // get position on screen of the word start and end
-       Point lxy = cur.bv().getPos(wordStart, false);
-       Point rxy = cur.bv().getPos(bvcur, bvcur.boundary());
+       //FIXME: Is it necessary to explicitly set this to false?
+       wordStart.boundary(false);
+       Point lxy = cur.bv().getPos(wordStart);
+       Point rxy = cur.bv().getPos(bvcur);
 
        // calculate dimensions of the word
        dim = rowHeight(bvcur.pit(), wordStart.pos(), bvcur.pos(), false);