]> git.lyx.org Git - lyx.git/blob - src/mathed/math_sqrtinset.C
mathed64.diff
[lyx.git] / src / mathed / math_sqrtinset.C
1 #include <config.h>
2
3 #ifdef __GNUG__
4 #pragma implementation
5 #endif
6
7 #include "math_sqrtinset.h"
8 #include "math_iter.h"
9 #include "LColor.h"
10 #include "Painter.h"
11 #include "support.h"
12 #include "support/LOstream.h"
13
14 using std::ostream;
15
16
17 MathSqrtInset::MathSqrtInset(short st)
18         : MathParInset(st, "sqrt", LM_OT_SQRT) {}
19
20
21 MathedInset * MathSqrtInset::Clone()
22 {   
23         return new MathSqrtInset(*this);
24 }
25
26
27 void MathSqrtInset::draw(Painter & pain, int x, int y)
28
29         MathParInset::draw(pain, x + hmax_ + 2, y); 
30         int const h = ascent;
31         int const d = descent;
32         int const h2 = Height() / 2;
33         int const w2 = (Height() > 4 * hmax_) ? hmax_ : hmax_ / 2; 
34         int xp[4];
35         int yp[4];
36         xp[0] = x + hmax_ + wbody_; yp[0] = y - h;
37         xp[1] = x + hmax_;          yp[1] = y - h;
38         xp[2] = x + w2;             yp[2] = y + d;
39         xp[3] = x;                  yp[3] = y + d - h2;
40         pain.lines(xp, yp, 4, LColor::mathline);
41 }
42
43
44 void MathSqrtInset::Write(ostream & os, bool fragile)
45 {
46         os << '\\' << name << '{';
47         MathParInset::Write(os, fragile); 
48         os << '}';
49 }
50
51
52 void MathSqrtInset::Metrics()
53 {
54         MathParInset::Metrics();
55         ascent  += 4;
56         descent += 2;
57         int a;
58         int b;
59         hmax_ = mathed_char_height(LM_TC_VAR, size(), 'I', a, b);
60         if (hmax_ < 10)
61                 hmax_ = 10;
62         wbody_ = width + 4;
63         width += hmax_ + 4;
64 }
65
66
67 bool MathSqrtInset::Inside(int x, int y) 
68 {
69         return x >= xo() - hmax_
70                 && x <= xo() + width - hmax_
71                 && y <= yo() + descent
72                 && y >= yo() - ascent;
73 }