X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fmath_atom.h;h=04cf2a391d637599f9934cda7b319bcdcacc64e1;hb=46880e2b9b49632c56bab2377ce9a3c826cf8d1d;hp=b6137142ce9636c0fe213bf29e231ebe57d30b2a;hpb=c800129f2b84b996f5d2a03229f8696c32efa141;p=lyx.git diff --git a/src/mathed/math_atom.h b/src/mathed/math_atom.h index b6137142ce..04cf2a391d 100644 --- a/src/mathed/math_atom.h +++ b/src/mathed/math_atom.h @@ -3,148 +3,60 @@ #ifndef MATH_ATOM_H #define MATH_ATOM_H -#include -#include - #ifdef __GNUG__ #pragma interface #endif -#include "math_defs.h" - -/** +/** The 'atom' is the major blob in math typesetting. And 'atom' consists of a nucleus, an optional superscript, and an optional subscript. Exactly where the subscript and superscript are drawn depends on the -size, and type, of the nucleus they are attached to. +size, and type, of the nucleus they are attached to. Jules + +-- + +Ok: Implementing it thusly is not feasible since cursor movement gets +hackish. We use MathAtom only as a wrapper around MathInset * with value +semantics. + +The MathAtom owns the MathInset * and is responsible for proper cloning and +destruction. Every MathInset * should be put into a MathAtom after its +creation as soon as possible. + +Andre' + */ -class LaTeXFeatures; -class MathCharInset; -class MathScriptInset; class MathInset; -class MathMacro; -class MathArray; -class Painter; class MathAtom { -public: - /// +public: + /// default constructor, object is useless, but we need it to put it into + // std::containers MathAtom(); - /// - MathAtom(MathAtom const &); - /// + /// the "real constructor" explicit MathAtom(MathInset * p); - /// - virtual ~MathAtom(); - /// + /// copy constructor, invokes nucleus_->clone() + MathAtom(MathAtom const &); + /// we really need to clean up + ~MathAtom(); + /// assignment invokes nucleus_->clone() void operator=(MathAtom const &); - /// - void swap(MathAtom &); - - /// draw the object, sets xo_ and yo_ cached values - virtual void draw(Painter &, int x, int y) const; - /// reproduce itself - void metrics(MathStyles st) const; - /// - int ascent() const; - /// - int descent() const; - /// - int width() const; - /// - int height() const; - - /// - int xo() const; - /// - int yo() const; - /// - void xo(int tx) const; - /// - void yo(int ty) const; - /// - - /// - void getXY(int & x, int & y) const; - /// - bool covers(int x, int y) const; - - /// - void dump() const; - /// - void validate(LaTeXFeatures & features) const; - /// - void handleFont(MathTextCodes) {} - - /// make sure superscript is available - MathScriptInset * ensure(bool up); - /// delete subscript array if empty - void removeEmptyScripts(); - /// can we add a super- or subscript? - virtual bool allows(bool up) const { return script_[up] == 0; } - /// can we add a super- or subscript? - virtual bool allowsLimits() const { return true; } - /// set limits - void limits(int lim) { limits_ = lim; } - /// - int limits() const { return limits_; } - /// - bool hasLimits() const; - /// returns superscript - MathScriptInset * up() const; - /// returns subscript - MathScriptInset * down() const; - /// + /// change inset under the hood + void operator=(MathInset * p); + /// change inset under the hood + void reset(MathInset * p); + /// access to the inset (checked with gprof) MathInset * nucleus() const { return nucleus_; } - /// - void substitute(const MathMacro &); - /// - void write(std::ostream &, bool) const; - /// - void writeNormal(std::ostream &) const; + /// access to the inset + MathInset * operator->() const { return nucleus_; } -protected: - /// possible subscript (index 0) and superscript (index 1) - MathScriptInset * script_[2]; +private: /// MathInset * nucleus_; - /// - int limits_; - -private: - /// the following are used for positioning the cursor with the mouse - /// cached cursor start position in pixels from the document left - mutable int xo_; - /// cached cursor start position in pixels from the document top - mutable int yo_; - - /// raw copy - void copy(MathAtom const & p); - /// raw destruction - void done(); - - /// returns y offset for superscript - int dy0() const; - /// returns y offset for subscript - int dy1() const; - /// returns x offset for superscript - int dx0() const; - /// returns x offset for subscript - int dx1() const; - /// returns x offset for main part - int dxx() const; - /// returns width of nucleus if any - int nwid() const; - /// returns ascent of nucleus if any - int nasc() const; - /// returns descent of nucleus if any - int ndes() const; }; -std::ostream & operator<<(std::ostream &, MathAtom const &); - #endif