Flutter Engine
The Flutter Engine
line_geometry.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_IMPELLER_ENTITY_GEOMETRY_LINE_GEOMETRY_H_
6#define FLUTTER_IMPELLER_ENTITY_GEOMETRY_LINE_GEOMETRY_H_
7
8#include <type_traits>
10
11namespace impeller {
12
13class LineGeometry final : public Geometry {
14 public:
15 explicit LineGeometry(Point p0, Point p1, Scalar width, Cap cap);
16
17 ~LineGeometry() = default;
18
20
21 // |Geometry|
22 bool CoversArea(const Matrix& transform, const Rect& rect) const override;
23
24 // |Geometry|
25 bool IsAxisAlignedRect() const override;
26
27 private:
28 // Computes the 4 corners of a rectangle that defines the line and
29 // possibly extended endpoints which will be rendered under the given
30 // transform, and returns true if such a rectangle is defined.
31 //
32 // The coordinates will be generated in the original coordinate system
33 // of the line end points and the transform will only be used to determine
34 // the minimum line width.
35 //
36 // For kButt and kSquare end caps the ends should always be exteded as
37 // per that decoration, but for kRound caps the ends might be extended
38 // if the goal is to get a conservative bounds and might not be extended
39 // if the calling code is planning to draw the round caps on the ends.
40 //
41 // @return true if the transform and width were not degenerate
42 bool ComputeCorners(Point corners[4],
43 const Matrix& transform,
44 bool extend_endpoints) const;
45
46 Vector2 ComputeAlongVector(const Matrix& transform,
47 bool allow_zero_length) const;
48
49 // |Geometry|
50 GeometryResult GetPositionBuffer(const ContentContext& renderer,
51 const Entity& entity,
52 RenderPass& pass) const override;
53
54 // |Geometry|
55 std::optional<Rect> GetCoverage(const Matrix& transform) const override;
56
57 Point p0_;
58 Point p1_;
59 Scalar width_;
60 Cap cap_;
61
62 LineGeometry(const LineGeometry&) = delete;
63
64 LineGeometry& operator=(const LineGeometry&) = delete;
65};
66
68
69} // namespace impeller
70
71#endif // FLUTTER_IMPELLER_ENTITY_GEOMETRY_LINE_GEOMETRY_H_
LineGeometry(Point p0, Point p1, Scalar width, Cap cap)
Definition: line_geometry.cc:9
static Scalar ComputePixelHalfWidth(const Matrix &transform, Scalar width)
bool IsAxisAlignedRect() const override
bool CoversArea(const Matrix &transform, const Rect &rect) const override
Determines if this geometry, transformed by the given transform, will completely cover all surface ar...
Render passes encode render commands directed as one specific render target into an underlying comman...
Definition: render_pass.h:33
uint8_t value
sk_sp< SkBlender > blender SkRect rect
Definition: SkRecords.h:350
float Scalar
Definition: scalar.h:18
Cap
Definition: path.h:18
static SkColor4f transform(SkColor4f c, SkColorSpace *src, SkColorSpace *dst)
Definition: p3.cpp:47
int32_t width
A 4x4 matrix using column-major storage.
Definition: matrix.h:37