// 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 "mojo/services/public/interfaces/geometry/geometry.mojom"
import "mojo/services/public/interfaces/surfaces/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;
  bool force_anti_aliasing_off;
};

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;
  float[4] vertex_opacity;
  bool flipped;
};

struct TiledContentQuadState {};

struct StreamVideoQuadState {};

struct YUVVideoQuadState {};

enum Material {
  CHECKERBOARD = 1,
  DEBUG_BORDER,
  IO_SURFACE_CONTENT,
  PICTURE_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;
  int32 sorting_context_id;
};

struct Pass {
  int32 id;
  mojo.Rect output_rect;
  mojo.Rect damage_rect;
  mojo.Transform transform_to_root_target;
  bool has_transparent_background;
  Quad[] quads;
  SharedQuadState[] shared_quad_states;
};

}
