11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef MOJO_SERVICES_VIEW_MANAGER_SERVER_VIEW_H_ 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define MOJO_SERVICES_VIEW_MANAGER_SERVER_VIEW_H_ 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <vector> 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/logging.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "cc/surfaces/surface_id.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/services/public/interfaces/view_manager/view_manager.mojom.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/services/view_manager/ids.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/services/view_manager/view_manager_export.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/gfx/geometry/rect.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace mojo { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace service { 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ServerViewDelegate; 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Server side representation of a view. Delegate is informed of interesting 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// events. 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// It is assumed that all functions that mutate the tree have validated the 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// mutation is possible before hand. For example, Reorder() assumes the supplied 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// view is a child and not already in position. 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass MOJO_VIEW_MANAGER_EXPORT ServerView { 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ServerView(ServerViewDelegate* delegate, const ViewId& id); 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~ServerView(); 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ViewId& id() const { return id_; } 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void Add(ServerView* child); 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void Remove(ServerView* child); 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void Reorder(ServerView* child, 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ServerView* relative, 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OrderDirection direction); 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gfx::Rect& bounds() const { return bounds_; } 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetBounds(const gfx::Rect& bounds); 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ServerView* parent() const { return parent_; } 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ServerView* parent() { return parent_; } 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ServerView* GetRoot() const; 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ServerView* GetRoot() { 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return const_cast<ServerView*>( 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const_cast<const ServerView*>(this)->GetRoot()); 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<const ServerView*> GetChildren() const; 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<ServerView*> GetChildren(); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns true if this contains |view| or is |view|. 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool Contains(const ServerView* view) const; 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns true if the window is visible. This does not consider visibility 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // of any ancestors. 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool visible() const { return visible_; } 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetVisible(bool value); 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns true if this view is attached to |root| and all ancestors are 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // visible. 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool IsDrawn(const ServerView* root) const; 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetSurfaceId(cc::SurfaceId surface_id); 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const cc::SurfaceId surface_id() const { return surface_id_; } 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef std::vector<ServerView*> Views; 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Implementation of removing a view. Doesn't send any notification. 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void RemoveImpl(ServerView* view); 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ServerViewDelegate* delegate_; 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ViewId id_; 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ServerView* parent_; 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Views children_; 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool visible_; 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Rect bounds_; 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cc::SurfaceId surface_id_; 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(ServerView); 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace service 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace mojo 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // MOJO_SERVICES_VIEW_MANAGER_SERVER_VIEW_H_ 92