/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 * vim: sw=2 ts=8 et :
 */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

include "mozilla/layers/LayersMessageUtils.h";
include "mozilla/layers/WebRenderMessageUtils.h";

include LayersSurfaces;
include LayersMessages;
include protocol PTexture;

using mozilla::layers::CompositableHandle from "mozilla/layers/LayersTypes.h";
using mozilla::wr::LayoutSize from "mozilla/webrender/webrender_ffi.h";
using mozilla::wr::ImageDescriptor from "mozilla/webrender/webrender_ffi.h";
using mozilla::wr::ImageRendering from "mozilla/webrender/webrender_ffi.h";
using mozilla::wr::MixBlendMode from "mozilla/webrender/webrender_ffi.h";
using mozilla::wr::ExternalImageId from "mozilla/webrender/WebRenderTypes.h";
using mozilla::wr::MaybeFontInstanceOptions from "mozilla/webrender/WebRenderTypes.h";
using mozilla::wr::MaybeFontInstancePlatformOptions from "mozilla/webrender/WebRenderTypes.h";
using mozilla::wr::FontInstanceKey from "mozilla/webrender/WebRenderTypes.h";
using mozilla::wr::FontKey from "mozilla/webrender/WebRenderTypes.h";
using mozilla::wr::ImageKey from "mozilla/webrender/WebRenderTypes.h";
using mozilla::wr::BlobImageKey from "mozilla/webrender/WebRenderTypes.h";
using mozilla::wr::PipelineId from "mozilla/webrender/WebRenderTypes.h";
using mozilla::gfx::MaybeIntSize from "mozilla/gfx/Point.h";
using mozilla::LayoutDeviceRect from "Units.h";
using mozilla::LayoutDeviceSize from "Units.h";
using mozilla::ImageIntRect from "Units.h";
using mozilla::gfx::Rect from "mozilla/gfx/Rect.h";
using mozilla::VideoInfo::Rotation from "MediaInfo.h";
using class mozilla::gfx::Matrix4x4 from "mozilla/gfx/Matrix.h";
using struct mozilla::void_t from "mozilla/ipc/IPCCore.h";

namespace mozilla {
namespace layers {

struct RefCountedShmem {
  Shmem buffer;
};

struct OpAddPrivateExternalImage {
  ExternalImageId externalImageId;
  ImageKey key;
  ImageDescriptor descriptor;
};

struct OpAddSharedExternalImage {
  ExternalImageId externalImageId;
  ImageKey key;
};

struct OpPushExternalImageForTexture {
  ExternalImageId externalImageId;
  ImageKey key;
  PTexture texture;
  bool isUpdate;
};

struct OpAddCompositorAnimations {
  CompositorAnimations data;
};

struct OpAddPipelineIdForCompositable {
  PipelineId pipelineId;
  CompositableHandle handle;
  bool isAsync;
};

struct OpRemovePipelineIdForCompositable {
  PipelineId pipelineId;
};

struct OpReleaseTextureOfImage {
  ImageKey key;
};

struct OpUpdateAsyncImagePipeline {
  PipelineId pipelineId;
  LayoutDeviceRect scBounds;
  Rotation rotation;
  ImageRendering filter;
  MixBlendMode mixBlendMode;
};

struct OpUpdatedAsyncImagePipeline {
  PipelineId pipelineId;
};

union WebRenderParentCommand {
  OpAddPipelineIdForCompositable;
  OpRemovePipelineIdForCompositable;
  OpReleaseTextureOfImage;
  OpUpdateAsyncImagePipeline;
  OpUpdatedAsyncImagePipeline;
  CompositableOperation;
  OpAddCompositorAnimations;
};

struct OffsetRange {
  uint32_t source;
  uint32_t start;
  uint32_t length;
};

struct OpAddImage {
  ImageDescriptor descriptor;
  OffsetRange bytes;
  uint16_t tiling;
  ImageKey key;
};

struct OpAddBlobImage {
  ImageDescriptor descriptor;
  OffsetRange bytes;
  ImageIntRect visibleRect;
  uint16_t tiling;
  BlobImageKey key;
};

struct OpUpdateImage {
  ImageDescriptor descriptor;
  OffsetRange bytes;
  ImageKey key;
};

struct OpUpdateBlobImage {
  ImageDescriptor descriptor;
  OffsetRange bytes;
  BlobImageKey key;
  ImageIntRect visibleRect;
  ImageIntRect dirtyRect;
};

struct OpSetBlobImageVisibleArea {
  ImageIntRect area;
  BlobImageKey key;
};

struct OpUpdatePrivateExternalImage {
  ExternalImageId externalImageId;
  ImageKey key;
  ImageDescriptor descriptor;
  ImageIntRect dirtyRect;
};

struct OpUpdateSharedExternalImage {
  ExternalImageId externalImageId;
  ImageKey key;
  ImageIntRect dirtyRect;
};

struct OpDeleteImage {
  ImageKey key;
};

struct OpDeleteBlobImage {
  BlobImageKey key;
};

struct OpAddRawFont {
  OffsetRange bytes;
  uint32_t fontIndex;
  FontKey key;
};

struct OpAddFontDescriptor {
  OffsetRange bytes;
  uint32_t fontIndex;
  FontKey key;
};

struct OpDeleteFont {
  FontKey key;
};

struct OpAddFontInstance {
  MaybeFontInstanceOptions options;
  MaybeFontInstancePlatformOptions platformOptions;
  OffsetRange variations;
  FontInstanceKey instanceKey;
  FontKey fontKey;
  float glyphSize;
};

struct OpDeleteFontInstance {
  FontInstanceKey key;
};

union OpUpdateResource {
  OpAddImage;
  OpAddBlobImage;
  OpUpdateImage;
  OpUpdateBlobImage;
  OpSetBlobImageVisibleArea;
  OpDeleteImage;
  OpDeleteBlobImage;
  OpAddRawFont;
  OpAddFontDescriptor;
  OpDeleteFont;
  OpAddFontInstance;
  OpDeleteFontInstance;
  OpAddPrivateExternalImage;
  OpAddSharedExternalImage;
  OpPushExternalImageForTexture;
  OpUpdatePrivateExternalImage;
  OpUpdateSharedExternalImage;
};

} // namespace
} // namespace