1/*
2 * Copyright 2006, Ingo Weinhold <bonefish@cs.tu-berlin.de>.
3 * All rights reserved. Distributed under the terms of the MIT License.
4 */
5
6#include "OneElementLayouter.h"
7
8#include <Size.h>
9
10
11class OneElementLayouter::MyLayoutInfo : public LayoutInfo {
12public:
13	float	fSize;
14
15	MyLayoutInfo()
16		: fSize(0)
17	{
18	}
19
20	virtual float ElementLocation(int32 element)
21	{
22		return 0;
23	}
24
25	virtual float ElementSize(int32 element)
26	{
27		return fSize;
28	}
29};
30
31
32// constructor
33OneElementLayouter::OneElementLayouter()
34	: fMin(-1),
35	  fMax(B_SIZE_UNLIMITED),
36	  fPreferred(-1)
37{
38}
39
40// destructor
41OneElementLayouter::~OneElementLayouter()
42{
43}
44
45// AddConstraints
46void
47OneElementLayouter::AddConstraints(int32 element, int32 length,
48	float min, float max, float preferred)
49{
50	fMin = max_c(fMin, min);
51	fMax = min_c(fMax, max);
52	fMax = max_c(fMax, fMin);
53	fPreferred = max_c(fPreferred, preferred);
54	fPreferred = max_c(fPreferred, fMin);
55	fPreferred = min_c(fPreferred, fMax);
56}
57
58// SetWeight
59void
60OneElementLayouter::SetWeight(int32 element, float weight)
61{
62	// not needed
63}
64
65// MinSize
66float
67OneElementLayouter::MinSize()
68{
69	return fMin;
70}
71
72// MaxSize
73float
74OneElementLayouter::MaxSize()
75{
76	return fMax;
77}
78
79// PreferredSize
80float
81OneElementLayouter::PreferredSize()
82{
83	return fPreferred;
84}
85
86// CreateLayoutInfo
87LayoutInfo*
88OneElementLayouter::CreateLayoutInfo()
89{
90	return new MyLayoutInfo;
91}
92
93// Layout
94void
95OneElementLayouter::Layout(LayoutInfo* layoutInfo, float size)
96{
97	((MyLayoutInfo*)layoutInfo)->fSize = max_c(size, fMin);
98}
99
100// CloneLayouter
101Layouter*
102OneElementLayouter::CloneLayouter()
103{
104	OneElementLayouter* layouter = new OneElementLayouter;
105	layouter->fMin = fMin;
106	layouter->fMax = fMax;
107	layouter->fPreferred = fPreferred;
108
109	return layouter;
110}
111