Flutter Engine
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_LIB_WEB_UI_SKWASM_HELPERS_H_
6
#define FLUTTER_LIB_WEB_UI_SKWASM_HELPERS_H_
7
8
#include "
flutter/display_list/dl_sampling_options.h
"
9
#include "
flutter/display_list/geometry/dl_geometry_types.h
"
10
11
#include "third_party/skia/include/core/SkMatrix.h"
12
#include "third_party/skia/include/core/SkRRect.h"
13
#include "third_party/skia/include/core/SkSamplingOptions.h"
14
15
namespace
Skwasm
{
16
17
template
<
typename
T>
18
class
sp_wrapper
{
19
public
:
20
sp_wrapper
(std::shared_ptr<T> ptr) : _ptr(
std
::move(ptr)) {}
21
22
const
std::shared_ptr<T>&
shared
() {
return
_ptr; }
23
24
T*
raw
() {
return
_ptr.get(); }
25
26
private
:
27
std::shared_ptr<T> _ptr;
28
};
29
30
inline
flutter::DlMatrix
createDlMatrixFrom3x3
(
const
flutter::DlScalar
* f) {
31
// clang-format off
32
return
flutter::DlMatrix
(
33
f[0], f[3], 0, f[6],
34
f[1], f[4], 0, f[7],
35
0, 0, 1, 0,
36
f[2], f[5], 0, f[8]
37
);
38
// clang-format on
39
}
40
41
inline
SkMatrix
createSkMatrix
(
const
SkScalar* f) {
42
return
SkMatrix::MakeAll(f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7],
43
f[8]);
44
}
45
46
inline
flutter::DlRect
createDlRect
(
const
float
* f) {
47
return
flutter::DlRect::MakeLTRB
(f[0], f[1], f[2], f[3]);
48
}
49
50
inline
flutter::DlRoundingRadii
createDlRadii
(
const
float
* f) {
51
// Flutter has radii in TL,TR,BR,BL (clockwise) order,
52
// but Impeller uses TL,TR,BL,BR (zig-zag) order
53
impeller::RoundingRadii
radii = {
54
.
top_left
=
flutter::DlSize
(f[0], f[1]),
55
.top_right =
flutter::DlSize
(f[2], f[3]),
56
.bottom_left =
flutter::DlSize
(f[6], f[7]),
57
.bottom_right =
flutter::DlSize
(f[4], f[5]),
58
};
59
return
radii;
60
}
61
62
inline
flutter::DlRoundRect
createDlRRect
(
const
float
* f) {
63
return
flutter::DlRoundRect::MakeRectRadii
(
createDlRect
(f),
64
createDlRadii
(f + 4));
65
}
66
67
inline
SkRRect
createSkRRect
(
const
SkScalar* f) {
68
const
SkRect* rect =
reinterpret_cast<
const
SkRect*
>
(f);
69
const
SkVector* radiiValues =
reinterpret_cast<
const
SkVector*
>
(f + 4);
70
SkRRect rr;
71
rr.setRectRadii(*rect, radiiValues);
72
return
rr;
73
}
74
75
// This needs to be kept in sync with the "FilterQuality" enum in dart:ui
76
enum class
FilterQuality
{
77
none
,
78
low
,
79
medium
,
80
high
,
81
};
82
83
inline
flutter::DlFilterMode
filterModeForQuality
(
FilterQuality
quality) {
84
switch
(quality) {
85
case
FilterQuality::none
:
86
return
flutter::DlFilterMode::kNearest
;
87
case
FilterQuality::low
:
88
case
FilterQuality::medium
:
89
case
FilterQuality::high
:
90
return
flutter::DlFilterMode::kLinear
;
91
}
92
}
93
94
inline
flutter::DlImageSampling
samplingOptionsForQuality
(
95
FilterQuality
quality) {
96
switch
(quality) {
97
case
FilterQuality::none
:
98
return
flutter::DlImageSampling::kNearestNeighbor
;
99
case
FilterQuality::low
:
100
return
flutter::DlImageSampling::kLinear
;
101
case
FilterQuality::medium
:
102
return
flutter::DlImageSampling::kMipmapLinear
;
103
case
FilterQuality::high
:
104
return
flutter::DlImageSampling::kCubic
;
105
}
106
}
107
}
// namespace Skwasm
108
109
#endif
// FLUTTER_LIB_WEB_UI_SKWASM_HELPERS_H_
Skwasm::sp_wrapper
Definition
helpers.h:18
Skwasm::sp_wrapper::shared
const std::shared_ptr< T > & shared()
Definition
helpers.h:22
Skwasm::sp_wrapper::sp_wrapper
sp_wrapper(std::shared_ptr< T > ptr)
Definition
helpers.h:20
Skwasm::sp_wrapper::raw
T * raw()
Definition
helpers.h:24
dl_geometry_types.h
dl_sampling_options.h
Skwasm
Definition
helpers.h:15
Skwasm::filterModeForQuality
flutter::DlFilterMode filterModeForQuality(FilterQuality quality)
Definition
helpers.h:83
Skwasm::createDlRadii
flutter::DlRoundingRadii createDlRadii(const float *f)
Definition
helpers.h:50
Skwasm::createSkRRect
SkRRect createSkRRect(const SkScalar *f)
Definition
helpers.h:67
Skwasm::createDlMatrixFrom3x3
flutter::DlMatrix createDlMatrixFrom3x3(const flutter::DlScalar *f)
Definition
helpers.h:30
Skwasm::createDlRect
flutter::DlRect createDlRect(const float *f)
Definition
helpers.h:46
Skwasm::createDlRRect
flutter::DlRoundRect createDlRRect(const float *f)
Definition
helpers.h:62
Skwasm::FilterQuality
FilterQuality
Definition
helpers.h:76
Skwasm::FilterQuality::medium
@ medium
Skwasm::FilterQuality::none
@ none
Skwasm::FilterQuality::low
@ low
Skwasm::FilterQuality::high
@ high
Skwasm::createSkMatrix
SkMatrix createSkMatrix(const SkScalar *f)
Definition
helpers.h:41
Skwasm::samplingOptionsForQuality
flutter::DlImageSampling samplingOptionsForQuality(FilterQuality quality)
Definition
helpers.h:94
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
lib
web_ui
skwasm
helpers.h
Generated on Thu Nov 6 2025 16:11:25 for Flutter Engine by
1.9.8