IU of drawing phase one without 'semantic changes' as requested by John

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@7079 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
André Pönitz 2003-06-02 10:03:27 +00:00
parent 628e77468b
commit 285952e130
153 changed files with 427 additions and 449 deletions

View File

@ -20,6 +20,7 @@
#include "lyxfont.h"
#include "lyxtext.h"
#include "dimension.h"
#include "metricsinfo.h"
#include "frontends/Painter.h"
#include "frontends/mouse_state.h"
@ -146,7 +147,10 @@ int Inset::latexTextWidth(BufferView * bv) const
int Inset::ascent(BufferView * bv, LyXFont const & font) const
{
Dimension dim;
dimension(bv, font, dim);
MetricsInfo mi;
mi.base.bv = bv;
mi.base.font = font;
metrics(mi, dim);
return dim.ascent();
}
@ -154,7 +158,10 @@ int Inset::ascent(BufferView * bv, LyXFont const & font) const
int Inset::descent(BufferView * bv, LyXFont const & font) const
{
Dimension dim;
dimension(bv, font, dim);
MetricsInfo mi;
mi.base.bv = bv;
mi.base.font = font;
metrics(mi, dim);
return dim.descent();
}
@ -162,6 +169,9 @@ int Inset::descent(BufferView * bv, LyXFont const & font) const
int Inset::width(BufferView * bv, LyXFont const & font) const
{
Dimension dim;
dimension(bv, font, dim);
MetricsInfo mi;
mi.base.bv = bv;
mi.base.font = font;
metrics(mi, dim);
return dim.width();
}

View File

@ -160,8 +160,6 @@ public:
///
Inset(Inset const & in);
///
virtual void dimension(BufferView *, LyXFont const &, Dimension &) const = 0;
///
int ascent(BufferView *, LyXFont const &) const;
///
int descent(BufferView *, LyXFont const &) const;

View File

@ -17,6 +17,7 @@
class BufferView;
class FuncRequest;
class MetricsInfo;
class Dimension;
class PainterInfo;
/** Dispatch result codes
@ -49,14 +50,18 @@ enum dispatch_result {
/// Common base class to all insets
class InsetBase {
public:
///
typedef int difference_type;
/// short of anything else reasonable
typedef size_t size_type;
/// type for cell indices
typedef size_t idx_type;
typedef size_t idx_type;
/// type for cursor positions
typedef size_t pos_type;
typedef size_t pos_type;
/// type for row numbers
typedef size_t row_type;
typedef size_t row_type;
/// type for column numbers
typedef size_t col_type;
typedef size_t col_type;
// the real dispatcher
virtual dispatch_result dispatch
@ -64,7 +69,9 @@ public:
/// small wrapper for the time being
virtual dispatch_result localDispatch(FuncRequest const & cmd);
///
/// compute the size of the object returned in dim
virtual void 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

@ -7,8 +7,8 @@
*
* Full author contact details are available in file CREDITS
*/
#include <config.h>
#include <config.h>
#include "insetbibtex.h"
#include "buffer.h"
@ -40,15 +40,9 @@ InsetBibtex::InsetBibtex(InsetCommandParams const & p)
{}
// InsetBibtex::InsetBibtex(InsetCommandParams const & p, bool)
// : InsetCommand(p, false)
// {}
InsetBibtex::~InsetBibtex()
{
InsetCommandMailer mailer("bibtex", *this);
mailer.hideDialog();
InsetCommandMailer("bibtex", *this).hideDialog();
}

View File

@ -28,15 +28,14 @@ using std::ostream;
using std::endl;
void InsetButton::dimension(BufferView * bv, LyXFont const &,
Dimension & dim) const
void InsetButton::metrics(MetricsInfo & mi, Dimension & dim) const
{
lyx::Assert(bv);
lyx::Assert(mi.base.bv);
LyXFont font(LyXFont::ALL_SANE);
font.decSize();
string const s = getScreenLabel(bv->buffer());
string const s = getScreenLabel(mi.base.bv->buffer());
if (editable())
font_metrics::buttonText(s, font, dim.wid, dim.asc, dim.des);

View File

@ -23,7 +23,7 @@
class InsetButton: public Inset {
public:
///
void dimension(BufferView *, LyXFont const &, Dimension &) const;
void metrics(MetricsInfo &, Dimension &) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///

View File

@ -29,6 +29,7 @@
using std::ostream;
using std::endl;
InsetCaption::InsetCaption(BufferParams const & bp)
: InsetText(bp)
{
@ -45,7 +46,6 @@ void InsetCaption::write(Buffer const * buf, ostream & os) const
}
void InsetCaption::read(Buffer const * buf, LyXLex & lex)
{
#if 0

View File

@ -124,16 +124,15 @@ int InsetCollapsable::height_collapsed() const
}
void InsetCollapsable::dimension(BufferView * bv, LyXFont const & font,
Dimension & dim) const
void InsetCollapsable::metrics(MetricsInfo & mi, Dimension & dim) const
{
dimension_collapsed(dim);
if (collapsed_)
return;
Dimension insetdim;
inset.dimension(bv, font, insetdim);
inset.metrics(mi, insetdim);
dim.des += insetdim.height() + TEXT_TO_BOTTOM_OFFSET;
dim.wid = max(dim.wid, insetdim.width());
dim.wid = max(dim.wid, insetdim.wid);
}

View File

@ -45,7 +45,7 @@ public:
///
void write(Buffer const *, std::ostream &) const;
///
void dimension(BufferView *, LyXFont const &, Dimension &) const;
void metrics(MetricsInfo &, Dimension &) const;
///
void draw(PainterInfo & pi, int x, int y) const;
/// draw, either inlined (no button) or collapsed/open

View File

@ -61,14 +61,14 @@ dispatch_result InsetError::localDispatch(FuncRequest const & cmd)
}
void InsetError::dimension(BufferView *, LyXFont const & font,
Dimension & dim) const
void InsetError::metrics(MetricsInfo & mi, Dimension & dim) const
{
LyXFont efont;
efont.setSize(font.size()).decSize();
dim.asc = font_metrics::maxAscent(efont) + 1;
dim.des = font_metrics::maxDescent(efont) + 1;
dim.wid = 6 + font_metrics::width(_("Error"), efont);
efont.setSize(mi.base.font.size()).decSize();
dim_.asc = font_metrics::maxAscent(efont) + 1;
dim_.des = font_metrics::maxDescent(efont) + 1;
dim_.wid = 6 + font_metrics::width(_("Error"), efont);
dim = dim_;
}
@ -84,7 +84,11 @@ void InsetError::draw(PainterInfo & pi, int x, int y) const
// Draw as "Error" in a framed box
x += 1;
Dimension dim;
dimension(pi.base.bv, pi.base.font, dim);
MetricsInfo mi;
mi.base.bv = pi.base.bv;
mi.base.font = pi.base.font;
metrics(mi, dim);
dim_ = dim;
pi.pain.fillRectangle(x, y - dim.asc + 1,
dim.wid - 2, dim.asc + dim.des - 2, LColor::insetbg);
pi.pain.rectangle(x, y - dim.asc + 1,

View File

@ -14,6 +14,7 @@
#include "inset.h"
#include "LString.h"
#include "dimension.h"
/** Used for error messages from LaTeX runs.
@ -30,7 +31,7 @@ public:
///
virtual dispatch_result localDispatch(FuncRequest const & cmd);
///
void dimension(BufferView *, LyXFont const &, Dimension &) const;
void metrics(MetricsInfo &, Dimension &) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///
@ -65,5 +66,7 @@ public:
private:
///
string contents;
///
mutable Dimension dim_;
};
#endif

View File

@ -552,13 +552,12 @@ bool InsetERT::checkInsertChar(LyXFont & /* font */)
}
void InsetERT::dimension(BufferView * bv, LyXFont const & font,
Dimension & dim) const
void InsetERT::metrics(MetricsInfo & mi, Dimension & dim) const
{
if (inlined())
inset.dimension(bv, font, dim);
inset.metrics(mi, dim);
else
InsetCollapsable::dimension(bv, font, dim);
InsetCollapsable::metrics(mi, dim);
}

View File

@ -99,7 +99,7 @@ public:
WordLangTuple const
selectNextWordToSpellcheck(BufferView *, float &) const;
///
void dimension(BufferView *, LyXFont const &, Dimension &) const;
void metrics(MetricsInfo &, Dimension &) const;
///
void draw(PainterInfo & pi, int x, int y) const;
/// set the status of the inset

View File

@ -10,7 +10,6 @@
#include <config.h>
#include "insetfootlike.h"
#include "lyxfont.h"
#include "buffer.h"

View File

@ -285,8 +285,7 @@ bool InsetGraphics::imageIsDrawable() const
}
void InsetGraphics::dimension(BufferView *, LyXFont const & font,
Dimension & dim) const
void InsetGraphics::metrics(MetricsInfo & mi, Dimension & dim) const
{
cache_->old_ascent = 50;
if (imageIsDrawable())
@ -298,7 +297,7 @@ void InsetGraphics::dimension(BufferView *, LyXFont const & font,
else {
int font_width = 0;
LyXFont msgFont(font);
LyXFont msgFont(mi.base.font);
msgFont.setFamily(LyXFont::SANS_FAMILY);
string const justname = OnlyFilename(params().filename);
@ -315,6 +314,7 @@ void InsetGraphics::dimension(BufferView *, LyXFont const & font,
dim.wid = std::max(50, font_width + 15);
}
dim_ = dim;
}
@ -343,7 +343,11 @@ void InsetGraphics::draw(PainterInfo & pi, int x, int y) const
int oasc = cache_->old_ascent;
Dimension dim;
dimension(bv, pi.base.font, dim);
MetricsInfo mi;
mi.base.bv = pi.base.bv;
mi.base.font = pi.base.font;
metrics(mi, dim);
dim_ = dim;
// we may have changed while someone other was drawing us so better
// to not draw anything as we surely call to redraw ourself soon.
@ -367,14 +371,14 @@ void InsetGraphics::draw(PainterInfo & pi, int x, int y) const
// we draw just a rectangle.
if (imageIsDrawable()) {
pi.pain.image(x + TEXT_TO_INSET_OFFSET, y - dim.asc,
dim.wid - 2 * TEXT_TO_INSET_OFFSET, dim.asc + dim.des,
pi.pain.image(x + TEXT_TO_INSET_OFFSET, y - dim_.asc,
dim_.wid - 2 * TEXT_TO_INSET_OFFSET, dim_.asc + dim_.des,
*cache_->loader.image());
} else {
pi.pain.rectangle(x + TEXT_TO_INSET_OFFSET, y - dim.asc,
dim.wid - 2 * TEXT_TO_INSET_OFFSET, dim.asc + dim.des);
pi.pain.rectangle(x + TEXT_TO_INSET_OFFSET, y - dim_.asc,
dim_.wid - 2 * TEXT_TO_INSET_OFFSET, dim_.asc + dim_.des);
// Print the file name.
LyXFont msgFont = pi.base.font;

View File

@ -13,8 +13,9 @@
#ifndef INSET_GRAPHICS_H
#define INSET_GRAPHICS_H
#include "insets/inset.h"
#include "insets/insetgraphicsParams.h"
#include "inset.h"
#include "insetgraphicsParams.h"
#include "dimension.h"
#include <boost/signals/trackable.hpp>
#include <boost/scoped_ptr.hpp>
@ -34,7 +35,7 @@ public:
///
virtual dispatch_result localDispatch(FuncRequest const & cmd);
///
void dimension(BufferView *, LyXFont const &, Dimension &) const;
void metrics(MetricsInfo &, Dimension &) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///
@ -113,6 +114,8 @@ private:
friend class Cache;
/// The pointer never changes although *cache_'s contents may.
boost::scoped_ptr<Cache> const cache_;
/// dimension cache
mutable Dimension dim_;
};

View File

@ -512,24 +512,16 @@ void InsetInclude::fillWithBibKeys(vector<pair<string,string> > & keys) const
}
int InsetInclude::ascent(BufferView * bv, LyXFont const & font) const
void InsetInclude::metrics(MetricsInfo & mi, Dimension & dim) const
{
return preview_->previewReady() ?
preview_->pimage()->ascent() : InsetButton::ascent(bv, font);
}
int InsetInclude::descent(BufferView * bv, LyXFont const & font) const
{
return preview_->previewReady() ?
preview_->pimage()->descent() : InsetButton::descent(bv, font);
}
int InsetInclude::width(BufferView * bv, LyXFont const & font) const
{
return preview_->previewReady() ?
preview_->pimage()->width() : InsetButton::width(bv, font);
if (preview_->previewReady()) {
dim.asc = preview_->pimage()->ascent();
dim.des = preview_->pimage()->descent();
dim.wid = preview_->pimage()->width();
} else {
InsetButton::metrics(mi, dim);
}
dim_ = dim;
}
@ -545,7 +537,11 @@ void InsetInclude::draw(PainterInfo & pi, int x, int y) const
preview_->startMonitoring();
Dimension dim;
dimension(pi.base.bv, pi.base.font, dim);
MetricsInfo mi;
mi.base.bv = pi.base.bv;
mi.base.font = pi.base.font;
metrics(mi, dim);
dim_ = dim;
pi.pain.image(x, y - dim.asc, dim.wid, dim.height(),
*(preview_->pimage()->image()));

View File

@ -13,6 +13,7 @@
#define INSET_INCLUDE_H
#include "insetcommand.h"
#include "dimension.h"
#include <boost/scoped_ptr.hpp>
@ -60,11 +61,7 @@ public:
virtual dispatch_result localDispatch(FuncRequest const & cmd);
/// Override these InsetButton methods if Previewing
int ascent(BufferView *, LyXFont const &) const;
///
int descent(BufferView *, LyXFont const &) const;
///
int width(BufferView *, LyXFont const &) const;
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pi, int x, int y) const;
@ -131,6 +128,9 @@ private:
friend class PreviewImpl;
/// The pointer never changes although *preview_'s contents may.
boost::scoped_ptr<PreviewImpl> const preview_;
/// cache
mutable Dimension dim_;
};

View File

@ -13,7 +13,6 @@
#include "insetlatexaccent.h"
#include "debug.h"
#include "dimension.h"
#include "lyxrc.h"
#include "support/lstrings.h"
#include "BufferView.h"
@ -264,9 +263,9 @@ void InsetLatexAccent::checkContents()
}
void InsetLatexAccent::dimension(BufferView *, LyXFont const & font,
Dimension & dim) const
void InsetLatexAccent::metrics(MetricsInfo & mi, Dimension & dim) const
{
LyXFont & font = mi.base.font;
// This function is a bit too simplistic and is just a
// "try to make a fit for all accents" approach, to
// make it better we need to know what kind of accent is
@ -292,6 +291,7 @@ void InsetLatexAccent::dimension(BufferView *, LyXFont const & font,
dim.des = font_metrics::maxDescent(font) + 4;
dim.wid = font_metrics::width(contents, font) + 4;
}
dim_ = dim;
}
@ -363,7 +363,11 @@ void InsetLatexAccent::draw(PainterInfo & pi, int x, int baseline) const
font.setLanguage(english_language);
Dimension dim;
dimension(bv, font, dim);
MetricsInfo mi;
mi.base.bv = pi.base.bv;
mi.base.font = pi.base.font;
metrics(mi, dim);
dim_ = dim;
if (candisp) {
float x2 = x + (rbearing(font) - lbearing(font)) / 2.0;
@ -372,13 +376,13 @@ void InsetLatexAccent::draw(PainterInfo & pi, int x, int baseline) const
if (plusasc) {
// mark at the top
hg = font_metrics::maxDescent(font);
y = baseline - dim.asc;
y = baseline - dim_.asc;
if (font.shape() == LyXFont::ITALIC_SHAPE)
x2 += (4.0 * hg) / 5.0; // italic
} else {
// at the bottom
hg = dim.des;
hg = dim_.des;
y = baseline;
}
@ -395,7 +399,7 @@ void InsetLatexAccent::draw(PainterInfo & pi, int x, int baseline) const
tmpx += int(0.8 * hg); // italic
lyxerr[Debug::KEY] << "Removing dot." << endl;
// remove the dot first
pi.pain.fillRectangle(x + tmpx, tmpvar, dim.wid,
pi.pain.fillRectangle(x + tmpx, tmpvar, dim_.wid,
font_metrics::ascent('i', pi.base.font) -
font_metrics::ascent('x', pi.base.font) - 1,
backgroundColor());
@ -506,17 +510,17 @@ void InsetLatexAccent::draw(PainterInfo & pi, int x, int baseline) const
case SPECIAL_CARON: // special caron
{
switch (ic) {
case 'L': dim.wid = int(4.0 * dim.wid / 5.0); break;
case 'L': dim_.wid = int(4.0 * dim_.wid / 5.0); break;
case 't': y -= int(hg35 / 2.0); break;
}
int xp[3], yp[3];
xp[0] = int(x + dim.wid);
xp[0] = int(x + dim_.wid);
yp[0] = int(y + hg35 + hg);
xp[1] = int(x + dim.wid + (hg35 / 2.0));
xp[1] = int(x + dim_.wid + (hg35 / 2.0));
yp[1] = int(y + hg + (hg35 / 2.0));
xp[2] = int(x + dim.wid + (hg35 / 2.0));
xp[2] = int(x + dim_.wid + (hg35 / 2.0));
yp[2] = y + int(hg);
pi.pain.lines(xp, yp, 3);
@ -577,7 +581,7 @@ void InsetLatexAccent::draw(PainterInfo & pi, int x, int baseline) const
xp[0] = int(x);
yp[0] = y + int(3.0 * hg);
xp[1] = int(x + float(dim.wid) * 0.75);
xp[1] = int(x + float(dim_.wid) * 0.75);
yp[1] = y + int(hg);
pi.pain.lines(xp, yp, 2);
@ -592,10 +596,10 @@ void InsetLatexAccent::draw(PainterInfo & pi, int x, int baseline) const
}
} else {
pi.pain.fillRectangle(x + 1,
baseline - dim.asc + 1, dim.wid - 2,
dim.asc + dim.des - 2, backgroundColor());
pi.pain.rectangle(x + 1, baseline - dim.asc + 1,
dim.wid - 2, dim.asc + dim.des - 2);
baseline - dim_.asc + 1, dim_.wid - 2,
dim_.asc + dim_.des - 2, backgroundColor());
pi.pain.rectangle(x + 1, baseline - dim_.asc + 1,
dim_.wid - 2, dim_.asc + dim_.des - 2);
pi.pain.text(x + 2, baseline, contents, font);
}
}

View File

