X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FMetricsInfo.cpp;h=d663c9a77d29ebaa0431057f016667b02b0ab87e;hb=6d62d8009f3c41874cf84aa6577aae3293ebb5e6;hp=92ed4a7eb3e273beb4ca44a888400e08c205be59;hpb=fff28c57561a08858fc4cef3a4386f53227e2108;p=lyx.git diff --git a/src/MetricsInfo.cpp b/src/MetricsInfo.cpp index 92ed4a7eb3..d663c9a77d 100644 --- a/src/MetricsInfo.cpp +++ b/src/MetricsInfo.cpp @@ -21,6 +21,8 @@ #include "frontends/FontMetrics.h" #include "frontends/Painter.h" +#include + using namespace std; @@ -61,9 +63,12 @@ Changer MetricsBase::changeFontSet(string const & name) string const oldname = fontname; fontname = name; if (isMathFont(name) || isMathFont(oldname)) - font = sane_font; + font = isTextFont(name) ? outer_font : sane_font; augmentFont(font, name); - font.setSize(rc->old.font.size()); + if (isTextFont(name) && isMathFont(oldname)) + font.setSize(rc->old.outer_font.size()); + else + font.setSize(rc->old.font.size()); font.setStyle(rc->old.font.style()); if (name == "emph") { font.setColor(oldcolor); @@ -75,6 +80,36 @@ Changer MetricsBase::changeFontSet(string const & name) && ((isTextFont(oldname) && oldcolor != Color_foreground) || (isMathFont(oldname) && oldcolor != Color_math))) font.setColor(oldcolor); +#if __cplusplus >= 201402L + return rc; +#else + /** In theory, this is not needed with C++11, and modern compilers + * will complain in C++11 mode, but gcc 4.9 requires this. */ + return std::move(rc); +#endif +} + + +Changer MetricsBase::changeFontSize(string const & size, bool mathmode) +{ + map sizes = { + {"tiny", TINY_SIZE}, + {"scriptsize", SCRIPT_SIZE}, + {"footnotesize", FOOTNOTE_SIZE}, + {"small", SMALL_SIZE}, + {"normalsize", NORMAL_SIZE}, + {"large", LARGE_SIZE}, + {"Large", LARGER_SIZE}, + {"LARGE", LARGEST_SIZE}, + {"huge", HUGE_SIZE}, + {"Huge", HUGER_SIZE} + }; + RefChanger rc = make_save(*this); + // In math mode we only record the size in outer_font + if (mathmode) + outer_font.setSize(sizes[size]); + else + font.setSize(sizes[size]); return rc; }