Method

Gtk.ConstraintLayout.add_constraints_from_descriptionv

Declaration [src]

GList*
gtk_constraint_layout_add_constraints_from_descriptionv (
  GtkConstraintLayout* layout,
  const char* const* lines,
  gsize n_lines,
  int hspacing,
  int vspacing,
  GHashTable* views,
  GError** error
)

Description [src]

Creates a list of constraints from a VFL description.

The Visual Format Language, VFL, is based on Apple’s AutoLayout VFL.

The views dictionary is used to match GtkConstraintTarget instances to the symbolic view name inside the VFL.

The VFL grammar is:

       <visualFormatString> = (<orientation>)?
                              (<superview><connection>)?
                              <view>(<connection><view>)*
                              (<connection><superview>)?
              <orientation> = 'H' | 'V'
                <superview> = '|'
               <connection> = '' | '-' <predicateList> '-' | '-'
            <predicateList> = <simplePredicate> | <predicateListWithParens>
          <simplePredicate> = <metricName> | <positiveNumber>
  <predicateListWithParens> = '(' <predicate> (',' <predicate>)* ')'
                <predicate> = (<relation>)? <objectOfPredicate> (<operatorList>)? ('@' <priority>)?
                 <relation> = '==' | '<=' | '>='
        <objectOfPredicate> = <constant> | <viewName> | ('.' <attributeName>)?
                 <priority> = <positiveNumber> | 'required' | 'strong' | 'medium' | 'weak'
                 <constant> = <number>
             <operatorList> = (<multiplyOperator>)? (<addOperator>)?
         <multiplyOperator> = [ '*' | '/' ] <positiveNumber>
              <addOperator> = [ '+' | '-' ] <positiveNumber>
                 <viewName> = [A-Za-z_]([A-Za-z0-9_]*) // A C identifier
               <metricName> = [A-Za-z_]([A-Za-z0-9_]*) // A C identifier
            <attributeName> = 'top' | 'bottom' | 'left' | 'right' | 'width' | 'height' |
                              'start' | 'end' | 'centerX' | 'centerY' | 'baseline'
           <positiveNumber> // A positive real number parseable by `g_ascii_strtod()`
                   <number> // A real number parseable by `g_ascii_strtod()`

Note: The VFL grammar used by GTK is slightly different than the one defined by Apple, as it can use symbolic values for the constraint’s strength instead of numeric values; additionally, GTK allows adding simple arithmetic operations inside predicates.

Examples of VFL descriptions are:

  // Default spacing
  [button]-[textField]

  // Width constraint
  [button(>=50)]

  // Connection to super view
  |-50-[purpleBox]-50-|

  // Vertical layout
  V:[topField]-10-[bottomField]

  // Flush views
  [maroonView][blueView]

  // Priority
  [button(100@strong)]

  // Equal widths
  [button1(==button2)]

  // Multiple predicates
  [flexibleButton(>=70,<=100)]

  // A complete line of layout
  |-[find]-[findNext]-[findField(>=20)]-|

  // Operators
  [button1(button2 / 3 + 50)]

  // Named attributes
  [button1(==button2.height)]

Parameters

lines An array of char*
 

an array of Visual Format Language lines defining a set of constraints

 The length of the array is in the n_lines argument
 Ownership is not transferred to the callee
n_lines gsize
 

the number of lines

hspacing int
 

default horizontal spacing value, or -1 for the fallback value

vspacing int
 

default vertical spacing value, or -1 for the fallback value

views GHashTable*
 

a dictionary of [ name, target ] pairs; the name keys map to the view names in the VFL lines, while the target values map to children of the widget using a GtkConstraintLayout, or guides

 Ownership is not transferred to the callee

Return value

Returns: A list of GtkConstraint

the list of GtkConstraint instances that were added to the layout

Ownership of the container type is transferred to the caller