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