Annotation of parser3/src/types/pa_vimage.C, revision 1.22.2.7.2.3
1.7 paf 1: /** @file
1.1 paf 2: Parser: @b image parser type.
3:
1.22.2.3 paf 4: Copyright(c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com)
1.16 paf 5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.18 paf 6: */
1.1 paf 7:
1.22.2.7.2.3! paf 8: static const char* IDENT_VIMAGE_C="$Date: 2003/03/20 14:19:10 $";
1.1 paf 9:
10: #include "pa_vimage.h"
11: #include "pa_vint.h"
12: #include "pa_vstring.h"
1.8 parser 13: #include "gif.h"
1.1 paf 14:
1.22.2.7.2.1 paf 15: void VImage::set(const String& src, int width, int height,
1.22.2.7.2.3! paf 16: gdImage* aimage,
! 17: Value* aexif) {
1.22.2.6 paf 18: image=aimage;
1.21 paf 19: fexif=aexif;
1.3 paf 20:
1.1 paf 21: // $src
1.3 paf 22: if(src)
1.22.2.7.2.3! paf 23: ffields.put(String* (new String("src")), Value*(new VString(src)));
1.1 paf 24: // $width
25: if(width)
1.22.2.7.2.3! paf 26: ffields.put(String* (new String("width")), Value*(new VInt(width)));
1.1 paf 27: // $height
28: if(height)
1.22.2.7.2.3! paf 29: ffields.put(String* (new String("height")), Value*(new VInt(height)));
1.2 paf 30:
31: // defaults
1.8 parser 32: // $border(0)
1.22.2.7.2.3! paf 33: ffields.put(String* (new String("border")), Value*(new VInt(0)));
1.11 parser 34:
1.12 parser 35: // internals, take a look at image.C append_attrib_pair before update
1.8 parser 36: // $line-width(1)
1.22.2.7.2.3! paf 37: ffields.put(String* (new String("line-width")), Value*(new VInt(1)));
1.8 parser 38: }
39:
1.21 paf 40:
1.22.2.7.2.3! paf 41: Value* VImage::get_element(const String& aname, Value& aself, bool looking_up) {
1.21 paf 42: // $method
1.22.2.7.2.3! paf 43: if(Value* result=VStateless_object::get_element(aname, aself, looking_up))
1.21 paf 44: return result;
45:
46: // $exif
1.22.2.7.2.3! paf 47: if(aname==EXIF_ELEMENT_NAME)
1.21 paf 48: return fexif;
49:
50: // $src, $size
1.22.2.4 paf 51: return ffields.get(aname);
1.21 paf 52: }
1.8 parser 53:
1.22.2.7.2.3! paf 54: bool VImage::put_element(const String& aname, Value* avalue, bool replace) {
1.8 parser 55: ffields.put(aname, avalue);
56:
1.22.2.6 paf 57: if(image) {
1.22.2.7.2.3! paf 58: if(aname=="line-width") {
1.22.2.6 paf 59: image->SetLineWidth(min(max(avalue->as_int(), 1), 10));
1.22.2.7.2.3! paf 60: } else if(aname=="line-style") {
1.22.2.7.2.1 paf 61: const String& sline_style=avalue->as_string(0);
1.22.2.7.2.3! paf 62: image->SetLineStyle(sline_style->length()?sline_style->cstr(String::L_AS_IS):CharPtr(0));
1.8 parser 63: }
1.20 paf 64: }
65:
66: return true;
1.1 paf 67: }
E-mail: