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/shared_impl/ppb_view_shared.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool IsRectNonempty(const PP_Rect& rect) { 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return rect.size.width > 0 && rect.size.height > 0; 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ppapi { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ViewData::ViewData() { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Assume POD. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memset(this, 0, sizeof(ViewData)); 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_scale = 1.0f; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) css_scale = 1.0f; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)ViewData::~ViewData() {} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ViewData::Equals(const ViewData& other) const { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return rect.point.x == other.rect.point.x && 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rect.point.y == other.rect.point.y && 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rect.size.width == other.rect.size.width && 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rect.size.height == other.rect.size.height && 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_fullscreen == other.is_fullscreen && 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_page_visible == other.is_page_visible && 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clip_rect.point.x == other.clip_rect.point.x && 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clip_rect.point.y == other.clip_rect.point.y && 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clip_rect.size.width == other.clip_rect.size.width && 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clip_rect.size.height == other.clip_rect.size.height && 386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) device_scale == other.device_scale && css_scale == other.css_scale && 396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) scroll_offset.x == other.scroll_offset.x && 406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) scroll_offset.y == other.scroll_offset.y; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PPB_View_Shared::PPB_View_Shared(ResourceObjectType type, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Instance instance, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ViewData& data) 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : Resource(type, instance), data_(data) {} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)PPB_View_Shared::~PPB_View_Shared() {} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)thunk::PPB_View_API* PPB_View_Shared::AsPPB_View_API() { return this; } 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const ViewData& PPB_View_Shared::GetData() const { return data_; } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Bool PPB_View_Shared::GetRect(PP_Rect* viewport) const { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!viewport) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PP_FALSE; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *viewport = data_.rect; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PP_TRUE; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Bool PPB_View_Shared::IsFullscreen() const { 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PP_FromBool(data_.is_fullscreen); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Bool PPB_View_Shared::IsVisible() const { 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PP_FromBool(data_.is_page_visible && IsRectNonempty(data_.clip_rect)); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Bool PPB_View_Shared::IsPageVisible() const { 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PP_FromBool(data_.is_page_visible); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PP_Bool PPB_View_Shared::GetClipRect(PP_Rect* clip) const { 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!clip) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PP_FALSE; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *clip = data_.clip_rect; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PP_TRUE; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)float PPB_View_Shared::GetDeviceScale() const { return data_.device_scale; } 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)float PPB_View_Shared::GetCSSScale() const { return data_.css_scale; } 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 846d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)PP_Bool PPB_View_Shared::GetScrollOffset(PP_Point* scroll_offset) const { 856d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (!scroll_offset) 866d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return PP_FALSE; 876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) *scroll_offset = data_.scroll_offset; 886d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return PP_TRUE; 896d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 906d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ppapi 92