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 10 namespace pp { 11 12 namespace { 13 14 template <> const char* interface_name<PPB_View_1_0>() { 15 return PPB_VIEW_INTERFACE_1_0; 16 } 17 18 template <> const char* interface_name<PPB_View_1_1>() { 19 return PPB_VIEW_INTERFACE_1_1; 20 } 21 22 template <> const char* interface_name<PPB_View_1_2>() { 23 return PPB_VIEW_INTERFACE_1_2; 24 } 25 26 } // namespace 27 28 View::View() : Resource() { 29 } 30 31 View::View(PP_Resource view_resource) : Resource(view_resource) { 32 } 33 34 Rect 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 49 bool 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 63 bool 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 73 bool 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 87 Rect 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 105 float 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 113 float 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 121 Point 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