* 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
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
void operator+=(Dimension const & dim);
/// set to empty box
@ -70,6 +76,13 @@ bool operator==(Dimension const & a, Dimension const & b)
}
inline
bool operator!=(Dimension const & a, Dimension const & b)
{
return a.wid != b.wid || a.asc != b.asc || a.des != b.des ;
}
} // namespace lyx
#endif

View File

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

View File

@ -12,9 +12,10 @@
#ifndef INSETBASE_H
#define INSETBASE_H
#include "support/docstream.h"
#include "changes.h"
#include "dimension.h"
#include "support/docstream.h"
#include <memory>
#include <vector>
@ -103,7 +104,8 @@ public:
virtual InsetBase * editXY(LCursor & cur, int x, int y);
/// 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
virtual void draw(PainterInfo & pi, int x, int y) const = 0;
/// draw inset selection if necessary
@ -443,6 +445,9 @@ protected:
* \sa getStatus
*/
virtual void doDispatch(LCursor & cur, FuncRequest & cmd);
/// Cached dimensions of the inset.
mutable Dimension dim_;
private:
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;
if (params_.inner_box || params_.special != "width")
mi.base.textwidth = params_.width.inPixels(m.base.textwidth);
InsetCollapsable::metrics(mi, dim);
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -72,7 +72,7 @@ public:
///
void setButtonLabel();
///
void metrics(MetricsInfo &, Dimension &) const;
bool metrics(MetricsInfo &, Dimension &) const;
/// show the Box dialog
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;
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.wid += 2 * TEXT_TO_INSET_OFFSET;
mi.base.textwidth += 2 * TEXT_TO_INSET_OFFSET;
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -43,7 +43,7 @@ public:
///
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;
///

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;
getDrawFont(mi.base.font);
@ -168,9 +168,11 @@ void InsetCharStyle::metrics(MetricsInfo & mi, Dimension & dim) const
dim.des += TEXT_TO_INSET_OFFSET;
dim.wid += 2 * TEXT_TO_INSET_OFFSET;
mi.base.textwidth += 2 * TEXT_TO_INSET_OFFSET;
dim_ = dim;
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 metrics(MetricsInfo &, Dimension &) const;
bool metrics(MetricsInfo &, Dimension &) 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);
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.wid += 2 * TEXT_TO_INSET_OFFSET;
mi.base.textwidth += 2 * TEXT_TO_INSET_OFFSET;
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -46,7 +46,7 @@ public:
///
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;
///

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_) {
updateButtonLabel_ = false;
@ -54,7 +54,9 @@ void InsetCommand::metrics(MetricsInfo & mi, Dimension & dim) const
editable() != NOT_EDITABLE);
}
button_.metrics(mi, dim);
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -38,7 +38,7 @@ public:
///
~InsetCommand();
///
void metrics(MetricsInfo &, Dimension &) const;
bool metrics(MetricsInfo &, Dimension &) 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;
getDrawFont(mi.base.font);
mi.base.font.realize(tmpfont);
InsetCollapsable::metrics(mi, dim);
mi.base.font = tmpfont;
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -63,7 +63,7 @@ public:
///
void validate(LaTeXFeatures &) const {}
///
void metrics(MetricsInfo &, Dimension &) const;
bool metrics(MetricsInfo &, Dimension &) 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);
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -116,7 +116,7 @@ public:
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;
///

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;
mi.base.font = mi.base.bv->buffer()->params().getFont();
InsetCollapsable::metrics(mi, dim);
mi.base.font = tmpfont;
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -27,7 +27,7 @@ public:
///
InsetFootlike(InsetFootlike const &);
///
void metrics(MetricsInfo &, Dimension &) const;
bool metrics(MetricsInfo &, Dimension &) 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);
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -35,7 +35,7 @@ public:
///
~InsetGraphics();
///
void metrics(MetricsInfo &, Dimension &) const;
bool metrics(MetricsInfo &, Dimension &) 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.asc = 3;
dim.des = 3;
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -23,7 +23,7 @@ public:
///
InsetHFill();
///
void metrics(MetricsInfo &, Dimension &) const;
bool metrics(MetricsInfo &, Dimension &) 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());
@ -673,7 +673,9 @@ void InsetInclude::metrics(MetricsInfo & mi, Dimension & dim) const
Box b(0, dim.wid, -dim.asc, dim.des);
button_.setBox(b);
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -35,7 +35,7 @@ public:
~InsetInclude();
/// 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;
///

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;
frontend::FontMetrics const & fm = theFontMetrics(font);
@ -273,7 +273,9 @@ void InsetLatexAccent::metrics(MetricsInfo & mi, Dimension & dim) const
docstring dcon(contents.begin(), contents.end());
dim.wid = fm.width(dcon) + 4;
}
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -36,7 +36,7 @@ public:
///
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;
///

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.des = 3;
dim.wid = mi.base.textwidth;
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -25,7 +25,7 @@ public:
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;

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);
dim.asc = fm.maxAscent();
dim.des = fm.maxDescent();
dim.wid = fm.width('n');
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -25,7 +25,7 @@ public:
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;

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.des = defaultRowHeight();
dim.wid = mi.base.textwidth;
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -25,7 +25,7 @@ public:
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;

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;
frontend::FontMetrics const & fm =
@ -239,7 +239,9 @@ void InsetQuotes::metrics(MetricsInfo & mi, Dimension & dim) const
else
dim.wid += fm.width(',');
}
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -74,7 +74,7 @@ public:
/// Direct access to inner/outer quotation marks
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;
#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 =
theFontMetrics(mi.base.font);
@ -75,7 +75,9 @@ void InsetSpace::metrics(MetricsInfo & mi, Dimension & dim) const
dim.wid = 10;
break;
}
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

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

