Annotation of parser3/src/types/pa_vimage.h, revision 1.57
1.9 paf 1: /** @file
1.1 paf 2: Parser: @b image parser type decl.
3:
1.57 ! moko 4: Copyright (c) 2001-2017 Art. Lebedev Studio (http://www.artlebedev.com)
1.24 paf 5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.1 paf 6: */
7:
8: #ifndef PA_VIMAGE_H
9: #define PA_VIMAGE_H
1.26 paf 10:
1.57 ! moko 11: #define IDENT_PA_VIMAGE_H "$Id: pa_vimage.h,v 1.56 2015/10/26 01:22:01 moko Exp $"
1.1 paf 12:
1.12 paf 13: #include "classes.h"
1.1 paf 14: #include "pa_common.h"
15: #include "pa_vstateless_object.h"
1.51 misha 16: #include "pa_charset.h"
1.1 paf 17:
1.20 parser 18: // defines
19:
20: #define VIMAGE_TYPE "image"
1.33 paf 21: #define EXIF_ELEMENT_NAME "exif"
1.20 parser 22:
23: // forwards
24:
1.35 paf 25: class gdImage;
26:
27: /// simple gdImage-based font storage & text output
28: class Font: public PA_Object {
29: public:
30:
1.49 misha 31: int letterspacing;
32: int height; ///< Font heigth
33: int monospace; ///< Default char width
34: int spacebarspace; ///< spacebar width
1.35 paf 35: gdImage* ifont;
36: const String& alphabet;
37:
1.38 paf 38: Font(
1.51 misha 39: Charset& acharset, const String& aalphabet,
1.49 misha 40: gdImage* aifont, int aheight, int amonospace, int aspacebarspace, int aletterspacing);
1.35 paf 41:
42: //@{******************************** char **********************************
43: size_t index_of(char ch);
1.52 misha 44: size_t index_of(XMLCh ch);
1.35 paf 45: int index_width(size_t index);
1.40 paf 46: void index_display(gdImage& image, int x, int y, size_t index);
1.35 paf 47: //@}
48: //@{******************************* string *********************************
49: int step_width(int index);
50: //@}
51: /// counts trailing letter_spacing, consider this OK. useful for contiuations
52: int string_width(const String& s);
1.40 paf 53: void string_display(gdImage& image, int x, int y, const String& s);
1.51 misha 54:
55: private:
56: Charset& fsource_charset;
57: Hash<XMLCh, size_t> fletter2index;
1.35 paf 58: };
1.10 paf 59:
1.20 parser 60: // externs
61:
1.35 paf 62: extern Methoded* image_class;
1.7 paf 63:
1.8 paf 64: /** holds img attributes
1.1 paf 65: and [image itself]
66: */
1.35 paf 67: class VImage: public VStateless_object {
1.1 paf 68: public: // Value
69:
1.35 paf 70: override const char* type() const { return VIMAGE_TYPE; }
71: override VStateless_class *get_class() { return image_class; }
1.1 paf 72:
73: /// VImage: true
1.35 paf 74: override bool as_bool() const { return true; }
1.19 parser 75:
1.47 misha 76: /// VImage: true
1.54 moko 77: override Value& as_expr_result();
1.47 misha 78:
1.1 paf 79: /// VImage: method,field
1.50 misha 80: override Value* get_element(const String& aname);
1.15 parser 81:
82: /// VImage: field
1.55 moko 83: override const VJunction* put_element(const String& name, Value* value);
1.1 paf 84:
85: public: // usage
86:
1.35 paf 87: void set(const String* src, int width, int height,
88: gdImage* aimage,
89: Value* aexif=0);
1.1 paf 90:
1.35 paf 91: HashStringValue& fields() { return ffields; }
1.3 paf 92:
93: public:
94:
1.40 paf 95: gdImage& image() {
96: if(!fimage)
1.48 misha 97: throw Exception(PARSER_RUNTIME,
1.40 paf 98: 0,
99: "using unitialized image object");
100:
101: return *fimage;
102: }
103:
104: void set_font(Font* afont) { ffont=afont; }
105: Font& font() {
106: if(!ffont)
1.48 misha 107: throw Exception(PARSER_RUNTIME,
1.40 paf 108: 0,
109: "set the font first");
110: return *ffont;
111: }
1.1 paf 112:
113: private:
114:
1.40 paf 115: gdImage* fimage;
116: Font* ffont;
1.35 paf 117: HashStringValue ffields;
118: Value* fexif;
1.1 paf 119:
120: };
121:
122: #endif
E-mail: