| Flutter Impeller |

Public Member Functions | Static Public Member Functions | List of all members
impeller::TRect< T > Struct Template Reference

`#include <rect.h>`

## Public Member Functions
constexpr | TRect ()
constexpr bool | operator== (const TRect &r) const
constexpr TRect | Scale (Type scale) const
constexpr TRect | Scale (Type scale_x, Type scale_y) const
constexpr TRect | Scale (TPoint< T > scale) const
constexpr TRect | Scale (TSize< T > scale) const
constexpr bool | Contains (const TPoint< Type > &p) const
| Returns true iff the provided point |p| is inside the half-open interior of this rectangle. More...
constexpr bool | Contains (const TRect &o) const
| Returns true iff this rectangle is not empty and it also contains every point considered inside the provided rectangle |o| (as determined by |Contains(TPoint)|). More...
| IsFinite () const
| Returns true if all of the fields of this floating point rectangle are finite. More...
constexpr bool | IsEmpty () const
| Returns true if either of the width or height are 0, negative, or NaN. More...
constexpr bool | IsSquare () const
| Returns true if width and height are equal and neither is NaN. More...
constexpr bool | IsMaximum () const
constexpr TPoint< Type > | GetOrigin () const
| Returns the upper left corner of the rectangle as specified by the left/top or x/y values when it was constructed. More...
constexpr TSize< Type > | GetSize () const
| Returns the size of the rectangle which may be negative in either width or height and may have been clipped to the maximum integer values for integer rects whose size overflows. More...
constexpr Type | GetX () const
| Returns the X coordinate of the upper left corner, equivalent to |GetOrigin().x|. More...
constexpr Type | GetY () const
| Returns the Y coordinate of the upper left corner, equivalent to |GetOrigin().y|. More...
constexpr Type | GetWidth () const
| Returns the width of the rectangle, equivalent to |GetSize().width|. More...
constexpr Type | GetHeight () const
| Returns the height of the rectangle, equivalent to |GetSize().height|. More...
constexpr auto | GetLeft () const
constexpr auto | GetTop () const
constexpr auto | GetRight () const
constexpr auto | GetBottom () const
constexpr TPoint< T > | GetLeftTop () const
constexpr TPoint< T > | GetRightTop () const
constexpr TPoint< T > | GetLeftBottom () const
constexpr TPoint< T > | GetRightBottom () const
constexpr T | Area () const
| Get the area of the rectangle, equivalent to |GetSize().Area()|. More...
constexpr Point | GetCenter () const
| Get the center point as a |Point|. More...
constexpr std::array< T, 4 > | GetLTRB () const
constexpr std::array< T, 4 > | GetXYWH () const
| Get the x, y coordinates of the origin and the width and height of the rectangle in an array. More...
constexpr TRect | GetPositive () const
| Get a version of this rectangle that has a non-negative size. More...
constexpr std::array< TPoint< T >, 4 > | GetPoints () const
| Get the points that represent the 4 corners of this rectangle in a Z order that is compatible with triangle strips or a set of all zero points if the rectangle is empty. The order is: Top left, top right, bottom left, bottom right. More...
constexpr std::array< TPoint< T >, 4 > | GetTransformedPoints (const Matrix &transform) const
constexpr TRect | TransformBounds (const Matrix &transform) const
| Creates a new bounding box that contains this transformed rectangle. More...
constexpr Matrix | GetNormalizingTransform () const
| Constructs a Matrix that will map all points in the coordinate space of the rectangle into a new normalized coordinate space where the upper left corner of the rectangle maps to (0, 0) and the lower right corner of the rectangle maps to (1, 1). More...
constexpr TRect | Union (const TRect &o) const
constexpr std::optional< TRect > | Intersection (const TRect &o) const
constexpr bool | IntersectsWithRect (const TRect &o) const
constexpr std::optional< TRect< T > > | Cutout (const TRect &o) const
| Returns the new boundary rectangle that would result from this rectangle being cut out by the specified rectangle. More...
constexpr TRect | CutoutOrEmpty (const TRect &o) const
constexpr TRect< T > | Shift (T dx, T dy) const
| Returns a new rectangle translated by the given offset. More...
constexpr TRect< T > | Shift (TPoint< T > offset) const
| Returns a new rectangle translated by the given offset. More...
constexpr TRect< T > | Expand (T left, T top, T right, T bottom) const
| Returns a rectangle with expanded edges. Negative expansion results in shrinking. More...
constexpr TRect< T > | Expand (T amount) const
| Returns a rectangle with expanded edges in all directions. Negative expansion results in shrinking. More...
constexpr TRect< T > | Expand (T horizontal_amount, T vertical_amount) const
| Returns a rectangle with expanded edges in all directions. Negative expansion results in shrinking. More...
constexpr TRect< T > | Expand (TPoint< T > amount) const
| Returns a rectangle with expanded edges in all directions. Negative expansion results in shrinking. More...
constexpr TRect< T > | Expand (TSize< T > amount) const
| Returns a rectangle with expanded edges in all directions. Negative expansion results in shrinking. More...
constexpr TRect< T > | Project (TRect< T > source) const
| Returns a new rectangle that represents the projection of the source rectangle onto this rectangle. In other words, the source rectangle is redefined in terms of the coordinate space of this rectangle. More...
| RoundOut (const TRect< U > &r)

## Static Public Member Functions
constexpr static TRect | MakeLTRB (Type left, Type top, Type right, Type bottom)
constexpr static TRect | MakeXYWH (Type x, Type y, Type width, Type height)
constexpr static TRect | MakeOriginSize (const TPoint< Type > &origin, const TSize< Type > &size)
template<class U >
constexpr static TRect | MakeSize (const TSize< U > &size)
template<typename U >
constexpr static std::optional< TRect > | MakePointBounds (const U &value)
template<typename PointIter >
constexpr static std::optional< TRect > | MakePointBounds (const PointIter first, const PointIter last)
constexpr static TRect | MakeMaximum ()
constexpr static std::optional< TRect > | Union (const TRect &a, const std::optional< TRect > b)
constexpr static std::optional< TRect > | Union (const std::optional< TRect > a, const TRect &b)
constexpr static std::optional< TRect > | Union (const std::optional< TRect > a, const std::optional< TRect > b)
constexpr static std::optional< TRect > | Intersection (const TRect &a, const std::optional< TRect > b)
constexpr static std::optional< TRect > | Intersection (const std::optional< TRect > a, const TRect &b)
constexpr static std::optional< TRect > | Intersection (const std::optional< TRect > a, const std::optional< TRect > b)

