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