1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ppapi/cpp/compositor_layer.h"
6
7#include "ppapi/c/pp_errors.h"
8#include "ppapi/cpp/completion_callback.h"
9#include "ppapi/cpp/module_impl.h"
10#include "ppapi/cpp/var.h"
11
12namespace pp {
13
14namespace {
15
16template <> const char* interface_name<PPB_CompositorLayer_0_1>() {
17  return PPB_COMPOSITORLAYER_INTERFACE_0_1;
18}
19
20}  // namespace
21
22CompositorLayer::CompositorLayer() {
23}
24
25CompositorLayer::CompositorLayer(
26    const CompositorLayer& other) : Resource(other) {
27}
28
29CompositorLayer::CompositorLayer(const Resource& resource)
30    : Resource(resource) {
31  PP_DCHECK(IsCompositorLayer(resource));
32}
33
34CompositorLayer::CompositorLayer(PassRef, PP_Resource resource)
35    : Resource(PASS_REF, resource) {
36}
37
38CompositorLayer::~CompositorLayer() {
39}
40
41int32_t CompositorLayer::SetColor(float red,
42                                  float green,
43                                  float blue,
44                                  float alpha,
45                                  const Size& size) {
46  if (has_interface<PPB_CompositorLayer_0_1>()) {
47    return get_interface<PPB_CompositorLayer_0_1>()->SetColor(
48        pp_resource(), red, green, blue, alpha, &size.pp_size());
49  }
50  return PP_ERROR_NOINTERFACE;
51}
52
53int32_t CompositorLayer::SetTexture(const Graphics3D& context,
54                                    uint32_t texture,
55                                    const Size& size,
56                                    const CompletionCallback& cc) {
57  if (has_interface<PPB_CompositorLayer_0_1>()) {
58    return get_interface<PPB_CompositorLayer_0_1>()->SetTexture(
59        pp_resource(), context.pp_resource(), texture, &size.pp_size(),
60        cc.pp_completion_callback());
61  }
62  return cc.MayForce(PP_ERROR_NOINTERFACE);
63}
64
65int32_t CompositorLayer::SetImage(const ImageData& image,
66                                  const CompletionCallback& cc) {
67  if (has_interface<PPB_CompositorLayer_0_1>()) {
68    return get_interface<PPB_CompositorLayer_0_1>()->SetImage(
69        pp_resource(), image.pp_resource(), NULL,
70        cc.pp_completion_callback());
71  }
72  return cc.MayForce(PP_ERROR_NOINTERFACE);
73}
74
75int32_t CompositorLayer::SetImage(const ImageData& image,
76                                  const Size& size,
77                                  const CompletionCallback& cc) {
78  if (has_interface<PPB_CompositorLayer_0_1>()) {
79    return get_interface<PPB_CompositorLayer_0_1>()->SetImage(
80        pp_resource(), image.pp_resource(), &size.pp_size(),
81        cc.pp_completion_callback());
82  }
83  return cc.MayForce(PP_ERROR_NOINTERFACE);
84}
85
86int32_t CompositorLayer::SetClipRect(const Rect& rect) {
87  if (has_interface<PPB_CompositorLayer_0_1>()) {
88    return get_interface<PPB_CompositorLayer_0_1>()->SetClipRect(
89        pp_resource(), &rect.pp_rect());
90  }
91  return PP_ERROR_NOINTERFACE;
92}
93
94int32_t CompositorLayer::SetTransform(const float matrix[16]) {
95  if (has_interface<PPB_CompositorLayer_0_1>()) {
96    return get_interface<PPB_CompositorLayer_0_1>()->SetTransform(
97        pp_resource(), matrix);
98  }
99  return PP_ERROR_NOINTERFACE;
100}
101
102int32_t CompositorLayer::SetOpacity(float opacity) {
103  if (has_interface<PPB_CompositorLayer_0_1>()) {
104    return get_interface<PPB_CompositorLayer_0_1>()->SetOpacity(
105        pp_resource(), opacity);
106  }
107  return PP_ERROR_NOINTERFACE;
108}
109
110int32_t CompositorLayer::SetBlendMode(PP_BlendMode mode) {
111  if (has_interface<PPB_CompositorLayer_0_1>()) {
112    return get_interface<PPB_CompositorLayer_0_1>()->SetBlendMode(
113        pp_resource(), mode);
114  }
115  return PP_ERROR_NOINTERFACE;
116}
117
118int32_t CompositorLayer::SetSourceRect(const FloatRect& rect) {
119  if (has_interface<PPB_CompositorLayer_0_1>()) {
120    return get_interface<PPB_CompositorLayer_0_1>()->SetSourceRect(
121        pp_resource(), &rect.pp_float_rect());
122  }
123  return PP_ERROR_NOINTERFACE;
124}
125
126int32_t CompositorLayer::SetPremultipliedAlpha(bool premult) {
127  if (has_interface<PPB_CompositorLayer_0_1>()) {
128    return get_interface<PPB_CompositorLayer_0_1>()->SetPremultipliedAlpha(
129        pp_resource(), PP_FromBool(premult));
130  }
131  return PP_ERROR_NOINTERFACE;
132}
133
134bool CompositorLayer::IsCompositorLayer(const Resource& resource) {
135  if (has_interface<PPB_CompositorLayer_0_1>()) {
136    return PP_ToBool(get_interface<PPB_CompositorLayer_0_1>()->
137        IsCompositorLayer(resource.pp_resource()));
138  }
139  return false;
140}
141
142}  // namespace pp
143