## Detailed Description

### template<class T>
struct impeller::TRect< T >

Templated struct for holding an axis-aligned rectangle.

Rectangles are defined as 4 axis-aligned edges that might contain space. They can be viewed as 2 X coordinates that define the left and right edges and 2 Y coordinates that define the top and bottom edges; or they can be viewed as an origin and horizontal and vertical dimensions (width and height).

When the left and right edges are equal or reversed (right <= left) or the top and bottom edges are equal or reversed (bottom <= top), the rectangle is considered empty. Considering the rectangle in XYWH form, the width and/or the height would be negative or zero. Such reversed/empty rectangles contain no space and act as such in the methods that operate on them (Intersection, Union, IntersectsWithRect, Contains, Cutout, etc.)

Rectangles cannot be modified by any method and a new value can only be stored into an existing rect using assignment. This keeps the API clean compared to implementations that might have similar methods that produce the answer in place, or construct a new object with the answer, or place the result in an indicated result object.

Methods that might fail to produce an answer will use |std::optional| to indicate that success or failure (see |Intersection| and |CutOut|). For convenience, |Intersection| and |Union| both have overloaded variants that take |std::optional| arguments and treat them as if the argument was an empty rect to allow chaining multiple such methods and only needing to check the optional condition of the final result. The primary methods also provide |...OrEmpty| overloaded variants that translate an empty optional answer into a simple empty rectangle of the same type.

Rounding instance methods are not provided as the return value might be wanted as another floating point rectangle or sometimes as an integer rectangle. Instead a |RoundOut| factory, defined only for floating point input rectangles, is provided to provide control over the result type.

NaN and Infinity values

Constructing an LTRB rectangle using Infinity values should work as expected with either 0 or +Infinity returned as dimensions depending on which side the Infinity values are on and the sign.

Constructing an XYWH rectangle using Infinity values will usually not work if the math requires the object to compute a right or bottom edge from ([xy] -Infinity + [wh] +Infinity). Other combinations might work.

The special factory |MakeMaximum| is provided to construct a rectangle of the indicated coordinate type that covers all finite coordinates. It does not use infinity values, but rather the largest finite values to avoid math that might produce a NaN value from various getters.

Any rectangle that is constructed with, or computed to have a NaN value will be considered the same as any empty rectangle.

Empty Rectangle canonical results summary:

Union will ignore any empty rects and return the other rect Intersection will return nullopt if either rect is empty IntersectsWithRect will return false if either rect is empty Cutout will return the source rect if the argument is empty Cutout will return nullopt if the source rectangle is empty Contains(Point) will return false if the source rectangle is empty Contains(Rect) will return false if the source rectangle is empty Contains(Rect) will otherwise return true if the argument is empty Specifically, EmptyRect.Contains(EmptyRect) returns false

Special notes on problems using the XYWH form of specifying rectangles:

It is possible to have integer rectangles whose dimensions exceed the maximum number that their coordinates can represent since (MAX_INT - MIN_INT) overflows the representable positive numbers. Floating point rectangles technically have a similar issue in that overflow can occur, but it will be automatically converted into either an infinity, or a finite-overflow value and still be representable, just with little to no precision.

Secondly, specifying a rectangle using XYWH leads to cases where the math for (x+w) and/or (y+h) are also beyond the maximum representable coordinates. For N-bit integer rectangles declared as XYWH, the maximum right coordinate will require N+1 signed bits which cannot be stored in storage that uses N-bit integers.

Saturated math is used when constructing a rectangle from XYWH values and when returning the dimensions of the rectangle. Constructing an integer rectangle from values such that xy + wh is beyond the range of the integer type will place the right or bottom edges at the maximum value for the integer type. Similarly, constructing an integer rectangle such that the distance from the left to the right (or top to bottom) is greater than the range of the integer type will simply return the maximum integer value as the dimension. Floating point rectangles are naturally saturated by the rules of IEEE arithmetic.

Definition at line 122 of file rect.h.

## Constructor & Destructor Documentation

## ◆ TRect()

template<class T >

constexpr impeller::TRect< T >::TRect | ( |  | ) |
| inline constexpr

Definition at line 127 of file rect.h.

127 : left_(0), top_(0), right_(0), bottom_(0) {}

Referenced by impeller::TRect< Scalar >::CutoutOrEmpty(), impeller::TRect< Scalar >::MakeLTRB(), impeller::TRect< Scalar >::MakeSize(), impeller::TRect< Scalar >::MakeXYWH(), and impeller::TRect< Scalar >::Scale().

## Member Function Documentation

## ◆ Area()

template<class T >

constexpr T impeller::TRect< T >::Area | ( |  | ) | const
| inline constexpr

Get the area of the rectangle, equivalent to |GetSize().Area()|.

Definition at line 343 of file rect.h.

343 {
344 // TODO(flutter/flutter#141710) - Use saturated math to avoid overflow
345 // https://github.com/flutter/flutter/issues/141710
346 return IsEmpty() ? 0 : (right_ - left_) * (bottom_ - top_);
347 }

## ◆ Contains() [1/2]

template<class T >

constexpr bool impeller::TRect< T >::Contains | ( | const TPoint< Type > & | p | ) | const
| inline constexpr

Returns true iff the provided point |p| is inside the half-open interior of this rectangle.

For purposes of containment, a rectangle contains points along the top and left edges but not points along the right and bottom edges so that a point is only ever considered inside one of two abutting rectangles.

Definition at line 217 of file rect.h.

217 {
218 return !this->IsEmpty() && //
219 p.x >= left_ && //
220 p.y >= top_ && //
221 p.x < right_ && //
222 p.y < bottom_;
223 }

Referenced by impeller::RectGeometry::CoversArea(), impeller::RoundRectGeometry::CoversArea(), impeller::FillPathGeometry::CoversArea(), impeller::TiledTextureContents::RenderToSnapshot(), and impeller::testing::TEST().

## ◆ Contains() [2/2]

template<class T >

constexpr bool impeller::TRect< T >::Contains | ( | const TRect< T > & | o | ) | const
| inline constexpr

Returns true iff this rectangle is not empty and it also contains every point considered inside the provided rectangle |o| (as determined by |Contains(TPoint)|).

This is similar to a definition where the result is true iff the union of the two rectangles is equal to this rectangle, ignoring precision issues with performing those operations and assuming that empty rectangles are never equal.

An empty rectangle can contain no other rectangle.

An empty rectangle is, however, contained within any other non-empy rectangle as the set of points it contains is an empty set and so there are no points to fail the containment criteria.

