[gtk+/wip/matthiasc/font-variations: 17/17] Add a font variations demo



commit 9365ccc16cc6be447762aa03a829ea1e51edded7
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Aug 16 23:48:52 2017 -0400

    Add a font variations demo
    
    Expand the font features demo to show off font variations.

 demos/gtk-demo/font-features.ui | 2818 ++++++++++++++++++++-------------------
 demos/gtk-demo/font_features.c  |  331 +++++-
 2 files changed, 1751 insertions(+), 1398 deletions(-)
---
diff --git a/demos/gtk-demo/font-features.ui b/demos/gtk-demo/font-features.ui
index 0bd2645..87844a2 100644
--- a/demos/gtk-demo/font-features.ui
+++ b/demos/gtk-demo/font-features.ui
@@ -8,19 +8,19 @@
     <child type="titlebar">
       <object class="GtkHeaderBar">
         <property name="visible">1</property>
-        <property name="show_close_button">1</property>
+        <property name="show-close-button">1</property>
         <property name="title">Font Features</property>
         <child>
           <object class="GtkButton" id="reset">
             <property name="visible">1</property>
-            <property name="can_focus">1</property>
-            <property name="receives_default">1</property>
+            <property name="can-focus">1</property>
+            <property name="receives-default">1</property>
             <property name="tooltip-text">Reset</property>
             <signal name="clicked" handler="reset" swapped="no"/>
             <child>
               <object class="GtkImage">
                 <property name="visible">1</property>
-                <property name="icon_name">view-refresh-symbolic</property>
+                <property name="icon-name">view-refresh-symbolic</property>
               </object>
             </child>
           </object>
@@ -33,8 +33,8 @@
         <child>
           <object class="GtkScrolledWindow">
             <property name="visible">1</property>
-            <property name="can_focus">1</property>
-            <property name="hscrollbar_policy">never</property>
+            <property name="can-focus">1</property>
+            <property name="hscrollbar-policy">never</property>
             <child>
               <object class="GtkViewport">
                 <property name="visible">1</property>
@@ -47,16 +47,24 @@
                     <child>
                       <object class="GtkFontButton" id="font">
                         <property name="visible">1</property>
-                        <property name="can_focus">1</property>
-                        <property name="receives_default">1</property>
+                        <property name="can-focus">1</property>
+                        <property name="receives-default">1</property>
                         <property name="font">Sans 12</property>
                         <signal name="font-set" handler="font_changed" swapped="no"/>
                       </object>
                     </child>
                     <child>
+                      <object class="GtkLabel">
+                        <property name="label" translatable="yes">Script &amp; Language</property>
+                        <property name="xalign">0</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
+                      </object>
+                    </child>
+                    <child>
                       <object class="GtkComboBox" id="script_lang">
-                        <property name="visible">1</property>
-                        <property name="can_focus">1</property>
+                        <property name="can-focus">1</property>
                         <signal name="changed" handler="script_changed" swapped="no"/>
                         <child>
                           <object class="GtkCellRendererText"/>
@@ -68,1514 +76,1536 @@
                     </child>
                     <child>
                       <object class="GtkExpander">
-                        <property name="visible">1</property>
-                        <property name="can_focus">1</property>
-                        <child>
-                          <object class="GtkBox">
-                            <property name="visible">1</property>
-                            <property name="margin_start">10</property>
-                            <property name="margin_end">10</property>
-                            <property name="margin_top">10</property>
-                            <property name="orientation">vertical</property>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="kern_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="kern_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="kern">
-                                    <property name="label" translatable="yes">Enabled</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="kern_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                          </object>
-                        </child>
                         <child type="label">
                           <object class="GtkLabel">
                             <property name="visible">1</property>
-                            <property name="label" translatable="yes">Kerning</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">Font Features</property>
+                            <attributes>
+                              <attribute name="weight" value="bold"/>
+                            </attributes>
                           </object>
                         </child>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkExpander">
-                        <property name="visible">1</property>
-                        <property name="can_focus">1</property>
                         <child>
                           <object class="GtkBox">
-                            <property name="visible">1</property>
-                            <property name="margin_start">10</property>
-                            <property name="margin_end">10</property>
-                            <property name="margin_top">10</property>
                             <property name="orientation">vertical</property>
                             <child>
-                              <object class="GtkBox">
+                              <object class="GtkLabel">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="liga_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="liga_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="liga">
-                                    <property name="label" translatable="yes">Common Ligatures</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="liga_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
+                                <property name="xalign">0</property>
+                                <property name="halign">start</property>
+                                <property name="margin-top">10</property>
+                                <property name="label" translatable="yes">Kerning</property>
                               </object>
                             </child>
                             <child>
                               <object class="GtkBox">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="dlig_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="dlig_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="dlig">
