* dimension.h: new operator!=() and operator=()

* InsetBase and all derivates:
  - metrics(MetricsInfo & mi, Dimension & dim) now returns a bool (true if metrics changed).

* MathData and all derivates:
  - metrics(MetricsInfo & mi, Dimension & dim): ditto.

* RenderBase and all derivates:
  - metrics(MetricsInfo & mi, Dimension & dim): ditto.

* lyxtext.h/text.C:
  - LyXText::metrics(MetricsInfo & mi, Dimension & dim): ditto.
  - LyXText::redoParagraph(): take into account potential change in inset metrics.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@16091 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Abdelrazak Younes 2006-11-28 15:15:49 +00:00
parent 0748904328
commit e24bf64c68
174 changed files with 461 additions and 216 deletions

View File

@ -25,6 +25,12 @@ public:
/// initialize data /// initialize data
Dimension(int w, int a, int d) : wid(w), asc(a), des(d) {} Dimension(int w, int a, int d) : wid(w), asc(a), des(d) {}
Dimension & operator=(Dimension const & dim) {
wid = dim.wid;
asc = dim.asc;
des = dim.des;
return *this;
}
/// glue horizontally /// glue horizontally
void operator+=(Dimension const & dim); void operator+=(Dimension const & dim);
/// set to empty box /// set to empty box
@ -66,7 +72,14 @@ public:
inline inline
bool operator==(Dimension const & a, Dimension const & b) bool operator==(Dimension const & a, Dimension const & b)
{ {
return a.wid == b.wid && a.asc == b.asc && a.des ==b.des ; return a.wid == b.wid && a.asc == b.asc && a.des == b.des ;
}
inline
bool operator!=(Dimension const & a, Dimension const & b)
{
return a.wid != b.wid || a.asc != b.asc || a.des != b.des ;
} }

View File

@ -56,8 +56,6 @@ public:
protected: protected:
/// ///
InsetOld(InsetOld const & in); InsetOld(InsetOld const & in);
///
mutable Dimension dim_;
private: private:
InsetOld & operator=(InsetOld const &) const; InsetOld & operator=(InsetOld const &) const;

View File

@ -12,9 +12,10 @@
#ifndef INSETBASE_H #ifndef INSETBASE_H
#define INSETBASE_H #define INSETBASE_H
#include "support/docstream.h"
#include "changes.h" #include "changes.h"
#include "dimension.h"
#include "support/docstream.h"
#include <memory> #include <memory>
#include <vector> #include <vector>
@ -103,7 +104,8 @@ public:
virtual InsetBase * editXY(LCursor & cur, int x, int y); virtual InsetBase * editXY(LCursor & cur, int x, int y);
/// compute the size of the object returned in dim /// compute the size of the object returned in dim
virtual void metrics(MetricsInfo & mi, Dimension & dim) const = 0; /// \retval true if metrics changed.
virtual bool metrics(MetricsInfo & mi, Dimension & dim) const = 0;
/// draw inset and update (xo, yo)-cache /// draw inset and update (xo, yo)-cache
virtual void draw(PainterInfo & pi, int x, int y) const = 0; virtual void draw(PainterInfo & pi, int x, int y) const = 0;
/// draw inset selection if necessary /// draw inset selection if necessary
@ -443,6 +445,9 @@ protected:
* \sa getStatus * \sa getStatus
*/ */
virtual void doDispatch(LCursor & cur, FuncRequest & cmd); virtual void doDispatch(LCursor & cur, FuncRequest & cmd);
/// Cached dimensions of the inset.
mutable Dimension dim_;
private: private:
virtual std::auto_ptr<InsetBase> doClone() const = 0; virtual std::auto_ptr<InsetBase> doClone() const = 0;
}; };

View File

@ -169,13 +169,15 @@ void InsetBox::setButtonLabel()
} }
void InsetBox::metrics(MetricsInfo & m, Dimension & dim) const bool InsetBox::metrics(MetricsInfo & m, Dimension & dim) const
{ {
MetricsInfo mi = m; MetricsInfo mi = m;
if (params_.inner_box || params_.special != "width") if (params_.inner_box || params_.special != "width")
mi.base.textwidth = params_.width.inPixels(m.base.textwidth); mi.base.textwidth = params_.width.inPixels(m.base.textwidth);
InsetCollapsable::metrics(mi, dim); InsetCollapsable::metrics(mi, dim);
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -72,7 +72,7 @@ public:
/// ///
void setButtonLabel(); void setButtonLabel();
/// ///
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
/// show the Box dialog /// show the Box dialog
bool showInsetDialog(BufferView * bv) const; bool showInsetDialog(BufferView * bv) const;
/// ///

View File

@ -119,7 +119,7 @@ void InsetCaption::setLabel(LCursor & cur) const
} }
void InsetCaption::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetCaption::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
mi.base.textwidth -= 2 * TEXT_TO_INSET_OFFSET; mi.base.textwidth -= 2 * TEXT_TO_INSET_OFFSET;
LCursor cur = mi.base.bv->cursor(); LCursor cur = mi.base.bv->cursor();
@ -135,7 +135,9 @@ void InsetCaption::metrics(MetricsInfo & mi, Dimension & dim) const
dim.des += TEXT_TO_INSET_OFFSET; dim.des += TEXT_TO_INSET_OFFSET;
dim.wid += 2 * TEXT_TO_INSET_OFFSET; dim.wid += 2 * TEXT_TO_INSET_OFFSET;
mi.base.textwidth += 2 * TEXT_TO_INSET_OFFSET; mi.base.textwidth += 2 * TEXT_TO_INSET_OFFSET;
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -43,7 +43,7 @@ public:
/// ///
bool descendable() const { return true; } bool descendable() const { return true; }
/// ///
virtual void metrics(MetricsInfo & mi, Dimension & dim) const; virtual bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
virtual void draw(PainterInfo & pi, int x, int y) const; virtual void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -139,7 +139,7 @@ void InsetCharStyle::read(Buffer const & buf, LyXLex & lex)
} }
void InsetCharStyle::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetCharStyle::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
LyXFont tmpfont = mi.base.font; LyXFont tmpfont = mi.base.font;
getDrawFont(mi.base.font); getDrawFont(mi.base.font);
@ -168,9 +168,11 @@ void InsetCharStyle::metrics(MetricsInfo & mi, Dimension & dim) const
dim.des += TEXT_TO_INSET_OFFSET; dim.des += TEXT_TO_INSET_OFFSET;
dim.wid += 2 * TEXT_TO_INSET_OFFSET; dim.wid += 2 * TEXT_TO_INSET_OFFSET;
mi.base.textwidth += 2 * TEXT_TO_INSET_OFFSET; mi.base.textwidth += 2 * TEXT_TO_INSET_OFFSET;
dim_ = dim;
if (params_.show_label) if (params_.show_label)
dim_.des += ascent(); dim.des += ascent();
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
} }

