Remove optimization to avoid char and symbol metrics calculation. This was incompatible with the way the font zooming works in LyX.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18266 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Abdelrazak Younes 2007-05-11 14:17:53 +00:00
parent 7831aff546
commit bd3e07179f
4 changed files with 32 additions and 39 deletions

View File

@ -17,9 +17,11 @@
#include "debug.h"
#include "Dimension.h"
#include "support/lstrings.h"
#include "LyXRC.h"
#include "TextPainter.h"
#include "support/lstrings.h"
#include "frontends/FontMetrics.h"
@ -59,12 +61,6 @@ auto_ptr<Inset> InsetMathChar::doClone() const
bool InsetMathChar::metrics(MetricsInfo & mi, Dimension & dim) const
{
if (mi.base.font == font_cache_) {
dim = dim_;
return false;
}
font_cache_ = mi.base.font;
#if 1
if (char_ == '=' && has_math_fonts) {
FontSetChanger dummy(mi.base, "cmr");
@ -92,6 +88,10 @@ bool InsetMathChar::metrics(MetricsInfo & mi, Dimension & dim) const
dim.wid += 2 * theFontMetrics(font_).width(' ');
lyxerr << "InsetMathChar::metrics: " << dim << endl;
#endif
if (dim_ == dim)
return false;
dim_ = dim;
return true;
}

View File

@ -55,8 +55,6 @@ private:
char_type char_;
/// cached kerning for superscript
mutable int kerning_;
///
mutable Font font_cache_;
};
} // namespace lyx

View File

@ -18,7 +18,9 @@
#include "MathParser.h"
#include "MathAtom.h"
#include "LaTeXFeatures.h"
#include "debug.h"
#include "LyXRC.h"
#include "support/textutils.h"
@ -29,18 +31,17 @@ using std::auto_ptr;
InsetMathSymbol::InsetMathSymbol(latexkeys const * l)
: sym_(l), h_(0), scriptable_(false), font_cache_(Font::ALL_IGNORE)
: sym_(l), h_(0), scriptable_(false)
{}
InsetMathSymbol::InsetMathSymbol(char const * name)
: sym_(in_word_set(from_ascii(name))), h_(0), scriptable_(false),
font_cache_(Font::ALL_IGNORE)
: sym_(in_word_set(from_ascii(name))), h_(0), scriptable_(false)
{}
InsetMathSymbol::InsetMathSymbol(docstring const & name)
: sym_(in_word_set(name)), h_(0), scriptable_(false), font_cache_(Font::ALL_IGNORE)
: sym_(in_word_set(name)), h_(0), scriptable_(false)
{}
@ -63,30 +64,22 @@ bool InsetMathSymbol::metrics(MetricsInfo & mi, Dimension & dim) const
// << "' drawn as: '" << sym_->draw
// << "'" << std::endl;
bool dim_unchanged = (mi.base.font == font_cache_);
if (dim_unchanged)
dim = dim_;
else {
font_cache_ = mi.base.font;
int const em = mathed_char_width(mi.base.font, 'M');
FontSetChanger dummy(mi.base, sym_->inset);
mathed_string_dim(mi.base.font, sym_->draw, dim);
docstring::const_reverse_iterator rit = sym_->draw.rbegin();
kerning_ = mathed_char_kerning(mi.base.font, *rit);
// correct height for broken cmex and wasy font
if (sym_->inset == "cmex" || sym_->inset == "wasy") {
h_ = 4 * dim.des / 5;
dim.asc += h_;
dim.des -= h_;
}
// seperate things a bit
if (isRelOp())
dim.wid += static_cast<int>(0.5 * em + 0.5);
else
dim.wid += static_cast<int>(0.1667 * em + 0.5);
dim_ = dim;
int const em = mathed_char_width(mi.base.font, 'M');
FontSetChanger dummy(mi.base, sym_->inset);
mathed_string_dim(mi.base.font, sym_->draw, dim);
docstring::const_reverse_iterator rit = sym_->draw.rbegin();
kerning_ = mathed_char_kerning(mi.base.font, *rit);
// correct height for broken cmex and wasy font
if (sym_->inset == "cmex" || sym_->inset == "wasy") {
h_ = 4 * dim.des / 5;
dim.asc += h_;
dim.des -= h_;
}
// seperate things a bit
if (isRelOp())
dim.wid += static_cast<int>(0.5 * em + 0.5);
else
dim.wid += static_cast<int>(0.1667 * em + 0.5);
scriptable_ = false;
if (mi.base.style == LM_ST_DISPLAY)
@ -94,7 +87,11 @@ bool InsetMathSymbol::metrics(MetricsInfo & mi, Dimension & dim) const
sym_->extra == "funclim")
scriptable_ = true;
return dim_unchanged;
if (dim_ == dim)
return false;
dim_ = dim;
return true;
}

View File

@ -81,8 +81,6 @@ private:
mutable int kerning_;
///
mutable bool scriptable_;
///
mutable Font font_cache_;
};
} // namespace lyx