Annotation of parser3/src/types/pa_vimage.C, revision 1.39
1.7 paf 1: /** @file
1.1 paf 2: Parser: @b image parser type.
3:
1.37 misha 4: Copyright(c) 2001-2009 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.39 ! misha 8: static const char * const IDENT_VIMAGE_C="$Date: 2009-07-06 08:48:24 $";
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.36 misha 14: #include "pa_vbool.h"
15:
1.1 paf 16:
1.23 paf 17: void VImage::set(const String* src, int width, int height,
1.21 paf 18: gdImage* aimage,
19: Value* aexif) {
1.30 paf 20: fimage=aimage;
1.21 paf 21: fexif=aexif;
1.3 paf 22:
1.1 paf 23: // $src
1.3 paf 24: if(src)
1.28 paf 25: ffields.put(String::Body("src"), new VString(*src));
1.1 paf 26: // $width
27: if(width)
1.28 paf 28: ffields.put(String::Body("width"), new VInt(width));
1.1 paf 29: // $height
30: if(height)
1.28 paf 31: ffields.put(String::Body("height"), new VInt(height));
1.2 paf 32: // defaults
1.8 parser 33: // $border(0)
1.28 paf 34: ffields.put(String::Body("border"), new VInt(0));
1.11 parser 35:
1.12 parser 36: // internals, take a look at image.C append_attrib_pair before update
1.8 parser 37: // $line-width(1)
1.28 paf 38: ffields.put(String::Body("line-width"), new VInt(1));
1.8 parser 39: }
40:
1.36 misha 41: Value& VImage::as_expr_result(bool /*return_string_as_is=false*/) {
1.37 misha 42: return VBool::get(as_bool());
1.36 misha 43: }
44:
1.21 paf 45:
1.23 paf 46: Value* VImage::get_element(const String& aname, Value& aself, bool looking_up) {
1.21 paf 47: // $method
1.23 paf 48: if(Value* result=VStateless_object::get_element(aname, aself, looking_up))
1.21 paf 49: return result;
50:
51: // $exif
52: if(aname==EXIF_ELEMENT_NAME)
53: return fexif;
54:
55: // $src, $size
1.23 paf 56: return ffields.get(aname);
1.21 paf 57: }
1.8 parser 58:
1.34 paf 59: const VJunction* VImage::put_element(Value& /*aself*/, const String& aname, Value* avalue, bool /*replace*/) {
1.8 parser 60: ffields.put(aname, avalue);
61:
1.30 paf 62: if(fimage) {
1.8 parser 63: if(aname=="line-width") {
1.30 paf 64: fimage->SetLineWidth(min(max(avalue->as_int(), 1), 10));
1.8 parser 65: } else if(aname=="line-style") {
1.23 paf 66: const String& sline_style=avalue->as_string();
1.39 ! misha 67: fimage->SetLineStyle(sline_style.length()?sline_style.taint_cstr(String::L_AS_IS):0);
1.8 parser 68: }
1.20 paf 69: }
70:
1.31 paf 71: return PUT_ELEMENT_REPLACED_ELEMENT;
1.1 paf 72: }
E-mail: