1cb93a386Sopenharmony_ci/*
2cb93a386Sopenharmony_ci * Copyright 2018 Google Inc.
3cb93a386Sopenharmony_ci *
4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be
5cb93a386Sopenharmony_ci * found in the LICENSE file.
6cb93a386Sopenharmony_ci */
7cb93a386Sopenharmony_ci
8cb93a386Sopenharmony_cisyntax = "proto3";
9cb93a386Sopenharmony_ci
10cb93a386Sopenharmony_cipackage pvg;
11cb93a386Sopenharmony_ci
12cb93a386Sopenharmony_cienum ClipVerb {
13cb93a386Sopenharmony_ci    INTERSECT = 0;
14cb93a386Sopenharmony_ci    DIFFERENCE = 1;
15cb93a386Sopenharmony_ci}
16cb93a386Sopenharmony_ci
17cb93a386Sopenharmony_cimessage Point {
18cb93a386Sopenharmony_ci    float x = 1;
19cb93a386Sopenharmony_ci    float y = 2;
20cb93a386Sopenharmony_ci}
21cb93a386Sopenharmony_ci
22cb93a386Sopenharmony_cimessage Rect {
23cb93a386Sopenharmony_ci    float left = 1;
24cb93a386Sopenharmony_ci    float top = 2;
25cb93a386Sopenharmony_ci    float right = 3;
26cb93a386Sopenharmony_ci    float bottom = 4;
27cb93a386Sopenharmony_ci}
28cb93a386Sopenharmony_ci
29cb93a386Sopenharmony_cimessage Color {
30cb93a386Sopenharmony_ci    float r = 1;
31cb93a386Sopenharmony_ci    float g = 2;
32cb93a386Sopenharmony_ci    float b = 3;
33cb93a386Sopenharmony_ci    float a = 4;    // default to 1.0
34cb93a386Sopenharmony_ci}
35cb93a386Sopenharmony_ci
36cb93a386Sopenharmony_cimessage Matrix33 {
37cb93a386Sopenharmony_ci    // m11, m22, m33 default to 1.0
38cb93a386Sopenharmony_ci
39cb93a386Sopenharmony_ci    float m11 = 1; float m12 = 2; float m13 = 3;
40cb93a386Sopenharmony_ci    float m21 = 4; float m22 = 5; float m23 = 6;
41cb93a386Sopenharmony_ci    float m31 = 7; float m32 = 8; float m33 = 9;
42cb93a386Sopenharmony_ci}
43cb93a386Sopenharmony_ci
44cb93a386Sopenharmony_cimessage ClipArgs {
45cb93a386Sopenharmony_ci    ClipVerb    verb  = 1;
46cb93a386Sopenharmony_ci    bool        is_aliased = 2;
47cb93a386Sopenharmony_ci}
48cb93a386Sopenharmony_ci
49cb93a386Sopenharmony_ci////////////////////////////////////////////////
50cb93a386Sopenharmony_ci
51cb93a386Sopenharmony_cienum BlendMode {
52cb93a386Sopenharmony_ci    SRC_OVER    = 0;
53cb93a386Sopenharmony_ci    CLEAR       = 1;
54cb93a386Sopenharmony_ci    SRC         = 2;
55cb93a386Sopenharmony_ci    // ...
56cb93a386Sopenharmony_ci}
57cb93a386Sopenharmony_ci
58cb93a386Sopenharmony_cienum PaintStyle {
59cb93a386Sopenharmony_ci    FILL     = 0;
60cb93a386Sopenharmony_ci    STROKE   = 1;
61cb93a386Sopenharmony_ci    HAIRLINE = 2;
62cb93a386Sopenharmony_ci}
63cb93a386Sopenharmony_ci
64cb93a386Sopenharmony_cienum FilterQuality {
65cb93a386Sopenharmony_ci    NONE   = 0;
66cb93a386Sopenharmony_ci    LOW    = 1;
67cb93a386Sopenharmony_ci    MEDIUM = 2;
68cb93a386Sopenharmony_ci    HIGH   = 3;
69cb93a386Sopenharmony_ci}
70cb93a386Sopenharmony_ci
71cb93a386Sopenharmony_cimessage Paint {
72cb93a386Sopenharmony_ci    PaintStyle      style           = 1;
73cb93a386Sopenharmony_ci    FilterQuality   filter_quality  = 2;
74cb93a386Sopenharmony_ci    BlendMode       blend_mode      = 3;
75cb93a386Sopenharmony_ci    bool            is_aliased      = 4;
76cb93a386Sopenharmony_ci
77cb93a386Sopenharmony_ci    Color  color                    = 5;
78cb93a386Sopenharmony_ci
79cb93a386Sopenharmony_ci    int32  shader                   = 6;
80cb93a386Sopenharmony_ci    int32  color_filter             = 7;
81cb93a386Sopenharmony_ci    int32  mask_filter              = 8;
82cb93a386Sopenharmony_ci    int32  path_filter              = 9;
83cb93a386Sopenharmony_ci    int32  image_filter             = 10;
84cb93a386Sopenharmony_ci}
85cb93a386Sopenharmony_ci
86cb93a386Sopenharmony_ci////////////////////////////////////////////////
87cb93a386Sopenharmony_ci
88cb93a386Sopenharmony_cienum Hinting {
89cb93a386Sopenharmony_ci    NONE_Hinting    = 0;
90cb93a386Sopenharmony_ci    SLIGHT_Hinting  = 1;
91cb93a386Sopenharmony_ci    NORMAL_Hinting  = 2;
92cb93a386Sopenharmony_ci    FULL_Hinting    = 3;
93cb93a386Sopenharmony_ci}
94cb93a386Sopenharmony_ci
95cb93a386Sopenharmony_cimessage Font {
96cb93a386Sopenharmony_ci    int32   typeface = 1;
97cb93a386Sopenharmony_ci    float   size     = 2;
98cb93a386Sopenharmony_ci    float   scale_x  = 3;   // default = 1.0
99cb93a386Sopenharmony_ci    float   skew_x   = 4;
100cb93a386Sopenharmony_ci
101cb93a386Sopenharmony_ci    Hinting Hinting  = 5;
102cb93a386Sopenharmony_ci
103cb93a386Sopenharmony_ci    bool    force_autohinting   = 6;
104cb93a386Sopenharmony_ci    bool    embedded_bitmaps    = 7;
105cb93a386Sopenharmony_ci    bool    subpixel            = 8;
106cb93a386Sopenharmony_ci    bool    linear_metrics      = 9;
107cb93a386Sopenharmony_ci    bool    embolden            = 10;
108cb93a386Sopenharmony_ci}
109cb93a386Sopenharmony_ci
110cb93a386Sopenharmony_ci////////////////////////////////////////////////
111cb93a386Sopenharmony_ci
112cb93a386Sopenharmony_cienum PathVerb {
113cb93a386Sopenharmony_ci    MOVE  = 0;
114cb93a386Sopenharmony_ci    LINE  = 1;
115cb93a386Sopenharmony_ci    QUAD  = 2;
116cb93a386Sopenharmony_ci    CUBIC = 3;
117cb93a386Sopenharmony_ci    CONIC = 4;
118cb93a386Sopenharmony_ci}
119cb93a386Sopenharmony_ci
120cb93a386Sopenharmony_cimessage PathData {
121cb93a386Sopenharmony_ci    repeated PathVerb verbs         = 1;
122cb93a386Sopenharmony_ci    repeated float    points        = 2;    // count must be even, and correspond to verbs
123cb93a386Sopenharmony_ci    repeated float    conic_weights = 3;    // count must be == # conic verbs
124cb93a386Sopenharmony_ci}
125cb93a386Sopenharmony_ci
126cb93a386Sopenharmony_cimessage DefinePath {
127cb93a386Sopenharmony_ci    uint32   id   = 1;
128cb93a386Sopenharmony_ci    PathData data = 2;
129cb93a386Sopenharmony_ci}
130cb93a386Sopenharmony_ci
131cb93a386Sopenharmony_ci////////////////////////////////////////////////
132cb93a386Sopenharmony_ci
133cb93a386Sopenharmony_cimessage DefineImage {
134cb93a386Sopenharmony_ci    uint32  id           = 1;
135cb93a386Sopenharmony_ci    bytes   encoded_data = 2;
136cb93a386Sopenharmony_ci}
137cb93a386Sopenharmony_ci
138cb93a386Sopenharmony_ci////////////////////////////////////////////////
139cb93a386Sopenharmony_ci
140cb93a386Sopenharmony_cienum TileMode {
141cb93a386Sopenharmony_ci    CLAMP_TileMode  = 0;
142cb93a386Sopenharmony_ci    REPEAT_TileMode = 1;
143cb93a386Sopenharmony_ci    MIRROR_TileMode = 2;
144cb93a386Sopenharmony_ci    DECAL_TileMode  = 3;
145cb93a386Sopenharmony_ci}
146cb93a386Sopenharmony_ci
147cb93a386Sopenharmony_cimessage GradientCommon {
148cb93a386Sopenharmony_ci    repeated Color colors       = 1;
149cb93a386Sopenharmony_ci    repeated float positions    = 2;    // empty or count == colors.count
150cb93a386Sopenharmony_ci    Matrix33       local_matrix = 3;
151cb93a386Sopenharmony_ci    TileMode       tile_mode    = 4;
152cb93a386Sopenharmony_ci}
153cb93a386Sopenharmony_ci
154cb93a386Sopenharmony_cimessage LinearGradient {
155cb93a386Sopenharmony_ci    Point          p0     = 1;
156cb93a386Sopenharmony_ci    Point          p1     = 2;
157cb93a386Sopenharmony_ci    GradientCommon common = 3;
158cb93a386Sopenharmony_ci}
159cb93a386Sopenharmony_ci
160cb93a386Sopenharmony_cimessage RadialGradient {
161cb93a386Sopenharmony_ci    Point          center = 1;
162cb93a386Sopenharmony_ci    float          radius = 2;
163cb93a386Sopenharmony_ci    GradientCommon common = 3;
164cb93a386Sopenharmony_ci}
165cb93a386Sopenharmony_ci
166cb93a386Sopenharmony_cimessage ImageShader {
167cb93a386Sopenharmony_ci    uint32   image_id       = 1;
168cb93a386Sopenharmony_ci    TileMode tile_mode_x    = 2;
169cb93a386Sopenharmony_ci    TileMode tile_mode_y    = 3;
170cb93a386Sopenharmony_ci    Matrix33 local_matrix   = 4;
171cb93a386Sopenharmony_ci}
172cb93a386Sopenharmony_ci
173cb93a386Sopenharmony_cimessage DefineShader {
174cb93a386Sopenharmony_ci    uint32  id      = 1;
175cb93a386Sopenharmony_ci    oneof type {
176cb93a386Sopenharmony_ci        Color           color           = 2;
177cb93a386Sopenharmony_ci        LinearGradient  linear_gradient = 3;
178cb93a386Sopenharmony_ci        RadialGradient  radial_gradient = 4;
179cb93a386Sopenharmony_ci        ImageShader     image           = 5;
180cb93a386Sopenharmony_ci    }
181cb93a386Sopenharmony_ci}
182cb93a386Sopenharmony_ci
183cb93a386Sopenharmony_ci////////////////////////////////////////////////
184cb93a386Sopenharmony_ci
185cb93a386Sopenharmony_cimessage Save {}
186cb93a386Sopenharmony_ci
187cb93a386Sopenharmony_cimessage SaveLayer {
188cb93a386Sopenharmony_ci    Rect    bounds = 1;
189cb93a386Sopenharmony_ci    Paint   paint  = 2;
190cb93a386Sopenharmony_ci    // ...
191cb93a386Sopenharmony_ci}
192cb93a386Sopenharmony_ci
193cb93a386Sopenharmony_cimessage Restore {}
194cb93a386Sopenharmony_ci
195cb93a386Sopenharmony_cimessage Concat {
196cb93a386Sopenharmony_ci    Matrix33 matrix = 1;
197cb93a386Sopenharmony_ci}
198cb93a386Sopenharmony_ci
199cb93a386Sopenharmony_cimessage ClipRect {
200cb93a386Sopenharmony_ci    Rect     rect = 1;
201cb93a386Sopenharmony_ci    ClipArgs args = 2;
202cb93a386Sopenharmony_ci}
203cb93a386Sopenharmony_ci
204cb93a386Sopenharmony_cimessage ClipPath {
205cb93a386Sopenharmony_ci    oneof path {
206cb93a386Sopenharmony_ci        uint32   id   = 1;
207cb93a386Sopenharmony_ci        PathData data = 2;
208cb93a386Sopenharmony_ci    }
209cb93a386Sopenharmony_ci    ClipArgs args = 3;
210cb93a386Sopenharmony_ci}
211cb93a386Sopenharmony_ci
212cb93a386Sopenharmony_cimessage DrawPaint {
213cb93a386Sopenharmony_ci    Paint   paint = 1;
214cb93a386Sopenharmony_ci}
215cb93a386Sopenharmony_ci
216cb93a386Sopenharmony_cimessage DrawRect {
217cb93a386Sopenharmony_ci    Rect    rect    = 1;
218cb93a386Sopenharmony_ci    Paint   paint   = 2;
219cb93a386Sopenharmony_ci}
220cb93a386Sopenharmony_ci
221cb93a386Sopenharmony_cimessage DrawOval {
222cb93a386Sopenharmony_ci    Rect    oval    = 1;
223cb93a386Sopenharmony_ci    Paint   paint   = 2;
224cb93a386Sopenharmony_ci}
225cb93a386Sopenharmony_ci
226cb93a386Sopenharmony_cimessage DrawPath {
227cb93a386Sopenharmony_ci    oneof path {
228cb93a386Sopenharmony_ci        uint32   id   = 1;
229cb93a386Sopenharmony_ci        PathData data = 2;
230cb93a386Sopenharmony_ci    }
231cb93a386Sopenharmony_ci    Paint paint = 3;
232cb93a386Sopenharmony_ci}
233cb93a386Sopenharmony_ci
234cb93a386Sopenharmony_cimessage DrawImage {
235cb93a386Sopenharmony_ci    uint32  id    = 1;
236cb93a386Sopenharmony_ci    Paint   paint = 2;
237cb93a386Sopenharmony_ci}
238cb93a386Sopenharmony_ci
239cb93a386Sopenharmony_cimessage DrawText {
240cb93a386Sopenharmony_ci    repeated uint32 glyphs  = 1;    // uint16? bytes?
241cb93a386Sopenharmony_ci    repeated float  pos_x   = 2;    // must match counts with glyphs
242cb93a386Sopenharmony_ci    repeated float  pos_y   = 3;    // must match counts with glyphs OR have 1 entry
243cb93a386Sopenharmony_ci
244cb93a386Sopenharmony_ci    Font            font    = 4;
245cb93a386Sopenharmony_ci    Paint           paint   = 5;
246cb93a386Sopenharmony_ci}
247cb93a386Sopenharmony_ci
248cb93a386Sopenharmony_cimessage CanvasMsg {
249cb93a386Sopenharmony_ci    oneof msg {
250cb93a386Sopenharmony_ci        Save      save       = 1;
251cb93a386Sopenharmony_ci        SaveLayer save_layer = 2;
252cb93a386Sopenharmony_ci        Restore   restore    = 3;
253cb93a386Sopenharmony_ci
254cb93a386Sopenharmony_ci        Concat    concat     = 4;
255cb93a386Sopenharmony_ci
256cb93a386Sopenharmony_ci        ClipRect  clip_rect  = 5;
257cb93a386Sopenharmony_ci        ClipPath  clip_path  = 6;
258cb93a386Sopenharmony_ci
259cb93a386Sopenharmony_ci        DrawPaint draw_paint = 7;
260cb93a386Sopenharmony_ci        DrawRect  draw_rect  = 8;
261cb93a386Sopenharmony_ci        DrawOval  draw_oval  = 9;
262cb93a386Sopenharmony_ci        DrawPath  draw_path  = 10;
263cb93a386Sopenharmony_ci        DrawImage draw_image = 11;
264cb93a386Sopenharmony_ci        DrawText  draw_text  = 12;
265cb93a386Sopenharmony_ci
266cb93a386Sopenharmony_ci        DefineImage  def_image    = 13;
267cb93a386Sopenharmony_ci        DefinePath   def_path     = 14;
268cb93a386Sopenharmony_ci        DefineShader def_shader   = 15;
269cb93a386Sopenharmony_ci    }
270cb93a386Sopenharmony_ci}
271