Fix bug 2115 ("blueline bug")

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@10808 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Martin Vermeer 2006-02-05 13:20:16 +00:00
parent e4ddd93da4
commit 6688a55908
14 changed files with 61 additions and 27 deletions

View File

@ -1,3 +1,17 @@
2006-02-05 Martin Vermeer <martin.vermeer@hut.fi>
* 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 <Georg.Baum@post.rwth-aachen.de>
* exporter.C (Backends): Add "lyx" backend

View File

@ -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);
}

View File

@ -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")

View File

@ -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;

View File

@ -1,3 +1,9 @@
2006-02-05 Martin Vermeer <martin.vermeer@hut.fi>
* 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 <Georg.Baum@post.rwth-aachen.de>
* insetgraphics.C (findTargetFormat): document

View File

@ -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_;

View File

@ -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_;

View File

@ -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

View File

@ -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.

View File

@ -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);

View File

@ -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;

View File

@ -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());

View File

@ -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);

View File

@ -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)