diff --git a/binding-mri/font-binding.cpp b/binding-mri/font-binding.cpp index dc46469..ca7fc52 100644 --- a/binding-mri/font-binding.cpp +++ b/binding-mri/font-binding.cpp @@ -61,6 +61,11 @@ RB_METHOD(fontInitialize) f->setColor(new Color(*f->getColor())); wrapProperty(self, f->getColor(), "color", ColorType); +#ifdef RGSS3 + f->setOutColor(new Color(*f->getOutColor())); + wrapProperty(self, f->getOutColor(), "out_color", ColorType); +#endif + if (NIL_P(name)) name = rb_iv_get(rb_obj_class(self), "default_name"); @@ -87,6 +92,11 @@ RB_METHOD(fontInitializeCopy) f->setColor(new Color(*f->getColor())); wrapProperty(self, f->getColor(), "color", ColorType); +#ifdef RGSS3 + f->setOutColor(new Color(*f->getOutColor())); + wrapProperty(self, f->getOutColor(), "out_color", ColorType); +#endif + return self; } @@ -158,6 +168,15 @@ DEF_PROP_B(Font, Bold) DEF_PROP_B(Font, Italic) DEF_PROP_OBJ(Font, Color, Color, "color") +#ifdef RGSS2 +DEF_PROP_B(Font, Shadow) +#endif + +#ifdef RGSS3 +DEF_PROP_B(Font, Outline) +DEF_PROP_OBJ(Font, Color, OutColor, "out_color") +#endif + #define DEF_KLASS_PROP(Klass, type, PropName, param_t_s, value_fun) \ RB_METHOD(Klass##Get##PropName) \ { \ @@ -177,6 +196,16 @@ DEF_KLASS_PROP(Font, int, DefaultSize, "i", rb_fix_new) DEF_KLASS_PROP(Font, bool, DefaultBold, "b", rb_bool_new) DEF_KLASS_PROP(Font, bool, DefaultItalic, "b", rb_bool_new) +#ifdef RGSS2 +DEF_KLASS_PROP(Font, bool, DefaultShadow, "b", rb_bool_new) +#endif + +#ifdef RGSS3 +DEF_KLASS_PROP(Font, bool, DefaultOutline, "b", rb_bool_new) + +// TODO: impl Get/SetDefaultOutColor +#endif + RB_METHOD(FontGetDefaultName) { RB_UNUSED_PARAM; @@ -239,6 +268,14 @@ fontBindingInit() INIT_KLASS_PROP_BIND(Font, DefaultItalic, "default_italic"); INIT_KLASS_PROP_BIND(Font, DefaultColor, "default_color"); +#ifdef RGSS2 + INIT_KLASS_PROP_BIND(Font, DefaultShadow, "default_shadow"); +#endif + +#ifdef RGSS3 + INIT_KLASS_PROP_BIND(Font, DefaultOutline, "default_outline"); +#endif + rb_define_class_method(klass, "exist?", fontDoesExist); _rb_define_method(klass, "initialize", fontInitialize); @@ -249,4 +286,13 @@ fontBindingInit() INIT_PROP_BIND(Font, Bold, "bold"); INIT_PROP_BIND(Font, Italic, "italic"); INIT_PROP_BIND(Font, Color, "color"); + +#ifdef RGSS2 + INIT_PROP_BIND(Font, Shadow, "shadow"); +#endif + +#ifdef RGSS3 + INIT_PROP_BIND(Font, Outline, "outline"); + INIT_PROP_BIND(Font, OutColor, "out_color"); +#endif } diff --git a/src/font.cpp b/src/font.cpp index 1d0d74e..2e6528c 100644 --- a/src/font.cpp +++ b/src/font.cpp @@ -198,17 +198,25 @@ struct FontPrivate int size; bool bold; bool italic; + bool outline; + bool shadow; Color *color; + Color *outColor; Color colorTmp; + Color outColorTmp; static std::string defaultName; static int defaultSize; static bool defaultBold; static bool defaultItalic; + static bool defaultOutline; + static bool defaultShadow; static Color *defaultColor; + static Color *defaultOutColor; static Color defaultColorTmp; + static Color defaultOutColorTmp; /* The actual font is opened as late as possible * (when it is queried by a Bitmap), prior it is @@ -221,8 +229,12 @@ struct FontPrivate size(size ? size : defaultSize), bold(defaultBold), italic(defaultItalic), + outline(defaultOutline), + shadow(defaultShadow), color(&colorTmp), + outColor(&outColorTmp), colorTmp(*defaultColor), + outColorTmp(*defaultOutColor), sdlFont(0) {} @@ -231,19 +243,27 @@ struct FontPrivate size(other.size), bold(other.bold), italic(other.italic), + outline(other.outline), + shadow(other.shadow), color(&colorTmp), + outColor(&outColorTmp), colorTmp(*other.color), + outColorTmp(*other.outColor), sdlFont(other.sdlFont) {} }; -std::string FontPrivate::defaultName = "Arial"; -int FontPrivate::defaultSize = 22; -bool FontPrivate::defaultBold = false; -bool FontPrivate::defaultItalic = false; -Color *FontPrivate::defaultColor = &FontPrivate::defaultColorTmp; +std::string FontPrivate::defaultName = "Arial"; +int FontPrivate::defaultSize = 22; +bool FontPrivate::defaultBold = false; +bool FontPrivate::defaultItalic = false; +bool FontPrivate::defaultOutline = false; +bool FontPrivate::defaultShadow = true; +Color *FontPrivate::defaultColor = &FontPrivate::defaultColorTmp; +Color *FontPrivate::defaultOutColor = &FontPrivate::defaultOutColorTmp; Color FontPrivate::defaultColorTmp(255, 255, 255, 255); +Color FontPrivate::defaultOutColorTmp(0, 0, 0, 128); bool Font::doesExist(const char *name) { @@ -299,15 +319,33 @@ void Font::setSize(int value) #undef CHK_DISP #define CHK_DISP -DEF_ATTR_RD_SIMPLE(Font, Size, int, p->size) -DEF_ATTR_SIMPLE(Font, Bold, bool, p->bold) -DEF_ATTR_SIMPLE(Font, Italic, bool, p->italic) -DEF_ATTR_SIMPLE(Font, Color, Color*, p->color) +DEF_ATTR_RD_SIMPLE(Font, Size, int, p->size) +DEF_ATTR_SIMPLE(Font, Bold, bool, p->bold) +DEF_ATTR_SIMPLE(Font, Italic, bool, p->italic) +DEF_ATTR_SIMPLE(Font, Color, Color*, p->color) -DEF_ATTR_SIMPLE_STATIC(Font, DefaultSize, int, FontPrivate::defaultSize) -DEF_ATTR_SIMPLE_STATIC(Font, DefaultBold, bool, FontPrivate::defaultBold) -DEF_ATTR_SIMPLE_STATIC(Font, DefaultItalic, bool, FontPrivate::defaultItalic) -DEF_ATTR_SIMPLE_STATIC(Font, DefaultColor, Color*, FontPrivate::defaultColor) +#ifdef RGSS2 +DEF_ATTR_SIMPLE(Font, Shadow, bool, p->shadow) +#endif + +#ifdef RGSS3 +DEF_ATTR_SIMPLE(Font, Outline, bool, p->outline) +DEF_ATTR_SIMPLE(Font, OutColor, Color*, p->outColor) +#endif + +DEF_ATTR_SIMPLE_STATIC(Font, DefaultSize, int, FontPrivate::defaultSize) +DEF_ATTR_SIMPLE_STATIC(Font, DefaultBold, bool, FontPrivate::defaultBold) +DEF_ATTR_SIMPLE_STATIC(Font, DefaultItalic, bool, FontPrivate::defaultItalic) +DEF_ATTR_SIMPLE_STATIC(Font, DefaultColor, Color*, FontPrivate::defaultColor) + +#ifdef RGSS2 +DEF_ATTR_SIMPLE_STATIC(Font, DefaultShadow, bool, FontPrivate::defaultShadow) +#endif + +#ifdef RGSS3 +DEF_ATTR_SIMPLE_STATIC(Font, DefaultOutline, bool, FontPrivate::defaultOutline) +DEF_ATTR_SIMPLE_STATIC(Font, DefaultOutColor, Color*, FontPrivate::defaultOutColor) +#endif const char *Font::getDefaultName() { diff --git a/src/font.h b/src/font.h index df25001..f992ce3 100644 --- a/src/font.h +++ b/src/font.h @@ -85,16 +85,34 @@ public: const char *getName() const; void setName(const char *value); - DECL_ATTR( Size, int ) - DECL_ATTR( Bold, bool ) - DECL_ATTR( Italic, bool ) - DECL_ATTR( Color, Color* ) + DECL_ATTR( Size, int ) + DECL_ATTR( Bold, bool ) + DECL_ATTR( Italic, bool ) + DECL_ATTR( Color, Color* ) - DECL_ATTR_STATIC( DefaultName, const char* ) - DECL_ATTR_STATIC( DefaultSize, int ) - DECL_ATTR_STATIC( DefaultBold, bool ) - DECL_ATTR_STATIC( DefaultItalic, bool ) - DECL_ATTR_STATIC( DefaultColor, Color* ) +#ifdef RGSS2 + DECL_ATTR( Shadow, bool ) +#endif + +#ifdef RGSS3 + DECL_ATTR( Outline, bool ) + DECL_ATTR( OutColor, Color* ) +#endif + + DECL_ATTR_STATIC( DefaultName, const char* ) + DECL_ATTR_STATIC( DefaultSize, int ) + DECL_ATTR_STATIC( DefaultBold, bool ) + DECL_ATTR_STATIC( DefaultItalic, bool ) + DECL_ATTR_STATIC( DefaultColor, Color* ) + +#ifdef RGSS2 + DECL_ATTR_STATIC( DefaultShadow, bool ) +#endif + +#ifdef RGSS3 + DECL_ATTR_STATIC( DefaultOutline, bool ) + DECL_ATTR_STATIC( DefaultOutColor, Color* ) +#endif /* internal */ _TTF_Font *getSdlFont();