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