Implementation
Widget operationTable(double widthCM) => table(widthCM, [
row([
cell(space(0)),
cell(text('C', align: bpCenter)),
cell(text('G', align: bpCenter)),
cell(space(0))
]),
row([
cell(center(list([
text('+',
offset: const Offset(0.3, -.1),
boxOffset: const Offset(-.2, 0),
box: true),
space(1.2),
text('\u2212',
offset: const Offset(0.3, 0),
boxOffset: const Offset(-.2, 0),
box: true)
]))),
cell(text('x', align: bpCenter)),
cell(text('x', align: bpCenter)),
cell(space(0))
]),
row([
cell(center(text('\u00D7',
box: true,
boxOffset: const Offset(-0.2, 0),
offset: const Offset(0.3, 0)))), // multiply
cell(text('--', align: bpCenter)),
cell(text('x', align: bpCenter)),
cell(space(0))
]),
row([
cell(center(text('\u00F7',
boxOffset: const Offset(-.2, 0),
box: true,
offset: const Offset(0.3, -.1)))), // divide
cell(text('x', align: bpCenter)),
cell(text('x', align: bpCenter)),
cell(list(
[text('\u200aRMD\u22600'), arrowRight(2), space(0.4), text('C')]))
]),
row([
cell(center(sqrtText('\u221Ax',
boxOffset: const Offset(-.25, .08),
box: true,
offset: const Offset(0.1, 0.3)))), // sqrt(x)
cell(text('x', align: bpCenter)),
cell(text('--', align: bpCenter)),
cell(list(
[text('\u200aRMD\u22600'), arrowRight(2), space(0.4), text('C')]))
]),
row([
cell(center(list([
space(0.7),
text('\u200aCHS',
offset: const Offset(0.2, 0),
boxOffset: const Offset(-.1, 0),
box: true,
scale: 0.75),
text(','),
text(' ABS', offset: const Offset(-0.1, 0), box: true, scale: 0.75),
space(0.7)
]))),
cell(text('--', align: bpCenter)),
cell(text('x', align: bpCenter)),
cell(space(0))
]),
row([
cell(center(text('DBL\u00D7',
boxOffset: const Offset(0, .07),
offset: const Offset(0.5, 0.1),
box: true,
scale: 0.9))), // multiply
cell(text('--', align: bpCenter)),
cell(text('x', align: bpCenter)),
cell(list([text('\u200ay\u2219x'), arrowRight(2), text('X&Y')]))
]),
row([
cell(center(text('DBL\u00F7',
boxOffset: const Offset(0, 0.07),
offset: const Offset(0.5, 0.1),
box: true,
scale: 0.91))), // multiply
cell(text('x', align: bpCenter)),
cell(text('o', align: bpCenter)),
cell(list([
text('\u200a(y&z)\u00F7x'),
arrowRight(2),
text('X ; '),
text('RMD\u22600'),
arrowRight(2),
space(0.4),
text('C')
])),
]),
row([
cell(center(text('\u200aSL',
offset: const Offset(0.0, 0.0),
box: true,
boxOffset: const Offset(0, -0.08),
scale: 0.88))),
cell(text('x', align: bpCenter)),
cell(text('--', align: bpCenter)),
cellEB(list([
space(2),
carry(),
arrowLeft(3.7),
registerBox(20, list([space(0.8), arrowLeft(17.8), point()])),
arrowLeft(3.7),
space(0.2),
text('0', scale: 0.8),
space(2)
]))
]),
row([
cell(center(text('SR',
offset: const Offset(0.20, 0.0),
box: true,
boxOffset: const Offset(0, -0.08),
scale: 0.88))),
cell(text('x', align: bpCenter)),
cell(text('--', align: bpCenter)),
cellEB(list([
space(2),
text('0', scale: 0.8, offset: const Offset(.38, 0.10)),
space(0.5),
arrowRight(3.7),
registerBox(
20,
list([
space(1.3),
point(),
arrowRight(18.0),
])),
arrowRight(3.7),
space(0.2),
carry()
]))
]),
row([
cell(center(text('\u200aASR',
offset: const Offset(-0.07, 0.0),
box: true,
boxOffset: const Offset(0, -0.08),
scale: 0.88))),
cell(text('x', align: bpCenter)),
cell(text('--', align: bpCenter)),
cellEB(list([
space(2.0),
BPCustomItem(1.9, (Canvas c, BPItemPainter p) {
final double ym = rowHeightMM / 2;
var path = Path()
..moveTo(1.9, ym)
..lineTo(0, ym)
..lineTo(0, rowHeightMM + 0.1)
..lineTo(2.9, rowHeightMM + 0.1)
..lineTo(2.9, rowHeightMM - 0.8);
c.drawPath(path, p.thinLine);
path = Path()
..addPolygon([
Offset(2.9, rowHeightMM - 0.7),
Offset(2.45, rowHeightMM - 0.2),
Offset(3.35, rowHeightMM - 0.2),
], true);
c.drawPath(path, p.fill);
}),
registerBox(
24,
list([
space(1.3),
point(),
arrowRight(22.0),
])),
arrowRight(3.7),
space(0.2),
carry()
]))
]),
row([
cell(center(text('\u200aRL',
offset: const Offset(-0.10, -0.04),
box: true,
boxOffset: const Offset(.07, -0.08),
scale: 0.88))),
cell(text('x', align: bpCenter)),
cell(text('--', align: bpCenter)),
cellEB(list([
space(4),
carry(),
space(2.3),
point(),
BPCustomItem(0, (Canvas c, BPItemPainter p) {
final double ym = rowHeightMM / 2;
var path = Path()
..moveTo(0, ym)
..lineTo(0, rowHeightMM - 0.45)
..lineTo(25, rowHeightMM - 0.45)
..lineTo(25, ym)
..lineTo(23.4, ym);
c.drawPath(path, p.thinLine);
}),
space(-2.3),
arrowLeft(3.7),
registerBox(21, list([space(0.8), arrowLeft(18.8), point()])),
arrowLeft(0)
]))
]),
row([
cell(center(text('RR',
offset: const Offset(0.10, -0.04),
box: true,
boxOffset: const Offset(0, -0.08),
scale: 0.88))),
cell(text('x', align: bpCenter)),
cell(text('--', align: bpCenter)),
cellEB(list([
space(3.9),
arrowRight(0),
space(-1.9),
BPCustomItem(1.9, (Canvas c, BPItemPainter p) {
final double ym = rowHeightMM / 2;
var path = Path()
..moveTo(1.9, ym)
..lineTo(0, ym)
..lineTo(0, rowHeightMM - 0.45)
..lineTo(27.3, rowHeightMM - 0.45)
..lineTo(27.3, ym);
c.drawPath(path, p.thinLine);
}),
registerBox(
24,
list([
space(1.3),
point(),
arrowRight(22.0),
])),
space(1.4),
point(),
space(-1.4),
arrowRight(3.7),
space(0.2),
carry()
]))
]),
row([
cell(center(text('\u200aRLC',
offset: const Offset(-0.10, -0.04),
box: true,
boxOffset: const Offset(0, -0.08),
scale: 0.88))),
cell(text('x', align: bpCenter)),
cell(text('--', align: bpCenter)),
cellEB(list([
space(4),
carry(),
space(2.3),
BPCustomItem(0, (Canvas c, BPItemPainter p) {
final double ym = rowHeightMM / 2;
var path = Path()
..moveTo(-4.3, ym)
..lineTo(-6.4, ym)
..lineTo(-6.4, rowHeightMM - 0.45)
..lineTo(25, rowHeightMM - 0.45)
..lineTo(25, ym)
..lineTo(23.4, ym);
c.drawPath(path, p.thinLine);
}),
space(-2.3),
arrowLeft(3.7),
registerBox(21, list([space(0.8), arrowLeft(18.8), point()])),
arrowLeft(0)
]))
]),
row([
cell(center(text('RRC',
offset: const Offset(0.10, -0.04),
box: true,
boxOffset: const Offset(0, -0.08),
scale: 0.88))),
cell(text('x', align: bpCenter)),
cell(text('--', align: bpCenter)),
cellEB(list([
space(3.9),
arrowRight(0),
space(-1.9),
BPCustomItem(1.9, (Canvas c, BPItemPainter p) {
final double ym = rowHeightMM / 2;
var path = Path()
..moveTo(1.9, ym)
..lineTo(0, ym)
..lineTo(0, rowHeightMM - 0.45)
..lineTo(30.9, rowHeightMM - 0.45)
..lineTo(30.9, rowHeightMM - .9);
c.drawPath(path, p.thinLine);
}),
registerBox(
24,
list([
space(1.3),
point(),
arrowRight(22.0),
])),
arrowRight(3.7),
space(0.2),
carry()
]))
]),
]);