MCPcopy Create free account
hub / github.com/axmolengine/axmol / calculateFinalPositionWithRelativeWidget

Method calculateFinalPositionWithRelativeWidget

core/ui/UILayoutManager.cpp:331–553  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

329}
330
331bool RelativeLayoutManager::calculateFinalPositionWithRelativeWidget(LayoutProtocol* layout)
332{
333 Vec2 ap = _widget->getAnchorPoint();
334 Vec2 cs = _widget->getBoundingBox().size;
335
336 _finalPositionX = 0.0f;
337 _finalPositionY = 0.0f;
338
339 Widget* relativeWidget = this->getRelativeWidget(_widget);
340
341 RelativeLayoutParameter* layoutParameter = dynamic_cast<RelativeLayoutParameter*>(_widget->getLayoutParameter());
342
343 RelativeLayoutParameter::RelativeAlign align = layoutParameter->getAlign();
344
345 Vec2 layoutSize = layout->getLayoutContentSize();
346
347 switch (align)
348 {
349 case RelativeLayoutParameter::RelativeAlign::NONE:
350 case RelativeLayoutParameter::RelativeAlign::PARENT_TOP_LEFT:
351 _finalPositionX = ap.x * cs.width;
352 _finalPositionY = layoutSize.height - ((1.0f - ap.y) * cs.height);
353 break;
354 case RelativeLayoutParameter::RelativeAlign::PARENT_TOP_CENTER_HORIZONTAL:
355 _finalPositionX = layoutSize.width * 0.5f - cs.width * (0.5f - ap.x);
356 _finalPositionY = layoutSize.height - ((1.0f - ap.y) * cs.height);
357 break;
358 case RelativeLayoutParameter::RelativeAlign::PARENT_TOP_RIGHT:
359 _finalPositionX = layoutSize.width - ((1.0f - ap.x) * cs.width);
360 _finalPositionY = layoutSize.height - ((1.0f - ap.y) * cs.height);
361 break;
362 case RelativeLayoutParameter::RelativeAlign::PARENT_LEFT_CENTER_VERTICAL:
363 _finalPositionX = ap.x * cs.width;
364 _finalPositionY = layoutSize.height * 0.5f - cs.height * (0.5f - ap.y);
365 break;
366 case RelativeLayoutParameter::RelativeAlign::CENTER_IN_PARENT:
367 _finalPositionX = layoutSize.width * 0.5f - cs.width * (0.5f - ap.x);
368 _finalPositionY = layoutSize.height * 0.5f - cs.height * (0.5f - ap.y);
369 break;
370 case RelativeLayoutParameter::RelativeAlign::PARENT_RIGHT_CENTER_VERTICAL:
371 _finalPositionX = layoutSize.width - ((1.0f - ap.x) * cs.width);
372 _finalPositionY = layoutSize.height * 0.5f - cs.height * (0.5f - ap.y);
373 break;
374 case RelativeLayoutParameter::RelativeAlign::PARENT_LEFT_BOTTOM:
375 _finalPositionX = ap.x * cs.width;
376 _finalPositionY = ap.y * cs.height;
377 break;
378 case RelativeLayoutParameter::RelativeAlign::PARENT_BOTTOM_CENTER_HORIZONTAL:
379 _finalPositionX = layoutSize.width * 0.5f - cs.width * (0.5f - ap.x);
380 _finalPositionY = ap.y * cs.height;
381 break;
382 case RelativeLayoutParameter::RelativeAlign::PARENT_RIGHT_BOTTOM:
383 _finalPositionX = layoutSize.width - ((1.0f - ap.x) * cs.width);
384 _finalPositionY = ap.y * cs.height;
385 break;
386
387 case RelativeLayoutParameter::RelativeAlign::LOCATION_ABOVE_LEFTALIGN:
388 if (relativeWidget)

Callers 1

doLayoutMethod · 0.95

Calls 10

getRelativeWidgetMethod · 0.95
getAnchorPointMethod · 0.80
getLayoutParameterMethod · 0.80
getLayoutContentSizeMethod · 0.80
getTopBoundaryMethod · 0.80
getLeftBoundaryMethod · 0.80
getRightBoundaryMethod · 0.80
getBottomBoundaryMethod · 0.80
getBoundingBoxMethod · 0.45
getAlignMethod · 0.45

Tested by

no test coverage detected