10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
20529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Use of this source code is governed by a BSD-style license that can be
30529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// found in the LICENSE file.
40529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#ifndef MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_H_
60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#define MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_H_
70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/basictypes.h"
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/observer_list.h"
10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "mojo/services/public/cpp/view_manager/types.h"
1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "third_party/skia/include/core/SkColor.h"
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class SkBitmap;
140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace mojo {
160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace view_manager {
170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class Node;
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class ViewManager;
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class ViewObserver;
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Views are owned by the ViewManager.
230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass View {
240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch public:
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  static View* Create(ViewManager* manager);
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void Destroy();
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  Id id() const { return id_; }
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  Node* node() { return node_; }
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void AddObserver(ViewObserver* observer);
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void RemoveObserver(ViewObserver* observer);
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // TODO(beng): temporary only.
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void SetContents(const SkBitmap& contents);
3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void SetColor(SkColor color);
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch private:
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  friend class ViewPrivate;
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  explicit View(ViewManager* manager);
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  View();
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ~View();
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void LocalDestroy();
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  Id id_;
49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  Node* node_;
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ViewManager* manager_;
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ObserverList<ViewObserver> observers_;
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  DISALLOW_COPY_AND_ASSIGN(View);
550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch};
560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}  // namespace view_manager
580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}  // namespace mojo
590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif  // MOJO_SERVICES_PUBLIC_CPP_VIEW_MANAGER_VIEW_H_
61