PhotoFace.smali

.class public Lim/tpelyyftgw/ui/components/paint/PhotoFace;
.super Ljava/lang/Object;
.source "PhotoFace.java"


# instance fields
.field private angle:F

.field private chinPoint:Lim/tpelyyftgw/ui/components/Point;

.field private eyesCenterPoint:Lim/tpelyyftgw/ui/components/Point;

.field private eyesDistance:F

.field private foreheadPoint:Lim/tpelyyftgw/ui/components/Point;

.field private mouthPoint:Lim/tpelyyftgw/ui/components/Point;

.field private width:F


# direct methods
.method static constructor <clinit>()V
    .registers 1

    return-void
.end method

.method public constructor <init>(Lcom/google/android/gms/vision/face/Face;Landroid/graphics/Bitmap;Lim/tpelyyftgw/ui/components/Size;Z)V
    .registers 21
    .param p1, "face"    # Lcom/google/android/gms/vision/face/Face;
    .param p2, "sourceBitmap"    # Landroid/graphics/Bitmap;
    .param p3, "targetSize"    # Lim/tpelyyftgw/ui/components/Size;
    .param p4, "sideward"    # Z

    .line 27
    move-object/from16 v0, p0

    move-object/from16 v1, p2

    move-object/from16 v2, p3

    move/from16 v3, p4

    invoke-direct/range {p0 .. p0}, Ljava/lang/Object;-><init>()V

    .line 28
    invoke-virtual/range {p1 .. p1}, Lcom/google/android/gms/vision/face/Face;->getLandmarks()Ljava/util/List;

    move-result-object v4

    .line 30
    .local v4, "landmarks":Ljava/util/List;, "Ljava/util/List<Lcom/google/android/gms/vision/face/Landmark;>;"
    const/4 v5, 0x0

    .line 31
    .local v5, "leftEyePoint":Lim/tpelyyftgw/ui/components/Point;
    const/4 v6, 0x0

    .line 33
    .local v6, "rightEyePoint":Lim/tpelyyftgw/ui/components/Point;
    const/4 v7, 0x0

    .line 34
    .local v7, "leftMouthPoint":Lim/tpelyyftgw/ui/components/Point;
    const/4 v8, 0x0

    .line 36
    .local v8, "rightMouthPoint":Lim/tpelyyftgw/ui/components/Point;
    invoke-interface {v4}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v9

    :goto_17
    invoke-interface {v9}, Ljava/util/Iterator;->hasNext()Z

    move-result v10

    if-eqz v10, :cond_4f

    invoke-interface {v9}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v10

    check-cast v10, Lcom/google/android/gms/vision/face/Landmark;

    .line 37
    .local v10, "landmark":Lcom/google/android/gms/vision/face/Landmark;
    invoke-virtual {v10}, Lcom/google/android/gms/vision/face/Landmark;->getPosition()Landroid/graphics/PointF;

    move-result-object v11

    .line 39
    .local v11, "point":Landroid/graphics/PointF;
    invoke-virtual {v10}, Lcom/google/android/gms/vision/face/Landmark;->getType()I

    move-result v12

    const/4 v13, 0x4

    if-eq v12, v13, :cond_49

    const/4 v13, 0x5

    if-eq v12, v13, :cond_44

    const/16 v13, 0xa

    if-eq v12, v13, :cond_3f

    const/16 v13, 0xb

    if-eq v12, v13, :cond_3a

    goto :goto_4e

    .line 56
    :cond_3a
    invoke-direct {v0, v11, v1, v2, v3}, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->transposePoint(Landroid/graphics/PointF;Landroid/graphics/Bitmap;Lim/tpelyyftgw/ui/components/Size;Z)Lim/tpelyyftgw/ui/components/Point;

    move-result-object v8

    goto :goto_4e

    .line 46
    :cond_3f
    invoke-direct {v0, v11, v1, v2, v3}, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->transposePoint(Landroid/graphics/PointF;Landroid/graphics/Bitmap;Lim/tpelyyftgw/ui/components/Size;Z)Lim/tpelyyftgw/ui/components/Point;

    move-result-object v6

    .line 48
    goto :goto_4e

    .line 51
    :cond_44
    invoke-direct {v0, v11, v1, v2, v3}, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->transposePoint(Landroid/graphics/PointF;Landroid/graphics/Bitmap;Lim/tpelyyftgw/ui/components/Size;Z)Lim/tpelyyftgw/ui/components/Point;

    move-result-object v7

    .line 53
    goto :goto_4e

    .line 41
    :cond_49
    invoke-direct {v0, v11, v1, v2, v3}, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->transposePoint(Landroid/graphics/PointF;Landroid/graphics/Bitmap;Lim/tpelyyftgw/ui/components/Size;Z)Lim/tpelyyftgw/ui/components/Point;

    move-result-object v5

    .line 43
    nop

    .line 60
    .end local v10    # "landmark":Lcom/google/android/gms/vision/face/Landmark;
    .end local v11    # "point":Landroid/graphics/PointF;
    :goto_4e
    goto :goto_17

    .line 62
    :cond_4f
    const/high16 v10, 0x3f000000    # 0.5f

    if-eqz v5, :cond_e1

    if-eqz v6, :cond_e1

    .line 63
    iget v11, v5, Lim/tpelyyftgw/ui/components/Point;->x:F

    iget v12, v6, Lim/tpelyyftgw/ui/components/Point;->x:F

    cmpg-float v11, v11, v12

    if-gez v11, :cond_60

    .line 64
    move-object v11, v5

    .line 65
    .local v11, "temp":Lim/tpelyyftgw/ui/components/Point;
    move-object v5, v6

    .line 66
    move-object v6, v11

    .line 68
    .end local v11    # "temp":Lim/tpelyyftgw/ui/components/Point;
    :cond_60
    new-instance v11, Lim/tpelyyftgw/ui/components/Point;

    iget v12, v5, Lim/tpelyyftgw/ui/components/Point;->x:F

    mul-float v12, v12, v10

    iget v13, v6, Lim/tpelyyftgw/ui/components/Point;->x:F

    mul-float v13, v13, v10

    add-float/2addr v12, v13

    iget v13, v5, Lim/tpelyyftgw/ui/components/Point;->y:F

    mul-float v13, v13, v10

    iget v14, v6, Lim/tpelyyftgw/ui/components/Point;->y:F

    mul-float v14, v14, v10

    add-float/2addr v13, v14

    invoke-direct {v11, v12, v13}, Lim/tpelyyftgw/ui/components/Point;-><init>(FF)V

    iput-object v11, v0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->eyesCenterPoint:Lim/tpelyyftgw/ui/components/Point;

    .line 70
    iget v11, v6, Lim/tpelyyftgw/ui/components/Point;->x:F

    iget v12, v5, Lim/tpelyyftgw/ui/components/Point;->x:F

    sub-float/2addr v11, v12

    float-to-double v11, v11

    iget v13, v6, Lim/tpelyyftgw/ui/components/Point;->y:F

    iget v14, v5, Lim/tpelyyftgw/ui/components/Point;->y:F

    sub-float/2addr v13, v14

    float-to-double v13, v13

    invoke-static {v11, v12, v13, v14}, Ljava/lang/Math;->hypot(DD)D

    move-result-wide v11

    double-to-float v11, v11

    iput v11, v0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->eyesDistance:F

    .line 71
    const-wide v11, 0x400921fb54442d18L    # Math.PI

    iget v13, v6, Lim/tpelyyftgw/ui/components/Point;->y:F

    iget v14, v5, Lim/tpelyyftgw/ui/components/Point;->y:F

    sub-float/2addr v13, v14

    float-to-double v13, v13

    iget v15, v6, Lim/tpelyyftgw/ui/components/Point;->x:F

    iget v10, v5, Lim/tpelyyftgw/ui/components/Point;->x:F

    sub-float/2addr v15, v10

    float-to-double v9, v15

    invoke-static {v13, v14, v9, v10}, Ljava/lang/Math;->atan2(DD)D

    move-result-wide v9

    add-double/2addr v9, v11

    invoke-static {v9, v10}, Ljava/lang/Math;->toDegrees(D)D

    move-result-wide v9

    double-to-float v9, v9

    iput v9, v0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->angle:F

    .line 73
    iget v10, v0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->eyesDistance:F

    const v11, 0x40166666    # 2.35f

    mul-float v11, v11, v10

    iput v11, v0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->width:F

    .line 75
    const v11, 0x3f4ccccd    # 0.8f

    mul-float v10, v10, v11

    .line 76
    .local v10, "foreheadHeight":F
    const/high16 v11, 0x42b40000    # 90.0f

    sub-float/2addr v9, v11

    float-to-double v11, v9

    invoke-static {v11, v12}, Ljava/lang/Math;->toRadians(D)D

    move-result-wide v11

    double-to-float v9, v11

    .line 77
    .local v9, "upAngle":F
    new-instance v11, Lim/tpelyyftgw/ui/components/Point;

    iget-object v12, v0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->eyesCenterPoint:Lim/tpelyyftgw/ui/components/Point;

    iget v12, v12, Lim/tpelyyftgw/ui/components/Point;->x:F

    float-to-double v13, v9

    invoke-static {v13, v14}, Ljava/lang/Math;->cos(D)D

    move-result-wide v13

    double-to-float v13, v13

    mul-float v13, v13, v10

    add-float/2addr v12, v13

    iget-object v13, v0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->eyesCenterPoint:Lim/tpelyyftgw/ui/components/Point;

    iget v13, v13, Lim/tpelyyftgw/ui/components/Point;->y:F

    float-to-double v14, v9

    .line 78
    invoke-static {v14, v15}, Ljava/lang/Math;->sin(D)D

    move-result-wide v14

    double-to-float v14, v14

    mul-float v14, v14, v10

    add-float/2addr v13, v14

    invoke-direct {v11, v12, v13}, Lim/tpelyyftgw/ui/components/Point;-><init>(FF)V

    iput-object v11, v0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->foreheadPoint:Lim/tpelyyftgw/ui/components/Point;

    .line 81
    .end local v9    # "upAngle":F
    .end local v10    # "foreheadHeight":F
    :cond_e1
    if-eqz v7, :cond_13e

    if-eqz v8, :cond_13e

    .line 82
    iget v9, v7, Lim/tpelyyftgw/ui/components/Point;->x:F

    iget v10, v8, Lim/tpelyyftgw/ui/components/Point;->x:F

    cmpg-float v9, v9, v10

    if-gez v9, :cond_f0

    .line 83
    move-object v9, v7

    .line 84
    .local v9, "temp":Lim/tpelyyftgw/ui/components/Point;
    move-object v7, v8

    .line 85
    move-object v8, v9

    .line 87
    .end local v9    # "temp":Lim/tpelyyftgw/ui/components/Point;
    :cond_f0
    new-instance v9, Lim/tpelyyftgw/ui/components/Point;

    iget v10, v7, Lim/tpelyyftgw/ui/components/Point;->x:F

    const/high16 v11, 0x3f000000    # 0.5f

    mul-float v10, v10, v11

    iget v12, v8, Lim/tpelyyftgw/ui/components/Point;->x:F

    mul-float v12, v12, v11

    add-float/2addr v10, v12

    iget v12, v7, Lim/tpelyyftgw/ui/components/Point;->y:F

    mul-float v12, v12, v11

    iget v13, v8, Lim/tpelyyftgw/ui/components/Point;->y:F

    mul-float v13, v13, v11

    add-float/2addr v12, v13

    invoke-direct {v9, v10, v12}, Lim/tpelyyftgw/ui/components/Point;-><init>(FF)V

    iput-object v9, v0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->mouthPoint:Lim/tpelyyftgw/ui/components/Point;

    .line 90
    const v9, 0x3f333333    # 0.7f

    iget v10, v0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->eyesDistance:F

    mul-float v10, v10, v9

    .line 91
    .local v10, "chinDepth":F
    iget v9, v0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->angle:F

    const/high16 v11, 0x42b40000    # 90.0f

    add-float/2addr v9, v11

    float-to-double v11, v9

    invoke-static {v11, v12}, Ljava/lang/Math;->toRadians(D)D

    move-result-wide v11

    double-to-float v9, v11

    .line 92
    .local v9, "downAngle":F
    new-instance v11, Lim/tpelyyftgw/ui/components/Point;

    iget-object v12, v0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->mouthPoint:Lim/tpelyyftgw/ui/components/Point;

    iget v12, v12, Lim/tpelyyftgw/ui/components/Point;->x:F

    float-to-double v13, v9

    invoke-static {v13, v14}, Ljava/lang/Math;->cos(D)D

    move-result-wide v13

    double-to-float v13, v13

    mul-float v13, v13, v10

    add-float/2addr v12, v13

    iget-object v13, v0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->mouthPoint:Lim/tpelyyftgw/ui/components/Point;

    iget v13, v13, Lim/tpelyyftgw/ui/components/Point;->y:F

    float-to-double v14, v9

    .line 93
    invoke-static {v14, v15}, Ljava/lang/Math;->sin(D)D

    move-result-wide v14

    double-to-float v14, v14

    mul-float v14, v14, v10

    add-float/2addr v13, v14

    invoke-direct {v11, v12, v13}, Lim/tpelyyftgw/ui/components/Point;-><init>(FF)V

    iput-object v11, v0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->chinPoint:Lim/tpelyyftgw/ui/components/Point;

    .line 95
    .end local v9    # "downAngle":F
    .end local v10    # "chinDepth":F
    :cond_13e
    return-void
.end method

.method private transposePoint(Landroid/graphics/PointF;Landroid/graphics/Bitmap;Lim/tpelyyftgw/ui/components/Size;Z)Lim/tpelyyftgw/ui/components/Point;
    .registers 11
    .param p1, "point"    # Landroid/graphics/PointF;
    .param p2, "sourceBitmap"    # Landroid/graphics/Bitmap;
    .param p3, "targetSize"    # Lim/tpelyyftgw/ui/components/Size;
    .param p4, "sideward"    # Z

    .line 102
    if-eqz p4, :cond_7

    invoke-virtual {p2}, Landroid/graphics/Bitmap;->getHeight()I

    move-result v0

    goto :goto_b

    :cond_7
    invoke-virtual {p2}, Landroid/graphics/Bitmap;->getWidth()I

    move-result v0

    :goto_b
    int-to-float v0, v0

    .line 103
    .local v0, "bitmapW":F
    if-eqz p4, :cond_13

    invoke-virtual {p2}, Landroid/graphics/Bitmap;->getWidth()I

    move-result v1

    goto :goto_17

    :cond_13
    invoke-virtual {p2}, Landroid/graphics/Bitmap;->getHeight()I

    move-result v1

    :goto_17
    int-to-float v1, v1

    .line 104
    .local v1, "bitmapH":F
    new-instance v2, Lim/tpelyyftgw/ui/components/Point;

    iget v3, p3, Lim/tpelyyftgw/ui/components/Size;->width:F

    iget v4, p1, Landroid/graphics/PointF;->x:F

    mul-float v3, v3, v4

    div-float/2addr v3, v0

    iget v4, p3, Lim/tpelyyftgw/ui/components/Size;->height:F

    iget v5, p1, Landroid/graphics/PointF;->y:F

    mul-float v4, v4, v5

    div-float/2addr v4, v1

    invoke-direct {v2, v3, v4}, Lim/tpelyyftgw/ui/components/Point;-><init>(FF)V

    return-object v2
.end method


# virtual methods
.method public getAngle()F
    .registers 2

    .line 140
    iget v0, p0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->angle:F

    return v0
.end method

.method public getPointForAnchor(I)Lim/tpelyyftgw/ui/components/Point;
    .registers 3
    .param p1, "anchor"    # I

    .line 109
    if-eqz p1, :cond_16

    const/4 v0, 0x1

    if-eq p1, v0, :cond_13

    const/4 v0, 0x2

    if-eq p1, v0, :cond_10

    const/4 v0, 0x3

    if-eq p1, v0, :cond_d

    .line 127
    const/4 v0, 0x0

    return-object v0

    .line 123
    :cond_d
    iget-object v0, p0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->chinPoint:Lim/tpelyyftgw/ui/components/Point;

    return-object v0

    .line 119
    :cond_10
    iget-object v0, p0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->mouthPoint:Lim/tpelyyftgw/ui/components/Point;

    return-object v0

    .line 115
    :cond_13
    iget-object v0, p0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->eyesCenterPoint:Lim/tpelyyftgw/ui/components/Point;

    return-object v0

    .line 111
    :cond_16
    iget-object v0, p0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->foreheadPoint:Lim/tpelyyftgw/ui/components/Point;

    return-object v0
.end method

.method public getWidthForAnchor(I)F
    .registers 3
    .param p1, "anchor"    # I

    .line 133
    const/4 v0, 0x1

    if-ne p1, v0, :cond_6

    .line 134
    iget v0, p0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->eyesDistance:F

    return v0

    .line 136
    :cond_6
    iget v0, p0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->width:F

    return v0
.end method

.method public isSufficient()Z
    .registers 2

    .line 98
    iget-object v0, p0, Lim/tpelyyftgw/ui/components/paint/PhotoFace;->eyesCenterPoint:Lim/tpelyyftgw/ui/components/Point;

    if-eqz v0, :cond_6

    const/4 v0, 0x1

    goto :goto_7

    :cond_6
    const/4 v0, 0x0

    :goto_7
    return v0
.end method