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 */ 25 class EdgeEffect { 26 public: 27 enum Edge { 28 EDGE_TOP = 0, 29 EDGE_LEFT, 30 EDGE_BOTTOM, 31 EDGE_RIGHT, 32 EDGE_COUNT 33 }; 34 35 EdgeEffect(scoped_refptr<cc::Layer> edge, scoped_refptr<cc::Layer> glow); 36 ~EdgeEffect(); 37 38 void Pull(base::TimeTicks current_time, float delta_distance); 39 void Absorb(base::TimeTicks current_time, float velocity); 40 bool Update(base::TimeTicks current_time); 41 void Release(base::TimeTicks current_time); 42 43 void Finish(); 44 bool IsFinished() const; 45 46 void ApplyToLayers(gfx::SizeF size, Edge edge); 47 48 private: 49 50 enum State { 51 STATE_IDLE = 0, 52 STATE_PULL, 53 STATE_ABSORB, 54 STATE_RECEDE, 55 STATE_PULL_DECAY 56 }; 57 58 scoped_refptr<cc::Layer> edge_; 59 scoped_refptr<cc::Layer> glow_; 60 61 float edge_alpha_; 62 float edge_scale_y_; 63 float glow_alpha_; 64 float glow_scale_y_; 65 66 float edge_alpha_start_; 67 float edge_alpha_finish_; 68 float edge_scale_y_start_; 69 float edge_scale_y_finish_; 70 float glow_alpha_start_; 71 float glow_alpha_finish_; 72 float glow_scale_y_start_; 73 float glow_scale_y_finish_; 74 75 base::TimeTicks start_time_; 76 base::TimeDelta duration_; 77 78 State state_; 79 80 float pull_distance_; 81 82 float dpi_scale_; 83 84 DISALLOW_COPY_AND_ASSIGN(EdgeEffect); 85 }; 86 87 } // namespace content 88 89 #endif // CONTENT_BROWSER_ANDROID_EDGE_EFFECT_H_ 90