Definition at line 240 of file rect.h.

240 {
241 return !this->IsEmpty() && //
242 (o.IsEmpty() || (o.left_ >= left_ && //
243 o.top_ >= top_ && //
244 o.right_ <= right_ && //
245 o.bottom_ <= bottom_));
246 }

## ◆ Cutout()

template<class T >

constexpr std::optional<TRect<T> > impeller::TRect< T >::Cutout | ( | const TRect< T > & | o | ) | const
| inline constexpr

Returns the new boundary rectangle that would result from this rectangle being cut out by the specified rectangle.

Definition at line 486 of file rect.h.

486 {
487 if (IsEmpty()) {
488 // This test isn't just a short-circuit, it also prevents the concise
489 // math below from returning the wrong answer on empty rects.
490 // Once we know that this rectangle is not empty, the math below can
491 // only succeed in computing a value if o is also non-empty and non-nan.
492 // Otherwise, the method returns *this by default.
493 return std::nullopt;
494 }
495
496 const auto& [a_left, a_top, a_right, a_bottom] = GetLTRB(); // Source rect.
497 const auto& [b_left, b_top, b_right, b_bottom] = o.GetLTRB(); // Cutout.
498 if (b_left <= a_left && b_right >= a_right) {
499 if (b_top <= a_top && b_bottom >= a_bottom) {
500 // Full cutout.
501 return std::nullopt;
502 }
503 if (b_top <= a_top && b_bottom > a_top) {
504 // Cuts off the top.
505 return TRect::MakeLTRB(a_left, b_bottom, a_right, a_bottom);
506 }
507 if (b_bottom >= a_bottom && b_top < a_bottom) {
508 // Cuts off the bottom.
509 return TRect::MakeLTRB(a_left, a_top, a_right, b_top);
510 }
511 }
512 if (b_top <= a_top && b_bottom >= a_bottom) {
513 if (b_left <= a_left && b_right > a_left) {
514 // Cuts off the left.
515 return TRect::MakeLTRB(b_right, a_top, a_right, a_bottom);
516 }
517 if (b_right >= a_right && b_left < a_right) {
518 // Cuts off the right.
519 return TRect::MakeLTRB(a_left, a_top, b_left, a_bottom);
520 }
521 }
522
523 return *this;
524 }

Referenced by impeller::TRect< Scalar >::CutoutOrEmpty(), and impeller::testing::TEST().

## ◆ CutoutOrEmpty()

template<class T >

constexpr TRect impeller::TRect< T >::CutoutOrEmpty | ( | const TRect< T > & | o | ) | const
| inline constexpr

Definition at line 526 of file rect.h.

526 {
527 return Cutout(o).value_or(TRect());
528 }

Referenced by impeller::testing::TEST().

## ◆ Expand() [1/5]

template<class T >

constexpr TRect<T> impeller::TRect< T >::Expand | ( | T | amount | ) | const
| inline constexpr

Returns a rectangle with expanded edges in all directions. Negative expansion results in shrinking.

Definition at line 561 of file rect.h.

561 {
562 return {
563 saturated::Sub(left_, amount), //
564 saturated::Sub(top_, amount), //
565 saturated::Add(right_, amount), //
566 saturated::Add(bottom_, amount), //
567 };
568 }

## ◆ Expand() [2/5]

template<class T >

constexpr TRect<T> impeller::TRect< T >::Expand | ( | T | horizontal_amount,
|  | T | vertical_amount
| ) |  | const
| inline constexpr

Returns a rectangle with expanded edges in all directions. Negative expansion results in shrinking.

Definition at line 572 of file rect.h.

573 {
574 return {
575 saturated::Sub(left_, horizontal_amount), //
576 saturated::Sub(top_, vertical_amount), //
577 saturated::Add(right_, horizontal_amount), //
578 saturated::Add(bottom_, vertical_amount), //
579 };
580 }

## ◆ Expand() [3/5]

template<class T >

constexpr TRect<T> impeller::TRect< T >::Expand | ( | T | left,
|  | T | top,
|  | T | right,
|  | T | bottom
| ) |  | const
| inline constexpr

Returns a rectangle with expanded edges. Negative expansion results in shrinking.

Definition at line 547 of file rect.h.

550 {
551 return {
552 saturated::Sub(left_, left), //
553 saturated::Sub(top_, top), //
554 saturated::Add(right_, right), //
555 saturated::Add(bottom_, bottom), //
556 };
557 }

Referenced by impeller::Canvas::ClipRRect(), impeller::RoundRectGeometry::CoversArea(), impeller::TRect< Scalar >::Expand(), impeller::BorderMaskBlurFilterContents::GetFilterCoverage(), impeller::BorderMaskBlurFilterContents::GetFilterSourceCoverage(), impeller::DirectionalMorphologyFilterContents::GetFilterSourceCoverage(), impeller::GaussianBlurFilterContents::GetFilterSourceCoverage(), and impeller::testing::TEST_P().

## ◆ Expand() [4/5]

template<class T >

constexpr TRect<T> impeller::TRect< T >::Expand | ( | TPoint< T > | amount | ) | const
| inline constexpr

Returns a rectangle with expanded edges in all directions. Negative expansion results in shrinking.

Definition at line 584 of file rect.h.

584 {
585 return Expand(amount.x, amount.y);
586 }

## ◆ Expand() [5/5]

template<class T >

constexpr TRect<T> impeller::TRect< T >::Expand | ( | TSize< T > | amount | ) | const
| inline constexpr

Returns a rectangle with expanded edges in all directions. Negative expansion results in shrinking.

Definition at line 590 of file rect.h.

590 {
591 return Expand(amount.width, amount.height);
592 }

## ◆ GetBottom()

template<class T >

constexpr auto impeller::TRect< T >::GetBottom | ( |  | ) | const
| inline constexpr

Definition at line 324 of file rect.h.

324 { return bottom_; }

Referenced by impeller::Canvas::Canvas(), impeller::DlDispatcher::drawDisplayList(), impeller::NinePatchConverter::DrawNinePatch(), RectNear(), impeller::testing::swap_nan(), and impeller::testing::TEST().

## ◆ GetCenter()

template<class T >

constexpr Point impeller::TRect< T >::GetCenter | ( |  | ) | const
| inline constexpr

Get the center point as a |Point|.

Definition at line 350 of file rect.h.

350 {
351 return {saturated::AverageScalar(left_, right_),
352 saturated::AverageScalar(top_, bottom_)};
353 }

