40 const double minimumSize,
41 const double maximumSize,
42 const double preferredSize)
46 if (layout ==
nullptr)
49 layout->itemIndex = itemIndex;
53 if (
items.getUnchecked (
i)->itemIndex > itemIndex)
59 layout->minSize = minimumSize;
60 layout->maxSize = maximumSize;
61 layout->preferredSize = preferredSize;
62 layout->currentSize = 0;
68 double& preferredSize)
const
72 minimumSize = layout->minSize;
73 maximumSize = layout->maxSize;
74 preferredSize = layout->preferredSize;
93 for (
int i = 0;
i < itemIndex; ++
i)
95 pos += layout->currentSize;
103 return layout->currentSize;
111 return -layout->currentSize / (double)
totalSize;
119 for (
int i =
items.size(); --
i >= 0;)
121 auto* layout =
items.getUnchecked(
i);
123 if (layout->itemIndex == itemIndex)
129 newPosition =
jmax (newPosition,
totalSize - maxSizeAfterThisComp - layout->currentSize);
130 newPosition =
jmin (newPosition, realTotalSize - minSizeAfterThisComp);
134 endPos += layout->currentSize;
146 int x,
int y,
int w,
int h,
147 const bool vertically,
148 const bool resizeOtherDimension)
151 int pos = vertically ?
y :
x;
153 for (
int i = 0;
i < numComponents; ++
i)
157 if (
auto*
c = components[
i])
159 if (
i == numComponents - 1)
162 if (resizeOtherDimension)
165 c->setBounds (
x, pos,
w,
jmax (layout->currentSize,
h - pos));
167 c->setBounds (pos,
y,
jmax (layout->currentSize,
w - pos),
h);
172 c->setBounds (
c->getX(), pos,
c->getWidth(),
jmax (layout->currentSize,
h - pos));
174 c->setBounds (pos,
c->getY(),
jmax (layout->currentSize,
w - pos),
c->getHeight());
179 if (resizeOtherDimension)
182 c->setBounds (
x, pos,
w, layout->currentSize);
184 c->setBounds (pos,
y, layout->currentSize,
h);
189 c->setBounds (
c->getX(), pos,
c->getWidth(), layout->currentSize);
191 c->setBounds (pos,
c->getY(), layout->currentSize,
c->getHeight());
196 pos += layout->currentSize;
206 if (
i->itemIndex == itemIndex)
214 const int availableSpace,
218 double totalIdealSize = 0.0;
219 int totalMinimums = 0;
221 for (
int i = startIndex;
i < endIndex; ++
i)
223 auto* layout =
items.getUnchecked (
i);
227 totalMinimums += layout->currentSize;
231 if (totalIdealSize <= 0)
232 totalIdealSize = 1.0;
235 int extraSpace = availableSpace - totalMinimums;
237 while (extraSpace > 0)
239 int numWantingMoreSpace = 0;
240 int numHavingTakenExtraSpace = 0;
243 for (
int i = startIndex;
i < endIndex; ++
i)
245 auto* layout =
items.getUnchecked (
i);
249 auto bestSize =
jlimit (layout->currentSize,
250 jmax (layout->currentSize,
252 roundToInt (sizeWanted * availableSpace / totalIdealSize));
254 if (bestSize > layout->currentSize)
255 ++numWantingMoreSpace;
259 for (
int i = startIndex;
i < endIndex; ++
i)
261 auto* layout =
items.getUnchecked (
i);
265 auto bestSize =
jlimit (layout->currentSize,
267 roundToInt (sizeWanted * availableSpace / totalIdealSize));
269 auto extraWanted = bestSize - layout->currentSize;
273 auto extraAllowed =
jmin (extraWanted,
274 extraSpace /
jmax (1, numWantingMoreSpace));
276 if (extraAllowed > 0)
278 ++numHavingTakenExtraSpace;
279 --numWantingMoreSpace;
281 layout->currentSize += extraAllowed;
282 extraSpace -= extraAllowed;
287 if (numHavingTakenExtraSpace <= 0)
292 for (
int i = startIndex;
i < endIndex; ++
i)
294 auto* layout =
items.getUnchecked(
i);
295 startPos += layout->currentSize;
302 const int endIndex)
const
304 int totalMinimums = 0;
306 for (
int i = startIndex;
i < endIndex; ++
i)
309 return totalMinimums;
314 int totalMaximums = 0;
316 for (
int i = startIndex;
i < endIndex; ++
i)
319 return totalMaximums;
324 for (
int i = 0;
i <
items.size(); ++
i)
326 auto* layout =
items.getUnchecked (
i);
328 layout->preferredSize
Type jmin(const Type a, const Type b)
Definition MathsFunctions.h:60
Type jmax(const Type a, const Type b)
Definition MathsFunctions.h:48
Definition juce_Component.h:36
OwnedArray< ItemLayoutProperties > items
Definition juce_StretchableLayoutManager.h:246
void setItemLayout(int itemIndex, double minimumSize, double maximumSize, double preferredSize)
Definition juce_StretchableLayoutManager.cpp:39
int getMinimumSizeOfItems(int startIndex, int endIndex) const
Definition juce_StretchableLayoutManager.cpp:301
int totalSize
Definition juce_StretchableLayoutManager.h:247
int getItemCurrentPosition(int itemIndex) const
Definition juce_StretchableLayoutManager.cpp:89
double getItemCurrentRelativeSize(int itemIndex) const
Definition juce_StretchableLayoutManager.cpp:108
ItemLayoutProperties * getInfoFor(int itemIndex) const
Definition juce_StretchableLayoutManager.cpp:203
void updatePrefSizesToMatchCurrentPositions()
Definition juce_StretchableLayoutManager.cpp:322
~StretchableLayoutManager()
Definition juce_StretchableLayoutManager.cpp:30
int getItemCurrentAbsoluteSize(int itemIndex) const
Definition juce_StretchableLayoutManager.cpp:100
int getMaximumSizeOfItems(int startIndex, int endIndex) const
Definition juce_StretchableLayoutManager.cpp:312
void clearAllItems()
Definition juce_StretchableLayoutManager.cpp:33
static int sizeToRealSize(double size, int totalSpace)
Definition juce_StretchableLayoutManager.cpp:334
void setTotalSize(int newTotalSize)
Definition juce_StretchableLayoutManager.cpp:82
int fitComponentsIntoSpace(int startIndex, int endIndex, int availableSpace, int startPos)
Definition juce_StretchableLayoutManager.cpp:212
void layOutComponents(Component **components, int numComponents, int x, int y, int width, int height, bool vertically, bool resizeOtherDimension)
Definition juce_StretchableLayoutManager.cpp:144
StretchableLayoutManager()
Definition juce_StretchableLayoutManager.cpp:29
bool getItemLayout(int itemIndex, double &minimumSize, double &maximumSize, double &preferredSize) const
Definition juce_StretchableLayoutManager.cpp:65
void setItemPosition(int itemIndex, int newPosition)
Definition juce_StretchableLayoutManager.cpp:116
UINT_D64 w
Definition inflate.c:942
int y
Definition inflate.c:1588
register unsigned i
Definition inflate.c:1575
unsigned x[BMAX+1]
Definition inflate.c:1586
Definition carla_juce.cpp:31
constexpr Type jmax(Type a, Type b)
Definition juce_MathsFunctions.h:94
Type jlimit(Type lowerLimit, Type upperLimit, Type valueToConstrain) noexcept
Definition juce_MathsFunctions.h:262
int roundToInt(const FloatType value) noexcept
Definition juce_MathsFunctions.h:465
Definition juce_StretchableLayoutManager.h:240
return c
Definition crypt.c:175
uch h[RAND_HEAD_LEN]
Definition crypt.c:459