@ -12,11 +12,9 @@
#ifndef INSET_LATEX_ACCENT_H
#define INSET_LATEX_ACCENT_H
#include "inset.h"
#include "LString.h"
class LyXLex;
#include "dimension.h"
/** Insertion of accents
@ -34,7 +32,7 @@ public:
explicit
InsetLatexAccent(string const & string);
///
void dimension(BufferView *, LyXFont const &, Dimension &) const;
void metrics(MetricsInfo &, Dimension &) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///
@ -131,6 +129,8 @@ private:
bool plusdesc;
/// international char
mutable char ic;
///
mutable Dimension dim_;
};

View File

@ -218,14 +218,13 @@ void InsetMinipage::read(Buffer const * buf, LyXLex & lex)
}
void InsetMinipage::dimension(BufferView * bv, LyXFont const & font,
Dimension & dim) const
void InsetMinipage::metrics(MetricsInfo & mi, Dimension & dim) const
{
if (collapsed_)
dimension_collapsed(dim);
else {
Dimension d;
InsetCollapsable::dimension(bv, font, d);
InsetCollapsable::metrics(mi, d);
switch (params_.pos) {
case top:
dim.asc = d.asc;

View File

@ -68,7 +68,7 @@ public:
///
Inset * clone(Buffer const &) const;
///
void dimension(BufferView *, LyXFont const &, Dimension &) const;
void metrics(MetricsInfo &, Dimension &) const;
///
Inset::Code lyxCode() const { return Inset::MINIPAGE_CODE; }
///

View File

@ -38,9 +38,9 @@ void InsetNewline::write(Buffer const *, ostream & os) const
}
void InsetNewline::dimension(BufferView *, LyXFont const & font,
Dimension & dim) const
void InsetNewline::metrics(MetricsInfo & mi, Dimension & dim) const
{
LyXFont & font = mi.base.font;
dim.asc = font_metrics::maxAscent(font);
dim.des = font_metrics::maxDescent(font);
dim.wid = font_metrics::width('n', font);

View File

@ -26,7 +26,7 @@ public:
Inset::Code lyxCode() const { return Inset::NEWLINE_CODE; }
void dimension(BufferView *, LyXFont const &, Dimension &) const;
void metrics(MetricsInfo &, Dimension &) const;
virtual void draw(PainterInfo & pi, int x, int y) const;

View File

@ -171,9 +171,9 @@ string const InsetQuotes::dispString(Language const * loclang) const
}
void InsetQuotes::dimension(BufferView *, LyXFont const & font,
Dimension & dim) const
void InsetQuotes::metrics(MetricsInfo & mi, Dimension & dim) const
{
LyXFont & font = mi.base.font;
dim.asc = font_metrics::maxAscent(font);
dim.des = font_metrics::maxDescent(font);
dim.wid = 0;

View File

@ -69,8 +69,9 @@ public:
InsetQuotes(char c, BufferParams const & params);
///
Inset * clone(Buffer const &) const;
///
void dimension(BufferView *, LyXFont const &, Dimension &) const;
void metrics(MetricsInfo &, Dimension &) const;
///
void draw(PainterInfo & pi, int x, int y) const;
#if 0

View File

@ -45,9 +45,9 @@ InsetSpace::Kind InsetSpace::kind() const
}
void InsetSpace::dimension(BufferView *, LyXFont const & font,
Dimension & dim) const
void InsetSpace::metrics(MetricsInfo & mi, Dimension & dim) const
{
LyXFont & font = mi.base.font;
dim.asc = font_metrics::maxAscent(font);
dim.des = font_metrics::maxDescent(font);

View File

@ -54,7 +54,7 @@ public:
///
Kind kind() const;
///
void dimension(BufferView *, LyXFont const &, Dimension &) const;
void metrics(MetricsInfo &, Dimension &) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///

View File

@ -39,9 +39,9 @@ InsetSpecialChar::Kind InsetSpecialChar::kind() const
}
void InsetSpecialChar::dimension(BufferView *, LyXFont const & font,
Dimension & dim) const
void InsetSpecialChar::metrics(MetricsInfo & mi, Dimension & dim) const
{
LyXFont & font = mi.base.font;
dim.asc = font_metrics::maxAscent(font);
dim.des = font_metrics::maxDescent(font);

View File

@ -46,7 +46,7 @@ public:
///
Kind kind() const;
///
void dimension(BufferView *, LyXFont const &, Dimension &) const;
void metrics(MetricsInfo &, Dimension &) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///

View File

@ -243,7 +243,7 @@ void InsetTabular::read(Buffer const * buf, LyXLex & lex)
}
void InsetTabular::dimension(BufferView *, LyXFont const &,
void InsetTabular::metrics(MetricsInfo &,
Dimension & dim) const
{
dim.asc = tabular->GetAscentOfRow(0);

View File

@ -86,7 +86,7 @@ public:
///
void write(Buffer const *, std::ostream &) const;
///
void dimension(BufferView *, LyXFont const &, Dimension &) const;
void metrics(MetricsInfo &, Dimension &) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///

View File

@ -293,15 +293,14 @@ void InsetText::read(Buffer const * buf, LyXLex & lex)
}
void InsetText::dimension(BufferView * bv, LyXFont const &,
Dimension & dim) const
void InsetText::metrics(MetricsInfo & mi, Dimension & dim) const
{
BufferView * bv = mi.base.bv;
LyXText * text = getLyXText(bv);
dim.asc = text->rows().begin()->ascent_of_text() + TEXT_TO_INSET_OFFSET;
dim.des = text->height - dim.asc + TEXT_TO_INSET_OFFSET;
dim.wid = max(textWidth(bv), int(text->width)) + 2 * TEXT_TO_INSET_OFFSET;
dim.wid = max(dim.wid, 10);
// cache it
dim_ = dim;
}
@ -336,9 +335,6 @@ void InsetText::draw(PainterInfo & pi, int x, int baseline) const
BufferView * bv = pi.base.bv;
Painter & pain = pi.pain;
// call this method so that dim_ has the right value
dimension(bv, pi.base.font, dim_);
// repaint the background if needed
if (backgroundColor() != LColor::background)
clearInset(bv, start_x + TEXT_TO_INSET_OFFSET, baseline);

View File

@ -87,7 +87,7 @@ public:
///
void write(Buffer const *, std::ostream &) const;
///
void dimension(BufferView *, LyXFont const &, Dimension &) const;
void metrics(MetricsInfo &, Dimension &) const;
///
int textWidth(BufferView *, bool fordraw = false) const;
///

View File

@ -16,7 +16,7 @@ ButtonInset::ButtonInset()
{}
Dimension ButtonInset::metrics(MetricsInfo & mi) const
void ButtonInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
FontSetChanger dummy(mi.base, "textnormal");
if (editing()) {
@ -28,7 +28,7 @@ Dimension ButtonInset::metrics(MetricsInfo & mi) const
mathed_string_dim(mi.base.font, screenLabel(), dim_);
dim_.wid += 10;
}
return dim_;
dim = dim_;
}

View File

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

View File

@ -89,11 +89,11 @@ InsetFormula::InsetFormula(InsetFormula const & other)
{}
InsetFormula::InsetFormula(BufferView * bv)
InsetFormula::InsetFormula(BufferView *)
: par_(MathAtom(new MathHullInset)),
preview_(new PreviewImpl(*this))
{
view_ = bv->owner()->view();
//view_ = bv->owner()->view();
}
@ -152,7 +152,7 @@ int InsetFormula::ascii(Buffer const *, ostream & os, int) const
par()->drawT(tpain, 0, dim.ascent());
tpain.show(os, 3);
// reset metrics cache to "real" values
metrics();
//metrics();
return tpain.textheight();
} else {
WriteStream wi(os, false, true);
@ -201,7 +201,7 @@ void InsetFormula::read(Buffer const *, LyXLex & lex)
}
}
}
metrics();
//metrics();
}
@ -220,7 +220,11 @@ void InsetFormula::draw(PainterInfo & pi, int x, int y) const
bool const use_preview = preview_->previewReady();
Dimension dim;
dimension(pi.base.bv, pi.base.font, dim);
MetricsInfo mi;
mi.base.bv = pi.base.bv;
mi.base.font = pi.base.font;
metrics(mi, dim);
dim_ = dim;
int const w = dim.wid;
int const d = dim.des;
int const a = dim.asc;
@ -282,23 +286,25 @@ bool InsetFormula::insetAllowed(Inset::Code code) const
}
void InsetFormula::dimension(BufferView * bv, LyXFont const & font,
Dimension & dim) const
void InsetFormula::metrics(MetricsInfo & m, Dimension & dim) const
{
metrics(bv, font, dim);
view_ = m.base.bv;
if (preview_->previewReady()) {
dim.asc = preview_->pimage()->ascent();
int const descent = preview_->pimage()->descent();
dim.des = display() ? descent + 12 : descent;
dim_.asc = preview_->pimage()->ascent();
dim_.des = preview_->pimage()->descent();
// insert a one pixel gap in front of the formula
dim.wid = 1 + preview_->pimage()->width();
dim_.wid = 1 + preview_->pimage()->width();
if (display())
dim_.des += 12;
} else {
MetricsInfo mi;
mi.base.bv = bv;
dim = par()->metrics(mi);
dim.asc += 1;
dim.des += 1;
MetricsInfo mi = m;
mi.base.style = LM_ST_TEXT;
mi.base.font.setColor(LColor::math);
par()->metrics(mi, dim_);
dim_.asc += 1;
dim_.des += 1;
}
dim = dim_;
}

View File

@ -15,12 +15,12 @@
#ifndef INSET_FORMULA_H
#define INSET_FORMULA_H
#include "formulabase.h"
#include "math_atom.h"
#include <boost/scoped_ptr.hpp>
/// The main LyX math inset
class InsetFormula : public InsetFormulaBase {
public:
@ -35,7 +35,7 @@ public:
///
~InsetFormula();
///
void dimension(BufferView *, LyXFont const &, Dimension &) const;
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pi, int x, int y) const;

View File

@ -27,11 +27,11 @@
#include "debug.h"
#include "math_support.h"
#include "metricsinfo.h"
#include "math_data.h"
#include "support/lstrings.h"
#include "frontends/LyXView.h"
#include "frontends/font_metrics.h"
#include "frontends/mouse_state.h"
#include "Lsstream.h"
#include "math_arrayinset.h"
#include "math_charinset.h"
#include "math_deliminset.h"
@ -83,7 +83,7 @@ bool openNewInset(BufferView * bv, UpdatableInset * new_inset)
InsetFormulaBase::InsetFormulaBase()
: font_(), xo_(0), yo_(0)
: xo_(0), yo_(0)
{
// This is needed as long the math parser is not re-entrant
initMath();
@ -133,7 +133,7 @@ void InsetFormulaBase::handleFont
BufferView * InsetFormulaBase::view() const
{
return view_.lock().get();
return view_;
}
@ -141,27 +141,6 @@ void InsetFormulaBase::validate(LaTeXFeatures &) const
{}
void InsetFormulaBase::metrics(BufferView * bv, LyXFont const & f,
Dimension & /*dim*/) const
{
font_ = f;
metrics(bv);
}
void InsetFormulaBase::metrics(BufferView * bv) const
{
if (bv)
view_ = bv->owner()->view();
MetricsInfo mi;
mi.base.bv = bv;
mi.base.style = LM_ST_TEXT;
mi.base.font = font_;
mi.base.font.setColor(LColor::math);
par()->metrics(mi);
}
string const InsetFormulaBase::editMessage() const
{
return _("Math editor mode");
@ -211,7 +190,9 @@ void InsetFormulaBase::fitInsetCursor(BufferView * bv) const
if (!mathcursor)
return;
int x, y, asc, des;
math_font_max_dim(font_, asc, des);
asc = 10;
des = 2;
//math_font_max_dim(font_, asc, des);
getCursorPos(bv, x, y);
//y += yo_;
//lyxerr << "fitInsetCursor: x: " << x << " y: " << y << " yo: " << yo_ << endl;
@ -252,9 +233,11 @@ dispatch_result InsetFormulaBase::lfunMouseRelease(FuncRequest const & cmd)
}
if (cmd.button() == mouse_button::button2) {
MathArray ar;
asArray(bv->getClipboard(), ar);
mathcursor->selClear();
mathcursor->setPos(cmd.x + xo_, cmd.y + yo_);
mathcursor->insert(asArray(bv->getClipboard()));
mathcursor->insert(ar);
bv->updateInset(this);
return DISPATCHED;
}
@ -284,7 +267,7 @@ dispatch_result InsetFormulaBase::lfunMousePress(FuncRequest const & cmd)
lyxerr[Debug::MATHED] << "re-create cursor" << endl;
releaseMathCursor(bv);
mathcursor = new MathCursor(this, cmd.x == 0);
metrics(bv);
//metrics(bv);
mathcursor->setPos(cmd.x + xo_, cmd.y + yo_);
}
@ -356,10 +339,10 @@ dispatch_result InsetFormulaBase::localDispatch(FuncRequest const & cmd)
releaseMathCursor(bv);
if (!cmd.argument.empty()) {
mathcursor = new MathCursor(this, cmd.argument == "left");
metrics(bv);
//metrics(bv);
} else {
mathcursor = new MathCursor(this, true);
metrics(bv);
//metrics(bv);
mathcursor->setPos(cmd.x + xo_, cmd.y + yo_);
}
// if that is removed, we won't get the magenta box when entering an
@ -681,8 +664,8 @@ dispatch_result InsetFormulaBase::localDispatch(FuncRequest const & cmd)
bv->lockedInsetStoreUndo(Undo::EDIT);
if (argument.size() == 1)
result = mathcursor->interpret(argument[0]) ? DISPATCHED : FINISHED_RIGHT;
else
mathcursor->insert(asArray(argument));
else
mathcursor->insert(argument);
}
break;
@ -811,13 +794,13 @@ Inset::Code InsetFormulaBase::lyxCode() const
int InsetFormulaBase::ylow() const
{
return yo_ - ascent(view(), font_);
return yo_ - dim_.asc;
}
int InsetFormulaBase::yhigh() const
{
return yo_ + descent(view(), font_);
return yo_ + dim_.des;
}
@ -829,7 +812,7 @@ int InsetFormulaBase::xlow() const
int InsetFormulaBase::xhigh() const
{
return xo_ + width(view(), font_);
return xo_ + dim_.wid;
}
@ -868,7 +851,7 @@ bool InsetFormulaBase::searchForward(BufferView * bv, string const & str,
}
delete mathcursor;
mathcursor = new MathCursor(this, true);
metrics(bv);
//metrics(bv);
mathcursor->setSelection(it, ar.size());
current = it;
it.jump(ar.size());

