Skip to content

Commit 616a2ad

Browse files
authored
Move semantics stuff from rendering to a top-level semantics/ library (flutter#12793)
1 parent 79862a7 commit 616a2ad

17 files changed

+99
-83
lines changed

packages/flutter/lib/rendering.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export 'package:flutter/foundation.dart' show
2828
ValueGetter,
2929
ValueSetter,
3030
DiagnosticLevel;
31+
export 'package:flutter/semantics.dart';
3132
export 'package:vector_math/vector_math_64.dart' show Matrix4;
3233

3334
export 'src/rendering/animated_size.dart';
@@ -47,7 +48,6 @@ export 'src/rendering/paragraph.dart';
4748
export 'src/rendering/performance_overlay.dart';
4849
export 'src/rendering/proxy_box.dart';
4950
export 'src/rendering/rotated_box.dart';
50-
export 'src/rendering/semantics.dart';
5151
export 'src/rendering/shifted_box.dart';
5252
export 'src/rendering/sliver.dart';
5353
export 'src/rendering/sliver_fill.dart';

packages/flutter/lib/semantics.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Copyright 2017 The Chromium Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
/// The Flutter semantics package.
6+
///
7+
/// To use, import `package:flutter/semantics.dart`.
8+
///
9+
/// The [SemanticsEvent] classes define the protocol for sending semantic events
10+
/// to the platform.
11+
///
12+
/// The [SemanticsNode] hierarchy represents the semantic structure of the UI
13+
/// and is used to by the platform-specific accessibility services.
14+
library semantics;
15+
16+
export 'src/semantics/semantics.dart';

packages/flutter/lib/src/painting/matrix_utils.dart

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import 'dart:math' as math;
66
import 'dart:typed_data';
77

8+
import 'package:flutter/foundation.dart';
89
import 'package:vector_math/vector_math_64.dart';
910

1011
import 'basic_types.dart';
@@ -169,3 +170,51 @@ class MatrixUtils {
169170
return transformRect(transform, rect);
170171
}
171172
}
173+
174+
/// Returns a list of strings representing the given transform in a format
175+
/// useful for [TransformProperty].
176+
///
177+
/// If the argument is null, returns a list with the single string "null".
178+
List<String> debugDescribeTransform(Matrix4 transform) {
179+
if (transform == null)
180+
return const <String>['null'];
181+
final List<String> matrix = transform.toString().split('\n').map((String s) => ' $s').toList();
182+
matrix.removeLast();
183+
return matrix;
184+
}
185+
186+
/// Property which handles [Matrix4] that represent transforms.
187+
class TransformProperty extends DiagnosticsProperty<Matrix4> {
188+
/// Create a diagnostics property for [Matrix4] objects.
189+
///
190+
/// The [showName] and [level] arguments must not be null.
191+
TransformProperty(String name, Matrix4 value, {
192+
bool showName: true,
193+
Object defaultValue: kNoDefaultValue,
194+
DiagnosticLevel level: DiagnosticLevel.info,
195+
}) : assert(showName != null),
196+
assert(level != null),
197+
super(
198+
name,
199+
value,
200+
showName: showName,
201+
defaultValue: defaultValue,
202+
level: level,
203+
);
204+
205+
@override
206+
String valueToString({ TextTreeConfiguration parentConfiguration }) {
207+
if (parentConfiguration != null && !parentConfiguration.lineBreakProperties) {
208+
// Format the value on a single line to be compatible with the parent's
209+
// style.
210+
final List<Vector4> rows = <Vector4>[
211+
value.getRow(0),
212+
value.getRow(1),
213+
value.getRow(2),
214+
value.getRow(3),
215+
];
216+
return '[${rows.join("; ")}]';
217+
}
218+
return debugDescribeTransform(value).join('\n');
219+
}
220+
}

packages/flutter/lib/src/rendering/binding.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import 'dart:ui' as ui show window;
99
import 'package:flutter/foundation.dart';
1010
import 'package:flutter/gestures.dart';
1111
import 'package:flutter/scheduler.dart';
12+
import 'package:flutter/semantics.dart';
1213
import 'package:flutter/services.dart';
1314

1415
import 'box.dart';
1516
import 'debug.dart';
1617
import 'object.dart';
17-
import 'semantics.dart';
1818
import 'view.dart';
1919

2020
export 'package:flutter/gestures.dart' show HitTestResult;

packages/flutter/lib/src/rendering/debug.dart

Lines changed: 0 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,12 @@
44

55
import 'package:flutter/foundation.dart';
66
import 'package:flutter/painting.dart';
7-
import 'package:vector_math/vector_math_64.dart';
87

98
export 'package:flutter/foundation.dart' show debugPrint;
109

1110
// Any changes to this file should be reflected in the debugAssertAllRenderVarsUnset()
1211
// function below.
1312

