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