#include "math_metricsinfo.h"
#include "math_support.h"
+#include "debug.h"
#include "frontends/Painter.h"
MathMetricsBase::MathMetricsBase()
- : font(), style(LM_ST_TEXT), fontname("mathnormal")
+ : font(), style(LM_ST_TEXT), fontname("mathnormal"),
+ restrictwidth(false), textwidth(0)
{}
MathMetricsInfo::MathMetricsInfo()
- : view(0), inset(0), idx(0), fullredraw(false)
+ : fullredraw(false)
{}
}
-
-
-MathScriptChanger::MathScriptChanger(MathMetricsBase & mb)
- : MathChanger<MathMetricsBase>(mb)
+MathStyles smallerScriptStyle(MathStyles st)
{
- save_ = mb;
- switch (mb.style) {
+ switch (st) {
case LM_ST_DISPLAY:
case LM_ST_TEXT:
- mb.style = LM_ST_SCRIPT;
- mb.font.decSize();
- mb.font.decSize();
- break;
+ return LM_ST_SCRIPT;
case LM_ST_SCRIPT:
- mb.style = LM_ST_SCRIPTSCRIPT;
- mb.font.decSize();
- default:
- break;
+ case LM_ST_SCRIPTSCRIPT:
+ return LM_ST_SCRIPTSCRIPT;
}
+ // shut up compiler
+ lyxerr << "should not happen\n";
+ return LM_ST_DISPLAY;
}
-MathScriptChanger::~MathScriptChanger()
-{
- orig_ = save_;
-}
-
+MathScriptChanger::MathScriptChanger(MathMetricsBase & mb)
+ : MathStyleChanger(mb, smallerScriptStyle(mb.style))
+{}
-// decrease math size for fractions
-MathFracChanger::MathFracChanger(MathMetricsBase & mb)
- : MathChanger<MathMetricsBase>(mb)
+MathStyles smallerFracStyle(MathStyles st)
{
- save_ = mb;
- switch (mb.style) {
+ switch (st) {
case LM_ST_DISPLAY:
- mb.style = LM_ST_TEXT;
- break;
+ return LM_ST_TEXT;
case LM_ST_TEXT:
- mb.style = LM_ST_SCRIPT;
- mb.font.decSize();
- mb.font.decSize();
- break;
+ return LM_ST_SCRIPT;
case LM_ST_SCRIPT:
- mb.style = LM_ST_SCRIPTSCRIPT;
- mb.font.decSize();
- break;
- default:
- break;
+ case LM_ST_SCRIPTSCRIPT:
+ return LM_ST_SCRIPTSCRIPT;
}
+ // shut up compiler
+ lyxerr << "should not happen\n";
+ return LM_ST_DISPLAY;
}
-MathFracChanger::~MathFracChanger()
-{
- orig_ = save_;
-}
+MathFracChanger::MathFracChanger(MathMetricsBase & mb)
+ : MathStyleChanger(mb, smallerFracStyle(mb.style))
+{}
+
+MathArrayChanger::MathArrayChanger(MathMetricsBase & mb)
+ : MathStyleChanger(mb, mb.style == LM_ST_DISPLAY ? LM_ST_TEXT : mb.style)
+{}
MathShapeChanger::MathShapeChanger(LyXFont & font, LyXFont::FONT_SHAPE shape)
-
-void changeSize(LyXFont & font, int diff)
-{
- if (diff < 0) {
- font.decSize();
- changeSize(font, diff + 1);
- } else if (diff > 0) {
- font.incSize();
- changeSize(font, diff - 1);
- }
-}
-
MathStyleChanger::MathStyleChanger(MathMetricsBase & mb, MathStyles style)
: MathChanger<MathMetricsBase>(mb)
{
+ static const int diff[4][4] = { { 0, 0, -3, -5 },
+ { 0, 0, -3, -5 },
+ { 3, 3, 0, -2 },
+ { 5, 5, 2, 0 } };
save_ = mb;
- changeSize(mb.font, mb.style - style);
+ int t = diff[mb.style][style];
+ if (t > 0)
+ while (t--)
+ mb.font.incSize();
+ else
+ while (t++)
+ mb.font.decSize();
+ mb.style = style;
}
-
MathStyleChanger::~MathStyleChanger()
{
orig_ = save_;
-
MathFontSetChanger::MathFontSetChanger(MathMetricsBase & mb, char const * name)
: MathChanger<MathMetricsBase>(mb)
{
- save_ = mb;
+ save_ = mb;
mb.fontname = name;
augmentFont(mb.font, name);
}
orig_ = save_;
}
+
+MathWidthChanger::MathWidthChanger(MathMetricsBase & mb, int w)
+ : MathChanger<MathMetricsBase>(mb)
+{
+ save_ = mb;
+ mb.restrictwidth = true;
+ mb.textwidth = w;
+}
+
+
+MathWidthChanger::~MathWidthChanger()
+{
+ orig_ = save_;
+}