1cb93a386Sopenharmony_ci/*
2cb93a386Sopenharmony_ci * Copyright 2019 Google Inc.
3cb93a386Sopenharmony_ci *
4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be
5cb93a386Sopenharmony_ci * found in the LICENSE file.
6cb93a386Sopenharmony_ci */
7cb93a386Sopenharmony_ci
8cb93a386Sopenharmony_ci#ifndef SkSGTransformPriv_DEFINED
9cb93a386Sopenharmony_ci#define SkSGTransformPriv_DEFINED
10cb93a386Sopenharmony_ci
11cb93a386Sopenharmony_ci#include "modules/sksg/include/SkSGTransform.h"
12cb93a386Sopenharmony_ci
13cb93a386Sopenharmony_cinamespace sksg {
14cb93a386Sopenharmony_ci
15cb93a386Sopenharmony_ci// Helper for accessing implementation-private Transform methods.
16cb93a386Sopenharmony_ciclass TransformPriv final {
17cb93a386Sopenharmony_cipublic:
18cb93a386Sopenharmony_ci
19cb93a386Sopenharmony_ci    static bool Is44(const sk_sp<Transform>&t) { return t->is44(); }
20cb93a386Sopenharmony_ci
21cb93a386Sopenharmony_ci    template <typename T, typename = std::enable_if<std::is_same<T, SkMatrix>::value ||
22cb93a386Sopenharmony_ci                                                    std::is_same<T, SkM44   >::value >>
23cb93a386Sopenharmony_ci    static T As(const sk_sp<Transform>&);
24cb93a386Sopenharmony_ci
25cb93a386Sopenharmony_ciprivate:
26cb93a386Sopenharmony_ci    TransformPriv() = delete;
27cb93a386Sopenharmony_ci};
28cb93a386Sopenharmony_ci
29cb93a386Sopenharmony_citemplate <>
30cb93a386Sopenharmony_ciinline SkMatrix TransformPriv::As<SkMatrix>(const sk_sp<Transform>& t) {
31cb93a386Sopenharmony_ci    return t->asMatrix();
32cb93a386Sopenharmony_ci}
33cb93a386Sopenharmony_ci
34cb93a386Sopenharmony_citemplate <>
35cb93a386Sopenharmony_ciinline SkM44 TransformPriv::As<SkM44>(const sk_sp<Transform>& t) {
36cb93a386Sopenharmony_ci    return t->asM44();
37cb93a386Sopenharmony_ci}
38cb93a386Sopenharmony_ci
39cb93a386Sopenharmony_ci} // namespace sksg
40cb93a386Sopenharmony_ci
41cb93a386Sopenharmony_ci#endif // SkSGTransformPriv_DEFINED
42