vfs: check userland buffers before reading them.
[haiku.git] / headers / libs / agg / agg_trans_single_path.h
blob9f4bf53bdbc78c35b0289d68d26df0f0dc7cca1b
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 //----------------------------------------------------------------------------
16 #ifndef AGG_TRANS_SINGLE_PATH_INCLUDED
17 #define AGG_TRANS_SINGLE_PATH_INCLUDED
19 #include "agg_basics.h"
20 #include "agg_vertex_sequence.h"
22 namespace agg
25 // See also: agg_trans_single_path.cpp
27 //-------------------------------------------------------trans_single_path
28 class trans_single_path
30 enum status_e
32 initial,
33 making_path,
34 ready
37 public:
38 typedef vertex_sequence<vertex_dist, 6> vertex_storage;
40 trans_single_path();
42 //--------------------------------------------------------------------
43 void base_length(double v) { m_base_length = v; }
44 double base_length() const { return m_base_length; }
46 //--------------------------------------------------------------------
47 void preserve_x_scale(bool f) { m_preserve_x_scale = f; }
48 bool preserve_x_scale() const { return m_preserve_x_scale; }
50 //--------------------------------------------------------------------
51 void reset();
52 void move_to(double x, double y);
53 void line_to(double x, double y);
54 void finalize_path();
56 //--------------------------------------------------------------------
57 template<class VertexSource>
58 void add_path(VertexSource& vs, unsigned path_id=0)
60 double x;
61 double y;
63 unsigned cmd;
64 vs.rewind(path_id);
65 while(!is_stop(cmd = vs.vertex(&x, &y)))
67 if(is_move_to(cmd))
69 move_to(x, y);
71 else
73 if(is_vertex(cmd))
75 line_to(x, y);
79 finalize_path();
82 //--------------------------------------------------------------------
83 double total_length() const;
84 void transform(double *x, double *y) const;
86 private:
87 vertex_storage m_src_vertices;
88 double m_base_length;
89 double m_kindex;
90 status_e m_status;
91 bool m_preserve_x_scale;
97 #endif