IupNormalizer (since 3.0)

It is a void container that does not affects the dialog layout. It act by normalizing all child controls so their natural size to be the biggest natural size among them. All natural width will be set to the biggest width, and all natural height will be set to the biggest height according to is value. The child controls must be inside a valid container in the dialog.


Ihandle* IupNormalizer(Ihandle *ih_first, ...); [in C]
Ihandle* IupNormalizerv(Ihandle **ih_list); [in C]
iup.normalizer{ih_first, ...: ihandle} -> (elem: ihandle) [in Lua]
normalizer(ih_first, ...) [in LED]

ih_first, ... : List of the identifiers that will be normalized. NULL must be used to define the end of the list in C. It can be empty in C or Lua, not in LED.

Returns: the identifier of the created element, or NULL if an error occurs.


NORMALIZE (non inheritable): normalization direction. Can be HORIZONTAL, VERTICAL or BOTH. These are the same values of the NORMALIZESIZE attribute. Default: HORIZONTAL.

ADDCONTROL (non inheritable): Adds a control to the normalizer. The value passed must be the name of an element. Use IupSetHandle or IupSetAttributeHandle to associate an element to a name. In Lua you can also use the element reference directly.

ADDCONTROL_HANDLE (non inheritable): Adds a control to the normalizer. The value passed must be a handle of an element.

Attributes (at Children)

NORMALIZERGROUP (non inheritable) (at children only): name of a normalizer element to automatically add the control. If an element with that name does not exists then one is created. In Lua you can also use the element reference directly.


It is NOT necessary to add the normalizer to a dialog hierarchy. Every time the NORMALIZE attribute is set, a normalization occurs. If the normalizer is added to a dialog hierarchy, then whenever the Natural size is calculated a normalization occurs, so add it to the hierarchy before the elements you want to normalize or its normalization will be not used.

The elements do NOT need to be children of the same parent, do NOT need to be mapped, and do NOT need to be in a complete hierarchy of a dialog.

The elements are NOT children of the normalizer. To remove or add other elements, the normalizer must be destroyed and created a new one.

Notice that the NORMALIZERGROUP attribute can simplify a lot the process of creating a normalizer, so you do not need to list several elements from different parts of the dialog.

Has the same effect of the NORMALIZESIZE attribute of the IupVbox and IupHbox controls, but it can be used for elements with different parents, it changes the User size of the elements.


Here IupNormalizer is used to normalize the horizontal size of several labels that are in different containers. Since it needs to be done once only the IupNormalizer is destroyed just after it is initialized.

IupDestroy(IupSetAttributes(IupNormalizer(IupGetChild(hsi_vb, 0),  /* Hue Label */
                                          IupGetChild(hsi_vb, 1),  /* Saturation Label */
                                          IupGetChild(hsi_vb, 2),  /* Intensity Label */
                                          IupGetChild(clr_vb, 0),  /* Opacity Label */
                                          IupGetChild(clr_vb, 1),  /* Hexa Label */
                                          NULL), "NORMALIZE=HORIZONTAL"));

The following case use the internal normalizer in an Hbox:

button_box = IupHbox(
IupSetAttribute(button_box, "NORMALIZESIZE", "HORIZONTAL");

See Also

IupHbox, IupVbox, IupGridBox