View File

@ -14,7 +14,7 @@
#define INSET_FORMULABASE_H
#include "insets/updatableinset.h"
#include "lyxfont.h"
#include "dimension.h"
#include <boost/weak_ptr.hpp>
#include <iosfwd>
@ -108,15 +108,10 @@ private:
protected:
///
mutable boost::weak_ptr<BufferView> view_;
///
mutable LyXFont font_;
//mutable boost::weak_ptr<BufferView> view_;
mutable BufferView * view_;
protected:
///
void metrics(BufferView * bv, LyXFont const & font, Dimension & dim) const;
///
void metrics(BufferView * bv = 0) const;
///
void handleFont(BufferView * bv, string const & arg, string const & font);
@ -124,6 +119,8 @@ protected:
mutable int xo_;
///
mutable int yo_;
///
mutable Dimension dim_;
};
// We don't really mess want around with mathed stuff outside mathed.

View File

@ -29,16 +29,13 @@
#include "frontends/Painter.h"
#include "frontends/font_metrics.h"
#include "support/lyxlib.h"
#include "support/lstrings.h"
#include "support/LOstream.h"
#include "debug.h"
#include "lyxlex.h"
#include "lyxtext.h"
#include "lyxfont.h"
#include "Lsstream.h"
#include "support/BoostFormat.h"
using std::ostream;
extern MathCursor * mathcursor;
@ -125,31 +122,24 @@ void InsetFormulaMacro::read(std::istream & is)
MathMacroTemplate * p = new MathMacroTemplate(is);
setInsetName(p->name());
MathMacroTable::create(MathAtom(p));
metrics();
//metrics();
}
string InsetFormulaMacro::prefix() const
{
#if USE_BOOST_FORMAT
return STRCONV(boost::io::str(boost::format(_(" Macro: %s: ")) %
STRCONV(getInsetName())));
#else
return _(" Macro: ") + getInsetName() + ": ";
#endif
return bformat(_(" Macro: %s: "), getInsetName());
}
void InsetFormulaMacro::dimension(BufferView * bv, LyXFont const & font,
Dimension & dim) const
void InsetFormulaMacro::metrics(MetricsInfo & m, Dimension & dim) const
{
MetricsInfo mi;
mi.base.bv = bv;
mi.base.font = font;
dim = par()->metrics(mi);
dim.asc += 5;
dim.des += 5;
dim.wid += 10 + font_metrics::width(prefix(), font);
MetricsInfo mi = m;
par()->metrics(mi, dim_);
dim_.asc += 5;
dim_.des += 5;
dim_.wid += 10 + font_metrics::width(prefix(), mi.base.font);
dim = dim_;
}
@ -182,7 +172,11 @@ void InsetFormulaMacro::draw(PainterInfo & p, int x, int y) const
pi.base.font = font;
Dimension dim;
dimension(pi.base.bv, font, dim);
MetricsInfo mi;
mi.base.bv = pi.base.bv;
mi.base.font = pi.base.font;
metrics(mi, dim);
dim_ = dim;
int const a = y - dim.asc + 1;
int const w = dim.wid - 2;
int const h = dim.height() - 2;

View File

@ -33,7 +33,7 @@ public:
/// constructs a mocro from its LaTeX definition
explicit InsetFormulaMacro(string const & s);
///
void dimension(BufferView *, LyXFont const &, Dimension &) const;
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pi, int x, int y) const;

View File

