rect_packer.h Source File - ClanLib SDK
Description: rect_packer.h Source File

rect_packer.h
1/*
2** ClanLib SDK
3** Copyright (c) 1997-2020 The ClanLib Team
4**
5** This software is provided 'as-is', without any express or implied
6** warranty. In no event will the authors be held liable for any damages
7** arising from the use of this software.
8**
9** Permission is granted to anyone to use this software for any purpose,
10** including commercial applications, and to alter it and redistribute it
11** freely, subject to the following restrictions:
12**
13** 1. The origin of this software must not be misrepresented; you must not
14** claim that you wrote the original software. If you use this software
15** in a product, an acknowledgment in the product documentation would be
16** appreciated but is not required.
17** 2. Altered source versions must be plainly marked as such, and must not be
18** misrepresented as being the original software.
19** 3. This notice may not be removed or altered from any source distribution.
20**
21** Note: Some of the libraries ClanLib may link to may have additional
22** requirements or restrictions.
23**
24** File Author(s):
25**
26** Kenneth Gangstoe
27*/
28
29#pragma once
30
31#include <memory>
32#include "rect.h"
33
34namespace clan
35{
38
39 class Size;
40 class RectPacker_Impl;
41
43 class RectPacker
44 {
45 public:
47 enum AllocationPolicy
48 {
49 create_new_group,
50 search_previous_groups,
51 fail_if_full
52 };
53
54 struct AllocatedRect
55 {
56 public:
57 AllocatedRect(int group_index, Rect rect) : group_index(group_index), rect(rect) {}
58 int group_index;
59 Rect rect;
60 };
61
63 RectPacker();
64
66 RectPacker(const Size &max_group_size, AllocationPolicy policy = create_new_group);
67
68 ~RectPacker();
69
71 bool is_null() const { return !impl; }
72
74 void throw_if_null() const;
75
77 AllocationPolicy get_allocation_policy() const;
78
80 Size get_max_group_size() const;
81
83 int get_total_rect_count() const;
84
86 int get_rect_count(unsigned int group_index = 0) const;
87
89 int get_group_count() const;
90
92 void set_allocation_policy(AllocationPolicy policy);
93
95 AllocatedRect add(const Size &size);
96
97 private:
98 std::shared_ptr<RectPacker_Impl> impl;
99 };
100
102}
clan::RectPacker::get_allocation_policy
AllocationPolicy get_allocation_policy() const
Returns the allocation policy.
clan::RectPacker::~RectPacker
~RectPacker()
clan::RectPacker::get_group_count
int get_group_count() const
Returns the amount of rects used by group.
clan::RectPacker::get_max_group_size
Size get_max_group_size() const
Returns the max group size.
clan::RectPacker::is_null
bool is_null() const
Returns true if this object is invalid.
Definition rect_packer.h:71
clan::RectPacker::get_total_rect_count
int get_total_rect_count() const
Returns the total amount of rects.
clan::RectPacker::add
AllocatedRect add(const Size &size)
Allocate space for another rect.
clan::RectPacker::AllocationPolicy
AllocationPolicy
Allocation policy.
Definition rect_packer.h:48
clan::RectPacker::search_previous_groups
@ search_previous_groups
Definition rect_packer.h:50
clan::RectPacker::fail_if_full
@ fail_if_full
Definition rect_packer.h:51
clan::RectPacker::create_new_group
@ create_new_group
Definition rect_packer.h:49
clan::RectPacker::throw_if_null
void throw_if_null() const
Throw an exception if this object is invalid.
clan::RectPacker::RectPacker
RectPacker(const Size &max_group_size, AllocationPolicy policy=create_new_group)
Constructs a rect group.
clan::RectPacker::RectPacker
RectPacker()
Constructs a null instance.
clan::RectPacker::set_allocation_policy
void set_allocation_policy(AllocationPolicy policy)
Set the allocation policy.
clan::RectPacker::get_rect_count
int get_rect_count(unsigned int group_index=0) const
Returns the amount of rects in a group.
clan::Rect
2D (left,top,right,bottom) rectangle structure - Integer
Definition rect.h:446
clan::Size
2D (width,height) size structure - Integer
Definition size.h:176
clan
Definition clanapp.h:36
clan::RectPacker::AllocatedRect
Definition rect_packer.h:55
clan::RectPacker::AllocatedRect::group_index
int group_index
Definition rect_packer.h:58
clan::RectPacker::AllocatedRect::rect
Rect rect
Definition rect_packer.h:59
clan::RectPacker::AllocatedRect::AllocatedRect
AllocatedRect(int group_index, Rect rect)
Definition rect_packer.h:57