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
12 namespace pp {
13
14 namespace {
15
interface_name()16 template <> const char* interface_name<PPB_CompositorLayer_0_1>() {
17 return PPB_COMPOSITORLAYER_INTERFACE_0_1;
18 }
19
20 } // namespace
21
CompositorLayer()22 CompositorLayer::CompositorLayer() {
23 }
24
CompositorLayer(const CompositorLayer & other)25 CompositorLayer::CompositorLayer(
26 const CompositorLayer& other) : Resource(other) {
27 }
28
CompositorLayer(const Resource & resource)29 CompositorLayer::CompositorLayer(const Resource& resource)
30 : Resource(resource) {
31 PP_DCHECK(IsCompositorLayer(resource));
32 }
33
CompositorLayer(PassRef,PP_Resource resource)34 CompositorLayer::CompositorLayer(PassRef, PP_Resource resource)
35 : Resource(PASS_REF, resource) {
36 }
37
~CompositorLayer()38 CompositorLayer::~CompositorLayer() {
39 }
40
SetColor(float red,float green,float blue,float alpha,const Size & size)41 int32_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
SetTexture(const Graphics3D & context,uint32_t texture,const Size & size,const CompletionCallback & cc)53 int32_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
SetImage(const ImageData & image,const CompletionCallback & cc)65 int32_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
SetImage(const ImageData & image,const Size & size,const CompletionCallback & cc)75 int32_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
SetClipRect(const Rect & rect)86 int32_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
SetTransform(const float matrix[16])94 int32_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
SetOpacity(float opacity)102 int32_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
SetBlendMode(PP_BlendMode mode)110 int32_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
SetSourceRect(const FloatRect & rect)118 int32_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
SetPremultipliedAlpha(bool premult)126 int32_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
IsCompositorLayer(const Resource & resource)134 bool 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