Home | History | Annotate | Download | only in android
      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