15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/view.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_view.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/module_impl.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace pp {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> const char* interface_name<PPB_View_1_0>() {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PPB_VIEW_INTERFACE_1_0;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)template <> const char* interface_name<PPB_View_1_1>() {
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return PPB_VIEW_INTERFACE_1_1;
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)template <> const char* interface_name<PPB_View_1_2>() {
236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  return PPB_VIEW_INTERFACE_1_2;
246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)View::View() : Resource() {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)View::View(PP_Resource view_resource) : Resource(view_resource) {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Rect View::GetRect() const {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Rect out;
366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  if (has_interface<PPB_View_1_2>()) {
376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    if (PP_ToBool(get_interface<PPB_View_1_2>()->GetRect(pp_resource(), &out)))
386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      return Rect(out);
396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  } else if (has_interface<PPB_View_1_1>()) {
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (PP_ToBool(get_interface<PPB_View_1_1>()->GetRect(pp_resource(), &out)))
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return Rect(out);
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  } else if (has_interface<PPB_View_1_0>()) {
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (PP_ToBool(get_interface<PPB_View_1_0>()->GetRect(pp_resource(), &out)))
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return Rect(out);
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return Rect();
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool View::IsFullscreen() const {
506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  if (has_interface<PPB_View_1_2>()) {
516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    return PP_ToBool(get_interface<PPB_View_1_2>()->IsFullscreen(
526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        pp_resource()));
536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  } else if (has_interface<PPB_View_1_1>()) {
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return PP_ToBool(get_interface<PPB_View_1_1>()->IsFullscreen(
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        pp_resource()));
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  } else if (has_interface<PPB_View_1_0>()) {
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return PP_ToBool(get_interface<PPB_View_1_0>()->IsFullscreen(
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        pp_resource()));
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return false;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool View::IsVisible() const {
646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  if (has_interface<PPB_View_1_2>())
656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    return PP_ToBool(get_interface<PPB_View_1_2>()->IsVisible(pp_resource()));
666d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  else if (has_interface<PPB_View_1_1>())
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return PP_ToBool(get_interface<PPB_View_1_1>()->IsVisible(pp_resource()));
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  else if (has_interface<PPB_View_1_0>())
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return PP_ToBool(get_interface<PPB_View_1_0>()->IsVisible(pp_resource()));
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return false;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool View::IsPageVisible() const {
746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  if (has_interface<PPB_View_1_2>()) {
756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    return PP_ToBool(get_interface<PPB_View_1_2>()->IsPageVisible(
766d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        pp_resource()));
776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  } else if (has_interface<PPB_View_1_1>()) {
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return PP_ToBool(get_interface<PPB_View_1_1>()->IsPageVisible(
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        pp_resource()));
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  } else if (has_interface<PPB_View_1_0>()) {
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return PP_ToBool(get_interface<PPB_View_1_0>()->IsPageVisible(
82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        pp_resource()));
83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return true;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Rect View::GetClipRect() const {
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Rect out;
896d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  if (has_interface<PPB_View_1_2>()) {
906d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    if (PP_ToBool(get_interface<PPB_View_1_2>()->GetClipRect(pp_resource(),
916d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                                                             &out)))
926d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      return Rect(out);
936d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  } else if (has_interface<PPB_View_1_1>()) {
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (PP_ToBool(get_interface<PPB_View_1_1>()->GetClipRect(pp_resource(),
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                                             &out)))
96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return Rect(out);
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  } else if (has_interface<PPB_View_1_0>()) {
98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (PP_ToBool(get_interface<PPB_View_1_0>()->GetClipRect(pp_resource(),
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                                             &out)))
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return Rect(out);
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return Rect();
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)float View::GetDeviceScale() const {
1066d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  if (has_interface<PPB_View_1_2>())
1076d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    return get_interface<PPB_View_1_2>()->GetDeviceScale(pp_resource());
1086d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  else if (has_interface<PPB_View_1_1>())
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return get_interface<PPB_View_1_1>()->GetDeviceScale(pp_resource());
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return 1.0f;
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)float View::GetCSSScale() const {
1146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  if (has_interface<PPB_View_1_2>())
1156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    return get_interface<PPB_View_1_2>()->GetCSSScale(pp_resource());
1166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  else if (has_interface<PPB_View_1_1>())
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return get_interface<PPB_View_1_1>()->GetCSSScale(pp_resource());
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return 1.0f;
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)Point View::GetScrollOffset() const {
1226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  PP_Point out;
1236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  if (has_interface<PPB_View_1_2>()) {
1246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    if (PP_ToBool(get_interface<PPB_View_1_2>()->GetScrollOffset(pp_resource(),
1256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                                                                 &out))) {
1266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      return Point(out);
1276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    }
1286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  }
1296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  return Point();
1306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
1316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace pp
133