mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
54 lines
1.4 KiB
C++
54 lines
1.4 KiB
C++
// Copyright 2015 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "sky/engine/core/painting/Matrix.h"
|
|
|
|
namespace blink {
|
|
|
|
// Mappings from SkMatrix-index to input-index.
|
|
static const int kSkMatrixIndexToMatrix4Index[] = {
|
|
0, 4, 12,
|
|
1, 5, 13,
|
|
3, 7, 15,
|
|
};
|
|
|
|
SkMatrix toSkMatrix(const Float64List& matrix4, ExceptionState& es)
|
|
{
|
|
ASSERT(matrix4.data());
|
|
SkMatrix sk_matrix;
|
|
if (matrix4.num_elements() != 16) {
|
|
es.ThrowTypeError("Incorrect number of elements in matrix.");
|
|
return sk_matrix;
|
|
}
|
|
|
|
for (int i = 0; i < 9; ++i)
|
|
sk_matrix[i] = matrix4[kSkMatrixIndexToMatrix4Index[i]];
|
|
return sk_matrix;
|
|
}
|
|
|
|
SkMatrix toSkMatrix(const Float64List& matrix4)
|
|
{
|
|
ASSERT(matrix4.data());
|
|
SkMatrix sk_matrix;
|
|
for (int i = 0; i < 9; ++i) {
|
|
int matrix4_index = kSkMatrixIndexToMatrix4Index[i];
|
|
if (matrix4_index < matrix4.num_elements())
|
|
sk_matrix[i] = matrix4[matrix4_index];
|
|
else
|
|
sk_matrix[i] = 0.0;
|
|
}
|
|
return sk_matrix;
|
|
}
|
|
|
|
Float64List toMatrix4(const SkMatrix& sk_matrix)
|
|
{
|
|
Float64List matrix4(Dart_NewTypedData(Dart_TypedData_kFloat64, 16));
|
|
for (int i = 0; i < 9; ++i)
|
|
matrix4[kSkMatrixIndexToMatrix4Index[i]] = sk_matrix[i];
|
|
matrix4[10] = 1.0; // Identity along the z axis.
|
|
return matrix4;
|
|
}
|
|
|
|
} // namespace blink
|