X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FFontInfo.cpp;h=da9387278bb1817de4ca884b8cf3957303120913;hb=28be7d552f62cc02fa86d7f79201d089bfb2d7b5;hp=e611288ff4422ef58d6b370b13162de02fd12bea;hpb=7cf8b9da78d2747e4bba25d7f103da422ae28a6f;p=lyx.git diff --git a/src/FontInfo.cpp b/src/FontInfo.cpp index e611288ff4..da9387278b 100644 --- a/src/FontInfo.cpp +++ b/src/FontInfo.cpp @@ -17,11 +17,15 @@ #include "ColorSet.h" #include "FontInfo.h" #include "Lexer.h" +#include "LyXRC.h" +#include "support/convert.h" #include "support/debug.h" #include "support/docstring.h" #include "support/lstrings.h" +#include "support/RefChanger.h" +#include #include #include @@ -66,6 +70,7 @@ FontInfo const sane_font( FONT_OFF, FONT_OFF, FONT_OFF, + FONT_OFF, FONT_OFF); FontInfo const inherit_font( @@ -81,6 +86,7 @@ FontInfo const inherit_font( FONT_INHERIT, FONT_INHERIT, FONT_INHERIT, + FONT_INHERIT, FONT_OFF); FontInfo const ignore_font( @@ -96,6 +102,7 @@ FontInfo const ignore_font( FONT_IGNORE, FONT_IGNORE, FONT_IGNORE, + FONT_IGNORE, FONT_IGNORE); @@ -167,6 +174,29 @@ FontInfo & FontInfo::incSize() } +double FontInfo::realSize() const +{ + double d = convert(lyxrc.font_sizes[size()]); + // The following is according to the average of the values in the + // definitions of \defaultscriptratio and \defaultscriptscriptratio in LaTeX + // font packages. No attempt is made to implement the actual values from + // \DefineMathSizes. + switch (style()) { + case LM_ST_DISPLAY: + case LM_ST_TEXT: + break; + case LM_ST_SCRIPT: + d *= .73; + break; + case LM_ST_SCRIPTSCRIPT: + d *= .55; + break; + } + // Never go below the smallest size + return max(d, convert(lyxrc.font_sizes[FONT_SIZE_TINY])); +} + + /// Reduce font to fall back to template where possible void FontInfo::reduce(FontInfo const & tmplt) { @@ -184,6 +214,8 @@ void FontInfo::reduce(FontInfo const & tmplt) underbar_ = FONT_INHERIT; if (strikeout_ == tmplt.strikeout_) strikeout_ = FONT_INHERIT; + if (xout_ == tmplt.xout_) + xout_ = FONT_INHERIT; if (uuline_ == tmplt.uuline_) uuline_ = FONT_INHERIT; if (uwave_ == tmplt.uwave_) @@ -226,6 +258,9 @@ FontInfo & FontInfo::realize(FontInfo const & tmplt) if (strikeout_ == FONT_INHERIT) strikeout_ = tmplt.strikeout_; + if (xout_ == FONT_INHERIT) + xout_ = tmplt.xout_; + if (uuline_ == FONT_INHERIT) uuline_ = tmplt.uuline_; @@ -245,6 +280,32 @@ FontInfo & FontInfo::realize(FontInfo const & tmplt) } +Changer FontInfo::changeColor(ColorCode const color) +{ + return make_change(color_, color); +} + + +Changer FontInfo::changeShape(FontShape const shape) +{ + return make_change(shape_, shape); +} + + +Changer FontInfo::changeStyle(MathStyle const new_style) +{ + return make_change(style_, new_style); +} + + +Changer FontInfo::change(FontInfo font, bool realiz) +{ + if (realiz) + font.realize(*this); + return make_change(*this, font); +} + + /// Updates a misc setting according to request static FontState setMisc(FontState newfont, FontState org) @@ -309,6 +370,7 @@ void FontInfo::update(FontInfo const & newfont, bool toggleall) setEmph(setMisc(newfont.emph_, emph_)); setUnderbar(setMisc(newfont.underbar_, underbar_)); setStrikeout(setMisc(newfont.strikeout_, strikeout_)); + setXout(setMisc(newfont.xout_, xout_)); setUuline(setMisc(newfont.uuline_, uuline_)); setUwave(setMisc(newfont.uwave_, uwave_)); setNoun(setMisc(newfont.noun_, noun_)); @@ -332,8 +394,8 @@ bool FontInfo::resolved() const && shape_ != INHERIT_SHAPE && size_ != FONT_SIZE_INHERIT && emph_ != FONT_INHERIT && underbar_ != FONT_INHERIT && uuline_ != FONT_INHERIT && uwave_ != FONT_INHERIT - && strikeout_ != FONT_INHERIT && noun_ != FONT_INHERIT - && color_ != Color_inherit + && strikeout_ != FONT_INHERIT && xout_ != FONT_INHERIT + && noun_ != FONT_INHERIT && color_ != Color_inherit && background_ != Color_inherit); } @@ -603,6 +665,8 @@ FontInfo lyxRead(Lexer & lex, FontInfo const & fi) f.setUnderbar(FONT_OFF); } else if (ttok == "no_strikeout") { f.setStrikeout(FONT_OFF); + } else if (ttok == "no_xout") { + f.setXout(FONT_OFF); } else if (ttok == "no_uuline") { f.setUuline(FONT_OFF); } else if (ttok == "no_uwave") { @@ -617,6 +681,8 @@ FontInfo lyxRead(Lexer & lex, FontInfo const & fi) f.setUnderbar(FONT_ON); } else if (ttok == "strikeout") { f.setStrikeout(FONT_ON); + } else if (ttok == "xout") { + f.setXout(FONT_ON); } else if (ttok == "uuline") { f.setUuline(FONT_ON); } else if (ttok == "uwave") { @@ -665,6 +731,10 @@ void lyxWrite(ostream & os, FontInfo const & f, string const & start, int level) oss << indent << "\tMisc Strikeout\n"; else if (f.strikeout() == FONT_OFF) oss << indent << "\tMisc No_Strikeout\n"; + if (f.xout() == FONT_ON) + oss << indent << "\tMisc Xout\n"; + else if (f.xout() == FONT_OFF) + oss << indent << "\tMisc No_Xout\n"; if (f.uuline() == FONT_ON) oss << indent << "\tMisc Uuline\n"; else if (f.uuline() == FONT_OFF)