Referenced by impeller::PathBuilder::AddArc(), impeller::PathBuilder::AddOval(), impeller::Canvas::DrawOval(), and impeller::Tessellator::FilledEllipse().

## ◆ GetHeight()

template<class T >

constexpr Type impeller::TRect< T >::GetHeight | ( |  | ) | const
| inline constexpr

Returns the height of the rectangle, equivalent to |GetSize().height|.

Definition at line 314 of file rect.h.

314 {
315 return saturated::Sub(bottom_, top_);
316 }

Referenced by impeller::Canvas::ClipRRect(), impeller::RoundRectGeometry::CoversArea(), impeller::DrawGlyph(), impeller::BlitCopyTextureToTextureCommandGLES::Encode(), impeller::BlitCopyTextureToTextureCommandMTL::Encode(), impeller::BlitCopyTextureToTextureCommandVK::Encode(), impeller::BlitCopyTextureToBufferCommandGLES::Encode(), impeller::BlitCopyTextureToBufferCommandMTL::Encode(), impeller::BlitCopyTextureToBufferCommandVK::Encode(), impeller::Tessellator::FilledRoundRect(), impeller::TRect< Scalar >::GetNormalizingTransform(), impeller::TRect< Scalar >::GetSize(), impeller::TRect< Scalar >::GetXYWH(), impeller::AtlasBlenderKey::Hash::operator()(), impeller::TRect< Scalar >::Project(), impeller::PassBindingsCacheMTL::SetScissor(), impeller::PassBindingsCacheMTL::SetViewport(), and impeller::testing::TEST().

## ◆ GetLeft()

template<class T >

constexpr auto impeller::TRect< T >::GetLeft | ( |  | ) | const
| inline constexpr

Definition at line 318 of file rect.h.

318 { return left_; }

Referenced by impeller::Canvas::Canvas(), impeller::DlDispatcher::drawDisplayList(), impeller::DrawGlyph(), impeller::NinePatchConverter::DrawNinePatch(), RectNear(), impeller::testing::swap_nan(), and impeller::testing::TEST().

## ◆ GetLeftBottom()

template<class T >

constexpr TPoint<T> impeller::TRect< T >::GetLeftBottom | ( |  | ) | const
| inline constexpr

Definition at line 334 of file rect.h.

334 {
335 return {left_, bottom_};
336 }

## ◆ GetLeftTop()

template<class T >

constexpr TPoint<T> impeller::TRect< T >::GetLeftTop | ( |  | ) | const
| inline constexpr

Definition at line 326 of file rect.h.

326 { //
327 return {left_, top_};
328 }

Referenced by impeller::Tessellator::FilledRoundRect().

## ◆ GetLTRB()

template<class T >

constexpr std::array<T, 4> impeller::TRect< T >::GetLTRB | ( |  | ) | const
| inline constexpr

Definition at line 355 of file rect.h.

355 {
356 return {left_, top_, right_, bottom_};
357 }

Referenced by impeller::TRect< Scalar >::Cutout().

## ◆ GetNormalizingTransform()

template<class T >

constexpr Matrix impeller::TRect< T >::GetNormalizingTransform | ( |  | ) | const
| inline constexpr

Constructs a Matrix that will map all points in the coordinate space of the rectangle into a new normalized coordinate space where the upper left corner of the rectangle maps to (0, 0) and the lower right corner of the rectangle maps to (1, 1).

Empty and non-finite rectangles will return a zero-scaling transform that maps all points to (0, 0).

Definition at line 424 of file rect.h.

424 {
425 if (!IsEmpty()) {
426 Scalar sx = 1.0 / GetWidth();
427 Scalar sy = 1.0 / GetHeight();
428 Scalar tx = left_ * -sx;
429 Scalar ty = top_ * -sy;
430
431 // Exclude NaN and infinities and either scale underflowing to zero
432 if (sx != 0.0 && sy != 0.0 && 0.0 * sx * sy * tx * ty == 0.0) {
433 // clang-format off
434 return Matrix( sx, 0.0f, 0.0f, 0.0f,
435 0.0f, sy, 0.0f, 0.0f,
436 0.0f, 0.0f, 1.0f, 0.0f,
437 tx, ty, 0.0f, 1.0f);
438 // clang-format on
439 }
440 }
441
442 // Map all coordinates to the origin.
443 return Matrix::MakeScale({0.0f, 0.0f, 1.0f});
444 }

Referenced by impeller::ComputeUVGeometryForRect(), and impeller::VerticesGeometry::GetPositionUVBuffer().

## ◆ GetOrigin()

template<class T >

constexpr TPoint<Type> impeller::TRect< T >::GetOrigin | ( |  | ) | const
| inline constexpr

Returns the upper left corner of the rectangle as specified by the left/top or x/y values when it was constructed.

Definition at line 287 of file rect.h.

287 {
288 return {left_, top_};
289 }

Referenced by impeller::PathBuilder::AddArc(), impeller::PathBuilder::AddOval(), impeller::PathBuilder::AddRect(), impeller::PathBuilder::AddRoundedRect(), impeller::AdvancedBlend(), impeller::DirectionalMorphologyFilterContents::GetFilterCoverage(), std::operator<<(), impeller::PipelineBlend(), and impeller::testing::TEST().

## ◆ GetPoints()

template<class T >

constexpr std::array<TPoint<T>, 4> impeller::TRect< T >::GetPoints | ( |  | ) | const
| inline constexpr

Get the points that represent the 4 corners of this rectangle in a Z order that is compatible with triangle strips or a set of all zero points if the rectangle is empty. The order is: Top left, top right, bottom left, bottom right.

Definition at line 382 of file rect.h.

382 {
383 if (IsEmpty()) {
384 return {};
385 }
386 return {
387 TPoint{left_, top_},
388 TPoint{right_, top_},
389 TPoint{left_, bottom_},
390 TPoint{right_, bottom_},
391 };
392 }

Referenced by impeller::ComputeUVGeometryForRect(), impeller::RectGeometry::GetPositionBuffer(), impeller::TRect< Scalar >::GetTransformedPoints(), and impeller::testing::TEST().

## ◆ GetPositive()

template<class T >

constexpr TRect impeller::TRect< T >::GetPositive | ( |  | ) | const
| inline constexpr

Get a version of this rectangle that has a non-negative size.

Definition at line 366 of file rect.h.

366 {
367 if (!IsEmpty()) {
368 return *this;
369 }
370 return {
371 std::min(left_, right_),
372 std::min(top_, bottom_),
373 std::max(left_, right_),
374 std::max(top_, bottom_),
375 };
376 }

