22 #include "PositioningLayout.h" 25 #include <IHudDrawable.h> 27 #include "InsideChecker.h" 31 void PositioningLayout::addChild(
Layout *child) {
32 checkChildCompatibility(child);
37 children.push_back(
new PositionedLayout(child,x,y));
48 PositioningLayout::PositioningLayout(
Dimension width,
Dimension height) : width(width), height(height) {
49 if(width.
getUnit() == Dimension::WRAP || height.
getUnit() == Dimension::WRAP)
50 throw new invalid_argument(
"The height or width of a PositioningLayout cannot be wrap.");
54 map<string,IHudDrawable*> *list) {
59 float x = layoutXPos + child->x.getSize(layoutWidth);
60 float y = layoutYPos + child->y.getSize(layoutHeight);
61 float width = child->child->getWidth().
getSize(layoutWidth);
62 float height = child->child->getHeight().
getSize(layoutHeight);
67 void PositioningLayout::checkChildCompatibility(
Layout *child) {
68 if(child->getHeight().
getUnit() == Dimension::FILL || child->getWidth().
getUnit() == Dimension::FILL)
69 throw new invalid_argument(
"The width or height of a child of a PositioningLayout cannot be FILL.");
72 Layout* PositioningLayout::findById(
string id) {
75 for(
auto it : children){
76 Layout* res = it->child->findById(
id);
83 void PositioningLayout::invokeListenersInternal(
int x,
int y, ListenerType listenerType,
bool mayBeHit) {
84 bool *wasActive = listenerType == Layout::ON_CLICK_LISTENER ? &mouseWasDown : &hoveredBackground;
85 if(insideChecker !=
nullptr && mayBeHit && insideChecker->isInside(x, y)){
87 callListeners(x,y,listenerType,
true);
90 child->child->invokeListenersInternal(x, y, listenerType,
true);
93 if(listenerType == Layout::ON_HOVER_LISTENER || insideChecker->isInside(x,y))
94 callListeners(x,y,listenerType,
false);
97 child->child->invokeListenersInternal(x, y, listenerType,
false);
virtual std::map< std::string, IHudDrawable * > getGLSquares(float layoutXPos, float layoutYPos, float layoutWidth, float layoutHeight)
float getSize(float room)
virtual void getGLSquares(float layoutXPos, float layoutYPos, float layoutWidth, float layoutHeight, std::map< std::string, IHudDrawable * > *map)
virtual Dimension getHeight()
virtual Dimension getWidth()