View File

@ -68,7 +68,7 @@ public:
/// ///
void read(Buffer const & buf, LyXLex & lex); void read(Buffer const & buf, LyXLex & lex);
/// ///
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
/// ///
void draw(PainterInfo &, int, int) const; void draw(PainterInfo &, int, int) const;
/// ///

View File

@ -132,7 +132,7 @@ Dimension InsetCollapsable::dimensionCollapsed() const
} }
void InsetCollapsable::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetCollapsable::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
autoOpen_ = mi.base.bv->cursor().isInside(this); autoOpen_ = mi.base.bv->cursor().isInside(this);
mi.base.textwidth -= 2 * TEXT_TO_INSET_OFFSET; mi.base.textwidth -= 2 * TEXT_TO_INSET_OFFSET;
@ -162,7 +162,9 @@ void InsetCollapsable::metrics(MetricsInfo & mi, Dimension & dim) const
dim.des += TEXT_TO_INSET_OFFSET; dim.des += TEXT_TO_INSET_OFFSET;
dim.wid += 2 * TEXT_TO_INSET_OFFSET; dim.wid += 2 * TEXT_TO_INSET_OFFSET;
mi.base.textwidth += 2 * TEXT_TO_INSET_OFFSET; mi.base.textwidth += 2 * TEXT_TO_INSET_OFFSET;
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -46,7 +46,7 @@ public:
/// ///
void write(Buffer const &, std::ostream &) const; void write(Buffer const &, std::ostream &) const;
/// ///
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -46,7 +46,7 @@ InsetCommand::~InsetCommand()
} }
void InsetCommand::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetCommand::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
if (updateButtonLabel_) { if (updateButtonLabel_) {
updateButtonLabel_ = false; updateButtonLabel_ = false;
@ -54,7 +54,9 @@ void InsetCommand::metrics(MetricsInfo & mi, Dimension & dim) const
editable() != NOT_EDITABLE); editable() != NOT_EDITABLE);
} }
button_.metrics(mi, dim); button_.metrics(mi, dim);
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -38,7 +38,7 @@ public:
/// ///
~InsetCommand(); ~InsetCommand();
/// ///
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -397,14 +397,16 @@ bool InsetERT::insetAllowed(InsetBase::Code /* code */) const
} }
void InsetERT::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetERT::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
LyXFont tmpfont = mi.base.font; LyXFont tmpfont = mi.base.font;
getDrawFont(mi.base.font); getDrawFont(mi.base.font);
mi.base.font.realize(tmpfont); mi.base.font.realize(tmpfont);
InsetCollapsable::metrics(mi, dim); InsetCollapsable::metrics(mi, dim);
mi.base.font = tmpfont; mi.base.font = tmpfont;
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -63,7 +63,7 @@ public:
/// ///
void validate(LaTeXFeatures &) const {} void validate(LaTeXFeatures &) const {}
/// ///
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -482,10 +482,12 @@ void InsetExternal::edit(LCursor & cur, bool)
} }
void InsetExternal::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetExternal::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
renderer_->metrics(mi, dim); renderer_->metrics(mi, dim);
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -116,7 +116,7 @@ public:
virtual EDITABLE editable() const { return IS_EDITABLE; } virtual EDITABLE editable() const { return IS_EDITABLE; }
/// ///
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -44,13 +44,15 @@ InsetFootlike::InsetFootlike(InsetFootlike const & in)
} }
void InsetFootlike::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetFootlike::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
LyXFont tmpfont = mi.base.font; LyXFont tmpfont = mi.base.font;
mi.base.font = mi.base.bv->buffer()->params().getFont(); mi.base.font = mi.base.bv->buffer()->params().getFont();
InsetCollapsable::metrics(mi, dim); InsetCollapsable::metrics(mi, dim);
mi.base.font = tmpfont; mi.base.font = tmpfont;
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -27,7 +27,7 @@ public:
/// ///
InsetFootlike(InsetFootlike const &); InsetFootlike(InsetFootlike const &);
/// ///
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -234,10 +234,12 @@ void InsetGraphics::edit(LCursor & cur, bool)
} }
void InsetGraphics::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetGraphics::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
graphic_->metrics(mi, dim); graphic_->metrics(mi, dim);
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -35,7 +35,7 @@ public:
/// ///
~InsetGraphics(); ~InsetGraphics();
/// ///
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
/// ///
EDITABLE editable() const; EDITABLE editable() const;
/// ///

View File

@ -32,12 +32,14 @@ std::auto_ptr<InsetBase> InsetHFill::doClone() const
} }
void InsetHFill::metrics(MetricsInfo &, Dimension & dim) const bool InsetHFill::metrics(MetricsInfo &, Dimension & dim) const
{ {
dim.wid = 3; dim.wid = 3;
dim.asc = 3; dim.asc = 3;
dim.des = 3; dim.des = 3;
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -23,7 +23,7 @@ public:
/// ///
InsetHFill(); InsetHFill();
/// ///
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
/// ///
docstring const getScreenLabel(Buffer const &) const; docstring const getScreenLabel(Buffer const &) const;
/// ///

View File

@ -648,7 +648,7 @@ InsetInclude::getBibfilesCache(Buffer const & buffer) const
} }
void InsetInclude::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetInclude::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
BOOST_ASSERT(mi.base.bv && mi.base.bv->buffer()); BOOST_ASSERT(mi.base.bv && mi.base.bv->buffer());
@ -673,7 +673,9 @@ void InsetInclude::metrics(MetricsInfo & mi, Dimension & dim) const
Box b(0, dim.wid, -dim.asc, dim.des); Box b(0, dim.wid, -dim.asc, dim.des);
button_.setBox(b); button_.setBox(b);
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -35,7 +35,7 @@ public:
~InsetInclude(); ~InsetInclude();
/// Override these InsetButton methods if Previewing /// Override these InsetButton methods if Previewing
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -242,7 +242,7 @@ void InsetLatexAccent::checkContents()
} }
void InsetLatexAccent::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetLatexAccent::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
LyXFont & font = mi.base.font; LyXFont & font = mi.base.font;
frontend::FontMetrics const & fm = theFontMetrics(font); frontend::FontMetrics const & fm = theFontMetrics(font);
@ -273,7 +273,9 @@ void InsetLatexAccent::metrics(MetricsInfo & mi, Dimension & dim) const
docstring dcon(contents.begin(), contents.end()); docstring dcon(contents.begin(), contents.end());
dim.wid = fm.width(dcon) + 4; dim.wid = fm.width(dcon) + 4;
} }
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -36,7 +36,7 @@ public:
/// ///
explicit InsetLatexAccent(std::string const & str); explicit InsetLatexAccent(std::string const & str);
/// ///
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -42,12 +42,14 @@ void InsetLine::write(Buffer const &, ostream & os) const
} }
void InsetLine::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetLine::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
dim.asc = 3; dim.asc = 3;
dim.des = 3; dim.des = 3;
dim.wid = mi.base.textwidth; dim.wid = mi.base.textwidth;
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -25,7 +25,7 @@ public:
InsetBase::Code lyxCode() const { return InsetBase::LINE_CODE; } InsetBase::Code lyxCode() const { return InsetBase::LINE_CODE; }
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;

View File

@ -41,13 +41,15 @@ void InsetNewline::write(Buffer const &, ostream & os) const
} }
void InsetNewline::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetNewline::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
frontend::FontMetrics const & fm = theFontMetrics(mi.base.font); frontend::FontMetrics const & fm = theFontMetrics(mi.base.font);
dim.asc = fm.maxAscent(); dim.asc = fm.maxAscent();
dim.des = fm.maxDescent(); dim.des = fm.maxDescent();
dim.wid = fm.width('n'); dim.wid = fm.width('n');
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -25,7 +25,7 @@ public:
InsetBase::Code lyxCode() const { return InsetBase::NEWLINE_CODE; } InsetBase::Code lyxCode() const { return InsetBase::NEWLINE_CODE; }
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
virtual void draw(PainterInfo & pi, int x, int y) const; virtual void draw(PainterInfo & pi, int x, int y) const;

View File

@ -42,12 +42,14 @@ void InsetPagebreak::write(Buffer const &, ostream & os) const
} }
void InsetPagebreak::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetPagebreak::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
dim.asc = defaultRowHeight(); dim.asc = defaultRowHeight();
dim.des = defaultRowHeight(); dim.des = defaultRowHeight();
dim.wid = mi.base.textwidth; dim.wid = mi.base.textwidth;
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -25,7 +25,7 @@ public:
InsetBase::Code lyxCode() const { return InsetBase::LINE_CODE; } InsetBase::Code lyxCode() const { return InsetBase::LINE_CODE; }
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;

View File

@ -221,7 +221,7 @@ docstring const InsetQuotes::dispString(Language const * loclang) const
} }
void InsetQuotes::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetQuotes::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
LyXFont & font = mi.base.font; LyXFont & font = mi.base.font;
frontend::FontMetrics const & fm = frontend::FontMetrics const & fm =
@ -239,7 +239,9 @@ void InsetQuotes::metrics(MetricsInfo & mi, Dimension & dim) const
else else
dim.wid += fm.width(','); dim.wid += fm.width(',');
} }
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -74,7 +74,7 @@ public:
/// Direct access to inner/outer quotation marks /// Direct access to inner/outer quotation marks
InsetQuotes(char_type c, quote_language l, quote_times t); InsetQuotes(char_type c, quote_language l, quote_times t);
/// ///
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
#if 0 #if 0

View File

