1 /*
2  * Copyright 2017 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can
5  * be found in the LICENSE file.
6  *
7  */
8 
9 #pragma once
10 
11 //
12 //
13 //
14 
15 #include "skc.h"
16 #include "assert_state.h"
17 
18 //
19 //
20 //
21 
22 typedef enum skc_path_builder_state_e {
23 
24   SKC_PATH_BUILDER_STATE_READY,
25   SKC_PATH_BUILDER_STATE_BUILDING
26 
27 } skc_path_builder_state_e;
28 
29 //
30 // FIXME -- we might be able to bury more of this in the impl
31 //
32 
33 struct skc_coords_rem_count_line
34 {
35   skc_uint    rem;
36   skc_float * coords[4];
37 };
38 
39 struct skc_coords_rem_count_quad
40 {
41   skc_uint    rem;
42   skc_float * coords[6];
43 };
44 
45 struct skc_coords_rem_count_cubic
46 {
47   skc_uint    rem;
48   skc_float * coords[8];
49 };
50 
51 //
52 //
53 //
54 
55 struct skc_path_builder
56 {
57   struct skc_context              * context;
58 
59   struct skc_path_builder_impl    * impl;
60 
61   void                           (* begin    )(struct skc_path_builder_impl * const impl);
62   void                           (* end      )(struct skc_path_builder_impl * const impl, skc_path_t * const path);
63   void                           (* new_line )(struct skc_path_builder_impl * const impl);
64   void                           (* new_quad )(struct skc_path_builder_impl * const impl);
65   void                           (* new_cubic)(struct skc_path_builder_impl * const impl);
66   void                           (* release  )(struct skc_path_builder_impl * const impl);
67 
68   struct skc_coords_rem_count_line  line;
69   struct skc_coords_rem_count_quad  quad;
70   struct skc_coords_rem_count_cubic cubic;
71 
72   struct {
73     float                           x;
74     float                           y;
75   } curr[2];
76 
77   skc_uint                          refcount;
78 
79   SKC_ASSERT_STATE_DECLARE(skc_path_builder_state_e);
80 };
81 
82 //
83 //
84 //
85