.class public Lcom/example/linechartlibrary/LineChartRenderer; .super Lcom/example/linechartlibrary/AbstractChartRenderer; .source "LineChartRenderer.java" # static fields .field private static final DEFAULT_LINE_STROKE_WIDTH_DP:I = 0x3 .field private static final DEFAULT_TOUCH_TOLERANCE_MARGIN_DP:I = 0x4 .field private static final LINE_SMOOTHNESS:F = 0.16f .field private static final MODE_DRAW:I = 0x0 .field private static final MODE_HIGHLIGHT:I = 0x1 # instance fields .field private baseValue:F .field private checkPrecision:I .field private dataProvider:Lcom/example/linechartlibrary/LineChartDataProvider; .field private linePaint:Landroid/graphics/Paint; .field private path:Landroid/graphics/Path; .field private pointPaint:Landroid/graphics/Paint; .field private softwareBitmap:Landroid/graphics/Bitmap; .field private softwareCanvas:Landroid/graphics/Canvas; .field private tempMaximumViewport:Lcom/example/linechartlibrary/Viewport; .field private touchToleranceMargin:I # direct methods .method public constructor (Landroid/content/Context;Lcom/example/linechartlibrary/Chart;Lcom/example/linechartlibrary/LineChartDataProvider;)V .registers 5 .line 44 invoke-direct {p0, p1, p2}, Lcom/example/linechartlibrary/AbstractChartRenderer;->(Landroid/content/Context;Lcom/example/linechartlibrary/Chart;)V .line 35 new-instance p1, Landroid/graphics/Path; invoke-direct {p1}, Landroid/graphics/Path;->()V iput-object p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; .line 36 new-instance p1, Landroid/graphics/Paint; invoke-direct {p1}, Landroid/graphics/Paint;->()V iput-object p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->linePaint:Landroid/graphics/Paint; .line 37 new-instance p1, Landroid/graphics/Paint; invoke-direct {p1}, Landroid/graphics/Paint;->()V iput-object p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->pointPaint:Landroid/graphics/Paint; .line 40 new-instance p1, Landroid/graphics/Canvas; invoke-direct {p1}, Landroid/graphics/Canvas;->()V iput-object p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->softwareCanvas:Landroid/graphics/Canvas; .line 41 new-instance p1, Lcom/example/linechartlibrary/Viewport; invoke-direct {p1}, Lcom/example/linechartlibrary/Viewport;->()V iput-object p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->tempMaximumViewport:Lcom/example/linechartlibrary/Viewport; .line 45 iput-object p3, p0, Lcom/example/linechartlibrary/LineChartRenderer;->dataProvider:Lcom/example/linechartlibrary/LineChartDataProvider; .line 47 iget p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->density:F const/4 p2, 0x4 invoke-static {p1, p2}, Lcom/example/linechartlibrary/ChartUtils;->dp2px(FI)I move-result p1 iput p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->touchToleranceMargin:I .line 49 iget-object p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->linePaint:Landroid/graphics/Paint; const/4 p2, 0x1 invoke-virtual {p1, p2}, Landroid/graphics/Paint;->setAntiAlias(Z)V .line 50 iget-object p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->linePaint:Landroid/graphics/Paint; sget-object p3, Landroid/graphics/Paint$Style;->STROKE:Landroid/graphics/Paint$Style; invoke-virtual {p1, p3}, Landroid/graphics/Paint;->setStyle(Landroid/graphics/Paint$Style;)V .line 51 iget-object p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->linePaint:Landroid/graphics/Paint; sget-object p3, Landroid/graphics/Paint$Cap;->ROUND:Landroid/graphics/Paint$Cap; invoke-virtual {p1, p3}, Landroid/graphics/Paint;->setStrokeCap(Landroid/graphics/Paint$Cap;)V .line 52 iget-object p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->linePaint:Landroid/graphics/Paint; iget p3, p0, Lcom/example/linechartlibrary/LineChartRenderer;->density:F const/4 v0, 0x3 invoke-static {p3, v0}, Lcom/example/linechartlibrary/ChartUtils;->dp2px(FI)I move-result p3 int-to-float p3, p3 invoke-virtual {p1, p3}, Landroid/graphics/Paint;->setStrokeWidth(F)V .line 54 iget-object p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->pointPaint:Landroid/graphics/Paint; invoke-virtual {p1, p2}, Landroid/graphics/Paint;->setAntiAlias(Z)V .line 55 iget-object p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->pointPaint:Landroid/graphics/Paint; sget-object p2, Landroid/graphics/Paint$Style;->FILL:Landroid/graphics/Paint$Style; invoke-virtual {p1, p2}, Landroid/graphics/Paint;->setStyle(Landroid/graphics/Paint$Style;)V .line 57 iget p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->density:F const/4 p2, 0x2 invoke-static {p1, p2}, Lcom/example/linechartlibrary/ChartUtils;->dp2px(FI)I move-result p1 iput p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->checkPrecision:I return-void .end method .method private calculateContentRectInternalMargin()I .registers 5 .line 193 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->dataProvider:Lcom/example/linechartlibrary/LineChartDataProvider; invoke-interface {v0}, Lcom/example/linechartlibrary/LineChartDataProvider;->getLineChartData()Lcom/example/linechartlibrary/LineChartData; move-result-object v0 .line 194 invoke-virtual {v0}, Lcom/example/linechartlibrary/LineChartData;->getLines()Ljava/util/List; move-result-object v0 invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object v0 const/4 v1, 0x0 :cond_f :goto_f invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z move-result v2 if-eqz v2, :cond_2b invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v2 check-cast v2, Lcom/example/linechartlibrary/Line; .line 195 invoke-direct {p0, v2}, Lcom/example/linechartlibrary/LineChartRenderer;->checkIfShouldDrawPoints(Lcom/example/linechartlibrary/Line;)Z move-result v3 if-eqz v3, :cond_f .line 196 invoke-virtual {v2}, Lcom/example/linechartlibrary/Line;->getPointRadius()I move-result v2 add-int/lit8 v2, v2, 0x4 if-le v2, v1, :cond_f move v1, v2 goto :goto_f .line 202 :cond_2b iget v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->density:F invoke-static {v0, v1}, Lcom/example/linechartlibrary/ChartUtils;->dp2px(FI)I move-result v0 return v0 .end method .method private calculateMaxViewport()V .registers 6 .line 168 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->tempMaximumViewport:Lcom/example/linechartlibrary/Viewport; const v1, 0x7f7fffff # Float.MAX_VALUE const/4 v2, 0x1 invoke-virtual {v0, v1, v2, v2, v1}, Lcom/example/linechartlibrary/Viewport;->set(FFFF)V .line 169 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->dataProvider:Lcom/example/linechartlibrary/LineChartDataProvider; invoke-interface {v0}, Lcom/example/linechartlibrary/LineChartDataProvider;->getLineChartData()Lcom/example/linechartlibrary/LineChartData; move-result-object v0 .line 171 invoke-virtual {v0}, Lcom/example/linechartlibrary/LineChartData;->getLines()Ljava/util/List; move-result-object v0 invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object v0 :cond_17 invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z move-result v1 if-eqz v1, :cond_88 invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v1 check-cast v1, Lcom/example/linechartlibrary/Line; .line 173 invoke-virtual {v1}, Lcom/example/linechartlibrary/Line;->getValues()Ljava/util/List; move-result-object v1 invoke-interface {v1}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object v1 :cond_2b :goto_2b invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z move-result v2 if-eqz v2, :cond_17 invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v2 check-cast v2, Lcom/example/linechartlibrary/PointValue; .line 174 invoke-virtual {v2}, Lcom/example/linechartlibrary/PointValue;->getX()F move-result v3 iget-object v4, p0, Lcom/example/linechartlibrary/LineChartRenderer;->tempMaximumViewport:Lcom/example/linechartlibrary/Viewport; iget v4, v4, Lcom/example/linechartlibrary/Viewport;->left:F cmpg-float v3, v3, v4 if-gez v3, :cond_4b .line 175 iget-object v3, p0, Lcom/example/linechartlibrary/LineChartRenderer;->tempMaximumViewport:Lcom/example/linechartlibrary/Viewport; invoke-virtual {v2}, Lcom/example/linechartlibrary/PointValue;->getX()F move-result v4 iput v4, v3, Lcom/example/linechartlibrary/Viewport;->left:F .line 177 :cond_4b invoke-virtual {v2}, Lcom/example/linechartlibrary/PointValue;->getX()F move-result v3 iget-object v4, p0, Lcom/example/linechartlibrary/LineChartRenderer;->tempMaximumViewport:Lcom/example/linechartlibrary/Viewport; iget v4, v4, Lcom/example/linechartlibrary/Viewport;->right:F cmpl-float v3, v3, v4 if-lez v3, :cond_5f .line 178 iget-object v3, p0, Lcom/example/linechartlibrary/LineChartRenderer;->tempMaximumViewport:Lcom/example/linechartlibrary/Viewport; invoke-virtual {v2}, Lcom/example/linechartlibrary/PointValue;->getX()F move-result v4 iput v4, v3, Lcom/example/linechartlibrary/Viewport;->right:F .line 180 :cond_5f invoke-virtual {v2}, Lcom/example/linechartlibrary/PointValue;->getY()F move-result v3 iget-object v4, p0, Lcom/example/linechartlibrary/LineChartRenderer;->tempMaximumViewport:Lcom/example/linechartlibrary/Viewport; iget v4, v4, Lcom/example/linechartlibrary/Viewport;->bottom:F cmpg-float v3, v3, v4 if-gez v3, :cond_73 .line 181 iget-object v3, p0, Lcom/example/linechartlibrary/LineChartRenderer;->tempMaximumViewport:Lcom/example/linechartlibrary/Viewport; invoke-virtual {v2}, Lcom/example/linechartlibrary/PointValue;->getY()F move-result v4 iput v4, v3, Lcom/example/linechartlibrary/Viewport;->bottom:F .line 183 :cond_73 invoke-virtual {v2}, Lcom/example/linechartlibrary/PointValue;->getY()F move-result v3 iget-object v4, p0, Lcom/example/linechartlibrary/LineChartRenderer;->tempMaximumViewport:Lcom/example/linechartlibrary/Viewport; iget v4, v4, Lcom/example/linechartlibrary/Viewport;->top:F cmpl-float v3, v3, v4 if-lez v3, :cond_2b .line 184 iget-object v3, p0, Lcom/example/linechartlibrary/LineChartRenderer;->tempMaximumViewport:Lcom/example/linechartlibrary/Viewport; invoke-virtual {v2}, Lcom/example/linechartlibrary/PointValue;->getY()F move-result v2 iput v2, v3, Lcom/example/linechartlibrary/Viewport;->top:F goto :goto_2b :cond_88 return-void .end method .method private checkIfShouldDrawPoints(Lcom/example/linechartlibrary/Line;)Z .registers 4 .line 141 invoke-virtual {p1}, Lcom/example/linechartlibrary/Line;->hasPoints()Z move-result v0 const/4 v1, 0x1 if-nez v0, :cond_13 invoke-virtual {p1}, Lcom/example/linechartlibrary/Line;->getValues()Ljava/util/List; move-result-object p1 invoke-interface {p1}, Ljava/util/List;->size()I move-result p1 if-ne p1, v1, :cond_12 goto :goto_13 :cond_12 const/4 v1, 0x0 :cond_13 :goto_13 return v1 .end method .method private drawArea(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;)V .registers 13 .line 474 invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->getValues()Ljava/util/List; move-result-object v0 invoke-interface {v0}, Ljava/util/List;->size()I move-result v0 const/4 v1, 0x2 if-ge v0, v1, :cond_c return-void .line 480 :cond_c iget-object v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v1}, Lcom/example/linechartlibrary/ChartComputator;->getContentRectMinusAllMargins()Landroid/graphics/Rect; move-result-object v1 .line 481 iget v2, v1, Landroid/graphics/Rect;->bottom:I int-to-float v2, v2 iget-object v3, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; iget v4, p0, Lcom/example/linechartlibrary/LineChartRenderer;->baseValue:F invoke-virtual {v3, v4}, Lcom/example/linechartlibrary/ChartComputator;->computeRawY(F)F move-result v3 iget v4, v1, Landroid/graphics/Rect;->top:I int-to-float v4, v4 invoke-static {v3, v4}, Ljava/lang/Math;->max(FF)F move-result v3 invoke-static {v2, v3}, Ljava/lang/Math;->min(FF)F move-result v2 .line 484 iget-object v3, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->getValues()Ljava/util/List; move-result-object v4 const/4 v5, 0x0 invoke-interface {v4, v5}, Ljava/util/List;->get(I)Ljava/lang/Object; move-result-object v4 check-cast v4, Lcom/example/linechartlibrary/PointValue; invoke-virtual {v4}, Lcom/example/linechartlibrary/PointValue;->getX()F move-result v4 invoke-virtual {v3, v4}, Lcom/example/linechartlibrary/ChartComputator;->computeRawX(F)F move-result v3 iget v4, v1, Landroid/graphics/Rect;->left:I int-to-float v4, v4 invoke-static {v3, v4}, Ljava/lang/Math;->max(FF)F move-result v3 .line 485 iget-object v4, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->getValues()Ljava/util/List; move-result-object v5 add-int/lit8 v0, v0, -0x1 invoke-interface {v5, v0}, Ljava/util/List;->get(I)Ljava/lang/Object; move-result-object v0 check-cast v0, Lcom/example/linechartlibrary/PointValue; invoke-virtual {v0}, Lcom/example/linechartlibrary/PointValue;->getX()F move-result v0 invoke-virtual {v4, v0}, Lcom/example/linechartlibrary/ChartComputator;->computeRawX(F)F move-result v0 iget v1, v1, Landroid/graphics/Rect;->right:I int-to-float v1, v1 invoke-static {v0, v1}, Ljava/lang/Math;->min(FF)F move-result v0 .line 488 iget-object v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; invoke-virtual {v1, v0, v2}, Landroid/graphics/Path;->lineTo(FF)V .line 489 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; invoke-virtual {v0, v3, v2}, Landroid/graphics/Path;->lineTo(FF)V .line 490 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; invoke-virtual {v0}, Landroid/graphics/Path;->close()V .line 492 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->linePaint:Landroid/graphics/Paint; sget-object v1, Landroid/graphics/Paint$Style;->FILL:Landroid/graphics/Paint$Style; invoke-virtual {v0, v1}, Landroid/graphics/Paint;->setStyle(Landroid/graphics/Paint$Style;)V .line 493 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->linePaint:Landroid/graphics/Paint; invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->getAreaTransparency()I move-result v1 invoke-virtual {v0, v1}, Landroid/graphics/Paint;->setAlpha(I)V .line 494 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->linePaint:Landroid/graphics/Paint; invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->getGradientToTransparent()Z move-result v1 if-eqz v1, :cond_a6 .line 495 new-instance v1, Landroid/graphics/LinearGradient; invoke-virtual {p1}, Landroid/graphics/Canvas;->getHeight()I move-result v2 int-to-float v6, v2 invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->getColor()I move-result v7 .line 496 invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->getColor()I move-result p2 const v2, 0xffffff and-int v8, p2, v2 sget-object v9, Landroid/graphics/Shader$TileMode;->MIRROR:Landroid/graphics/Shader$TileMode; const/4 v3, 0x0 const/4 v4, 0x0 const/4 v5, 0x0 move-object v2, v1 invoke-direct/range {v2 .. v9}, Landroid/graphics/LinearGradient;->(FFFFIILandroid/graphics/Shader$TileMode;)V goto :goto_a7 :cond_a6 const/4 v1, 0x0 .line 494 :goto_a7 invoke-virtual {v0, v1}, Landroid/graphics/Paint;->setShader(Landroid/graphics/Shader;)Landroid/graphics/Shader; .line 498 iget-object p2, p0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->linePaint:Landroid/graphics/Paint; invoke-virtual {p1, p2, v0}, Landroid/graphics/Canvas;->drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V .line 499 iget-object p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->linePaint:Landroid/graphics/Paint; sget-object p2, Landroid/graphics/Paint$Style;->STROKE:Landroid/graphics/Paint$Style; invoke-virtual {p1, p2}, Landroid/graphics/Paint;->setStyle(Landroid/graphics/Paint$Style;)V return-void .end method .method private drawLabel(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;Lcom/example/linechartlibrary/PointValue;FFF)V .registers 15 .line 426 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelPaint:Landroid/graphics/Paint; invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->getDarkenColor()I move-result v1 invoke-virtual {v0, v1}, Landroid/graphics/Paint;->setColor(I)V .line 427 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelPaint:Landroid/graphics/Paint; invoke-virtual {p3}, Lcom/example/linechartlibrary/PointValue;->getLabelTextSize()I move-result v1 int-to-float v1, v1 invoke-virtual {v0, v1}, Landroid/graphics/Paint;->setTextSize(F)V .line 428 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v0}, Lcom/example/linechartlibrary/ChartComputator;->getContentRectMinusAllMargins()Landroid/graphics/Rect; move-result-object v0 .line 429 invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->getFormatter()Lcom/example/linechartlibrary/LineChartValueFormatter; move-result-object p2 iget-object v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelBuffer:[C invoke-interface {p2, v1, p3}, Lcom/example/linechartlibrary/LineChartValueFormatter;->formatChartValue([CLcom/example/linechartlibrary/PointValue;)I move-result v6 if-nez v6, :cond_26 return-void .line 435 :cond_26 iget-object p2, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelPaint:Landroid/graphics/Paint; iget-object v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelBuffer:[C iget-object v2, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelBuffer:[C array-length v2, v2 sub-int/2addr v2, v6 invoke-virtual {p2, v1, v2, v6}, Landroid/graphics/Paint;->measureText([CII)F move-result p2 .line 436 iget-object v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->fontMetrics:Landroid/graphics/Paint$FontMetricsInt; iget v1, v1, Landroid/graphics/Paint$FontMetricsInt;->ascent:I invoke-static {v1}, Ljava/lang/Math;->abs(I)I move-result v1 const/high16 v2, 0x40000000 # 2.0f div-float v2, p2, v2 sub-float v3, p4, v2 .line 437 iget v4, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelMargin:I int-to-float v4, v4 sub-float/2addr v3, v4 add-float/2addr v2, p4 .line 438 iget v4, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelMargin:I int-to-float v4, v4 add-float/2addr v2, v4 .line 443 invoke-virtual {p3}, Lcom/example/linechartlibrary/PointValue;->getY()F move-result p3 iget v4, p0, Lcom/example/linechartlibrary/LineChartRenderer;->baseValue:F cmpl-float p3, p3, v4 if-ltz p3, :cond_5f sub-float p3, p5, p6 int-to-float v4, v1 sub-float v4, p3, v4 .line 444 iget v5, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelMargin:I mul-int/lit8 v5, v5, 0x2 int-to-float v5, v5 sub-float/2addr v4, v5 goto :goto_69 :cond_5f add-float v4, p5, p6 int-to-float p3, v1 add-float/2addr p3, v4 .line 448 iget v5, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelMargin:I mul-int/lit8 v5, v5, 0x2 int-to-float v5, v5 add-float/2addr p3, v5 .line 451 :goto_69 iget v5, v0, Landroid/graphics/Rect;->top:I int-to-float v5, v5 cmpg-float v5, v4, v5 if-gez v5, :cond_7a add-float v4, p5, p6 int-to-float p3, v1 add-float/2addr p3, v4 .line 453 iget v5, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelMargin:I mul-int/lit8 v5, v5, 0x2 int-to-float v5, v5 add-float/2addr p3, v5 .line 455 :cond_7a iget v5, v0, Landroid/graphics/Rect;->bottom:I int-to-float v5, v5 cmpl-float v5, p3, v5 if-lez v5, :cond_8d sub-float p3, p5, p6 int-to-float p5, v1 sub-float p5, p3, p5 .line 456 iget p6, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelMargin:I mul-int/lit8 p6, p6, 0x2 int-to-float p6, p6 sub-float v4, p5, p6 .line 459 :cond_8d iget p5, v0, Landroid/graphics/Rect;->left:I int-to-float p5, p5 cmpg-float p5, v3, p5 if-gez p5, :cond_9e add-float p5, p4, p2 .line 461 iget p6, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelMargin:I mul-int/lit8 p6, p6, 0x2 int-to-float p6, p6 add-float v2, p5, p6 move v3, p4 .line 463 :cond_9e iget p5, v0, Landroid/graphics/Rect;->right:I int-to-float p5, p5 cmpl-float p5, v2, p5 if-lez p5, :cond_af sub-float p2, p4, p2 .line 464 iget p5, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelMargin:I mul-int/lit8 p5, p5, 0x2 int-to-float p5, p5 sub-float v3, p2, p5 goto :goto_b0 :cond_af move p4, v2 .line 468 :goto_b0 iget-object p2, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelBackgroundRect:Landroid/graphics/RectF; invoke-virtual {p2, v3, v4, p4, p3}, Landroid/graphics/RectF;->set(FFFF)V .line 469 iget-object v4, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelBuffer:[C iget-object p2, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelBuffer:[C array-length p2, p2 sub-int v5, p2, v6 const/4 v7, 0x0 move-object v2, p0 move-object v3, p1 invoke-virtual/range {v2 .. v7}, Lcom/example/linechartlibrary/LineChartRenderer;->drawLabelTextAndBackground(Landroid/graphics/Canvas;[CIII)V return-void .end method .method private drawPath(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;)V .registers 8 .line 209 invoke-direct {p0, p2}, Lcom/example/linechartlibrary/LineChartRenderer;->prepareLinePaint(Lcom/example/linechartlibrary/Line;)V .line 212 invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->getValues()Ljava/util/List; move-result-object v0 invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object v0 const/4 v1, 0x0 :goto_c invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z move-result v2 if-eqz v2, :cond_3c invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v2 check-cast v2, Lcom/example/linechartlibrary/PointValue; .line 214 iget-object v3, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v2}, Lcom/example/linechartlibrary/PointValue;->getX()F move-result v4 invoke-virtual {v3, v4}, Lcom/example/linechartlibrary/ChartComputator;->computeRawX(F)F move-result v3 .line 215 iget-object v4, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v2}, Lcom/example/linechartlibrary/PointValue;->getY()F move-result v2 invoke-virtual {v4, v2}, Lcom/example/linechartlibrary/ChartComputator;->computeRawY(F)F move-result v2 if-nez v1, :cond_34 .line 218 iget-object v4, p0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; invoke-virtual {v4, v3, v2}, Landroid/graphics/Path;->moveTo(FF)V goto :goto_39 .line 220 :cond_34 iget-object v4, p0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; invoke-virtual {v4, v3, v2}, Landroid/graphics/Path;->lineTo(FF)V :goto_39 add-int/lit8 v1, v1, 0x1 goto :goto_c .line 227 :cond_3c iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; iget-object v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->linePaint:Landroid/graphics/Paint; invoke-virtual {p1, v0, v1}, Landroid/graphics/Canvas;->drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V .line 229 invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->isFilled()Z move-result v0 if-eqz v0, :cond_4c .line 230 invoke-direct {p0, p1, p2}, Lcom/example/linechartlibrary/LineChartRenderer;->drawArea(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;)V .line 233 :cond_4c iget-object p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; invoke-virtual {p1}, Landroid/graphics/Path;->reset()V return-void .end method .method private drawPoint(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;Lcom/example/linechartlibrary/PointValue;FFF)V .registers 13 .line 391 sget-object p3, Lcom/example/linechartlibrary/ValueShape;->SQUARE:Lcom/example/linechartlibrary/ValueShape; invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->getShape()Lcom/example/linechartlibrary/ValueShape; move-result-object v0 invoke-virtual {p3, v0}, Lcom/example/linechartlibrary/ValueShape;->equals(Ljava/lang/Object;)Z move-result p3 if-eqz p3, :cond_1b sub-float v1, p4, p6 sub-float v2, p5, p6 add-float v3, p4, p6 add-float v4, p5, p6 .line 392 iget-object v5, p0, Lcom/example/linechartlibrary/LineChartRenderer;->pointPaint:Landroid/graphics/Paint; move-object v0, p1 invoke-virtual/range {v0 .. v5}, Landroid/graphics/Canvas;->drawRect(FFFFLandroid/graphics/Paint;)V goto :goto_52 .line 394 :cond_1b sget-object p3, Lcom/example/linechartlibrary/ValueShape;->CIRCLE:Lcom/example/linechartlibrary/ValueShape; invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->getShape()Lcom/example/linechartlibrary/ValueShape; move-result-object v0 invoke-virtual {p3, v0}, Lcom/example/linechartlibrary/ValueShape;->equals(Ljava/lang/Object;)Z move-result p3 if-eqz p3, :cond_2d .line 395 iget-object p2, p0, Lcom/example/linechartlibrary/LineChartRenderer;->pointPaint:Landroid/graphics/Paint; invoke-virtual {p1, p4, p5, p6, p2}, Landroid/graphics/Canvas;->drawCircle(FFFLandroid/graphics/Paint;)V goto :goto_52 .line 396 :cond_2d sget-object p3, Lcom/example/linechartlibrary/ValueShape;->DIAMOND:Lcom/example/linechartlibrary/ValueShape; invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->getShape()Lcom/example/linechartlibrary/ValueShape; move-result-object v0 invoke-virtual {p3, v0}, Lcom/example/linechartlibrary/ValueShape;->equals(Ljava/lang/Object;)Z move-result p3 if-eqz p3, :cond_53 .line 397 invoke-virtual {p1}, Landroid/graphics/Canvas;->save()I const/high16 p2, 0x42340000 # 45.0f .line 398 invoke-virtual {p1, p2, p4, p5}, Landroid/graphics/Canvas;->rotate(FFF)V sub-float v1, p4, p6 sub-float v2, p5, p6 add-float v3, p4, p6 add-float v4, p5, p6 .line 399 iget-object v5, p0, Lcom/example/linechartlibrary/LineChartRenderer;->pointPaint:Landroid/graphics/Paint; move-object v0, p1 invoke-virtual/range {v0 .. v5}, Landroid/graphics/Canvas;->drawRect(FFFFLandroid/graphics/Paint;)V .line 401 invoke-virtual {p1}, Landroid/graphics/Canvas;->restore()V :goto_52 return-void .line 403 :cond_53 new-instance p1, Ljava/lang/IllegalArgumentException; new-instance p3, Ljava/lang/StringBuilder; const-string p4, "Invalid point shape: " invoke-direct {p3, p4}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->getShape()Lcom/example/linechartlibrary/ValueShape; move-result-object p2 invoke-virtual {p3, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object p2 invoke-virtual {p2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p2 invoke-direct {p1, p2}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V throw p1 .end method .method private drawPoints(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;II)V .registers 20 move-object v8, p0 move/from16 v9, p4 .line 364 iget-object v0, v8, Lcom/example/linechartlibrary/LineChartRenderer;->pointPaint:Landroid/graphics/Paint; invoke-virtual/range {p2 .. p2}, Lcom/example/linechartlibrary/Line;->getPointColor()I move-result v1 invoke-virtual {v0, v1}, Landroid/graphics/Paint;->setColor(I)V .line 366 invoke-virtual/range {p2 .. p2}, Lcom/example/linechartlibrary/Line;->getValues()Ljava/util/List; move-result-object v0 invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object v10 const/4 v0, 0x0 move v11, v0 :goto_16 invoke-interface {v10}, Ljava/util/Iterator;->hasNext()Z move-result v0 if-eqz v0, :cond_9b invoke-interface {v10}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v0 move-object v7, v0 check-cast v7, Lcom/example/linechartlibrary/PointValue; .line 367 iget v0, v8, Lcom/example/linechartlibrary/LineChartRenderer;->density:F invoke-virtual/range {p2 .. p2}, Lcom/example/linechartlibrary/Line;->getPointRadius()I move-result v1 invoke-static {v0, v1}, Lcom/example/linechartlibrary/ChartUtils;->dp2px(FI)I move-result v12 .line 368 iget-object v0, v8, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v7}, Lcom/example/linechartlibrary/PointValue;->getX()F move-result v1 invoke-virtual {v0, v1}, Lcom/example/linechartlibrary/ChartComputator;->computeRawX(F)F move-result v13 .line 369 iget-object v0, v8, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v7}, Lcom/example/linechartlibrary/PointValue;->getY()F move-result v1 invoke-virtual {v0, v1}, Lcom/example/linechartlibrary/ChartComputator;->computeRawY(F)F move-result v14 .line 370 iget-object v0, v8, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; iget v1, v8, Lcom/example/linechartlibrary/LineChartRenderer;->checkPrecision:I int-to-float v1, v1 invoke-virtual {v0, v13, v14, v1}, Lcom/example/linechartlibrary/ChartComputator;->isWithinContentRect(FFF)Z move-result v0 if-eqz v0, :cond_97 if-nez v9, :cond_70 int-to-float v6, v12 move-object v0, p0 move-object/from16 v1, p1 move-object/from16 v2, p2 move-object v3, v7 move v4, v13 move v5, v14 .line 375 invoke-direct/range {v0 .. v6}, Lcom/example/linechartlibrary/LineChartRenderer;->drawPoint(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;Lcom/example/linechartlibrary/PointValue;FFF)V .line 376 invoke-virtual/range {p2 .. p2}, Lcom/example/linechartlibrary/Line;->hasLabels()Z move-result v0 if-eqz v0, :cond_97 .line 377 iget v0, v8, Lcom/example/linechartlibrary/LineChartRenderer;->labelOffset:I add-int/2addr v12, v0 int-to-float v6, v12 move-object v0, p0 move-object/from16 v1, p1 move-object/from16 v2, p2 move-object v3, v7 move v4, v13 move v5, v14 invoke-direct/range {v0 .. v6}, Lcom/example/linechartlibrary/LineChartRenderer;->drawLabel(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;Lcom/example/linechartlibrary/PointValue;FFF)V goto :goto_97 :cond_70 const/4 v0, 0x1 if-ne v0, v9, :cond_82 move-object v0, p0 move-object/from16 v1, p1 move-object/from16 v2, p2 move-object v3, v7 move v4, v13 move v5, v14 move/from16 v6, p3 move v7, v11 .line 380 invoke-direct/range {v0 .. v7}, Lcom/example/linechartlibrary/LineChartRenderer;->highlightPoint(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;Lcom/example/linechartlibrary/PointValue;FFII)V goto :goto_97 .line 382 :cond_82 new-instance v0, Ljava/lang/IllegalStateException; new-instance v1, Ljava/lang/StringBuilder; const-string v2, "Cannot process points in mode: " invoke-direct {v1, v2}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v1, v9}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v1 invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v1 invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V throw v0 :cond_97 :goto_97 add-int/lit8 v11, v11, 0x1 goto/16 :goto_16 :cond_9b return-void .end method .method private drawSmoothPath(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;)V .registers 23 move-object/from16 v0, p0 move-object/from16 v1, p2 .line 269 invoke-direct {v0, v1}, Lcom/example/linechartlibrary/LineChartRenderer;->prepareLinePaint(Lcom/example/linechartlibrary/Line;)V .line 271 invoke-virtual/range {p2 .. p2}, Lcom/example/linechartlibrary/Line;->getValues()Ljava/util/List; move-result-object v2 invoke-interface {v2}, Ljava/util/List;->size()I move-result v2 const/high16 v3, 0x7fc00000 # Float.NaN const/4 v4, 0x0 move v5, v3 move v6, v5 move v7, v6 move v8, v7 move v9, v4 move v4, v8 :goto_18 if-ge v9, v2, :cond_104 .line 282 invoke-static {v3}, Ljava/lang/Float;->isNaN(F)Z move-result v10 if-eqz v10, :cond_43 .line 283 invoke-virtual/range {p2 .. p2}, Lcom/example/linechartlibrary/Line;->getValues()Ljava/util/List; move-result-object v3 invoke-interface {v3, v9}, Ljava/util/List;->get(I)Ljava/lang/Object; move-result-object v3 check-cast v3, Lcom/example/linechartlibrary/PointValue; .line 284 iget-object v5, v0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v3}, Lcom/example/linechartlibrary/PointValue;->getX()F move-result v10 invoke-virtual {v5, v10}, Lcom/example/linechartlibrary/ChartComputator;->computeRawX(F)F move-result v5 .line 285 iget-object v10, v0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v3}, Lcom/example/linechartlibrary/PointValue;->getY()F move-result v3 invoke-virtual {v10, v3}, Lcom/example/linechartlibrary/ChartComputator;->computeRawY(F)F move-result v3 move/from16 v19, v5 move v5, v3 move/from16 v3, v19 .line 287 :cond_43 invoke-static {v4}, Ljava/lang/Float;->isNaN(F)Z move-result v10 if-eqz v10, :cond_73 if-lez v9, :cond_71 .line 289 invoke-virtual/range {p2 .. p2}, Lcom/example/linechartlibrary/Line;->getValues()Ljava/util/List; move-result-object v4 add-int/lit8 v7, v9, -0x1 invoke-interface {v4, v7}, Ljava/util/List;->get(I)Ljava/lang/Object; move-result-object v4 check-cast v4, Lcom/example/linechartlibrary/PointValue; .line 290 iget-object v7, v0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v4}, Lcom/example/linechartlibrary/PointValue;->getX()F move-result v10 invoke-virtual {v7, v10}, Lcom/example/linechartlibrary/ChartComputator;->computeRawX(F)F move-result v7 .line 291 iget-object v10, v0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v4}, Lcom/example/linechartlibrary/PointValue;->getY()F move-result v4 invoke-virtual {v10, v4}, Lcom/example/linechartlibrary/ChartComputator;->computeRawY(F)F move-result v4 move/from16 v19, v7 move v7, v4 move/from16 v4, v19 goto :goto_73 :cond_71 move v4, v3 move v7, v5 .line 298 :cond_73 :goto_73 invoke-static {v6}, Ljava/lang/Float;->isNaN(F)Z move-result v10 if-eqz v10, :cond_a4 const/4 v6, 0x1 if-le v9, v6, :cond_a2 .line 300 invoke-virtual/range {p2 .. p2}, Lcom/example/linechartlibrary/Line;->getValues()Ljava/util/List; move-result-object v6 add-int/lit8 v8, v9, -0x2 invoke-interface {v6, v8}, Ljava/util/List;->get(I)Ljava/lang/Object; move-result-object v6 check-cast v6, Lcom/example/linechartlibrary/PointValue; .line 301 iget-object v8, v0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v6}, Lcom/example/linechartlibrary/PointValue;->getX()F move-result v10 invoke-virtual {v8, v10}, Lcom/example/linechartlibrary/ChartComputator;->computeRawX(F)F move-result v8 .line 302 iget-object v10, v0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v6}, Lcom/example/linechartlibrary/PointValue;->getY()F move-result v6 invoke-virtual {v10, v6}, Lcom/example/linechartlibrary/ChartComputator;->computeRawY(F)F move-result v6 move/from16 v19, v8 move v8, v6 move/from16 v6, v19 goto :goto_a4 :cond_a2 move v6, v4 move v8, v7 :cond_a4 :goto_a4 add-int/lit8 v10, v2, -0x1 if-ge v9, v10, :cond_cd .line 311 invoke-virtual/range {p2 .. p2}, Lcom/example/linechartlibrary/Line;->getValues()Ljava/util/List; move-result-object v10 add-int/lit8 v11, v9, 0x1 invoke-interface {v10, v11}, Ljava/util/List;->get(I)Ljava/lang/Object; move-result-object v10 check-cast v10, Lcom/example/linechartlibrary/PointValue; .line 312 iget-object v11, v0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v10}, Lcom/example/linechartlibrary/PointValue;->getX()F move-result v12 invoke-virtual {v11, v12}, Lcom/example/linechartlibrary/ChartComputator;->computeRawX(F)F move-result v11 .line 313 iget-object v12, v0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v10}, Lcom/example/linechartlibrary/PointValue;->getY()F move-result v10 invoke-virtual {v12, v10}, Lcom/example/linechartlibrary/ChartComputator;->computeRawY(F)F move-result v10 move/from16 v18, v10 move/from16 v17, v11 goto :goto_d1 :cond_cd move/from16 v17, v3 move/from16 v18, v5 :goto_d1 if-nez v9, :cond_d9 .line 321 iget-object v6, v0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; invoke-virtual {v6, v3, v5}, Landroid/graphics/Path;->moveTo(FF)V goto :goto_f8 :cond_d9 sub-float v6, v3, v6 sub-float v8, v5, v8 sub-float v10, v17, v4 sub-float v11, v18, v7 const v12, 0x3e23d70a # 0.16f mul-float/2addr v6, v12 add-float/2addr v6, v4 mul-float/2addr v8, v12 add-float/2addr v8, v7 mul-float/2addr v10, v12 sub-float v13, v3, v10 mul-float/2addr v11, v12 sub-float v14, v5, v11 .line 332 iget-object v10, v0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; move v11, v6 move v12, v8 move v15, v3 move/from16 v16, v5 invoke-virtual/range {v10 .. v16}, Landroid/graphics/Path;->cubicTo(FFFFFF)V :goto_f8 add-int/lit8 v9, v9, 0x1 move v6, v4 move v8, v7 move v4, v3 move v7, v5 move/from16 v3, v17 move/from16 v5, v18 goto/16 :goto_18 .line 346 :cond_104 iget-object v2, v0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; iget-object v3, v0, Lcom/example/linechartlibrary/LineChartRenderer;->linePaint:Landroid/graphics/Paint; move-object/from16 v4, p1 invoke-virtual {v4, v2, v3}, Landroid/graphics/Canvas;->drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V .line 347 invoke-virtual/range {p2 .. p2}, Lcom/example/linechartlibrary/Line;->isFilled()Z move-result v2 if-eqz v2, :cond_116 .line 348 invoke-direct/range {p0 .. p2}, Lcom/example/linechartlibrary/LineChartRenderer;->drawArea(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;)V .line 350 :cond_116 iget-object v1, v0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; invoke-virtual {v1}, Landroid/graphics/Path;->reset()V return-void .end method .method private drawSquarePath(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;)V .registers 9 .line 237 invoke-direct {p0, p2}, Lcom/example/linechartlibrary/LineChartRenderer;->prepareLinePaint(Lcom/example/linechartlibrary/Line;)V .line 241 invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->getValues()Ljava/util/List; move-result-object v0 invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object v0 const/4 v1, 0x0 const/4 v2, 0x0 :goto_d invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z move-result v3 if-eqz v3, :cond_43 invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v3 check-cast v3, Lcom/example/linechartlibrary/PointValue; .line 243 iget-object v4, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v3}, Lcom/example/linechartlibrary/PointValue;->getX()F move-result v5 invoke-virtual {v4, v5}, Lcom/example/linechartlibrary/ChartComputator;->computeRawX(F)F move-result v4 .line 244 iget-object v5, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v3}, Lcom/example/linechartlibrary/PointValue;->getY()F move-result v3 invoke-virtual {v5, v3}, Lcom/example/linechartlibrary/ChartComputator;->computeRawY(F)F move-result v3 if-nez v1, :cond_35 .line 247 iget-object v2, p0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; invoke-virtual {v2, v4, v3}, Landroid/graphics/Path;->moveTo(FF)V goto :goto_3f .line 249 :cond_35 iget-object v5, p0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; invoke-virtual {v5, v4, v2}, Landroid/graphics/Path;->lineTo(FF)V .line 250 iget-object v2, p0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; invoke-virtual {v2, v4, v3}, Landroid/graphics/Path;->lineTo(FF)V :goto_3f add-int/lit8 v1, v1, 0x1 move v2, v3 goto :goto_d .line 259 :cond_43 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; iget-object v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->linePaint:Landroid/graphics/Paint; invoke-virtual {p1, v0, v1}, Landroid/graphics/Canvas;->drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V .line 261 invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->isFilled()Z move-result v0 if-eqz v0, :cond_53 .line 262 invoke-direct {p0, p1, p2}, Lcom/example/linechartlibrary/LineChartRenderer;->drawArea(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;)V .line 265 :cond_53 iget-object p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->path:Landroid/graphics/Path; invoke-virtual {p1}, Landroid/graphics/Path;->reset()V return-void .end method .method private highlightPoint(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;Lcom/example/linechartlibrary/PointValue;FFII)V .registers 15 .line 415 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->selectedValue:Lcom/example/linechartlibrary/SelectedValue; invoke-virtual {v0}, Lcom/example/linechartlibrary/SelectedValue;->getFirstIndex()I move-result v0 if-ne v0, p6, :cond_49 iget-object p6, p0, Lcom/example/linechartlibrary/LineChartRenderer;->selectedValue:Lcom/example/linechartlibrary/SelectedValue; invoke-virtual {p6}, Lcom/example/linechartlibrary/SelectedValue;->getSecondIndex()I move-result p6 if-ne p6, p7, :cond_49 .line 416 iget p6, p0, Lcom/example/linechartlibrary/LineChartRenderer;->density:F invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->getPointRadius()I move-result p7 invoke-static {p6, p7}, Lcom/example/linechartlibrary/ChartUtils;->dp2px(FI)I move-result p6 .line 417 iget-object p7, p0, Lcom/example/linechartlibrary/LineChartRenderer;->pointPaint:Landroid/graphics/Paint; invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->getDarkenColor()I move-result v0 invoke-virtual {p7, v0}, Landroid/graphics/Paint;->setColor(I)V .line 418 iget p7, p0, Lcom/example/linechartlibrary/LineChartRenderer;->touchToleranceMargin:I add-int/2addr p7, p6 int-to-float v6, p7 move-object v0, p0 move-object v1, p1 move-object v2, p2 move-object v3, p3 move v4, p4 move v5, p5 invoke-direct/range {v0 .. v6}, Lcom/example/linechartlibrary/LineChartRenderer;->drawPoint(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;Lcom/example/linechartlibrary/PointValue;FFF)V .line 419 invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->hasLabels()Z move-result p7 if-nez p7, :cond_3c invoke-virtual {p2}, Lcom/example/linechartlibrary/Line;->hasLabelsOnlyForSelected()Z move-result p7 if-eqz p7, :cond_49 .line 420 :cond_3c iget p7, p0, Lcom/example/linechartlibrary/LineChartRenderer;->labelOffset:I add-int/2addr p6, p7 int-to-float v6, p6 move-object v0, p0 move-object v1, p1 move-object v2, p2 move-object v3, p3 move v4, p4 move v5, p5 invoke-direct/range {v0 .. v6}, Lcom/example/linechartlibrary/LineChartRenderer;->drawLabel(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;Lcom/example/linechartlibrary/PointValue;FFF)V :cond_49 return-void .end method .method private highlightPoints(Landroid/graphics/Canvas;)V .registers 5 .line 408 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->selectedValue:Lcom/example/linechartlibrary/SelectedValue; invoke-virtual {v0}, Lcom/example/linechartlibrary/SelectedValue;->getFirstIndex()I move-result v0 .line 409 iget-object v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->dataProvider:Lcom/example/linechartlibrary/LineChartDataProvider; invoke-interface {v1}, Lcom/example/linechartlibrary/LineChartDataProvider;->getLineChartData()Lcom/example/linechartlibrary/LineChartData; move-result-object v1 invoke-virtual {v1}, Lcom/example/linechartlibrary/LineChartData;->getLines()Ljava/util/List; move-result-object v1 invoke-interface {v1, v0}, Ljava/util/List;->get(I)Ljava/lang/Object; move-result-object v1 check-cast v1, Lcom/example/linechartlibrary/Line; const/4 v2, 0x1 .line 410 invoke-direct {p0, p1, v1, v0, v2}, Lcom/example/linechartlibrary/LineChartRenderer;->drawPoints(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;II)V return-void .end method .method private isInArea(FFFFF)Z .registers 8 sub-float/2addr p3, p1 sub-float/2addr p4, p2 float-to-double p1, p3 const-wide/high16 v0, 0x4000000000000000L # 2.0 .line 505 invoke-static {p1, p2, v0, v1}, Ljava/lang/Math;->pow(DD)D move-result-wide p1 float-to-double p3, p4 invoke-static {p3, p4, v0, v1}, Ljava/lang/Math;->pow(DD)D move-result-wide p3 add-double/2addr p1, p3 float-to-double p3, p5 invoke-static {p3, p4, v0, v1}, Ljava/lang/Math;->pow(DD)D move-result-wide p3 mul-double/2addr p3, v0 cmpg-double p1, p1, p3 if-gtz p1, :cond_1b const/4 p1, 0x1 goto :goto_1c :cond_1b const/4 p1, 0x0 :goto_1c return p1 .end method .method private prepareLinePaint(Lcom/example/linechartlibrary/Line;)V .registers 5 .line 354 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->linePaint:Landroid/graphics/Paint; iget v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->density:F invoke-virtual {p1}, Lcom/example/linechartlibrary/Line;->getStrokeWidth()I move-result v2 invoke-static {v1, v2}, Lcom/example/linechartlibrary/ChartUtils;->dp2px(FI)I move-result v1 int-to-float v1, v1 invoke-virtual {v0, v1}, Landroid/graphics/Paint;->setStrokeWidth(F)V .line 355 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->linePaint:Landroid/graphics/Paint; invoke-virtual {p1}, Lcom/example/linechartlibrary/Line;->getColor()I move-result v1 invoke-virtual {v0, v1}, Landroid/graphics/Paint;->setColor(I)V .line 356 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->linePaint:Landroid/graphics/Paint; invoke-virtual {p1}, Lcom/example/linechartlibrary/Line;->getPathEffect()Landroid/graphics/PathEffect; move-result-object p1 invoke-virtual {v0, p1}, Landroid/graphics/Paint;->setPathEffect(Landroid/graphics/PathEffect;)Landroid/graphics/PathEffect; .line 357 iget-object p1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->linePaint:Landroid/graphics/Paint; const/4 v0, 0x0 invoke-virtual {p1, v0}, Landroid/graphics/Paint;->setShader(Landroid/graphics/Shader;)Landroid/graphics/Shader; return-void .end method # virtual methods .method public checkTouch(FF)Z .registers 15 .line 146 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->selectedValue:Lcom/example/linechartlibrary/SelectedValue; invoke-virtual {v0}, Lcom/example/linechartlibrary/SelectedValue;->clear()V .line 147 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->dataProvider:Lcom/example/linechartlibrary/LineChartDataProvider; invoke-interface {v0}, Lcom/example/linechartlibrary/LineChartDataProvider;->getLineChartData()Lcom/example/linechartlibrary/LineChartData; move-result-object v0 .line 149 invoke-virtual {v0}, Lcom/example/linechartlibrary/LineChartData;->getLines()Ljava/util/List; move-result-object v0 invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object v6 const/4 v7, 0x0 move v8, v7 :goto_15 invoke-interface {v6}, Ljava/util/Iterator;->hasNext()Z move-result v0 if-eqz v0, :cond_74 invoke-interface {v6}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v0 check-cast v0, Lcom/example/linechartlibrary/Line; .line 150 invoke-direct {p0, v0}, Lcom/example/linechartlibrary/LineChartRenderer;->checkIfShouldDrawPoints(Lcom/example/linechartlibrary/Line;)Z move-result v1 if-eqz v1, :cond_71 .line 151 iget v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->density:F invoke-virtual {v0}, Lcom/example/linechartlibrary/Line;->getPointRadius()I move-result v2 invoke-static {v1, v2}, Lcom/example/linechartlibrary/ChartUtils;->dp2px(FI)I move-result v9 .line 153 invoke-virtual {v0}, Lcom/example/linechartlibrary/Line;->getValues()Ljava/util/List; move-result-object v0 invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object v10 move v11, v7 :goto_3a invoke-interface {v10}, Ljava/util/Iterator;->hasNext()Z move-result v0 if-eqz v0, :cond_71 invoke-interface {v10}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v0 check-cast v0, Lcom/example/linechartlibrary/PointValue; .line 154 iget-object v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v0}, Lcom/example/linechartlibrary/PointValue;->getX()F move-result v2 invoke-virtual {v1, v2}, Lcom/example/linechartlibrary/ChartComputator;->computeRawX(F)F move-result v1 .line 155 iget-object v2, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v0}, Lcom/example/linechartlibrary/PointValue;->getY()F move-result v0 invoke-virtual {v2, v0}, Lcom/example/linechartlibrary/ChartComputator;->computeRawY(F)F move-result v2 .line 156 iget v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->touchToleranceMargin:I add-int/2addr v0, v9 int-to-float v5, v0 move-object v0, p0 move v3, p1 move v4, p2 invoke-direct/range {v0 .. v5}, Lcom/example/linechartlibrary/LineChartRenderer;->isInArea(FFFFF)Z move-result v0 if-eqz v0, :cond_6e .line 157 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->selectedValue:Lcom/example/linechartlibrary/SelectedValue; sget-object v1, Lcom/example/linechartlibrary/SelectedValue$SelectedValueType;->LINE:Lcom/example/linechartlibrary/SelectedValue$SelectedValueType; invoke-virtual {v0, v8, v11, v1}, Lcom/example/linechartlibrary/SelectedValue;->set(IILcom/example/linechartlibrary/SelectedValue$SelectedValueType;)V :cond_6e add-int/lit8 v11, v11, 0x1 goto :goto_3a :cond_71 add-int/lit8 v8, v8, 0x1 goto :goto_15 .line 164 :cond_74 invoke-virtual {p0}, Lcom/example/linechartlibrary/LineChartRenderer;->isTouched()Z move-result v0 return v0 .end method .method public draw(Landroid/graphics/Canvas;)V .registers 6 .line 94 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->dataProvider:Lcom/example/linechartlibrary/LineChartDataProvider; invoke-interface {v0}, Lcom/example/linechartlibrary/LineChartDataProvider;->getLineChartData()Lcom/example/linechartlibrary/LineChartData; move-result-object v0 .line 100 iget-object v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->softwareBitmap:Landroid/graphics/Bitmap; if-eqz v1, :cond_13 .line 101 iget-object v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->softwareCanvas:Landroid/graphics/Canvas; const/4 v2, 0x0 .line 102 sget-object v3, Landroid/graphics/PorterDuff$Mode;->CLEAR:Landroid/graphics/PorterDuff$Mode; invoke-virtual {v1, v2, v3}, Landroid/graphics/Canvas;->drawColor(ILandroid/graphics/PorterDuff$Mode;)V goto :goto_14 :cond_13 move-object v1, p1 .line 107 :goto_14 invoke-virtual {v0}, Lcom/example/linechartlibrary/LineChartData;->getLines()Ljava/util/List; move-result-object v0 invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object v0 :cond_1c :goto_1c invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z move-result v2 if-eqz v2, :cond_46 invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v2 check-cast v2, Lcom/example/linechartlibrary/Line; .line 108 invoke-virtual {v2}, Lcom/example/linechartlibrary/Line;->hasLines()Z move-result v3 if-eqz v3, :cond_1c .line 109 invoke-virtual {v2}, Lcom/example/linechartlibrary/Line;->isCubic()Z move-result v3 if-eqz v3, :cond_38 .line 110 invoke-direct {p0, v1, v2}, Lcom/example/linechartlibrary/LineChartRenderer;->drawSmoothPath(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;)V goto :goto_1c .line 111 :cond_38 invoke-virtual {v2}, Lcom/example/linechartlibrary/Line;->isSquare()Z move-result v3 if-eqz v3, :cond_42 .line 112 invoke-direct {p0, v1, v2}, Lcom/example/linechartlibrary/LineChartRenderer;->drawSquarePath(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;)V goto :goto_1c .line 114 :cond_42 invoke-direct {p0, v1, v2}, Lcom/example/linechartlibrary/LineChartRenderer;->drawPath(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;)V goto :goto_1c .line 119 :cond_46 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->softwareBitmap:Landroid/graphics/Bitmap; if-eqz v0, :cond_4f const/4 v1, 0x0 const/4 v2, 0x0 .line 120 invoke-virtual {p1, v0, v2, v2, v1}, Landroid/graphics/Canvas;->drawBitmap(Landroid/graphics/Bitmap;FFLandroid/graphics/Paint;)V :cond_4f return-void .end method .method public drawUnclipped(Landroid/graphics/Canvas;)V .registers 7 .line 126 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->dataProvider:Lcom/example/linechartlibrary/LineChartDataProvider; invoke-interface {v0}, Lcom/example/linechartlibrary/LineChartDataProvider;->getLineChartData()Lcom/example/linechartlibrary/LineChartData; move-result-object v0 .line 128 invoke-virtual {v0}, Lcom/example/linechartlibrary/LineChartData;->getLines()Ljava/util/List; move-result-object v0 invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object v0 const/4 v1, 0x0 move v2, v1 :goto_10 invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z move-result v3 if-eqz v3, :cond_28 invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v3 check-cast v3, Lcom/example/linechartlibrary/Line; .line 129 invoke-direct {p0, v3}, Lcom/example/linechartlibrary/LineChartRenderer;->checkIfShouldDrawPoints(Lcom/example/linechartlibrary/Line;)Z move-result v4 if-eqz v4, :cond_25 .line 130 invoke-direct {p0, p1, v3, v2, v1}, Lcom/example/linechartlibrary/LineChartRenderer;->drawPoints(Landroid/graphics/Canvas;Lcom/example/linechartlibrary/Line;II)V :cond_25 add-int/lit8 v2, v2, 0x1 goto :goto_10 .line 134 :cond_28 invoke-virtual {p0}, Lcom/example/linechartlibrary/LineChartRenderer;->isTouched()Z move-result v0 if-eqz v0, :cond_31 .line 136 invoke-direct {p0, p1}, Lcom/example/linechartlibrary/LineChartRenderer;->highlightPoints(Landroid/graphics/Canvas;)V :cond_31 return-void .end method .method public onChartDataChanged()V .registers 3 .line 74 invoke-super {p0}, Lcom/example/linechartlibrary/AbstractChartRenderer;->onChartDataChanged()V .line 75 invoke-direct {p0}, Lcom/example/linechartlibrary/LineChartRenderer;->calculateContentRectInternalMargin()I move-result v0 .line 76 iget-object v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v1, v0, v0, v0, v0}, Lcom/example/linechartlibrary/ChartComputator;->insetContentRectByInternalMargins(IIII)V .line 78 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->dataProvider:Lcom/example/linechartlibrary/LineChartDataProvider; invoke-interface {v0}, Lcom/example/linechartlibrary/LineChartDataProvider;->getLineChartData()Lcom/example/linechartlibrary/LineChartData; move-result-object v0 invoke-virtual {v0}, Lcom/example/linechartlibrary/LineChartData;->getBaseValue()F move-result v0 iput v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->baseValue:F .line 80 invoke-virtual {p0}, Lcom/example/linechartlibrary/LineChartRenderer;->onChartViewportChanged()V return-void .end method .method public onChartSizeChanged()V .registers 4 .line 62 invoke-direct {p0}, Lcom/example/linechartlibrary/LineChartRenderer;->calculateContentRectInternalMargin()I move-result v0 .line 63 iget-object v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v1, v0, v0, v0, v0}, Lcom/example/linechartlibrary/ChartComputator;->insetContentRectByInternalMargins(IIII)V .line 65 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v0}, Lcom/example/linechartlibrary/ChartComputator;->getChartWidth()I move-result v0 if-lez v0, :cond_32 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v0}, Lcom/example/linechartlibrary/ChartComputator;->getChartHeight()I move-result v0 if-lez v0, :cond_32 .line 66 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v0}, Lcom/example/linechartlibrary/ChartComputator;->getChartWidth()I move-result v0 iget-object v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v1}, Lcom/example/linechartlibrary/ChartComputator;->getChartHeight()I move-result v1 sget-object v2, Landroid/graphics/Bitmap$Config;->ARGB_4444:Landroid/graphics/Bitmap$Config; invoke-static {v0, v1, v2}, Landroid/graphics/Bitmap;->createBitmap(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap; move-result-object v0 iput-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->softwareBitmap:Landroid/graphics/Bitmap; .line 68 iget-object v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->softwareCanvas:Landroid/graphics/Canvas; invoke-virtual {v1, v0}, Landroid/graphics/Canvas;->setBitmap(Landroid/graphics/Bitmap;)V :cond_32 return-void .end method .method public onChartViewportChanged()V .registers 3 .line 85 iget-boolean v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->isViewportCalculationEnabled:Z if-eqz v0, :cond_19 .line 86 invoke-direct {p0}, Lcom/example/linechartlibrary/LineChartRenderer;->calculateMaxViewport()V .line 87 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; iget-object v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->tempMaximumViewport:Lcom/example/linechartlibrary/Viewport; invoke-virtual {v0, v1}, Lcom/example/linechartlibrary/ChartComputator;->setMaxViewport(Lcom/example/linechartlibrary/Viewport;)V .line 88 iget-object v0, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; iget-object v1, p0, Lcom/example/linechartlibrary/LineChartRenderer;->computator:Lcom/example/linechartlibrary/ChartComputator; invoke-virtual {v1}, Lcom/example/linechartlibrary/ChartComputator;->getMaximumViewport()Lcom/example/linechartlibrary/Viewport; move-result-object v1 invoke-virtual {v0, v1}, Lcom/example/linechartlibrary/ChartComputator;->setCurrentViewport(Lcom/example/linechartlibrary/Viewport;)V :cond_19 return-void .end method