X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FMetricsInfo.h;h=d2dd8b7bcf4818d3e5d9649a43225f47fa77bf70;hb=57b69a5efddf9f3c148007322f00dad6c253a2ed;hp=f1583d193cebc289b071b6ad21bb1a6089af355c;hpb=12314897982e07afd8926c997f66d7bb08e7e1fd;p=lyx.git diff --git a/src/MetricsInfo.h b/src/MetricsInfo.h index f1583d193c..d2dd8b7bcf 100644 --- a/src/MetricsInfo.h +++ b/src/MetricsInfo.h @@ -4,7 +4,7 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author André Pönitz + * \author André Pönitz * \author Stefan Schimanski * * Full author contact details are available in file CREDITS. @@ -13,23 +13,27 @@ #ifndef METRICSINFO_H #define METRICSINFO_H +#include "Changes.h" #include "ColorCode.h" #include "FontInfo.h" #include "support/strfwd.h" -#include "support/types.h" +#include "support/Changer.h" + #include -class BufferView; namespace lyx { namespace frontend { class Painter; } +class BufferView; +class Inset; class MacroContext; /// Standard Sizes (mode styles) +/// note: These values are hard-coded in changeStyle enum Styles { /// LM_ST_DISPLAY = 0, @@ -48,9 +52,8 @@ enum Styles { class MetricsBase { public: /// - MetricsBase(); - /// - MetricsBase(BufferView * bv, FontInfo const & font, int textwidth); + MetricsBase(BufferView * bv = 0, FontInfo font = FontInfo(), + int textwidth = 0); /// the current view BufferView * bv; @@ -62,6 +65,25 @@ public: std::string fontname; /// This is the width available in pixels int textwidth; + + /// Temporarily change a full font. + Changer changeFontSet(std::string const & font, bool cond = true); + /// Temporarily change the font size and the math style. + Changer changeStyle(Styles style, bool cond = true); + // Temporarily change to the style suitable for use in fractions + Changer changeFrac(bool cond = true); + // Temporarily change the style to (script)script style + Changer changeScript(bool cond = true); + /// + int solidLineThickness() const { return solid_line_thickness_; } + /// + int solidLineOffset() const { return solid_line_offset_; } + /// + int dottedLineThickness() const { return dotted_line_thickness_; } +private: + int solid_line_thickness_; + int solid_line_offset_; + int dotted_line_thickness_; }; @@ -74,7 +96,8 @@ public: /// MetricsInfo(); /// - MetricsInfo(BufferView * bv, FontInfo const & font, int textwidth, MacroContext const & mc); + MetricsInfo(BufferView * bv, FontInfo font, int textwidth, + MacroContext const & mc); /// MetricsBase base; @@ -95,6 +118,16 @@ public: void draw(int x, int y, char_type c); /// void draw(int x, int y, docstring const & str); + /// Determines the background color for the specified inset based on the + /// selection state, the background color inherited from the parent inset + /// and the inset's own background color. + /// \param sel whether to take the selection state into account + ColorCode backgroundColor(Inset const * inset, bool sel = true) const; + + /// Determines the text color based on the intended color, the + /// change tracking state and the selection state. + /// \param color what the color should be by default + Color textColor(Color const & color) const; /// MetricsBase base; @@ -102,149 +135,20 @@ public: 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_; + /// The change the parent is part of (change tracking) + Change change_; + /// Whether the parent is selected as a whole + bool selected; + /// Whether the spell checker is enabled for the parent + bool do_spellcheck; /// bool full_repaint; - /// + /// Current background color ColorCode background_color; }; class 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 -class Changer { -public: - /// - Changer(Struct & orig) : orig_(orig) {} -protected: - /// - Struct & orig_; - /// - Temp save_; -}; - - - -// temporarily change some aspect of a font -class FontChanger : public Changer { -public: - /// - FontChanger(FontInfo & orig, docstring const & font); - FontChanger(MetricsBase & mb, char const * const font); - /// - ~FontChanger(); -}; - - -// temporarily change a full font -class FontSetChanger : public Changer { -public: - /// - FontSetChanger(MetricsBase & mb, docstring const & font); - FontSetChanger(MetricsBase & mb, char const * const font); - /// - ~FontSetChanger(); -}; - - -// temporarily change the style -class StyleChanger : public Changer { -public: - /// - StyleChanger(MetricsBase & mb, Styles style); - /// - ~StyleChanger(); -}; - - -// temporarily change the style to script style -class ScriptChanger : public StyleChanger { -public: - /// - ScriptChanger(MetricsBase & mb); -}; - - -// temporarily change the style suitable for use in fractions -class FracChanger : public StyleChanger { -public: - /// - FracChanger(MetricsBase & mb); -}; - - -// temporarily change the style suitable for use in tabulars and arrays -class ArrayChanger : public StyleChanger { -public: - /// - ArrayChanger(MetricsBase & mb); -}; - - - -// temporarily change the shape of a font -class ShapeChanger : public Changer { -public: - /// - ShapeChanger(FontInfo & font, FontShape shape); - /// - ~ShapeChanger(); -}; - - -// temporarily change the available text width -class WidthChanger : public Changer -{ -public: - /// - WidthChanger(MetricsBase & mb, int width); - /// - ~WidthChanger(); -}; - - -// temporarily change the used color -class ColorChanger : public Changer { -public: - /// - ColorChanger(FontInfo & font, std::string const & color); - /// - ~ColorChanger(); -}; - } // namespace lyx #endif