~s-cecilio/lenmus/trunk

« back to all changes in this revision

Viewing changes to lomse/trunk/src/agg/include/agg_gsv_text.h

  • Committer: Cecilio Salmeron
  • Date: 2016-02-04 10:15:44 UTC
  • Revision ID: s.cecilios@gmail.com-20160204101544-wdodav3eyyej64ga
Prepare for GitHub migration

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
//----------------------------------------------------------------------------
2
 
// Anti-Grain Geometry - Version 2.4
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
 
//----------------------------------------------------------------------------
15
 
//
16
 
// Class gsv_text
17
 
//
18
 
//----------------------------------------------------------------------------
19
 
 
20
 
#ifndef AGG_GSV_TEXT_INCLUDED
21
 
#define AGG_GSV_TEXT_INCLUDED
22
 
 
23
 
#include "agg_array.h"
24
 
#include "agg_conv_stroke.h"
25
 
#include "agg_conv_transform.h"
26
 
 
27
 
namespace agg
28
 
{
29
 
 
30
 
 
31
 
    //---------------------------------------------------------------gsv_text
32
 
    //
33
 
    // See Implementation agg_gsv_text.cpp 
34
 
    //
35
 
    class gsv_text
36
 
    {
37
 
        enum status
38
 
        {
39
 
            initial,
40
 
            next_char,
41
 
            start_glyph,
42
 
            glyph
43
 
        };
44
 
 
45
 
    public:
46
 
        gsv_text();
47
 
 
48
 
        void font(const void* font);
49
 
        void flip(bool flip_y) { m_flip = flip_y; }
50
 
        void load_font(const char* file);
51
 
        void size(double height, double width=0.0);
52
 
        void space(double space);
53
 
        void line_space(double line_space);
54
 
        void start_point(double x, double y);
55
 
        void text(const char* text);
56
 
        
57
 
        double text_width();
58
 
 
59
 
        void rewind(unsigned path_id);
60
 
        unsigned vertex(double* x, double* y);
61
 
 
62
 
    private:
63
 
        // not supposed to be copied
64
 
        gsv_text(const gsv_text&);
65
 
        const gsv_text& operator = (const gsv_text&);
66
 
 
67
 
        int16u value(const int8u* p) const
68
 
        {
69
 
            int16u v;
70
 
            if(m_big_endian)
71
 
            {
72
 
                 *(int8u*)&v      = p[1];
73
 
                *((int8u*)&v + 1) = p[0];
74
 
            }
75
 
            else
76
 
            {
77
 
                 *(int8u*)&v      = p[0];
78
 
                *((int8u*)&v + 1) = p[1];
79
 
            }
80
 
            return v;
81
 
        }
82
 
 
83
 
    private:
84
 
        double          m_x;
85
 
        double          m_y;
86
 
        double          m_start_x;
87
 
        double          m_width;
88
 
        double          m_height;
89
 
        double          m_space;
90
 
        double          m_line_space;
91
 
        char            m_chr[2];
92
 
        char*           m_text;
93
 
        pod_array<char> m_text_buf;
94
 
        char*           m_cur_chr;
95
 
        const void*     m_font;
96
 
        pod_array<char> m_loaded_font;
97
 
        status          m_status;
98
 
        bool            m_big_endian;
99
 
        bool            m_flip;
100
 
        int8u*          m_indices;
101
 
        int8*           m_glyphs;
102
 
        int8*           m_bglyph;
103
 
        int8*           m_eglyph;
104
 
        double          m_w;
105
 
        double          m_h;
106
 
    };
107
 
 
108
 
 
109
 
 
110
 
 
111
 
    //--------------------------------------------------------gsv_text_outline
112
 
    template<class Transformer = trans_affine> class gsv_text_outline
113
 
    {
114
 
    public:
115
 
        gsv_text_outline(gsv_text& text, const Transformer& trans) :
116
 
          m_polyline(text),
117
 
          m_trans(m_polyline, trans)
118
 
        {
119
 
        }
120
 
 
121
 
        void width(double w) 
122
 
        { 
123
 
            m_polyline.width(w); 
124
 
        }
125
 
 
126
 
        void transformer(const Transformer* trans) 
127
 
        {
128
 
            m_trans->transformer(trans);
129
 
        }
130
 
 
131
 
        void rewind(unsigned path_id) 
132
 
        { 
133
 
            m_trans.rewind(path_id); 
134
 
            m_polyline.line_join(round_join);
135
 
            m_polyline.line_cap(round_cap);
136
 
        }
137
 
 
138
 
        unsigned vertex(double* x, double* y)
139
 
        {
140
 
            return m_trans.vertex(x, y);
141
 
        }
142
 
 
143
 
    private:
144
 
        conv_stroke<gsv_text> m_polyline;
145
 
        conv_transform<conv_stroke<gsv_text>, Transformer> m_trans;
146
 
    };
147
 
 
148
 
 
149
 
 
150
 
}
151
 
 
152
 
 
153
 
