diff --git a/src/ChangeLog b/src/ChangeLog index 8f5e741b9c..6eef67e638 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,17 @@ +2006-02-05 Martin Vermeer + + * buffer.C: + * bufferparams.[Ch]: + * lyxtext.h: + * paragraph.[Ch]: + * paragraph_funcs.C + * rowpainter.C: + * text.C: + * text2.C: + * text3.C: Fix bug 2115: blue language lines (for default font) + popping up when the documnent font is different. This includes work + by Georg Baum. + 2006-02-02 Georg Baum * exporter.C (Backends): Add "lyx" backend diff --git a/src/buffer.C b/src/buffer.C index d6929614c1..6e6565c029 100644 --- a/src/buffer.C +++ b/src/buffer.C @@ -1305,6 +1305,9 @@ void Buffer::changeLanguage(Language const * from, Language const * to) for_each(par_iterator_begin(), par_iterator_end(), bind(&Paragraph::changeLanguage, _1, params(), from, to)); + + text().current_font.setLanguage(to); + text().real_current_font.setLanguage(to); } diff --git a/src/bufferparams.C b/src/bufferparams.C index be159dc2a3..41abadeb94 100644 --- a/src/bufferparams.C +++ b/src/bufferparams.C @@ -1092,6 +1092,14 @@ LyXTextClass const & BufferParams::getLyXTextClass() const } +LyXFont const BufferParams::getFont() const +{ + LyXFont f = getLyXTextClass().defaultfont(); + f.setLanguage(language); + return f; +} + + void BufferParams::readPreamble(LyXLex & lex) { if (lex.getString() != "\\begin_preamble") diff --git a/src/bufferparams.h b/src/bufferparams.h index a42165538a..5951f83011 100644 --- a/src/bufferparams.h +++ b/src/bufferparams.h @@ -115,6 +115,9 @@ public: /// LyXTextClass const & getLyXTextClass() const; + /// returns the main font for the buffer (document) + LyXFont const getFont() const; + /* this are for the PaperLayout */ /// the papersize PAPER_SIZE papersize; diff --git a/src/insets/ChangeLog b/src/insets/ChangeLog index 67523c4447..89d6064c64 100644 --- a/src/insets/ChangeLog +++ b/src/insets/ChangeLog @@ -1,3 +1,9 @@ +2006-02-05 Martin Vermeer + + * insettext.C: Fix bug 2115: blue language lines (for default font) + popping up when the documnent font is different. This includes + work by Georg Baum. + 2006-01-11 Georg Baum * insetgraphics.C (findTargetFormat): document diff --git a/src/insets/insettext.C b/src/insets/insettext.C index e01bc6a287..99ff0b3186 100644 --- a/src/insets/insettext.C +++ b/src/insets/insettext.C @@ -80,6 +80,9 @@ InsetText::InsetText(BufferParams const & bp) paragraphs().back().layout(bp.getLyXTextClass().defaultLayout()); if (bp.tracking_changes) paragraphs().back().trackChanges(); + // Dispose of the infamous L-shaped cursor. + text_.current_font.setLanguage(bp.language); + text_.real_current_font.setLanguage(bp.language); init(); } @@ -91,6 +94,10 @@ InsetText::InsetText(InsetText const & in) drawFrame_ = in.drawFrame_; frame_color_ = in.frame_color_; text_.paragraphs() = in.text_.paragraphs(); + // Hand current buffer language down to "cloned" textinsets + // e.g. tabular cells + text_.current_font = in.text_.current_font; + text_.real_current_font = in.text_.real_current_font; init(); } @@ -176,6 +183,7 @@ void InsetText::metrics(MetricsInfo & mi, Dimension & dim) const setViewCache(mi.base.bv); mi.base.textwidth -= 2 * border_; font_ = mi.base.font; + // Hand font through to contained lyxtext: text_.font_ = mi.base.font; text_.metrics(mi, dim); dim.asc += border_; diff --git a/src/lyxtext.h b/src/lyxtext.h index 8b0242bb3f..db3b180bc1 100644 --- a/src/lyxtext.h +++ b/src/lyxtext.h @@ -341,10 +341,6 @@ public: LyXFont current_font; /// the current font LyXFont real_current_font; - /// our buffer's default layout font. This is textclass specific - /* This is actually never initialized! Should be replaced by a - * defaultfont() method that looks at the textclass (easy). [JMarc]*/ - LyXFont defaultfont_; /// int background_color_; diff --git a/src/paragraph.C b/src/paragraph.C index 227568b43f..8f136352fe 100644 --- a/src/paragraph.C +++ b/src/paragraph.C @@ -356,12 +356,12 @@ FontSpan Paragraph::fontSpan(lyx::pos_type pos) const // Gets uninstantiated font setting at position 0 -LyXFont const Paragraph::getFirstFontSettings() const +LyXFont const Paragraph::getFirstFontSettings(BufferParams const & bparams) const { if (!empty() && !pimpl_->fontlist.empty()) return pimpl_->fontlist[0].font(); - return LyXFont(LyXFont::ALL_INHERIT); + return LyXFont(LyXFont::ALL_INHERIT, bparams.language); } @@ -1494,7 +1494,7 @@ Language const * Paragraph::getParLanguage(BufferParams const & bparams) const { if (!empty()) - return getFirstFontSettings().language(); + return getFirstFontSettings(bparams).language(); #ifdef WITH_WARNINGS #warning FIXME we should check the prev par as well (Lgb) #endif diff --git a/src/paragraph.h b/src/paragraph.h index 6a9e027244..3cf48bea42 100644 --- a/src/paragraph.h +++ b/src/paragraph.h @@ -273,7 +273,7 @@ public: LyXFont const getFontSettings(BufferParams const &, lyx::pos_type pos) const; /// - LyXFont const getFirstFontSettings() const; + LyXFont const getFirstFontSettings(BufferParams const &) const; /** Get fully instantiated font. If pos == -1, use the layout font attached to this paragraph. diff --git a/src/paragraph_funcs.C b/src/paragraph_funcs.C index a43217cc05..36bed60fe6 100644 --- a/src/paragraph_funcs.C +++ b/src/paragraph_funcs.C @@ -157,7 +157,7 @@ void breakParagraph(BufferParams const & bparams, // Make sure that we keep the language when // breaking paragrpah. if (tmp->empty()) { - LyXFont changed = tmp->getFirstFontSettings(); + LyXFont changed = tmp->getFirstFontSettings(bparams); LyXFont old = par.getFontSettings(bparams, par.size()); changed.setLanguage(old.language()); tmp->setFont(0, changed); diff --git a/src/rowpainter.C b/src/rowpainter.C index 405914173a..8d56f11cdf 100644 --- a/src/rowpainter.C +++ b/src/rowpainter.C @@ -159,7 +159,7 @@ void RowPainter::paintInset(pos_type const pos, LyXFont const & font) // FIXME: We should always use font, see documentation of // noFontChange() in insetbase.h. pi.base.font = inset->noFontChange() ? - bv_.buffer()->params().getLyXTextClass().defaultfont() : + bv_.buffer()->params().getFont() : font; pi.ltr_pos = (text_.bidi.level(pos) % 2 == 0); pi.erased_ = erased_ || isDeletedText(par_, pos); @@ -658,7 +658,8 @@ void RowPainter::paintText() if (running_strikeout && (highly_editable_inset || !is_struckout)) { // Calculate 1/3 height of the buffer's default font int const middle = - yo_ - font_metrics::maxAscent(text_.defaultfont_) / 3; + yo_ - + font_metrics::maxAscent(bv_.buffer()->params().getFont()) / 3; pain_.line(last_strikeout_x, middle, int(x_), middle, LColor::strikeout, Painter::line_solid, Painter::line_thin); running_strikeout = false; @@ -711,7 +712,8 @@ void RowPainter::paintText() if (running_strikeout) { // calculate 1/3 height of the buffer's default font int const middle = - yo_ - font_metrics::maxAscent(text_.defaultfont_) / 3; + yo_ - + font_metrics::maxAscent(bv_.buffer()->params().getFont()) / 3; pain_.line(last_strikeout_x, middle, int(x_), middle, LColor::strikeout, Painter::line_solid, Painter::line_thin); running_strikeout = false; diff --git a/src/text.C b/src/text.C index 0dbaa9dd7e..96849d22e0 100644 --- a/src/text.C +++ b/src/text.C @@ -1692,15 +1692,14 @@ bool LyXText::redoParagraph(pit_type const pit) // redo insets // FIXME: We should always use getFont(), see documentation of // noFontChange() in insetbase.h. - LyXFont const tclassfont = - bv()->buffer()->params().getLyXTextClass().defaultfont(); + LyXFont const bufferfont = bv()->buffer()->params().getFont(); InsetList::iterator ii = par.insetlist.begin(); InsetList::iterator iend = par.insetlist.end(); for (; ii != iend; ++ii) { Dimension dim; int const w = maxwidth_ - leftMargin(pit, ii->pos) - rightMargin(par); LyXFont const & font = ii->inset->noFontChange() ? - tclassfont : + bufferfont : getFont(par, ii->pos); MetricsInfo mi(bv(), font, w); ii->inset->metrics(mi, dim); @@ -2201,8 +2200,9 @@ string LyXText::currentState(LCursor & cur) // I think we should only show changes from the default // font. (Asger) + // No, from the document font (MV) LyXFont font = real_current_font; - font.reduce(buf.params().getLyXTextClass().defaultfont()); + font.reduce(buf.params().getFont()); // avoid _(...) re-entrance problem string const s = font.stateText(&buf.params()); diff --git a/src/text2.C b/src/text2.C index 286a31ccf1..34947beabf 100644 --- a/src/text2.C +++ b/src/text2.C @@ -207,7 +207,7 @@ LyXFont LyXText::getFont(Paragraph const & par, pos_type const pos) const font.realize(outerFont(pit, pars_)); // Realize with the fonts of lesser depth. - font.realize(defaultfont_); + font.realize(params.getFont()); return font; } @@ -221,7 +221,7 @@ LyXFont LyXText::getFont(Paragraph const & par, pos_type const pos) const // font. void LyXText::applyOuterFont(LyXFont & font) const { LyXFont lf(font_); - lf.reduce(defaultfont_); + lf.reduce(bv()->buffer()->params().getFont()); lf.realize(font); lf.setLanguage(font.language()); font = lf; @@ -238,7 +238,7 @@ LyXFont LyXText::getLayoutFont(pit_type const pit) const LyXFont font = layout->font; // Realize with the fonts of lesser depth. //font.realize(outerFont(pit, paragraphs())); - font.realize(defaultfont_); + font.realize(bv()->buffer()->params().getFont()); return font; } @@ -253,7 +253,7 @@ LyXFont LyXText::getLabelFont(Paragraph const & par) const LyXFont font = layout->labelfont; // Realize with the fonts of lesser depth. - font.realize(defaultfont_); + font.realize(bv()->buffer()->params().getFont()); return font; } @@ -289,7 +289,7 @@ void LyXText::setCharFont(pit_type pit, pos_type pos, LyXFont const & fnt) if (!isMainText()) layoutfont.realize(font_); - layoutfont.realize(defaultfont_); + layoutfont.realize(bv()->buffer()->params().getFont()); // Now, reduce font against full layout font font.reduce(layoutfont); diff --git a/src/text3.C b/src/text3.C index bf9f099d7c..1dc903f7cf 100644 --- a/src/text3.C +++ b/src/text3.C @@ -1114,12 +1114,6 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd) cur.clearSelection(); LyXFont const old_font = real_current_font; - // Prevents language turds in new lyxtexts under non-english - BufferParams const & bufparams = cur.buffer().params(); - Language const * lang = cur.paragraph().getParLanguage(bufparams); - current_font.setLanguage(lang); - real_current_font.setLanguage(lang); - string::const_iterator cit = cmd.argument.begin(); string::const_iterator end = cmd.argument.end(); for (; cit != end; ++cit)