Select Git revision
parameter_painter.dart
-
Benoît Harrault authoredBenoît Harrault authored
parameter_painter.dart 5.28 KiB
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:momomotus/config/default_game_settings.dart';
import 'package:momomotus/models/settings/settings_game.dart';
import 'package:momomotus/models/settings/settings_global.dart';
class ParameterPainter extends CustomPainter {
const ParameterPainter({
required this.code,
required this.value,
required this.gameSettings,
required this.globalSettings,
});
final String code;
final String value;
final GameSettings gameSettings;
final GlobalSettings globalSettings;
@override
void paint(Canvas canvas, Size size) {
// force square
final double canvasSize = min(size.width, size.height);
// content
switch (code) {
case DefaultGameSettings.parameterCodeLang:
paintLangParameterItem(canvas, canvasSize);
break;
case DefaultGameSettings.parameterCodeLength:
paintLengthParameterItem(canvas, canvasSize);
break;
case DefaultGameSettings.parameterCodeLevel:
paintLevelParameterItem(canvas, canvasSize);
break;
default:
printlog('Unknown parameter: $code/$value');
paintUnknownParameterItem(canvas, canvasSize);
}
}
@override
bool shouldRepaint(CustomPainter oldDelegate) {
return false;
}
// "unknown" parameter -> simple block with text
void paintUnknownParameterItem(
final Canvas canvas,
final double size,
) {
final paint = Paint();
paint.strokeJoin = StrokeJoin.round;
paint.strokeWidth = 3;
final textSpan = TextSpan(
text: '$code\n$value',
style: const TextStyle(
color: Colors.black,
fontSize: 18,
fontWeight: FontWeight.bold,
),
);
final textPainter = TextPainter(
text: textSpan,
textDirection: TextDirection.ltr,
textAlign: TextAlign.center,
);
textPainter.layout();
textPainter.paint(
canvas,
Offset(
(size - textPainter.width) * 0.5,
(size - textPainter.height) * 0.5,
),
);
}
void paintLangParameterItem(
final Canvas canvas,
final double size,
) {
const itemCountEmoji = '💬\n';
String text = '';
switch (value) {
case DefaultGameSettings.lengthValue4:
text = '⭐';
break;
case DefaultGameSettings.lengthValue5:
text = itemCountEmoji + DefaultGameSettings.lengthValue5.toString();
break;
case DefaultGameSettings.lengthValue6:
text = itemCountEmoji + DefaultGameSettings.lengthValue6.toString();
break;
case DefaultGameSettings.lengthValue7:
text = itemCountEmoji + DefaultGameSettings.lengthValue7.toString();
break;
default:
printlog('Wrong value for lang parameter value: $value');
return;
}
final paint = Paint();
paint.strokeJoin = StrokeJoin.round;
paint.strokeWidth = 3 / 100 * size;
// centered text value
final textSpan = TextSpan(
text: text,
style: TextStyle(
color: Colors.black,
fontSize: size / 2.6,
fontWeight: FontWeight.bold,
),
);
final textPainter = TextPainter(
text: textSpan,
textDirection: TextDirection.ltr,
textAlign: TextAlign.center,
);
textPainter.layout();
textPainter.paint(
canvas,
Offset(
(size - textPainter.width) * 0.5,
(size - textPainter.height) * 0.5,
),
);
}
void paintLengthParameterItem(
final Canvas canvas,
final double size,
) {
const itemCountEmoji = '💬\n';
final String text = itemCountEmoji + value.toString();
final paint = Paint();
paint.strokeJoin = StrokeJoin.round;
paint.strokeWidth = 3 / 100 * size;
// centered text value
final textSpan = TextSpan(
text: text,
style: TextStyle(
color: Colors.black,
fontSize: size / 2.6,
fontWeight: FontWeight.bold,
),
);
final textPainter = TextPainter(
text: textSpan,
textDirection: TextDirection.ltr,
textAlign: TextAlign.center,
);
textPainter.layout();
textPainter.paint(
canvas,
Offset(
(size - textPainter.width) * 0.5,
(size - textPainter.height) * 0.5,
),
);
}
void paintLevelParameterItem(
final Canvas canvas,
final double size,
) {
String text = '';
switch (value) {
case DefaultGameSettings.levelValueEasy:
text = '🧒';
break;
case DefaultGameSettings.levelValueNormal:
text = '🤯';
break;
default:
printlog('Wrong value for level parameter value: $value');
return;
}
final paint = Paint();
paint.strokeJoin = StrokeJoin.round;
paint.strokeWidth = 3;
// centered text value
final textSpan = TextSpan(
text: text,
style: TextStyle(
color: Colors.black,
fontSize: size / 2.6,
fontWeight: FontWeight.bold,
),
);
final textPainter = TextPainter(
text: textSpan,
textDirection: TextDirection.ltr,
textAlign: TextAlign.center,
);
textPainter.layout();
textPainter.paint(
canvas,
Offset(
(size - textPainter.width) * 0.5,
(size - textPainter.height) * 0.5,
),
);
}
}