-                                    <property name="label" translatable="yes">Discretionary 
Ligatures</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="dlig_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                <property name="halign">start</property>
+                                <property name="margin-start">20</property>
+                                <property name="margin-end">10</property>
+                                <property name="margin-top">10</property>
+                                <property name="margin-bottom">10</property>
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="kern_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="kern_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="kern">
+                                        <property name="label" translatable="yes">Enabled</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="kern_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkBox">
+                              <object class="GtkLabel">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="hlig_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="hlig_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="hlig">
-                                    <property name="label" translatable="yes">Historical Ligatures</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="hlig_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
+                                <property name="xalign">0</property>
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Ligatures</property>
                               </object>
                             </child>
                             <child>
                               <object class="GtkBox">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="clig_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="clig_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="clig">
-                                    <property name="label" translatable="yes">Contextual Ligatures</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="clig_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                          </object>
-                        </child>
-                        <child type="label">
-                          <object class="GtkLabel">
-                            <property name="visible">1</property>
-                            <property name="label" translatable="yes">Ligatures</property>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkExpander">
-                        <property name="visible">1</property>
-                        <property name="can_focus">1</property>
-                        <child>
-                          <object class="GtkBox">
-                            <property name="visible">1</property>
-                            <property name="margin_start">10</property>
-                            <property name="margin_end">10</property>
-                            <property name="margin_top">10</property>
-                            <property name="orientation">vertical</property>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="smcp_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="smcp_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="smcp">
-                                    <property name="label" translatable="yes">Small Caps</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="valign">baseline</property>
-                                    <property name="sensitive" bind-source="smcp_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="c2sc_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="c2sc_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="c2sc">
-                                    <property name="label" translatable="yes">Small Caps from Caps</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="c2sc_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="pcap_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="pcap_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="pcap">
-                                    <property name="label" translatable="yes">Petite Caps</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="pcap_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                <property name="halign">start</property>
+                                <property name="margin-start">20</property>
+                                <property name="margin-end">10</property>
+                                <property name="margin-top">10</property>
+                                <property name="margin-bottom">10</property>
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="liga_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="liga_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="liga">
+                                        <property name="label" translatable="yes">Common Ligatures</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="liga_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="dlig_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="dlig_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="dlig">
+                                        <property name="label" translatable="yes">Discretionary 
Ligatures</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="dlig_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="hlig_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="hlig_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="hlig">
+                                        <property name="label" translatable="yes">Historical 
Ligatures</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="hlig_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="clig_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="clig_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="clig">
+                                        <property name="label" translatable="yes">Contextual 
Ligatures</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="clig_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkBox">
+                              <object class="GtkLabel">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="c2pc_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="c2pc_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="c2pc">
-                                    <property name="label" translatable="yes">Caps to Petite Caps</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="c2pc_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
+                                <property name="xalign">0</property>
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Letter Case</property>
                               </object>
                             </child>
                             <child>
                               <object class="GtkBox">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="unic_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="unic_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="unic">
-                                    <property name="label" translatable="yes">Unicase</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="unic_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                <property name="halign">start</property>
+                                <property name="margin-start">20</property>
+                                <property name="margin-end">10</property>
+                                <property name="margin-top">10</property>
+                                <property name="margin-bottom">10</property>
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="smcp_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="smcp_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="smcp">
+                                        <property name="label" translatable="yes">Small Caps</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="valign">baseline</property>
+                                        <property name="sensitive" bind-source="smcp_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="c2sc_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="c2sc_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="c2sc">
+                                        <property name="label" translatable="yes">Small Caps from 
Caps</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="c2sc_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="pcap_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="pcap_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="pcap">
+                                        <property name="label" translatable="yes">Petite Caps</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="pcap_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="c2pc_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="c2pc_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="c2pc">
+                                        <property name="label" translatable="yes">Caps to Petite 
Caps</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="c2pc_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="unic_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="unic_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="unic">
+                                        <property name="label" translatable="yes">Unicase</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="unic_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="cpsp_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="cpsp_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="cpsp">
+                                        <property name="label" translatable="yes">Capital Spacing</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="cpsp_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="case_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="case_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="case">
+                                        <property name="label" translatable="yes">Case-sensitive 
Forms</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="case_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkBox">
+                              <object class="GtkLabel">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="cpsp_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="cpsp_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="cpsp">
-                                    <property name="label" translatable="yes">Capital Spacing</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="cpsp_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="case_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="case_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="case">
-                                    <property name="label" translatable="yes">Case-sensitive Forms</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="case_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                          </object>
-                        </child>
-                        <child type="label">
-                          <object class="GtkLabel">
-                            <property name="visible">1</property>
-                            <property name="label" translatable="yes">Letter Case</property>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkExpander">
-                        <property name="visible">1</property>
-                        <property name="can_focus">1</property>
-                        <child>
-                          <object class="GtkBox">
-                            <property name="visible">1</property>
-                            <property name="margin_start">10</property>
-                            <property name="margin_end">10</property>
-                            <property name="margin_top">10</property>
-                            <property name="orientation">vertical</property>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="numcasedefault_pres">
-                                    <property name="visible">1</property>
-                                    <property name="opacity">0</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkRadioButton" id="numcasedefault">
-                                    <property name="label" translatable="yes">Default</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="active">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="lnum_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkRadioButton" id="lnum">
-                                    <property name="label" translatable="yes">Lining</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="active">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <property name="group">numcasedefault</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="onum_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkRadioButton" id="onum">
-                                    <property name="label" translatable="yes">Old-Style</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="active">1</property>
-                                    <property name="valign">baseline</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="group">numcasedefault</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                          </object>
-                        </child>
-                        <child type="label">
-                          <object class="GtkLabel">
-                            <property name="visible">1</property>
-                            <property name="label" translatable="yes">Number Case</property>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkExpander">
-                        <property name="visible">1</property>
-                        <property name="can_focus">1</property>
-                        <child>
-                          <object class="GtkBox">
-                            <property name="visible">1</property>
-                            <property name="margin_start">10</property>
-                            <property name="margin_end">10</property>
-                            <property name="margin_top">10</property>
-                            <property name="orientation">vertical</property>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="numspacedefault_pres">
-                                    <property name="visible">1</property>
-                                    <property name="opacity">0</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkRadioButton" id="numspacedefault">
-                                    <property name="label" translatable="yes">Default</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="active">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="pnum_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkRadioButton" id="pnum">
-                                    <property name="label" translatable="yes">Proportional</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="active">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="group">numspacedefault</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="tnum_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkRadioButton" id="tnum">
-                                    <property name="label" translatable="yes">Tabular</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="active">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="group">numspacedefault</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                          </object>
-                        </child>
-                        <child type="label">
-                          <object class="GtkLabel">
-                            <property name="visible">1</property>
-                            <property name="label" translatable="yes">Number Spacing</property>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkExpander">
-                        <property name="visible">1</property>
-                        <property name="can_focus">1</property>
-                        <child>
-                          <object class="GtkBox">
-                            <property name="visible">1</property>
-                            <property name="margin_start">10</property>
-                            <property name="margin_end">10</property>
-                            <property name="margin_top">10</property>
-                            <property name="orientation">vertical</property>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="fractiondefault_pres">
-                                    <property name="visible">1</property>
-                                    <property name="opacity">0</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkRadioButton" id="fractiondefault">
-                                    <property name="label" translatable="yes">Off</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="active">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="frac_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkRadioButton" id="frac">
-                                    <property name="label" translatable="yes">Normal</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="active">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="group">fractiondefault</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="afrc_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkRadioButton" id="afrc">
-                                    <property name="label" translatable="yes">Alternate</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="active">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="group">fractiondefault</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
+                                <property name="xalign">0</property>
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Number Case</property>
                               </object>
                             </child>