Referenced by impeller::testing::TEST().

## ◆ GetRight()

template<class T >

constexpr auto impeller::TRect< T >::GetRight | ( |  | ) | const
| inline constexpr

Definition at line 322 of file rect.h.

322 { return right_; }

Referenced by impeller::Canvas::Canvas(), impeller::DlDispatcher::drawDisplayList(), impeller::NinePatchConverter::DrawNinePatch(), RectNear(), impeller::testing::swap_nan(), and impeller::testing::TEST().

## ◆ GetRightBottom()

template<class T >

constexpr TPoint<T> impeller::TRect< T >::GetRightBottom | ( |  | ) | const
| inline constexpr

Definition at line 338 of file rect.h.

338 {
339 return {right_, bottom_};
340 }

Referenced by impeller::Tessellator::FilledRoundRect().

## ◆ GetRightTop()

template<class T >

constexpr TPoint<T> impeller::TRect< T >::GetRightTop | ( |  | ) | const
| inline constexpr

Definition at line 330 of file rect.h.

330 {
331 return {right_, top_};
332 }

## ◆ GetSize()

template<class T >

constexpr TSize<Type> impeller::TRect< T >::GetSize | ( |  | ) | const
| inline constexpr

Returns the size of the rectangle which may be negative in either width or height and may have been clipped to the maximum integer values for integer rects whose size overflows.

Definition at line 294 of file rect.h.

294 {
295 return {GetWidth(), GetHeight()};
296 }

Referenced by impeller::PathBuilder::AddRect(), impeller::PathBuilder::AddRoundedRect(), impeller::AdvancedBlend(), impeller::CanAppendToExistingAtlas(), impeller::Canvas::DrawOval(), impeller::Tessellator::FilledEllipse(), impeller::DirectionalMorphologyFilterContents::GetFilterCoverage(), std::operator<<(), impeller::PipelineBlend(), impeller::testing::TEST(), and impeller::testing::TEST_P().

## ◆ GetTop()

template<class T >

constexpr auto impeller::TRect< T >::GetTop | ( |  | ) | const
| inline constexpr

Definition at line 320 of file rect.h.

320 { return top_; }

Referenced by impeller::Canvas::Canvas(), impeller::DlDispatcher::drawDisplayList(), impeller::DrawGlyph(), impeller::NinePatchConverter::DrawNinePatch(), RectNear(), impeller::testing::swap_nan(), and impeller::testing::TEST().

## ◆ GetTransformedPoints()

template<class T >

constexpr std::array<TPoint<T>, 4> impeller::TRect< T >::GetTransformedPoints | ( | const Matrix & | transform | ) | const
| inline constexpr

Definition at line 394 of file rect.h.

395 {
396 auto points = GetPoints();
397 for (size_t i = 0; i < points.size(); i++) {
398 points[i] = transform * points[i];
399 }
400 return points;
401 }

Referenced by impeller::GaussianBlurFilterContents::CalculateUVs(), impeller::Snapshot::GetCoverageUVs(), impeller::AtlasContents::Render(), impeller::AtlasTextureContents::Render(), impeller::AtlasColorContents::Render(), impeller::testing::TEST(), and impeller::TRect< Scalar >::TransformBounds().

## ◆ GetWidth()

template<class T >

constexpr Type impeller::TRect< T >::GetWidth | ( |  | ) | const
| inline constexpr

Returns the width of the rectangle, equivalent to |GetSize().width|.

Definition at line 308 of file rect.h.

308 {
309 return saturated::Sub(right_, left_);
310 }

Referenced by impeller::Canvas::ClipRRect(), impeller::RoundRectGeometry::CoversArea(), impeller::DrawGlyph(), impeller::Canvas::DrawOval(), impeller::BlitCopyTextureToTextureCommandGLES::Encode(), impeller::BlitCopyTextureToTextureCommandMTL::Encode(), impeller::BlitCopyTextureToTextureCommandVK::Encode(), impeller::BlitCopyTextureToBufferCommandGLES::Encode(), impeller::BlitCopyTextureToBufferCommandMTL::Encode(), impeller::BlitCopyTextureToBufferCommandVK::Encode(), impeller::Tessellator::FilledEllipse(), impeller::Tessellator::FilledRoundRect(), impeller::TRect< Scalar >::GetNormalizingTransform(), impeller::TRect< Scalar >::GetSize(), impeller::TRect< Scalar >::GetXYWH(), impeller::AtlasBlenderKey::Hash::operator()(), impeller::TRect< Scalar >::Project(), impeller::PassBindingsCacheMTL::SetScissor(), impeller::PassBindingsCacheMTL::SetViewport(), and impeller::testing::TEST().

## ◆ GetX()

template<class T >

constexpr Type impeller::TRect< T >::GetX | ( |  | ) | const
| inline constexpr

Returns the X coordinate of the upper left corner, equivalent to |GetOrigin().x|.

Definition at line 300 of file rect.h.

300 { return left_; }

Referenced by impeller::DrawGlyph(), impeller::BlitCopyTextureToTextureCommandGLES::Encode(), impeller::BlitCopyTextureToTextureCommandMTL::Encode(), impeller::BlitCopyTextureToTextureCommandVK::Encode(), impeller::BlitCopyTextureToBufferCommandGLES::Encode(), impeller::BlitCopyTextureToBufferCommandMTL::Encode(), impeller::BlitCopyTextureToBufferCommandVK::Encode(), impeller::AtlasBlenderKey::Hash::operator()(), impeller::PassBindingsCacheMTL::SetScissor(), impeller::PassBindingsCacheMTL::SetViewport(), and impeller::testing::TEST().

## ◆ GetXYWH()

template<class T >

constexpr std::array<T, 4> impeller::TRect< T >::GetXYWH | ( |  | ) | const
| inline constexpr

Get the x, y coordinates of the origin and the width and height of the rectangle in an array.

Definition at line 361 of file rect.h.

361 {
362 return {left_, top_, GetWidth(), GetHeight()};
363 }

Referenced by impeller::TextContents::Render(), and impeller::testing::TEST().

## ◆ GetY()

template<class T >

constexpr Type impeller::TRect< T >::GetY | ( |  | ) | const
| inline constexpr

Returns the Y coordinate of the upper left corner, equivalent to |GetOrigin().y|.

Definition at line 304 of file rect.h.

304 { return top_; }