@ -48,7 +48,7 @@ InsetSpace::Kind InsetSpace::kind() const
} }
void InsetSpace::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetSpace::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
frontend::FontMetrics const & fm = frontend::FontMetrics const & fm =
theFontMetrics(mi.base.font); theFontMetrics(mi.base.font);
@ -75,7 +75,9 @@ void InsetSpace::metrics(MetricsInfo & mi, Dimension & dim) const
dim.wid = 10; dim.wid = 10;
break; break;
} }
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -56,7 +56,7 @@ public:
/// ///
Kind kind() const; Kind kind() const;
/// ///
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -42,7 +42,7 @@ InsetSpecialChar::Kind InsetSpecialChar::kind() const
} }
void InsetSpecialChar::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetSpecialChar::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
frontend::FontMetrics const & fm = frontend::FontMetrics const & fm =
theFontMetrics(mi.base.font); theFontMetrics(mi.base.font);
@ -61,7 +61,9 @@ void InsetSpecialChar::metrics(MetricsInfo & mi, Dimension & dim) const
dim.wid = fm.width(ds); dim.wid = fm.width(ds);
if (kind_ == HYPHENATION && dim.wid > 5) if (kind_ == HYPHENATION && dim.wid > 5)
dim.wid -= 2; // to make it look shorter dim.wid -= 2; // to make it look shorter
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -48,7 +48,7 @@ public:
/// ///
Kind kind() const; Kind kind() const;
/// ///
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -246,7 +246,7 @@ void InsetTabular::read(Buffer const & buf, LyXLex & lex)
} }
void InsetTabular::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetTabular::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
//lyxerr << "InsetTabular::metrics: " << mi.base.bv << " width: " << //lyxerr << "InsetTabular::metrics: " << mi.base.bv << " width: " <<
// mi.base.textwidth << "\n"; // mi.base.textwidth << "\n";
@ -300,7 +300,9 @@ void InsetTabular::metrics(MetricsInfo & mi, Dimension & dim) const
dim.asc = tabular.getAscentOfRow(0); dim.asc = tabular.getAscentOfRow(0);
dim.des = tabular.getHeightOfTabular() - dim.asc; dim.des = tabular.getHeightOfTabular() - dim.asc;
dim.wid = tabular.getWidthOfTabular() + 2 * ADD_TO_TABULAR_WIDTH; dim.wid = tabular.getWidthOfTabular() + 2 * ADD_TO_TABULAR_WIDTH;
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -60,7 +60,7 @@ public:
/// ///
void write(Buffer const &, std::ostream &) const; void write(Buffer const &, std::ostream &) const;
/// ///
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -164,7 +164,7 @@ void InsetText::read(Buffer const & buf, LyXLex & lex)
} }
void InsetText::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetText::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
//lyxerr << "InsetText::metrics: width: " << mi.base.textwidth << endl; //lyxerr << "InsetText::metrics: width: " << mi.base.textwidth << endl;
mi.base.textwidth -= 2 * border_; mi.base.textwidth -= 2 * border_;
@ -176,7 +176,9 @@ void InsetText::metrics(MetricsInfo & mi, Dimension & dim) const
dim.des += border_; dim.des += border_;
dim.wid += 2 * border_; dim.wid += 2 * border_;
mi.base.textwidth += 2 * border_; mi.base.textwidth += 2 * border_;
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -50,7 +50,7 @@ public:
/// ///
void write(Buffer const & buf, std::ostream & os) const; void write(Buffer const & buf, std::ostream & os) const;
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// draw inset selection /// draw inset selection

View File

@ -69,12 +69,14 @@ auto_ptr<InsetBase> InsetTheorem::doClone() const
return result; return result;
} }
void InsetTheorem::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetTheorem::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
InsetCollapsable::metrics(mi, dim); InsetCollapsable::metrics(mi, dim);
center_indent_ = (mi.base.textwidth - dim.wid) / 2; center_indent_ = (mi.base.textwidth - dim.wid) / 2;
dim.wid = mi.base.textwidth; dim.wid = mi.base.textwidth;
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -30,7 +30,7 @@ public:
/// ///
Inset::Code lyxCode() const { return Inset::THEOREM_CODE; } Inset::Code lyxCode() const { return Inset::THEOREM_CODE; }
/// ///
void metrics(MetricsInfo &, Dimension &) const; bool metrics(MetricsInfo &, Dimension &) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -116,7 +116,7 @@ int const arrow_size = 4;
} }
void InsetVSpace::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetVSpace::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
int height = 3 * arrow_size; int height = 3 * arrow_size;
if (space_.length().len().value() >= 0.0) if (space_.length().len().value() >= 0.0)
@ -136,7 +136,9 @@ void InsetVSpace::metrics(MetricsInfo & mi, Dimension & dim) const
dim.asc = height / 2 + (a - d) / 2; // align cursor with the dim.asc = height / 2 + (a - d) / 2; // align cursor with the
dim.des = height - dim.asc; // label text dim.des = height - dim.asc; // label text
dim.wid = ADD_TO_VSPACE_WIDTH + 2 * arrow_size + 5 + w; dim.wid = ADD_TO_VSPACE_WIDTH + 2 * arrow_size + 5 + w;
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -29,7 +29,7 @@ public:
/// ///
~InsetVSpace(); ~InsetVSpace();
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -34,8 +34,9 @@ public:
virtual std::auto_ptr<RenderBase> clone(InsetBase const *) const = 0; virtual std::auto_ptr<RenderBase> clone(InsetBase const *) const = 0;
/// compute the size of the object returned in dim /// compute the size of the object returned in dim.
virtual void metrics(MetricsInfo & mi, Dimension & dim) const = 0; /// \retval true if the metrics has changed.
virtual bool metrics(MetricsInfo & mi, Dimension & dim) const = 0;
/// draw inset and update (xo, yo)-cache /// draw inset and update (xo, yo)-cache
virtual void draw(PainterInfo & pi, int x, int y) const = 0; virtual void draw(PainterInfo & pi, int x, int y) const = 0;

