X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmetricsinfo.h;h=733bccd3f239ec0caa4820ef38c767a4ae230c66;hb=9e1ce30ff75b0282f428738aa3f3562c21ceb9df;hp=c1acab6a67c0a2be5c908dcb06fee04695a04d9c;hpb=1829cdef6a34ec623c25ec8967dc048e8f19eee9;p=lyx.git diff --git a/src/metricsinfo.h b/src/metricsinfo.h index c1acab6a67..733bccd3f2 100644 --- a/src/metricsinfo.h +++ b/src/metricsinfo.h @@ -1,11 +1,26 @@ +// -*- C++ -*- +/** + * \file metricsinfo.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author André Pönitz + * + * Full author contact details are available in file CREDITS. + */ + #ifndef METRICSINFO_H #define METRICSINFO_H - #include "lyxfont.h" -#include "LString.h" +#include "support/docstring.h" +#include + +class BufferView; -class Painter; +namespace lyx { + +namespace frontend { class Painter; } /// Standard Sizes (mode styles) @@ -21,66 +36,105 @@ enum Styles { }; -// +// // This is the part common to MetricsInfo and PainterInfo // -struct MetricsBase { +class MetricsBase { +public: /// MetricsBase(); - /// + MetricsBase(BufferView * bv, LyXFont const & font, int textwidth); + + /// the current view + BufferView * bv; + /// current font LyXFont font; - /// + /// current math style (display/text/script/..) Styles style; - /// - string fontname; - /// if this is set... - bool restrictwidth; - /// ... this is valid + /// name of current font - mathed specific + 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(); + /// + MetricsInfo(BufferView * bv, LyXFont const & font, int textwidth); /// MetricsBase base; - /// - bool fullredraw; }; // -// 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(Painter & pain); + PainterInfo(BufferView * bv, frontend::Painter & pain); /// - void draw(int x, int y, char c); + void draw(int x, int y, char_type c); + /// + void draw(int x, int y, docstring const & str); /// MetricsBase base; /// - Painter & pain; + 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 {}; + +enum ScreenUpdateStrategy { + NoScreenUpdate, + SingleParUpdate, + FullScreenUpdate, + DecorationUpdate +}; -struct TextMetricsInfo {}; +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: @@ -93,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); /// @@ -120,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); }; @@ -142,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); /// @@ -151,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); /// @@ -160,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