]> git.lyx.org Git - lyx.git/blobdiff - src/Text.cpp
Fulfill promise to Andre: TextClass_ptr --> TextClassPtr.
[lyx.git] / src / Text.cpp
index 019f230152f2754031dac89cd730686e807dfffc..31bc420673d83b99a6374a993b0a2bc4a59f6c9c 100644 (file)
@@ -27,7 +27,6 @@
 #include "BufferView.h"
 #include "Cursor.h"
 #include "ParIterator.h"
-#include "CoordCache.h"
 #include "CutAndPaste.h"
 #include "debug.h"
 #include "DispatchResult.h"
@@ -42,7 +41,6 @@
 #include "Length.h"
 #include "Lexer.h"
 #include "LyXRC.h"
-#include "MetricsInfo.h"
 #include "Paragraph.h"
 #include "paragraph_funcs.h"
 #include "ParagraphParameters.h"
@@ -358,12 +356,6 @@ double Text::spacing(Buffer const & buffer,
 }
 
 
-Color_color Text::backgroundColor() const
-{
-       return Color_color(Color::color(background_color_));
-}
-
-
 void Text::breakParagraph(Cursor & cur, bool keep_layout)
 {
        BOOST_ASSERT(this == cur.text());
@@ -448,6 +440,7 @@ void Text::insertChar(Cursor & cur, char_type c)
 
        recordUndo(cur, Undo::INSERT);
 
+       TextMetrics const & tm = cur.bv().textMetrics(this);
        Buffer const & buffer = cur.buffer();
        Paragraph & par = cur.paragraph();
        // try to remove this
@@ -461,17 +454,17 @@ void Text::insertChar(Cursor & cur, char_type c)
                static docstring const number_unary_operators = from_ascii("+-");
                static docstring const number_seperators = from_ascii(".,:");
 
-               if (current_font.number() == Font::ON) {
+               if (cur.current_font.number() == Font::ON) {
                        if (!isDigit(c) && !contains(number_operators, c) &&
                            !(contains(number_seperators, c) &&
                              cur.pos() != 0 &&
                              cur.pos() != cur.lastpos() &&
-                             getFont(buffer, par, cur.pos()).number() == Font::ON &&
-                             getFont(buffer, par, cur.pos() - 1).number() == Font::ON)
+                             tm.getDisplayFont(pit, cur.pos()).number() == Font::ON &&
+                             tm.getDisplayFont(pit, cur.pos() - 1).number() == Font::ON)
                           )
                                number(cur); // Set current_font.number to OFF
                } else if (isDigit(c) &&
-                          real_current_font.isVisibleRightToLeft()) {
+                          cur.real_current_font.isVisibleRightToLeft()) {
                        number(cur); // Set current_font.number to ON
 
                        if (cur.pos() != 0) {
@@ -481,11 +474,13 @@ void Text::insertChar(Cursor & cur, char_type c)
                                     || par.isSeparator(cur.pos() - 2)
                                     || par.isNewline(cur.pos() - 2))
                                  ) {
-                                       setCharFont(buffer, pit, cur.pos() - 1, current_font);
+                                       setCharFont(buffer, pit, cur.pos() - 1, cur.current_font,
+                                               tm.font_);
                                } else if (contains(number_seperators, c)
                                     && cur.pos() >= 2
-                                    && getFont(buffer, par, cur.pos() - 2).number() == Font::ON) {
-                                       setCharFont(buffer, pit, cur.pos() - 1, current_font);
+                                    && tm.getDisplayFont(pit, cur.pos() - 2).number() == Font::ON) {
+                                       setCharFont(buffer, pit, cur.pos() - 1, cur.current_font,
+                                               tm.font_);
                                }
                        }
                }
@@ -516,8 +511,8 @@ void Text::insertChar(Cursor & cur, char_type c)
        if ((cur.pos() >= 2) && (par.isLineSeparator(cur.pos() - 1))) {
                // get font in front and behind the space in question. But do NOT 
                // use getFont(cur.pos()) because the character c is not inserted yet
-               Font const & pre_space_font  = getFont(buffer, par, cur.pos() - 2);
-               Font const & post_space_font = real_current_font;
+               Font const & pre_space_font  = tm.getDisplayFont(cur.pit(), cur.pos() - 2);
+               Font const & post_space_font = cur.real_current_font;
                bool pre_space_rtl  = pre_space_font.isVisibleRightToLeft();
                bool post_space_rtl = post_space_font.isVisibleRightToLeft();
                
@@ -526,10 +521,10 @@ void Text::insertChar(Cursor & cur, char_type c)
                        // adjacent character whose direction is the paragraph's
                        // direction; don't touch other properties of the font
                        Language const * lang = 
-                               (pre_space_rtl == par.isRightToLeftPar(buffer.params())) ?
+                               (pre_space_rtl == par.isRTL(buffer.params())) ?
                                pre_space_font.language() : post_space_font.language();
 
-                       Font space_font = getFont(buffer, par, cur.pos() - 1);
+                       Font space_font = tm.getDisplayFont(cur.pit(), cur.pos() - 1);
                        space_font.setLanguage(lang);
                        par.setFont(cur.pos() - 1, space_font);
                }
@@ -566,7 +561,7 @@ void Text::insertChar(Cursor & cur, char_type c)
                }
        }
 
-       par.insertChar(cur.pos(), c, current_font, cur.buffer().params().trackChanges);
+       par.insertChar(cur.pos(), c, cur.current_font, cur.buffer().params().trackChanges);
        checkBufferStructure(cur.buffer(), cur);
 
 //             cur.updateFlags(Update::Force);
@@ -1102,7 +1097,7 @@ bool Text::backspace(Cursor & cur)
        }
 
        if (cur.pos() == cur.lastpos())
-               setCurrentFont(cur);
+               cur.setCurrentFont();
 
        needsUpdate |= handleBibitems(cur);
 
@@ -1146,7 +1141,7 @@ bool Text::dissolveInset(Cursor & cur) {
                                        b.getLanguage());
                }
 
-               pasteParagraphList(cur, plist, b.params().getTextClass_ptr(),
+               pasteParagraphList(cur, plist, b.params().getTextClassPtr(),
                                   b.errorList("Paste"));
                // restore position
                cur.pit() = std::min(cur.lastpit(), spit);
@@ -1289,7 +1284,7 @@ docstring Text::currentState(Cursor & cur)
        // I think we should only show changes from the default
        // font. (Asger)
        // No, from the document font (MV)
-       Font font = real_current_font;
+       Font font = cur.real_current_font;
        font.reduce(buf.params().getFont());
 
        os << bformat(_("Font: %1$s"), font.stateText(&buf.params()));