mirror of
https://github.com/flutter/flutter.git
synced 2026-02-04 19:00:09 +08:00
This auto-formats all *.dart files in the repository outside of the `engine` subdirectory and enforces that these files stay formatted with a presubmit check. **Reviewers:** Please carefully review all the commits except for the one titled "formatted". The "formatted" commit was auto-generated by running `dev/tools/format.sh -a -f`. The other commits were hand-crafted to prepare the repo for the formatting change. I recommend reviewing the commits one-by-one via the "Commits" tab and avoiding Github's "Files changed" tab as it will likely slow down your browser because of the size of this PR. --------- Co-authored-by: Kate Lovett <katelovett@google.com> Co-authored-by: LongCatIsLooong <31859944+LongCatIsLooong@users.noreply.github.com>
177 lines
5.7 KiB
Dart
177 lines
5.7 KiB
Dart
// Copyright 2014 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'package:flutter/rendering.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
import 'rendering_tester.dart';
|
|
|
|
void main() {
|
|
TestRenderingFlutterBinding.ensureInitialized();
|
|
|
|
test('RenderBaseline', () {
|
|
RenderBaseline parent;
|
|
RenderSizedBox child;
|
|
final RenderBox root = RenderPositionedBox(
|
|
alignment: Alignment.topLeft,
|
|
child:
|
|
parent = RenderBaseline(
|
|
baseline: 0.0,
|
|
baselineType: TextBaseline.alphabetic,
|
|
child: child = RenderSizedBox(const Size(100.0, 100.0)),
|
|
),
|
|
);
|
|
final BoxParentData childParentData = child.parentData! as BoxParentData;
|
|
|
|
layout(root);
|
|
expect(childParentData.offset.dx, equals(0.0));
|
|
expect(childParentData.offset.dy, equals(-100.0));
|
|
expect(parent.size, equals(const Size(100.0, 0.0)));
|
|
|
|
parent.baseline = 25.0;
|
|
pumpFrame();
|
|
expect(childParentData.offset.dx, equals(0.0));
|
|
expect(childParentData.offset.dy, equals(-75.0));
|
|
expect(parent.size, equals(const Size(100.0, 25.0)));
|
|
|
|
parent.baseline = 90.0;
|
|
pumpFrame();
|
|
expect(childParentData.offset.dx, equals(0.0));
|
|
expect(childParentData.offset.dy, equals(-10.0));
|
|
expect(parent.size, equals(const Size(100.0, 90.0)));
|
|
|
|
parent.baseline = 100.0;
|
|
pumpFrame();
|
|
expect(childParentData.offset.dx, equals(0.0));
|
|
expect(childParentData.offset.dy, equals(0.0));
|
|
expect(parent.size, equals(const Size(100.0, 100.0)));
|
|
|
|
parent.baseline = 110.0;
|
|
pumpFrame();
|
|
expect(childParentData.offset.dx, equals(0.0));
|
|
expect(childParentData.offset.dy, equals(10.0));
|
|
expect(parent.size, equals(const Size(100.0, 110.0)));
|
|
});
|
|
|
|
test('RenderBaseline different baseline types', () {
|
|
final _RenderBaselineTester child =
|
|
_RenderBaselineTester()
|
|
..boxSize = const Size.square(100)
|
|
..alphabeticBaselineOffset = 50
|
|
..ideographicBaselineOffset = 60;
|
|
final RenderBaseline renderBaseline = RenderBaseline(
|
|
baseline: 1.0,
|
|
baselineType: TextBaseline.alphabetic,
|
|
child: child,
|
|
);
|
|
|
|
layout(renderBaseline, phase: EnginePhase.paint);
|
|
expect(renderBaseline.getDryBaseline(const BoxConstraints(), TextBaseline.alphabetic), 1.0);
|
|
expect(renderBaseline.getDryBaseline(const BoxConstraints(), TextBaseline.ideographic), 11.0);
|
|
|
|
child
|
|
..alphabeticBaselineOffset = null
|
|
..ideographicBaselineOffset = null
|
|
..markNeedsLayout(); // Clears baseline cache.
|
|
|
|
renderBaseline.markNeedsLayout();
|
|
|
|
pumpFrame(phase: EnginePhase.paint);
|
|
expect(renderBaseline.getDryBaseline(const BoxConstraints(), TextBaseline.alphabetic), isNull);
|
|
expect(renderBaseline.getDryBaseline(const BoxConstraints(), TextBaseline.ideographic), isNull);
|
|
});
|
|
|
|
test('RenderFlex and RenderIgnoreBaseline (control test -- with baseline)', () {
|
|
final RenderBox a, b;
|
|
final RenderBox root = RenderFlex(
|
|
crossAxisAlignment: CrossAxisAlignment.baseline,
|
|
textBaseline: TextBaseline.alphabetic,
|
|
textDirection: TextDirection.ltr,
|
|
children: <RenderBox>[
|
|
a = RenderParagraph(
|
|
const TextSpan(
|
|
text: 'a',
|
|
style: TextStyle(fontSize: 128.0, fontFamily: 'FlutterTest'),
|
|
), // places baseline at y=96
|
|
textDirection: TextDirection.ltr,
|
|
),
|
|
b = RenderParagraph(
|
|
const TextSpan(
|
|
text: 'b',
|
|
style: TextStyle(fontSize: 32.0, fontFamily: 'FlutterTest'),
|
|
), // 24 above baseline, 8 below baseline
|
|
textDirection: TextDirection.ltr,
|
|
),
|
|
],
|
|
);
|
|
layout(root);
|
|
|
|
final Offset aPos = a.localToGlobal(Offset.zero);
|
|
final Offset bPos = b.localToGlobal(Offset.zero);
|
|
expect(aPos.dy, 0.0);
|
|
expect(bPos.dy, 96.0 - 24.0);
|
|
});
|
|
|
|
test('RenderFlex and RenderIgnoreBaseline (with ignored baseline)', () {
|
|
final RenderBox a, b;
|
|
final RenderBox root = RenderFlex(
|
|
crossAxisAlignment: CrossAxisAlignment.baseline,
|
|
textBaseline: TextBaseline.alphabetic,
|
|
textDirection: TextDirection.ltr,
|
|
children: <RenderBox>[
|
|
RenderIgnoreBaseline(
|
|
child:
|
|
a = RenderParagraph(
|
|
const TextSpan(
|
|
text: 'a',
|
|
style: TextStyle(fontSize: 128.0, fontFamily: 'FlutterTest'),
|
|
),
|
|
textDirection: TextDirection.ltr,
|
|
),
|
|
),
|
|
b = RenderParagraph(
|
|
const TextSpan(text: 'b', style: TextStyle(fontSize: 32.0, fontFamily: 'FlutterTest')),
|
|
textDirection: TextDirection.ltr,
|
|
),
|
|
],
|
|
);
|
|
layout(root);
|
|
|
|
final Offset aPos = a.localToGlobal(Offset.zero);
|
|
final Offset bPos = b.localToGlobal(Offset.zero);
|
|
expect(aPos.dy, 0.0);
|
|
expect(bPos.dy, 0.0);
|
|
});
|
|
}
|
|
|
|
class _RenderBaselineTester extends RenderBox {
|
|
Size boxSize = Size.zero;
|
|
double? alphabeticBaselineOffset;
|
|
double? ideographicBaselineOffset;
|
|
|
|
@override
|
|
double? computeDistanceToActualBaseline(TextBaseline baseline) {
|
|
return switch (baseline) {
|
|
TextBaseline.alphabetic => alphabeticBaselineOffset,
|
|
TextBaseline.ideographic => ideographicBaselineOffset,
|
|
};
|
|
}
|
|
|
|
@override
|
|
double? computeDryBaseline(covariant BoxConstraints constraints, TextBaseline baseline) {
|
|
return switch (baseline) {
|
|
TextBaseline.alphabetic => alphabeticBaselineOffset,
|
|
TextBaseline.ideographic => ideographicBaselineOffset,
|
|
};
|
|
}
|
|
|
|
@override
|
|
Size computeDryLayout(covariant BoxConstraints constraints) => constraints.constrain(boxSize);
|
|
|
|
@override
|
|
void performLayout() {
|
|
size = computeDryLayout(constraints);
|
|
}
|
|
}
|