-                          </object>
-                        </child>
-                        <child type="label">
-                          <object class="GtkLabel">
-                            <property name="visible">1</property>
-                            <property name="label" translatable="yes">Fractions</property>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkExpander">
-                        <property name="visible">1</property>
-                        <property name="can_focus">1</property>
-                        <child>
-                          <object class="GtkBox">
-                            <property name="visible">1</property>
-                            <property name="margin_start">10</property>
-                            <property name="margin_end">10</property>
-                            <property name="margin_top">10</property>
-                            <property name="orientation">vertical</property>
                             <child>
                               <object class="GtkBox">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="zero_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="zero_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="zero">
-                                    <property name="label" translatable="yes">Slashed Zero</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="zero_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                <property name="halign">start</property>
+                                <property name="margin-start">20</property>
+                                <property name="margin-end">10</property>
+                                <property name="margin-top">10</property>
+                                <property name="margin-bottom">10</property>
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="numcasedefault_pres">
+                                        <property name="visible">1</property>
+                                        <property name="opacity">0</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkRadioButton" id="numcasedefault">
+                                        <property name="label" translatable="yes">Default</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="active">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="lnum_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkRadioButton" id="lnum">
+                                        <property name="label" translatable="yes">Lining</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="active">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <property name="group">numcasedefault</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="onum_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkRadioButton" id="onum">
+                                        <property name="label" translatable="yes">Old-Style</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="active">1</property>
+                                        <property name="valign">baseline</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="group">numcasedefault</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkBox">
+                              <object class="GtkLabel">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="nalt_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="nalt_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="nalt">
-                                    <property name="label" translatable="yes">Alternative 
Annotations</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="nalt_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
+                                <property name="xalign">0</property>
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Number Spacing</property>
                               </object>
                             </child>
                             <child>
                               <object class="GtkBox">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="sinf_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="sinf_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="sinf">
-                                    <property name="label" translatable="yes">Scientific Inferiors</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="sinf_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                <property name="halign">start</property>
+                                <property name="margin-start">20</property>
+                                <property name="margin-end">10</property>
+                                <property name="margin-top">10</property>
+                                <property name="margin-bottom">10</property>
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="numspacedefault_pres">
+                                        <property name="visible">1</property>
+                                        <property name="opacity">0</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkRadioButton" id="numspacedefault">
+                                        <property name="label" translatable="yes">Default</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="active">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="pnum_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkRadioButton" id="pnum">
+                                        <property name="label" translatable="yes">Proportional</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="active">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="group">numspacedefault</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="tnum_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkRadioButton" id="tnum">
+                                        <property name="label" translatable="yes">Tabular</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="active">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="group">numspacedefault</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
-                          </object>
-                        </child>
-                        <child type="label">
-                          <object class="GtkLabel">
-                            <property name="visible">1</property>
-                            <property name="label" translatable="yes">Numeric Extras</property>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkExpander">
-                        <property name="visible">1</property>
-                        <property name="can_focus">1</property>
-                        <child>
-                          <object class="GtkBox">
-                            <property name="visible">1</property>
-                            <property name="margin_start">10</property>
-                            <property name="margin_end">10</property>
-                            <property name="margin_top">10</property>
-                            <property name="orientation">vertical</property>
                             <child>