View File

@ -48,7 +48,7 @@ public:
///
Kind kind() const;
///
void metrics(MetricsInfo &, Dimension &) const;
bool metrics(MetricsInfo &, Dimension &) 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: " <<
// mi.base.textwidth << "\n";
@ -300,7 +300,9 @@ void InsetTabular::metrics(MetricsInfo & mi, Dimension & dim) const
dim.asc = tabular.getAscentOfRow(0);
dim.des = tabular.getHeightOfTabular() - dim.asc;
dim.wid = tabular.getWidthOfTabular() + 2 * ADD_TO_TABULAR_WIDTH;
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -60,7 +60,7 @@ public:
///
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;
///

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;
mi.base.textwidth -= 2 * border_;
@ -176,7 +176,9 @@ void InsetText::metrics(MetricsInfo & mi, Dimension & dim) const
dim.des += border_;
dim.wid += 2 * border_;
mi.base.textwidth += 2 * border_;
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -50,7 +50,7 @@ public:
///
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;
/// draw inset selection

View File

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

View File

@ -30,7 +30,7 @@ public:
///
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;
///

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;
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.des = height - dim.asc; // label text
dim.wid = ADD_TO_VSPACE_WIDTH + 2 * arrow_size + 5 + w;
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -29,7 +29,7 @@ public:
///
~InsetVSpace();
///
void metrics(MetricsInfo & mi, Dimension & dim) const;
bool metrics(MetricsInfo & mi, Dimension & dim) 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;
/// compute the size of the object returned in dim
virtual void metrics(MetricsInfo & mi, Dimension & dim) const = 0;
/// compute the size of the object returned in dim.
/// \retval true if the metrics has changed.
virtual bool metrics(MetricsInfo & mi, Dimension & dim) const = 0;
/// draw inset and update (xo, yo)-cache
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);
font.decSize();
@ -56,6 +56,10 @@ void RenderButton::metrics(MetricsInfo &, Dimension & dim) const
fm.rectText(text_, dim.wid, dim.asc, dim.des);
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;
/// 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
virtual void draw(PainterInfo & pi, int x, int y) const;

View File

