Flutter Impeller
impeller::TextFrame Class Reference

Represents a collection of shaped text runs. More...

#include <text_frame.h>

Public Member Functions

 TextFrame ()
 
 TextFrame (std::vector< TextRun > &runs, Rect bounds, bool has_color)
 
 ~TextFrame ()
 
Rect GetBounds () const
 The conservative bounding box for this text frame. More...
 
size_t GetRunCount () const
 The number of runs in this text frame. More...
 
const std::vector< TextRun > & GetRuns () const
 Returns a reference to all the text runs in this frame. More...
 
bool HasColor () const
 Returns the paint color this text frame was recorded with. More...
 
GlyphAtlas::Type GetAtlasType () const
 The type of atlas this run should be place in. More...
 
bool IsFrameComplete () const
 Verifies that all glyphs in this text frame have computed bounds information. More...
 
const FrameBoundsGetFrameBounds (size_t index) const
 Retrieve the frame bounds for the glyph at [index]. More...
 
void SetPerFrameData (Scalar scale, Point offset, const Matrix &transform, std::optional< GlyphProperties > properties)
 Store text frame scale, offset, and properties for hashing in th glyph atlas. More...
 
std::pair< size_t, intptr_t > GetAtlasGenerationAndID () const
 
Scalar GetScale () const
 
TextFrameoperator= (TextFrame &&other)=default
 
 TextFrame (const TextFrame &other)=default
 
const MatrixGetTransform () const
 
Point GetOffset () const
 
Matrix GetOffsetTransform () const
 

Static Public Member Functions

static Point ComputeSubpixelPosition (const TextRun::GlyphPosition &glyph_position, AxisAlignment alignment, const Matrix &transform)
 
static Scalar RoundScaledFontSize (Scalar scale)
 

Friends

class TypographerContextSkia
 
class LazyGlyphAtlas
 

Detailed Description

Represents a collection of shaped text runs.

        This object is typically the entrypoint in the Impeller type
        rendering subsystem.

A text frame should not be reused in multiple places within a single frame, as internally it is used as a cache for various glyph properties.

Definition at line 22 of file text_frame.h.

Constructor & Destructor Documentation

◆ TextFrame() [1/3]

impeller::TextFrame::TextFrame ( )
default

◆ TextFrame() [2/3]

impeller::TextFrame::TextFrame ( std::vector< TextRun > &  runs,
Rect  bounds,
bool  has_color 
)

Definition at line 14 of file text_frame.cc.

15  : runs_(std::move(runs)), bounds_(bounds), has_color_(has_color) {}

◆ ~TextFrame()

impeller::TextFrame::~TextFrame ( )
default

◆ TextFrame() [3/3]

impeller::TextFrame::TextFrame ( const TextFrame other)
default

Member Function Documentation

◆ ComputeSubpixelPosition()

Point impeller::TextFrame::ComputeSubpixelPosition ( const TextRun::GlyphPosition glyph_position,
AxisAlignment  alignment,
const Matrix transform 
)
static

Definition at line 69 of file text_frame.cc.