Referenced by impeller::DrawGlyph(), impeller::BlitCopyTextureToTextureCommandGLES::Encode(), impeller::BlitCopyTextureToTextureCommandMTL::Encode(), impeller::BlitCopyTextureToTextureCommandVK::Encode(), impeller::BlitCopyTextureToBufferCommandGLES::Encode(), impeller::BlitCopyTextureToBufferCommandMTL::Encode(), impeller::BlitCopyTextureToBufferCommandVK::Encode(), impeller::AtlasBlenderKey::Hash::operator()(), impeller::PassBindingsCacheMTL::SetScissor(), impeller::PassBindingsCacheMTL::SetViewport(), and impeller::testing::TEST().

## ◆ Intersection() [1/4]

template<class T >

constexpr static std::optional<TRect> impeller::TRect< T >::Intersection | ( | const std::optional< TRect< T > > | a,
|  | const std::optional< TRect< T > > | b
| ) |  |
| inline static constexpr

Definition at line 645 of file rect.h.

647 {
648 return a.has_value() ? Intersection(a.value(), b) : b;
649 }

## ◆ Intersection() [2/4]

template<class T >

constexpr static std::optional<TRect> impeller::TRect< T >::Intersection | ( | const std::optional< TRect< T > > | a,
|  | const TRect< T > & | b
| ) |  |
| inline static constexpr

Definition at line 639 of file rect.h.

641 {
642 return a.has_value() ? a->Intersection(b) : b;
643 }

## ◆ Intersection() [3/4]

template<class T >

constexpr static std::optional<TRect> impeller::TRect< T >::Intersection | ( | const TRect< T > & | a,
|  | const std::optional< TRect< T > > | b
| ) |  |
| inline static constexpr

Definition at line 633 of file rect.h.

635 {
636 return b.has_value() ? a.Intersection(b.value()) : a;
637 }

## ◆ Intersection() [4/4]

template<class T >

constexpr std::optional<TRect> impeller::TRect< T >::Intersection | ( | const TRect< T > & | o | ) | const
| inline constexpr

Definition at line 461 of file rect.h.

462 {
463 if (IntersectsWithRect(o)) {
464 return TRect{
465 std::max(left_, o.left_),
466 std::max(top_, o.top_),
467 std::min(right_, o.right_),
468 std::min(bottom_, o.bottom_),
469 };
470 } else {
471 return std::nullopt;
472 }
473 }

Referenced by impeller::AdvancedBlend(), impeller::TRect< Scalar >::Intersection(), impeller::PipelineBlend(), impeller::SetClipScissor(), and impeller::testing::TEST().

## ◆ IntersectsWithRect()

template<class T >

constexpr bool impeller::TRect< T >::IntersectsWithRect | ( | const TRect< T > & | o | ) | const
| inline constexpr

Definition at line 475 of file rect.h.

475 {
476 return !IsEmpty() && //
477 !o.IsEmpty() && //
478 left_ < o.right_ && //
479 top_ < o.bottom_ && //
480 right_ > o.left_ && //
481 bottom_ > o.top_;
482 }

Referenced by impeller::TRect< Scalar >::Intersection(), and impeller::testing::TEST().

## ◆ IsEmpty()

template<class T >

constexpr bool impeller::TRect< T >::IsEmpty | ( |  | ) | const
| inline constexpr

Returns true if either of the width or height are 0, negative, or NaN.

Definition at line 264 of file rect.h.

264 {
265 // Computing the non-empty condition and negating the result causes any
266 // NaN value to return true - i.e. is considered empty.
267 return !(left_ < right_ && top_ < bottom_);
268 }

Referenced by impeller::TRect< Scalar >::Area(), impeller::TRect< Scalar >::Contains(), impeller::TRect< Scalar >::Cutout(), impeller::Canvas::DrawImageRect(), impeller::NinePatchConverter::DrawNinePatch(), impeller::TRect< Scalar >::GetNormalizingTransform(), impeller::TRect< Scalar >::GetPoints(), impeller::TRect< Scalar >::GetPositive(), impeller::TRect< Scalar >::IntersectsWithRect(), impeller::TRect< Scalar >::IsSquare(), impeller::TRect< Scalar >::Project(), impeller::TextureContents::Render(), impeller::testing::TEST(), impeller::TRect< Scalar >::TransformBounds(), and impeller::TRect< Scalar >::Union().

## ◆ IsFinite()

template<class T >

impeller::TRect< T >::IsFinite | ( |  | ) | const
| inline

Returns true if all of the fields of this floating point rectangle are finite.

Note that the results of |GetWidth()| and |GetHeight()| may still be infinite due to overflow even if the fields themselves are finite.

Definition at line 255 of file rect.h.

255 {
256 return std::isfinite(left_) && //
257 std::isfinite(top_) && //
258 std::isfinite(right_) && //
259 std::isfinite(bottom_);
260 }

Referenced by impeller::testing::TEST().

## ◆ IsMaximum()

template<class T >

constexpr bool impeller::TRect< T >::IsMaximum | ( |  | ) | const
| inline constexpr

Definition at line 281 of file rect.h.

281 {
282 return *this == MakeMaximum();
283 }

## ◆ IsSquare()

template<class T >

constexpr bool impeller::TRect< T >::IsSquare | ( |  | ) | const
| inline constexpr

Returns true if width and height are equal and neither is NaN.

Definition at line 271 of file rect.h.

271 {
272 // empty rectangles can technically be "square", but would be
273 // misleading to most callers. Using |IsEmpty| also prevents
274 // "non-empty and non-overflowing" computations from happening
275 // to be equal to "empty and overflowing" results.
276 // (Consider LTRB(10, 15, MAX-2, MIN+2) which is empty, but both
277 // w/h subtractions equal "5").
278 return !IsEmpty() && (right_ - left_) == (bottom_ - top_);
279 }

Referenced by impeller::Canvas::DrawOval(), and impeller::Tessellator::FilledEllipse().

## ◆ MakeLTRB()

template<class T >

constexpr static TRect impeller::TRect< T >::MakeLTRB | ( | Type | left,
|  | Type | top,
|  | Type | right,
|  | Type | bottom
| ) |  |
| inline static constexpr

Definition at line 129 of file rect.h.

132 {
133 return TRect(left, top, right, bottom);
134 }

Referenced by impeller::TRect< Scalar >::Cutout(), impeller::TRect< Scalar >::MakeMaximum(), impeller::TRect< Scalar >::MakePointBounds(), and impeller::TRect< Scalar >::RoundOut().

## ◆ MakeMaximum()

template<class T >

constexpr static TRect impeller::TRect< T >::MakeMaximum | ( |  | ) |
| inline static constexpr

Definition at line 174 of file rect.h.

