Skip to content

Commit 7649e53

Browse files
committed
Kotlin calcTextWidth
1 parent 96fc3d2 commit 7649e53

File tree

12 files changed

+67
-138
lines changed

12 files changed

+67
-138
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

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

311312
String label = getLongestLabel(p);
312-
float width = (float) Utils.calcTextWidth(p, label) + getXOffset() * 2f;
313+
float width = (float) CanvasUtilsKt.calcTextWidth(p, label) + getXOffset() * 2f;
313314

314315
float minWidth = getMinWidth();
315316
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
@@ -225,7 +226,7 @@ open class HorizontalBarChartRenderer(
225226
val valueY = barEntry.y
226227
val formattedValue = formatter.getFormattedValue(valueY, barEntry, i, viewPortHandler)
227228
// calculate the correct offset depending on the draw position of the value
228-
val valueTextWidth = Utils.calcTextWidth(paintValues, formattedValue).toFloat()
229+
val valueTextWidth = paintValues.calcTextWidth(formattedValue).toFloat()
229230
posOffset = (if (drawValueAboveBar) valueOffsetPlus else -(valueTextWidth + valueOffsetPlus))
230231
negOffset = ((if (drawValueAboveBar) -(valueTextWidth + valueOffsetPlus) else valueOffsetPlus)
231232
- (buffer.buffer[j + 2] - buffer.buffer[j]))
@@ -302,7 +303,7 @@ open class HorizontalBarChartRenderer(
302303
)
303304

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

@@ -380,7 +381,7 @@ open class HorizontalBarChartRenderer(
380381
)
381382

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

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
@@ -380,7 +381,7 @@ open class LegendRenderer(
380381
-formToTextSpace
381382
else if (wasStacked) posX = originPosX
382383

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

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

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

Lines changed: 22 additions & 30 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
dataSet.getEntryForIndex(j)?.let { e ->
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,12 +149,10 @@ open class RadarChartRenderer(
149149
for (j in 0..<dataSet.entryCount) {
150150
dataSet.getEntryForIndex(j)?.let { entry ->
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
157-
)
154+
sliceAngle * j * phaseX + chart.rotationAngle
155+
)
158156

159157
if (dataSet.isDrawValues) {
160158
drawValue(
@@ -172,12 +170,10 @@ open class RadarChartRenderer(
172170
if (entry.icon != null && dataSet.isDrawIcons) {
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
180-
)
175+
sliceAngle * j * phaseX + chart.rotationAngle
176+
)
181177

182178
pIcon.y += iconsOffset.x
183179

@@ -223,14 +219,12 @@ open class RadarChartRenderer(
223219
val xIncrements = 1 + chart.skipWebLineCount
224220
val maxEntryCount = chart.data!!.maxEntryCountSet.entryCount
225221

226-
val p = MPPointF.getInstance(0f, 0f)
222+
var p = MPPointF.getInstance(0f, 0f)
227223
var i = 0
228224
while (i < maxEntryCount) {
229-
Utils.getPosition(
230-
center,
225+
p = center.getPosition(
231226
chart.yRange * factor,
232-
sliceAngle * i + rotationAngle,
233-
p
227+
sliceAngle * i + rotationAngle
234228
)
235229

236230
canvas.drawLine(center.x, center.y, p.x, p.y, webPaint)
@@ -245,8 +239,8 @@ open class RadarChartRenderer(
245239

246240
val labelCount = chart.yAxis.mEntryCount
247241

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

258-
Utils.getPosition(center, r, sliceAngle * i + rotationAngle, p1out)
259-
Utils.getPosition(center, r, sliceAngle * (i + 1) + rotationAngle, p2out)
252+
p1out = center.getPosition(r, sliceAngle * i + rotationAngle)
253+
p2out = center.getPosition(r, sliceAngle * (i + 1) + rotationAngle)
260254

261255
canvas.drawLine(p1out.x, p1out.y, p2out.x, p2out.y, webPaint)
262256
if (chart.isCustomLayerColorEnable) {
@@ -293,7 +287,7 @@ open class RadarChartRenderer(
293287
val factor = chart.factor
294288

295289
val center = chart.centerOffsets
296-
val pOut = MPPointF.getInstance(0f, 0f)
290+
var pOut = MPPointF.getInstance(0f, 0f)
297291

298292
val radarData = chart.data
299293

@@ -310,11 +304,9 @@ open class RadarChartRenderer(
310304

311305
val y = (radarEntry.y - chart.yChartMin)
312306

313-
Utils.getPosition(
314-
center,
307+
pOut = center.getPosition(
315308
y * factor * animator.phaseY,
316-
sliceAngle * high.x * animator.phaseX + chart.rotationAngle,
317-
pOut
309+
sliceAngle * high.x * animator.phaseX + chart.rotationAngle
318310
)
319311
}
320312
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 limitLine = 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)