#ifndef METRICSINFO_H #define METRICSINFO_H #include "lyxfont.h" #include "LString.h" class Painter; /// Standard Sizes (mode styles) enum Styles { /// LM_ST_DISPLAY = 0, /// LM_ST_TEXT, /// LM_ST_SCRIPT, /// LM_ST_SCRIPTSCRIPT }; // // This is the part common to MetricsInfo and PainterInfo // struct MetricsBase { /// MetricsBase(); /// LyXFont font; /// Styles style; /// string fontname; /// if this is set... bool restrictwidth; /// ... this is valid int textwidth; }; // // This contains a Metricsbase and Information that's only relevant during // the first phase of the two-phase draw // struct MetricsInfo { /// MetricsInfo(); /// MetricsBase base; /// bool fullredraw; }; // // This contains a Metricsbase and Information that's only relevant during // the second phase of the two-phase draw // struct PainterInfo { /// PainterInfo(Painter & pain); /// void draw(int x, int y, char c); /// MetricsBase base; /// Painter & pain; }; struct TextMetricsInfo {}; // Generic base for temporarily changing things. // The original state gets restored when the Changer is destructed. template struct Changer { /// Changer(Struct & orig) : orig_(orig) {} protected: /// Struct & orig_; /// Temp save_; }; // temporarily change some aspect of a font struct FontChanger : public Changer { /// FontChanger(LyXFont & orig, char const * font); /// ~FontChanger(); }; // temporarily change a full font struct FontSetChanger : public Changer { /// FontSetChanger(MetricsBase & mb, char const * font); /// ~FontSetChanger(); }; // temporarily change the style struct StyleChanger : public Changer { /// StyleChanger(MetricsBase & mb, Styles style); /// ~StyleChanger(); }; // temporarily change the style to script style struct ScriptChanger : public StyleChanger { /// ScriptChanger(MetricsBase & mb); }; // temporarily change the style suitable for use in fractions struct FracChanger : public StyleChanger { /// FracChanger(MetricsBase & mb); }; // temporarily change the style suitable for use in tabulars and arrays struct ArrayChanger : public StyleChanger { /// ArrayChanger(MetricsBase & mb); }; // temporarily change the shape of a font struct ShapeChanger : public Changer { /// ShapeChanger(LyXFont & font, LyXFont::FONT_SHAPE shape); /// ~ShapeChanger(); }; // temporarily change the available text width struct WidthChanger : public Changer { /// WidthChanger(MetricsBase & mb, int width); /// ~WidthChanger(); }; #endif