| Flutter Impeller |

rectangle_packer.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_TYPOGRAPHER_RECTANGLE_PACKER_H_
6 #define FLUTTER_IMPELLER_TYPOGRAPHER_RECTANGLE_PACKER_H_
7
8 #include "flutter/fml/logging.h"
9 #include "impeller/geometry/scalar.h"
10
11 #include <cstdint>
12
13 namespace impeller {
14
15 struct IPoint16 {
16 int16_t x() const { return x_; }
17 int16_t y() const { return y_; }
18
19 int16_t x_;
20 int16_t y_;
21 };
22
23 //------------------------------------------------------------------------------
24 /// @brief Packs rectangles into a specified area without rotating them.
25 ///
26 class RectanglePacker {
27 public:
28 //----------------------------------------------------------------------------
29 /// @brief Return an empty packer with area specified by width and height.
30 ///
31 static std::shared_ptr<RectanglePacker> Factory(int width, int height);
32
33 virtual ~RectanglePacker() {}
34
35 //----------------------------------------------------------------------------
36 /// @brief Attempt to add a rect without moving already placed rectangles.
37 ///
38 /// @param[in] width The width of the rectangle to add.
39 /// @param[in] height The height of the rectangle to add.
40 /// @param[out] loc If successful, will be set to the position of the
41 /// upper-left corner of the rectangle.
42 ///
43 /// @return Return true on success; false on failure.
44 ///
45 virtual bool AddRect(int width, int height, IPoint16* loc) = 0;
46
47 //----------------------------------------------------------------------------
48 /// @brief Returns how much area has been filled with rectangles.
49 ///
50 /// @return Percentage as a decimal between 0.0 and 1.0
51 ///
52 virtual Scalar PercentFull() const = 0;
53
54 //----------------------------------------------------------------------------
55 /// @brief Empty out all previously added rectangles.
56 ///
57 virtual void Reset() = 0;
58
59 protected:
60 RectanglePacker(int width, int height) : width_(width), height_(height) {
61 FML_DCHECK(width >= 0);
62 FML_DCHECK(height >= 0);
63 }
64
65 int width() const { return width_; }
66 int height() const { return height_; }
67
68 private:
69 const int width_;
70 const int height_;
71 };
72
73 } // namespace impeller
74
75 #endif // FLUTTER_IMPELLER_TYPOGRAPHER_RECTANGLE_PACKER_H_
impeller::RectanglePacker::width
int width() const
Definition: rectangle_packer.h:65
impeller::RectanglePacker::AddRect
virtual bool AddRect(int width, int height, IPoint16 *loc)=0
Attempt to add a rect without moving already placed rectangles.
impeller::Scalar
float Scalar
Definition: scalar.h:18
impeller::IPoint16::x
int16_t x() const
Definition: rectangle_packer.h:16
impeller::IPoint16::y
int16_t y() const
Definition: rectangle_packer.h:17
impeller::RectanglePacker::Reset
virtual void Reset()=0
Empty out all previously added rectangles.
impeller::RectanglePacker
Packs rectangles into a specified area without rotating them.
Definition: rectangle_packer.h:26
impeller::RectanglePacker::PercentFull
virtual Scalar PercentFull() const =0
Returns how much area has been filled with rectangles.
impeller::RectanglePacker::Factory
static std::shared_ptr< RectanglePacker > Factory(int width, int height)
Return an empty packer with area specified by width and height.
Definition: rectangle_packer.cc:174
impeller::RectanglePacker::height
int height() const
Definition: rectangle_packer.h:66
impeller::IPoint16::x_
int16_t x_
Definition: rectangle_packer.h:19
impeller::RectanglePacker::RectanglePacker
RectanglePacker(int width, int height)
Definition: rectangle_packer.h:60
scalar.h
impeller::IPoint16::y_
int16_t y_
Definition: rectangle_packer.h:20
impeller::RectanglePacker::~RectanglePacker
virtual ~RectanglePacker()
Definition: rectangle_packer.h:33
impeller::IPoint16
Definition: rectangle_packer.h:15
impeller
Definition: allocation.cc:12