146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file.
446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#ifndef MOJO_EXAMPLES_AURA_DEMO_WINDOW_TREE_HOST_VIEW_MANAGER_H_
646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MOJO_EXAMPLES_AURA_DEMO_WINDOW_TREE_HOST_VIEW_MANAGER_H_
746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "mojo/services/public/cpp/view_manager/view_observer.h"
946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/aura/window_tree_host.h"
1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/events/event_source.h"
1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/gfx/geometry/rect.h"
1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SkBitmap;
14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace ui {
16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class Compositor;
17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace mojo {
2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class WindowTreeHostMojoDelegate;
22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)class WindowTreeHostMojo : public aura::WindowTreeHost,
246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                           public ui::EventSource,
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                           public ViewObserver {
2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public:
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  WindowTreeHostMojo(View* view, WindowTreeHostMojoDelegate* delegate);
28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual ~WindowTreeHostMojo();
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Returns the WindowTreeHostMojo for the specified compositor.
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  static WindowTreeHostMojo* ForCompositor(ui::Compositor* compositor);
3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  const gfx::Rect& bounds() const { return bounds_; }
3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Sets the contents to show in this WindowTreeHost. This forwards to the
36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // delegate.
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  void SetContents(const SkBitmap& contents);
38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  ui::EventDispatchDetails SendEventToProcessor(ui::Event* event) {
40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    return ui::EventSource::SendEventToProcessor(event);
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  }
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private:
4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // WindowTreeHost:
4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual ui::EventSource* GetEventSource() OVERRIDE;
4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE;
4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void Show() OVERRIDE;
4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void Hide() OVERRIDE;
4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual gfx::Rect GetBounds() const OVERRIDE;
5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE;
5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual gfx::Point GetLocationOnNativeScreen() const OVERRIDE;
5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void SetCapture() OVERRIDE;
5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void ReleaseCapture() OVERRIDE;
5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void PostNativeEvent(const base::NativeEvent& native_event) OVERRIDE;
5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void SetCursorNative(gfx::NativeCursor cursor) OVERRIDE;
5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void MoveCursorToNative(const gfx::Point& location) OVERRIDE;
5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void OnCursorVisibilityChangedNative(bool show) OVERRIDE;
5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // ui::EventSource:
6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual ui::EventProcessor* GetEventProcessor() OVERRIDE;
6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // ViewObserver:
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void OnViewBoundsChanged(
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      View* view,
656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      const gfx::Rect& old_bounds,
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const gfx::Rect& new_bounds) OVERRIDE;
676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  View* view_;
696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  gfx::Rect bounds_;
7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  WindowTreeHostMojoDelegate* delegate_;
73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WindowTreeHostMojo);
7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)};
7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}  // namespace mojo
7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif  // MOJO_EXAMPLES_AURA_DEMO_WINDOW_TREE_HOST_VIEW_MANAGER_H_
80