// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_V2_PUBLIC_VIEW_H_ #define UI_V2_PUBLIC_VIEW_H_ #include <vector> #include "base/memory/scoped_ptr.h" #include "base/observer_list.h" #include "ui/compositor/layer_type.h" #include "ui/gfx/rect.h" #include "ui/v2/public/layout.h" #include "ui/v2/public/painter.h" #include "ui/v2/public/v2_export.h" namespace ui { class Layer; } namespace v2 { class Layout; class Painter; class ViewObserver; class ViewLayerOwner; class V2_EXPORT View /* : public EventTarget */ { public: typedef std::vector<View*> Children; View(); virtual ~View(); // Configuration. void set_owned_by_parent(bool owned_by_parent) { owned_by_parent_ = owned_by_parent; } // View takes ownership. void SetPainter(Painter* painter); // See documentation in layout.h. A layout manager's rules apply to this // View's children. // View takes ownership. void SetLayout(Layout* layout); // Observation. void AddObserver(ViewObserver* observer); void RemoveObserver(ViewObserver* observer); // Disposition. void SetBounds(const gfx::Rect& bounds); gfx::Rect bounds() const { return bounds_; } void SetVisible(bool visible); bool visible() const { return visible_; } // Tree. View* parent() { return parent_; } const View* parent() const { return parent_; } const Children& children() const { return children_; } void AddChild(View* child); void RemoveChild(View* child); bool Contains(View* child) const; void StackChildAtTop(View* child); void StackChildAtBottom(View* child); void StackChildAbove(View* child, View* other); void StackChildBelow(View* child, View* other); // Layer. inline const ui::Layer* layer() const; inline ui::Layer* layer(); bool HasLayer() const; void CreateLayer(ui::LayerType layer_type); void DestroyLayer(); ui::Layer* AcquireLayer(); private: friend class ViewPrivate; // Disposition attributes. gfx::Rect bounds_; bool visible_; scoped_ptr<Painter> painter_; scoped_ptr<Layout> layout_; // Tree. bool owned_by_parent_; View* parent_; Children children_; // Layer. scoped_ptr<ViewLayerOwner> layer_owner_; ObserverList<ViewObserver> observers_; DISALLOW_COPY_AND_ASSIGN(View); }; } // namespace v2 #endif // UI_V2_PUBLIC_VIEW_H_