From bd3e07179ffa4011ce3afe4d1d5583028c734751 Mon Sep 17 00:00:00 2001 From: Abdelrazak Younes Date: Fri, 11 May 2007 14:17:53 +0000 Subject: [PATCH] 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 --- src/mathed/InsetMathChar.cpp | 14 ++++----- src/mathed/InsetMathChar.h | 2 -- src/mathed/InsetMathSymbol.cpp | 53 ++++++++++++++++------------------ src/mathed/InsetMathSymbol.h | 2 -- 4 files changed, 32 insertions(+), 39 deletions(-) diff --git a/src/mathed/InsetMathChar.cpp b/src/mathed/InsetMathChar.cpp index 9db642bf94..389c297815 100644 --- a/src/mathed/InsetMathChar.cpp +++ b/src/mathed/InsetMathChar.cpp @@ -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 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; } diff --git a/src/mathed/InsetMathChar.h b/src/mathed/InsetMathChar.h index bc357bcadb..994185e338 100644 --- a/src/mathed/InsetMathChar.h +++ b/src/mathed/InsetMathChar.h @@ -55,8 +55,6 @@ private: char_type char_; /// cached kerning for superscript mutable int kerning_; - /// - mutable Font font_cache_; }; } // namespace lyx diff --git a/src/mathed/InsetMathSymbol.cpp b/src/mathed/InsetMathSymbol.cpp index 52994700c5..93f9f5e828 100644 --- a/src/mathed/InsetMathSymbol.cpp +++ b/src/mathed/InsetMathSymbol.cpp @@ -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(0.5 * em + 0.5); - else - dim.wid += static_cast(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(0.5 * em + 0.5); + else + dim.wid += static_cast(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; } diff --git a/src/mathed/InsetMathSymbol.h b/src/mathed/InsetMathSymbol.h index beb31d0bff..60f4028fb0 100644 --- a/src/mathed/InsetMathSymbol.h +++ b/src/mathed/InsetMathSymbol.h @@ -81,8 +81,6 @@ private: mutable int kerning_; /// mutable bool scriptable_; - /// - mutable Font font_cache_; }; } // namespace lyx -- 2.39.5