diff --git a/src/MetricsInfo.cpp b/src/MetricsInfo.cpp index e68c18d79d..b75ec81108 100644 --- a/src/MetricsInfo.cpp +++ b/src/MetricsInfo.cpp @@ -186,9 +186,8 @@ ArrayChanger::ArrayChanger(MetricsBase & mb) ///////////////////////////////////////////////////////////////////////// ShapeChanger::ShapeChanger(FontInfo & font, FontShape shape) - : Changer(font) + : Changer(font, font.shape()) { - save_ = orig_.shape(); orig_.setShape(shape); } @@ -213,7 +212,6 @@ StyleChanger::StyleChanger(MetricsBase & mb, Styles style) { 0, 0, -3, -5 }, { 3, 3, 0, -2 }, { 5, 5, 2, 0 } }; - save_ = mb; int t = diff[mb.style][style]; if (t > 0) while (t--) @@ -242,7 +240,6 @@ FontSetChanger::FontSetChanger(MetricsBase & mb, char const * name, : Changer(mb), change_(really_change_font) { if (change_) { - save_ = mb; FontSize oldsize = save_.font.size(); ColorCode oldcolor = save_.font.color(); docstring const oldname = from_ascii(save_.fontname); @@ -263,7 +260,6 @@ FontSetChanger::FontSetChanger(MetricsBase & mb, docstring const & name, : Changer(mb), change_(really_change_font) { if (change_) { - save_ = mb; FontSize oldsize = save_.font.size(); ColorCode oldcolor = save_.font.color(); docstring const oldname = from_ascii(save_.fontname); @@ -295,7 +291,6 @@ FontSetChanger::~FontSetChanger() WidthChanger::WidthChanger(MetricsBase & mb, int w) : Changer(mb) { - save_ = mb; mb.textwidth = w; } @@ -314,10 +309,9 @@ WidthChanger::~WidthChanger() ColorChanger::ColorChanger(FontInfo & font, ColorCode color, bool really_change_color) - : Changer(font), change_(really_change_color) + : Changer(font, font.color()), change_(really_change_color) { if (change_) { - save_ = font.color(); font.setColor(color); } } diff --git a/src/MetricsInfo.h b/src/MetricsInfo.h index 05acbbbb04..88dd39fd7d 100644 --- a/src/MetricsInfo.h +++ b/src/MetricsInfo.h @@ -126,14 +126,16 @@ public: class TextMetricsInfo {}; -/// Generic base for temporarily changing things. -/// The original state gets restored when the Changer is destructed. +/// Generic base for temporarily changing things. The derived class is +/// responsible for restoring the original state when the Changer is +/// destructed. template class Changer { -public: - /// - Changer(Struct & orig) : orig_(orig) {} protected: + /// + Changer(Struct & orig, Temp const & save) : orig_(orig), save_(save) {} + /// + Changer(Struct & orig) : orig_(orig), save_(orig) {} /// Struct & orig_; ///