diff options
-rw-r--r-- | source/blender/editors/include/UI_interface.h | 4 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_layout.c | 29 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_ui.c | 28 |
3 files changed, 61 insertions, 0 deletions
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index 7936ace5c45..779fac9bc15 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -991,6 +991,8 @@ void uiLayoutSetAlignment(uiLayout *layout, char alignment); void uiLayoutSetKeepAspect(uiLayout *layout, bool keepaspect); void uiLayoutSetScaleX(uiLayout *layout, float scale); void uiLayoutSetScaleY(uiLayout *layout, float scale); +void uiLayoutSetUnitsX(uiLayout *layout, int unit); +void uiLayoutSetUnitsY(uiLayout *layout, int unit); void uiLayoutSetEmboss(uiLayout *layout, char emboss); void uiLayoutSetPropSep(uiLayout *layout, bool is_sep); void uiLayoutSetPropDecorate(uiLayout *layout, bool is_sep); @@ -1004,6 +1006,8 @@ bool uiLayoutGetKeepAspect(uiLayout *layout); int uiLayoutGetWidth(uiLayout *layout); float uiLayoutGetScaleX(uiLayout *layout); float uiLayoutGetScaleY(uiLayout *layout); +int uiLayoutGetUnitsX(uiLayout *layout); +int uiLayoutGetUnitsY(uiLayout *layout); int uiLayoutGetEmboss(uiLayout *layout); bool uiLayoutGetPropSep(uiLayout *layout); bool uiLayoutGetPropDecorate(uiLayout *layout); diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index a874634d3ed..0f78cfa0a3c 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -169,6 +169,7 @@ struct uiLayout { bool variable_size; /* For layouts inside gridflow, they and their items shall never have a fixed maximal size. */ char alignment; char emboss; + int units[2]; /* for fixed width or height to avoid UI size changes */ }; typedef struct uiLayoutItemFlow { @@ -3856,6 +3857,16 @@ void uiLayoutSetScaleY(uiLayout *layout, float scale) layout->scale[1] = scale; } +void uiLayoutSetUnitsX(uiLayout *layout, int unit) +{ + layout->units[0] = unit; +} + +void uiLayoutSetUnitsY(uiLayout *layout, int unit) +{ + layout->units[1] = unit; +} + void uiLayoutSetEmboss(uiLayout *layout, char emboss) { layout->emboss = emboss; @@ -3921,6 +3932,16 @@ float uiLayoutGetScaleY(uiLayout *layout) return layout->scale[1]; } +int uiLayoutGetUnitsX(uiLayout *layout) +{ + return layout->units[0]; +} + +int uiLayoutGetUnitsY(uiLayout *layout) +{ + return layout->units[1]; +} + int uiLayoutGetEmboss(uiLayout *layout) { if (layout->emboss == UI_EMBOSS_UNDEFINED) { @@ -4011,6 +4032,14 @@ static void ui_item_estimate(uiItem *item) default: break; } + + /* force fixed size */ + if (litem->units[0] > 0) { + litem->w = UI_UNIT_X * litem->units[0]; + } + if (litem->units[1] > 0) { + litem->h = UI_UNIT_Y * litem->units[1]; + } } } diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c index 9ea51247ed4..eccf0e73d8e 100644 --- a/source/blender/makesrna/intern/rna_ui.c +++ b/source/blender/makesrna/intern/rna_ui.c @@ -947,6 +947,26 @@ static void rna_UILayout_scale_y_set(PointerRNA *ptr, float value) uiLayoutSetScaleY(ptr->data, value); } +static int rna_UILayout_units_x_get(PointerRNA *ptr) +{ + return uiLayoutGetUnitsX(ptr->data); +} + +static void rna_UILayout_units_x_set(PointerRNA *ptr, int value) +{ + uiLayoutSetUnitsX(ptr->data, value); +} + +static int rna_UILayout_units_y_get(PointerRNA *ptr) +{ + return uiLayoutGetUnitsY(ptr->data); +} + +static void rna_UILayout_units_y_set(PointerRNA *ptr, int value) +{ + uiLayoutSetUnitsY(ptr->data, value); +} + static int rna_UILayout_emboss_get(PointerRNA *ptr) { return uiLayoutGetEmboss(ptr->data); @@ -1036,6 +1056,14 @@ static void rna_def_ui_layout(BlenderRNA *brna) prop = RNA_def_property(srna, "scale_y", PROP_FLOAT, PROP_UNSIGNED); RNA_def_property_float_funcs(prop, "rna_UILayout_scale_y_get", "rna_UILayout_scale_y_set", NULL); RNA_def_property_ui_text(prop, "Scale Y", "Scale factor along the Y for items in this (sub)layout"); + + prop = RNA_def_property(srna, "ui_units_x", PROP_INT, PROP_UNSIGNED); + RNA_def_property_int_funcs(prop, "rna_UILayout_units_x_get", "rna_UILayout_units_x_set", NULL); + RNA_def_property_ui_text(prop, "Units X", "Fixed Size along the X for items in this (sub)layout"); + + prop = RNA_def_property(srna, "ui_units_y", PROP_INT, PROP_UNSIGNED); + RNA_def_property_int_funcs(prop, "rna_UILayout_units_y_get", "rna_UILayout_units_y_set", NULL); + RNA_def_property_ui_text(prop, "Units Y", "Fixed Size along the Y for items in this (sub)layout"); RNA_api_ui_layout(srna); prop = RNA_def_property(srna, "emboss", PROP_ENUM, PROP_NONE); |