]> git.lyx.org Git - lyx.git/blob - src/mathed/math_metricsinfo.C
a step towards world domination^H^H^H
[lyx.git] / src / mathed / math_metricsinfo.C
1
2 #include <config.h>
3
4 #include "math_metricsinfo.h"
5 #include "math_support.h"
6 #include "frontends/Painter.h"
7
8
9
10 MathMetricsBase::MathMetricsBase()
11         : font(), style(LM_ST_TEXT), fontname("mathnormal"),
12           restrictwidth(false), textwidth(0)
13 {}
14
15
16
17
18 MathMetricsInfo::MathMetricsInfo()
19         : view(0), fullredraw(false)
20 {}
21
22
23
24
25 MathPainterInfo::MathPainterInfo(Painter & p)
26         : pain(p)
27 {}
28
29
30 void MathPainterInfo::draw(int x, int y, char c)
31 {
32         pain.text(x, y, c, base.font);
33 }
34
35
36
37
38 MathScriptChanger::MathScriptChanger(MathMetricsBase & mb)
39         : MathChanger<MathMetricsBase>(mb)
40 {
41         save_ = mb;
42         switch (mb.style) {
43                 case LM_ST_DISPLAY:
44                 case LM_ST_TEXT:
45                         mb.style = LM_ST_SCRIPT;
46                         mb.font.decSize();
47                         mb.font.decSize();
48                         break;
49                 case LM_ST_SCRIPT:
50                         mb.style = LM_ST_SCRIPTSCRIPT;
51                         mb.font.decSize();
52                 default:
53                         break;
54         }
55 }
56
57 MathScriptChanger::~MathScriptChanger()
58 {
59         orig_ = save_;
60 }
61
62
63
64
65 // decrease math size for fractions
66 MathFracChanger::MathFracChanger(MathMetricsBase & mb)
67         : MathChanger<MathMetricsBase>(mb)
68 {
69         save_ = mb;
70         switch (mb.style) {
71                 case LM_ST_DISPLAY:
72                         mb.style = LM_ST_TEXT;
73                         break;
74                 case LM_ST_TEXT:
75                         mb.style = LM_ST_SCRIPT;
76                         mb.font.decSize();
77                         mb.font.decSize();
78                         break;
79                 case LM_ST_SCRIPT:
80                         mb.style = LM_ST_SCRIPTSCRIPT;
81                         mb.font.decSize();
82                         break;
83                 default:
84                         break;
85         }
86 }
87
88 MathFracChanger::~MathFracChanger()
89 {
90         orig_ = save_;
91 }
92
93
94
95
96 MathShapeChanger::MathShapeChanger(LyXFont & font, LyXFont::FONT_SHAPE shape)
97         : MathChanger<LyXFont, LyXFont::FONT_SHAPE>(font)
98 {
99         save_ = orig_.shape();
100         orig_.setShape(shape);
101 }
102
103 MathShapeChanger::~MathShapeChanger()
104 {
105         orig_.setShape(save_);
106 }
107
108
109
110
111 void changeSize(LyXFont & font, int diff)
112 {
113         if (diff < 0) {
114                 font.decSize();
115                 changeSize(font, diff + 1);
116         } else if (diff > 0) {
117                 font.incSize();
118                 changeSize(font, diff - 1);
119         }
120 }
121
122 MathStyleChanger::MathStyleChanger(MathMetricsBase & mb, MathStyles style)
123         :       MathChanger<MathMetricsBase>(mb)
124 {
125         save_ = mb;
126         changeSize(mb.font, mb.style - style);
127 }
128
129
130 MathStyleChanger::~MathStyleChanger()
131 {
132         orig_ = save_;
133 }
134
135
136
137
138 MathFontSetChanger::MathFontSetChanger(MathMetricsBase & mb, char const * name)
139         :       MathChanger<MathMetricsBase>(mb)
140 {
141         save_ = mb;     
142         mb.fontname = name;
143         augmentFont(mb.font, name);
144 }
145
146 MathFontSetChanger::~MathFontSetChanger()
147 {
148         orig_ = save_;
149 }
150
151
152 MathWidthChanger::MathWidthChanger(MathMetricsBase & mb, int w)
153         :       MathChanger<MathMetricsBase>(mb)
154 {
155         save_ = mb;     
156         mb.restrictwidth = true;
157         mb.textwidth     = w;
158 }
159
160
161 MathWidthChanger::~MathWidthChanger()
162 {
163         orig_ = save_;
164 }
165