Skip to content

Commit

Permalink
Fix behavior of ColumnChart and HorizontalAxis in RTL layouts
Browse files Browse the repository at this point in the history
  • Loading branch information
patrickmichalik committed Jul 28, 2023
1 parent f67bf22 commit 3a309da
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -100,15 +100,18 @@ public class HorizontalAxis<Position : AxisPosition.Horizontal>(

val textY = if (position.isBottom) tickMarkBottom else tickMarkTop
val fullXRange = getFullXRange(horizontalDimensions)
val baseCanvasX = bounds.getStart(isLtr) - horizontalScroll + horizontalDimensions.startPadding
val firstVisibleX = fullXRange.start + horizontalScroll / horizontalDimensions.xSpacing * chartValues.xStep
val baseCanvasX = bounds.getStart(isLtr) - horizontalScroll + horizontalDimensions.startPadding *
layoutDirectionMultiplier
val firstVisibleX = fullXRange.start + horizontalScroll / horizontalDimensions.xSpacing * chartValues.xStep *
layoutDirectionMultiplier
val lastVisibleX = firstVisibleX + bounds.width() / horizontalDimensions.xSpacing * chartValues.xStep
val visibleXRange = firstVisibleX..lastVisibleX
val labelValues = itemPlacer.getLabelValues(this, visibleXRange, fullXRange)
val lineValues = itemPlacer.getLineValues(this, visibleXRange, fullXRange)

labelValues.forEachIndexed { index, x ->
val canvasX = baseCanvasX + x / chartValues.xStep * horizontalDimensions.xSpacing
val canvasX = baseCanvasX + x / chartValues.xStep * horizontalDimensions.xSpacing *
layoutDirectionMultiplier
val previousX = labelValues.getOrNull(index - 1) ?: (fullXRange.start.doubled - x)
val nextX = labelValues.getOrNull(index + 1) ?: (fullXRange.endInclusive.doubled - x)
val maxWidth = (min(x - previousX, nextX - x) / chartValues.xStep * horizontalDimensions.xSpacing).toInt()
Expand Down Expand Up @@ -136,7 +139,8 @@ public class HorizontalAxis<Position : AxisPosition.Horizontal>(

lineValues?.forEach { x ->
drawLines(
canvasX = baseCanvasX + x / chartValues.xStep * horizontalDimensions.xSpacing,
canvasX = baseCanvasX + x / chartValues.xStep * horizontalDimensions.xSpacing *
layoutDirectionMultiplier,
tickTop = tickMarkTop,
tickBottom = tickMarkBottom,
skipGuideline = x.isBoundOf(fullXRange),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,9 @@ public open class ColumnChart(
height = abs(entry.y) * heightMultiplier
val xSpacingMultiplier = (entry.x - chartValues.minX) / chartValues.xStep
check(xSpacingMultiplier % 1f == 0f) { "Each entry’s x value must be a multiple of the x step." }
columnCenterX = drawingStart + layoutDirectionMultiplier * horizontalDimensions.xSpacing *
xSpacingMultiplier + column.thicknessDp.half.pixels * chartScale
columnCenterX = drawingStart +
(horizontalDimensions.xSpacing * xSpacingMultiplier + column.thicknessDp.half.pixels * chartScale) *
layoutDirectionMultiplier

when (mergeMode) {
MergeMode.Stack -> {
Expand Down Expand Up @@ -368,9 +369,10 @@ public open class ColumnChart(

MergeMode.Stack -> 0f
}
return bounds.getStart(isLtr) + horizontalDimensions.scaled(chartScale).startPadding +
(mergeModeComponent - getColumnCollectionWidth(entryCollectionCount).half) * chartScale *
layoutDirectionMultiplier
return bounds.getStart(isLtr) + (
horizontalDimensions.scaled(chartScale).startPadding +
(mergeModeComponent - getColumnCollectionWidth(entryCollectionCount).half) * chartScale
) * layoutDirectionMultiplier
}

protected open fun MeasureContext.getCumulatedThickness(count: Int): Float {
Expand Down

0 comments on commit 3a309da

Please sign in to comment.