Index: mojo/services/public/interfaces/surfaces/quads.mojom |
diff --git a/mojo/services/public/interfaces/surfaces/quads.mojom b/mojo/services/public/interfaces/surfaces/quads.mojom |
new file mode 100644 |
index 0000000000000000000000000000000000000000..eb8898b0f36d708dbc8e672c73ab295b4a4dc18a |
--- /dev/null |
+++ b/mojo/services/public/interfaces/surfaces/quads.mojom |
@@ -0,0 +1,165 @@ |
+// Copyright 2014 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. |
+ |
+import "../geometry/geometry.mojom" |
+import "surface_id.mojom" |
+ |
+module mojo.surfaces { |
+ |
+struct Color { |
+ uint32 rgba; |
+}; |
+ |
+// TODO(jamesr): Populate subtype fields. |
+struct CheckerboardQuadState {}; |
+ |
+struct DebugBorderQuadState {}; |
+ |
+struct IoSurfaceContentQuadState {}; |
+ |
+struct RenderPassQuadState {}; |
+ |
+struct SolidColorQuadState { |
+ Color color; |
+}; |
+ |
+struct SurfaceQuadState { |
+ SurfaceId surface; |
+}; |
+ |
+struct TextureQuadState { |
+ uint32 resource_id; |
+ bool premultiplied_alpha; |
+ mojo.PointF uv_top_left; |
+ mojo.PointF uv_bottom_right; |
+ Color background_color; |
+ // Should have exactly 4 entries. |
+ float[] vertex_opacity; |
+ bool flipped; |
+}; |
+ |
+struct TiledContentQuadState {}; |
+ |
+struct StreamVideoQuadState {}; |
+ |
+struct YUVVideoQuadState {}; |
+ |
+enum Material { |
+ CHECKERBOARD = 1, |
+ DEBUG_BORDER, |
+ IO_SURFACE_CONTENT, |
+ RENDER_PASS, |
+ SOLID_COLOR, |
+ STREAM_VIDEO_CONTENT, |
+ SURFACE_CONTENT, |
+ TEXTURE_CONTENT, |
+ TILED_CONTENT, |
+ YUV_VIDEO_CONTENT, |
+}; |
+ |
+struct Quad { |
+ Material material; |
+ |
+ // This rect, after applying the quad_transform(), gives the geometry that |
+ // this quad should draw to. This rect lives in content space. |
+ mojo.Rect rect; |
+ |
+ // This specifies the region of the quad that is opaque. This rect lives in |
+ // content space. |
+ mojo.Rect opaque_rect; |
+ |
+ // Allows changing the rect that gets drawn to make it smaller. This value |
+ // should be clipped to |rect|. This rect lives in content space. |
+ mojo.Rect visible_rect; |
+ |
+ // Allows changing the rect that gets drawn to make it smaller. This value |
+ // should be clipped to |rect|. This rect lives in content space. |
+ bool needs_blending; |
+ |
+ // Index into the containing pass' shared quad state array which has state |
+ // (transforms etc) shared by multiple quads. |
+ int32 shared_quad_state_index; |
+ |
+ // Only one of the following will be set, depending on the material. |
+ CheckerboardQuadState checkerboard_quad_state; |
+ DebugBorderQuadState debug_border_quad_state; |
+ IoSurfaceContentQuadState io_surface_quad_state; |
+ RenderPassQuadState render_pass_quad_state; |
+ SolidColorQuadState solid_color_quad_state; |
+ SurfaceQuadState surface_quad_state; |
+ TextureQuadState texture_quad_state; |
+ TiledContentQuadState tiled_content_quad_state; |
+ StreamVideoQuadState stream_video_quad_state; |
+ YUVVideoQuadState yuv_video_quad_state; |
+}; |
+ |
+enum SkXfermode { |
+ kClear_Mode = 0, //!< [0, 0] |
+ kSrc_Mode, //!< [Sa, Sc] |
+ kDst_Mode, //!< [Da, Dc] |
+ kSrcOver_Mode, //!< [Sa + Da - Sa*Da, Rc = Sc + (1 - Sa)*Dc] |
+ kDstOver_Mode, //!< [Sa + Da - Sa*Da, Rc = Dc + (1 - Da)*Sc] |
+ kSrcIn_Mode, //!< [Sa * Da, Sc * Da] |
+ kDstIn_Mode, //!< [Sa * Da, Sa * Dc] |
+ kSrcOut_Mode, //!< [Sa * (1 - Da), Sc * (1 - Da)] |
+ kDstOut_Mode, //!< [Da * (1 - Sa), Dc * (1 - Sa)] |
+ kSrcATop_Mode, //!< [Da, Sc * Da + (1 - Sa) * Dc] |
+ kDstATop_Mode, //!< [Sa, Sa * Dc + Sc * (1 - Da)] |
+ kXor_Mode, //!< [Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + (1 - Sa) * Dc] |
+ kPlus_Mode, //!< [Sa + Da, Sc + Dc] |
+ kModulate_Mode, // multiplies all components (= alpha and color) |
+ |
+ // Following blend modes are defined in the CSS Compositing standard: |
+ // https://dvcs.w3.org/hg/FXTF/rawfile/tip/compositing/index.html#blending |
+ kScreen_Mode, |
+ kLastCoeffMode = kScreen_Mode, |
+ |
+ kOverlay_Mode, |
+ kDarken_Mode, |
+ kLighten_Mode, |
+ kColorDodge_Mode, |
+ kColorBurn_Mode, |
+ kHardLight_Mode, |
+ kSoftLight_Mode, |
+ kDifference_Mode, |
+ kExclusion_Mode, |
+ kMultiply_Mode, |
+ kLastSeparableMode = kMultiply_Mode, |
+ |
+ kHue_Mode, |
+ kSaturation_Mode, |
+ kColor_Mode, |
+ kLuminosity_Mode, |
+ kLastMode = kLuminosity_Mode |
+}; |
+ |
+struct SharedQuadState { |
+ // Transforms from quad's original content space to its target content space. |
+ mojo.Transform content_to_target_transform; |
+ |
+ // This size lives in the content space for the quad's originating layer. |
+ mojo.Size content_bounds; |
+ |
+ // This rect lives in the content space for the quad's originating layer. |
+ mojo.Rect visible_content_rect; |
+ |
+ // This rect lives in the target content space. |
+ mojo.Rect clip_rect; |
+ |
+ bool is_clipped; |
+ float opacity; |
+ SkXfermode blend_mode; |
+}; |
+ |
+struct Pass { |
+ int32 id; |
+ mojo.Rect output_rect; |
+ mojo.Rect damage_rect; |
+ mojo.Transform transform_to_root_target; |
+ bool has_transparent_pixels; |
+ Quad[] quads; |
+ SharedQuadState[] shared_quad_states; |
+}; |
+ |
+} |