X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmetricsinfo.h;h=733bccd3f239ec0caa4820ef38c767a4ae230c66;hb=9e1ce30ff75b0282f428738aa3f3562c21ceb9df;hp=951d5f6680bf582520ad965fee43af51851958e2;hpb=ffdb0baea3cfed37790f3769ae74081183d439cc;p=lyx.git diff --git a/src/metricsinfo.h b/src/metricsinfo.h index 951d5f6680..733bccd3f2 100644 --- a/src/metricsinfo.h +++ b/src/metricsinfo.h @@ -13,11 +13,15 @@ #define METRICSINFO_H #include "lyxfont.h" -#include "support/std_string.h" +#include "support/docstring.h" +#include -class Painter; class BufferView; +namespace lyx { + +namespace frontend { class Painter; } + /// Standard Sizes (mode styles) enum Styles { @@ -35,7 +39,8 @@ enum Styles { // // This is the part common to MetricsInfo and PainterInfo // -struct MetricsBase { +class MetricsBase { +public: /// MetricsBase(); /// @@ -48,17 +53,18 @@ struct MetricsBase { /// current math style (display/text/script/..) Styles style; /// name of current font - mathed specific - string fontname; + std::string fontname; /// This is the width available in pixels int textwidth; }; // -// This contains a Metricsbase and Information that's only relevant during +// This contains a MetricsBase and information that's only relevant during // the first phase of the two-phase draw // -struct MetricsInfo { +class MetricsInfo { +public: /// MetricsInfo(); /// @@ -70,32 +76,65 @@ struct MetricsInfo { // -// This contains a Metricsbase and Information that's only relevant during +// This contains a MetricsBase and information that's only relevant during // the second phase of the two-phase draw // -struct PainterInfo { +class PainterInfo { +public: + /// + PainterInfo(BufferView * bv, frontend::Painter & pain); /// - explicit PainterInfo(BufferView * bv); + void draw(int x, int y, char_type c); /// - void draw(int x, int y, char c); + void draw(int x, int y, docstring const & str); /// MetricsBase base; /// - Painter & pain; - /// width of current item - int width; + frontend::Painter & pain; + /// Whether the text at this point is right-to-left (for InsetNewline) + bool ltr_pos; + /// Whether the parent is deleted (change tracking) + bool erased_; }; +class TextMetricsInfo {}; -struct TextMetricsInfo {}; +enum ScreenUpdateStrategy { + NoScreenUpdate, + SingleParUpdate, + FullScreenUpdate, + DecorationUpdate +}; + +class ViewMetricsInfo +{ +public: + ViewMetricsInfo() + : p1(0), p2(0), y1(0), y2(0), + update_strategy(FullScreenUpdate), size(0) + {} + ViewMetricsInfo(pit_type p1, pit_type p2, int y1, int y2, + ScreenUpdateStrategy updatestrategy, pit_type size) + : p1(p1), p2(p2), y1(y1), y2(y2), + update_strategy(updatestrategy), size(size) + {} + + pit_type p1; + pit_type p2; + int y1; + int y2; + ScreenUpdateStrategy update_strategy; + pit_type size; +}; // Generic base for temporarily changing things. // The original state gets restored when the Changer is destructed. template -struct Changer { +class Changer { +public: /// Changer(Struct & orig) : orig_(orig) {} protected: @@ -108,25 +147,30 @@ protected: // temporarily change some aspect of a font -struct FontChanger : public Changer { +class FontChanger : public Changer { +public: /// - FontChanger(LyXFont & orig, char const * font); + FontChanger(LyXFont & orig, docstring const & font); + FontChanger(MetricsBase & mb, char const * const font); /// ~FontChanger(); }; // temporarily change a full font -struct FontSetChanger : public Changer { +class FontSetChanger : public Changer { +public: /// - FontSetChanger(MetricsBase & mb, char const * font); + FontSetChanger(MetricsBase & mb, docstring const & font); + FontSetChanger(MetricsBase & mb, char const * const font); /// ~FontSetChanger(); }; // temporarily change the style -struct StyleChanger : public Changer { +class StyleChanger : public Changer { +public: /// StyleChanger(MetricsBase & mb, Styles style); /// @@ -135,21 +179,24 @@ struct StyleChanger : public Changer { // temporarily change the style to script style -struct ScriptChanger : public StyleChanger { +class ScriptChanger : public StyleChanger { +public: /// ScriptChanger(MetricsBase & mb); }; // temporarily change the style suitable for use in fractions -struct FracChanger : public StyleChanger { +class FracChanger : public StyleChanger { +public: /// FracChanger(MetricsBase & mb); }; // temporarily change the style suitable for use in tabulars and arrays -struct ArrayChanger : public StyleChanger { +class ArrayChanger : public StyleChanger { +public: /// ArrayChanger(MetricsBase & mb); }; @@ -157,7 +204,8 @@ struct ArrayChanger : public StyleChanger { // temporarily change the shape of a font -struct ShapeChanger : public Changer { +class ShapeChanger : public Changer { +public: /// ShapeChanger(LyXFont & font, LyXFont::FONT_SHAPE shape); /// @@ -166,8 +214,9 @@ struct ShapeChanger : public Changer { // temporarily change the available text width -struct WidthChanger : public Changer +class WidthChanger : public Changer { +public: /// WidthChanger(MetricsBase & mb, int width); /// @@ -175,4 +224,15 @@ struct WidthChanger : public Changer }; +// temporarily change the used color +class ColorChanger : public Changer { +public: + /// + ColorChanger(LyXFont & font, std::string const & color); + /// + ~ColorChanger(); +}; + +} // namespace lyx + #endif