blob: c8e36dfbdfabdf16d82212c00bdf099d9ba6b4f2 [file] [log] [blame]
Allan MacKinnon4359d522018-06-19 13:57:04 -07001/*
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
22typedef 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
33struct skc_coords_rem_count_line
34{
35 skc_uint rem;
36 skc_float * coords[4];
37};
38
39struct skc_coords_rem_count_quad
40{
41 skc_uint rem;
42 skc_float * coords[6];
43};
44
45struct skc_coords_rem_count_cubic
46{
47 skc_uint rem;
48 skc_float * coords[8];
49};
50
51//
52//
53//
54
55struct 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