added alignment to BoxContainer
Allows aligning contents of VBoxContainer and HBoxcontainer without having to insert expanding spacers.
This commit is contained in:
parent
20a1c765db
commit
c38808b5b1
2 changed files with 53 additions and 0 deletions
|
@ -99,8 +99,10 @@ void BoxContainer::_resort() {
|
||||||
elements exist */
|
elements exist */
|
||||||
|
|
||||||
|
|
||||||
|
bool has_stretched = false;
|
||||||
while(stretch_ratio_total>0) { // first of all, dont even be here if no stretchable objects exist
|
while(stretch_ratio_total>0) { // first of all, dont even be here if no stretchable objects exist
|
||||||
|
|
||||||
|
has_stretched = true;
|
||||||
bool refit_successful=true; //assume refit-test will go well
|
bool refit_successful=true; //assume refit-test will go well
|
||||||
|
|
||||||
for(int i=0;i<get_child_count();i++) {
|
for(int i=0;i<get_child_count();i++) {
|
||||||
|
@ -143,6 +145,18 @@ void BoxContainer::_resort() {
|
||||||
|
|
||||||
|
|
||||||
int ofs=0;
|
int ofs=0;
|
||||||
|
if (!has_stretched) {
|
||||||
|
switch (align) {
|
||||||
|
case ALIGN_BEGIN:
|
||||||
|
break;
|
||||||
|
case ALIGN_CENTER:
|
||||||
|
ofs = stretch_diff / 2;
|
||||||
|
break;
|
||||||
|
case ALIGN_END:
|
||||||
|
ofs = stretch_diff;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
first=true;
|
first=true;
|
||||||
int idx=0;
|
int idx=0;
|
||||||
|
@ -254,6 +268,15 @@ void BoxContainer::_notification(int p_what) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BoxContainer::set_alignment(AlignMode p_align) {
|
||||||
|
align = p_align;
|
||||||
|
_resort();
|
||||||
|
}
|
||||||
|
|
||||||
|
BoxContainer::AlignMode BoxContainer::get_alignment() const {
|
||||||
|
return align;
|
||||||
|
}
|
||||||
|
|
||||||
void BoxContainer::add_spacer(bool p_begin) {
|
void BoxContainer::add_spacer(bool p_begin) {
|
||||||
|
|
||||||
Control *c = memnew( Control );
|
Control *c = memnew( Control );
|
||||||
|
@ -270,10 +293,23 @@ void BoxContainer::add_spacer(bool p_begin) {
|
||||||
BoxContainer::BoxContainer(bool p_vertical) {
|
BoxContainer::BoxContainer(bool p_vertical) {
|
||||||
|
|
||||||
vertical=p_vertical;
|
vertical=p_vertical;
|
||||||
|
align = ALIGN_BEGIN;
|
||||||
// set_ignore_mouse(true);
|
// set_ignore_mouse(true);
|
||||||
set_stop_mouse(false);
|
set_stop_mouse(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BoxContainer::_bind_methods() {
|
||||||
|
|
||||||
|
ObjectTypeDB::bind_method(_MD("get_alignment"),&BoxContainer::get_alignment);
|
||||||
|
ObjectTypeDB::bind_method(_MD("set_alignment","alignment"),&BoxContainer::set_alignment);
|
||||||
|
|
||||||
|
BIND_CONSTANT( ALIGN_BEGIN );
|
||||||
|
BIND_CONSTANT( ALIGN_CENTER );
|
||||||
|
BIND_CONSTANT( ALIGN_END );
|
||||||
|
|
||||||
|
ADD_PROPERTY( PropertyInfo(Variant::INT,"alignment", PROPERTY_HINT_ENUM, "Begin,Center,End"), _SCS("set_alignment"),_SCS("get_alignment") );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
MarginContainer* VBoxContainer::add_margin_child(const String& p_label,Control *p_control,bool p_expand) {
|
MarginContainer* VBoxContainer::add_margin_child(const String& p_label,Control *p_control,bool p_expand) {
|
||||||
|
|
||||||
|
|
|
@ -35,16 +35,31 @@ class BoxContainer : public Container {
|
||||||
|
|
||||||
OBJ_TYPE(BoxContainer,Container);
|
OBJ_TYPE(BoxContainer,Container);
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
enum AlignMode {
|
||||||
|
ALIGN_BEGIN,
|
||||||
|
ALIGN_CENTER,
|
||||||
|
ALIGN_END
|
||||||
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
bool vertical;
|
bool vertical;
|
||||||
|
AlignMode align;
|
||||||
|
|
||||||
void _resort();
|
void _resort();
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
void _notification(int p_what);
|
void _notification(int p_what);
|
||||||
|
|
||||||
|
static void _bind_methods();
|
||||||
public:
|
public:
|
||||||
|
|
||||||
void add_spacer(bool p_begin=false);
|
void add_spacer(bool p_begin=false);
|
||||||
|
|
||||||
|
void set_alignment(AlignMode p_align);
|
||||||
|
AlignMode get_alignment() const;
|
||||||
|
|
||||||
virtual Size2 get_minimum_size() const;
|
virtual Size2 get_minimum_size() const;
|
||||||
|
|
||||||
BoxContainer(bool p_vertical=false);
|
BoxContainer(bool p_vertical=false);
|
||||||
|
@ -73,4 +88,6 @@ public:
|
||||||
VBoxContainer() : BoxContainer(true) {}
|
VBoxContainer() : BoxContainer(true) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
VARIANT_ENUM_CAST(BoxContainer::AlignMode);
|
||||||
|
|
||||||
#endif // BOX_CONTAINER_H
|
#endif // BOX_CONTAINER_H
|
||||||
|
|
Loading…
Reference in a new issue