CubicBezierInterpolator.smali
.class public Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;
.super Ljava/lang/Object;
.source "CubicBezierInterpolator.java"
# interfaces
.implements Landroid/view/animation/Interpolator;
# static fields
.field public static final DEFAULT:Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;
.field public static final EASE_BOTH:Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;
.field public static final EASE_IN:Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;
.field public static final EASE_OUT:Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;
.field public static final EASE_OUT_QUINT:Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;
# instance fields
.field protected a:Landroid/graphics/PointF;
.field protected b:Landroid/graphics/PointF;
.field protected c:Landroid/graphics/PointF;
.field protected end:Landroid/graphics/PointF;
.field protected start:Landroid/graphics/PointF;
# direct methods
.method static constructor <clinit>()V
.registers 19
.line 8
new-instance v9, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;
const-wide/high16 v1, 0x3fd0000000000000L # 0.25
const-wide v3, 0x3fb999999999999aL # 0.1
const-wide/high16 v5, 0x3fd0000000000000L # 0.25
const-wide/high16 v7, 0x3ff0000000000000L # 1.0
move-object v0, v9
invoke-direct/range {v0 .. v8}, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;-><init>(DDDD)V
sput-object v9, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->DEFAULT:Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;
.line 9
new-instance v0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;
const-wide/16 v11, 0x0
const-wide/16 v13, 0x0
const-wide v15, 0x3fe28f5c28f5c28fL # 0.58
const-wide/high16 v17, 0x3ff0000000000000L # 1.0
move-object v10, v0
invoke-direct/range {v10 .. v18}, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;-><init>(DDDD)V
sput-object v0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->EASE_OUT:Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;
.line 10
new-instance v0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;
const-wide v2, 0x3fcd70a3d70a3d71L # 0.23
const-wide/high16 v4, 0x3ff0000000000000L # 1.0
const-wide v6, 0x3fd47ae147ae147bL # 0.32
const-wide/high16 v8, 0x3ff0000000000000L # 1.0
move-object v1, v0
invoke-direct/range {v1 .. v9}, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;-><init>(DDDD)V
sput-object v0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->EASE_OUT_QUINT:Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;
.line 11
new-instance v0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;
const-wide v11, 0x3fdae147ae147ae1L # 0.42
const-wide/high16 v15, 0x3ff0000000000000L # 1.0
move-object v10, v0
invoke-direct/range {v10 .. v18}, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;-><init>(DDDD)V
sput-object v0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->EASE_IN:Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;
.line 12
new-instance v0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;
const-wide v2, 0x3fdae147ae147ae1L # 0.42
const-wide/16 v4, 0x0
const-wide v6, 0x3fe28f5c28f5c28fL # 0.58
move-object v1, v0
invoke-direct/range {v1 .. v9}, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;-><init>(DDDD)V
sput-object v0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->EASE_BOTH:Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;
return-void
.end method
.method public constructor <init>(DDDD)V
.registers 13
.param p1, "startX" # D
.param p3, "startY" # D
.param p5, "endX" # D
.param p7, "endY" # D
.line 36
double-to-float v0, p1
double-to-float v1, p3
double-to-float v2, p5
double-to-float v3, p7
invoke-direct {p0, v0, v1, v2, v3}, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;-><init>(FFFF)V
.line 37
return-void
.end method
.method public constructor <init>(FFFF)V
.registers 7
.param p1, "startX" # F
.param p2, "startY" # F
.param p3, "endX" # F
.param p4, "endY" # F
.line 32
new-instance v0, Landroid/graphics/PointF;
invoke-direct {v0, p1, p2}, Landroid/graphics/PointF;-><init>(FF)V
new-instance v1, Landroid/graphics/PointF;
invoke-direct {v1, p3, p4}, Landroid/graphics/PointF;-><init>(FF)V
invoke-direct {p0, v0, v1}, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;-><init>(Landroid/graphics/PointF;Landroid/graphics/PointF;)V
.line 33
return-void
.end method
.method public constructor <init>(Landroid/graphics/PointF;Landroid/graphics/PointF;)V
.registers 6
.param p1, "start" # Landroid/graphics/PointF;
.param p2, "end" # Landroid/graphics/PointF;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/IllegalArgumentException;
}
.end annotation
.line 20
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 16
new-instance v0, Landroid/graphics/PointF;
invoke-direct {v0}, Landroid/graphics/PointF;-><init>()V
iput-object v0, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->a:Landroid/graphics/PointF;
.line 17
new-instance v0, Landroid/graphics/PointF;
invoke-direct {v0}, Landroid/graphics/PointF;-><init>()V
iput-object v0, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->b:Landroid/graphics/PointF;
.line 18
new-instance v0, Landroid/graphics/PointF;
invoke-direct {v0}, Landroid/graphics/PointF;-><init>()V
iput-object v0, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->c:Landroid/graphics/PointF;
.line 21
iget v0, p1, Landroid/graphics/PointF;->x:F
const/4 v1, 0x0
cmpg-float v0, v0, v1
if-ltz v0, :cond_40
iget v0, p1, Landroid/graphics/PointF;->x:F
const/high16 v2, 0x3f800000 # 1.0f
cmpl-float v0, v0, v2
if-gtz v0, :cond_40
.line 24
iget v0, p2, Landroid/graphics/PointF;->x:F
cmpg-float v0, v0, v1
if-ltz v0, :cond_38
iget v0, p2, Landroid/graphics/PointF;->x:F
cmpl-float v0, v0, v2
if-gtz v0, :cond_38
.line 27
iput-object p1, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->start:Landroid/graphics/PointF;
.line 28
iput-object p2, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->end:Landroid/graphics/PointF;
.line 29
return-void
.line 25
:cond_38
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "endX value must be in the range [0, 1]"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 22
:cond_40
new-instance v0, Ljava/lang/IllegalArgumentException;
const-string v1, "startX value must be in the range [0, 1]"
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method private getBezierCoordinateX(F)F
.registers 6
.param p1, "time" # F
.line 69
iget-object v0, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->c:Landroid/graphics/PointF;
iget-object v1, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->start:Landroid/graphics/PointF;
iget v1, v1, Landroid/graphics/PointF;->x:F
const/high16 v2, 0x40400000 # 3.0f
mul-float v1, v1, v2
iput v1, v0, Landroid/graphics/PointF;->x:F
.line 70
iget-object v0, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->b:Landroid/graphics/PointF;
iget-object v1, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->end:Landroid/graphics/PointF;
iget v1, v1, Landroid/graphics/PointF;->x:F
iget-object v3, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->start:Landroid/graphics/PointF;
iget v3, v3, Landroid/graphics/PointF;->x:F
sub-float/2addr v1, v3
mul-float v1, v1, v2
iget-object v2, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->c:Landroid/graphics/PointF;
iget v2, v2, Landroid/graphics/PointF;->x:F
sub-float/2addr v1, v2
iput v1, v0, Landroid/graphics/PointF;->x:F
.line 71
iget-object v0, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->a:Landroid/graphics/PointF;
iget-object v1, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->c:Landroid/graphics/PointF;
iget v1, v1, Landroid/graphics/PointF;->x:F
const/high16 v2, 0x3f800000 # 1.0f
sub-float/2addr v2, v1
iget-object v1, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->b:Landroid/graphics/PointF;
iget v1, v1, Landroid/graphics/PointF;->x:F
sub-float/2addr v2, v1
iput v2, v0, Landroid/graphics/PointF;->x:F
.line 72
iget-object v0, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->c:Landroid/graphics/PointF;
iget v0, v0, Landroid/graphics/PointF;->x:F
iget-object v1, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->b:Landroid/graphics/PointF;
iget v1, v1, Landroid/graphics/PointF;->x:F
iget-object v2, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->a:Landroid/graphics/PointF;
iget v2, v2, Landroid/graphics/PointF;->x:F
mul-float v2, v2, p1
add-float/2addr v1, v2
mul-float v1, v1, p1
add-float/2addr v0, v1
mul-float v0, v0, p1
return v0
.end method
.method private getXDerivate(F)F
.registers 6
.param p1, "t" # F
.line 65
iget-object v0, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->c:Landroid/graphics/PointF;
iget v0, v0, Landroid/graphics/PointF;->x:F
iget-object v1, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->b:Landroid/graphics/PointF;
iget v1, v1, Landroid/graphics/PointF;->x:F
const/high16 v2, 0x40000000 # 2.0f
mul-float v1, v1, v2
iget-object v2, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->a:Landroid/graphics/PointF;
iget v2, v2, Landroid/graphics/PointF;->x:F
const/high16 v3, 0x40400000 # 3.0f
mul-float v2, v2, v3
mul-float v2, v2, p1
add-float/2addr v1, v2
mul-float v1, v1, p1
add-float/2addr v0, v1
return v0
.end method
# virtual methods
.method protected getBezierCoordinateY(F)F
.registers 6
.param p1, "time" # F
.line 45
iget-object v0, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->c:Landroid/graphics/PointF;
iget-object v1, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->start:Landroid/graphics/PointF;
iget v1, v1, Landroid/graphics/PointF;->y:F
const/high16 v2, 0x40400000 # 3.0f
mul-float v1, v1, v2
iput v1, v0, Landroid/graphics/PointF;->y:F
.line 46
iget-object v0, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->b:Landroid/graphics/PointF;
iget-object v1, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->end:Landroid/graphics/PointF;
iget v1, v1, Landroid/graphics/PointF;->y:F
iget-object v3, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->start:Landroid/graphics/PointF;
iget v3, v3, Landroid/graphics/PointF;->y:F
sub-float/2addr v1, v3
mul-float v1, v1, v2
iget-object v2, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->c:Landroid/graphics/PointF;
iget v2, v2, Landroid/graphics/PointF;->y:F
sub-float/2addr v1, v2
iput v1, v0, Landroid/graphics/PointF;->y:F
.line 47
iget-object v0, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->a:Landroid/graphics/PointF;
iget-object v1, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->c:Landroid/graphics/PointF;
iget v1, v1, Landroid/graphics/PointF;->y:F
const/high16 v2, 0x3f800000 # 1.0f
sub-float/2addr v2, v1
iget-object v1, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->b:Landroid/graphics/PointF;
iget v1, v1, Landroid/graphics/PointF;->y:F
sub-float/2addr v2, v1
iput v2, v0, Landroid/graphics/PointF;->y:F
.line 48
iget-object v0, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->c:Landroid/graphics/PointF;
iget v0, v0, Landroid/graphics/PointF;->y:F
iget-object v1, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->b:Landroid/graphics/PointF;
iget v1, v1, Landroid/graphics/PointF;->y:F
iget-object v2, p0, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->a:Landroid/graphics/PointF;
iget v2, v2, Landroid/graphics/PointF;->y:F
mul-float v2, v2, p1
add-float/2addr v1, v2
mul-float v1, v1, p1
add-float/2addr v0, v1
mul-float v0, v0, p1
return v0
.end method
.method public getInterpolation(F)F
.registers 3
.param p1, "time" # F
.line 41
invoke-virtual {p0, p1}, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->getXForTime(F)F
move-result v0
invoke-virtual {p0, v0}, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->getBezierCoordinateY(F)F
move-result v0
return v0
.end method
.method protected getXForTime(F)F
.registers 10
.param p1, "time" # F
.line 52
move v0, p1
.line 54
.local v0, "x":F
const/4 v1, 0x1
.local v1, "i":I
:goto_2
const/16 v2, 0xe
if-ge v1, v2, :cond_24
.line 55
invoke-direct {p0, v0}, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->getBezierCoordinateX(F)F
move-result v2
sub-float/2addr v2, p1
.line 56
.local v2, "z":F
invoke-static {v2}, Ljava/lang/Math;->abs(F)F
move-result v3
float-to-double v3, v3
const-wide v5, 0x3f50624dd2f1a9fcL # 0.001
cmpg-double v7, v3, v5
if-gez v7, :cond_1a
.line 57
goto :goto_24
.line 59
:cond_1a
invoke-direct {p0, v0}, Lim/tpelyyftgw/ui/components/CubicBezierInterpolator;->getXDerivate(F)F
move-result v3
div-float v3, v2, v3
sub-float/2addr v0, v3
.line 54
add-int/lit8 v1, v1, 0x1
goto :goto_2
.line 61
.end local v1 # "i":I
.end local v2 # "z":F
:cond_24
:goto_24
return v0
.end method