@ -3,7 +3,6 @@
#include "math_amsarrayinset.h"
#include "math_mathmlstream.h"
#include "metricsinfo.h"
#include "math_support.h"
#include "math_streamstr.h"
#include "math_support.h"
#include "Lsstream.h"
@ -57,14 +56,14 @@ char const * MathAMSArrayInset::name_right() const
}
Dimension MathAMSArrayInset::metrics(MetricsInfo & mi) const
void MathAMSArrayInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
MetricsInfo m = mi;
if (m.base.style == LM_ST_DISPLAY)
m.base.style = LM_ST_TEXT;
MathGridInset::metrics(m);
dim_.wid += 12;
return dim_;
dim = dim_;
}

View File

@ -22,7 +22,7 @@ public:
///
MathInset * clone() const;
///
Dimension metrics(MetricsInfo & mi) const;
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pain, int x, int y) const;
///

View File

@ -63,12 +63,12 @@ MathInset * MathArrayInset::clone() const
}
Dimension MathArrayInset::metrics(MetricsInfo & mi) const
void MathArrayInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
ArrayChanger dummy(mi.base);
MathGridInset::metrics(mi);
metricsMarkers2();
return dim_;
dim = dim_;
}

View File

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

View File

@ -35,14 +35,14 @@ double MathBigInset::increase() const
}
Dimension MathBigInset::metrics(MetricsInfo & mi) const
void MathBigInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
double const h = mathed_char_ascent(mi.base.font, 'I');
double const f = increase();
dim_.wid = 6;
dim_.asc = int(h + f * h);
dim_.des = int(f * h);
return dim_;
dim = dim_;
}

View File

@ -26,7 +26,7 @@ public:
///
MathInset * clone() const;
///
Dimension metrics(MetricsInfo & mi) const;
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///

View File

@ -28,7 +28,7 @@ int MathBinaryOpInset::opwidth() const
}
Dimension MathBinaryOpInset::metrics(MetricsInfo & mi) const
void MathBinaryOpInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
mi_ = mi;
cell(0).metrics(mi);

View File

@ -31,7 +31,7 @@ int MathBinomInset::dw() const
}
Dimension MathBinomInset::metrics(MetricsInfo & mi) const
void MathBinomInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
ScriptChanger dummy(mi.base);
cell(0).metrics(mi);
@ -39,7 +39,7 @@ Dimension MathBinomInset::metrics(MetricsInfo & mi) const
dim_.asc = cell(0).height() + 4 + 5;
dim_.des = cell(1).height() + 4 - 5;
dim_.wid = max(cell(0).width(), cell(1).width()) + 2 * dw() + 4;
return dim_;
dim = dim_;
}

View File

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

View File

@ -32,12 +32,12 @@ void MathBoxInset::normalize(NormalStream & os) const
}
Dimension MathBoxInset::metrics(MetricsInfo & mi) const
void MathBoxInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
FontSetChanger dummy(mi.base, "textnormal");
cell(0).metrics(mi, dim_);
metricsMarkers();
return dim_;
dim = dim_;
}

View File

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

View File

@ -27,7 +27,7 @@ MathInset * MathBraceInset::clone() const
}
Dimension MathBraceInset::metrics(MetricsInfo & mi) const
void MathBraceInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
cell(0).metrics(mi);
Dimension t;
@ -36,7 +36,7 @@ Dimension MathBraceInset::metrics(MetricsInfo & mi) const
dim_.asc = max(cell(0).ascent(), t.asc);
dim_.des = max(cell(0).descent(), t.des);
dim_.wid = cell(0).width() + 2 * wid_;
return dim_;
dim = dim_;
}

View File

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

View File

@ -20,11 +20,11 @@ MathInset * MathCasesInset::clone() const
}
Dimension MathCasesInset::metrics(MetricsInfo & mi) const
void MathCasesInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
MathGridInset::metrics(mi);
dim_.wid += 8;
return dim_;
dim = dim_;
}

View File

@ -14,7 +14,7 @@ public:
///
MathInset * clone() const;
///
Dimension metrics(MetricsInfo & mi) const;
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pain, int x, int y) const;

View File

@ -2,6 +2,7 @@
#include "math_charinset.h"
#include "LColor.h"
#include "dimension.h"
#include "frontends/Painter.h"
#include "frontends/font_metrics.h"
#include "support/LOstream.h"
@ -54,9 +55,8 @@ MathInset * MathCharInset::clone() const
}
Dimension MathCharInset::metrics(MetricsInfo & mi) const
void MathCharInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
Dimension dim;
#if 1
if (char_ == '=' && has_math_fonts) {
FontSetChanger dummy(mi.base, "cmr");
@ -82,7 +82,6 @@ Dimension MathCharInset::metrics(MetricsInfo & mi) const
width_ += 2 * font_metrics::width(' ', font_);
lyxerr << "MathCharInset::metrics: " << dim << "\n";
#endif
return dim;
}

View File

@ -18,7 +18,7 @@ public:
///
MathInset * clone() const;
///
Dimension metrics(MetricsInfo & mi) const;
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///

View File

@ -1,14 +1,14 @@
#include <config.h>
#include "math_commentinset.h"
#include "math_data.h"
#include "math_support.h"
#include "math_mathmlstream.h"
#include "LaTeXFeatures.h"
#include "support/LOstream.h"
#include "textpainter.h"
MathCommentInset::MathCommentInset()
: MathNestInset(1)
{}
@ -17,7 +17,7 @@ MathCommentInset::MathCommentInset()
MathCommentInset::MathCommentInset(string const & str)
: MathNestInset(1)
{
cell(0) = asArray(str);
asArray(str, cell(0));
}
@ -27,11 +27,11 @@ MathInset * MathCommentInset::clone() const
}
Dimension MathCommentInset::metrics(MetricsInfo & mi) const
void MathCommentInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
cell(0).metrics(mi);
metricsMarkers();
return dim_;
dim = dim_;
}

View File

@ -22,7 +22,7 @@ public:
///
MathInset * clone() const;
///
Dimension metrics(MetricsInfo & mi) const;
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///

View File

@ -346,6 +346,14 @@ void MathCursor::plainInsert(MathAtom const & t)
}
void MathCursor::insert2(string const & str)
{
MathArray ar;
asArray(str, ar);
insert(ar);
}
void MathCursor::insert(string const & str)
{
//lyxerr << "inserting '" << str << "'\n";
@ -373,7 +381,8 @@ void MathCursor::insert(MathAtom const & t)
void MathCursor::niceInsert(string const & t)
{
MathArray ar = asArray(t);
MathArray ar;
asArray(t, ar);
if (ar.size() == 1)
niceInsert(ar[0]);
else
@ -624,7 +633,7 @@ void MathCursor::drawSelection(PainterInfo & pi) const
void MathCursor::handleNest(MathAtom const & a)
{
MathAtom at = a;
at.nucleus()->cell(0) = asArray(grabAndEraseSelection());
asArray(grabAndEraseSelection(), at.nucleus()->cell(0));
insert(at);
pushRight(prevAtom());
}

View File

@ -63,6 +63,8 @@ public:
///
void insert(MathArray const &);
///
void insert2(string const &);
///
void paste(string const & data);
/// return false for empty math insets
bool erase();

View File

@ -12,6 +12,7 @@
#include "debug.h"
#include "support/LAssert.h"
#include "metricsinfo.h"
#include "math_data.h"
#include "frontends/Painter.h"
#include "textpainter.h"
@ -220,8 +221,9 @@ void MathArray::metrics(MetricsInfo & mi) const
if (!empty()) {
dim_.wid = 0;
Dimension d;
for (const_iterator it = begin(), et = end(); it != et; ++it) {
Dimension d = (*it)->metrics(mi);
(*it)->metrics(mi, d);
dim_ += d;
it->width_ = d.wid;
}

View File

@ -72,7 +72,7 @@ bool MathDecorationInset::wide() const
}
Dimension MathDecorationInset::metrics(MetricsInfo & mi) const
void MathDecorationInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
cell(0).metrics(mi);
dim_ = cell(0).dim();
@ -89,7 +89,7 @@ Dimension MathDecorationInset::metrics(MetricsInfo & mi) const
}
metricsMarkers();
return dim_;
dim = dim_;
}

