diff --git a/src/mathed/math_cursor.C b/src/mathed/math_cursor.C index ee057dedc2..9d5e20a53c 100644 --- a/src/mathed/math_cursor.C +++ b/src/mathed/math_cursor.C @@ -279,9 +279,7 @@ bool MathCursor::posLeft() { if (pos() == 0) return false; - --pos(); - return true; } @@ -290,9 +288,7 @@ bool MathCursor::posRight() { if (pos() == size()) return false; - ++pos(); - return true; } @@ -313,7 +309,7 @@ bool MathCursor::left(bool sel) return true; } - return posLeft() || idxLeft() || popLeft(); + return posLeft() || idxLeft() || popLeft() || selection_; } @@ -333,7 +329,7 @@ bool MathCursor::right(bool sel) return true; } - return posRight() || idxRight() || popRight(); + return posRight() || idxRight() || popRight() || selection_; } @@ -591,7 +587,7 @@ bool MathCursor::up(bool sel) } } - return goUp(); + return goUp() || selection_; } @@ -624,7 +620,7 @@ bool MathCursor::down(bool sel) } } - return goDown(); + return goDown() || selection_; } diff --git a/src/mathed/math_macro.C b/src/mathed/math_macro.C index 7f6938b026..5db4fe185a 100644 --- a/src/mathed/math_macro.C +++ b/src/mathed/math_macro.C @@ -23,8 +23,8 @@ #include "support/lstrings.h" #include "support/LAssert.h" #include "debug.h" -#include "mathed/support.h" -#include "mathed/math_cursor.h" +#include "support.h" +#include "math_cursor.h" #include "math_macrotable.h" #include "math_macrotemplate.h" #include "Painter.h" @@ -57,9 +57,28 @@ const char * MathMacro::name() const } +bool MathMacro::defining() const +{ + return 0; + //return mathcursor && mathcursor->formula()->getInsetName() == name(); +} + + +bool MathMacro::editing() const +{ + return mathcursor && mathcursor->isInside(this); +} + + void MathMacro::metrics(MathStyles st) const { - if (mathcursor && mathcursor->isInside(this)) { + if (defining()) { + size_ = st; + mathed_string_dim(LM_TC_TEX, size_, name(), ascent_, descent_, width_); + return; + } + + if (editing()) { expanded_ = tmplate_->xcell(0); expanded_.metrics(st); size_ = st; @@ -81,15 +100,16 @@ void MathMacro::metrics(MathStyles st) const descent_ += std::max(c.ascent(), lasc) + 5; descent_ += std::max(c.descent(), ldes) + 5; } - } else { - expanded_ = tmplate_->xcell(0); - expanded_.data_.substitute(*this); - expanded_.metrics(st); - size_ = st; - width_ = expanded_.width() + 6; - ascent_ = expanded_.ascent() + 3; - descent_ = expanded_.descent() + 3; - } + return; + } + + expanded_ = tmplate_->xcell(0); + expanded_.data_.substitute(*this); + expanded_.metrics(st); + size_ = st; + width_ = expanded_.width() + 6; + ascent_ = expanded_.ascent() + 3; + descent_ = expanded_.descent() + 3; } @@ -100,10 +120,12 @@ void MathMacro::draw(Painter & pain, int x, int y) const metrics(size()); - //LColor::color col; - - if (mathcursor && mathcursor->isInside(this)) { + if (defining()) { + drawStr(pain, LM_TC_TEX, size_, x, y, name()); + return; + } + if (editing()) { int h = y - ascent() + 2 + expanded_.ascent(); drawStr(pain, LM_TC_TEXTRM, size(), x + 3, h, name()); @@ -125,14 +147,10 @@ void MathMacro::draw(Painter & pain, int x, int y) const drawStr(pain, LM_TC_TEX, size(), x + 3, h, str); h += std::max(c.descent(), ldes) + 5; } - //col = LColor::red; - } else { - expanded_.draw(pain, x + 3, y); - //col = LColor::black; + return; } - //if (nargs() > 0) - // pain.rectangle(x + 1, y - ascent() + 1, width() - 2, height() - 2, col); + expanded_.draw(pain, x + 3, y); } diff --git a/src/mathed/math_macro.h b/src/mathed/math_macro.h index 8cf2107f56..05362ee2a0 100644 --- a/src/mathed/math_macro.h +++ b/src/mathed/math_macro.h @@ -73,6 +73,10 @@ private: void operator=(MathMacro const &); /// char const * name() const; + /// + bool editing() const; + /// + bool defining() const; /// MathAtom & tmplate_;