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