174 {
175 return TRect::MakeLTRB(std::numeric_limits<Type>::lowest(),
176 std::numeric_limits<Type>::lowest(),
177 std::numeric_limits<Type>::max(),
178 std::numeric_limits<Type>::max());
179 }

Referenced by impeller::TRect< Scalar >::IsMaximum().

## ◆ MakeOriginSize()

template<class T >

constexpr static TRect impeller::TRect< T >::MakeOriginSize | ( | const TPoint< Type > & | origin,
|  | const TSize< Type > & | size
| ) |  |
| inline static constexpr

Definition at line 140 of file rect.h.

141 {
142 return MakeXYWH(origin.x, origin.y, size.width, size.height);
143 }

## ◆ MakePointBounds() [1/2]

template<class T >
template<typename PointIter >

constexpr static std::optional<TRect> impeller::TRect< T >::MakePointBounds | ( | const PointIter | first,
|  | const PointIter | last
| ) |  |
| inline static constexpr

Definition at line 156 of file rect.h.

157 {
158 if (first == last) {
159 return std::nullopt;
160 }
161 auto left = first->x;
162 auto top = first->y;
163 auto right = first->x;
164 auto bottom = first->y;
165 for (auto it = first + 1; it < last; ++it) {
166 left = std::min(left, it->x);
167 top = std::min(top, it->y);
168 right = std::max(right, it->x);
169 bottom = std::max(bottom, it->y);
170 }
171 return TRect::MakeLTRB(left, top, right, bottom);
172 }

## ◆ MakePointBounds() [2/2]

template<class T >
template<typename U >

constexpr static std::optional<TRect> impeller::TRect< T >::MakePointBounds | ( | const U & | value | ) |
| inline static constexpr

Definition at line 151 of file rect.h.

151 {
152 return MakePointBounds(value.begin(), value.end());
153 }

Referenced by impeller::TRect< Scalar >::MakePointBounds(), and impeller::TRect< Scalar >::TransformBounds().

## ◆ MakeSize()

template<class T >
template<class U >

constexpr static TRect impeller::TRect< T >::MakeSize | ( | const TSize< U > & | size | ) |
| inline static constexpr

Definition at line 146 of file rect.h.

146 {
147 return TRect(0.0, 0.0, size.width, size.height);
148 }

## ◆ MakeXYWH()

template<class T >

constexpr static TRect impeller::TRect< T >::MakeXYWH | ( | Type | x,
|  | Type | y,
|  | Type | width,
|  | Type | height
| ) |  |
| inline static constexpr

Definition at line 136 of file rect.h.

136 {
137 return TRect(x, y, saturated::Add(x, width), saturated::Add(y, height));
138 }

Referenced by impeller::TRect< Scalar >::MakeOriginSize().

## ◆ operator==()

template<class T >

constexpr bool impeller::TRect< T >::operator== | ( | const TRect< T > & | r | ) | const
| inline constexpr

Definition at line 181 of file rect.h.

181 {
182 return left_ == r.left_ && //
183 top_ == r.top_ && //
184 right_ == r.right_ && //
185 bottom_ == r.bottom_;
186 }

## ◆ Project()

template<class T >

constexpr TRect<T> impeller::TRect< T >::Project | ( | TRect< T > | source | ) | const
| inline constexpr

Returns a new rectangle that represents the projection of the source rectangle onto this rectangle. In other words, the source rectangle is redefined in terms of the coordinate space of this rectangle.

Definition at line 598 of file rect.h.

598 {
599 if (IsEmpty()) {
600 return {};
601 }
602 return source.Shift(-left_, -top_)
603 .Scale(1.0 / static_cast<Scalar>(GetWidth()),
604 1.0 / static_cast<Scalar>(GetHeight()));
605 }

Referenced by impeller::TextureContents::Render().

## ◆ RoundOut()

template<class T >

impeller::TRect< T >::RoundOut | ( | const TRect< U > & | r | ) |
| inline

Definition at line 608 of file rect.h.

608 {
609 return TRect::MakeLTRB(saturated::Cast<U, Type>(floor(r.GetLeft())),
610 saturated::Cast<U, Type>(floor(r.GetTop())),
611 saturated::Cast<U, Type>(ceil(r.GetRight())),
612 saturated::Cast<U, Type>(ceil(r.GetBottom())));
613 }

## ◆ Scale() [1/4]

template<class T >

constexpr TRect impeller::TRect< T >::Scale | ( | TPoint< T > | scale | ) | const
| inline constexpr

Definition at line 202 of file rect.h.

202 {
203 return Scale(scale.x, scale.y);
204 }

## ◆ Scale() [2/4]

template<class T >

constexpr TRect impeller::TRect< T >::Scale | ( | TSize< T > | scale | ) | const
| inline constexpr

Definition at line 206 of file rect.h.

206 {
207 return Scale(scale.width, scale.height);
208 }

## ◆ Scale() [3/4]

template<class T >

constexpr TRect impeller::TRect< T >::Scale | ( | Type | scale | ) | const
| inline constexpr

Definition at line 188 of file rect.h.

188 {
189 return TRect(left_ * scale, //
190 top_ * scale, //
191 right_ * scale, //
192 bottom_ * scale);
193 }

Referenced by ImGui_ImplImpeller_RenderDrawData(), impeller::MakeTextFrameFromTextBlobSkia(), impeller::TRect< Scalar >::Scale(), and impeller::testing::TEST().

## ◆ Scale() [4/4]

template<class T >

constexpr TRect impeller::TRect< T >::Scale | ( | Type | scale_x,
|  | Type | scale_y
| ) |  | const
| inline constexpr

Definition at line 195 of file rect.h.

195 {
196 return TRect(left_ * scale_x, //
197 top_ * scale_y, //
198 right_ * scale_x, //
199 bottom_ * scale_y);
200 }

## ◆ Shift() [1/2]

template<class T >

constexpr TRect<T> impeller::TRect< T >::Shift | ( | T | dx,
|  | T | dy
| ) |  | const
| inline constexpr

Returns a new rectangle translated by the given offset.

Definition at line 531 of file rect.h.

531 {
532 return {
533 saturated::Add(left_, dx), //
534 saturated::Add(top_, dy), //
535 saturated::Add(right_, dx), //
536 saturated::Add(bottom_, dy), //
537 };
538 }

Referenced by impeller::TRect< Scalar >::Project(), impeller::SetClipScissor(), impeller::TRect< Scalar >::Shift(), and impeller::testing::TEST_P().

## ◆ Shift() [2/2]

template<class T >

constexpr TRect<T> impeller::TRect< T >::Shift | ( | TPoint< T > | offset | ) | const
| inline constexpr

Returns a new rectangle translated by the given offset.

Definition at line 541 of file rect.h.

541 {
542 return Shift(offset.x, offset.y);
543 }

## ◆ TransformBounds()

template<class T >

constexpr TRect impeller::TRect< T >::TransformBounds | ( | const Matrix & | transform | ) | const
| inline constexpr

Creates a new bounding box that contains this transformed rectangle.

Definition at line 405 of file rect.h.

405 {
406 if (IsEmpty()) {
407 return {};
408 }
409 auto points = GetTransformedPoints(transform);
410 auto bounds = TRect::MakePointBounds(points.begin(), points.end());
411 if (bounds.has_value()) {
412 return bounds.value();
413 }
414 FML_UNREACHABLE();
415 }

Referenced by impeller::RectGeometry::CoversArea(), impeller::RoundRectGeometry::CoversArea(), impeller::FillPathGeometry::CoversArea(), impeller::TextureFilterInput::GetCoverage(), impeller::RectGeometry::GetCoverage(), impeller::Snapshot::GetCoverage(), impeller::VerticesGeometry::GetCoverage(), impeller::TextureContents::GetCoverage(), impeller::AtlasContents::GetCoverage(), impeller::AtlasTextureContents::GetCoverage(), impeller::AtlasColorContents::GetCoverage(), impeller::MatrixFilterContents::GetFilterCoverage(), impeller::LocalMatrixFilterContents::GetFilterSourceCoverage(), and impeller::testing::TEST_P().

## ◆ Union() [1/4]

template<class T >

constexpr static std::optional<TRect> impeller::TRect< T >::Union | ( | const std::optional< TRect< T > > | a,
|  | const std::optional< TRect< T > > | b
| ) |  |
| inline static constexpr

Definition at line 627 of file rect.h.

629 {
630 return a.has_value() ? Union(a.value(), b) : b;
631 }

## ◆ Union() [2/4]

template<class T >

constexpr static std::optional<TRect> impeller::TRect< T >::Union | ( | const std::optional< TRect< T > > | a,
|  | const TRect< T > & | b
| ) |  |
| inline static constexpr

Definition at line 621 of file rect.h.

623 {
624 return a.has_value() ? a->Union(b) : b;
625 }

## ◆ Union() [3/4]

template<class T >

constexpr static std::optional<TRect> impeller::TRect< T >::Union | ( | const TRect< T > & | a,
|  | const std::optional< TRect< T > > | b
| ) |  |
| inline static constexpr

Definition at line 615 of file rect.h.

617 {
618 return b.has_value() ? a.Union(b.value()) : a;
619 }

## ◆ Union() [4/4]

template<class T >

constexpr TRect impeller::TRect< T >::Union | ( | const TRect< T > & | o | ) | const
| inline constexpr

Definition at line 446 of file rect.h.

446 {
447 if (IsEmpty()) {
448 return o;
449 }
450 if (o.IsEmpty()) {
451 return *this;
452 }
453 return {
454 std::min(left_, o.left_),
455 std::min(top_, o.top_),
456 std::max(right_, o.right_),
457 std::max(bottom_, o.bottom_),
458 };
459 }

Referenced by impeller::testing::TEST(), and impeller::TRect< Scalar >::Union().

The documentation for this struct was generated from the following file:

- impeller/geometry/rect.h

impeller::TRect::GetLTRB
constexpr std::array< T, 4 > GetLTRB() const
Definition: rect.h:355
impeller::Scalar
float Scalar
Definition: scalar.h:18
impeller::TRect::MakeXYWH
constexpr static TRect MakeXYWH(Type x, Type y, Type width, Type height)
Definition: rect.h:136
impeller::TRect::Intersection
constexpr std::optional< TRect > Intersection(const TRect &o) const
Definition: rect.h:461
impeller::TRect::TRect
constexpr TRect()
Definition: rect.h:127
impeller::TRect::GetHeight
constexpr Type GetHeight() const
Returns the height of the rectangle, equivalent to |GetSize().height|.
Definition: rect.h:314
impeller::TRect::IntersectsWithRect
constexpr bool IntersectsWithRect(const TRect &o) const
Definition: rect.h:475
impeller::TRect::GetPoints
constexpr std::array< TPoint< T >, 4 > GetPoints() const
Get the points that represent the 4 corners of this rectangle in a Z order that is compatible with tr...
Definition: rect.h:382
impeller::TRect::MakePointBounds
constexpr static std::optional< TRect > MakePointBounds(const U &value)
Definition: rect.h:151
impeller::TRect::Shift
constexpr TRect< T > Shift(T dx, T dy) const
Returns a new rectangle translated by the given offset.
Definition: rect.h:531
impeller::TRect::IsEmpty
constexpr bool IsEmpty() const
Returns true if either of the width or height are 0, negative, or NaN.
Definition: rect.h:264
impeller::TRect::GetTransformedPoints
constexpr std::array< TPoint< T >, 4 > GetTransformedPoints(const Matrix &transform) const
Definition: rect.h:394
impeller::TRect::GetWidth
constexpr Type GetWidth() const
Returns the width of the rectangle, equivalent to |GetSize().width|.
Definition: rect.h:308
impeller::TRect::Scale
constexpr TRect Scale(Type scale) const
Definition: rect.h:188
impeller::TRect::Cutout
constexpr std::optional< TRect< T > > Cutout(const TRect &o) const
Returns the new boundary rectangle that would result from this rectangle being cut out by the specifi...
Definition: rect.h:486
impeller::TRect::MakeMaximum
constexpr static TRect MakeMaximum()
Definition: rect.h:174
impeller::saturated::b
SI b
Definition: saturated_math.h:87
scale
const Scalar scale
Definition: stroke_path_geometry.cc:297
impeller::TRect::Union
constexpr TRect Union(const TRect &o) const
Definition: rect.h:446
impeller::TRect::MakeLTRB
constexpr static TRect MakeLTRB(Type left, Type top, Type right, Type bottom)
Definition: rect.h:129
offset
Point offset
Definition: stroke_path_geometry.cc:300
impeller::Matrix::MakeScale
static constexpr Matrix MakeScale(const Vector3 &s)
Definition: matrix.h:104
impeller::TRect::Expand
constexpr TRect< T > Expand(T left, T top, T right, T bottom) const
Returns a rectangle with expanded edges. Negative expansion results in shrinking.
Definition: rect.h:547