]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/math_xdata.C
whichFont down to 5.3%
[lyx.git] / src / mathed / math_xdata.C
index f7e5a092d01acb07176cd14637e6df5445755757..8f4ba899bd87235b20bf1d0b1d8952a9d4d36a19 100644 (file)
@@ -21,24 +21,24 @@ MathXArray::MathXArray()
 void MathXArray::metrics(MathMetricsInfo const & mi) const
 {
        size_ = mi;
-       mathed_char_dim(LM_TC_VAR, mi, 'I', ascent_, descent_, width_);
 
-       if (data_.empty()) 
+       if (data_.empty()) {
+               mathed_char_dim(LM_TC_VAR, mi, 'I', ascent_, descent_, width_);
                return;
+       }
 
-       math_font_max_dim(LM_TC_TEXTRM, mi, ascent_, descent_); 
-       width_ = 0;
+       ascent_  = 0;
+       descent_ = 0;
+       width_   = 0;
 
-       //lyxerr << "MathXArray::metrics(): '" << data_ << "'\n";
-       
        for (const_iterator it = begin(); it != end(); ++it) {
                MathInset const * p = it->nucleus();
                MathScriptInset const * q = (it + 1 == end()) ? 0 : asScript(it);
                if (q) {
                        q->metrics(p, mi);
-                       ascent_  = std::max(ascent_,  q->ascent(p));
-                       descent_ = std::max(descent_, q->descent(p));
-                       width_  += q->width(p); 
+                       ascent_  = std::max(ascent_,  q->ascent2(p));
+                       descent_ = std::max(descent_, q->descent2(p));
+                       width_  += q->width2(p);        
                        ++it;
                } else {
                        p->metrics(mi);
@@ -67,7 +67,7 @@ void MathXArray::draw(Painter & pain, int x, int y) const
                MathScriptInset const * q = (it + 1 == end()) ? 0 : asScript(it);
                if (q) {
                        q->draw(p, pain, x, y);
-                       x += q->width(p);
+                       x += q->width2(p);
                        ++it;
                } else {
                        p->draw(pain, x, y);
@@ -87,7 +87,7 @@ int MathXArray::pos2x(size_type targetpos) const
                if (q) {
                        ++it;
                        if (it < target)
-                               x += q->width(p);
+                               x += q->width2(p);
                        else  // "half" position
                                x += q->dxx(p) + q->nwid(p);
                } else
@@ -111,7 +111,7 @@ MathArray::size_type MathXArray::x2pos(int targetx) const
                if (it + 1 != end())
                        q = asScript(it);
                if (q) {
-                       wid = q->width(p);
+                       wid = q->width2(p);
                        ++it;
                } else
                        wid = p->width();
@@ -141,3 +141,59 @@ int MathXArray::dist(int x, int y) const
 
        return xx + yy; 
 }
+
+
+void MathXArray::boundingBox(int & x1, int & x2, int & y1, int & y2)
+{
+       x1 = xo_;
+       x2 = xo_ + width_;
+       y1 = yo_ - ascent_;
+       y2 = yo_ + descent_;
+}
+
+/*
+void MathXArray::findPos(MathPosFinder & f) const
+{
+       double x = xo_;
+       double y = yo_; 
+       for (const_iterator it = begin(); it < end(); ++it) {
+               // check this position in the cell first
+               f.visit(x, y);
+               f.nextPos();
+
+               // check inset
+               MathInset const * p = it->nucleus();
+               p->findPos(f);
+
+               // move on
+               MathScriptInset const * q = (it + 1 == end()) ? 0 : asScript(it);
+               if (q) {
+                       x += q->width(p);
+                       f.nextPos();
+                       ++it;
+               } else {
+                       x += p->width();
+               }
+       }
+}
+*/
+
+void MathXArray::center(int & x, int & y) const
+{
+       x = xo_ + width_ / 2;
+       y = yo_ + (descent_ - ascent_) / 2;
+}
+
+
+void MathXArray::towards(int & x, int & y) const
+{
+       int cx = 0;
+       int cy = 0;
+       center(cx, cy);
+
+       double r = 1.0;
+       int dist = (x - cx) * (x - cx) + (y - cy) * (y - cy);
+
+       x = cx + int(r * (x - cx));
+       y = cy + int(r * (y - cy));
+}