1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#ifndef CONTENT_PUBLIC_BROWSER_ANDROID_SYNCHRONOUS_COMPOSITOR_CLIENT_H_
6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define CONTENT_PUBLIC_BROWSER_ANDROID_SYNCHRONOUS_COMPOSITOR_CLIENT_H_
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/basictypes.h"
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/gfx/geometry/size_f.h"
107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/gfx/vector2d_f.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace content {
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SynchronousCompositor;
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SynchronousCompositorClient {
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Indication to the client that |compositor| is now initialized on the
19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // compositor thread, and open for business.
20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void DidInitializeCompositor(SynchronousCompositor* compositor) = 0;
21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Indication to the client that |compositor| is going out of scope, and
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // must not be accessed within or after this call.
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // NOTE if the client goes away before the compositor it must call
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // SynchronousCompositor::SetClient(NULL) to release the back pointer.
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void DidDestroyCompositor(SynchronousCompositor* compositor) = 0;
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // See LayerScrollOffsetDelegate for details.
297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual gfx::Vector2dF GetTotalRootLayerScrollOffset() = 0;
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void UpdateRootLayerState(const gfx::Vector2dF& total_scroll_offset,
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                    const gfx::Vector2dF& max_scroll_offset,
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                    const gfx::SizeF& scrollable_size,
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                    float page_scale_factor,
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                    float min_page_scale_factor,
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                    float max_page_scale_factor) = 0;
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual bool IsExternalFlingActive() const = 0;
3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void DidOverscroll(gfx::Vector2dF accumulated_overscroll,
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                             gfx::Vector2dF latest_overscroll_delta,
407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                             gfx::Vector2dF current_fling_velocity) = 0;
41b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
42b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // When true, should periodically call
43b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // SynchronousCompositorOutputSurface::DemandDrawHw. Note that this value
44b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // can change inside DemandDrawHw call.
45b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  virtual void SetContinuousInvalidate(bool invalidate) = 0;
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
47ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  virtual void DidUpdateContent() = 0;
48ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected:
50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SynchronousCompositorClient() {}
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual ~SynchronousCompositorClient() {}
52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private:
54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SynchronousCompositorClient);
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace content
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
59868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif  // CONTENT_PUBLIC_BROWSER_ANDROID_SYNCHRONOUS_COMPOSITOR_CLIENT_H_
60