View File

@ -43,7 +43,7 @@ void RenderButton::update(docstring const & text, bool editable)
} }
void RenderButton::metrics(MetricsInfo &, Dimension & dim) const bool RenderButton::metrics(MetricsInfo &, Dimension & dim) const
{ {
LyXFont font(LyXFont::ALL_SANE); LyXFont font(LyXFont::ALL_SANE);
font.decSize(); font.decSize();
@ -56,6 +56,10 @@ void RenderButton::metrics(MetricsInfo &, Dimension & dim) const
fm.rectText(text_, dim.wid, dim.asc, dim.des); fm.rectText(text_, dim.wid, dim.asc, dim.des);
dim.wid += 4; dim.wid += 4;
if (dim_ == dim)
return false;
dim_ = dim;
return true;
} }

View File

@ -28,7 +28,7 @@ public:
std::auto_ptr<RenderBase> clone(InsetBase const *) const; std::auto_ptr<RenderBase> clone(InsetBase const *) const;
/// compute the size of the object returned in dim /// compute the size of the object returned in dim
virtual void metrics(MetricsInfo & mi, Dimension & dim) const; virtual bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// draw inset and update (xo, yo)-cache /// draw inset and update (xo, yo)-cache
virtual void draw(PainterInfo & pi, int x, int y) const; virtual void draw(PainterInfo & pi, int x, int y) const;

View File

@ -140,7 +140,7 @@ bool readyToDisplay(graphics::Loader const & loader)
} // namespace anon } // namespace anon
void RenderGraphic::metrics(MetricsInfo & mi, Dimension & dim) const bool RenderGraphic::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
bool image_ready = displayGraphic(params_) && readyToDisplay(loader_); bool image_ready = displayGraphic(params_) && readyToDisplay(loader_);
@ -175,7 +175,9 @@ void RenderGraphic::metrics(MetricsInfo & mi, Dimension & dim) const
dim.wid = std::max(50, font_width + 15); dim.wid = std::max(50, font_width + 15);
} }
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -29,7 +29,7 @@ public:
std::auto_ptr<RenderBase> clone(InsetBase const *) const; std::auto_ptr<RenderBase> clone(InsetBase const *) const;
/// compute the size of the object returned in dim /// compute the size of the object returned in dim
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// draw inset /// draw inset
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;

View File

@ -113,7 +113,7 @@ RenderPreview::getPreviewImage(Buffer const & buffer) const
} }
void RenderPreview::metrics(MetricsInfo & mi, Dimension & dim) const bool RenderPreview::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
BOOST_ASSERT(mi.base.bv && mi.base.bv->buffer()); BOOST_ASSERT(mi.base.bv && mi.base.bv->buffer());
@ -135,7 +135,9 @@ void RenderPreview::metrics(MetricsInfo & mi, Dimension & dim) const
dim.wid = 15 + theFontMetrics(font).width(stat); dim.wid = 15 + theFontMetrics(font).width(stat);
} }
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -52,7 +52,7 @@ public:
std::auto_ptr<RenderBase> clone(InsetBase const *) const; std::auto_ptr<RenderBase> clone(InsetBase const *) const;
/// Compute the size of the object, returned in dim /// Compute the size of the object, returned in dim
void metrics(MetricsInfo &, Dimension & dim) const; bool metrics(MetricsInfo &, Dimension & dim) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;

View File

@ -116,8 +116,8 @@ public:
/// insert an inset at cursor position /// insert an inset at cursor position
void insertInset(LCursor & cur, InsetBase * inset); void insertInset(LCursor & cur, InsetBase * inset);
/// compute text metrics /// compute text metrics.
void metrics(MetricsInfo & mi, Dimension & dim); bool metrics(MetricsInfo & mi, Dimension & dim);
/// draw text (only used for insets) /// draw text (only used for insets)
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// draw textselection /// draw textselection

View File

@ -124,14 +124,16 @@ string InsetFormulaMacro::prefix() const
} }
void InsetFormulaMacro::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetFormulaMacro::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
//lyxerr << "InsetFormulaMacro: " << this << " -- " << &tmpl() << endl; //lyxerr << "InsetFormulaMacro: " << this << " -- " << &tmpl() << endl;
tmpl()->metrics(mi, dim); tmpl()->metrics(mi, dim);
dim.asc += 5; dim.asc += 5;
dim.des += 5; dim.des += 5;
dim.wid += 10 + theFontMetrics(mi.base.font).width(prefix()); dim.wid += 10 + theFontMetrics(mi.base.font).width(prefix());
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -35,7 +35,7 @@ public:
/// constructs a mocro from its LaTeX definition /// constructs a mocro from its LaTeX definition
explicit InsetFormulaMacro(docstring const & s); explicit InsetFormulaMacro(docstring const & s);
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;

View File

@ -84,7 +84,6 @@ class InfoStream;
class MathMacroTemplate; class MathMacroTemplate;
class MathMacro; class MathMacro;
class MathPosFinder; class MathPosFinder;
class Dimension;
class LCursor; class LCursor;
class TextPainter; class TextPainter;
class TextMetricsInfo; class TextMetricsInfo;

View File

@ -79,12 +79,14 @@ char const * InsetMathAMSArray::name_right() const
} }
void InsetMathAMSArray::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetMathAMSArray::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
ArrayChanger dummy(mi.base); ArrayChanger dummy(mi.base);
InsetMathGrid::metrics(mi, dim); InsetMathGrid::metrics(mi, dim);
dim.wid += 14; dim.wid += 14;
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -25,7 +25,7 @@ public:
/// ///
InsetMathAMSArray(docstring const & name); InsetMathAMSArray(docstring const & name);
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo & pain, int x, int y) const; void draw(PainterInfo & pain, int x, int y) const;
/// ///

View File

@ -80,12 +80,14 @@ auto_ptr<InsetBase> InsetMathArray::doClone() const
} }
void InsetMathArray::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetMathArray::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
ArrayChanger dummy(mi.base); ArrayChanger dummy(mi.base);
InsetMathGrid::metrics(mi, dim); InsetMathGrid::metrics(mi, dim);
dim.wid += 6; dim.wid += 6;
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -31,7 +31,7 @@ public:
/// convenience constructor from whitespace/newline separated data /// convenience constructor from whitespace/newline separated data
InsetMathArray(docstring const &, docstring const & str); InsetMathArray(docstring const &, docstring const & str);
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -62,14 +62,17 @@ double InsetMathBig::increase() const
} }
void InsetMathBig::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetMathBig::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
double const h = theFontMetrics(mi.base.font).ascent('I'); double const h = theFontMetrics(mi.base.font).ascent('I');
double const f = increase(); double const f = increase();
dim_.wid = 6; dim.wid = 6;
dim_.asc = int(h + f * h); dim.asc = int(h + f * h);
dim_.des = int(f * h); dim.des = int(f * h);
dim = dim_; if (dim_ == dim)
return false;
dim_ = dim;
return true;
} }

View File

@ -27,7 +27,7 @@ public:
/// ///
docstring name() const; docstring name() const;
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -45,7 +45,7 @@ int InsetMathBinom::dw() const
} }
void InsetMathBinom::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetMathBinom::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
ScriptChanger dummy(mi.base); ScriptChanger dummy(mi.base);
cell(0).metrics(mi); cell(0).metrics(mi);
@ -54,7 +54,9 @@ void InsetMathBinom::metrics(MetricsInfo & mi, Dimension & dim) const
dim.des = cell(1).height() + 4 - 5; dim.des = cell(1).height() + 4 - 5;
dim.wid = max(cell(0).width(), cell(1).width()) + 2 * dw() + 4; dim.wid = max(cell(0).width(), cell(1).width()) + 2 * dw() + 4;
metricsMarkers2(dim); metricsMarkers2(dim);
bool const changed = dim_ != dim;
dim_ = dim; dim_ = dim;
return changed;
} }

View File

@ -28,7 +28,7 @@ public:
/// ///
void normalize(NormalStream &) const; void normalize(NormalStream &) const;
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo &, int x, int y) const; void draw(PainterInfo &, int x, int y) const;
/// ///

View File

@ -33,13 +33,16 @@ auto_ptr<InsetBase> InsetMathBoldSymbol::doClone() const
} }
void InsetMathBoldSymbol::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetMathBoldSymbol::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
//FontSetChanger dummy(mi.base, "mathbf"); //FontSetChanger dummy(mi.base, "mathbf");
cell(0).metrics(mi, dim); cell(0).metrics(mi, dim);
metricsMarkers(dim); metricsMarkers(dim);
++dim.wid; // for 'double stroke' ++dim.wid; // for 'double stroke'
if (dim_ == dim)
return false;
dim_ = dim; dim_ = dim;
return true;
} }

View File

@ -24,7 +24,7 @@ public:
/// ///
InsetMathBoldSymbol(); InsetMathBoldSymbol();
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -48,12 +48,15 @@ void InsetMathBox::normalize(NormalStream & os) const
} }
void InsetMathBox::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetMathBox::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
FontSetChanger dummy(mi.base, "textnormal"); FontSetChanger dummy(mi.base, "textnormal");
cell(0).metrics(mi, dim); cell(0).metrics(mi, dim);
metricsMarkers(dim); metricsMarkers(dim);
if (dim_ == dim)
return false;
dim_ = dim; dim_ = dim;
return true;
} }

View File

@ -31,7 +31,7 @@ public:
/// ///
mode_type currentMode() const { return TEXT_MODE; } mode_type currentMode() const { return TEXT_MODE; }
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -38,11 +38,14 @@ auto_ptr<InsetBase> InsetMathBoxed::doClone() const
} }
void InsetMathBoxed::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetMathBoxed::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
cell(0).metrics(mi, dim); cell(0).metrics(mi, dim);
metricsMarkers2(dim, 3); // 1 pixel space, 1 frame, 1 space metricsMarkers2(dim, 3); // 1 pixel space, 1 frame, 1 space
if (dim_ == dim)
return false;
dim_ = dim; dim_ = dim;
return true;
} }

View File

@ -26,7 +26,7 @@ public:
/// ///
void validate(LaTeXFeatures & features) const; void validate(LaTeXFeatures & features) const;
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -43,7 +43,7 @@ auto_ptr<InsetBase> InsetMathBrace::doClone() const
} }
void InsetMathBrace::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetMathBrace::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
cell(0).metrics(mi); cell(0).metrics(mi);
Dimension t; Dimension t;
@ -52,7 +52,10 @@ void InsetMathBrace::metrics(MetricsInfo & mi, Dimension & dim) const
dim.des = max(cell(0).descent(), t.des); dim.des = max(cell(0).descent(), t.des);
dim.wid = cell(0).width() + 2 * t.wid; dim.wid = cell(0).width() + 2 * t.wid;
metricsMarkers(dim); metricsMarkers(dim);
if (dim_ == dim)
return false;
dim_ = dim; dim_ = dim;
return true;
} }

View File

@ -30,7 +30,7 @@ public:
/// we write extra braces in any case... /// we write extra braces in any case...
bool extraBraces() const { return true; } bool extraBraces() const { return true; }
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo &, int x, int y) const; void draw(PainterInfo &, int x, int y) const;
/// ///

View File

@ -47,11 +47,16 @@ auto_ptr<InsetBase> InsetMathCases::doClone() const
} }
void InsetMathCases::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetMathCases::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
dim = dim_;
InsetMathGrid::metrics(mi); InsetMathGrid::metrics(mi);
dim_.wid += 8; dim_.wid += 8;
if (dim_ == dim)
return false;
dim = dim_; dim = dim_;
return true;
} }

View File

@ -25,7 +25,7 @@ public:
/// ///
explicit InsetMathCases(row_type rows = 1u); explicit InsetMathCases(row_type rows = 1u);
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -57,7 +57,7 @@ auto_ptr<InsetBase> InsetMathChar::doClone() const
} }
void InsetMathChar::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetMathChar::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
#if 1 #if 1
if (char_ == '=' && has_math_fonts) { if (char_ == '=' && has_math_fonts) {
@ -79,12 +79,16 @@ void InsetMathChar::metrics(MetricsInfo & mi, Dimension & dim) const
dim.wid += static_cast<int>(0.1667*em+0.5); dim.wid += static_cast<int>(0.1667*em+0.5);
#else #else
whichFont(font_, code_, mi); whichFont(font_, code_, mi);
mathed_char_dim(font_, char_, dim_); mathed_char_dim(font_, char_, dim);
if (isBinaryOp(char_, code_)) if (isBinaryOp(char_, code_))
width_ += 2 * theFontMetrics(font_).width(' '); width_ += 2 * theFontMetrics(font_).width(' ');
lyxerr << "InsetMathChar::metrics: " << dim << endl; lyxerr << "InsetMathChar::metrics: " << dim << endl;
#endif #endif
width_ = dim.wid; width_ = dim.wid;
if (dim_ == dim)
return false;
dim_ = dim;
return true;
} }

View File

@ -23,7 +23,7 @@ public:
/// ///
explicit InsetMathChar(char_type c); explicit InsetMathChar(char_type c);
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -41,11 +41,14 @@ auto_ptr<InsetBase> InsetMathColor::doClone() const
} }
void InsetMathColor::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetMathColor::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
cell(0).metrics(mi, dim); cell(0).metrics(mi, dim);
metricsMarkers(dim); metricsMarkers(dim);
if (dim_ == dim)
return false;
dim_ = dim; dim_ = dim;
return true;
} }

View File

@ -29,7 +29,7 @@ public:
/// Create a color inset from LaTeX color name /// Create a color inset from LaTeX color name
explicit InsetMathColor(bool oldstyle, docstring const & color); explicit InsetMathColor(bool oldstyle, docstring const & color);
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// we write extra braces in any case... /// we write extra braces in any case...
/// FIXME Why? Are they necessary if oldstyle_ == false? /// FIXME Why? Are they necessary if oldstyle_ == false?
bool extraBraces() const { return true; } bool extraBraces() const { return true; }

View File

@ -37,14 +37,17 @@ auto_ptr<InsetBase> CommandInset::doClone() const
} }
void CommandInset::metrics(MetricsInfo & mi, Dimension & dim) const bool CommandInset::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
if (!set_label_) { if (!set_label_) {
set_label_ = true; set_label_ = true;
button_.update(screenLabel(), true); button_.update(screenLabel(), true);
} }
button_.metrics(mi, dim); button_.metrics(mi, dim);
if (dim_ == dim)
return false;
dim_ = dim; dim_ = dim;
return true;
} }

View File

@ -27,7 +27,7 @@ public:
/// ///
explicit CommandInset(docstring const & name); explicit CommandInset(docstring const & name);
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -42,11 +42,14 @@ auto_ptr<InsetBase> InsetMathComment::doClone() const
} }
void InsetMathComment::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetMathComment::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
cell(0).metrics(mi, dim); cell(0).metrics(mi, dim);
metricsMarkers(dim); metricsMarkers(dim);
if (dim_ == dim)
return false;
dim_ = dim; dim_ = dim;
return true;
} }

View File

@ -27,7 +27,7 @@ public:
/// ///
explicit InsetMathComment(docstring const &); explicit InsetMathComment(docstring const &);
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -37,14 +37,17 @@ auto_ptr<InsetBase> InsetMathDFrac::doClone() const
} }
void InsetMathDFrac::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetMathDFrac::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
cell(0).metrics(mi); cell(0).metrics(mi);
cell(1).metrics(mi); cell(1).metrics(mi);
dim_.wid = max(cell(0).width(), cell(1).width()) + 2; dim.wid = max(cell(0).width(), cell(1).width()) + 2;
dim_.asc = cell(0).height() + 2 + 5; dim.asc = cell(0).height() + 2 + 5;
dim_.des = cell(1).height() + 2 - 5; dim.des = cell(1).height() + 2 - 5;
dim = dim_; if (dim_ == dim)
return false;
dim_ = dim;
return true;
} }

View File

@ -24,7 +24,7 @@ public:
/// ///
InsetMathDFrac(); InsetMathDFrac();
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo &, int x, int y) const; void draw(PainterInfo &, int x, int y) const;
/// ///

View File

@ -102,7 +102,7 @@ bool InsetMathDecoration::ams() const
} }
void InsetMathDecoration::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetMathDecoration::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
cell(0).metrics(mi, dim); cell(0).metrics(mi, dim);
@ -118,7 +118,10 @@ void InsetMathDecoration::metrics(MetricsInfo & mi, Dimension & dim) const
} }
metricsMarkers(dim); metricsMarkers(dim);
if (dim_ == dim)
return false;
dim_ = dim; dim_ = dim;
return true;
} }

View File

@ -30,7 +30,7 @@ public:
/// ///
void write(WriteStream & os) const; void write(WriteStream & os) const;
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void normalize(NormalStream & os) const; void normalize(NormalStream & os) const;
/// ///

View File

@ -71,7 +71,7 @@ void InsetMathDelim::normalize(NormalStream & os) const
} }
void InsetMathDelim::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetMathDelim::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
cell(0).metrics(mi); cell(0).metrics(mi);
Dimension t; Dimension t;
@ -84,10 +84,13 @@ void InsetMathDelim::metrics(MetricsInfo & mi, Dimension & dim) const
dw_ = 8; dw_ = 8;
if (dw_ < 4) if (dw_ < 4)
dw_ = 4; dw_ = 4;
dim_.wid = cell(0).width() + 2 * dw_ + 8; dim.wid = cell(0).width() + 2 * dw_ + 8;
dim_.asc = max(a0, d0) + h0; dim.asc = max(a0, d0) + h0;
dim_.des = max(a0, d0) - h0; dim.des = max(a0, d0) - h0;
dim = dim_; if (dim_ == dim)
return false;
dim_ = dim;
return true;
} }

View File

@ -40,7 +40,7 @@ public:
/// ///
mode_type currentMode() const { return MATH_MODE; } mode_type currentMode() const { return MATH_MODE; }
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo &, int x, int y) const; void draw(PainterInfo &, int x, int y) const;

View File

@ -48,9 +48,10 @@ void InsetMathDiff::normalize(NormalStream & os) const
} }
void InsetMathDiff::metrics(MetricsInfo &, Dimension &) const bool InsetMathDiff::metrics(MetricsInfo &, Dimension &) const
{ {
lyxerr << "should not happen" << endl; lyxerr << "should not happen" << endl;
return true;
} }

View File

@ -28,7 +28,7 @@ public:
/// ///
void addDer(MathArray const & der); void addDer(MathArray const & der);
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;

View File

@ -13,8 +13,6 @@
#define MATH_DIMINSET_H #define MATH_DIMINSET_H
#include "InsetMath.h" #include "InsetMath.h"
#include "dimension.h"
namespace lyx { namespace lyx {
@ -38,10 +36,6 @@ public:
/// ///
void setPosCache(PainterInfo const & pi, int x, int y) const; void setPosCache(PainterInfo const & pi, int x, int y) const;
protected:
///
mutable Dimension dim_;
}; };

View File

@ -35,7 +35,7 @@ auto_ptr<InsetBase> InsetMathDots::doClone() const
} }
void InsetMathDots::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetMathDots::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
mathed_char_dim(mi.base.font, 'M', dim); mathed_char_dim(mi.base.font, 'M', dim);
dh_ = 0; dh_ = 0;
@ -50,7 +50,10 @@ void InsetMathDots::metrics(MetricsInfo & mi, Dimension & dim) const
} }
else if (key_->name == "ddots") else if (key_->name == "ddots")
dh_ = dim.asc; dh_ = dim.asc;
if (dim_ == dim)
return false;
dim_ = dim; dim_ = dim;
return true;
} }

View File

@ -25,7 +25,7 @@ public:
/// ///
explicit InsetMathDots(latexkeys const * l); explicit InsetMathDots(latexkeys const * l);
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -35,11 +35,14 @@ auto_ptr<InsetBase> InsetMathEnv::doClone() const
} }
void InsetMathEnv::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetMathEnv::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
cell(0).metrics(mi, dim); cell(0).metrics(mi, dim);
metricsMarkers(dim); metricsMarkers(dim);
if (dim_ == dim)
return false;
dim_ = dim; dim_ = dim;
return true;
} }

View File

@ -32,7 +32,7 @@ public:
/// write normalized content /// write normalized content
void normalize(NormalStream & ns) const; void normalize(NormalStream & ns) const;
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void infoize(odocstream & os) const; void infoize(odocstream & os) const;

View File

@ -42,9 +42,13 @@ auto_ptr<InsetBase> InsetMathExFunc::doClone() const
} }
void InsetMathExFunc::metrics(MetricsInfo & mi, Dimension & /*dim*/) const bool InsetMathExFunc::metrics(MetricsInfo & mi, Dimension & dim) const
{ {
mathed_string_dim(mi.base.font, name_, dim_); mathed_string_dim(mi.base.font, name_, dim);
if (dim_ == dim)
return false;
dim_ = dim;
return true;
} }

View File

@ -30,7 +30,7 @@ public:
/// ///
InsetMathExFunc(docstring const & name, MathArray const & ar); InsetMathExFunc(docstring const & name, MathArray const & ar);
/// ///
void metrics(MetricsInfo & mi, Dimension & dim) const; bool metrics(MetricsInfo & mi, Dimension & dim) const;
/// ///
void draw(PainterInfo & pi, int x, int y) const; void draw(PainterInfo & pi, int x, int y) const;
/// ///

View File

@ -65,9 +65,10 @@ void InsetMathExInt::normalize(NormalStream & os) const
} }
void InsetMathExInt::metrics(MetricsInfo &, Dimension &) const bool InsetMathExInt::metrics(MetricsInfo &, Dimension &) const
{ {
lyxerr << "should not happen" << endl; lyxerr << "should not happen" << endl;
return true;
} }

Some files were not shown because too many files have changed in this diff Show More