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
22}  // namespace
23
24View::View() : Resource() {
25}
26
27View::View(PP_Resource view_resource) : Resource(view_resource) {
28}
29
30Rect View::GetRect() const {
31  PP_Rect out;
32  if (has_interface<PPB_View_1_1>()) {
33    if (PP_ToBool(get_interface<PPB_View_1_1>()->GetRect(pp_resource(), &out)))
34      return Rect(out);
35  } else if (has_interface<PPB_View_1_0>()) {
36    if (PP_ToBool(get_interface<PPB_View_1_0>()->GetRect(pp_resource(), &out)))
37      return Rect(out);
38  }
39  return Rect();
40}
41
42bool View::IsFullscreen() const {
43  if (has_interface<PPB_View_1_1>()) {
44    return PP_ToBool(get_interface<PPB_View_1_1>()->IsFullscreen(
45        pp_resource()));
46  } else if (has_interface<PPB_View_1_0>()) {
47    return PP_ToBool(get_interface<PPB_View_1_0>()->IsFullscreen(
48        pp_resource()));
49  }
50  return false;
51}
52
53bool View::IsVisible() const {
54  if (has_interface<PPB_View_1_1>())
55    return PP_ToBool(get_interface<PPB_View_1_1>()->IsVisible(pp_resource()));
56  else if (has_interface<PPB_View_1_0>())
57    return PP_ToBool(get_interface<PPB_View_1_0>()->IsVisible(pp_resource()));
58  return false;
59}
60
61bool View::IsPageVisible() const {
62  if (has_interface<PPB_View_1_1>()) {
63    return PP_ToBool(get_interface<PPB_View_1_1>()->IsPageVisible(
64        pp_resource()));
65  } else if (has_interface<PPB_View_1_0>()) {
66    return PP_ToBool(get_interface<PPB_View_1_0>()->IsPageVisible(
67        pp_resource()));
68  }
69  return true;
70}
71
72Rect View::GetClipRect() const {
73  PP_Rect out;
74  if (has_interface<PPB_View_1_1>()) {
75    if (PP_ToBool(get_interface<PPB_View_1_1>()->GetClipRect(pp_resource(),
76                                                             &out)))
77      return Rect(out);
78  } else if (has_interface<PPB_View_1_0>()) {
79    if (PP_ToBool(get_interface<PPB_View_1_0>()->GetClipRect(pp_resource(),
80                                                             &out)))
81      return Rect(out);
82  }
83  return Rect();
84}
85
86float View::GetDeviceScale() const {
87  if (has_interface<PPB_View_1_1>())
88    return get_interface<PPB_View_1_1>()->GetDeviceScale(pp_resource());
89  return 1.0f;
90}
91
92float View::GetCSSScale() const {
93  if (has_interface<PPB_View_1_1>())
94    return get_interface<PPB_View_1_1>()->GetCSSScale(pp_resource());
95  return 1.0f;
96}
97
98}  // namespace pp
99