@ -140,7 +140,7 @@ bool readyToDisplay(graphics::Loader const & loader)
} // 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_);
@ -175,7 +175,9 @@ void RenderGraphic::metrics(MetricsInfo & mi, Dimension & dim) const
dim.wid = std::max(50, font_width + 15);
}
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -29,7 +29,7 @@ public:
std::auto_ptr<RenderBase> clone(InsetBase const *) const;
/// 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
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());
@ -135,7 +135,9 @@ void RenderPreview::metrics(MetricsInfo & mi, Dimension & dim) const
dim.wid = 15 + theFontMetrics(font).width(stat);
}
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -52,7 +52,7 @@ public:
std::auto_ptr<RenderBase> clone(InsetBase const *) const;
/// 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;

View File

@ -116,8 +116,8 @@ public:
/// insert an inset at cursor position
void insertInset(LCursor & cur, InsetBase * inset);
/// compute text metrics
void metrics(MetricsInfo & mi, Dimension & dim);
/// compute text metrics.
bool metrics(MetricsInfo & mi, Dimension & dim);
/// draw text (only used for insets)
void draw(PainterInfo & pi, int x, int y) const;
/// 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;
tmpl()->metrics(mi, dim);
dim.asc += 5;
dim.des += 5;
dim.wid += 10 + theFontMetrics(mi.base.font).width(prefix());
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -35,7 +35,7 @@ public:
/// constructs a mocro from its LaTeX definition
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;

View File

@ -84,7 +84,6 @@ class InfoStream;
class MathMacroTemplate;
class MathMacro;
class MathPosFinder;
class Dimension;
class LCursor;
class TextPainter;
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);
InsetMathGrid::metrics(mi, dim);
dim.wid += 14;
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -25,7 +25,7 @@ public:
///
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;
///

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);
InsetMathGrid::metrics(mi, dim);
dim.wid += 6;
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -31,7 +31,7 @@ public:
/// convenience constructor from whitespace/newline separated data
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;
///

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 f = increase();
dim_.wid = 6;
dim_.asc = int(h + f * h);
dim_.des = int(f * h);
dim = dim_;
dim.wid = 6;
dim.asc = int(h + f * h);
dim.des = int(f * h);
if (dim_ == dim)
return false;
dim_ = dim;
return true;
}

View File

@ -27,7 +27,7 @@ public:
///
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;
///

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);
cell(0).metrics(mi);
@ -54,7 +54,9 @@ void InsetMathBinom::metrics(MetricsInfo & mi, Dimension & dim) const
dim.des = cell(1).height() + 4 - 5;
dim.wid = max(cell(0).width(), cell(1).width()) + 2 * dw() + 4;
metricsMarkers2(dim);
bool const changed = dim_ != dim;
dim_ = dim;
return changed;
}

View File

@ -28,7 +28,7 @@ public:
///
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;
///

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");
cell(0).metrics(mi, dim);
metricsMarkers(dim);
++dim.wid; // for 'double stroke'
if (dim_ == dim)
return false;
dim_ = dim;
return true;
}

View File

@ -24,7 +24,7 @@ public:
///
InsetMathBoldSymbol();
///
void metrics(MetricsInfo & mi, Dimension & dim) const;
bool metrics(MetricsInfo & mi, Dimension & dim) 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");
cell(0).metrics(mi, dim);
metricsMarkers(dim);
if (dim_ == dim)
return false;
dim_ = dim;
return true;
}

View File

@ -31,7 +31,7 @@ public:
///
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;
///

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);
metricsMarkers2(dim, 3); // 1 pixel space, 1 frame, 1 space
if (dim_ == dim)
return false;
dim_ = dim;
return true;
}

View File

@ -26,7 +26,7 @@ public:
///
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;
///

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

View File

@ -30,7 +30,7 @@ public:
/// we write extra braces in any case...
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;
///

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);
dim_.wid += 8;
if (dim_ == dim)
return false;
dim = dim_;
return true;
}

View File

@ -25,7 +25,7 @@ public:
///
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;
///

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 (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);
#else
whichFont(font_, code_, mi);
mathed_char_dim(font_, char_, dim_);
mathed_char_dim(font_, char_, dim);
if (isBinaryOp(char_, code_))
width_ += 2 * theFontMetrics(font_).width(' ');
lyxerr << "InsetMathChar::metrics: " << dim << endl;
#endif
width_ = dim.wid;
if (dim_ == dim)
return false;
dim_ = dim;
return true;
}

View File

@ -23,7 +23,7 @@ public:
///
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;
///

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);
metricsMarkers(dim);
if (dim_ == dim)
return false;
dim_ = dim;
return true;
}

View File

@ -29,7 +29,7 @@ public:
/// Create a color inset from LaTeX color name
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...
/// FIXME Why? Are they necessary if oldstyle_ == false?
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_) {
set_label_ = true;
button_.update(screenLabel(), true);
}
button_.metrics(mi, dim);
if (dim_ == dim)
return false;
dim_ = dim;
return true;
}

View File

@ -27,7 +27,7 @@ public:
///
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;
///

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);
metricsMarkers(dim);
if (dim_ == dim)
return false;
dim_ = dim;
return true;
}

View File

@ -27,7 +27,7 @@ public:
///
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;
///

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(1).metrics(mi);
dim_.wid = max(cell(0).width(), cell(1).width()) + 2;
dim_.asc = cell(0).height() + 2 + 5;
dim_.des = cell(1).height() + 2 - 5;
dim = dim_;
dim.wid = max(cell(0).width(), cell(1).width()) + 2;
dim.asc = cell(0).height() + 2 + 5;
dim.des = cell(1).height() + 2 - 5;
if (dim_ == dim)
return false;
dim_ = dim;
return true;
}

View File

@ -24,7 +24,7 @@ public:
///
InsetMathDFrac();
///
void metrics(MetricsInfo & mi, Dimension & dim) const;
bool metrics(MetricsInfo & mi, Dimension & dim) 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);
@ -118,7 +118,10 @@ void InsetMathDecoration::metrics(MetricsInfo & mi, Dimension & dim) const
}
metricsMarkers(dim);
if (dim_ == dim)
return false;
dim_ = dim;
return true;
}

View File

@ -30,7 +30,7 @@ public:
///
void write(WriteStream & os) const;
///
void metrics(MetricsInfo & mi, Dimension & dim) const;
bool metrics(MetricsInfo & mi, Dimension & dim) 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);
Dimension t;
@ -84,10 +84,13 @@ void InsetMathDelim::metrics(MetricsInfo & mi, Dimension & dim) const
dw_ = 8;
if (dw_ < 4)
dw_ = 4;
dim_.wid = cell(0).width() + 2 * dw_ + 8;
dim_.asc = max(a0, d0) + h0;
dim_.des = max(a0, d0) - h0;
dim = dim_;
dim.wid = cell(0).width() + 2 * dw_ + 8;
dim.asc = max(a0, d0) + h0;
dim.des = max(a0, d0) - h0;
if (dim_ == dim)
return false;
dim_ = dim;
return true;
}

View File

@ -40,7 +40,7 @@ public:
///
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;

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;
return true;
}

View File

@ -28,7 +28,7 @@ public:
///
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;

View File

@ -13,8 +13,6 @@
#define MATH_DIMINSET_H
#include "InsetMath.h"
#include "dimension.h"
namespace lyx {
@ -38,10 +36,6 @@ public:
///
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);
dh_ = 0;
@ -50,7 +50,10 @@ void InsetMathDots::metrics(MetricsInfo & mi, Dimension & dim) const
}
else if (key_->name == "ddots")
dh_ = dim.asc;
if (dim_ == dim)
return false;
dim_ = dim;
return true;
}

View File

@ -25,7 +25,7 @@ public:
///
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;
///

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);
metricsMarkers(dim);
if (dim_ == dim)
return false;
dim_ = dim;
return true;
}

View File

@ -32,7 +32,7 @@ public:
/// write normalized content
void normalize(NormalStream & ns) const;
///
void metrics(MetricsInfo & mi, Dimension & dim) const;
bool metrics(MetricsInfo & mi, Dimension & dim) 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);
///
void metrics(MetricsInfo & mi, Dimension & dim) const;
bool metrics(MetricsInfo & mi, Dimension & dim) 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;
return true;
}

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