// // KKGLinearLayout.h // SteveAndMaggieWorld // // Created by Katarzyna Kalinowska-Górska on 03/12/2020. // #ifndef KKGLinearLayout_h #define KKGLinearLayout_h #include "cocos2d.h" class KKGLinearLayout : public cocos2d::Node { public: enum LayoutType { HORIZONTAL, VERTICAL }; // Alignment in the horizontal or vertical axis - the main one, chosen in LayoutType typedef enum Alignment : int { ASTART = 0, ACENTER = 1, AEND = 2 } Alignment; // Alignment in the cross axis typedef enum Gravity : int { GSTART = 0, GCENTER = 1, GEND = 2 } Gravity; static KKGLinearLayout* create(LayoutType type, Alignment alignment, Gravity gravity); virtual bool init(LayoutType type, Alignment alignment, Gravity gravity); virtual void setInterViewMargin(float margin, bool immediatelyRelayout = true); float getInterViewMargin(); virtual void addViews(std::vector views, bool immediatelyRelayout = true); virtual void setLayoutContentSize(const cocos2d::Size & var, bool immediatelyRelayout = true); const cocos2d::Size& getLayoutContentSize() const; virtual void addView(cocos2d::Node * view, bool immediatelyRelayout = true); virtual void substituteViewAtIndex(int index, cocos2d::Node * newView); virtual void setBackgroundColor(const cocos2d::Color4B& bgColor); cocos2d::Vector getViews(); cocos2d::Node* getView(int index); bool hasViews(); // void removeViewAtIndex(int index, bool relayout = true); void removeAllViews(bool relayout); void removeLastView(bool relayout = true); void wrapContents(); virtual void layoutViews(); virtual void setCascadeOpacityEnabled(bool cascadeOpacityEnabled) override; protected: LayoutType m_type { HORIZONTAL }; Alignment m_alignment { ASTART }; Gravity m_gravity { GCENTER }; float m_interChildMargin { 0 }; cocos2d::Point m_internalContainerAnchorPoint; cocos2d::LayerColor* m_backgroundNode {nullptr}; //TODO I might want to create a superclass node with some stuff like bg cocos2d::Node* m_internalContainer { nullptr }; virtual void prepareInternalContainer(); virtual void adjustBackground(const cocos2d::Size& contentSize); }; #endif /* KKGLinearLayout_h */