Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
Loading...
Searching...
No Matches
helpers.h
Go to the documentation of this file.
1
// Copyright 2013 The Flutter 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
#ifndef FLUTTER_SKWASM_HELPERS_H_
6
#define FLUTTER_SKWASM_HELPERS_H_
7
8
#include "
flutter/display_list/dl_sampling_options.h
"
9
#include "
flutter/display_list/geometry/dl_geometry_types.h
"
10
#include "third_party/skia/include/core/SkMatrix.h"
11
#include "third_party/skia/include/core/SkRRect.h"
12
#include "third_party/skia/include/core/SkSamplingOptions.h"
13
14
namespace
Skwasm
{
15
16
template
<
typename
T>
17
class
sp_wrapper
{
18
public
:
19
sp_wrapper
(std::shared_ptr<T> ptr) : ptr_(
std
::move(ptr)) {}
20
21
const
std::shared_ptr<T>&
Shared
() {
return
ptr_; }
22
23
T*
Raw
() {
return
ptr_.get(); }
24
25
private
:
26
std::shared_ptr<T> ptr_;
27
};
28
29
inline
flutter::DlMatrix
CreateDlMatrixFrom3x3
(
const
flutter::DlScalar
* f) {
30
// clang-format off
31
return
flutter::DlMatrix
(
32
f[0], f[3], 0, f[6],
33
f[1], f[4], 0, f[7],
34
0, 0, 1, 0,
35
f[2], f[5], 0, f[8]
36
);
37
// clang-format on
38
}
39
40
inline
SkMatrix
CreateSkMatrix
(
const
SkScalar* f) {
41
return
SkMatrix::MakeAll(f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7],
42
f[8]);
43
}
44
45
inline
flutter::DlRect
CreateDlRect
(
const
float
* f) {
46
return
flutter::DlRect::MakeLTRB
(f[0], f[1], f[2], f[3]);
47
}
48
49
inline
flutter::DlRoundingRadii
CreateDlRadii
(
const
float
* f) {
50
// Flutter has radii in TL,TR,BR,BL (clockwise) order,
51
// but Impeller uses TL,TR,BL,BR (zig-zag) order
52
impeller::RoundingRadii
radii = {
53
.
top_left
=
flutter::DlSize
(f[0], f[1]),
54
.top_right =
flutter::DlSize
(f[2], f[3]),
55
.bottom_left =
flutter::DlSize
(f[6], f[7]),
56
.bottom_right =
flutter::DlSize
(f[4], f[5]),
57
};
58
return
radii;
59
}
60
61
inline
flutter::DlRoundRect
CreateDlRRect
(
const
float
* f) {
62
return
flutter::DlRoundRect::MakeRectRadii
(
CreateDlRect
(f),
63
CreateDlRadii
(f + 4));
64
}
65
66
inline
SkRRect
CreateSkRRect
(
const
SkScalar* f) {
67
const
SkRect* rect =
reinterpret_cast<
const
SkRect*
>
(f);
68
const
SkVector* radiiValues =
reinterpret_cast<
const
SkVector*
>
(f + 4);
69
SkRRect rr;
70
rr.setRectRadii(*rect, radiiValues);
71
return
rr;
72
}
73
74
// This must be kept in sync with the `ImageByteFormat` enum in dart:ui.
75
enum class
ImageByteFormat
{
76
rawRgba
,
77
rawStraightRgba
,
78
rawUnmodified
,
79
png
,
80
};
81
82
// This needs to be kept in sync with the "FilterQuality" enum in dart:ui.
83
// Skwasm's FFI passes dart:ui's `FilterQuality.index` as a raw int across
84
// the WASM boundary and decodes it back to this enum, so the integer
85
// values must match dart:ui's declaration order. Locking them here
86
// turns any drift into a compile error instead of a silently wrong
87
// sampling mode.
88
enum class
FilterQuality
{
89
none
,
90
low
,
91
medium
,
92
high
,
93
};
94
static_assert
(
static_cast<
int
>
(
FilterQuality::none
) == 0);
95
static_assert
(
static_cast<
int
>
(
FilterQuality::low
) == 1);
96
static_assert
(
static_cast<
int
>
(
FilterQuality::medium
) == 2);
97
static_assert
(
static_cast<
int
>
(
FilterQuality::high
) == 3);
98
99
inline
flutter::DlFilterMode
FilterModeForQuality
(
FilterQuality
quality) {
100
switch
(quality) {
101
case
FilterQuality::none
:
102
return
flutter::DlFilterMode::kNearest
;
103
case
FilterQuality::low
:
104
case
FilterQuality::medium
:
105
case
FilterQuality::high
:
106
return
flutter::DlFilterMode::kLinear
;
107
}
108
}
109
110
inline
flutter::DlImageSampling
SamplingOptionsForQuality
(
111
FilterQuality
quality) {
112
switch
(quality) {
113
case
FilterQuality::none
:
114
return
flutter::DlImageSampling::kNearestNeighbor
;
115
case
FilterQuality::low
:
116
return
flutter::DlImageSampling::kLinear
;
117
case
FilterQuality::medium
:
118
return
flutter::DlImageSampling::kMipmapLinear
;
119
case
FilterQuality::high
:
120
return
flutter::DlImageSampling::kCubic
;
121
}
122
}
123
}
// namespace Skwasm
124
125
#endif
// FLUTTER_SKWASM_HELPERS_H_
Skwasm::sp_wrapper
Definition
helpers.h:17
Skwasm::sp_wrapper::Raw
T * Raw()
Definition
helpers.h:23
Skwasm::sp_wrapper::sp_wrapper
sp_wrapper(std::shared_ptr< T > ptr)
Definition
helpers.h:19
Skwasm::sp_wrapper::Shared
const std::shared_ptr< T > & Shared()
Definition
helpers.h:21
dl_geometry_types.h
dl_sampling_options.h
Skwasm
Definition
helpers.h:14
Skwasm::FilterModeForQuality
flutter::DlFilterMode FilterModeForQuality(FilterQuality quality)
Definition
helpers.h:99
Skwasm::CreateDlMatrixFrom3x3
flutter::DlMatrix CreateDlMatrixFrom3x3(const flutter::DlScalar *f)
Definition
helpers.h:29
Skwasm::CreateDlRRect
flutter::DlRoundRect CreateDlRRect(const float *f)
Definition
helpers.h:61
Skwasm::CreateSkRRect
SkRRect CreateSkRRect(const SkScalar *f)
Definition
helpers.h:66
Skwasm::SamplingOptionsForQuality
flutter::DlImageSampling SamplingOptionsForQuality(FilterQuality quality)
Definition
helpers.h:110
Skwasm::FilterQuality
FilterQuality
Definition
helpers.h:88
Skwasm::FilterQuality::medium
@ medium
Skwasm::FilterQuality::none
@ none
Skwasm::FilterQuality::low
@ low
Skwasm::FilterQuality::high
@ high
Skwasm::CreateDlRect
flutter::DlRect CreateDlRect(const float *f)
Definition
helpers.h:45
Skwasm::CreateSkMatrix
SkMatrix CreateSkMatrix(const SkScalar *f)
Definition
helpers.h:40
Skwasm::ImageByteFormat
ImageByteFormat
Definition
helpers.h:75
Skwasm::ImageByteFormat::rawRgba
@ rawRgba
Skwasm::ImageByteFormat::rawUnmodified
@ rawUnmodified
Skwasm::ImageByteFormat::png
@ png
Skwasm::ImageByteFormat::rawStraightRgba
@ rawStraightRgba
Skwasm::CreateDlRadii
flutter::DlRoundingRadii CreateDlRadii(const float *f)
Definition
helpers.h:49
flutter::DlScalar
impeller::Scalar DlScalar
Definition
dl_geometry_types.h:17
flutter::DlMatrix
impeller::Matrix DlMatrix
Definition
dl_geometry_types.h:32
flutter::DlFilterMode
DlFilterMode
Definition
dl_sampling_options.h:10
flutter::DlFilterMode::kLinear
@ kLinear
flutter::DlFilterMode::kNearest
@ kNearest
flutter::DlSize
impeller::Size DlSize
Definition
dl_geometry_types.h:25
flutter::DlImageSampling
DlImageSampling
Definition
dl_sampling_options.h:17
flutter::DlImageSampling::kMipmapLinear
@ kMipmapLinear
flutter::DlImageSampling::kCubic
@ kCubic
flutter::DlImageSampling::kLinear
@ kLinear
flutter::DlImageSampling::kNearestNeighbor
@ kNearestNeighbor
std
Definition
ref_ptr.h:261
impeller::Matrix
A 4x4 matrix using column-major storage.
Definition
matrix.h:37
impeller::RoundRect
Definition
round_rect.h:16
impeller::RoundRect::MakeRectRadii
static RoundRect MakeRectRadii(const Rect &rect, const RoundingRadii &radii)
Definition
round_rect.cc:9
impeller::RoundingRadii
Definition
rounding_radii.h:14
impeller::RoundingRadii::top_left
Size top_left
Definition
rounding_radii.h:15
impeller::TRect< Scalar >
impeller::TRect< Scalar >::MakeLTRB
static constexpr TRect MakeLTRB(Type left, Type top, Type right, Type bottom)
Definition
rect.h:129
skwasm
helpers.h
Generated on Fri Jul 24 2026 07:12:40 for Flutter Engine Uber Docs by
1.9.8