• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CONTENT_BROWSER_ANDROID_EDGE_EFFECT_H_
6 #define CONTENT_BROWSER_ANDROID_EDGE_EFFECT_H_
7 
8 #include "base/basictypes.h"
9 #include "base/memory/ref_counted.h"
10 #include "base/time/time.h"
11 #include "ui/gfx/size_f.h"
12 
13 namespace cc {
14 class Layer;
15 }
16 
17 namespace content {
18 
19 /* |EdgeEffect| mirrors its Android counterpart, EdgeEffect.java.
20  * The primary difference is ownership; the Android version manages render
21  * resources directly, while this version simply applies the effect to
22  * existing resources. Conscious tradeoffs were made to align this as closely
23  * as possible with the original Android java version.
24  * All coordinates and dimensions are in device pixels.
25  */
26 class EdgeEffect {
27 public:
28   enum Edge {
29     EDGE_TOP = 0,
30     EDGE_LEFT,
31     EDGE_BOTTOM,
32     EDGE_RIGHT,
33     EDGE_COUNT
34   };
35 
36   EdgeEffect(scoped_refptr<cc::Layer> edge, scoped_refptr<cc::Layer> glow);
37   ~EdgeEffect();
38 
39   void Pull(base::TimeTicks current_time, float delta_distance);
40   void Absorb(base::TimeTicks current_time, float velocity);
41   bool Update(base::TimeTicks current_time);
42   void Release(base::TimeTicks current_time);
43 
44   void Finish();
45   bool IsFinished() const;
46 
47   void ApplyToLayers(gfx::SizeF window_size,
48                      Edge edge,
49                      float edge_height,
50                      float glow_height,
51                      float offset);
52 
53 private:
54 
55   enum State {
56     STATE_IDLE = 0,
57     STATE_PULL,
58     STATE_ABSORB,
59     STATE_RECEDE,
60     STATE_PULL_DECAY
61   };
62 
63   scoped_refptr<cc::Layer> edge_;
64   scoped_refptr<cc::Layer> glow_;
65 
66   float edge_alpha_;
67   float edge_scale_y_;
68   float glow_alpha_;
69   float glow_scale_y_;
70 
71   float edge_alpha_start_;
72   float edge_alpha_finish_;
73   float edge_scale_y_start_;
74   float edge_scale_y_finish_;
75   float glow_alpha_start_;
76   float glow_alpha_finish_;
77   float glow_scale_y_start_;
78   float glow_scale_y_finish_;
79 
80   base::TimeTicks start_time_;
81   base::TimeDelta duration_;
82 
83   State state_;
84 
85   float pull_distance_;
86 
87   DISALLOW_COPY_AND_ASSIGN(EdgeEffect);
88 };
89 
90 }  // namespace content
91 
92 #endif  // CONTENT_BROWSER_ANDROID_EDGE_EFFECT_H_
93