MCPcopy Create free account
hub / github.com/arrayfire/forge / getRegion

Method getRegion

src/backend/opengl/font_atlas_impl.cpp:160–225  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

158}
159
160glm::vec4 FontAtlas::getRegion(const size_t pWidth, const size_t pHeight)
161{
162 glm::vec4 region(0, 0, pWidth, pHeight);
163
164 size_t best_height = UINT_MAX;
165 size_t best_width = UINT_MAX;
166
167 int best_index = -1;
168 int y;
169
170 for(size_t i=0; i<nodes.size(); ++i)
171 {
172 y = fit(i, pWidth, pHeight);
173
174 if (y >= 0) {
175 auto node = nodes[i];
176 if ( ((y + pHeight) < best_height) ||
177 (((y + pHeight) == best_height) && (node.z < best_width)) )
178 {
179 best_height = y + pHeight;
180 best_index = int(i);
181 best_width = int(node.z);
182 region.x = node.x;
183 region.y = float(y);
184 }
185 }
186 }
187
188 if (best_index == -1) {
189 region.x = -1;
190 region.y = -1;
191 region.z = 0;
192 region.w = 0;
193 return region;
194 }
195
196 glm::vec3 node(region.x, region.y+pHeight, pWidth);
197
198 nodes.insert(nodes.begin()+best_index, node);
199
200 for(size_t i = best_index+1; i < nodes.size(); ++i)
201 {
202 glm::vec3& node = nodes[i];
203 auto prev = nodes[i-1];
204
205 if (node.x < (prev.x + prev.z) )
206 {
207 int shrink = int(prev.x + prev.z - node.x);
208 node.x += shrink;
209 node.z -= shrink;
210 if (node.z <= 0) {
211 nodes.erase(nodes.begin()+i);
212 --i;
213 } else {
214 break;
215 }
216 } else {
217 break;

Callers 1

loadAtlasWithGlyphsMethod · 0.80

Calls 1

sizeMethod · 0.45

Tested by

no test coverage detected