View File

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

View File

@ -72,7 +72,7 @@ void MathDelimInset::normalize(NormalStream & os) const
}
Dimension MathDelimInset::metrics(MetricsInfo & mi) const
void MathDelimInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
cell(0).metrics(mi);
Dimension t;
@ -88,7 +88,7 @@ Dimension MathDelimInset::metrics(MetricsInfo & mi) const
dim_.wid = cell(0).width() + 2 * dw_ + 8;
dim_.asc = max(a0, d0) + h0;
dim_.des = max(a0, d0) - h0;
return dim_;
dim = dim_;
}

View File

@ -31,7 +31,7 @@ public:
/// is it |...|?
bool isAbs() const;
///
Dimension metrics(MetricsInfo & mi) const;
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo &, int x, int y) const;

View File

@ -32,10 +32,9 @@ void MathDiffInset::normalize(NormalStream & os) const
}
Dimension MathDiffInset::metrics(MetricsInfo &) const
void MathDiffInset::metrics(MetricsInfo &, Dimension &) const
{
lyxerr << "should not happen\n";
return Dimension();
}

View File

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

View File

@ -18,7 +18,7 @@ MathInset * MathDotsInset::clone() const
}
Dimension MathDotsInset::metrics(MetricsInfo & mi) const
void MathDotsInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
mathed_char_dim(mi.base.font, 'M', dim_);
dh_ = 0;
@ -33,7 +33,7 @@ Dimension MathDotsInset::metrics(MetricsInfo & mi) const
}
else if (key_->name == "ddots")
dh_ = dim_.asc;
return dim_;
dim = dim_;
}

View File

@ -15,7 +15,7 @@ public:
///
MathInset * clone() const;
///
Dimension metrics(MetricsInfo & mi) const;
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///

View File

@ -1,6 +1,5 @@
#include <config.h>
#include "math_envinset.h"
#include "math_mathmlstream.h"
#include "math_streamstr.h"
@ -18,11 +17,11 @@ MathInset * MathEnvInset::clone() const
}
Dimension MathEnvInset::metrics(MetricsInfo & mi) const
void MathEnvInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
cell(0).metrics(mi, dim_);
metricsMarkers();
return dim_;
dim = dim_;
}

View File

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

View File

@ -12,13 +12,13 @@ MathInset * MathErtInset::clone() const
}
Dimension MathErtInset::metrics(MetricsInfo & mi) const
void MathErtInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
FontSetChanger dummy(mi.base, "lyxert");
MathTextInset::metrics(mi);
MathTextInset::metrics(mi, dim_);
cache_.colinfo_[0].align_ = 'l';
metricsMarkers();
return dim_;
dim = dim_;
}

View File

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

View File

@ -25,7 +25,7 @@ MathInset * MathExFuncInset::clone() const
}
Dimension MathExFuncInset::metrics(MetricsInfo & mi) const
void MathExFuncInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
mathed_string_dim(mi.base.font, name_, dim_);
}

View File

@ -17,7 +17,7 @@ public:
///
MathInset * clone() const;
///
Dimension metrics(MetricsInfo & mi) const;
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///

View File

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

View File

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

View File

@ -41,6 +41,7 @@
#include "ref_inset.h"
#include "metricsinfo.h"
#include "math_data.h"
#include "debug.h"
#include "math_support.h"
#include "Lsstream.h"

View File

@ -28,7 +28,7 @@ MathInset::mode_type MathFboxInset::currentMode() const
}
Dimension MathFboxInset::metrics(MetricsInfo & mi) const
void MathFboxInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
if (key_->name == "fbox") {
FontSetChanger dummy(mi.base, "textnormal");
@ -37,7 +37,7 @@ Dimension MathFboxInset::metrics(MetricsInfo & mi) const
cell(0).metrics(mi, dim_);
}
metricsMarkers(5); // 5 pixels margin
return dim_;
dim = dim_;
}

View File

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

View File

@ -32,12 +32,12 @@ MathInset::mode_type MathFontInset::currentMode() const
}
Dimension MathFontInset::metrics(MetricsInfo & mi) const
void MathFontInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
FontSetChanger dummy(mi.base, key_->name.c_str());
cell(0).metrics(mi, dim_);
metricsMarkers(1);
return dim_;
dim = dim_;
}

View File

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

View File

@ -25,12 +25,12 @@ MathInset * MathFontOldInset::clone() const
}
Dimension MathFontOldInset::metrics(MetricsInfo & mi) const
void MathFontOldInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
FontSetChanger dummy(mi.base, key_->name.c_str());
cell(0).metrics(mi, dim_);
metricsMarkers(1);
return dim_;
dim = dim_;
}

View File

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

View File

@ -32,7 +32,7 @@ MathFracInset const * MathFracInset::asFracInset() const
}
Dimension MathFracInset::metrics(MetricsInfo & mi) const
void MathFracInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
FracChanger dummy(mi.base);
cell(0).metrics(mi);
@ -40,7 +40,7 @@ Dimension MathFracInset::metrics(MetricsInfo & mi) const
dim_.wid = max(cell(0).width(), cell(1).width()) + 2;
dim_.asc = cell(0).height() + 2 + 5;
dim_.des = cell(1).height() + 2 - 5;
return dim_;
dim = dim_;
}
@ -62,7 +62,7 @@ void MathFracInset::metricsT(TextMetricsInfo const & mi, Dimension & dim) const
dim.wid = max(cell(0).width(), cell(1).width());
dim.asc = cell(0).height() + 1;
dim.des = cell(1).height();
//return dim_;
//dim = dim_;
}

View File

@ -17,7 +17,7 @@ public:
///
MathInset * clone() const;
///
Dimension metrics(MetricsInfo & mi) const;
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo &, int x, int y) const;
///

View File

@ -18,7 +18,7 @@ MathInset * MathFrameboxInset::clone() const
}
Dimension MathFrameboxInset::metrics(MetricsInfo & mi) const
void MathFrameboxInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
FontSetChanger dummy(mi.base, "textnormal");
w_ = mathed_char_width(mi.base.font, '[');
@ -27,7 +27,7 @@ Dimension MathFrameboxInset::metrics(MetricsInfo & mi) const
dim_ += cell(1).dim();
dim_ += cell(2).dim();
metricsMarkers();
return dim_;
dim = dim_;
}

View File

@ -18,7 +18,7 @@ public:
///
MathInset * clone() const;
///
Dimension metrics(MetricsInfo & mi) const;
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///

View File

@ -298,7 +298,7 @@ LyXLength MathGridInset::vcrskip(row_type row) const
}
Dimension MathGridInset::metrics(MetricsInfo & mi) const
void MathGridInset::metrics(MetricsInfo & mi) const
{
// let the cells adjust themselves
MathNestInset::metrics(mi);
@ -434,7 +434,13 @@ Dimension MathGridInset::metrics(MetricsInfo & mi) const
cxrow->setBaseline(cxrow->getBaseline() - ascent);
}
*/
return dim_;
}
void MathGridInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
metrics(mi);
dim = dim_;
}
@ -1020,17 +1026,14 @@ dispatch_result MathGridInset::dispatch
case LFUN_MOUSE_RELEASE:
//if (cmd.button() == mouse_button::button3) {
// GridInsetMailer mailer(*this);
// mailer.showDialog();
// GridInsetMailer(*this).showDialog();
// return DISPATCHED;
//}
break;
return UNDISPATCHED;
case LFUN_INSET_DIALOG_UPDATE: {
GridInsetMailer mailer(*this);
mailer.updateDialog(cmd.view());
break;
}
case LFUN_INSET_DIALOG_UPDATE:
GridInsetMailer(*this).updateDialog(cmd.view());
return UNDISPATCHED;
// insert file functions
case LFUN_DELETE_LINE_FORWARD:
@ -1164,5 +1167,4 @@ dispatch_result MathGridInset::dispatch
default:
return MathNestInset::dispatch(cmd, idx, pos);
}
return UNDISPATCHED;
}

View File

@ -92,7 +92,9 @@ public:
///
MathInset * clone() const;
///
Dimension metrics(MetricsInfo & mi) const;
void metrics(MetricsInfo & mi) const;
///
void metrics(MetricsInfo & mi, Dimension &) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///

View File

@ -165,7 +165,7 @@ char const * MathHullInset::standardFont() const
}
Dimension MathHullInset::metrics(MetricsInfo & mi) const
void MathHullInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
FontSetChanger dummy1(mi.base, standardFont());
StyleChanger dummy2(mi.base, display() ? LM_ST_DISPLAY : LM_ST_TEXT);
@ -197,7 +197,7 @@ Dimension MathHullInset::metrics(MetricsInfo & mi) const
// for markers
metricsMarkers2();
return dim_;
dim = dim_;
}
@ -697,7 +697,7 @@ void MathHullInset::doExtern
size_type pos = cell(idx).find_last(eq);
MathArray ar;
if (mathcursor && mathcursor->selection()) {
ar = asArray(mathcursor->grabAndEraseSelection());
asArray(mathcursor->grabAndEraseSelection(), ar);
} else if (pos == cell(idx).size()) {
ar = cell(idx);
lyxerr << "use whole cell: " << ar << "\n";

View File

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

View File

@ -17,9 +17,8 @@ MathInset * MathInferInset::clone() const
}
Dimension MathInferInset::metrics(MetricsInfo &) const
void MathInferInset::metrics(MetricsInfo &, Dimension &) const
{
return Dimension();
}

View File

@ -17,7 +17,7 @@ public:
///
MathInset * clone() const;
///
Dimension metrics(MetricsInfo & mi) const;
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void draw(PainterInfo & pi, int x, int y) const;
///

View File

@ -18,11 +18,9 @@
#include <config.h>
#include "math_inset.h"
#include "Lsstream.h"
#include "math_scriptinset.h"
#include "math_mathmlstream.h"
#include "math_cursor.h"
#include "math_parser.h"
#include "debug.h"
#include "frontends/LyXView.h"
@ -35,9 +33,7 @@ using std::ostream;
BufferView * MathInset::view() const
{
if (!mathcursor)
return 0;
return mathcursor->formula()->view();
return mathcursor ? mathcursor->formula()->view() : 0;
}
@ -158,12 +154,6 @@ bool MathInset::idxBetween(idx_type idx, idx_type from, idx_type to) const
}
void MathInset::draw(PainterInfo &, int, int) const
{
lyxerr << "MathInset::draw() called directly!\n";
}
void MathInset::drawSelection(PainterInfo &,
idx_type, pos_type, idx_type, pos_type) const
{
@ -267,23 +257,6 @@ string MathInset::name() const
}
string asString(MathArray const & ar)
{
std::ostringstream os;
WriteStream ws(os);
ws << ar;
return STRCONV(os.str());
}
MathArray asArray(string const & str)
{
MathArray ar;
mathed_parse_cell(ar, str);
return ar;
}
ostream & operator<<(ostream & os, MathAtom const & at)
{
WriteStream wi(os, false, false);

View File

@ -16,9 +16,6 @@
* the GNU General Public Licence version 2 or later.
*/
// Note: These math insets are internal to Math and are not derived
// from lyx inset.
#ifndef MATH_INSET_H
#define MATH_INSET_H
@ -26,7 +23,6 @@
#include "LString.h"
#include "insets/insetbase.h"
#include "math_data.h"
/**
@ -36,8 +32,8 @@ the math objects.
Math insets do not know there parents, a cursor position or things
like that. The are dumb object that are contained in other math insets
(mathNestInsets, in fact) thus forming a tree. The root of this tree is
always a mathHullInset, which provides an interface to the Outer World by
(MathNestInsets, in fact) thus forming a tree. The root of this tree is
always a MathHullInset, which provides an interface to the Outer World by
inclusion in the "real LyX insets" FormulaInset and FormulaMacroInset.
*/
@ -47,9 +43,9 @@ class MathArrayInset;
class MathAMSArrayInset;
class MathCharInset;
class MathDelimInset;
class MathGridInset;
class MathFracInset;
class MathFontInset;
class MathGridInset;
class MathHullInset;
class MathMatrixInset;
class MathNestInset;
@ -62,6 +58,9 @@ class MathUnknownInset;
class RefInset;
class MathArray;
class MathAtom;
class NormalStream;
class OctaveStream;
class MapleStream;
@ -70,32 +69,22 @@ class MathematicaStream;
class MathMLStream;
class WriteStream;
class InfoStream;
class MathArray;
class LaTeXFeatures;
class BufferView;
class UpdatableInset;
class MathMacroTemplate;
class MathMacro;
class MathPosFinder;
class Dimension;
class FuncRequest;
class TextPainter;
class TextMetricsInfo;
class ReplaceData;
class MathInset : public InsetBase {
public:
/// short of anything else reasonable
typedef MathArray::size_type size_type;
/// type for cursor positions differences within a cell
typedef MathArray::difference_type difference_type;
/// type for cursor positions within a cell
typedef MathArray::size_type pos_type;
/// type for cell indices
typedef size_type idx_type;
/// type for row numbers
typedef size_type row_type;
/// type for column numbers
typedef size_type col_type;
/// our members behave nicely...
MathInset() {}
@ -103,11 +92,6 @@ public:
virtual MathInset * clone() const = 0;
/// substitutes macro arguments if necessary
virtual void substitute(MathMacro const & macro);
/// compute the size of the object returned in dim
virtual Dimension metrics(MetricsInfo & mi) const = 0;
/// draw the object
// updates the (xo,yo)-caches of all contained cells
virtual void draw(PainterInfo & pi, int x, int y) const;
/// draw selection between two positions
virtual void drawSelection(PainterInfo & pi,
idx_type idx1, pos_type pos1, idx_type idx2, pos_type pos2) const;
@ -295,11 +279,6 @@ protected:
std::ostream & operator<<(std::ostream &, MathAtom const &);
// converts single cell to string
string asString(MathArray const & ar);
// converts string to single cell
MathArray asArray(string const & str);
// initialize math
void initMath();

View File

@ -28,13 +28,11 @@ MathInset * MathKernInset::clone() const
}
Dimension MathKernInset::metrics(MetricsInfo & mi) const
void MathKernInset::metrics(MetricsInfo & mi, Dimension & dim) const
{
Dimension dim;
dim.wid = wid_.inPixels(0, mathed_char_width(mi.base.font, 'M'));
dim.asc = 0;
dim.des = 0;
return dim;
}

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