//+----------------------------------------------------------------------------+ //| Description: Magic Set Editor - Program to make Magic (tm) cards | //| Copyright: (C) 2001 - 2007 Twan van Laarhoven | //| License: GNU General Public License 2 or later (see file COPYING) | //+----------------------------------------------------------------------------+ // ----------------------------------------------------------------------------- : Includes #include // ----------------------------------------------------------------------------- : Font Font::Font() : font(*wxNORMAL_FONT) , size(font.GetPointSize()) , scale_down_to(100000) , shadow_displacement(0,0) , separator_color(128,128,128) {} bool Font::update(Context& ctx) { return color .update(ctx) | shadow_color.update(ctx); } void Font::initDependencies(Context& ctx, const Dependency& dep) const { color .initDependencies(ctx, dep); shadow_color.initDependencies(ctx, dep); } FontP Font::make(bool bold, bool italic, bool placeholder_color, bool code_color, Color* other_color) const { FontP f(new Font(*this)); if (bold) f->font.SetWeight(wxBOLD); if (italic) { if (!italic_name.empty()) { f->font.SetFaceName(italic_name); } else { f->font.SetWeight(wxBOLD); } } if (code_color) { f->color = Color(128,0,0); f->font.SetFamily(wxFONTFAMILY_TELETYPE); f->font.SetFaceName(_("Courier New")); } if (placeholder_color) { f->color = f->separator_color; f->shadow_displacement = RealSize(0,0); // no shadow } if (other_color) { f->color = *other_color; } return f; } void reflect_font(Reader& tag, Font& font) { String name, weight, style; double size = -1; REFLECT(name); REFLECT(size); REFLECT(weight); REFLECT(style); if (!name.empty()) font.font.SetFaceName(name); if (size > 0) font.font.SetPointSize((int) (font.size = size)); if (!weight.empty()) font.font.SetWeight(weight == _("bold") ? wxBOLD : wxNORMAL); if (!style.empty()) font.font.SetWeight(style == _("italic") ? wxITALIC : wxNORMAL); } template void reflect_font(Tag& tag, const Font& font) { REFLECT_N("name", font.font.GetFaceName()); REFLECT_N("size", font.size); REFLECT_N("weight", font.font.GetWeight() == wxBOLD ? _("bold") : _("normal")); REFLECT_N("style", font.font.GetStyle() == wxITALIC ? _("italic") : _("normal")); } IMPLEMENT_REFLECTION(Font) { reflect_font(tag, *this); REFLECT(italic_name); REFLECT(color); REFLECT(scale_down_to); REFLECT_N("shadow_displacement_x", shadow_displacement.width); REFLECT_N("shadow_displacement_y", shadow_displacement.height); REFLECT(shadow_color); REFLECT(separator_color); }