blob: a495618439c9669215eb7f6d71f87c5c681fdf60 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Contains the input used by filter_proto_converter to create a valid flattened
// skia image filter. These messages were made using CreateProc and flatten
// methods in mind so that a valid flattenable is produced. Many of the enums
// here are copied from skia. Most of the messages are straightforward, but
// there are a few things worth noting here. First is that many fields can be
// written to the flattenable output as-is (such as the fields x,y and z in
// Point3). And sometimes entire messages such as Point3 are written
// as-is. These Message and fields can be what we call "autovisited". For fields
// it means that they can be handled by the WriteFields method in
// filter_proto_converter.cc. For messages it means they can be handled by
// WriteFields and the generic Visit function (void Converter::Visit(const
// Message& msg)) and do not need their own specific code. In this file, we will
// put a comment "Autovisit:" before fields or messages that can be autovisited.
// A second thing to know is the parent and child pattern we use here. In many
// cases we need to specify one type of some kind of skia flattenable, like one
// ColorFilter. To do this we create a message $CONCEPT + "Child" (eg
// ColorFilterChild) that contains oneof these subtypes. In many cases these
// subtypes (or children) will share things in common with each other. To avoid
// re-implementing the same thing dozens of times, we give these children a
// field called parent, that when Visited handles this common functionality. One
// important exception to this general pattern is the LightParent message which
// contains its own children, rather than the usual practice (which is the other
// way around). That was done because the order in which the common
// functionality must be done is different than in other cases (here it must
// happen after the child functionality is handled, not before as in the other
// cases). Finally, the last thing to know is because protobuf doesn't have a
// good way to specify an array of a certain length so this functionality is
// implemented by defining a message containing required fields representing
// each element in the array (eg OverdrawColorFilter).
syntax = "proto2";
package skia_image_filter_proto_converter;
// Used for testcases.
message Input {
required ImageFilterChild image_filter = 1;
required uint64 rng_seed = 2;
}
// No content when flattened.
message LumaColorFilter {}
message OverdrawColorFilter {
// Autovisit:
required uint32 val1 = 1;
required uint32 val2 = 2;
required uint32 val3 = 3;
required uint32 val4 = 4;
required uint32 val5 = 5;
required uint32 val6 = 6;
}
message ColorFilterChild {
oneof children {
ModeColorFilter mode_color_filter = 1;
ColorMatrixFilterRowMajor255 color_matrix_filter_row_major_255 = 2;
ComposeColorFilter compose_color_filter = 3;
SRGBGammaColorFilter srgb_gamma_color_filter = 4;
HighContrast_Filter high_contrast__filter = 5;
LumaColorFilter luma_color_filter = 6;
OverdrawColorFilter overdraw_color_filter = 7;
Table_ColorFilter table__color_filter = 8;
ToSRGBColorFilter to_srgb_color_filter = 9;
}
}
message TransferFn {
required Named named = 1;
required float a = 2;
required float b = 3;
required float c = 4;
required float d = 5;
required float e = 6;
required float f = 7;
required float g = 8;
required ThreeByFour three_by_four = 9;
}
enum Named {
kSRGB_Named = 0;
kAdobeRGB_Named = 1;
kSRGBLinear_Named = 2;
kSRGB_NonLinearBlending_Named = 3;
}
message ColorSpace_XYZ {
enum GammaNamed {
kLinear_SkGammaNamed = 0;
kSRGB_SkGammaNamed = 1;
k2Dot2Curve_SkGammaNamed = 2;
}
required GammaNamed gamma_named = 1;
required ThreeByFour three_by_four = 2;
}
message ColorSpaceNamed {
enum ColorSpaceNamedEnum {
kAdobeRGB_Named = 1;
kSRGBLinear_Named = 2;
}
required ColorSpaceNamedEnum named = 1;
required GammaNamed gamma_named = 2;
}
message ColorSpaceChild {
oneof data {
ICC icc = 1;
TransferFn transfer_fn = 2;
ColorSpace_XYZ color_space__xyz = 3;
}
required ColorSpaceNamed named = 4;
}
message ToSRGBColorFilter {
required ColorSpaceChild color_space = 1;
}
message ColorTable {
required float val1 = 1;
required float val2 = 2;
required float val3 = 3;
required float val4 = 4;
required float val5 = 5;
required float val6 = 6;
required float val7 = 7;
required float val8 = 8;
required float val9 = 9;
required float val10 = 10;
required float val11 = 11;
required float val12 = 12;
required float val13 = 13;
required float val14 = 14;
required float val15 = 15;
required float val16 = 16;
required float val17 = 17;
required float val18 = 18;
required float val19 = 19;
required float val20 = 20;
required float val21 = 21;
required float val22 = 22;
required float val23 = 23;
required float val24 = 24;
required float val25 = 25;
required float val26 = 26;
required float val27 = 27;
required float val28 = 28;
required float val29 = 29;
required float val30 = 30;
required float val31 = 31;
required float val32 = 32;
required float val33 = 33;
required float val34 = 34;
required float val35 = 35;
required float val36 = 36;
required float val37 = 37;
required float val38 = 38;
required float val39 = 39;
required float val40 = 40;
required float val41 = 41;
required float val42 = 42;
required float val43 = 43;
required float val44 = 44;
required float val45 = 45;
required float val46 = 46;
required float val47 = 47;
required float val48 = 48;
required float val49 = 49;
required float val50 = 50;
required float val51 = 51;
required float val52 = 52;
required float val53 = 53;
required float val54 = 54;
required float val55 = 55;
required float val56 = 56;
required float val57 = 57;
required float val58 = 58;
required float val59 = 59;
required float val60 = 60;
required float val61 = 61;
required float val62 = 62;
required float val63 = 63;
required float val64 = 64;
}
message Table_ColorFilter {
optional ColorTable table_a = 1;
optional ColorTable table_r = 2;
optional ColorTable table_g = 3;
optional ColorTable table_b = 4;
}
// See SkHighContrastFilter.cpp
message HighContrast_Filter {
enum InvertStyle {
kNoInvert = 0;
kInvertBrightness = 1;
kInvertLightness = 2;
}
required bool grayscale = 1;
required InvertStyle invert_style = 2;
// Autovisit up to here
required float contrast = 3;
}
// Autovisit:
message SRGBGammaColorFilter {
enum Direction {
kLinearToSRGB = 0;
kSRGBToLinear = 1;
}
required Direction direction = 1;
}
message ComposeColorFilter {
required ColorFilterChild outer = 1;
required ColorFilterChild inner = 2;
}
message ColorFilterMatrix {
// Autovisit:
required float val1 = 1;
required float val2 = 2;
required float val3 = 3;
required float val4 = 4;
required float val5 = 5;
required float val6 = 6;
required float val7 = 7;
required float val8 = 8;
required float val9 = 9;
required float val10 = 10;
required float val11 = 11;
required float val12 = 12;
required float val13 = 13;
required float val14 = 14;
required float val15 = 15;
required float val16 = 16;
required float val17 = 17;
required float val18 = 18;
required float val19 = 19;
required float val20 = 20;
}
// See SkColorMatrixFilterRowMajor255.cpp (https://goo.gl/qwF8DK)
message ColorMatrixFilterRowMajor255 {
// Autovisit:
required ColorFilterMatrix color_filter_matrix = 1;
}
message ModeColorFilter {
required uint32 color = 1;
required BlendMode mode = 2;
}
message Rectangle {
required float left = 1;
required float top = 2;
required float right = 3;
required float bottom = 4;
}
message IRect {
required int32 left = 1;
required int32 top = 2;
required int32 right = 3;
required int32 bottom = 4;
}
message CropRectangle {
required Rectangle rectangle = 1;
required uint32 flags = 2;
}
message PictureInfo {
// TODO(metzman): Figure out how to keep this up to date.
enum Version {
V0 = 56;
V1 = 57;
V2 = 58;
V3 = 59;
kRemoveHeaderFlags_Version = 60;
V4 = 61;
}
required Version version = 1;
required Rectangle rectangle = 2;
required uint32 flags = 3;
}
message PictureData {
// SkPictureData.cpp (https://goo.gl/hDnKjz)
repeated PictureTagChild tags = 1;
required ReaderPictureTag reader_tag = 2;
}
enum BlendMode {
kClear = 0;
kSrc = 1;
kDst = 2;
// TODO(metzman): Uncomment this when bug 786133 is fixed.
// kSrcOver = 3;
kDstOver = 4;
kSrcIn = 5;
kDstIn = 6;
kSrcOut = 7;
kDstOut = 8;
kSrcATop = 9;
kDstATop = 10;
kXor = 11;
kPlus = 12;
kModulate = 13;
kScreenAndLastCoeffMode = 14;
kOverlay = 15;
kDarken = 16;
kLighten = 17;
kColorDodge = 18;
kColorBurn = 19;
kHardLight = 20;
kSoftLight = 21;
kDifference = 22;
kExclusion = 23;
kLastSeparableModeAndMultiply = 24;
kHue = 25;
kSaturation = 26;
kColor = 27;
kLuminosity = 28;
}
message Paint {
required float text_size = 1;
required float text_scale_x = 2;
required float text_skew_x = 3;
required float stroke_width = 4;
required float stroke_miter = 5;
required uint32 color = 6;
// Autovisit up to here
enum TextEncoding {
kUTF8_TextEncoding = 0;
kUTF16_TextEncoding = 1;
kUTF32_TextEncoding = 2;
kGlyphID_TextEncoding = 3;
}
enum Style {
kFill_Style = 0;
kStroke_Style = 1;
kStrokeAndFill_Style = 2;
}
enum StrokeCap {
kButt_Cap = 0;
kRound_Cap = 1;
kSquare_Cap = 2;
}
enum StrokeJoin {
kMiter_Join = 0;
kRound_Join = 1;
kBevel_Join = 2;
}
required StrokeCap stroke_cap = 7;
required StrokeJoin stroke_join = 8;
required Style style = 9;
required TextEncoding text_encoding = 10;
required BlendMode blend_mode = 11;
optional PaintEffects effects = 12;
enum PaintFlags {
kAntiAlias_Flag = 0x01;
kDither_Flag = 0x04;
kFakeBoldText_Flag = 0x20;
kLinearText_Flag = 0x40;
kSubpixelText_Flag = 0x80;
kDevKernText_Flag = 0x100;
kLCDRenderText_Flag = 0x200;
kEmbeddedBitmapText_Flag = 0x400;
kAutoHinting_Flag = 0x800;
kVerticalText_Flag = 0x1000;
kGenA8FromLCD_Flag = 0x2000;
kAllFlags = 0xFFFF;
}
enum Hinting {
kNo_Hinting = 0;
kSlight_Hinting = 1;
kNormal_Hinting = 2;
kFull_Hinting = 3;
}
enum Align {
kLeft_Align = 0;
kCenter_Align = 1;
kRight_Align = 2;
}
// Stuff that gets packed into flags.
required PaintFlags flags = 13;
required Hinting hinting = 14;
required Align align = 15;
required FilterQuality filter_quality = 16;
}
message Point {
required float x = 1;
required float y = 2;
}
message PathEffectChild {
oneof children {
PairPathEffect pair_path_effect = 1;
Path2DPathEffect path_2d_path_effect = 2;
Line2DPathEffect line_2d_path_effect = 3;
CornerPathEffect corner_path_effect = 4;
DashImpl dash_impl = 5;
DiscretePathEffect discrete_path_effect = 6;
Path1DPathEffect path_1d_path_effect = 7;
}
}
// Autovisit:
message CornerPathEffect {
// 0 is a very bad choice for radius, so make field optional with a default of
// 1.
optional float radius = 1 [default = 1];
}
message Path2DPathEffect {
required Matrix matrix = 1;
required Path path = 2;
}
message Line2DPathEffect {
required Matrix matrix = 1;
required float width = 2;
}
message DashImpl {
required float phase = 1;
required float interval_1 = 2;
required float interval_2 = 3;
repeated float intervals = 4;
}
// Autovisit:
message DiscretePathEffect {
required float seg_length = 1;
required float perterb = 2;
required uint32 seed_assist = 3;
}
message Path1DPathEffect {
enum Style {
kTranslate_Style = 0;
kRotate_Style = 1;
kMorph_Style = 2;
}
required float advance = 1;
required Path path = 2;
required float initial_offset = 3;
required Style style = 4;
}
message Path {
enum Convexity {
kUnknown_Convexity = 0;
kConvex_Convexity = 1;
kConcave_Convexity = 2;
}
enum FirstDirection {
kCW_FirstDirection = 0;
kCCW_FirstDirection = 1;
kUnknown_FirstDirection = 2;
}
enum SerializationVersion {
kPathPrivFirstDirection_Version = 1;
kPathPrivLastMoveToIndex_Version = 2;
kPathPrivTypeEnumVersion = 3;
}
required Convexity convexity = 1;
required uint32 fill_type = 2; // Should be 8 bytes
required FirstDirection first_direction = 3;
required bool is_volatile = 4;
required SerializationVersion serialized_version = 5;
required int32 last_move_to_index = 6;
required PathRef path_ref = 7;
}
message ValidVerb {
enum Value {
kMove_Verb = 0;
kLine_Verb = 1;
kQuad_Verb = 2;
kConic_Verb = 3;
kCubic_Verb = 4;
kClose_Verb = 5;
// We don't actually want kDone_Verb.
}
required Value value = 1;
required Point point1 = 2;
required Point point2 = 3;
required Point point3 = 4;
required float conic_weight = 5;
}
message PathRef {
repeated ValidVerb verbs = 1;
required bool is_finite = 2;
required uint32 segment_mask = 3;
required ValidVerb first_verb = 4;
}
message PairPathEffect {
enum Type {
SUM = 1;
COMPOSE = 2;
}
required Type type = 1;
required PathEffectChild path_effect_1 = 2;
required PathEffectChild path_effect_2 = 3;
}
message ShaderChild {
oneof children {
ColorShader color_shader = 1;
Color4Shader color_4_shader = 2;
ColorFilterShader color_filter_shader = 3;
ComposeShader compose_shader = 4;
EmptyShader empty_shader = 5;
ImageShader image_shader = 6;
PictureShader picture_shader = 7;
PerlinNoiseShaderImpl perlin_noise_shader_impl = 8;
LocalMatrixShader local_matrix_shader = 9;
LinearGradient linear_gradient = 10;
RadialGradient radial_gradient = 11;
SweepGradient sweep_gradient = 12;
TwoPointConicalGradient two_point_conical_gradient = 13;
}
}
message TwoPointConicalGradient {
required GradientParent parent = 1;
// Autovisit:
required Point center1 = 2;
required Point center2 = 3;
required float radius1 = 4;
required float radius2 = 5;
}
message SweepGradient {
required GradientParent parent = 1;
// Autovisit:
required Point center = 2;
// TODO(metzman): Handle case when buffer.fVersion >=
// kTileInfoInSweepGradient_Version or fVersion != 0.
required float bias = 3;
required float scale = 4;
}
message RadialGradient {
required GradientParent parent = 1;
// Autovisit:
required Point center = 2;
required float radius = 3;
}
message Color4f {
// Autovisit:
required float r = 1;
required float g = 2;
required float b = 3;
required float a = 4;
}
// Note that this cannot be named "Descriptor" since that name is used by
// protobuf's reflection methods
message GradientDescriptor {
optional ColorSpaceChild color_space = 1;
optional float pos = 2;
optional Matrix local_matrix = 3;
required TileMode tile_mode = 4;
required uint32 grad_flags = 5; // <= UINT8_MAX
repeated Color4f colors = 6;
}
// Contained by children
message GradientParent {
required GradientDescriptor gradient_descriptor = 1;
}
message LinearGradient {
required GradientParent parent = 1;
// Autovisit:
required Point start = 2;
required Point end = 3;
}
message LocalMatrixShader {
required Matrix matrix = 1;
required ShaderChild proxy_shader = 2;
}
// Autovisit:
message PerlinNoiseShaderImpl {
enum Type {
kFractalNoise_Type = 0;
kTurbulence_Type = 1;
kImprovedNoise_Type = 2;
}
required Type type = 1;
required float base_frequency_x = 2;
required float base_frequency_y = 3;
required int32 octaves = 4;
required float seed = 5;
required int32 height = 6;
required int32 width = 7;
}
message PictureShader {
required Matrix matrix = 1;
// Autovisit:
required TileMode tmx = 2;
required TileMode tmy = 3;
required Rectangle rect = 4;
}
enum TileMode {
kClamp_TileMode = 0;
kRepeat_TileMode = 1;
kMirror_TileMode = 2;
}
// Autovisit:
message ImageShader {
required TileMode tile_mode_x = 1;
required TileMode tile_mode_y = 2;
required Matrix matrix = 3;
required Image image = 4;
}
message ImageInfo {
enum AlphaType {
kUnknown_SkAlphaType = 0;
kOpaque_SkAlphaType = 1;
kPremul_SkAlphaType = 2;
kUnpremul_SkAlphaType = 3;
}
enum ColorType {
kUnknown_Stored_SkColorType = 0;
kAlpha_8_Stored_SkColorType = 1;
kRGB_565_Stored_SkColorType = 2;
kARGB_4444_Stored_SkColorType = 3;
kRGBA_8888_Stored_SkColorType = 4;
kBGRA_8888_Stored_SkColorType = 5;
kIndex_8_Stored_SkColorType_DEPRECATED = 6;
kGray_8_Stored_SkColorType = 7;
kRGBA_F16_Stored_SkColorType = 8;
}
required int32 width = 1;
required int32 height = 2;
required AlphaType alpha_type = 3;
required ColorType color_type = 4;
required ColorSpaceChild color_space = 5;
}
message ImageData {
repeated uint32 data = 1;
}
// TODO(metzman): Finish implementing using ImageInfo.
message Image {
// Must be non-negative.
required int32 width = 1;
required int32 height = 2;
required ImageData data = 3;
// Must be nonnegative.
required int32 origin_x = 4;
required int32 origin_y = 5;
}
// Autovisit:
message EmptyShader {}
message ComposeShader {
required ShaderChild dst = 1;
required ShaderChild src = 2;
// Autovisit:
required BlendMode mode = 3;
required float lerp_t = 4;
}
message ColorFilterShader {
required ShaderChild shader = 1;
required ColorFilterChild filter = 2;
}
message Color4Shader {
required uint32 color = 1;
}
// Autovisit:
message ColorShader {
required uint32 color = 1;
}
message LooperChild {
required LayerDrawLooper layer_draw_looper = 1;
}
message LayerDrawLooper {
repeated LayerInfo layer_infos = 1;
}
message LayerInfo {
required int32 paint_bits = 1;
required BlendMode color_mode = 2;
required Point point = 3;
required bool post_translate = 4;
// Autovisit up to here
required Paint paint = 5;
}
message MaskFilterChild {
oneof children {
BlurMaskFilter blur_mask_filter_impl = 1;
EmbossMaskFilter emboss_mask_filter = 2;
}
}
message EmbossMaskFilterLight {
required float direction_x = 1;
required float direction_y = 2;
required float direction_z = 3;
required uint32 ambient = 4;
required uint32 specular = 5;
}
message EmbossMaskFilter {
required EmbossMaskFilterLight light = 1;
required float blur_sigma = 2;
}
enum BlurStyle {
kNormal_SkBlurStyle = 0;
kSolid_SkBlurStyle = 1;
kOuter_SkBlurStyle = 2;
kInner_SkBlurStyle = 3;
}
// Copied from https://goo.gl/Yy5Euw
enum BlurFlags {
kNone_BlurFlag = 0x00;
kIgnoreTransform_BlurFlag = 0x01;
kHighQuality_BlurFlag = 0x02;
kAll_BlurFlag = 0x03;
}
message BlurMaskFilter {
required float sigma = 1;
required BlurStyle style = 2;
required BlurFlags flags = 3;
required Rectangle occluder = 4;
}
message PaintEffects {
optional PathEffectChild path_effect = 1;
optional ShaderChild shader = 2;
optional MaskFilterChild mask_filter = 3;
optional ColorFilterChild color_filter = 4;
optional LooperChild looper = 5;
optional ImageFilterChild image_filter = 6;
}
message RecordingData {
repeated Paint paints = 1;
}
message PaintImageFilter {
required ImageFilterParent image_filter_parent = 1;
required Paint paint = 2;
}
message PictureTagChild {
oneof children {
PaintPictureTag paint = 1;
PathPictureTag path = 2;
Image image = 3;
Vertices vertices = 4;
TextBlob text_blob = 5;
}
}
message TextBlob {
required Rectangle bounds = 1;
enum GlyphPositioning {
kDefault_Positioning = 0;
kHorizontal_Positioning = 1;
kFull_Positioning = 2;
}
required GlyphPositioning glyph_positioning = 2;
required bool extended = 3;
required Point offset = 4;
required Paint paint = 5;
required GlyphAndPosAndCluster glyph_pos_cluster_1 = 6;
required GlyphAndPosAndCluster glyph_pos_cluster_2 = 7;
repeated GlyphAndPosAndCluster glyph_pos_clusters = 8;
repeated uint32 text = 9;
}
message GlyphAndPosAndCluster {
required uint32 glyph = 1;
required float position_1 = 2;
required float position_2 = 3;
required uint32 cluster = 4;
}
message Vertices {
enum VertexMode {
kTriangles_VertexMode = 0;
kTriangleStrip_VertexMode = 1;
kTriangleFan_VertexMode = 2;
}
required VertexMode mode = 1;
required bool has_texs = 2;
required bool has_colors = 3;
repeated VertexTexColor vertex_text_colors = 4;
repeated uint32 indices = 5;
}
message VertexTexColor {
required Point vertex = 1;
required Point tex = 2;
required Point color = 3;
}
message ReaderPictureTag {
required uint32 first_bytes = 1;
repeated uint32 later_bytes = 2;
}
message PaintPictureTag {
required Paint paint = 1;
}
message PathPictureTag {
required Path path = 1;
}
message Picture {
required PictureInfo info = 1;
optional PictureData data = 2;
}
// Copied with comments from skia.
// Enums in C++ that don't have set values start at 0.
enum FilterQuality {
// fastest but lowest quality, typically nearest-neighbor
kNone_SkFilterQuality = 0;
kLow_SkFilterQuality = 1; // typically bilerp
kMedium_SkFilterQuality = 2; // typically bilerp + mipmaps for down-scaling
// slowest but highest quality, typically bicubic or better
kHigh_SkFilterQuality = 3;
}
message PictureImageFilter {
enum PictureResolution {
kDeviceSpace_PictureResolution = 0;
kLocalSpace_PictureResolution = 1;
}
optional Picture picture = 1;
required Rectangle crop_rectangle = 2;
required PictureResolution resolution = 3;
}
message Matrix {
required float val1 = 1;
required float val2 = 2;
required float val3 = 3;
required float val4 = 4;
required float val5 = 5;
required float val6 = 6;
required float val7 = 7;
required float val8 = 8;
required float val9 = 9;
}
message MatrixImageFilter {
required ImageFilterParent image_filter_parent = 1;
required Matrix transform = 2;
required FilterQuality filter_quality = 3;
}
message ImageFilterChild {
oneof children {
PaintImageFilter paint_image_filter = 1;
MatrixImageFilter matrix_image_filter = 2;
SpecularLightingImageFilter specular_lighting_image_filter = 3;
ArithmeticImageFilter arithmetic_image_filter = 4;
AlphaThresholdFilterImpl alpha_threshold_filter_impl = 5;
BlurImageFilterImpl blur_image_filter_impl = 6;
ColorFilterImageFilter color_filter_image_filter = 7;
ComposeImageFilter compose_image_filter = 8;
DisplacementMapEffect displacement_map_effect = 9;
DropShadowImageFilter drop_shadow_image_filter = 10;
LocalMatrixImageFilter local_matrix_image_filter = 11;
MagnifierImageFilter magnifier_image_filter = 13;
MatrixConvolutionImageFilter matrix_convolution_image_filter = 14;
MergeImageFilter merge_image_filter = 15;
DilateImageFilter dilate_image_filter = 16;
ErodeImageFilter erode_image_filter = 17;
OffsetImageFilter offset_image_filter = 18;
PictureImageFilter picture_image_filter = 19;
TileImageFilter tile_image_filter = 20;
XfermodeImageFilter_Base xfermode_image_filter__base = 21;
XfermodeImageFilter xfermode_image_filter = 22;
DiffuseLightingImageFilter diffuse_lighting_image_filter = 23;
ImageSource image_source = 24;
}
}
message DiffuseLightingImageFilter {
required ImageFilterParent parent = 1;
required LightParent light = 2;
required float surface_scale = 3;
required float kd = 4;
}
message XfermodeImageFilter {
required ImageFilterParent parent = 1;
required BlendMode mode = 2;
}
message XfermodeImageFilter_Base {
required ImageFilterParent parent = 1;
required BlendMode mode = 2;
}
message TileImageFilter {
required ImageFilterParent parent = 1;
required Rectangle src = 2;
required Rectangle dst = 3;
}
message OffsetImageFilter {
required ImageFilterParent parent = 1;
required Point offset = 2;
}
message ErodeImageFilter {
required ImageFilterParent parent = 1;
required int32 width = 2;
required int32 height = 3;
}
message DilateImageFilter {
required ImageFilterParent parent = 1;
required int32 width = 2;
required int32 height = 3;
}
message MergeImageFilter {
required ImageFilterParent parent = 1;
}
message MatrixConvolutionImageFilter {
required ImageFilterParent parent = 1;
required int32 width = 2;
required int32 height = 3;
// Since we can't specify a field of repeated bytes that is width*height, use
// a kernel_seed to seed a RNG to get the number of bytes we need.
required int64 kernel_seed = 4;
required float gain = 5;
required float bias = 6;
required int32 offset_x = 7;
required int32 offset_y = 8;
required TileMode tile_mode = 9;
required bool convolve_alpha = 10;
}
message MagnifierImageFilter {
required ImageFilterParent parent = 1;
required Rectangle src = 2;
required float inset = 3;
}
message LocalMatrixImageFilter {
required ImageFilterParent parent = 1;
required Matrix matrix = 2;
}
message ImageSource {
required FilterQuality filter_quality = 1;
required Rectangle src = 2;
required Rectangle dst = 3;
// / Autovisit
required Image image = 4;
}
message DropShadowImageFilter {
enum ShadowMode {
kDrawShadowAndForeground_ShadowMode = 0;
kDrawShadowOnly_ShadowMode = 1;
kDrawShadowOnly_ShadowMod = 2;
}
required ImageFilterParent parent = 1;
// Autovisit:
required float dx = 2;
required float dy = 3;
required float sigma_x = 4;
required float sigma_y = 5;
required uint32 color = 6;
required ShadowMode shadow_mode = 7;
}
message DisplacementMapEffect {
enum ChannelSelectorType {
kUnknown_ChannelSelectorType = 0;
kR_ChannelSelectorType = 1;
kG_ChannelSelectorType = 2;
kB_ChannelSelectorType = 3;
kA_ChannelSelectorTyp = 4;
}
required ImageFilterParent parent = 1;
// Autovisit:
required ChannelSelectorType xsel = 2;
required ChannelSelectorType ysel = 3;
required float scale = 4;
}
message ComposeImageFilter {
required ImageFilterParent parent = 1;
}
message ColorFilterImageFilter {
required ImageFilterParent parent = 1;
required ColorFilterChild color_filter = 2;
}
message BlurImageFilterImpl {
required ImageFilterParent parent = 1;
required float sigma_x = 2;
required float sigma_y = 3;
required TileMode mode = 4;
}
message AlphaThresholdFilterImpl {
required ImageFilterParent parent = 1;
required float inner = 2;
required float outer = 3;
required Region rgn = 4;
}
message Region {
required IRect bounds = 1;
// TODO(metzman): Properly implement complex regions.
}
message RegionComplex {
required int32 y_span_count = 1;
required int32 interval_count = 2;
repeated int32 run_seed = 3;
}
message ArithmeticImageFilter {
required ImageFilterParent parent = 1;
// Ignored see SkXfermodeImageFilter_Base::LegacyArithmeticCreateProc.
// Converter will write a mode even without a corresponding field.
// required BlendMode mode = 2;
// Autovisit:
required float val1 = 2;
required float val2 = 3;
required float val3 = 4;
required float val4 = 5;
required bool enforce_pm_color = 6;
}
// Contained by children
message ImageFilterParent {
required ImageFilterChild default_input = 1;
repeated ImageFilterChild inputs = 2;
required CropRectangle crop_rectangle = 3;
}
// Autovisit:
message Point3 {
required float x = 1;
required float y = 2;
required float z = 3;
}
// Contains children
message LightParent {
required Point3 color = 1;
required LightChild light_child = 2;
}
// Autovisit:
message DistantLight {
required Point3 direction = 1;
}
// Autovisit:
message PointLight {
required Point3 location = 1;
}
// See SkLightingImageFilter.cpp
// Autovisit:
message SpotLight {
required Point3 location = 1;
required Point3 target = 2;
required float specular_exponent = 3;
required float cos_outer_cone_angle = 4;
required float cos_inner_cone_angle = 5;
required float cone_scale = 6;
required Point3 s = 7;
}
message LightChild {
oneof children {
PointLight point_light = 1;
SpotLight spot_light = 2;
}
required DistantLight distant_light = 3;
}
message SpecularLightingImageFilter {
required ImageFilterParent image_filter_parent = 1;
required LightParent light = 2;
required float surface_scale = 3;
required float ks = 4;
required float shininess = 5;
}
enum GammaNamed {
kLinear_SkGammaNamed = 0;
kSRGB_SkGammaNamed = 1;
k2Dot2Curve_SkGammaNamed = 2;
kNonStandard_SkGammaNamed = 3;
}
message ThreeByFour {
required float val1 = 1;
required float val2 = 2;
required float val3 = 3;
required float val4 = 4;
required float val5 = 5;
required float val6 = 6;
required float val7 = 7;
required float val8 = 8;
required float val9 = 9;
required float val10 = 10;
required float val11 = 11;
required float val12 = 12;
}
enum ICCTag {
kTAG_rXYZ = 0;
kTAG_gXYZ = 1;
kTAG_bXYZ = 2;
kTAG_rTRC = 3;
kTAG_gTRC = 4;
kTAG_bTRC = 5;
kTAG_kTRC = 6;
kTAG_A2B0 = 7;
kTAG_CurveType = 8;
kTAG_ParaCurveType = 9;
kTAG_TextType = 10;
}
// This contains a lot of commented out fields since they are in the actual
// struct this message represents, but are unused. We don't define them and
// WriteIgnoredFields is used to write them rather than wasting LPM's time
// setting them. However, we leave them here commented out for reference, and
// we don't use their numbers in case we use them in the future.
message ICC {
enum Profile {
Display_Profile = 0;
Input_Profile = 1;
Output_Profile = 2;
ColorSpace_Profile = 3;
}
enum InputColorSpace {
RGB_ColorSpace = 0;
CMYK_ColorSpace = 1;
Gray_ColorSpace = 2;
}
enum PCS {
kXYZ_PCSSpace = 0;
kLAB_PCSSpace = 1;
}
enum RenderingIntent {
kPerceptual = 0;
kRelative = 1;
kSaturation = 2;
kAbsolute = 3;
}
required Named named = 34;
// required uint32 size = 1; // Always 132.
// required uint32 cmm_type_ignored = 2;
required uint32 version = 3;
required Profile profile_class = 4;
required InputColorSpace input_color_space = 5;
required PCS pcs = 6;
// required uint32 datetime_ignored_1 = 7;
// required uint32 datetime_ignored_2 = 8;
// required uint32 datetime_ignored_3 = 9;
// Always SkSetFourByteTag('a', 'c', 's', 'p')
// required uint32 signature = 10;
// required uint32 platform_target_ignored = 11;
// required uint32 flags_ignored = 12;
// required uint32 device_manufacturer_ignored = 13;
// required uint32 device_model_ignored = 14;
// required uint32 device_attributes_ignored_1 = 15;
// required uint32 device_attributes_ignored_2 = 16;
required RenderingIntent rendering_intent = 17;
required int32 illuminant_x = 18;
required int32 illuminant_y = 19;
required int32 illuminant_z = 20;
// required uint32 creator_ignored = 21;
// required uint32 profileid_ignored_1 = 22;
// required uint32 profileid_ignored_2 = 23;
// required uint32 profileid_ignored_3 = 24;
// required uint32 profileid_ignored_4 = 25;
// required uint32 reserved_ignored_1 = 26;
// required uint32 reserved_ignored_2 = 27;
// required uint32 reserved_ignored_3 = 28;
// required uint32 reserved_ignored_4 = 29;
// required uint32 reserved_ignored_5 = 30;
// required uint32 reserved_ignored_6 = 31;
// required uint32 reserved_ignored_7 = 32;
// We'll use colorspaces instead
required ICCColorSpace color_space = 33;
// repeated Tag tags = 33;
}
message ICCColorSpace {
oneof color_space {
ICCXYZ xyz = 1;
ICCGray gray = 2;
}
// Default.
required ICCA2B0 a2b0 = 3;
}
message ICCXYZ {}
message ICCGray {}
message ICCA2B0 {
oneof type {
ICCA2B0Lut8 lut8 = 1;
ICCA2B0Lut16 lut16 = 2;
}
// Default.
required ICCA2B0AToB atob = 3;
}
enum Ignored { VALUE = 0; }
enum UInt8 {
VAL0 = 0;
VAL1 = 1;
VAL2 = 2;
VAL3 = 3;
VAL4 = 4;
VAL5 = 5;
VAL6 = 6;
VAL7 = 7;
VAL8 = 8;
VAL9 = 9;
VAL10 = 10;
VAL11 = 11;
VAL12 = 12;
VAL13 = 13;
VAL14 = 14;
VAL15 = 15;
VAL16 = 16;
VAL17 = 17;
VAL18 = 18;
VAL19 = 19;
VAL20 = 20;
VAL21 = 21;
VAL22 = 22;
VAL23 = 23;
VAL24 = 24;
VAL25 = 25;
VAL26 = 26;
VAL27 = 27;
VAL28 = 28;
VAL29 = 29;
VAL30 = 30;
VAL31 = 31;
VAL32 = 32;
VAL33 = 33;
VAL34 = 34;
VAL35 = 35;
VAL36 = 36;
VAL37 = 37;
VAL38 = 38;
VAL39 = 39;
VAL40 = 40;
VAL41 = 41;
VAL42 = 42;
VAL43 = 43;
VAL44 = 44;
VAL45 = 45;
VAL46 = 46;
VAL47 = 47;
VAL48 = 48;
VAL49 = 49;
VAL50 = 50;
VAL51 = 51;
VAL52 = 52;
VAL53 = 53;
VAL54 = 54;
VAL55 = 55;
VAL56 = 56;
VAL57 = 57;
VAL58 = 58;
VAL59 = 59;
VAL60 = 60;
VAL61 = 61;
VAL62 = 62;
VAL63 = 63;
VAL64 = 64;
VAL65 = 65;
VAL66 = 66;
VAL67 = 67;
VAL68 = 68;
VAL69 = 69;
VAL70 = 70;
VAL71 = 71;
VAL72 = 72;
VAL73 = 73;
VAL74 = 74;
VAL75 = 75;
VAL76 = 76;
VAL77 = 77;
VAL78 = 78;
VAL79 = 79;
VAL80 = 80;
VAL81 = 81;
VAL82 = 82;
VAL83 = 83;
VAL84 = 84;
VAL85 = 85;
VAL86 = 86;
VAL87 = 87;
VAL88 = 88;
VAL89 = 89;
VAL90 = 90;
VAL91 = 91;
VAL92 = 92;
VAL93 = 93;
VAL94 = 94;
VAL95 = 95;
VAL96 = 96;
VAL97 = 97;
VAL98 = 98;
VAL99 = 99;
VAL100 = 100;
VAL101 = 101;
VAL102 = 102;
VAL103 = 103;
VAL104 = 104;
VAL105 = 105;
VAL106 = 106;
VAL107 = 107;
VAL108 = 108;
VAL109 = 109;
VAL110 = 110;
VAL111 = 111;
VAL112 = 112;
VAL113 = 113;
VAL114 = 114;
VAL115 = 115;
VAL116 = 116;
VAL117 = 117;
VAL118 = 118;
VAL119 = 119;
VAL120 = 120;
VAL121 = 121;
VAL122 = 122;
VAL123 = 123;
VAL124 = 124;
VAL125 = 125;
VAL126 = 126;
VAL127 = 127;
VAL128 = 128;
VAL129 = 129;
VAL130 = 130;
VAL131 = 131;
VAL132 = 132;
VAL133 = 133;
VAL134 = 134;
VAL135 = 135;
VAL136 = 136;
VAL137 = 137;
VAL138 = 138;
VAL139 = 139;
VAL140 = 140;
VAL141 = 141;
VAL142 = 142;
VAL143 = 143;
VAL144 = 144;
VAL145 = 145;
VAL146 = 146;
VAL147 = 147;
VAL148 = 148;
VAL149 = 149;
VAL150 = 150;
VAL151 = 151;
VAL152 = 152;
VAL153 = 153;
VAL154 = 154;
VAL155 = 155;
VAL156 = 156;
VAL157 = 157;
VAL158 = 158;
VAL159 = 159;
VAL160 = 160;
VAL161 = 161;
VAL162 = 162;
VAL163 = 163;
VAL164 = 164;
VAL165 = 165;
VAL166 = 166;
VAL167 = 167;
VAL168 = 168;
VAL169 = 169;
VAL170 = 170;
VAL171 = 171;
VAL172 = 172;
VAL173 = 173;
VAL174 = 174;
VAL175 = 175;
VAL176 = 176;
VAL177 = 177;
VAL178 = 178;
VAL179 = 179;
VAL180 = 180;
VAL181 = 181;
VAL182 = 182;
VAL183 = 183;
VAL184 = 184;
VAL185 = 185;
VAL186 = 186;
VAL187 = 187;
VAL188 = 188;
VAL189 = 189;
VAL190 = 190;
VAL191 = 191;
VAL192 = 192;
VAL193 = 193;
VAL194 = 194;
VAL195 = 195;
VAL196 = 196;
VAL197 = 197;
VAL198 = 198;
VAL199 = 199;
VAL200 = 200;
VAL201 = 201;
VAL202 = 202;
VAL203 = 203;
VAL204 = 204;
VAL205 = 205;
VAL206 = 206;
VAL207 = 207;
VAL208 = 208;
VAL209 = 209;
VAL210 = 210;
VAL211 = 211;
VAL212 = 212;
VAL213 = 213;
VAL214 = 214;
VAL215 = 215;
VAL216 = 216;
VAL217 = 217;
VAL218 = 218;
VAL219 = 219;
VAL220 = 220;
VAL221 = 221;
VAL222 = 222;
VAL223 = 223;
VAL224 = 224;
VAL225 = 225;
VAL226 = 226;
VAL227 = 227;
VAL228 = 228;
VAL229 = 229;
VAL230 = 230;
VAL231 = 231;
VAL232 = 232;
VAL233 = 233;
VAL234 = 234;
VAL235 = 235;
VAL236 = 236;
VAL237 = 237;
VAL238 = 238;
VAL239 = 239;
VAL240 = 240;
VAL241 = 241;
VAL242 = 242;
VAL243 = 243;
VAL244 = 244;
VAL245 = 245;
VAL246 = 246;
VAL247 = 247;
VAL248 = 248;
VAL249 = 249;
VAL250 = 250;
VAL251 = 251;
VAL252 = 252;
VAL253 = 253;
VAL254 = 254;
VAL255 = 255;
}
enum InputChannels {
ONE = 1;
TWO = 2;
THREE = 3;
}
enum OutputChannels {
// Can't be named THREE or else it will conflict with THREE in InputChannels.
// It doesn't matter, since we only use the numeric value on the converter
// side.
_THREE = 3;
}
message ICCA2B0AToB {
required InputChannels input_channels = 1;
required OutputChannels output_channels = 2; // Must be 3
}
message ICCA2B0Lut16 {
required ICCA2B0Lut8 lut8 = 1;
// TODO(metzman): allow these to be specified rather than generated.
// required uint32 in_table_entries = 2; // uint16_t
// required uint32 out_table_entries = 3; // uint16_t
required uint64 in_table_seed = 4;
required uint64 out_table_seed = 5;
}
message ICCA2B0Lut8 {
required Ignored ignored_byte_4 = 1;
required Ignored ignored_byte_5 = 2;
required Ignored ignored_byte_6 = 3;
required Ignored ignored_byte_7 = 4;
// Needs to agree with output_channels
required OutputChannels input_channels = 5;
required OutputChannels output_channels = 6; // Must be 3
required UInt8 clut_grid_points = 7;
required Ignored ignored_byte_11 = 8;
required Matrix matrix = 9;
required OneChannelGammas input_gammas_1 = 10;
required OneChannelGammas input_gammas_2 = 11;
required OneChannelGammas input_gammas_3 = 12;
required uint64 clut_bytes_seed = 13;
required OutputGammas output_gammas = 14;
}
message OneChannelGammas {
required int32 bytes_0_3 = 1;
required int32 bytes_4_7 = 2;
required int32 bytes_8_11 = 3;
required int32 bytes_12_15 = 4;
required int32 bytes_16_19 = 5;
required int32 bytes_20_23 = 6;
required int32 bytes_24_27 = 7;
required int32 bytes_28_31 = 8;
required int32 bytes_32_35 = 9;
required int32 bytes_36_39 = 10;
required int32 bytes_40_43 = 11;
required int32 bytes_44_47 = 12;
required int32 bytes_48_51 = 13;
required int32 bytes_52_55 = 14;
required int32 bytes_56_59 = 15;
required int32 bytes_60_63 = 16;
required int32 bytes_64_67 = 17;
required int32 bytes_68_71 = 18;
required int32 bytes_72_75 = 19;
required int32 bytes_76_79 = 20;
required int32 bytes_80_83 = 21;
required int32 bytes_84_87 = 22;
required int32 bytes_88_91 = 23;
required int32 bytes_92_95 = 24;
required int32 bytes_96_99 = 25;
required int32 bytes_100_103 = 26;
required int32 bytes_104_107 = 27;
required int32 bytes_108_111 = 28;
required int32 bytes_112_115 = 29;
required int32 bytes_116_119 = 30;
required int32 bytes_120_123 = 31;
required int32 bytes_124_127 = 32;
required int32 bytes_128_131 = 33;
required int32 bytes_132_135 = 34;
required int32 bytes_136_139 = 35;
required int32 bytes_140_143 = 36;
required int32 bytes_144_147 = 37;
required int32 bytes_148_151 = 38;
required int32 bytes_152_155 = 39;
required int32 bytes_156_159 = 40;
required int32 bytes_160_163 = 41;
required int32 bytes_164_167 = 42;
required int32 bytes_168_171 = 43;
required int32 bytes_172_175 = 44;
required int32 bytes_176_179 = 45;
required int32 bytes_180_183 = 46;
required int32 bytes_184_187 = 47;
required int32 bytes_188_191 = 48;
required int32 bytes_192_195 = 49;
required int32 bytes_196_199 = 50;
required int32 bytes_200_203 = 51;
required int32 bytes_204_207 = 52;
required int32 bytes_208_211 = 53;
required int32 bytes_212_215 = 54;
required int32 bytes_216_219 = 55;
required int32 bytes_220_223 = 56;
required int32 bytes_224_227 = 57;
required int32 bytes_228_231 = 58;
required int32 bytes_232_235 = 59;
required int32 bytes_236_239 = 60;
required int32 bytes_240_243 = 61;
required int32 bytes_244_247 = 62;
required int32 bytes_248_251 = 63;
required int32 bytes_252_255 = 64;
}
// Since output gammas are 3 times the size of input gammas, make
message OutputGammas {
required OneChannelGammas bytes_0_255 = 1;
required OneChannelGammas bytes_255_511 = 2;
required OneChannelGammas bytes_512_768 = 3;
}