5#include "private/qlayoutengine_p.h"
22 return (
i % 256 < 128) ?
i / 256 : 1 +
i / 256;
46 int expandingCount = 0;
48 bool allEmptyNonstretch =
true;
49 int pendingSpacing = -1;
57 cHint +=
data->smartSizeHint();
58 cMin +=
data->minimumSize;
59 sumStretch +=
data->stretch;
65 if (pendingSpacing >= 0) {
66 sumSpacing += pendingSpacing;
69 pendingSpacing =
data->effectiveSpacer(spacer);
73 allEmptyNonstretch = allEmptyNonstretch &&
data->
empty && !
data->expansive &&
data->stretch <= 0;
78 if (space < cMin + sumSpacing) {
83 int minSize = cMin + sumSpacing;
87 spacer = minSize > 0 ? spacer * space / minSize : 0;
88 sumSpacing = spacer * spacerCount;
95 minimumSizes << chain.
at(
i).minimumSize;
97 std::sort(minimumSizes.
begin(), minimumSizes.
end());
99 int space_left = space - sumSpacing;
105 while (idx <
count && space_used < space_left) {
106 current = minimumSizes.
at(idx);
107 space_used =
sum + current * (
count - idx);
112 int deficit = space_used - space_left;
120 int deficitPerItem = deficit/
items;
121 int remainder = deficit %
items;
122 int maxval = current - deficitPerItem;
136 }
else if (space < cHint + sumSpacing) {
144 int space_left = space - sumSpacing;
145 int overdraft = cHint - space_left;
151 &&
data->minimumSize >=
data->smartSizeHint()) {
154 space_left -=
data->smartSizeHint();
159 bool finished =
n == 0;
176 if (
data->size <
data->minimumSize) {
180 overdraft -=
data->smartSizeHint() -
data->minimumSize;
189 int space_left = space - sumSpacing;
194 && (
data->maximumSize <=
data->smartSizeHint()
195 || (!allEmptyNonstretch &&
data->empty &&
196 !
data->expansive &&
data->stretch == 0))) {
199 space_left -=
data->size;
200 sumStretch -=
data->stretch;
206 extraspace = space_left;
218 int surplus, deficit;
220 surplus = deficit = 0;
228 if (sumStretch > 0) {
229 fp_w += (fp_space *
data->stretch) / sumStretch;
230 }
else if (expandingCount > 0) {
231 fp_w += (fp_space * (
data->expansive ? 1 : 0)) / expandingCount;
233 fp_w += fp_space * 1 /
n;
238 if (w < data->smartSizeHint()) {
239 deficit +=
data->smartSizeHint() -
w;
240 }
else if (
w >
data->maximumSize) {
241 surplus +=
w -
data->maximumSize;
244 if (deficit > 0 && surplus <= deficit) {
248 if (!
data->done &&
data->size <
data->smartSizeHint()) {
251 space_left -=
data->smartSizeHint();
252 sumStretch -=
data->stretch;
259 if (surplus > 0 && surplus >= deficit) {
266 space_left -=
data->maximumSize;
267 sumStretch -=
data->stretch;
274 }
while (
n > 0 && surplus != deficit);
276 extraspace = space_left;
285 int extra = extraspace / (spacerCount + 2);
292 p +=
data->effectiveSpacer(spacer) + extra;
295#ifdef QLAYOUT_EXTRA_DEBUG
297 <<
"space" << space <<
"spacer" << spacer;
299 qDebug() <<
i <<
':' << chain[
i].minimumSize << chain[
i].smartSizeHint()
300 << chain[
i].maximumSize <<
"stretch" << chain[
i].stretch
301 <<
"empty" << chain[
i].
empty <<
"expansive" << chain[
i].expansive
302 <<
"spacing" << chain[
i].spacing;
303 qDebug() <<
"result pos" << chain[
i].pos <<
"size" << chain[
i].
size;
316 s.setWidth(minSizeHint.
width());
323 s.setHeight(minSizeHint.
height());
329 s =
s.boundedTo(maxSize);
330 if (minSize.
width() > 0)
331 s.setWidth(minSize.
width());
335 return s.expandedTo(
QSize(0,0));
342 w->minimumSize(),
w->maximumSize(),
349 w->minimumSize(),
w->maximumSize(),
355 const QSizePolicy &sizePolicy, Qt::Alignment align)
367 s.setHeight(
hint.height());
379 return qSmartMaxSize(
w->sizeHint().expandedTo(
w->minimumSizeHint()),
w->minimumSize(),
w->maximumSize(),
380 w->sizePolicy(), align);
385 return qSmartMaxSize(
w->sizeHint().expandedTo(
w->minimumSizeHint()),
w->minimumSize(),
w->maximumSize(),
386 w->sizePolicy(), align);
394 }
else if (
parent->isWidgetType()) {
The QLayout class is the base class of geometry managers.
qsizetype size() const noexcept
bool empty() const noexcept
const_reference at(qsizetype i) const noexcept
QObject * parent() const
Returns a pointer to the parent object.
The QSizePolicy class is a layout attribute describing horizontal and vertical resizing policy.
constexpr int height() const noexcept
Returns the height.
constexpr int width() const noexcept
Returns the width.
constexpr QSize expandedTo(const QSize &) const noexcept
Returns a size holding the maximum width and height of this size and the given otherSize.
constexpr void setWidth(int w) noexcept
Sets the width to the given width.
PixelMetric
This enum describes the various available pixel metrics.
virtual int pixelMetric(PixelMetric metric, const QStyleOption *option=nullptr, const QWidget *widget=nullptr) const =0
Returns the value of the given pixel metric.
const T & at(qsizetype idx) const
void reserve(qsizetype sz)
iterator begin() noexcept
Combined button and popup list for selecting options.
Q_WIDGETS_EXPORT QSize qSmartMinSize(const QSize &sizeHint, const QSize &minSizeHint, const QSize &minSize, const QSize &maxSize, const QSizePolicy &sizePolicy)
Q_WIDGETS_EXPORT int qSmartSpacing(const QLayout *layout, QStyle::PixelMetric pm)
void qGeomCalc(QList< QLayoutStruct > &chain, int start, int count, int pos, int space, int spacer)
Q_WIDGETS_EXPORT QSize qSmartMaxSize(const QSize &sizeHint, const QSize &minSize, const QSize &maxSize, const QSizePolicy &sizePolicy, Qt::Alignment align)
static int fRound(Fixed64 i)
static Fixed64 toFixed(int i)
QT_BEGIN_NAMESPACE typedef qint64 Fixed64
QT_BEGIN_NAMESPACE constexpr int QLAYOUTSIZE_MAX
constexpr const T & qMin(const T &a, const T &b)
constexpr const T & qMax(const T &a, const T &b)
GLfloat GLfloat GLfloat w
[0]
GLenum GLenum GLsizei count
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
static QT_BEGIN_NAMESPACE QVariant hint(QPlatformIntegration::StyleHint h)
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent