/* * Copyright 2018 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ syntax = "proto3"; package pvg; enum ClipVerb { INTERSECT = 0; DIFFERENCE = 1; } message Point { float x = 1; float y = 2; } message Rect { float left = 1; float top = 2; float right = 3; float bottom = 4; } message Color { float r = 1; float g = 2; float b = 3; float a = 4; // default to 1.0 } message Matrix33 { // m11, m22, m33 default to 1.0 float m11 = 1; float m12 = 2; float m13 = 3; float m21 = 4; float m22 = 5; float m23 = 6; float m31 = 7; float m32 = 8; float m33 = 9; } message ClipArgs { ClipVerb verb = 1; bool is_aliased = 2; } //////////////////////////////////////////////// enum BlendMode { SRC_OVER = 0; CLEAR = 1; SRC = 2; // ... } enum PaintStyle { FILL = 0; STROKE = 1; HAIRLINE = 2; } enum FilterQuality { NONE = 0; LOW = 1; MEDIUM = 2; HIGH = 3; } message Paint { PaintStyle style = 1; FilterQuality filter_quality = 2; BlendMode blend_mode = 3; bool is_aliased = 4; Color color = 5; int32 shader = 6; int32 color_filter = 7; int32 mask_filter = 8; int32 path_filter = 9; int32 image_filter = 10; } //////////////////////////////////////////////// enum Hinting { NONE_Hinting = 0; SLIGHT_Hinting = 1; NORMAL_Hinting = 2; FULL_Hinting = 3; } message Font { int32 typeface = 1; float size = 2; float scale_x = 3; // default = 1.0 float skew_x = 4; Hinting Hinting = 5; bool force_autohinting = 6; bool embedded_bitmaps = 7; bool subpixel = 8; bool linear_metrics = 9; bool embolden = 10; } //////////////////////////////////////////////// enum PathVerb { MOVE = 0; LINE = 1; QUAD = 2; CUBIC = 3; CONIC = 4; } message PathData { repeated PathVerb verbs = 1; repeated float points = 2; // count must be even, and correspond to verbs repeated float conic_weights = 3; // count must be == # conic verbs } message DefinePath { uint32 id = 1; PathData data = 2; } //////////////////////////////////////////////// message DefineImage { uint32 id = 1; bytes encoded_data = 2; } //////////////////////////////////////////////// enum TileMode { CLAMP_TileMode = 0; REPEAT_TileMode = 1; MIRROR_TileMode = 2; DECAL_TileMode = 3; } message GradientCommon { repeated Color colors = 1; repeated float positions = 2; // empty or count == colors.count Matrix33 local_matrix = 3; TileMode tile_mode = 4; } message LinearGradient { Point p0 = 1; Point p1 = 2; GradientCommon common = 3; } message RadialGradient { Point center = 1; float radius = 2; GradientCommon common = 3; } message ImageShader { uint32 image_id = 1; TileMode tile_mode_x = 2; TileMode tile_mode_y = 3; Matrix33 local_matrix = 4; } message DefineShader { uint32 id = 1; oneof type { Color color = 2; LinearGradient linear_gradient = 3; RadialGradient radial_gradient = 4; ImageShader image = 5; } } //////////////////////////////////////////////// message Save {} message SaveLayer { Rect bounds = 1; Paint paint = 2; // ... } message Restore {} message Concat { Matrix33 matrix = 1; } message ClipRect { Rect rect = 1; ClipArgs args = 2; } message ClipPath { oneof path { uint32 id = 1; PathData data = 2; } ClipArgs args = 3; } message DrawPaint { Paint paint = 1; } message DrawRect { Rect rect = 1; Paint paint = 2; } message DrawOval { Rect oval = 1; Paint paint = 2; } message DrawPath { oneof path { uint32 id = 1; PathData data = 2; } Paint paint = 3; } message DrawImage { uint32 id = 1; Paint paint = 2; } message DrawText { repeated uint32 glyphs = 1; // uint16? bytes? repeated float pos_x = 2; // must match counts with glyphs repeated float pos_y = 3; // must match counts with glyphs OR have 1 entry Font font = 4; Paint paint = 5; } message CanvasMsg { oneof msg { Save save = 1; SaveLayer save_layer = 2; Restore restore = 3; Concat concat = 4; ClipRect clip_rect = 5; ClipPath clip_path = 6; DrawPaint draw_paint = 7; DrawRect draw_rect = 8; DrawOval draw_oval = 9; DrawPath draw_path = 10; DrawImage draw_image = 11; DrawText draw_text = 12; DefineImage def_image = 13; DefinePath def_path = 14; DefineShader def_shader = 15; } }