-                              <object class="GtkBox">
+                              <object class="GtkLabel">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="swsh_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="swsh_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="swsh">
-                                    <property name="label" translatable="yes">Swash Glyphs</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="swsh_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
+                                <property name="xalign">0</property>
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Fractions</property>
                               </object>
                             </child>
                             <child>
                               <object class="GtkBox">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="cswh_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="cswh_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="cswh">
-                                    <property name="label" translatable="yes">Contextual Swash</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="cswh_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                <property name="halign">start</property>
+                                <property name="margin-start">20</property>
+                                <property name="margin-end">10</property>
+                                <property name="margin-top">10</property>
+                                <property name="margin-bottom">10</property>
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="fractiondefault_pres">
+                                        <property name="visible">1</property>
+                                        <property name="opacity">0</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkRadioButton" id="fractiondefault">
+                                        <property name="label" translatable="yes">Off</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="active">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="frac_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkRadioButton" id="frac">
+                                        <property name="label" translatable="yes">Normal</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="active">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="group">fractiondefault</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="afrc_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkRadioButton" id="afrc">
+                                        <property name="label" translatable="yes">Alternate</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="active">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="group">fractiondefault</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkBox">
+                              <object class="GtkLabel">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="locl_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="locl_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="locl">
-                                    <property name="label" translatable="yes">Localized Forms</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="locl_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
+                                <property name="xalign">0</property>
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Numeric Extras</property>
                               </object>
                             </child>
                             <child>
                               <object class="GtkBox">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="calt_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="calt_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="calt">
-                                    <property name="label" translatable="yes">Contextual 
Alternatives</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="calt_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                <property name="halign">start</property>
+                                <property name="margin-start">20</property>
+                                <property name="margin-end">10</property>
+                                <property name="margin-top">10</property>
+                                <property name="margin-bottom">10</property>
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="zero_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="zero_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="zero">
+                                        <property name="label" translatable="yes">Slashed Zero</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="zero_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="nalt_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="nalt_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="nalt">
+                                        <property name="label" translatable="yes">Alternative 
Annotations</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="nalt_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="sinf_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="sinf_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="sinf">
+                                        <property name="label" translatable="yes">Scientific 
Inferiors</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="sinf_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkBox">
+                              <object class="GtkLabel">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="hist_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="hist_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="hist">
-                                    <property name="label" translatable="yes">Historical 
Alternatives</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="hist_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
+                                <property name="xalign">0</property>
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Character Alternatives</property>
                               </object>
                             </child>
                             <child>
                               <object class="GtkBox">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="salt_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="salt_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="salt">
-                                    <property name="label" translatable="yes">Stylistic 
Alternatives</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="salt_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                <property name="halign">start</property>
+                                <property name="margin-start">20</property>
+                                <property name="margin-end">10</property>
+                                <property name="margin-top">10</property>
+                                <property name="margin-bottom">10</property>
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="swsh_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="swsh_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="swsh">
+                                        <property name="label" translatable="yes">Swash Glyphs</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="swsh_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="cswh_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="cswh_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="cswh">
+                                        <property name="label" translatable="yes">Contextual Swash</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="cswh_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="locl_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="locl_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="locl">
+                                        <property name="label" translatable="yes">Localized Forms</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="locl_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="calt_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="calt_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="calt">
+                                        <property name="label" translatable="yes">Contextual 
Alternatives</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="calt_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="hist_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="hist_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="hist">
+                                        <property name="label" translatable="yes">Historical 
Alternatives</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="hist_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="salt_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="salt_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="salt">
+                                        <property name="label" translatable="yes">Stylistic 
Alternatives</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="salt_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="titl_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="titl_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="titl">
+                                        <property name="label" translatable="yes">Titling 
Alternatives</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="titl_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="rand_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="rand_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="rand">
+                                        <property name="label" translatable="yes">Randomize</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="rand_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="subs_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="subs_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="subs">
+                                        <property name="label" translatable="yes">Subscript</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="subs_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="sups_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="sups_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="sups">
+                                        <property name="label" translatable="yes">Superscript</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="sups_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkBox">
+                              <object class="GtkLabel">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="titl_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="titl_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="titl">
-                                    <property name="label" translatable="yes">Titling Alternatives</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="titl_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
+                                <property name="xalign">0</property>
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Positional Alternatives</property>
                               </object>
                             </child>
                             <child>
                               <object class="GtkBox">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="rand_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="rand_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="rand">
