]> git.lyx.org Git - lyx.git/blobdiff - src/MetricsInfo.cpp
File missing in the tarball
[lyx.git] / src / MetricsInfo.cpp
index 2ddca9b359b3f5b375d16b9da0f4823f290f4c3d..6d701c75ac1354c15cb0eafaac86d5aced3d1f00 100644 (file)
@@ -227,37 +227,52 @@ StyleChanger::~StyleChanger()
 //
 /////////////////////////////////////////////////////////////////////////
 
-FontSetChanger::FontSetChanger(MetricsBase & mb, char const * name)
-       : Changer<MetricsBase>(mb)
+FontSetChanger::FontSetChanger(MetricsBase & mb, char const * name,
+                               bool really_change_font)
+       : Changer<MetricsBase>(mb), change_(really_change_font)
 {
-       save_ = mb;
-       FontSize oldsize = save_.font.size();
-       ColorCode oldcolor = save_.font.color();
-       mb.fontname = name;
-       mb.font = sane_font;
-       augmentFont(mb.font, from_ascii(name));
-       mb.font.setSize(oldsize);
-       mb.font.setColor(oldcolor);
+       if (change_) {
+               save_ = mb;
+               FontSize oldsize = save_.font.size();
+               ColorCode oldcolor = save_.font.color();
+               docstring const oldname = from_ascii(save_.fontname);
+               mb.fontname = name;
+               mb.font = sane_font;
+               augmentFont(mb.font, from_ascii(name));
+               mb.font.setSize(oldsize);
+               if (string(name) != "lyxtex"
+                   && ((isTextFont(oldname) && oldcolor != Color_foreground)
+                       || (isMathFont(oldname) && oldcolor != Color_math)))
+                       mb.font.setColor(oldcolor);
+       }
 }
 
 
-FontSetChanger::FontSetChanger(MetricsBase & mb, docstring const & name)
-       : Changer<MetricsBase>(mb)
+FontSetChanger::FontSetChanger(MetricsBase & mb, docstring const & name,
+                               bool really_change_font)
+       : Changer<MetricsBase>(mb), change_(really_change_font)
 {
-       save_ = mb;
-       FontSize oldsize = save_.font.size();
-       ColorCode oldcolor = save_.font.color();
-       mb.fontname = to_utf8(name);
-       mb.font = sane_font;
-       augmentFont(mb.font, name);
-       mb.font.setSize(oldsize);
-       mb.font.setColor(oldcolor);
+       if (change_) {
+               save_ = mb;
+               FontSize oldsize = save_.font.size();
+               ColorCode oldcolor = save_.font.color();
+               docstring const oldname = from_ascii(save_.fontname);
+               mb.fontname = to_utf8(name);
+               mb.font = sane_font;
+               augmentFont(mb.font, name);
+               mb.font.setSize(oldsize);
+               if (name != "lyxtex"
+                   && ((isTextFont(oldname) && oldcolor != Color_foreground)
+                       || (isMathFont(oldname) && oldcolor != Color_math)))
+                       mb.font.setColor(oldcolor);
+       }
 }
 
 
 FontSetChanger::~FontSetChanger()
 {
-       orig_ = save_;
+       if (change_)
+               orig_ = save_;
 }
 
 
@@ -287,17 +302,21 @@ WidthChanger::~WidthChanger()
 //
 /////////////////////////////////////////////////////////////////////////
 
-ColorChanger::ColorChanger(FontInfo & font, string const & color)
-       : Changer<FontInfo, string>(font)
+ColorChanger::ColorChanger(FontInfo & font, docstring const & color,
+                          bool really_change_color)
+       : Changer<FontInfo, ColorCode>(font), change_(really_change_color)
 {
-       save_ = lcolor.getFromLyXName(color);
-       font.setColor(lcolor.getFromLyXName(color));
+       if (change_) {
+               save_ = font.color();
+               font.setColor(lcolor.getFromLyXName(to_utf8(color)));
+       }
 }
 
 
 ColorChanger::~ColorChanger()
 {
-       orig_.setColor(lcolor.getFromLyXName(save_));
+       if (change_)
+               orig_.setColor(save_);
 }