blob: c17b387efce82bab751259a8e2d11a0355190a40 [file] [log] [blame]
Torne (Richard Coles)58218062012-11-14 11:43:16 +00001// Copyright (c) 2012 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/view.h"
6
7#include "ppapi/c/ppb_view.h"
8#include "ppapi/cpp/module_impl.h"
9
10namespace pp {
11
12namespace {
13
14template <> const char* interface_name<PPB_View_1_0>() {
15 return PPB_VIEW_INTERFACE_1_0;
16}
17
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010018template <> const char* interface_name<PPB_View_1_1>() {
19 return PPB_VIEW_INTERFACE_1_1;
20}
21
Torne (Richard Coles)6d86b772014-06-25 10:30:53 +010022template <> const char* interface_name<PPB_View_1_2>() {
23 return PPB_VIEW_INTERFACE_1_2;
24}
25
Torne (Richard Coles)58218062012-11-14 11:43:16 +000026} // namespace
27
28View::View() : Resource() {
29}
30
31View::View(PP_Resource view_resource) : Resource(view_resource) {
32}
33
34Rect View::GetRect() const {
Torne (Richard Coles)58218062012-11-14 11:43:16 +000035 PP_Rect out;
Torne (Richard Coles)6d86b772014-06-25 10:30:53 +010036 if (has_interface<PPB_View_1_2>()) {
37 if (PP_ToBool(get_interface<PPB_View_1_2>()->GetRect(pp_resource(), &out)))
38 return Rect(out);
39 } else if (has_interface<PPB_View_1_1>()) {
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010040 if (PP_ToBool(get_interface<PPB_View_1_1>()->GetRect(pp_resource(), &out)))
41 return Rect(out);
42 } else if (has_interface<PPB_View_1_0>()) {
43 if (PP_ToBool(get_interface<PPB_View_1_0>()->GetRect(pp_resource(), &out)))
44 return Rect(out);
45 }
Torne (Richard Coles)58218062012-11-14 11:43:16 +000046 return Rect();
47}
48
49bool View::IsFullscreen() const {
Torne (Richard Coles)6d86b772014-06-25 10:30:53 +010050 if (has_interface<PPB_View_1_2>()) {
51 return PP_ToBool(get_interface<PPB_View_1_2>()->IsFullscreen(
52 pp_resource()));
53 } else if (has_interface<PPB_View_1_1>()) {
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010054 return PP_ToBool(get_interface<PPB_View_1_1>()->IsFullscreen(
55 pp_resource()));
56 } else if (has_interface<PPB_View_1_0>()) {
57 return PP_ToBool(get_interface<PPB_View_1_0>()->IsFullscreen(
58 pp_resource()));
59 }
60 return false;
Torne (Richard Coles)58218062012-11-14 11:43:16 +000061}
62
63bool View::IsVisible() const {
Torne (Richard Coles)6d86b772014-06-25 10:30:53 +010064 if (has_interface<PPB_View_1_2>())
65 return PP_ToBool(get_interface<PPB_View_1_2>()->IsVisible(pp_resource()));
66 else if (has_interface<PPB_View_1_1>())
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010067 return PP_ToBool(get_interface<PPB_View_1_1>()->IsVisible(pp_resource()));
68 else if (has_interface<PPB_View_1_0>())
69 return PP_ToBool(get_interface<PPB_View_1_0>()->IsVisible(pp_resource()));
70 return false;
Torne (Richard Coles)58218062012-11-14 11:43:16 +000071}
72
73bool View::IsPageVisible() const {
Torne (Richard Coles)6d86b772014-06-25 10:30:53 +010074 if (has_interface<PPB_View_1_2>()) {
75 return PP_ToBool(get_interface<PPB_View_1_2>()->IsPageVisible(
76 pp_resource()));
77 } else if (has_interface<PPB_View_1_1>()) {
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010078 return PP_ToBool(get_interface<PPB_View_1_1>()->IsPageVisible(
79 pp_resource()));
80 } else if (has_interface<PPB_View_1_0>()) {
81 return PP_ToBool(get_interface<PPB_View_1_0>()->IsPageVisible(
82 pp_resource()));
83 }
84 return true;
Torne (Richard Coles)58218062012-11-14 11:43:16 +000085}
86
87Rect View::GetClipRect() const {
Torne (Richard Coles)58218062012-11-14 11:43:16 +000088 PP_Rect out;
Torne (Richard Coles)6d86b772014-06-25 10:30:53 +010089 if (has_interface<PPB_View_1_2>()) {
90 if (PP_ToBool(get_interface<PPB_View_1_2>()->GetClipRect(pp_resource(),
91 &out)))
92 return Rect(out);
93 } else if (has_interface<PPB_View_1_1>()) {
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +010094 if (PP_ToBool(get_interface<PPB_View_1_1>()->GetClipRect(pp_resource(),
95 &out)))
96 return Rect(out);
97 } else if (has_interface<PPB_View_1_0>()) {
98 if (PP_ToBool(get_interface<PPB_View_1_0>()->GetClipRect(pp_resource(),
99 &out)))
100 return Rect(out);
101 }
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000102 return Rect();
103}
104
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100105float View::GetDeviceScale() const {
Torne (Richard Coles)6d86b772014-06-25 10:30:53 +0100106 if (has_interface<PPB_View_1_2>())
107 return get_interface<PPB_View_1_2>()->GetDeviceScale(pp_resource());
108 else if (has_interface<PPB_View_1_1>())
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100109 return get_interface<PPB_View_1_1>()->GetDeviceScale(pp_resource());
110 return 1.0f;
111}
112
113float View::GetCSSScale() const {
Torne (Richard Coles)6d86b772014-06-25 10:30:53 +0100114 if (has_interface<PPB_View_1_2>())
115 return get_interface<PPB_View_1_2>()->GetCSSScale(pp_resource());
116 else if (has_interface<PPB_View_1_1>())
Torne (Richard Coles)c2e0dbd2013-05-09 18:35:53 +0100117 return get_interface<PPB_View_1_1>()->GetCSSScale(pp_resource());
118 return 1.0f;
119}
120
Torne (Richard Coles)6d86b772014-06-25 10:30:53 +0100121Point View::GetScrollOffset() const {
122 PP_Point out;
123 if (has_interface<PPB_View_1_2>()) {
124 if (PP_ToBool(get_interface<PPB_View_1_2>()->GetScrollOffset(pp_resource(),
125 &out))) {
126 return Point(out);
127 }
128 }
129 return Point();
130}
131
Torne (Richard Coles)58218062012-11-14 11:43:16 +0000132} // namespace pp