1// 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
18template <> const char* interface_name<PPB_View_1_1>() {
19  return PPB_VIEW_INTERFACE_1_1;
20}
21
22template <> const char* interface_name<PPB_View_1_2>() {
23  return PPB_VIEW_INTERFACE_1_2;
24}
25
26}  // namespace
27
28View::View() : Resource() {
29}
30
31View::View(PP_Resource view_resource) : Resource(view_resource) {
32}
33
34Rect View::GetRect() const {
35  PP_Rect out;
36  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>()) {
40    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  }
46  return Rect();
47}
48
49bool View::IsFullscreen() const {
50  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>()) {
54    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;
61}
62
63bool View::IsVisible() const {
64  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>())
67    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;
71}
72
73bool View::IsPageVisible() const {
74  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>()) {
78    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;
85}
86
87Rect View::GetClipRect() const {
88  PP_Rect out;
89  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>()) {
94    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  }
102  return Rect();
103}
104
105float View::GetDeviceScale() const {
106  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>())
109    return get_interface<PPB_View_1_1>()->GetDeviceScale(pp_resource());
110  return 1.0f;
111}
112
113float View::GetCSSScale() const {
114  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>())
117    return get_interface<PPB_View_1_1>()->GetCSSScale(pp_resource());
118  return 1.0f;
119}
120
121Point 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
132}  // namespace pp
133