未验证 提交 99f3f7a9 编写于 作者: C Chris Bracken 提交者: GitHub

Fix incorrect transformation matrix (#8001)

Previously the transformation matrix returned on semantics nodes was
fetched by matrix col,row (incorrectly). This uses the SkMatrix
constants instead and adds a test.
上级 c88b0971
...@@ -412,12 +412,18 @@ FlutterEngineResult FlutterEngineRun(size_t version, ...@@ -412,12 +412,18 @@ FlutterEngineResult FlutterEngineRun(size_t version,
user_data](blink::SemanticsNodeUpdates update) { user_data](blink::SemanticsNodeUpdates update) {
for (const auto& value : update) { for (const auto& value : update) {
const auto& node = value.second; const auto& node = value.second;
const auto& transform = node.transform; SkMatrix transform = static_cast<SkMatrix>(node.transform);
auto flutter_transform = FlutterTransformation{ FlutterTransformation flutter_transform{
transform.get(0, 0), transform.get(0, 1), transform.get(0, 2), transform.get(SkMatrix::kMScaleX),
transform.get(1, 0), transform.get(1, 1), transform.get(1, 2), transform.get(SkMatrix::kMSkewX),
transform.get(2, 0), transform.get(2, 1), transform.get(2, 2)}; transform.get(SkMatrix::kMTransX),
const FlutterSemanticsNode embedder_node = { transform.get(SkMatrix::kMSkewY),
transform.get(SkMatrix::kMScaleY),
transform.get(SkMatrix::kMTransY),
transform.get(SkMatrix::kMPersp0),
transform.get(SkMatrix::kMPersp1),
transform.get(SkMatrix::kMPersp2)};
const FlutterSemanticsNode embedder_node{
sizeof(FlutterSemanticsNode), sizeof(FlutterSemanticsNode),
node.id, node.id,
static_cast<FlutterSemanticsFlag>(node.flags), static_cast<FlutterSemanticsFlag>(node.flags),
......
...@@ -2,12 +2,17 @@ import 'dart:async'; ...@@ -2,12 +2,17 @@ import 'dart:async';
import 'dart:typed_data'; import 'dart:typed_data';
import 'dart:ui'; import 'dart:ui';
Float64List kIdentityTransform = () { Float64List kTestTransform = () {
final Float64List values = Float64List(16); final Float64List values = Float64List(16);
values[0] = 1.0; values[0] = 1.0; // scaleX
values[5] = 1.0; values[4] = 2.0; // skewX
values[10] = 1.0; values[12] = 3.0; // transX
values[15] = 1.0; values[1] = 4.0; // skewY
values[5] = 5.0; // scaleY
values[13] = 6.0; // transY
values[3] = 7.0; // pers0
values[7] = 8.0; // pers1
values[15] = 9.0; // pers2
return values; return values;
}(); }();
...@@ -68,7 +73,7 @@ main() async { ...@@ -68,7 +73,7 @@ main() async {
id: 42, id: 42,
label: 'A: root', label: 'A: root',
rect: Rect.fromLTRB(0.0, 0.0, 10.0, 10.0), rect: Rect.fromLTRB(0.0, 0.0, 10.0, 10.0),
transform: kIdentityTransform, transform: kTestTransform,
childrenInTraversalOrder: Int32List.fromList(<int>[84, 96]), childrenInTraversalOrder: Int32List.fromList(<int>[84, 96]),
childrenInHitTestOrder: Int32List.fromList(<int>[96, 84]), childrenInHitTestOrder: Int32List.fromList(<int>[96, 84]),
) )
...@@ -76,13 +81,13 @@ main() async { ...@@ -76,13 +81,13 @@ main() async {
id: 84, id: 84,
label: 'B: leaf', label: 'B: leaf',
rect: Rect.fromLTRB(40.0, 40.0, 80.0, 80.0), rect: Rect.fromLTRB(40.0, 40.0, 80.0, 80.0),
transform: kIdentityTransform, transform: kTestTransform,
) )
..updateNode( ..updateNode(
id: 96, id: 96,
label: 'C: branch', label: 'C: branch',
rect: Rect.fromLTRB(40.0, 40.0, 80.0, 80.0), rect: Rect.fromLTRB(40.0, 40.0, 80.0, 80.0),
transform: kIdentityTransform, transform: kTestTransform,
childrenInTraversalOrder: Int32List.fromList(<int>[128]), childrenInTraversalOrder: Int32List.fromList(<int>[128]),
childrenInHitTestOrder: Int32List.fromList(<int>[128]), childrenInHitTestOrder: Int32List.fromList(<int>[128]),
) )
...@@ -90,7 +95,7 @@ main() async { ...@@ -90,7 +95,7 @@ main() async {
id: 128, id: 128,
label: 'D: leaf', label: 'D: leaf',
rect: Rect.fromLTRB(40.0, 40.0, 80.0, 80.0), rect: Rect.fromLTRB(40.0, 40.0, 80.0, 80.0),
transform: kIdentityTransform, transform: kTestTransform,
additionalActions: Int32List.fromList(<int>[21]), additionalActions: Int32List.fromList(<int>[21]),
) )
..updateCustomAction( ..updateCustomAction(
......
...@@ -158,6 +158,15 @@ TEST(EmbedderTest, CanLaunchAndShutdownWithValidProjectArgs) { ...@@ -158,6 +158,15 @@ TEST(EmbedderTest, CanLaunchAndShutdownWithValidProjectArgs) {
++node_batch_end_count; ++node_batch_end_count;
} else { } else {
++node_count; ++node_count;
ASSERT_EQ(1.0, node->transform.scaleX);
ASSERT_EQ(2.0, node->transform.skewX);
ASSERT_EQ(3.0, node->transform.transX);
ASSERT_EQ(4.0, node->transform.skewY);
ASSERT_EQ(5.0, node->transform.scaleY);
ASSERT_EQ(6.0, node->transform.transY);
ASSERT_EQ(7.0, node->transform.pers0);
ASSERT_EQ(8.0, node->transform.pers1);
ASSERT_EQ(9.0, node->transform.pers2);
} }
}; };
int action_count = 0; int action_count = 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册