#endif
 
1
//----------------------------------------------------------------------------
 
2
// Anti-Grain Geometry - Version 2.4
 
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
//----------------------------------------------------------------------------
 
15
//
 
16
// Class gsv_text
 
17
//
 
18
//----------------------------------------------------------------------------
 
19
 
 
20
#ifndef AGG_GSV_TEXT_INCLUDED
 
21
#define AGG_GSV_TEXT_INCLUDED
 
22
 
 
23
#include "agg_array.h"
 
24
#include "agg_conv_stroke.h"
 
25
#include "agg_conv_transform.h"
 
26
 
 
27
namespace agg
 
28
{
 
29
 
 
30
 
 
31
    //---------------------------------------------------------------gsv_text
 
32
    //
 
33
    // See Implementation agg_gsv_text.cpp 
 
34
    //
 
35
    class gsv_text
 
36
    {
 
37
        enum status
 
38
        {
 
39
            initial,
 
40
            next_char,
 
41
            start_glyph,
 
42
            glyph
 
43
        };
 
44
 
 
45
    public:
 
46
        gsv_text();
 
47
 
 
48
        void font(const void* font);
 
49
        void flip(bool flip_y) { m_flip = flip_y; }
 
50
        void load_font(const char* file);
 
51
        void size(double height, double width=0.0);
 
52
        void space(double space);
 
53
        void line_space(double line_space);
 
54
        void start_point(double x, double y);
 
55
        void text(const char* text);
 
56
        
 
57
        double text_width();
 
58
 
 
59
        void rewind(unsigned path_id);
 
60
        unsigned vertex(double* x, double* y);
 
61
 
 
62
    private:
 
63
        // not supposed to be copied
 
64
        gsv_text(const gsv_text&);
 
65
        const gsv_text& operator = (const gsv_text&);
 
66
 
 
67
        int16u value(const int8u* p) const
 
68
        {
 
69
            int16u v;
 
70
            if(m_big_endian)
 
71
            {
 
72
                 *(int8u*)&v      = p[1];
 
73
                *((int8u*)&v + 1) = p[0];
 
74
            }
 
75
            else
 
76
            {
 
77
                 *(int8u*)&v      = p[0];
 
78
                *((int8u*)&v + 1) = p[1];
 
79
            }
 
80
            return v;
 
81
        }
 
82
 
 
83
    private:
 
84
        double          m_x;
 
85
        double          m_y;
 
86
        double          m_start_x;
 
87
        double          m_width;
 
88
        double          m_height;
 
89
        double          m_space;
 
90
        double          m_line_space;
 
91
        char            m_chr[2];
 
92
        char*           m_text;
 
93
        pod_array<char> m_text_buf;
 
94
        char*           m_cur_chr;
 
95
        const void*     m_font;
 
96
        pod_array<char> m_loaded_font;
 
97
        status          m_status;
 
98
        bool            m_big_endian;
 
99
        bool            m_flip;
 
100
        int8u*          m_indices;
 
101
        int8*           m_glyphs;
 
102
        int8*           m_bglyph;
 
103
        int8*           m_eglyph;
 
104
        double          m_w;
 
105
        double          m_h;
 
106
    };
 
107
 
 
108
 
 
109
 
 
110
 
 
111
    //--------------------------------------------------------gsv_text_outline
 
112
    template<class Transformer = trans_affine> class gsv_text_outline
 
113
    {
 
114
    public:
 
115
        gsv_text_outline(gsv_text& text, Transformer& trans) :
 
116
          m_polyline(text),
 
117
          m_trans(m_polyline, trans)
 
118
        {
 
119
        }
 
120
 
 
121
        void width(double w) 
 
122
        { 
 
123
            m_polyline.width(w); 
 
124
        }
 
125
 
 
126
        void transformer(const Transformer* trans) 
 
127
        {
 
128
            m_trans->transformer(trans);
 
129
        }
 
130
 
 
131
        void rewind(unsigned path_id) 
 
132
        { 
 
133
            m_trans.rewind(path_id); 
 
134
            m_polyline.line_join(round_join);
 
135
            m_polyline.line_cap(round_cap);
 
136
        }
 
137
 
 
138
        unsigned vertex(double* x, double* y)
 
139
        {
 
140
            return m_trans.vertex(x, y);
 
141
        }
 
142
 
 
143
    private:
 
144
        conv_stroke<gsv_text> m_polyline;
 
145
        conv_transform<conv_stroke<gsv_text>, Transformer> m_trans;
 
146
    };
 
147
 
 
148
 
 
149
 
 
150
}
 
151
 
 
152
 
 
153
#endif