Annotation of parser3/src/types/pa_vimage.C, revision 1.38

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.38    ! misha       8: static const char * const IDENT_VIMAGE_C="$Date: 2009-04-16 01:08:26 $";
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.38    ! misha      67:                        fimage->SetLineStyle(sline_style.length()?sline_style.cstr_taint(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: