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

View File

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

View File

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