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