Skip to content

Commit

Permalink
Allow to show titles when axis diff is zero, #842, #879
Browse files Browse the repository at this point in the history
  • Loading branch information
imaNNeo committed Jan 29, 2022
1 parent 1d7a2d3 commit ea1d5c0
Show file tree
Hide file tree
Showing 7 changed files with 396 additions and 325 deletions.
168 changes: 82 additions & 86 deletions lib/src/chart/bar_chart/bar_chart_painter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -386,49 +386,47 @@ class BarChartPainter extends AxisChartPainter<BarChartData> {
final drawSize = getChartUsableDrawSize(viewSize, holder);

// Left Titles
if (!data.isVerticalMinMaxIsZero) {
final leftTitles = targetData.titlesData.leftTitles;
final leftInterval = leftTitles.interval ??
Utils().getEfficientInterval(viewSize.height, data.verticalDiff);
if (leftTitles.showTitles) {
var verticalSeek = Utils()
.getBestInitialIntervalValue(data.minY, data.maxY, leftInterval);
while (verticalSeek <= data.maxY) {
if (leftTitles.checkToShowTitle(
data.minY, data.maxY, leftTitles, leftInterval, verticalSeek)) {
var x = 0 + getLeftOffsetDrawSize(holder);
var y = getPixelY(verticalSeek, drawSize, holder);

final text = leftTitles.getTitles(verticalSeek);

final span = TextSpan(
style: Utils().getThemeAwareTextStyle(
context, leftTitles.getTextStyles(context, verticalSeek)),
text: text,
);
final tp = TextPainter(
text: span,
textAlign: leftTitles.textAlign,
textDirection: leftTitles.textDirection,
textScaleFactor: holder.textScale,
);
tp.layout(
maxWidth: leftTitles.reservedSize,
minWidth: leftTitles.reservedSize,
);
x -= tp.width + leftTitles.margin;
y -= tp.height / 2;
x += Utils()
.calculateRotationOffset(tp.size, leftTitles.rotateAngle)
.dx;
canvasWrapper.drawText(tp, Offset(x, y), leftTitles.rotateAngle);
}
if (data.maxY - verticalSeek < leftInterval &&
data.maxY != verticalSeek) {
verticalSeek = data.maxY;
} else {
verticalSeek += leftInterval;
}
final leftTitles = targetData.titlesData.leftTitles;
final leftInterval = leftTitles.interval ??
Utils().getEfficientInterval(viewSize.height, data.verticalDiff);
if (leftTitles.showTitles) {
var verticalSeek = Utils()
.getBestInitialIntervalValue(data.minY, data.maxY, leftInterval);
while (verticalSeek <= data.maxY) {
if (leftTitles.checkToShowTitle(
data.minY, data.maxY, leftTitles, leftInterval, verticalSeek)) {
var x = 0 + getLeftOffsetDrawSize(holder);
var y = getPixelY(verticalSeek, drawSize, holder);

final text = leftTitles.getTitles(verticalSeek);

final span = TextSpan(
style: Utils().getThemeAwareTextStyle(
context, leftTitles.getTextStyles(context, verticalSeek)),
text: text,
);
final tp = TextPainter(
text: span,
textAlign: leftTitles.textAlign,
textDirection: leftTitles.textDirection,
textScaleFactor: holder.textScale,
);
tp.layout(
maxWidth: leftTitles.reservedSize,
minWidth: leftTitles.reservedSize,
);
x -= tp.width + leftTitles.margin;
y -= tp.height / 2;
x += Utils()
.calculateRotationOffset(tp.size, leftTitles.rotateAngle)
.dx;
canvasWrapper.drawText(tp, Offset(x, y), leftTitles.rotateAngle);
}
if (data.maxY - verticalSeek < leftInterval &&
data.maxY != verticalSeek) {
verticalSeek = data.maxY;
} else {
verticalSeek += leftInterval;
}
}
}
Expand Down Expand Up @@ -463,49 +461,47 @@ class BarChartPainter extends AxisChartPainter<BarChartData> {
}

// Right Titles
if (!data.isVerticalMinMaxIsZero) {
final rightTitles = targetData.titlesData.rightTitles;
final rightInterval = rightTitles.interval ??
Utils().getEfficientInterval(viewSize.height, data.verticalDiff);
if (rightTitles.showTitles) {
var verticalSeek = Utils()
.getBestInitialIntervalValue(data.minY, data.maxY, rightInterval);
while (verticalSeek <= data.maxY) {
if (rightTitles.checkToShowTitle(
data.minY, data.maxY, rightTitles, rightInterval, verticalSeek)) {
var x = drawSize.width + getLeftOffsetDrawSize(holder);
var y = getPixelY(verticalSeek, drawSize, holder);

final text = rightTitles.getTitles(verticalSeek);

final span = TextSpan(
style: Utils().getThemeAwareTextStyle(
context, rightTitles.getTextStyles(context, verticalSeek)),
text: text,
);
final tp = TextPainter(
text: span,
textAlign: rightTitles.textAlign,
textDirection: rightTitles.textDirection,
textScaleFactor: holder.textScale,
);
tp.layout(
maxWidth: rightTitles.reservedSize,
minWidth: rightTitles.reservedSize,
);
x += rightTitles.margin;
y -= tp.height / 2;
x -= Utils()
.calculateRotationOffset(tp.size, rightTitles.rotateAngle)
.dx;
canvasWrapper.drawText(tp, Offset(x, y), rightTitles.rotateAngle);
}
if (data.maxY - verticalSeek < rightInterval &&
data.maxY != verticalSeek) {
verticalSeek = data.maxY;
} else {
verticalSeek += rightInterval;
}
final rightTitles = targetData.titlesData.rightTitles;
final rightInterval = rightTitles.interval ??
Utils().getEfficientInterval(viewSize.height, data.verticalDiff);
if (rightTitles.showTitles) {
var verticalSeek = Utils()
.getBestInitialIntervalValue(data.minY, data.maxY, rightInterval);
while (verticalSeek <= data.maxY) {
if (rightTitles.checkToShowTitle(
data.minY, data.maxY, rightTitles, rightInterval, verticalSeek)) {
var x = drawSize.width + getLeftOffsetDrawSize(holder);
var y = getPixelY(verticalSeek, drawSize, holder);

final text = rightTitles.getTitles(verticalSeek);

final span = TextSpan(
style: Utils().getThemeAwareTextStyle(
context, rightTitles.getTextStyles(context, verticalSeek)),
text: text,
);
final tp = TextPainter(
text: span,
textAlign: rightTitles.textAlign,
textDirection: rightTitles.textDirection,
textScaleFactor: holder.textScale,
);
tp.layout(
maxWidth: rightTitles.reservedSize,
minWidth: rightTitles.reservedSize,
);
x += rightTitles.margin;
y -= tp.height / 2;
x -= Utils()
.calculateRotationOffset(tp.size, rightTitles.rotateAngle)
.dx;
canvasWrapper.drawText(tp, Offset(x, y), rightTitles.rotateAngle);
}
if (data.maxY - verticalSeek < rightInterval &&
data.maxY != verticalSeek) {
verticalSeek = data.maxY;
} else {
verticalSeek += rightInterval;
}
}
}
Expand Down
6 changes: 0 additions & 6 deletions lib/src/chart/base/axis_chart/axis_chart_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,6 @@ abstract class AxisChartData extends BaseChartData with EquatableMixin {
/// Difference of [maxX] and [minX]
double get horizontalDiff => maxX - minX;

/// Returns true if [minX] and [maxX] both are zero
bool get isHorizontalMinMaxIsZero => minX == 0 && maxX == 0;

/// Returns true if [minY] and [maxY] both are zero
bool get isVerticalMinMaxIsZero => minY == 0 && maxY == 0;

AxisChartData({
FlGridData? gridData,
required FlAxisTitleData axisTitleData,
Expand Down
112 changes: 52 additions & 60 deletions lib/src/chart/line_chart/line_chart_painter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -895,59 +895,56 @@ class LineChartPainter extends AxisChartPainter<LineChartData> {
final viewSize = getChartUsableDrawSize(canvasWrapper.size, holder);

// Left Titles
if (!data.isVerticalMinMaxIsZero) {
final leftTitles = targetData.titlesData.leftTitles;
final leftInterval = leftTitles.interval ??
Utils().getEfficientInterval(viewSize.height, data.verticalDiff);
if (leftTitles.showTitles) {
var verticalSeek = Utils()
.getBestInitialIntervalValue(data.minY, data.maxY, leftInterval);
while (verticalSeek <= data.maxY) {
if (leftTitles.checkToShowTitle(
data.minY, data.maxY, leftTitles, leftInterval, verticalSeek)) {
var x = 0 + getLeftOffsetDrawSize(holder);
var y = getPixelY(verticalSeek, viewSize, holder);

final text = leftTitles.getTitles(verticalSeek);
final leftTitles = targetData.titlesData.leftTitles;
final leftInterval = leftTitles.interval ??
Utils().getEfficientInterval(viewSize.height, data.verticalDiff);
if (leftTitles.showTitles) {
var verticalSeek = Utils()
.getBestInitialIntervalValue(data.minY, data.maxY, leftInterval);
while (verticalSeek <= data.maxY) {
if (leftTitles.checkToShowTitle(
data.minY, data.maxY, leftTitles, leftInterval, verticalSeek)) {
var x = 0 + getLeftOffsetDrawSize(holder);
var y = getPixelY(verticalSeek, viewSize, holder);

final text = leftTitles.getTitles(verticalSeek);

final span = TextSpan(
style: Utils().getThemeAwareTextStyle(
context, leftTitles.getTextStyles(context, verticalSeek)),
text: text,
);
final tp = TextPainter(
text: span,
textAlign: leftTitles.textAlign,
textDirection: leftTitles.textDirection,
textScaleFactor: holder.textScale,
);
tp.layout(
maxWidth: leftTitles.reservedSize,
minWidth: leftTitles.reservedSize,
);
x -= tp.width + leftTitles.margin;
y -= tp.height / 2;
x += Utils()
.calculateRotationOffset(tp.size, leftTitles.rotateAngle)
.dx;
canvasWrapper.drawText(tp, Offset(x, y), leftTitles.rotateAngle);
}
if (data.maxY - verticalSeek < leftInterval &&
data.maxY != verticalSeek) {
verticalSeek = data.maxY;
} else {
verticalSeek += leftInterval;
}
final span = TextSpan(
style: Utils().getThemeAwareTextStyle(
context, leftTitles.getTextStyles(context, verticalSeek)),
text: text,
);
final tp = TextPainter(
text: span,
textAlign: leftTitles.textAlign,
textDirection: leftTitles.textDirection,
textScaleFactor: holder.textScale,
);
tp.layout(
maxWidth: leftTitles.reservedSize,
minWidth: leftTitles.reservedSize,
);
x -= tp.width + leftTitles.margin;
y -= tp.height / 2;
x += Utils()
.calculateRotationOffset(tp.size, leftTitles.rotateAngle)
.dx;
canvasWrapper.drawText(tp, Offset(x, y), leftTitles.rotateAngle);
}
if (data.maxY - verticalSeek < leftInterval &&
data.maxY != verticalSeek) {
verticalSeek = data.maxY;
} else {
verticalSeek += leftInterval;
}
}
}

// Top titles
if (!data.isHorizontalMinMaxIsZero) {
final topTitles = targetData.titlesData.topTitles;
final topInterval = topTitles.interval ??
Utils().getEfficientInterval(viewSize.width, data.horizontalDiff);
if (topTitles.showTitles) {
final topTitles = targetData.titlesData.topTitles;
final topInterval = topTitles.interval ??
Utils().getEfficientInterval(viewSize.width, data.horizontalDiff);
if (topTitles.showTitles) {
var horizontalSeek = Utils()
.getBestInitialIntervalValue(data.minX, data.maxX, topInterval);
while (horizontalSeek <= data.maxX) {
Expand Down Expand Up @@ -986,14 +983,12 @@ class LineChartPainter extends AxisChartPainter<LineChartData> {
}
}
}
}

// Right Titles
if (!data.isVerticalMinMaxIsZero) {
final rightTitles = targetData.titlesData.rightTitles;
final rightInterval = rightTitles.interval ??
Utils().getEfficientInterval(viewSize.height, data.verticalDiff);
if (rightTitles.showTitles) {
final rightTitles = targetData.titlesData.rightTitles;
final rightInterval = rightTitles.interval ??
Utils().getEfficientInterval(viewSize.height, data.verticalDiff);
if (rightTitles.showTitles) {
var verticalSeek = Utils()
.getBestInitialIntervalValue(data.minY, data.maxY, rightInterval);
while (verticalSeek <= data.maxY) {
Expand Down Expand Up @@ -1036,14 +1031,12 @@ class LineChartPainter extends AxisChartPainter<LineChartData> {
}
}
}
}

// Bottom titles
if (!data.isHorizontalMinMaxIsZero) {
final bottomTitles = targetData.titlesData.bottomTitles;
final bottomInterval = bottomTitles.interval ??
Utils().getEfficientInterval(viewSize.width, data.horizontalDiff);
if (bottomTitles.showTitles) {
final bottomTitles = targetData.titlesData.bottomTitles;
final bottomInterval = bottomTitles.interval ??
Utils().getEfficientInterval(viewSize.width, data.horizontalDiff);
if (bottomTitles.showTitles) {
var horizontalSeek = Utils()
.getBestInitialIntervalValue(data.minX, data.maxX, bottomInterval);
while (horizontalSeek <= data.maxX) {
Expand Down Expand Up @@ -1079,7 +1072,6 @@ class LineChartPainter extends AxisChartPainter<LineChartData> {
}
}
}
}
}

@visibleForTesting
Expand Down
Loading

0 comments on commit ea1d5c0

Please sign in to comment.