synchronous_compositor_client.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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.
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void SetMaxRootLayerScrollOffset(
3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      gfx::Vector2dF max_scroll_offset) = 0;
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual void SetTotalRootLayerScrollOffset(gfx::Vector2dF new_value) = 0;
327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual gfx::Vector2dF GetTotalRootLayerScrollOffset() = 0;
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual bool IsExternalFlingActive() const = 0;
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SetRootLayerPageScaleFactorAndLimits(
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      float page_scale_factor,
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      float min_page_scale_factor,
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      float max_page_scale_factor) = 0;
3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void SetRootLayerScrollableSize(gfx::SizeF scrollable_size) = 0;
3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void DidOverscroll(gfx::Vector2dF accumulated_overscroll,
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                             gfx::Vector2dF latest_overscroll_delta,
427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                             gfx::Vector2dF current_fling_velocity) = 0;
43b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
44b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // When true, should periodically call
45b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // SynchronousCompositorOutputSurface::DemandDrawHw. Note that this value
46b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // can change inside DemandDrawHw call.
47b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  virtual void SetContinuousInvalidate(bool invalidate) = 0;
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
49ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  virtual void DidUpdateContent() = 0;
50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected:
52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  SynchronousCompositorClient() {}
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual ~SynchronousCompositorClient() {}
54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private:
56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SynchronousCompositorClient);
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace content
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif  // CONTENT_PUBLIC_BROWSER_ANDROID_SYNCHRONOUS_COMPOSITOR_CLIENT_H_
62