update dev300-m58
[ooovba.git] / agg / inc / agg_gsv_text.h
blobf6593ef51184319cc0721a9338d853f2b55ceaa1
1 //----------------------------------------------------------------------------
2 // Anti-Grain Geometry - Version 2.3
3 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
4 //
5 // Permission to copy, use, modify, sell and distribute this software
6 // is granted provided this copyright notice appears in all copies.
7 // This software is provided "as is" without express or implied
8 // warranty, and with no claim as to its suitability for any purpose.
9 //
10 //----------------------------------------------------------------------------
11 // Contact: mcseem@antigrain.com
12 // mcseemagg@yahoo.com
13 // http://www.antigrain.com
14 //----------------------------------------------------------------------------
16 // Class gsv_text
18 //----------------------------------------------------------------------------
20 #ifndef AGG_GSV_TEXT_INCLUDED
21 #define AGG_GSV_TEXT_INCLUDED
23 #include "agg_basics.h"
24 #include "agg_conv_stroke.h"
25 #include "agg_conv_transform.h"
27 namespace agg
31 //---------------------------------------------------------------gsv_text
33 // See Implementation agg_gsv_text.cpp
35 class gsv_text
37 enum status
39 initial,
40 next_char,
41 start_glyph,
42 glyph
45 public:
46 ~gsv_text();
47 gsv_text();
49 void font(const void* font);
50 void flip(bool flip_y) { m_flip = flip_y; }
51 void load_font(const char* file);
52 void size(double height, double width=0.0);
53 void space(double space);
54 void line_space(double line_space);
55 void start_point(double x, double y);
56 void text(const char* text);
58 void rewind(unsigned id);
59 unsigned vertex(double* x, double* y);
61 private:
62 // not supposed to be copied
63 gsv_text(const gsv_text&);
64 const gsv_text& operator = (const gsv_text&);
66 int16u value(const int8u* p) const
68 int16u v;
69 if(m_big_endian)
71 *(int8u*)&v = p[1];
72 *((int8u*)&v + 1) = p[0];
74 else
76 *(int8u*)&v = p[0];
77 *((int8u*)&v + 1) = p[1];
79 return v;
82 private:
83 double m_x;
84 double m_y;
85 double m_start_x;
86 double m_width;
87 double m_height;
88 double m_space;
89 double m_line_space;
90 char m_chr[2];
91 char* m_text;
92 char* m_text_buf;
93 unsigned m_buf_size;
94 char* m_cur_chr;
95 const void* m_font;
96 char* m_loaded_font;
97 status m_status;
98 bool m_big_endian;
99 bool m_flip;
101 int8u* m_indices;
102 int8* m_glyphs;
103 int8* m_bglyph;
104 int8* m_eglyph;
105 double m_w;
106 double m_h;
112 //--------------------------------------------------------gsv_text_outline
113 template<class Transformer = trans_affine> class gsv_text_outline
115 public:
116 gsv_text_outline(gsv_text& text, const Transformer& trans) :
117 m_polyline(text),
118 m_trans(m_polyline, trans)
122 void width(double w)
124 m_polyline.width(w);
127 void transformer(const Transformer* trans)
129 m_trans->transformer(trans);
132 void rewind(unsigned id)
134 m_trans.rewind(id);
135 m_polyline.line_join(round_join);
136 m_polyline.line_cap(round_cap);
139 unsigned vertex(double* x, double* y)
141 return m_trans.vertex(x, y);
144 private:
145 conv_stroke<gsv_text> m_polyline;
146 conv_transform<conv_stroke<gsv_text>, Transformer> m_trans;
154 #endif