72  {
73  Point pos = transform * glyph_position.position;
74  switch (alignment) {
76  return Point(0, 0);
77  case AxisAlignment::kX:
78  return Point(ComputeFractionalPosition(pos.x), 0);
79  case AxisAlignment::kY:
80  return Point(0, ComputeFractionalPosition(pos.y));
82  return Point(ComputeFractionalPosition(pos.x),
84  }
85 }
TPoint< Scalar > Point
Definition: point.h:327
static constexpr Scalar ComputeFractionalPosition(Scalar value)
Definition: text_frame.cc:50

References impeller::ComputeFractionalPosition(), impeller::kAll, impeller::kNone, impeller::kX, impeller::kY, impeller::TextRun::GlyphPosition::position, transform, impeller::TPoint< T >::x, and impeller::TPoint< T >::y.

Referenced by impeller::TextContents::ComputeVertexData().

◆ GetAtlasGenerationAndID()

std::pair< size_t, intptr_t > impeller::TextFrame::GetAtlasGenerationAndID ( ) const

Definition at line 135 of file text_frame.cc.

135  {
136  return std::make_pair(generation_, atlas_id_);
137 }

◆ GetAtlasType()

GlyphAtlas::Type impeller::TextFrame::GetAtlasType ( ) const

The type of atlas this run should be place in.

Definition at line 31 of file text_frame.cc.

References impeller::GlyphAtlas::kAlphaBitmap, and impeller::GlyphAtlas::kColorBitmap.

◆ GetBounds()

Rect impeller::TextFrame::GetBounds ( ) const

The conservative bounding box for this text frame.

Returns
The bounds rectangle. If there are no glyphs in this text frame and empty Rectangle is returned instead.

Definition at line 19 of file text_frame.cc.

19  {
20  return bounds_;
21 }

◆ GetFrameBounds()

const FrameBounds & impeller::TextFrame::GetFrameBounds ( size_t  index) const

Retrieve the frame bounds for the glyph at [index].

This method is only valid if [IsFrameComplete] returns true.

Definition at line 130 of file text_frame.cc.

130  {
131  FML_DCHECK(index < bound_values_.size());
132  return bound_values_[index];
133 }

◆ GetOffset()

Point impeller::TextFrame::GetOffset ( ) const

Definition at line 106 of file text_frame.cc.

106  {
107  return offset_;
108 }

◆ GetOffsetTransform()

Matrix impeller::TextFrame::GetOffsetTransform ( ) const

Definition at line 87 of file text_frame.cc.

87  {
88  return transform_ * Matrix::MakeTranslation(offset_);
89 }
static constexpr Matrix MakeTranslation(const Vector3 &t)
Definition: matrix.h:95

References impeller::Matrix::MakeTranslation().

◆ GetRunCount()

size_t impeller::TextFrame::GetRunCount ( ) const

The number of runs in this text frame.

Returns
The run count.

Definition at line 23 of file text_frame.cc.

23  {
24  return runs_.size();
25 }

◆ GetRuns()

const std::vector< TextRun > & impeller::TextFrame::GetRuns ( ) const

Returns a reference to all the text runs in this frame.

Returns
The runs in this frame.

Definition at line 27 of file text_frame.cc.

27  {
28  return runs_;
29 }

◆ GetScale()

Scalar impeller::TextFrame::GetScale ( ) const

Definition at line 102 of file text_frame.cc.

102  {
103  return scale_;
104 }

◆ GetTransform()

const Matrix& impeller::TextFrame::GetTransform ( ) const
inline

Definition at line 100 of file text_frame.h.

100 { return transform_; }

◆ HasColor()

bool impeller::TextFrame::HasColor ( ) const

Returns the paint color this text frame was recorded with.

        Non-bitmap/COLR fonts always use a black text color here, but
        COLR fonts can potentially use the paint color in the glyph
        atlas, so this color must be considered as part of the cache
        key. 

Definition at line 36 of file text_frame.cc.

36  {
37  return has_color_;
38 }

◆ IsFrameComplete()

bool impeller::TextFrame::IsFrameComplete ( ) const

Verifies that all glyphs in this text frame have computed bounds information.

Definition at line 122 of file text_frame.cc.

122  {
123  size_t run_size = 0;
124  for (const auto& x : runs_) {
125  run_size += x.GetGlyphCount();
126  }
127  return bound_values_.size() == run_size;
128 }
int32_t x

References x.

◆ operator=()

TextFrame& impeller::TextFrame::operator= ( TextFrame &&  other)
default

◆ RoundScaledFontSize()

Scalar impeller::TextFrame::RoundScaledFontSize ( Scalar  scale)
static

Definition at line 41 of file text_frame.cc.

41  {
42  // An arbitrarily chosen maximum text scale to ensure that regardless of the
43  // CTM, a glyph will fit in the atlas. If we clamp significantly, this may
44  // reduce fidelity but is preferable to the alternative of failing to render.
45  constexpr Scalar kMaximumTextScale = 48;
46  Scalar result = std::round(scale * 200) / 200;
47  return std::clamp(result, 0.0f, kMaximumTextScale);
48 }
float Scalar
Definition: scalar.h:18
const Scalar scale

References scale.

Referenced by impeller::FirstPassDispatcher::drawTextFrame(), and impeller::testing::TEST_P().

◆ SetPerFrameData()

void impeller::TextFrame::SetPerFrameData ( Scalar  scale,
Point  offset,
const Matrix transform,
std::optional< GlyphProperties properties 
)

Store text frame scale, offset, and properties for hashing in th glyph atlas.

Definition at line 91 of file text_frame.cc.

94  {
95  bound_values_.clear();
96  scale_ = scale;
97  offset_ = offset;
98  properties_ = properties;
99  transform_ = transform;
100 }
SeparatedVector2 offset

References offset, scale, and transform.

Friends And Related Function Documentation

◆ LazyGlyphAtlas

friend class LazyGlyphAtlas
friend

Definition at line 108 of file text_frame.h.

◆ TypographerContextSkia

friend class TypographerContextSkia
friend

Definition at line 107 of file text_frame.h.


The documentation for this class was generated from the following files: