]> git.lyx.org Git - lyx.git/blob - src/metricsinfo.C
"Inter-word Space"
[lyx.git] / src / metricsinfo.C
1
2 #include <config.h>
3
4 #include "metricsinfo.h"
5 #include "mathed/math_support.h"
6 #include "frontends/Painter.h"
7 #include "debug.h"
8 #include "BufferView.h"
9
10
11
12 MetricsBase::MetricsBase()
13         : bv(0), font(), style(LM_ST_TEXT), fontname("mathnormal"),
14           restrictwidth(false), textwidth(0)
15 {}
16
17
18
19
20 MetricsInfo::MetricsInfo()
21 {}
22
23
24
25
26 PainterInfo::PainterInfo(BufferView * bv)
27         : pain(bv->painter())
28 {
29         base.bv = bv;
30 }
31
32
33 void PainterInfo::draw(int x, int y, char c)
34 {
35         pain.text(x, y, c, base.font);
36 }
37
38
39 Styles smallerScriptStyle(Styles st)
40 {
41         switch (st) {
42                 case LM_ST_DISPLAY:
43                 case LM_ST_TEXT:
44                         return LM_ST_SCRIPT;
45                 case LM_ST_SCRIPT:
46                 case LM_ST_SCRIPTSCRIPT:
47                 default: // shut up compiler
48                         return LM_ST_SCRIPTSCRIPT;
49         }
50 }
51
52 ScriptChanger::ScriptChanger(MetricsBase & mb)
53         : StyleChanger(mb, smallerScriptStyle(mb.style))
54 {}
55
56
57
58 Styles smallerFracStyle(Styles st)
59 {
60         switch (st) {
61                 case LM_ST_DISPLAY:
62                         return LM_ST_TEXT;
63                 case LM_ST_TEXT:
64                         return LM_ST_SCRIPT;
65                 case LM_ST_SCRIPT:
66                 case LM_ST_SCRIPTSCRIPT:
67                 default: // shut up compiler
68                         return LM_ST_SCRIPTSCRIPT;
69         }
70 }
71
72
73 FracChanger::FracChanger(MetricsBase & mb)
74         : StyleChanger(mb, smallerFracStyle(mb.style))
75 {}
76
77
78
79 ArrayChanger::ArrayChanger(MetricsBase & mb)
80         : StyleChanger(mb, mb.style == LM_ST_DISPLAY ? LM_ST_TEXT : mb.style)
81 {}
82
83
84 ShapeChanger::ShapeChanger(LyXFont & font, LyXFont::FONT_SHAPE shape)
85         : Changer<LyXFont, LyXFont::FONT_SHAPE>(font)
86 {
87         save_ = orig_.shape();
88         orig_.setShape(shape);
89 }
90
91 ShapeChanger::~ShapeChanger()
92 {
93         orig_.setShape(save_);
94 }
95
96
97
98 StyleChanger::StyleChanger(MetricsBase & mb, Styles style)
99         :       Changer<MetricsBase>(mb)
100 {
101         static const int diff[4][4]  = { { 0, 0, -3, -5 },
102                                          { 0, 0, -3, -5 },
103                                          { 3, 3,  0, -2 },
104                                          { 5, 5,  2,  0 } };
105         save_ = mb;
106         int t = diff[mb.style][style];
107         if (t > 0)
108                 while (t--)
109                         mb.font.incSize();
110         else
111                 while (t++)
112                         mb.font.decSize();
113         mb.style = style;
114 }
115
116
117 StyleChanger::~StyleChanger()
118 {
119         orig_ = save_;
120 }
121
122
123
124 FontSetChanger::FontSetChanger(MetricsBase & mb, char const * name)
125         :       Changer<MetricsBase>(mb)
126 {
127         save_ = mb;
128         mb.fontname = name;
129         augmentFont(mb.font, name);
130 }
131
132 FontSetChanger::~FontSetChanger()
133 {
134         orig_ = save_;
135 }
136
137
138 WidthChanger::WidthChanger(MetricsBase & mb, int w)
139         :       Changer<MetricsBase>(mb)
140 {
141         save_ = mb;
142         mb.restrictwidth = true;
143         mb.textwidth     = w;
144 }
145
146
147 WidthChanger::~WidthChanger()
148 {
149         orig_ = save_;
150 }