Pepper_47_C++_interfaces
compositor_layer.cc
Go to the documentation of this file.
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 
6 
7 #include "ppapi/c/pp_errors.h"
10 #include "ppapi/cpp/var.h"
11 
12 namespace pp {
13 
14 namespace {
15 
16 template <> const char* interface_name<PPB_CompositorLayer_0_1>() {
17  return PPB_COMPOSITORLAYER_INTERFACE_0_1;
18 }
19 
20 template <> const char* interface_name<PPB_CompositorLayer_0_2>() {
21  return PPB_COMPOSITORLAYER_INTERFACE_0_2;
22 }
23 
24 } // namespace
25 
27 }
28 
30  const CompositorLayer& other) : Resource(other) {
31 }
32 
34  : Resource(resource) {
35  PP_DCHECK(IsCompositorLayer(resource));
36 }
37 
39  : Resource(PASS_REF, resource) {
40 }
41 
43 }
44 
46  float green,
47  float blue,
48  float alpha,
49  const Size& size) {
50  if (has_interface<PPB_CompositorLayer_0_2>()) {
51  return get_interface<PPB_CompositorLayer_0_2>()->SetColor(
52  pp_resource(), red, green, blue, alpha, &size.pp_size());
53  }
54  if (has_interface<PPB_CompositorLayer_0_1>()) {
55  return get_interface<PPB_CompositorLayer_0_1>()->SetColor(
56  pp_resource(), red, green, blue, alpha, &size.pp_size());
57  }
58  return PP_ERROR_NOINTERFACE;
59 }
60 
62  uint32_t target,
63  uint32_t texture,
64  const Size& size,
65  const CompletionCallback& cc) {
66  if (has_interface<PPB_CompositorLayer_0_2>()) {
67  return get_interface<PPB_CompositorLayer_0_2>()->SetTexture(
68  pp_resource(), context.pp_resource(), target, texture, &size.pp_size(),
70  }
71  if (has_interface<PPB_CompositorLayer_0_1>()) {
72  if (target != 0x0DE1) // 0x0DE1 GL_TEXTURE_2D
73  return cc.MayForce(PP_ERROR_NOTSUPPORTED);
74  return get_interface<PPB_CompositorLayer_0_1>()->SetTexture(
75  pp_resource(), context.pp_resource(), texture, &size.pp_size(),
77  }
78  return cc.MayForce(PP_ERROR_NOINTERFACE);
79 }
80 
82  const CompletionCallback& cc) {
83  if (has_interface<PPB_CompositorLayer_0_2>()) {
84  return get_interface<PPB_CompositorLayer_0_2>()->SetImage(
85  pp_resource(), image.pp_resource(), NULL,
87  }
88  if (has_interface<PPB_CompositorLayer_0_1>()) {
89  return get_interface<PPB_CompositorLayer_0_1>()->SetImage(
90  pp_resource(), image.pp_resource(), NULL,
92  }
93  return cc.MayForce(PP_ERROR_NOINTERFACE);
94 }
95 
97  const Size& size,
98  const CompletionCallback& cc) {
99  if (has_interface<PPB_CompositorLayer_0_2>()) {
100  return get_interface<PPB_CompositorLayer_0_2>()->SetImage(
101  pp_resource(), image.pp_resource(), &size.pp_size(),
103  }
104  if (has_interface<PPB_CompositorLayer_0_1>()) {
105  return get_interface<PPB_CompositorLayer_0_1>()->SetImage(
106  pp_resource(), image.pp_resource(), &size.pp_size(),
108  }
109  return cc.MayForce(PP_ERROR_NOINTERFACE);
110 }
111 
113  if (has_interface<PPB_CompositorLayer_0_2>()) {
114  return get_interface<PPB_CompositorLayer_0_2>()->SetClipRect(
115  pp_resource(), &rect.pp_rect());
116  }
117  if (has_interface<PPB_CompositorLayer_0_1>()) {
118  return get_interface<PPB_CompositorLayer_0_1>()->SetClipRect(
119  pp_resource(), &rect.pp_rect());
120  }
121  return PP_ERROR_NOINTERFACE;
122 }
123 
124 int32_t CompositorLayer::SetTransform(const float matrix[16]) {
125  if (has_interface<PPB_CompositorLayer_0_2>()) {
126  return get_interface<PPB_CompositorLayer_0_2>()->SetTransform(
127  pp_resource(), matrix);
128  }
129  if (has_interface<PPB_CompositorLayer_0_1>()) {
130  return get_interface<PPB_CompositorLayer_0_1>()->SetTransform(
131  pp_resource(), matrix);
132  }
133  return PP_ERROR_NOINTERFACE;
134 }
135 
137  if (has_interface<PPB_CompositorLayer_0_2>()) {
138  return get_interface<PPB_CompositorLayer_0_2>()->SetOpacity(
139  pp_resource(), opacity);
140  }
141  if (has_interface<PPB_CompositorLayer_0_1>()) {
142  return get_interface<PPB_CompositorLayer_0_1>()->SetOpacity(
143  pp_resource(), opacity);
144  }
145  return PP_ERROR_NOINTERFACE;
146 }
147 
149  if (has_interface<PPB_CompositorLayer_0_2>()) {
150  return get_interface<PPB_CompositorLayer_0_2>()->SetBlendMode(
151  pp_resource(), mode);
152  }
153  if (has_interface<PPB_CompositorLayer_0_1>()) {
154  return get_interface<PPB_CompositorLayer_0_1>()->SetBlendMode(
155  pp_resource(), mode);
156  }
157  return PP_ERROR_NOINTERFACE;
158 }
159 
161  if (has_interface<PPB_CompositorLayer_0_2>()) {
162  return get_interface<PPB_CompositorLayer_0_2>()->SetSourceRect(
163  pp_resource(), &rect.pp_float_rect());
164  }
165  if (has_interface<PPB_CompositorLayer_0_1>()) {
166  return get_interface<PPB_CompositorLayer_0_1>()->SetSourceRect(
167  pp_resource(), &rect.pp_float_rect());
168  }
169  return PP_ERROR_NOINTERFACE;
170 }
171 
173  if (has_interface<PPB_CompositorLayer_0_2>()) {
174  return get_interface<PPB_CompositorLayer_0_2>()->SetPremultipliedAlpha(
175  pp_resource(), PP_FromBool(premult));
176  }
177  if (has_interface<PPB_CompositorLayer_0_1>()) {
178  return get_interface<PPB_CompositorLayer_0_1>()->SetPremultipliedAlpha(
179  pp_resource(), PP_FromBool(premult));
180  }
181  return PP_ERROR_NOINTERFACE;
182 }
183 
185  if (has_interface<PPB_CompositorLayer_0_2>()) {
186  return PP_ToBool(get_interface<PPB_CompositorLayer_0_2>()->
187  IsCompositorLayer(resource.pp_resource()));
188  }
189  if (has_interface<PPB_CompositorLayer_0_1>()) {
190  return PP_ToBool(get_interface<PPB_CompositorLayer_0_1>()->
191  IsCompositorLayer(resource.pp_resource()));
192  }
193  return false;
194 }
195 
196 } // namespace pp
int32_t SetImage(const ImageData &image, const CompletionCallback &callback)
int32_t SetSourceRect(const FloatRect &rect)
int32_t SetColor(float red, float green, float blue, float alpha, const Size &size)
int32_t SetTexture(const Graphics3D &context, uint32_t target, uint32_t texture, const Size &size, const CompletionCallback &cc)
int32_t SetOpacity(float opacity)
#define PP_DCHECK(a)
Definition: logging.h:16
const PP_Size & pp_size() const
Definition: size.h:64
Definition: rect.h:19
int32_t MayForce(int32_t result) const
const PP_CompletionCallback & pp_completion_callback() const
int32_t SetPremultipliedAlpha(bool premult)
This class represents a 3D rendering context in the browser.
Definition: graphics_3d.h:19
int32_t SetTransform(const float matrix[16])
A size of an object based on width and height.
Definition: size.h:18
int32_t SetClipRect(const Rect &rect)
~CompositorLayer()
Destructor.
int32_t SetBlendMode(PP_BlendMode mode)
static bool IsCompositorLayer(const Resource &resource)
PassRef
Definition: pass_ref.h:17
PP_Resource pp_resource() const
Definition: resource.h:47
A reference counted module resource.
Definition: resource.h:20
const PP_Rect & pp_rect() const
Definition: rect.h:110
const PP_FloatRect & pp_float_rect() const
Definition: rect.h:494