-                                    <property name="label" translatable="yes">Randomize</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="rand_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                <property name="halign">start</property>
+                                <property name="margin-start">20</property>
+                                <property name="margin-end">10</property>
+                                <property name="margin-top">10</property>
+                                <property name="margin-bottom">10</property>
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="init_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="init_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="init">
+                                        <property name="label" translatable="yes">Initial Forms</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="init_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="medi_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="medi_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="medi">
+                                        <property name="label" translatable="yes">Medial Forms</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="medi_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="fina_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="fina_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="fina">
+                                        <property name="label" translatable="yes">Final Forms</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="fina_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="isol_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="isol_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="isol">
+                                        <property name="label" translatable="yes">Isolated Forms</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="isol_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkBox">
+                              <object class="GtkLabel">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="subs_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="subs_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="subs">
-                                    <property name="label" translatable="yes">Subscript</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="subs_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
+                                <property name="xalign">0</property>
+                                <property name="halign">start</property>
+                                <property name="label" translatable="yes">Alternative Stylistic 
Sets</property>
                               </object>
                             </child>
                             <child>
                               <object class="GtkBox">
                                 <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="sups_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="sups_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="sups">
-                                    <property name="label" translatable="yes">Superscript</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="sups_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                <property name="halign">start</property>
+                                <property name="margin-start">20</property>
+                                <property name="margin-end">10</property>
+                                <property name="margin-top">10</property>
+                                <property name="margin-bottom">10</property>
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="ss01_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="ss01_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="ss01">
+                                        <property name="label" translatable="yes">Set 1</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="ss01_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="ss02_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="ss02_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="ss02">
+                                        <property name="label" translatable="yes">Set 2</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="ss02_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="ss03_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="ss03_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="ss03">
+                                        <property name="label" translatable="yes">Set 3</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="ss03_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="ss04_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="ss04_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="ss04">
+                                        <property name="label" translatable="yes">Set 4</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="ss04_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="visible">1</property>
+                                    <child>
+                                      <object class="GtkImage" id="ss05_pres">
+                                        <property name="visible">1</property>
+                                        <property name="icon-name">object-select-symbolic</property>
+                                        <property name="icon-size">1</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="ss05_dflt">
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="ss05">
+                                        <property name="label" translatable="yes">Set 5</property>
+                                        <property name="visible">1</property>
+                                        <property name="can-focus">1</property>
+                                        <property name="draw-indicator">1</property>
+                                        <property name="valign">baseline</property>
+                                        <signal name="notify::active" handler="update_display" swapped="no"/>
+                                        <property name="sensitive" bind-source="ss05_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                      </object>
+                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
                           </object>
                         </child>
-                        <child type="label">
-                          <object class="GtkLabel">
-                            <property name="visible">1</property>
-                            <property name="label" translatable="yes">Character Alternatives</property>
-                          </object>
-                        </child>
                       </object>
                     </child>
                     <child>
                       <object class="GtkExpander">
                         <property name="visible">1</property>
-                        <property name="can_focus">1</property>
-                        <child>
-                          <object class="GtkBox">
-                            <property name="visible">1</property>
-                            <property name="margin_start">10</property>
-                            <property name="margin_end">10</property>
-                            <property name="margin_top">10</property>
-                            <property name="orientation">vertical</property>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="init_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="init_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="init">
-                                    <property name="label" translatable="yes">Initial Forms</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="init_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="medi_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="medi_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="medi">
-                                    <property name="label" translatable="yes">Medial Forms</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="medi_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="fina_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="fina_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="fina">
-                                    <property name="label" translatable="yes">Final Forms</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="fina_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="isol_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="isol_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="isol">
-                                    <property name="label" translatable="yes">Isolated Forms</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="isol_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                          </object>
-                        </child>
                         <child type="label">
-                          <object class="GtkLabel">
+                          <object class="GtkLabel" id="variations_heading">
                             <property name="visible">1</property>
-                            <property name="label" translatable="yes">Positional Alternatives</property>
+                            <property name="label" translatable="yes">Font Variations</property>
+                            <property name="xalign">0</property>
+                            <attributes>
+                              <attribute name="weight" value="bold"/>
+                            </attributes>
                           </object>
                         </child>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkExpander">
-                        <property name="visible">1</property>
-                        <property name="can_focus">1</property>
                         <child>
-                          <object class="GtkBox">
-                            <property name="visible">1</property>
-                            <property name="margin_start">10</property>
-                            <property name="margin_end">10</property>
-                            <property name="margin_top">10</property>
-                            <property name="orientation">vertical</property>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="ss01_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="ss01_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="ss01">
-                                    <property name="label" translatable="yes">Set 1</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="ss01_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="ss02_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="ss02_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="ss02">
-                                    <property name="label" translatable="yes">Set 2</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="ss02_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="ss03_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="ss03_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="ss03">
-                                    <property name="label" translatable="yes">Set 3</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="ss03_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="ss04_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="ss04_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="ss04">
-                                    <property name="label" translatable="yes">Set 4</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="ss04_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkBox">
-                                <property name="visible">1</property>
-                                <child>
-                                  <object class="GtkImage" id="ss05_pres">
-                                    <property name="visible">1</property>
-                                    <property name="icon-name">object-select-symbolic</property>
-                                    <property name="icon-size">1</property>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="ss05_dflt">
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="ss05">
-                                    <property name="label" translatable="yes">Set 5</property>
-                                    <property name="visible">1</property>
-                                    <property name="can_focus">1</property>
-                                    <property name="draw_indicator">1</property>
-                                    <property name="valign">baseline</property>
-                                    <signal name="notify::active" handler="update_display" swapped="no"/>
-                                    <property name="sensitive" bind-source="ss05_dflt" 
bind-property="active" bind-flags="sync-create|bidirectional"/>
-                                  </object>
-                                </child>
-                              </object>
-                            </child>
-                          </object>
-                        </child>
-                        <child type="label">
-                          <object class="GtkLabel">
+                          <object class="GtkGrid" id="variations_grid">
                             <property name="visible">1</property>
-                            <property name="label" translatable="yes">Alternative Stylistic Sets</property>
+                            <property name="column-spacing">6</property>
+                            <property name="row-spacing">6</property>
                           </object>
                         </child>
                       </object>
@@ -1596,10 +1626,10 @@
             <child>
               <object class="GtkStack" id="stack">
                 <property name="visible">1</property>
-                <property name="margin_start">20</property>
-                <property name="margin_end">20</property>
-                <property name="margin_top">20</property>
-                <property name="margin_bottom">20</property>
+                <property name="margin-start">20</property>
+                <property name="margin-end">20</property>
+                <property name="margin-top">20</property>
+                <property name="margin-bottom">20</property>
                 <child>
                   <object class="GtkLabel" id="label">
                     <property name="visible">1</property>
@@ -1635,9 +1665,9 @@
             <child>
               <object class="GtkLabel" id="settings">
                 <property name="visible">1</property>
-                <property name="margin_start">20</property>
-                <property name="margin_end">20</property>
-                <property name="margin_bottom">20</property>
+                <property name="margin-start">20</property>
+                <property name="margin-end">20</property>
+                <property name="margin-bottom">20</property>
                 <property name="xalign">0</property>
                 <property name="valign">end</property>
                 <property name="width-chars">50</property>
diff --git a/demos/gtk-demo/font_features.c b/demos/gtk-demo/font_features.c
index 761bf8f..f609786 100644
--- a/demos/gtk-demo/font_features.c
+++ b/demos/gtk-demo/font_features.c
@@ -6,6 +6,9 @@
  *
  * It can also be used to explore available features in OpenType fonts
  * and their effect.
+ *
+ * If the selected font supports OpenType font variations, then the
+ * axes are also offered for customization.
  */
 
 #include <gtk/gtk.h>
@@ -13,6 +16,8 @@
 #include <hb.h>
 #include <hb-ot.h>
 #include <hb-ft.h>
+#include <freetype/ftmm.h>
+#include <freetype/ftsnames.h>
 
 static GtkWidget *label;
 static GtkWidget *settings;
@@ -24,6 +29,9 @@ static GtkWidget *numspacedefault;
 static GtkWidget *fractiondefault;
 static GtkWidget *stack;
 static GtkWidget *entry;
+static GtkWidget *variations_heading;
+static GtkWidget *variations_grid;
+static GtkWidget *instance_combo;
 
 #define num_features 40
 
@@ -36,6 +44,8 @@ static const char *feature_names[num_features] = {
   "sups", "init", "medi", "fina", "isol", "ss01", "ss02", "ss03", "ss04", "ss05"
 };
 
