diff options
Diffstat (limited to 'chromium/mojo/services/public/interfaces/surfaces/quads.mojom')
-rw-r--r-- | chromium/mojo/services/public/interfaces/surfaces/quads.mojom | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/chromium/mojo/services/public/interfaces/surfaces/quads.mojom b/chromium/mojo/services/public/interfaces/surfaces/quads.mojom new file mode 100644 index 00000000000..eb8898b0f36 --- /dev/null +++ b/chromium/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; +}; + +} |