--- parser3/src/classes/image.C 2001/10/04 14:56:29 1.47 +++ parser3/src/classes/image.C 2001/10/08 15:50:22 1.49 @@ -4,7 +4,7 @@ Copyright(c) 2001 ArtLebedev Group(http://www.artlebedev.com) Author: Alexander Petrosyan (http://design.ru/paf) - $Id: image.C,v 1.47 2001/10/04 14:56:29 parser Exp $ + $Id: image.C,v 1.49 2001/10/08 15:50:22 parser Exp $ */ /* @@ -293,7 +293,8 @@ struct Attrib_info { static void append_attrib_pair(const Hash::Key& key, Hash::Val *val, void *info) { Attrib_info& ai=*static_cast(info); - if(ai.skip && ai.skip->get(key)) + // skip user-specified and internal(starting with "line-") attributes + if(ai.skip && ai.skip->get(key) || key.pos("line-")==0) return; Value& value=*static_cast(val); @@ -314,7 +315,7 @@ static void _html(Request& r, const Stri if(params->size()) { Value &vattribs=params->get(0); if(vattribs.is_defined()) // allow 'void' - if(Hash *attribs=vattribs.get_hash()) { + if(attribs=vattribs.get_hash()) { Attrib_info attrib_info={&tag, 0}; attribs->for_each(append_attrib_pair, &attrib_info); } else @@ -700,6 +701,64 @@ static void _length(Request& r, const St "does not contain an image"); } +static void _arc(Request& r, const String& method_name, MethodParams *params) { + Pool& pool=r.pool(); + + gdImage *image=static_cast(r.self)->image; + if(!image) + PTHROW(0, 0, + &method_name, + "does not contain an image"); + + image->Arc( + params->as_int(0, r), //cx + params->as_int(1, r), //cy + params->as_int(2, r), //w + params->as_int(3, r), //h + params->as_int(4, r), //s + params->as_int(5, r), //e + image->Color(params->as_int(6, r))); +} + +static void _sector(Request& r, const String& method_name, MethodParams *params) { + Pool& pool=r.pool(); + + gdImage *image=static_cast(r.self)->image; + if(!image) + PTHROW(0, 0, + &method_name, + "does not contain an image"); + + image->Sector( + params->as_int(0, r), //cx + params->as_int(1, r), //cy + params->as_int(2, r), //w + params->as_int(3, r), //h + params->as_int(4, r), //s + params->as_int(5, r), //e + image->Color(params->as_int(6, r))); +} + +static void _circle(Request& r, const String& method_name, MethodParams *params) { + Pool& pool=r.pool(); + + gdImage *image=static_cast(r.self)->image; + if(!image) + PTHROW(0, 0, + &method_name, + "does not contain an image"); + + int radius=params->as_int(2, r); + image->Arc( + params->as_int(0, r), //cx + params->as_int(1, r), //cy + radius, //w + radius, //h + 0, //s + 360, //e + image->Color(params->as_int(3, r))); +} + // constructor MImage::MImage(Pool& apool) : Methoded(apool) { @@ -757,6 +816,15 @@ MImage::MImage(Pool& apool) : Methoded(a // ^image.ngth[text] add_native_method("length", Method::CT_DYNAMIC, _length, 1, 1); + // ^image.arc(center x;center y;width;height;start in degrees;end in degrees;color) + add_native_method("arc", Method::CT_DYNAMIC, _arc, 7, 7); + + // ^image.sector(center x;center y;width;height;start in degrees;end in degrees;color) + add_native_method("sector", Method::CT_DYNAMIC, _sector, 7, 7); + + // ^image.circle(center x;center y;r;color) + add_native_method("circle", Method::CT_DYNAMIC, _circle, 4, 4); + } // global variable