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/memory/scoped_ptr.h" 9 #include "content/browser/android/edge_effect_base.h" 10 11 namespace cc { 12 class Layer; 13 } 14 15 namespace ui { 16 class SystemUIResourceManager; 17 } 18 19 namespace content { 20 21 // |EdgeEffect| mirrors its Android counterpart, EdgeEffect.java. 22 // Conscious tradeoffs were made to align this as closely as possible with the 23 // the original Android java version. 24 // All coordinates and dimensions are in device pixels. 25 class EdgeEffect : public EdgeEffectBase { 26 public: 27 explicit EdgeEffect(ui::SystemUIResourceManager* resource_manager, 28 float device_scale_factor); 29 virtual ~EdgeEffect(); 30 31 virtual void Pull(base::TimeTicks current_time, 32 float delta_distance, 33 float displacement) OVERRIDE; 34 virtual void Absorb(base::TimeTicks current_time, float velocity) OVERRIDE; 35 virtual bool Update(base::TimeTicks current_time) OVERRIDE; 36 virtual void Release(base::TimeTicks current_time) OVERRIDE; 37 38 virtual void Finish() OVERRIDE; 39 virtual bool IsFinished() const OVERRIDE; 40 41 virtual void ApplyToLayers(const gfx::SizeF& size, 42 const gfx::Transform& transform) OVERRIDE; 43 virtual void SetParent(cc::Layer* parent) OVERRIDE; 44 45 // Thread-safe trigger to load resources. 46 static void PreloadResources(ui::SystemUIResourceManager* resource_manager); 47 48 private: 49 class EffectLayer; 50 scoped_ptr<EffectLayer> edge_; 51 scoped_ptr<EffectLayer> glow_; 52 53 float base_edge_height_; 54 float base_glow_height_; 55 56 float edge_alpha_; 57 float edge_scale_y_; 58 float glow_alpha_; 59 float glow_scale_y_; 60 61 float edge_alpha_start_; 62 float edge_alpha_finish_; 63 float edge_scale_y_start_; 64 float edge_scale_y_finish_; 65 float glow_alpha_start_; 66 float glow_alpha_finish_; 67 float glow_scale_y_start_; 68 float glow_scale_y_finish_; 69 70 base::TimeTicks start_time_; 71 base::TimeDelta duration_; 72 73 State state_; 74 75 float pull_distance_; 76 77 DISALLOW_COPY_AND_ASSIGN(EdgeEffect); 78 }; 79 80 } // namespace content 81 82 #endif // CONTENT_BROWSER_ANDROID_EDGE_EFFECT_H_ 83