+static void add_font_variations (GString *s);
+
 static void
 update_display (void)
 {
@@ -52,7 +62,10 @@ update_display (void)
 
   text = gtk_entry_get_text (GTK_ENTRY (entry));
 
-  font_desc = gtk_font_chooser_get_font (GTK_FONT_CHOOSER (font));
+  s = g_string_new ("");
+  g_string_append (s , gtk_font_chooser_get_font (GTK_FONT_CHOOSER (font)));
+  add_font_variations (s);
+  font_desc = g_string_free (s, FALSE);
 
   s = g_string_new ("");
 
@@ -122,13 +135,11 @@ get_pango_font (void)
 {
   PangoFontDescription *desc;
   PangoContext *context;
-  PangoFontMap *map;
 
   desc = gtk_font_chooser_get_font_desc (GTK_FONT_CHOOSER (font));
   context = gtk_widget_get_pango_context (font);
-  map = pango_context_get_font_map (context);
 
-  return pango_font_map_load_font (map, context, desc);
+  return pango_context_load_font (context, desc);
 }
 
 static struct { const char *name; hb_script_t script; } script_names[] = {
@@ -404,10 +415,310 @@ update_features (void)
   g_object_unref (pango_font);
 }
 
+#define FixedToFloat(f) (((float)(f))/65536.0)
+
+static void
+adjustment_changed (GtkAdjustment *adjustment,
+                    GtkEntry      *entry)
+{
+  char *str;
+
+  str = g_strdup_printf ("%g", gtk_adjustment_get_value (adjustment));
+  gtk_entry_set_text (GTK_ENTRY (entry), str);
+  g_free (str);
+
+  update_display ();
+}
+
+static void
+entry_activated (GtkEntry *entry,
+                 GtkAdjustment *adjustment)
+{
+  gdouble value;
+  gchar *err = NULL;
+
+  value = g_strtod (gtk_entry_get_text (entry), &err);
+  if (err != NULL)
+    gtk_adjustment_set_value (adjustment, value);
+}
+
+static void unset_instance (GtkAdjustment *adjustment);
+
+typedef struct {
+  guint32 tag;
+  GtkAdjustment *adjustment;
+} Axis;
+
+static GHashTable *axes;
+
+static void
+add_font_variations (GString *s)
+{
+  GHashTableIter iter;
+  Axis *axis;
+  char *sep = " @";
+
+  g_hash_table_iter_init (&iter, axes);
+  while (g_hash_table_iter_next (&iter, (gpointer *)NULL, (gpointer *)&axis))
+    {
+      char tag[5];
+      double value;
+
+      hb_tag_to_string (axis->tag, tag);
+      tag[4] = '\0';
+      value = gtk_adjustment_get_value (axis->adjustment);
+
+      g_string_append_printf (s, "%s%s=%g", sep, tag, value);
+      sep = ",";
+    }
+}
+
+static guint
+axes_hash (gconstpointer v)
+{
+  const Axis *p = v;
+
+  return p->tag;
+}
+
+static gboolean
+axes_equal (gconstpointer v1, gconstpointer v2)
+{
+  const Axis *p1 = v1;
+  const Axis *p2 = v2;
+
+  return p1->tag == p2->tag;
+}
+
+static void
+add_axis (FT_Var_Axis *ax, int i)
+{
+  GtkWidget *axis_label;
+  GtkWidget *axis_entry;
+  GtkWidget *axis_scale;
+  GtkAdjustment *adjustment;
+  Axis *axis;
+
+  axis_label = gtk_label_new (ax->name);
+  gtk_widget_set_halign (axis_label, GTK_ALIGN_START);
+  gtk_widget_set_valign (axis_label, GTK_ALIGN_BASELINE);
+  gtk_grid_attach (GTK_GRID (variations_grid), axis_label, 0, i, 1, 1);
+  adjustment = gtk_adjustment_new ((double)FixedToFloat(ax->def),
+                                   (double)FixedToFloat(ax->minimum),
+                                   (double)FixedToFloat(ax->maximum),
+                                   1.0, 10.0, 0.0);
+  axis_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment);
+  gtk_scale_add_mark (GTK_SCALE (axis_scale), (double)FixedToFloat(ax->def), GTK_POS_TOP, NULL);
+  gtk_widget_set_valign (axis_scale, GTK_ALIGN_BASELINE);
+  gtk_widget_set_hexpand (axis_scale, TRUE);
+  gtk_widget_set_size_request (axis_scale, 100, -1);
+  gtk_scale_set_draw_value (GTK_SCALE (axis_scale), FALSE);
+  gtk_grid_attach (GTK_GRID (variations_grid), axis_scale, 1, i, 1, 1);
+  axis_entry = gtk_entry_new ();
+  gtk_widget_set_valign (axis_entry, GTK_ALIGN_BASELINE);
+  gtk_entry_set_width_chars (GTK_ENTRY (axis_entry), 4);
+  gtk_grid_attach (GTK_GRID (variations_grid), axis_entry, 2, i, 1, 1);
+
+  axis = g_new (Axis, 1);
+  axis->tag = ax->tag;
+  axis->adjustment = adjustment;
+  g_hash_table_add (axes, axis);
+
+  adjustment_changed (adjustment, GTK_ENTRY (axis_entry));
+
+  g_signal_connect (adjustment, "value-changed", G_CALLBACK (adjustment_changed), axis_entry);
+  g_signal_connect (adjustment, "value-changed", G_CALLBACK (unset_instance), NULL);
+  g_signal_connect (axis_entry, "activate", G_CALLBACK (entry_activated), adjustment);
+}
+
+typedef struct {
+  char *name;
+  int n_axes;
+  guint32 *axes;
+  float   *coords;
+} Instance;
+
+static guint
+instance_hash (gconstpointer v)
+{
+  const Instance *p = v;
+
+  return g_str_hash (p->name);
+}
+
+static gboolean
+instance_equal (gconstpointer v1, gconstpointer v2)
+{
+  const Instance *p1 = v1;
+  const Instance *p2 = v2;
+
+  return g_str_equal (p1->name, p2->name);
+}
+
+static void
+free_instance (gpointer data)
+{
+  Instance *instance = data;
+
+  g_free (instance->name);
+  g_free (instance->axes);
+  g_free (instance->coords);
+  g_free (instance);
+}
+
+static GHashTable *instances;
+
+static void
+add_instance (FT_Face             ft_face,
+              FT_MM_Var          *ft_mm_var,
+              FT_Var_Named_Style *ns,
+              GtkWidget          *combo)
+{
+  FT_SfntName ft_name;
+  Instance *instance;
+  int i;
+
+  instance = g_new0 (Instance, 1);
+
+  if (FT_Get_Sfnt_Name (ft_face, ns->strid, &ft_name) == 0)
+    instance->name = g_strndup ((char *)ft_name.string, ft_name.string_len);
+  else
+    instance->name = g_strdup_printf ("%u", ns->strid);
+
+  g_hash_table_add (instances, instance);
+  gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), instance->name);
+
+  instance->n_axes = ft_mm_var->num_axis;
+  instance->axes = g_new (guint32, ft_mm_var->num_axis);
+  instance->coords = g_new (float, ft_mm_var->num_axis);
+
+  for (i = 0; i < ft_mm_var->num_axis; i++)
+    {
+      instance->axes[i] = ft_mm_var->axis[i].tag;
+      instance->coords[i] = FixedToFloat(ns->coords[i]);
+    }
+}
+
+static void
+unset_instance (GtkAdjustment *adjustment)
+{
+  if (instance_combo)
+    gtk_combo_box_set_active (GTK_COMBO_BOX (instance_combo), 0);
+}
+
+static void
+instance_changed (GtkComboBox *combo)
+{
+  char *text;
+  Instance *instance;
+  Instance ikey;
+  int i;
+
+  text = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (combo));
+  if (text[0] == '\0')
+    goto out;
+
+  ikey.name = text;
+  instance = g_hash_table_lookup (instances, &ikey);
+  if (!instance)
+    {
+      g_print ("did not find instance %s\n", text);
+      goto out;
+    }
+
+  for (i = 0; i < instance->n_axes; i++)
+    {
+      Axis *axis;
+      Axis akey;
+      guint32 tag;
+      gdouble value;
+
+      tag = instance->axes[i];
+      value = instance->coords[i];
+
+      akey.tag = tag;
+      axis = g_hash_table_lookup (axes, &akey);
+      if (axis)
+        {
+          g_signal_handlers_block_by_func (axis->adjustment, unset_instance, NULL);
+          gtk_adjustment_set_value (axis->adjustment, value);
+          g_signal_handlers_unblock_by_func (axis->adjustment, unset_instance, NULL);
+        }
+    }
+
+out:
+  g_free (text);
+}
+
+static void
+update_font_variations (void)
+{
+  GtkWidget *child, *next;
+  PangoFont *pango_font;
+  FT_Face ft_face;
+  FT_MM_Var *ft_mm_var;
+  FT_Error ret;
+
+  child = gtk_widget_get_first_child (variations_grid);
+  while (child != NULL)
+    {
+      next = gtk_widget_get_next_sibling (child);
+      gtk_widget_destroy (child);
+      child = next;
+    }
+
+  instance_combo = NULL;
+
+  g_hash_table_remove_all (axes);
+  g_hash_table_remove_all (instances);
+
+  pango_font = get_pango_font ();
+  ft_face = pango_fc_font_lock_face (PANGO_FC_FONT (pango_font)),
+
+  ret = FT_Get_MM_Var (ft_face, &ft_mm_var);
+  if (ret == 0)
+    {
+      unsigned int i;
+
+      if (ft_mm_var->num_namedstyles > 0)
+        {
+           GtkWidget *label;
+           GtkWidget *combo;
+
+           label = gtk_label_new ("Instance");
+           gtk_label_set_xalign (GTK_LABEL (label), 0);
+           gtk_widget_set_halign (label, GTK_ALIGN_START);
+           gtk_widget_set_valign (label, GTK_ALIGN_BASELINE);
+           gtk_grid_attach (GTK_GRID (variations_grid), label, 0, -1, 2, 1);
+
+           combo = gtk_combo_box_text_new ();
+           gtk_widget_set_valign (combo, GTK_ALIGN_BASELINE);
+           g_signal_connect (combo, "changed", G_CALLBACK (instance_changed), NULL);
+           gtk_grid_attach (GTK_GRID (variations_grid), combo, 1, -1, 2, 1);
+
+           gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), "");
+
+           for (i = 0; i < ft_mm_var->num_namedstyles; i++)
+             add_instance (ft_face, ft_mm_var, &ft_mm_var->namedstyle[i], combo);
+
+           instance_combo = combo;
+        }
+
+      for (i = 0; i < ft_mm_var->num_axis; i++)
+        add_axis (&ft_mm_var->axis[i], i);
+
+      free (ft_mm_var);
+    }
+
+  pango_fc_font_unlock_face (PANGO_FC_FONT (pango_font));
+  g_object_unref (pango_font);
+}
+
 static void
 font_changed (void)
 {
   update_script_combo ();
+  update_font_variations ();
 }
 
 static void
@@ -509,6 +820,18 @@ do_font_features (GtkWidget *do_widget)
           g_free (iname);
         }
 
+      variations_heading = GTK_WIDGET (gtk_builder_get_object (builder, "variations_heading"));
+      variations_grid = GTK_WIDGET (gtk_builder_get_object (builder, "variations_grid"));
+      if (instances == NULL)
+        instances = g_hash_table_new_full (instance_hash, instance_equal, NULL, free_instance);
+      else
+        g_hash_table_remove_all (instances);
+
+      if (axes == NULL)
+        axes = g_hash_table_new_full (axes_hash, axes_equal, NULL, g_free);
+      else
+        g_hash_table_remove_all (axes);
+
       font_changed ();
 
       g_signal_connect (window, "destroy",


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]