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