Skip to content

Commit 9f21baf

Browse files
committed
Kotlin calcTextWidth
1 parent a145004 commit 9f21baf

File tree

12 files changed

+65
-136
lines changed

12 files changed

+65
-136
lines changed

MPChartLib/src/main/java/com/github/mikephil/charting/components/Legend.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.graphics.DashPathEffect;
44
import android.graphics.Paint;
55

6+
import com.github.mikephil.charting.utils.CanvasUtilsKt;
67
import com.github.mikephil.charting.utils.ColorTemplate;
78
import com.github.mikephil.charting.utils.FSize;
89
import com.github.mikephil.charting.utils.Utils;
@@ -199,7 +200,7 @@ public float getMaximumEntryWidth(Paint p) {
199200
String label = entry.label;
200201
if (label == null) continue;
201202

202-
float length = (float) Utils.calcTextWidth(p, label);
203+
float length = (float) CanvasUtilsKt.calcTextWidth(p, label);
203204

204205
if (length > max)
205206
max = length;
@@ -636,7 +637,7 @@ else if (wasStacked) {
636637
wasStacked = false;
637638
}
638639

639-
width += Utils.calcTextWidth(labelpaint, label);
640+
width += CanvasUtilsKt.calcTextWidth(labelpaint, label);
640641

641642
maxHeight += labelLineHeight + yEntrySpace;
642643
} else {

MPChartLib/src/main/java/com/github/mikephil/charting/components/YAxis.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.graphics.Color;
44
import android.graphics.Paint;
55

6+
import com.github.mikephil.charting.utils.CanvasUtilsKt;
67
import com.github.mikephil.charting.utils.Utils;
78
import com.github.mikephil.charting.utils.UtilsKtKt;
89

@@ -310,7 +311,7 @@ public float getRequiredWidthSpace(Paint p) {
310311
p.setTextSize(mTextSize);
311312

312313
String label = getLongestLabel(p);
313-
float width = (float) Utils.calcTextWidth(p, label) + getXOffset() * 2f;
314+
float width = (float) CanvasUtilsKt.calcTextWidth(p, label) + getXOffset() * 2f;
314315

315316
float minWidth = getMinWidth();
316317
float maxWidth = getMaxWidth();

MPChartLib/src/main/java/com/github/mikephil/charting/highlight/RadarHighlighter.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import com.github.mikephil.charting.data.Entry;
55
import com.github.mikephil.charting.interfaces.datasets.IDataSet;
66
import com.github.mikephil.charting.utils.MPPointF;
7-
import com.github.mikephil.charting.utils.Utils;
7+
import com.github.mikephil.charting.utils.UtilsKtKt;
88

99
import java.util.List;
1010

@@ -65,9 +65,9 @@ protected List<Highlight> getHighlightsAtIndex(int index) {
6565

6666
float y = (entry.getY() - mChart.getYChartMin());
6767

68-
Utils.getPosition(
68+
pOut = UtilsKtKt.getPosition(
6969
mChart.getCenterOffsets(), y * factor * phaseY,
70-
sliceangle * index * phaseX + mChart.getRotationAngle(), pOut
70+
sliceangle * index * phaseX + mChart.getRotationAngle()
7171
);
7272

7373
mHighlightBuffer.add(new Highlight(index, entry.getY(), pOut.x, pOut.y, i, dataSet.getAxisDependency()));

MPChartLib/src/main/java/com/github/mikephil/charting/renderer/HorizontalBarChartRenderer.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import com.github.mikephil.charting.utils.MPPointF
1414
import com.github.mikephil.charting.utils.Transformer
1515
import com.github.mikephil.charting.utils.Utils
1616
import com.github.mikephil.charting.utils.ViewPortHandler
17+
import com.github.mikephil.charting.utils.calcTextWidth
1718
import com.github.mikephil.charting.utils.convertDpToPixel
1819
import kotlin.math.ceil
1920
import kotlin.math.min
@@ -224,7 +225,7 @@ open class HorizontalBarChartRenderer(
224225
val formattedValue = formatter.getFormattedValue(`val`, entry, i, viewPortHandler)
225226

226227
// calculate the correct offset depending on the draw position of the value
227-
val valueTextWidth = Utils.calcTextWidth(paintValues, formattedValue).toFloat()
228+
val valueTextWidth = paintValues.calcTextWidth(formattedValue).toFloat()
228229
posOffset = (if (drawValueAboveBar) valueOffsetPlus else -(valueTextWidth + valueOffsetPlus))
229230
negOffset = ((if (drawValueAboveBar) -(valueTextWidth + valueOffsetPlus) else valueOffsetPlus)
230231
- (buffer.buffer[j + 2] - buffer.buffer[j]))
@@ -301,7 +302,7 @@ open class HorizontalBarChartRenderer(
301302
)
302303

303304
// calculate the correct offset depending on the draw position of the value
304-
val valueTextWidth = Utils.calcTextWidth(paintValues, formattedValue).toFloat()
305+
val valueTextWidth = paintValues.calcTextWidth(formattedValue).toFloat()
305306
posOffset = (if (drawValueAboveBar) valueOffsetPlus else -(valueTextWidth + valueOffsetPlus))
306307
negOffset = (if (drawValueAboveBar) -(valueTextWidth + valueOffsetPlus) else valueOffsetPlus)
307308

@@ -379,7 +380,7 @@ open class HorizontalBarChartRenderer(
379380
)
380381

381382
// calculate the correct offset depending on the draw position of the value
382-
val valueTextWidth = Utils.calcTextWidth(paintValues, formattedValue).toFloat()
383+
val valueTextWidth = paintValues.calcTextWidth(formattedValue).toFloat()
383384
posOffset = (if (drawValueAboveBar) valueOffsetPlus else -(valueTextWidth + valueOffsetPlus))
384385
negOffset = (if (drawValueAboveBar) -(valueTextWidth + valueOffsetPlus) else valueOffsetPlus)
385386

MPChartLib/src/main/java/com/github/mikephil/charting/renderer/LegendRenderer.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import com.github.mikephil.charting.interfaces.datasets.IPieDataSet
1919
import com.github.mikephil.charting.utils.ColorTemplate
2020
import com.github.mikephil.charting.utils.Utils
2121
import com.github.mikephil.charting.utils.ViewPortHandler
22+
import com.github.mikephil.charting.utils.calcTextWidth
2223
import com.github.mikephil.charting.utils.convertDpToPixel
2324
import java.util.Collections
2425
import kotlin.math.min
@@ -379,7 +380,7 @@ open class LegendRenderer(
379380
-formToTextSpace
380381
else if (wasStacked) posX = originPosX
381382

382-
if (direction == LegendDirection.RIGHT_TO_LEFT) posX -= Utils.calcTextWidth(labelPaint, e.label).toFloat()
383+
if (direction == LegendDirection.RIGHT_TO_LEFT) posX -= labelPaint.calcTextWidth(e.label).toFloat()
383384

384385
if (!wasStacked) {
385386
drawLabel(canvas, posX, posY + labelLineHeight, e.label)

MPChartLib/src/main/java/com/github/mikephil/charting/renderer/RadarChartRenderer.kt

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import com.github.mikephil.charting.utils.MPPointF
1414
import com.github.mikephil.charting.utils.Utils
1515
import com.github.mikephil.charting.utils.ViewPortHandler
1616
import com.github.mikephil.charting.utils.convertDpToPixel
17+
import com.github.mikephil.charting.utils.getPosition
1718

1819
open class RadarChartRenderer(
1920
protected var chart: RadarChart, animator: ChartAnimator,
@@ -63,7 +64,7 @@ open class RadarChartRenderer(
6364
val factor = chart.factor
6465

6566
val center = chart.centerOffsets
66-
val pOut = MPPointF.getInstance(0f, 0f)
67+
var pOut = MPPointF.getInstance(0f, 0f)
6768
val surface = drawDataSetSurfacePathBuffer
6869
surface.reset()
6970

@@ -74,10 +75,9 @@ open class RadarChartRenderer(
7475

7576
val e = dataSet.getEntryForIndex(j)
7677

77-
Utils.getPosition(
78-
center,
78+
pOut = center.getPosition(
7979
(e.y - chart.yChartMin) * factor * phaseY,
80-
sliceAngle * j * phaseX + chart.rotationAngle, pOut
80+
sliceAngle * j * phaseX + chart.rotationAngle
8181
)
8282

8383
if (java.lang.Float.isNaN(pOut.x)) continue
@@ -125,8 +125,8 @@ open class RadarChartRenderer(
125125
val factor = chart.factor
126126

127127
val center = chart.centerOffsets
128-
val pOut = MPPointF.getInstance(0f, 0f)
129-
val pIcon = MPPointF.getInstance(0f, 0f)
128+
var pOut = MPPointF.getInstance(0f, 0f)
129+
var pIcon = MPPointF.getInstance(0f, 0f)
130130

131131
val yOffset = 5f.convertDpToPixel()
132132

@@ -149,11 +149,9 @@ open class RadarChartRenderer(
149149
for (j in 0..<dataSet.entryCount) {
150150
val entry = dataSet.getEntryForIndex(j)
151151

152-
Utils.getPosition(
153-
center,
152+
pOut = center.getPosition(
154153
(entry.y - chart.yChartMin) * factor * phaseY,
155-
sliceAngle * j * phaseX + chart.rotationAngle,
156-
pOut
154+
sliceAngle * j * phaseX + chart.rotationAngle
157155
)
158156

159157
if (dataSet.isDrawValuesEnabled) {
@@ -172,11 +170,9 @@ open class RadarChartRenderer(
172170
if (entry.icon != null && dataSet.isDrawIconsEnabled) {
173171
val icon = entry.icon
174172

175-
Utils.getPosition(
176-
center,
173+
pIcon = center.getPosition(
177174
(entry.y) * factor * phaseY + iconsOffset.y,
178-
sliceAngle * j * phaseX + chart.rotationAngle,
179-
pIcon
175+
sliceAngle * j * phaseX + chart.rotationAngle
180176
)
181177

182178
pIcon.y += iconsOffset.x
@@ -222,14 +218,12 @@ open class RadarChartRenderer(
222218
val xIncrements = 1 + chart.skipWebLineCount
223219
val maxEntryCount = chart.data!!.maxEntryCountSet.entryCount
224220

225-
val p = MPPointF.getInstance(0f, 0f)
221+
var p = MPPointF.getInstance(0f, 0f)
226222
var i = 0
227223
while (i < maxEntryCount) {
228-
Utils.getPosition(
229-
center,
224+
p = center.getPosition(
230225
chart.yRange * factor,
231-
sliceAngle * i + rotationAngle,
232-
p
226+
sliceAngle * i + rotationAngle
233227
)
234228

235229
canvas.drawLine(center.x, center.y, p.x, p.y, webPaint)
@@ -244,8 +238,8 @@ open class RadarChartRenderer(
244238

245239
val labelCount = chart.yAxis.mEntryCount
246240

247-
val p1out = MPPointF.getInstance(0f, 0f)
248-
val p2out = MPPointF.getInstance(0f, 0f)
241+
var p1out = MPPointF.getInstance(0f, 0f)
242+
var p2out = MPPointF.getInstance(0f, 0f)
249243
for (j in 0..<labelCount) {
250244
if (chart.isCustomLayerColorEnable) {
251245
innerArea.rewind()
@@ -254,8 +248,8 @@ open class RadarChartRenderer(
254248
for (i in 0..<chart.data!!.entryCount) {
255249
val r = (chart.yAxis.mEntries[j] - chart.yChartMin) * factor
256250

257-
Utils.getPosition(center, r, sliceAngle * i + rotationAngle, p1out)
258-
Utils.getPosition(center, r, sliceAngle * (i + 1) + rotationAngle, p2out)
251+
p1out = center.getPosition(r, sliceAngle * i + rotationAngle)
252+
p2out = center.getPosition(r, sliceAngle * (i + 1) + rotationAngle)
259253

260254
canvas.drawLine(p1out.x, p1out.y, p2out.x, p2out.y, webPaint)
261255
if (chart.isCustomLayerColorEnable) {
@@ -292,7 +286,7 @@ open class RadarChartRenderer(
292286
val factor = chart.factor
293287

294288
val center = chart.centerOffsets
295-
val pOut = MPPointF.getInstance(0f, 0f)
289+
var pOut = MPPointF.getInstance(0f, 0f)
296290

297291
val radarData = chart.data
298292

@@ -307,11 +301,9 @@ open class RadarChartRenderer(
307301

308302
val y = (radarEntry.y - chart.yChartMin)
309303

310-
Utils.getPosition(
311-
center,
304+
pOut = center.getPosition(
312305
y * factor * animator.phaseY,
313-
sliceAngle * high.x * animator.phaseX + chart.rotationAngle,
314-
pOut
306+
sliceAngle * high.x * animator.phaseX + chart.rotationAngle
315307
)
316308

317309
high.setDraw(pOut.x, pOut.y)

MPChartLib/src/main/java/com/github/mikephil/charting/renderer/XAxisRenderer.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import android.graphics.Paint
66
import android.graphics.Paint.Align
77
import android.graphics.Path
88
import android.graphics.RectF
9+
import androidx.core.graphics.withClip
10+
import androidx.core.graphics.withSave
911
import com.github.mikephil.charting.components.LimitLine
1012
import com.github.mikephil.charting.components.LimitLine.LimitLabelPosition
1113
import com.github.mikephil.charting.components.XAxis
@@ -16,9 +18,9 @@ import com.github.mikephil.charting.utils.MPPointF
1618
import com.github.mikephil.charting.utils.Transformer
1719
import com.github.mikephil.charting.utils.Utils
1820
import com.github.mikephil.charting.utils.ViewPortHandler
19-
import androidx.core.graphics.withClip
20-
import androidx.core.graphics.withSave
21+
import com.github.mikephil.charting.utils.calcTextWidth
2122
import com.github.mikephil.charting.utils.convertDpToPixel
23+
import com.github.mikephil.charting.utils.drawXAxisValue
2224
import kotlin.math.roundToInt
2325

2426
open class XAxisRenderer(
@@ -201,15 +203,15 @@ open class XAxisRenderer(
201203
// avoid clipping of the last
202204

203205
if (i / 2 == xAxis.mEntryCount - 1 && xAxis.mEntryCount > 1) {
204-
val width = Utils.calcTextWidth(paintAxisLabels, label).toFloat()
206+
val width = paintAxisLabels.calcTextWidth(label).toFloat()
205207

206208
if (width > viewPortHandler.offsetRight() * 2
207209
&& x + width > viewPortHandler.chartWidth
208210
) x -= width / 2
209211

210212
// avoid clipping of the first
211213
} else if (i == 0) {
212-
val width = Utils.calcTextWidth(paintAxisLabels, label).toFloat()
214+
val width = paintAxisLabels.calcTextWidth(label).toFloat()
213215
x += width / 2
214216
}
215217
}
@@ -221,7 +223,7 @@ open class XAxisRenderer(
221223
}
222224

223225
protected fun drawLabel(canvas: Canvas, formattedLabel: String?, x: Float, y: Float, anchor: MPPointF, angleDegrees: Float) {
224-
Utils.drawXAxisValue(canvas, formattedLabel, x, y, paintAxisLabels, anchor, angleDegrees)
226+
canvas.drawXAxisValue(formattedLabel, x, y, paintAxisLabels, anchor, angleDegrees)
225227
}
226228

227229
protected open var mRenderGridLinesPath: Path = Path()

MPChartLib/src/main/java/com/github/mikephil/charting/renderer/XAxisRendererRadarChart.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import android.graphics.Canvas
44
import com.github.mikephil.charting.charts.RadarChart
55
import com.github.mikephil.charting.components.XAxis
66
import com.github.mikephil.charting.utils.MPPointF
7-
import com.github.mikephil.charting.utils.Utils
87
import com.github.mikephil.charting.utils.ViewPortHandler
8+
import com.github.mikephil.charting.utils.getPosition
99

1010
class XAxisRendererRadarChart(viewPortHandler: ViewPortHandler, xAxis: XAxis, private val chart: RadarChart) : XAxisRenderer(viewPortHandler, xAxis, null) {
1111
override fun renderAxisLabels(canvas: Canvas) {
@@ -26,14 +26,14 @@ class XAxisRendererRadarChart(viewPortHandler: ViewPortHandler, xAxis: XAxis, pr
2626
val factor = chart.factor
2727

2828
val center = chart.centerOffsets
29-
val pOut = MPPointF.getInstance(0f, 0f)
29+
var pOut = MPPointF.getInstance(0f, 0f)
3030
for (i in 0..<chart.data!!.maxEntryCountSet.entryCount) {
3131
val label = xAxis.valueFormatter.getFormattedValue(i.toFloat(), xAxis)
3232

3333
val angle = (sliceAngle * i + chart.rotationAngle) % 360f
3434

35-
Utils.getPosition(
36-
center, chart.yRange * factor + xAxis.mLabelWidth / 2f, angle, pOut
35+
pOut = center.getPosition(
36+
chart.yRange * factor + xAxis.mLabelWidth / 2f, angle
3737
)
3838

3939
drawLabel(

MPChartLib/src/main/java/com/github/mikephil/charting/renderer/YAxisRendererRadarChart.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import android.graphics.Path
55
import com.github.mikephil.charting.charts.RadarChart
66
import com.github.mikephil.charting.components.YAxis
77
import com.github.mikephil.charting.utils.MPPointF
8-
import com.github.mikephil.charting.utils.Utils
98
import com.github.mikephil.charting.utils.ViewPortHandler
9+
import com.github.mikephil.charting.utils.getPosition
1010
import com.github.mikephil.charting.utils.roundToNextSignificant
1111
import kotlin.math.abs
1212
import kotlin.math.ceil
@@ -144,7 +144,7 @@ class YAxisRendererRadarChart(viewPortHandler: ViewPortHandler, yAxis: YAxis, pr
144144
paintAxisLabels.color = yAxis.textColor
145145

146146
val center = chart.centerOffsets
147-
val pOut = MPPointF.getInstance(0f, 0f)
147+
var pOut = MPPointF.getInstance(0f, 0f)
148148
val factor = chart.factor
149149

150150
val from = if (yAxis.isDrawBottomYLabelEntryEnabled) 0 else 1
@@ -158,7 +158,7 @@ class YAxisRendererRadarChart(viewPortHandler: ViewPortHandler, yAxis: YAxis, pr
158158
for (j in from..<to) {
159159
val r = (yAxis.mEntries[j] - yAxis.mAxisMinimum) * factor
160160

161-
Utils.getPosition(center, r, chart.rotationAngle, pOut)
161+
pOut = center.getPosition(r, chart.rotationAngle)
162162

163163
val label = yAxis.getFormattedLabel(j)
164164

@@ -178,7 +178,7 @@ class YAxisRendererRadarChart(viewPortHandler: ViewPortHandler, yAxis: YAxis, pr
178178
val factor = chart.factor
179179

180180
val center = chart.centerOffsets
181-
val pOut = MPPointF.getInstance(0f, 0f)
181+
var pOut = MPPointF.getInstance(0f, 0f)
182182
for (i in limitLines.indices) {
183183
val l = limitLines[i]
184184

@@ -195,7 +195,7 @@ class YAxisRendererRadarChart(viewPortHandler: ViewPortHandler, yAxis: YAxis, pr
195195

196196

197197
for (j in 0..<chart.data!!.maxEntryCountSet.entryCount) {
198-
Utils.getPosition(center, r, sliceAngle * j + chart.rotationAngle, pOut)
198+
pOut = center.getPosition(r, sliceAngle * j + chart.rotationAngle)
199199

200200
if (j == 0) limitPath.moveTo(pOut.x, pOut.y)
201201
else limitPath.lineTo(pOut.x, pOut.y)

MPChartLib/src/main/java/com/github/mikephil/charting/utils/CanvasUtils.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ private val mDrawableBoundsCache = Rect()
1616
val DEG2RAD: Double = (Math.PI / 180.0)
1717
val FDEG2RAD: Float = (Math.PI.toFloat() / 180f)
1818

19+
/**
20+
* calculates the approximate width of a text, depending on a demo text avoid repeated calls (e.g. inside drawing methods)
21+
*/
22+
fun Paint.calcTextWidth(demoText: String?) = this.measureText(demoText).toInt()
23+
1924
/**
2025
* Utilities class that has some helper methods. Needs to be initialized by
2126
* calling Utils.init(...) before usage. Inside the Chart.init() method, this is

0 commit comments

Comments
 (0)