14-
/// Used by [debugDumpSemanticsTree] to specify the order in which child nodes
15-
/// are printed.
16-
enum DebugSemanticsDumpOrder {
17-
/// Print nodes in inverse hit test order.
18-
///
19-
/// In inverse hit test order, the last child of a [SemanticsNode] will be
20-
/// asked first if it wants to respond to a user's interaction, followed by
21-
/// the second last, etc. until a taker is found.
22-
inverseHitTest,
23-
24-
/// Print nodes in traversal order.
25-
///
26-
/// Traversal order defines how the user can move the accessibility focus from
27-
/// one node to another.
28-
traversal,
29-
}
30-
3113
const HSVColor _kDebugDefaultRepaintColor = const HSVColor.fromAHSV(0.4, 60.0, 1.0, 1.0);
3214

3315
/// Causes each RenderBox to paint a box around its bounds, and some extra
@@ -130,54 +112,6 @@ bool debugCheckIntrinsicSizes = false;
130112
bool debugProfilePaintsEnabled = false;
131113

132114

133-
/// Returns a list of strings representing the given transform in a format
134-
/// useful for [TransformProperty].
135-
///
136-
/// If the argument is null, returns a list with the single string "null".
137-
List<String> debugDescribeTransform(Matrix4 transform) {
138-
if (transform == null)
139-
return const <String>['null'];
140-
final List<String> matrix = transform.toString().split('\n').map((String s) => ' $s').toList();
141-
matrix.removeLast();
142-
return matrix;
143-
}
144-
145-
/// Property which handles [Matrix4] that represent transforms.
146-
class TransformProperty extends DiagnosticsProperty<Matrix4> {
147-
/// Create a diagnostics property for [Matrix4] objects.
148-
///
149-
/// The [showName] and [level] arguments must not be null.
150-
TransformProperty(String name, Matrix4 value, {
151-
bool showName: true,
152-
Object defaultValue: kNoDefaultValue,
153-
DiagnosticLevel level: DiagnosticLevel.info,
154-
}) : assert(showName != null),
155-
assert(level != null),
156-
super(
157-
name,
158-
value,
159-
showName: showName,
160-
defaultValue: defaultValue,
161-
level: level,
162-
);
163-
164-
@override
165-
String valueToString({ TextTreeConfiguration parentConfiguration }) {
166-
if (parentConfiguration != null && !parentConfiguration.lineBreakProperties) {
167-
// Format the value on a single line to be compatible with the parent's
168-
// style.
169-
final List<Vector4> rows = <Vector4>[
170-
value.getRow(0),
171-
value.getRow(1),
172-
value.getRow(2),
173-
value.getRow(3),
174-
];
175-
return '[${rows.join("; ")}]';
176-
}
177-
return debugDescribeTransform(value).join('\n');
178-
}
179-
}
180-
181115
void _debugDrawDoubleRect(Canvas canvas, Rect outerRect, Rect innerRect, Color color) {
182116
final Path path = new Path()
183117
..fillType = PathFillType.evenOdd

packages/flutter/lib/src/rendering/editable.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ import 'dart:ui' as ui show TextBox;
77

88
import 'package:flutter/foundation.dart';
99
import 'package:flutter/gestures.dart';
10+
import 'package:flutter/semantics.dart';
1011
import 'package:flutter/services.dart';
1112

1213
import 'box.dart';
1314
import 'object.dart';
14-
import 'semantics.dart';
1515
import 'viewport_offset.dart';
1616

1717
const double _kCaretGap = 1.0; // pixels

packages/flutter/lib/src/rendering/layer.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import 'package:flutter/foundation.dart';
1010
import 'package:flutter/painting.dart';
1111
import 'package:vector_math/vector_math_64.dart';
1212

13-
import 'debug.dart';
14-
1513
/// A composited layer.
1614
///
1715
/// During painting, the render tree generates a tree of composited layers that

packages/flutter/lib/src/rendering/object.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import 'package:flutter/foundation.dart';
99
import 'package:flutter/gestures.dart';
1010
import 'package:flutter/painting.dart';
1111
import 'package:flutter/scheduler.dart';
12+
import 'package:flutter/semantics.dart';
1213
import 'package:vector_math/vector_math_64.dart';
1314

1415
import 'binding.dart';
1516
import 'debug.dart';
1617
import 'layer.dart';
17-
import 'semantics.dart';
1818

1919
export 'package:flutter/foundation.dart' show FlutterError, InformationCollector, DiagnosticsNode, DiagnosticsProperty, StringProperty, DoubleProperty, EnumProperty, FlagProperty, IntProperty, DiagnosticPropertiesBuilder;
2020
export 'package:flutter/gestures.dart' show HitTestEntry, HitTestResult;

packages/flutter/lib/src/rendering/paragraph.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ import 'dart:ui' as ui show Gradient, Shader, TextBox;
66

77
import 'package:flutter/foundation.dart';
88
import 'package:flutter/gestures.dart';
9+
import 'package:flutter/semantics.dart';
910
import 'package:flutter/services.dart';
1011

1112

1213
import 'box.dart';
1314
import 'debug.dart';
1415
import 'object.dart';
15-
import 'semantics.dart';
1616

1717
/// How overflowing text should be handled.
1818
enum TextOverflow {

packages/flutter/lib/src/rendering/proxy_box.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,14 @@ import 'dart:ui' as ui show ImageFilter, Gradient;
77
import 'package:flutter/foundation.dart';
88
import 'package:flutter/gestures.dart';
99
import 'package:flutter/painting.dart';
10+
import 'package:flutter/semantics.dart';
1011
import 'package:flutter/services.dart';
1112

1213
import 'package:vector_math/vector_math_64.dart';
1314

1415
import 'box.dart';
15-
import 'debug.dart';
1616
import 'layer.dart';
1717
import 'object.dart';
18-
import 'semantics.dart';
1918

2019
export 'package:flutter/gestures.dart' show
2120
PointerEvent,

packages/flutter/lib/src/rendering/sliver_persistent_header.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ import 'package:flutter/animation.dart';
88
import 'package:flutter/foundation.dart';
99
import 'package:flutter/gestures.dart';
1010
import 'package:flutter/scheduler.dart';
11+
import 'package:flutter/semantics.dart';
1112
import 'package:vector_math/vector_math_64.dart';
1213

1314
import 'binding.dart';
1415
import 'box.dart';
1516
import 'object.dart';
1617
import 'proxy_box.dart';
17-
import 'semantics.dart';
1818
import 'sliver.dart';
1919
import 'viewport_offset.dart';
2020

packages/flutter/lib/src/rendering/viewport.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ import 'dart:math' as math;
66

77
import 'package:flutter/foundation.dart';
88
import 'package:flutter/gestures.dart';
9+
import 'package:flutter/semantics.dart';
910
import 'package:vector_math/vector_math_64.dart';
1011

1112
import 'binding.dart';
1213
import 'box.dart';
1314
import 'object.dart';
1415
import 'proxy_box.dart';
15-
import 'semantics.dart';
1616
import 'sliver.dart';
1717
import 'viewport_offset.dart';
1818

packages/flutter/lib/src/rendering/semantics.dart renamed to packages/flutter/lib/src/semantics/semantics.dart

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44

55
import 'dart:typed_data';
66
import 'dart:ui' as ui;
7-
import 'dart:ui' show Rect, SemanticsAction, SemanticsFlags;
7+
import 'dart:ui' show Offset, Rect, SemanticsAction, SemanticsFlags,
8+
TextDirection;
89

910
import 'package:flutter/foundation.dart';
10-
import 'package:flutter/painting.dart';
11+
import 'package:flutter/painting.dart' show MatrixUtils, TransformProperty;
1112
import 'package:flutter/services.dart';
1213
import 'package:vector_math/vector_math_64.dart';
1314

14-
import 'debug.dart';
15+
1516
import 'semantics_event.dart';
1617

1718
export 'dart:ui' show SemanticsAction;
@@ -197,7 +198,7 @@ class SemanticsData extends Diagnosticable {
197198
}
198199

199200
@override
200-
int get hashCode => hashValues(flags, actions, label, textDirection, rect, tags, transform);
201+
int get hashCode => ui.hashValues(flags, actions, label, textDirection, rect, tags, transform);
201202
}
202203

203204
class _SemanticsDiagnosticableNode extends DiagnosticableNode<SemanticsNode> {
@@ -1376,6 +1377,23 @@ class SemanticsConfiguration {
13761377
}
13771378
}
13781379

1380+
/// Used by [debugDumpSemanticsTree] to specify the order in which child nodes
1381+
/// are printed.
1382+
enum DebugSemanticsDumpOrder {
1383+
/// Print nodes in inverse hit test order.
1384+
///
1385+
/// In inverse hit test order, the last child of a [SemanticsNode] will be
1386+
/// asked first if it wants to respond to a user's interaction, followed by
1387+
/// the second last, etc. until a taker is found.
1388+
inverseHitTest,
1389+
1390+
/// Print nodes in traversal order.
1391+
///
1392+
/// Traversal order defines how the user can move the accessibility focus from
1393+
/// one node to another.
1394+
traversal,
1395+
}
1396+
13791397
String _concatStrings({
13801398
@required String thisString,
13811399
@required String otherString,

packages/flutter/test/rendering/semantics_test.dart renamed to packages/flutter/test/semantics/semantics_test.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
// found in the LICENSE file.
44

55
import 'package:flutter/rendering.dart';
6+
import 'package:flutter/semantics.dart';
67
import 'package:test/test.dart';
78
import 'package:vector_math/vector_math_64.dart';
89

9-
import 'rendering_tester.dart';
10+
import '../rendering/rendering_tester.dart';
1011

1112

1213
void main() {

packages/flutter/test/widgets/semantics_event_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
import 'package:flutter/rendering.dart';
5+
import 'package:flutter/semantics.dart';
66
import 'package:flutter_test/flutter_test.dart';
77

88
void main() {

packages/flutter/test/widgets/semantics_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import 'package:flutter/material.dart';
66
import 'package:flutter/rendering.dart';
7+
import 'package:flutter/semantics.dart';
78
import 'package:flutter/widgets.dart';
89
import 'package:flutter_test/flutter_test.dart';
910

0 commit comments

Comments
 (0)