71 {
72
74
76 if (subviews->count) {
77
79
81
82 int availableSize, requestedSize = 0;
83 switch (this->axis) {
86 break;
89 break;
90 }
91
92 availableSize -= this->spacing * (subviews->count - 1);
93
94 for (size_t i = 0; i < subviews->count; i++) {
95
96 View *subview = $(subviews, objectAtIndex, i);
97
98 const SDL_Size subviewSize = $(subview,
size);
99
100 switch (this->axis) {
102 requestedSize += subviewSize.h;
103 break;
105 requestedSize += subviewSize.w;
106 break;
107 }
108 }
109
110 int pos = 0;
111
112 const float scale = requestedSize ? availableSize / (float) requestedSize : 1.f;
113
114 for (size_t i = 0; i < subviews->count; i++) {
115
116 View *subview = $(subviews, objectAtIndex, i);
117
118 switch (this->axis) {
120 subview->
frame.y = pos;
121 break;
123 subview->
frame.x = pos;
124 break;
125 }
126
127 SDL_Size subviewSize = $(subview,
size);
128
129 switch (this->axis) {
133 }
134 break;
138 }
139 break;
140 }
141
142 switch (this->distribution) {
144 break;
145
147 switch (this->axis) {
149 subviewSize.h *= scale;
150 break;
152 subviewSize.w *= scale;
153 break;
154 }
155 break;
156
158 switch (this->axis) {
160 subviewSize.h = availableSize / (float) subviews->count;
161 break;
163 subviewSize.w = availableSize / (float) subviews->count;
164 break;
165 }
166 break;
167 }
168
169 $(subview,
resize, &subviewSize);
171
172 switch (this->axis) {
174 pos += subviewSize.h;
175 break;
177 pos += subviewSize.w;
178 break;
179 }
180
181 pos += this->spacing;
182 }
183 }
184
185 release(subviews);
186}
static SDL_Size size(const Image *self)
static Array * visibleSubviews(const View *self)
@ StackViewDistributionDefault
@ StackViewDistributionFillEqually
@ StackViewDistributionFill
@ StackViewAxisHorizontal
static void resize(View *self, const SDL_Size *size)
static void layoutIfNeeded(View *self)
static SDL_Rect bounds(const View *self)
SDL_Rect frame
The frame, relative to the superview.