{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.ImxtGVsv/b1/ivtools_2.0.11d.a1-3_armhf.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.ImxtGVsv/b2/ivtools_2.0.11d.a1-3_armhf.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,8 +1,8 @@\n \n 300a1cfadea372ccf3f1a1f7441acf68 352600 debug optional ivtools-bin-dbgsym_2.0.11d.a1-3_armhf.deb\n 6bbe0183221e53d7cdf21828834abb89 180460 graphics optional ivtools-bin_2.0.11d.a1-3_armhf.deb\n- 26287a201abb77972b1e4cd67bf58898 2214860 devel optional ivtools-dev_2.0.11d.a1-3_armhf.deb\n+ 5044ae551bf69ac6d15b5631bb1f415a 2214880 devel optional ivtools-dev_2.0.11d.a1-3_armhf.deb\n 24f332ff57fdd5cb30cb98e3900a191c 5080752 debug optional libiv-unidraw2t64-dbgsym_2.0.11d.a1-3_armhf.deb\n 4574ff16222a32b1c70539985c494961 1117928 libs optional libiv-unidraw2t64_2.0.11d.a1-3_armhf.deb\n 789649becc2986b0b0262927ee9b386d 1806932 debug optional libiv2t64-dbgsym_2.0.11d.a1-3_armhf.deb\n 6117e7cafd6cee26ddb61584ae5092f7 386860 libs optional libiv2t64_2.0.11d.a1-3_armhf.deb\n"}, {"source1": "ivtools-dev_2.0.11d.a1-3_armhf.deb", "source2": "ivtools-dev_2.0.11d.a1-3_armhf.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2024-03-04 00:20:46.000000 debian-binary\n--rw-r--r-- 0 0 0 18164 2024-03-04 00:20:46.000000 control.tar.xz\n--rw-r--r-- 0 0 0 2196504 2024-03-04 00:20:46.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 18160 2024-03-04 00:20:46.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 2196528 2024-03-04 00:20:46.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -620,15 +620,15 @@\n drwxr-xr-x 0 root (0) root (0) 0 2024-03-04 00:20:46.000000 ./usr/share/\n drwxr-xr-x 0 root (0) root (0) 0 2024-03-04 00:20:46.000000 ./usr/share/doc/\n drwxr-xr-x 0 root (0) root (0) 0 2024-03-04 00:20:46.000000 ./usr/share/doc/ivtools-dev/\n -rw-r--r-- 0 root (0) root (0) 1109 2024-03-04 00:20:46.000000 ./usr/share/doc/ivtools-dev/changelog.Debian.gz\n -rw-r--r-- 0 root (0) root (0) 14574 2024-02-04 09:45:18.000000 ./usr/share/doc/ivtools-dev/copyright\n drwxr-xr-x 0 root (0) root (0) 0 2024-03-04 00:20:46.000000 ./usr/share/doc/ivtools-dev/examples/\n -rw-r--r-- 0 root (0) root (0) 481280 2024-03-04 00:20:46.000000 ./usr/share/doc/ivtools-dev/examples/glyphs.tar\n--rw-r--r-- 0 root (0) root (0) 114795 2024-03-04 00:20:46.000000 ./usr/share/doc/ivtools-dev/refman.pdf.gz\n+-rw-r--r-- 0 root (0) root (0) 114797 2024-03-04 00:20:46.000000 ./usr/share/doc/ivtools-dev/refman.pdf.gz\n drwxr-xr-x 0 root (0) root (0) 0 2024-03-04 00:20:46.000000 ./usr/share/doc-base/\n -rw-r--r-- 0 root (0) root (0) 1301 2024-02-04 09:45:18.000000 ./usr/share/doc-base/ivtools-dev.ivtools-reference-manual\n drwxr-xr-x 0 root (0) root (0) 0 2024-03-04 00:20:46.000000 ./usr/share/ivtools/\n -rw-r--r-- 0 root (0) root (0) 5268 2024-03-04 00:20:46.000000 ./usr/share/ivtools/comterp.err\n drwxr-xr-x 0 root (0) root (0) 0 2024-03-04 00:20:46.000000 ./usr/share/man/\n drwxr-xr-x 0 root (0) root (0) 0 2024-03-04 00:20:46.000000 ./usr/share/man/man3/\n -rw-r--r-- 0 root (0) root (0) 1263 2024-03-04 00:20:46.000000 ./usr/share/man/man3/Adjuster.3I.gz\n"}, {"source1": "./usr/share/doc/ivtools-dev/refman.pdf.gz", "source2": "./usr/share/doc/ivtools-dev/refman.pdf.gz", "unified_diff": null, "details": [{"source1": "refman.pdf", "source2": "refman.pdf", "unified_diff": null, "details": [{"source1": "dumppdf -at {}", "source2": "dumppdf -at {}", "unified_diff": "@@ -147,20 +147,20 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 258.054 239.46 Tm -1.49965 Tw (Copyright \(c\) 1992)Tj -106.812 -19.4402 Td -1.4996 Tw (The Board of Trustees of the Leland Stanford Junior University)Tj -45.1918 -74.8801 Td -0.510186 Tw (Permission to copy this manual or any portion thereof as necessary for use of)Tj 13.7398 TL -0.633487 Tw (this software is hereby granted provided this copyright notice and statement of)' -1.49918 Tw (permission are included.)' /R35743448 24 Tf 38.4 451.2 Td -3.999 Tw (InterViews Reference Manual)Tj 93.9641 -27.3602 Td -2.99951 Tw (Version 3.1)Tj /R36187064 14 Tf 2.98281 -41.2801 Td -1.74946 Tw (December 14, 1992)Tj /R35493912 18 Tf -1.73203 -41.2801 Td -2.24967 Tw (Mark A. Linton)Tj 3.99609 -20.0398 Td -2.24962 Tw (Paul R. Calder)Tj -12.4828 -20.0398 Td -2.24953 Tw (John A. Interrante)Tj 19.9891 -20.0402 Td -2.24939 Tw (Steven Tang)Tj -19.5121 -20.0398 Td -2.24975 Tw (John M. Vlissides)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 258.054 239.46 Tm -1.49965 Tw (Copyright \(c\) 1992)Tj -106.812 -19.4402 Td -1.4996 Tw (The Board of Trustees of the Leland Stanford Junior University)Tj -45.1918 -74.8801 Td -0.510186 Tw (Permission to copy this manual or any portion thereof as necessary for use of)Tj 13.7398 TL -0.633487 Tw (this software is hereby granted provided this copyright notice and statement of)' -1.49918 Tw (permission are included.)' /R18609880 24 Tf 38.4 451.2 Td -3.999 Tw (InterViews Reference Manual)Tj 93.9641 -27.3602 Td -2.99951 Tw (Version 3.1)Tj /R19053496 14 Tf 2.98281 -41.2801 Td -1.74946 Tw (December 14, 1992)Tj /R18360344 18 Tf -1.73203 -41.2801 Td -2.24967 Tw (Mark A. Linton)Tj 3.99609 -20.0398 Td -2.24962 Tw (Paul R. Calder)Tj -12.4828 -20.0398 Td -2.24953 Tw (John A. Interrante)Tj 19.9891 -20.0402 Td -2.24939 Tw (Steven Tang)Tj -19.5121 -20.0398 Td -2.24975 Tw (John M. Vlissides)Tj ET Q Q \n \n \n \n \n-571\n+570\n \n \n \n \n BaseFont\n Times-Roman\n ToUnicode\n@@ -196,19 +196,19 @@\n Subtype\n Type1\n \n \n \n \n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -245,15 +245,15 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 24 Tf 1 0 0 1 233.742 680.22 Tm -2.99922 Tw (Release Notes)Tj /R35493912 12 Tf -127.692 -28.3199 Td 1.51897 Tw (The InterViews 3.1 distribution contains a README file and a single)Tj 13.7398 TL -1.34973 Tw (subdirectory, ª)' 0.000155687 Tc /R35493912 10 Tf 71.6148 0 Td (iv)Tj 0 Tc /R35493912 12 Tf 7.78008 0 Td -1.35013 Tw (º, that contains the source and documentation. InterViews can be)Tj -79.3949 -13.7402 Td -1.16035 Tw (compiled with any C++ compiler that accepts the 2.0, 2.1, or 3.0 revisions of the)Tj -1.09576 Tw (language, and can run on X11R4 or X11R5. You can specify your compiler and)' -1.49928 Tw (other site definitions in the file ªiv/src/config/InterViews/local.de)' 0.000311375 Tc /R36761712 10 Tf 314.293 0 Td (f)Tj 0.000134468 Tc /R35493912 12 Tf 2.78008 0 Td (º.)Tj 0 Tc -306.405 -14.6398 Td -0.200439 Tw (The README)Tj /R36761712 12 Tf 74.9211 0 Td -0.223434 Tw ( )Tj /R35493912 12 Tf 6.225 0 Td -0.200892 Tw (file describes how to build InterViews. Under ªiv/srcº, the)Tj -91.8141 -13.7398 Td -1.12191 Tw (directory ªinclude)Tj /R36761712 10 Tf 87.7301 0 Td -1.04053 Tw (º )Tj /R35493912 12 Tf 6.80781 0 Td -1.12263 Tw (contains include directories, ªbinº contains applications \(each)Tj -94.5379 -13.7402 Td -0.693999 Tw (in its own subdirectory\), ªlibº contains libraries \(each in its own subdirectory\),)Tj -0.932423 Tw (ªconfigº contains configuration-specific files, ªmanº contains PostScript or troff)' -1.49956 Tw (for the manual, and ªpapersº contains PostScript for user tutorials.)' 21.3359 -14.6398 Td 0.618942 Tw (The work at Stanford has been supported by Fujitsu America, Digital)Tj -21.3359 -13.7398 Td -0.88622 Tw (Equipment Corporation, and NASA CASIS project under Contract NAGW 419,)Tj 0.0291089 Tw (and a grant from the Charles Lee Powell Foundation. Special thanks to Ira)' -1.13248 Tw (Machefsky of Digital and Charles Brauer of Fujitsu America for their assistance.)' 0.0042253 Tw (We are also grateful to the ever-growing InterViews user community for its)' -1.49915 Tw (encouragement and support.)' 10.668 -14.6398 Td -1.49952 Tw (Please address questions or comments about InterViews to)Tj 21.3359 -19.4402 Td -1.49946 Tw (Mark Linton)Tj 0.00004687 Tc 14.6398 TL (linton@sgi.com)' ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 24 Tf 1 0 0 1 233.742 680.22 Tm -2.99922 Tw (Release Notes)Tj /R18360344 12 Tf -127.692 -28.3199 Td 1.51897 Tw (The InterViews 3.1 distribution contains a README file and a single)Tj 13.7398 TL -1.34973 Tw (subdirectory, ª)' 0.000155687 Tc /R18360344 10 Tf 71.6148 0 Td (iv)Tj 0 Tc /R18360344 12 Tf 7.78008 0 Td -1.35013 Tw (º, that contains the source and documentation. InterViews can be)Tj -79.3949 -13.7402 Td -1.16035 Tw (compiled with any C++ compiler that accepts the 2.0, 2.1, or 3.0 revisions of the)Tj -1.09576 Tw (language, and can run on X11R4 or X11R5. You can specify your compiler and)' -1.49928 Tw (other site definitions in the file ªiv/src/config/InterViews/local.de)' 0.000311375 Tc /R19628144 10 Tf 314.293 0 Td (f)Tj 0.000134468 Tc /R18360344 12 Tf 2.78008 0 Td (º.)Tj 0 Tc -306.405 -14.6398 Td -0.200439 Tw (The README)Tj /R19628144 12 Tf 74.9211 0 Td -0.223434 Tw ( )Tj /R18360344 12 Tf 6.225 0 Td -0.200892 Tw (file describes how to build InterViews. Under ªiv/srcº, the)Tj -91.8141 -13.7398 Td -1.12191 Tw (directory ªinclude)Tj /R19628144 10 Tf 87.7301 0 Td -1.04053 Tw (º )Tj /R18360344 12 Tf 6.80781 0 Td -1.12263 Tw (contains include directories, ªbinº contains applications \(each)Tj -94.5379 -13.7402 Td -0.693999 Tw (in its own subdirectory\), ªlibº contains libraries \(each in its own subdirectory\),)Tj -0.932423 Tw (ªconfigº contains configuration-specific files, ªmanº contains PostScript or troff)' -1.49956 Tw (for the manual, and ªpapersº contains PostScript for user tutorials.)' 21.3359 -14.6398 Td 0.618942 Tw (The work at Stanford has been supported by Fujitsu America, Digital)Tj -21.3359 -13.7398 Td -0.88622 Tw (Equipment Corporation, and NASA CASIS project under Contract NAGW 419,)Tj 0.0291089 Tw (and a grant from the Charles Lee Powell Foundation. Special thanks to Ira)' -1.13248 Tw (Machefsky of Digital and Charles Brauer of Fujitsu America for their assistance.)' 0.0042253 Tw (We are also grateful to the ever-growing InterViews user community for its)' -1.49915 Tw (encouragement and support.)' 10.668 -14.6398 Td -1.49952 Tw (Please address questions or comments about InterViews to)Tj 21.3359 -19.4402 Td -1.49946 Tw (Mark Linton)Tj 0.00004687 Tc 14.6398 TL (linton@sgi.com)' ET Q Q \n \n \n \n \n 1203\n \n \n@@ -268,19 +268,19 @@\n Subtype\n Type1\n \n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -317,29 +317,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 24 Tf 1 0 0 1 142.746 680.22 Tm -2.99952 Tw (Differences between 3.0 and 3.1)Tj /R35493912 12 Tf -36.6957 -28.3199 Td 0.511945 Tw (InterViews 3.1 contains several improvements over 3.0.1. WidgetKit is an)Tj 13.7398 TL -1.0113 Tw (improved implementation of the Kit class that was in 3.0.1. DialogKit is a class)' -1.07084 Tw (that provides a file chooser dialog using WidgetKit compoments. LayoutKit is a)' -1.45112 Tw (class that provides convenient operations for creating layout objects such as boxes)' -0.254421 Tw (and glue, replacing the many independent classes such as LRBox and VGlue)' -0.271484 Tw (in 3.0.1. Chapter 9 of the reference manual describes WidgetKit, Chapter 10)' -1.49942 Tw (describes DialogKit, and Chapter 11 describes LayoutKit.)' 10.668 -14.6402 Td -0.801678 Tw (Glyph and other subclasses of Resource are no longer derived as virtual base)Tj -10.668 -13.7398 Td -1.20011 Tw (classes. This change was made primarily for efficiency and convenience because)Tj -0.823242 Tw (many C++ compilers do not generate particularly efficient code for virtual base)' -1.49963 Tw (classes \(especially in space\), and some compilers have bugs in this area.)' 10.668 -14.6398 Td -1.30324 Tw (The Glyph protocol has been extended with an )Tj 0.00002035 Tc /R36187064 12 Tf 230.436 0 Td (undraw)Tj 0 Tc /R35493912 12 Tf 36.6723 0 Td -1.3032 Tw ( operation that notifies a)Tj -277.776 -13.7402 Td -1.44681 Tw (glyph that it no longer has an allocation on the canvas. This operation is primarily)Tj -1.49962 Tw (for objects that cache information or perform computation when they are visible.)' 10.668 -14.6402 Td 0.0410784 Tw (A new monoglyph subclass, called InputHandler, replaces the old Listener)Tj -10.668 -13.7398 Td -0.259036 Tw (class. InputHandler is much simpler to use than the previous combination of)Tj 0.285977 Tw (Listener and PointerHandler, as well as providing limited support for focus)' 0.000113747 Tc (management.)' 0 Tc 10.668 -14.6398 Td -1.26672 Tw (The Window class now has a style object as one of its attributes. The style can)Tj -10.668 -13.7402 Td -1.27493 Tw (be set to defined attributes such as name and geometry, as well as a ªvisualº type)Tj -0.910106 Tw (for the window. On systems that support overlay planes, the attribute ªoverlayº)' -1.49972 Tw (can be used to request the window be allocated in the window planes.)' 10.668 -14.6402 Td -1.31665 Tw (InterViews 3.1 also includes a new faster implementation of the Style class and)Tj -10.668 -13.7398 Td -0.188867 Tw (a copy of the latest version of Sam Leffler's TIFF library \(v3.0\) for reading)Tj -0.824875 Tw (images. The old 2.6 structured graphics library is no longer included, though it)' -1.49965 Tw (probably would still work with this distribution.)' 10.668 -14.6398 Td -1.19017 Tw (The documentation has been reorganized to reflect some of the 3.1 changes, as)Tj -10.668 -13.7402 Td -1.46451 Tw (well as provide a structure for future releases. In addition to the reference manual,)Tj -1.49955 Tw (a new collection of example programs is provided under iv/src/examples.)' 0.00009982 Tc 379.44 -184.92 Td (0-2)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 24 Tf 1 0 0 1 142.746 680.22 Tm -2.99952 Tw (Differences between 3.0 and 3.1)Tj /R18360344 12 Tf -36.6957 -28.3199 Td 0.511945 Tw (InterViews 3.1 contains several improvements over 3.0.1. WidgetKit is an)Tj 13.7398 TL -1.0113 Tw (improved implementation of the Kit class that was in 3.0.1. DialogKit is a class)' -1.07084 Tw (that provides a file chooser dialog using WidgetKit compoments. LayoutKit is a)' -1.45112 Tw (class that provides convenient operations for creating layout objects such as boxes)' -0.254421 Tw (and glue, replacing the many independent classes such as LRBox and VGlue)' -0.271484 Tw (in 3.0.1. Chapter 9 of the reference manual describes WidgetKit, Chapter 10)' -1.49942 Tw (describes DialogKit, and Chapter 11 describes LayoutKit.)' 10.668 -14.6402 Td -0.801678 Tw (Glyph and other subclasses of Resource are no longer derived as virtual base)Tj -10.668 -13.7398 Td -1.20011 Tw (classes. This change was made primarily for efficiency and convenience because)Tj -0.823242 Tw (many C++ compilers do not generate particularly efficient code for virtual base)' -1.49963 Tw (classes \(especially in space\), and some compilers have bugs in this area.)' 10.668 -14.6398 Td -1.30324 Tw (The Glyph protocol has been extended with an )Tj 0.00002035 Tc /R19053496 12 Tf 230.436 0 Td (undraw)Tj 0 Tc /R18360344 12 Tf 36.6723 0 Td -1.3032 Tw ( operation that notifies a)Tj -277.776 -13.7402 Td -1.44681 Tw (glyph that it no longer has an allocation on the canvas. This operation is primarily)Tj -1.49962 Tw (for objects that cache information or perform computation when they are visible.)' 10.668 -14.6402 Td 0.0410784 Tw (A new monoglyph subclass, called InputHandler, replaces the old Listener)Tj -10.668 -13.7398 Td -0.259036 Tw (class. InputHandler is much simpler to use than the previous combination of)Tj 0.285977 Tw (Listener and PointerHandler, as well as providing limited support for focus)' 0.000113747 Tc (management.)' 0 Tc 10.668 -14.6398 Td -1.26672 Tw (The Window class now has a style object as one of its attributes. The style can)Tj -10.668 -13.7402 Td -1.27493 Tw (be set to defined attributes such as name and geometry, as well as a ªvisualº type)Tj -0.910106 Tw (for the window. On systems that support overlay planes, the attribute ªoverlayº)' -1.49972 Tw (can be used to request the window be allocated in the window planes.)' 10.668 -14.6402 Td -1.31665 Tw (InterViews 3.1 also includes a new faster implementation of the Style class and)Tj -10.668 -13.7398 Td -0.188867 Tw (a copy of the latest version of Sam Leffler's TIFF library \(v3.0\) for reading)Tj -0.824875 Tw (images. The old 2.6 structured graphics library is no longer included, though it)' -1.49965 Tw (probably would still work with this distribution.)' 10.668 -14.6398 Td -1.19017 Tw (The documentation has been reorganized to reflect some of the 3.1 changes, as)Tj -10.668 -13.7402 Td -1.46451 Tw (well as provide a structure for future releases. In addition to the reference manual,)Tj -1.49955 Tw (a new collection of example programs is provided under iv/src/examples.)' 0.00009982 Tc 379.44 -184.92 Td (0-2)Tj ET Q Q \n \n \n \n \n-1564\n+1563\n \n \n \n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -376,29 +376,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 1)Tj 0.000155131 Tc 36.9602 TL (Introduction)' 0 Tc /R35493912 12 Tf 28.3199 TL -0.885286 Tw (InterViews is a software system for window-based applications. Like most user)' 13.7402 TL -1.36749 Tw (environments, InterViews is )' 0.000108846 Tc /R36187064 12 Tf 139.44 0 Td (object-oriented)Tj 0 Tc /R35493912 12 Tf 73.3203 0 Td -1.36779 Tw ( in that components such as windows,)Tj -212.76 -13.7398 Td -1.07623 Tw (buttons, menus, and documents are active elements with inherited behavior. The)Tj -0.236825 Tw (name ªInterViewsº comes from the idea of a user interface object presenting)' -0.0377665 Tw (an )' 0.00008430 Tc /R36187064 12 Tf 17.2523 0 Td (inter)Tj 0 Tc /R35493912 12 Tf 22.668 0 Td -0.0374908 Tw (active )Tj 0.00009823 Tc /R36187064 12 Tf 34.5801 0 Td (view)Tj 0 Tc /R35493912 12 Tf 21.9957 0 Td -0.037663 Tw ( of some data. For example, a text editor implements an)Tj -96.4961 -13.7398 Td -1.49955 Tw (interactive view of the contents of a text file.)Tj 10.668 -14.6402 Td -0.828598 Tw (InterViews provides a set of classes that define the behavior of user interface)Tj -10.668 -13.7398 Td -1.42532 Tw (objects. We distinguish InterViews classes into two groups: )Tj 0.00005001 Tc /R36187064 12 Tf 293.983 0 Td (protocols)Tj 0 Tc /R35493912 12 Tf 45.3359 0 Td -1.42543 Tw ( and )Tj 0.000105381 Tc /R36187064 12 Tf 23.6258 0 Td (kits)Tj 0 Tc /R35493912 12 Tf 16.668 0 Td -1.42556 Tw (. A)Tj -379.613 -13.7398 Td -1.26568 Tw (protocol defines the set of operations that an object can perform, such as drawing)Tj -1.37534 Tw (or handling input. A kit defines a set of operations for creating other objects. The)' -1.30927 Tw (idea of a kit is also sometimes referred to as an ªobject factoryº. Using kits hides)' -0.51493 Tw (the details of object construction and subclassing-instancing tradeoffs made by)' -1.3802 Tw (the implementation, as well as providing a higher-level organizational structure to)' -1.49941 Tw (the system.)' /R35743448 18 Tf 41.2801 TL (1.1)' 0.000109355 Tc 35 0 Td (Organization)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.378139 Tw (In this first chapter, we define the basic notation and classes, as well as give)Tj 13.7402 TL -0.0765002 Tw (an overview of the system by way of several example programs. Chapter 2)' -1.11672 Tw (defines the base protocol for user interface objects, called )' 0.000125885 Tc /R36187064 12 Tf 286.144 0 Td (Glyph)Tj 0 Tc /R35493912 12 Tf 29.3277 0 Td -1.11673 Tw (, which supports)Tj -315.472 -13.7398 Td -0.601879 Tw (geometry management, rendering, picking, and structuring multiple glyphs into)Tj -0.0544832 Tw (an aggregate. Chapter 3 describes the input event processing model and the)' 0.00008774 Tc /R36187064 12 Tf (InputHandler)' 0 Tc /R35493912 12 Tf 65.3281 0 Td -1.32998 Tw ( protocol. InputHandler is a descendant of Glyph that receives input)Tj -65.3281 -13.7402 Td -1.40274 Tw (events. Chapter 4 presents the )Tj 0.000195503 Tc /R36187064 12 Tf 149.207 0 Td (View)Tj 0 Tc /R35493912 12 Tf 24 0 Td -1.40254 Tw ( protocol, which is derived from InputHandler)Tj -173.207 -13.7398 Td -0.118608 Tw (and adds additional operations for creating and updating multiple views of a)Tj -1.49922 Tw (shared data object.)' 10.668 -14.6402 Td -0.816221 Tw (Chapter 5 defines the )Tj 0.00007502 Tc /R36187064 12 Tf 110.78 0 Td (Window)Tj 0 Tc /R35493912 12 Tf 39.3359 0 Td -0.816295 Tw ( protocol for associating glyphs with a window)Tj -160.784 -13.7398 Td -1.43681 Tw (on the screen and communicating with a window manager. Chapter 6 presents the)Tj -1.49955 Tw (basic protocols for rendering to the screen or a printer.)' 10.668 -14.6398 Td 0.447296 Tw (Chapter 7 is reserved for the future to describe the )Tj 0.000103845 Tc /R36187064 12 Tf 282.876 0 Td (FigureKit)Tj 0 Tc /R35493912 12 Tf 47.3398 0 Td 0.447261 Tw ( class that)Tj -340.884 -13.7398 Td 1.18779 Tw (will create common 2D graphic objects, such as rectangles, circles, and)Tj -1.39017 Tw (polygons. In traditional graphics terminology, FigureKit will support ªstructuredº)' 0.0201569 Tw (graphics, while the basic rendering protocols described in Chapter 6 support)' -1.49841 Tw (ªimmediate-modeº graphics.)' 10.668 -14.6398 Td -0.284472 Tw (Chapter 8 defines the )Tj 0.000131989 Tc /R36187064 12 Tf 115.034 0 Td (Style)Tj 0 Tc /R35493912 12 Tf 23.3281 0 Td -0.284398 Tw ( protocol, which manages a collection of named)Tj -149.03 -13.7398 Td -0.983183 Tw (attributes with string values. Chapter 9 presents the )Tj 0.000100454 Tc /R36187064 12 Tf 259.257 0 Td (WidgetKit)Tj 0 Tc /R35493912 12 Tf 48.6719 0 Td -0.983086 Tw ( class for creating)Tj -307.929 -13.7402 Td 0.466341 Tw (common user interface components such as buttons, menus, and scrollbars.)Tj -0.585381 Tw (The precise appearance and input behavior of a widget can be adjusted by the)' ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 1)Tj 0.000155131 Tc 36.9602 TL (Introduction)' 0 Tc /R18360344 12 Tf 28.3199 TL -0.885286 Tw (InterViews is a software system for window-based applications. Like most user)' 13.7402 TL -1.36749 Tw (environments, InterViews is )' 0.000108846 Tc /R19053496 12 Tf 139.44 0 Td (object-oriented)Tj 0 Tc /R18360344 12 Tf 73.3203 0 Td -1.36779 Tw ( in that components such as windows,)Tj -212.76 -13.7398 Td -1.07623 Tw (buttons, menus, and documents are active elements with inherited behavior. The)Tj -0.236825 Tw (name ªInterViewsº comes from the idea of a user interface object presenting)' -0.0377665 Tw (an )' 0.00008430 Tc /R19053496 12 Tf 17.2523 0 Td (inter)Tj 0 Tc /R18360344 12 Tf 22.668 0 Td -0.0374908 Tw (active )Tj 0.00009823 Tc /R19053496 12 Tf 34.5801 0 Td (view)Tj 0 Tc /R18360344 12 Tf 21.9957 0 Td -0.037663 Tw ( of some data. For example, a text editor implements an)Tj -96.4961 -13.7398 Td -1.49955 Tw (interactive view of the contents of a text file.)Tj 10.668 -14.6402 Td -0.828598 Tw (InterViews provides a set of classes that define the behavior of user interface)Tj -10.668 -13.7398 Td -1.42532 Tw (objects. We distinguish InterViews classes into two groups: )Tj 0.00005001 Tc /R19053496 12 Tf 293.983 0 Td (protocols)Tj 0 Tc /R18360344 12 Tf 45.3359 0 Td -1.42543 Tw ( and )Tj 0.000105381 Tc /R19053496 12 Tf 23.6258 0 Td (kits)Tj 0 Tc /R18360344 12 Tf 16.668 0 Td -1.42556 Tw (. A)Tj -379.613 -13.7398 Td -1.26568 Tw (protocol defines the set of operations that an object can perform, such as drawing)Tj -1.37534 Tw (or handling input. A kit defines a set of operations for creating other objects. The)' -1.30927 Tw (idea of a kit is also sometimes referred to as an ªobject factoryº. Using kits hides)' -0.51493 Tw (the details of object construction and subclassing-instancing tradeoffs made by)' -1.3802 Tw (the implementation, as well as providing a higher-level organizational structure to)' -1.49941 Tw (the system.)' /R18609880 18 Tf 41.2801 TL (1.1)' 0.000109355 Tc 35 0 Td (Organization)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.378139 Tw (In this first chapter, we define the basic notation and classes, as well as give)Tj 13.7402 TL -0.0765002 Tw (an overview of the system by way of several example programs. Chapter 2)' -1.11672 Tw (defines the base protocol for user interface objects, called )' 0.000125885 Tc /R19053496 12 Tf 286.144 0 Td (Glyph)Tj 0 Tc /R18360344 12 Tf 29.3277 0 Td -1.11673 Tw (, which supports)Tj -315.472 -13.7398 Td -0.601879 Tw (geometry management, rendering, picking, and structuring multiple glyphs into)Tj -0.0544832 Tw (an aggregate. Chapter 3 describes the input event processing model and the)' 0.00008774 Tc /R19053496 12 Tf (InputHandler)' 0 Tc /R18360344 12 Tf 65.3281 0 Td -1.32998 Tw ( protocol. InputHandler is a descendant of Glyph that receives input)Tj -65.3281 -13.7402 Td -1.40274 Tw (events. Chapter 4 presents the )Tj 0.000195503 Tc /R19053496 12 Tf 149.207 0 Td (View)Tj 0 Tc /R18360344 12 Tf 24 0 Td -1.40254 Tw ( protocol, which is derived from InputHandler)Tj -173.207 -13.7398 Td -0.118608 Tw (and adds additional operations for creating and updating multiple views of a)Tj -1.49922 Tw (shared data object.)' 10.668 -14.6402 Td -0.816221 Tw (Chapter 5 defines the )Tj 0.00007502 Tc /R19053496 12 Tf 110.78 0 Td (Window)Tj 0 Tc /R18360344 12 Tf 39.3359 0 Td -0.816295 Tw ( protocol for associating glyphs with a window)Tj -160.784 -13.7398 Td -1.43681 Tw (on the screen and communicating with a window manager. Chapter 6 presents the)Tj -1.49955 Tw (basic protocols for rendering to the screen or a printer.)' 10.668 -14.6398 Td 0.447296 Tw (Chapter 7 is reserved for the future to describe the )Tj 0.000103845 Tc /R19053496 12 Tf 282.876 0 Td (FigureKit)Tj 0 Tc /R18360344 12 Tf 47.3398 0 Td 0.447261 Tw ( class that)Tj -340.884 -13.7398 Td 1.18779 Tw (will create common 2D graphic objects, such as rectangles, circles, and)Tj -1.39017 Tw (polygons. In traditional graphics terminology, FigureKit will support ªstructuredº)' 0.0201569 Tw (graphics, while the basic rendering protocols described in Chapter 6 support)' -1.49841 Tw (ªimmediate-modeº graphics.)' 10.668 -14.6398 Td -0.284472 Tw (Chapter 8 defines the )Tj 0.000131989 Tc /R19053496 12 Tf 115.034 0 Td (Style)Tj 0 Tc /R18360344 12 Tf 23.3281 0 Td -0.284398 Tw ( protocol, which manages a collection of named)Tj -149.03 -13.7398 Td -0.983183 Tw (attributes with string values. Chapter 9 presents the )Tj 0.000100454 Tc /R19053496 12 Tf 259.257 0 Td (WidgetKit)Tj 0 Tc /R18360344 12 Tf 48.6719 0 Td -0.983086 Tw ( class for creating)Tj -307.929 -13.7402 Td 0.466341 Tw (common user interface components such as buttons, menus, and scrollbars.)Tj -0.585381 Tw (The precise appearance and input behavior of a widget can be adjusted by the)' ET Q Q \n \n \n \n \n-2072\n+2068\n \n \n \n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -435,29 +435,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 708.3 Tm -1.4124 Tw (attributes in a style. Chapter 10 presents the )Tj 0.00007375 Tc /R36187064 12 Tf 215.961 0 Td (DialogKit)Tj 0 Tc /R35493912 12 Tf 48.0121 0 Td -1.4124 Tw ( class for building common)Tj 0.00005245 Tc -263.973 -13.7398 Td (dialogs.)Tj 0 Tc 10.668 -14.6402 Td 0.902029 Tw (Chapter 11 defines the )Tj 0.00007375 Tc /R36187064 12 Tf 130.526 0 Td (LayoutKit)Tj 0 Tc /R35493912 12 Tf 48.0117 0 Td 0.902138 Tw ( class for creating glyphs that control)Tj -189.206 -13.7398 Td -0.551618 Tw (formatting. These objects are based on the TeX document preparation system.)Tj 13.7402 TL -1.49968 Tw (Chapter 12 describes the )' 0.000133861 Tc /R36187064 12 Tf 121.308 0 Td (DocumentKit)Tj 0 Tc /R35493912 12 Tf 63.9957 0 Td -1.49968 Tw ( class for creating and editing documents.)Tj -174.636 -14.6398 Td -1.11322 Tw (Appendix A defines classes for interfacing to the underlying operating system.)Tj -10.668 -13.7398 Td -1.04736 Tw (These classes are not intended to provide a complete or standard interface to the)Tj -1.49969 Tw (operating system, but merely a more convenient and portable set of protocols.)' /R35743448 18 Tf 41.2801 TL (1.2)' 0.000135422 Tc 35 0 Td (Notation)Tj 0 Tc /R36187064 12 Tf -35 -32.4 Td -0.420735 Tw (N.B.: The notation in this manual is somewhere between C++ and the OMG)Tj 13.7398 TL -1.49963 Tw (Interface Definition Language \(IDL\). We expect to use IDL in the future.)' /R35493912 12 Tf 19.4398 TL -1.19739 Tw (We use a syntax similar to C++ to specify the InterViews classes and operations.)' 13.7402 TL -1.42121 Tw (However, the specification of a class here is )' 0.00002543 Tc /R36187064 12 Tf 215.527 0 Td (not)Tj 0 Tc /R35493912 12 Tf 15.3359 0 Td -1.42133 Tw ( identical to its C++ declaration in)Tj -230.863 -13.7398 Td -0.897734 Tw (a header file. To make the distinction clear between our specification and C++,)Tj -0.226545 Tw (we use the keyword ªinterface' instead of ªclassº. We assume inheritance is)' -1.49951 Tw (always ªpublicº in C++ terminology.)' 10.668 -14.6398 Td 0.0022939 Tw (All operations are assumed public; we do not list the protected or private)Tj -10.668 -13.7402 Td 1.17481 Tw (members. We also do not list members that are implicitly part of the)Tj -0.0962781 Tw (implementation. For example, C++ destructors are normally public but often)' -0.873958 Tw (simply free storage allocated by the object. Thus, there is no need to document)' -1.4994 Tw (destructors as part of a class interface.)' 10.668 -14.6398 Td -0.346994 Tw (Unless explicitly specified as ªstaticº, all operations are virtual functions in)Tj -10.668 -13.7402 Td -0.0845768 Tw (C++. In the case of an inherited operation, the choice of whether or not to)Tj -0.750492 Tw (provide the operation may depend on the implementation. We therefore do not)' -1.4997 Tw (list inherited operations unless the subclass extends the semantics in some way.)' /R35743448 14 Tf 26.4 TL (1.2.1)' 0.000228119 Tc 40 0 Td (Names)Tj 0 Tc /R35493912 12 Tf -40 -20.4398 Td -0.68711 Tw (We use identifiers that begin with an upper case letter for types; we use lower)Tj 13.7398 TL -0.996705 Tw (case for operations and parameters. In type names consisting of multiple words,)' -1.22886 Tw (we capitalize the beginning of each word, as in FirstSecondThird. For operations)' -1.22726 Tw (or parameters we use underscores to separate words, as in first_second_third. An)' -1.49942 Tw (operation )' /R36187064 12 Tf 48.3242 0 Td -1.49987 Tw (f )Tj /R35493912 12 Tf 6.33633 0 Td -1.49965 Tw (for a class )Tj 0.00009918 Tc /R36187064 12 Tf 51.6484 0 Td (C)Tj 0 Tc /R35493912 12 Tf 8.00391 0 Td -1.49979 Tw ( is denoted by )Tj 0.00009155 Tc /R36187064 12 Tf 69.9973 0 Td (C)Tj 0.00006104 Tc /R35493912 12 Tf 8.00391 0 Td (::)Tj 0.00007629 Tc /R36187064 12 Tf 6.67188 0 Td (f)Tj 0 Tc /R35493912 12 Tf 3.33594 0 Td (.)Tj -191.654 -14.6398 Td -1.35616 Tw (We assume that some mechanism allows us to use whatever names we wish for)Tj -10.668 -13.7398 Td -0.298177 Tw (global symbols; that is, there is no need for a special prefix on all class and)Tj -0.395145 Tw (type names. Ideally, this capability would be provided by the implementation)' -1.31487 Tw (language, but this is not yet the case for C++. Currently, the implementation uses)' -0.483849 Tw (#define macros to prepend the prefix ``iv'' to all class names and global type)' -0.823505 Tw (names. This redefinition is hidden from the programmer, except inasmuch as it)' -1.3975 Tw (shows up during debugging. To undefine these macros, a source file must include)' -0.364694 Tw (ª<InterViews/leave-scope.h>º. After leaving the InterViews scope, InterViews)' -0.676067 Tw (names are specified by ª_lib_iv\()' 0.000149727 Tc /R36187064 12 Tf 162.552 0 Td (name)Tj 0 Tc /R35493912 12 Tf 25.9922 0 Td -0.676073 Tw (\)º, where )Tj 0.000149727 Tc /R36187064 12 Tf 50.934 0 Td (name)Tj 0 Tc /R35493912 12 Tf 25.9918 0 Td -0.676309 Tw ( is the class or type name)Tj 0.00009982 Tc 113.73 -21.0199 Td (1-2)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 708.3 Tm -1.4124 Tw (attributes in a style. Chapter 10 presents the )Tj 0.00007375 Tc /R19053496 12 Tf 215.961 0 Td (DialogKit)Tj 0 Tc /R18360344 12 Tf 48.0121 0 Td -1.4124 Tw ( class for building common)Tj 0.00005245 Tc -263.973 -13.7398 Td (dialogs.)Tj 0 Tc 10.668 -14.6402 Td 0.902029 Tw (Chapter 11 defines the )Tj 0.00007375 Tc /R19053496 12 Tf 130.526 0 Td (LayoutKit)Tj 0 Tc /R18360344 12 Tf 48.0117 0 Td 0.902138 Tw ( class for creating glyphs that control)Tj -189.206 -13.7398 Td -0.551618 Tw (formatting. These objects are based on the TeX document preparation system.)Tj 13.7402 TL -1.49968 Tw (Chapter 12 describes the )' 0.000133861 Tc /R19053496 12 Tf 121.308 0 Td (DocumentKit)Tj 0 Tc /R18360344 12 Tf 63.9957 0 Td -1.49968 Tw ( class for creating and editing documents.)Tj -174.636 -14.6398 Td -1.11322 Tw (Appendix A defines classes for interfacing to the underlying operating system.)Tj -10.668 -13.7398 Td -1.04736 Tw (These classes are not intended to provide a complete or standard interface to the)Tj -1.49969 Tw (operating system, but merely a more convenient and portable set of protocols.)' /R18609880 18 Tf 41.2801 TL (1.2)' 0.000135422 Tc 35 0 Td (Notation)Tj 0 Tc /R19053496 12 Tf -35 -32.4 Td -0.420735 Tw (N.B.: The notation in this manual is somewhere between C++ and the OMG)Tj 13.7398 TL -1.49963 Tw (Interface Definition Language \(IDL\). We expect to use IDL in the future.)' /R18360344 12 Tf 19.4398 TL -1.19739 Tw (We use a syntax similar to C++ to specify the InterViews classes and operations.)' 13.7402 TL -1.42121 Tw (However, the specification of a class here is )' 0.00002543 Tc /R19053496 12 Tf 215.527 0 Td (not)Tj 0 Tc /R18360344 12 Tf 15.3359 0 Td -1.42133 Tw ( identical to its C++ declaration in)Tj -230.863 -13.7398 Td -0.897734 Tw (a header file. To make the distinction clear between our specification and C++,)Tj -0.226545 Tw (we use the keyword ªinterface' instead of ªclassº. We assume inheritance is)' -1.49951 Tw (always ªpublicº in C++ terminology.)' 10.668 -14.6398 Td 0.0022939 Tw (All operations are assumed public; we do not list the protected or private)Tj -10.668 -13.7402 Td 1.17481 Tw (members. We also do not list members that are implicitly part of the)Tj -0.0962781 Tw (implementation. For example, C++ destructors are normally public but often)' -0.873958 Tw (simply free storage allocated by the object. Thus, there is no need to document)' -1.4994 Tw (destructors as part of a class interface.)' 10.668 -14.6398 Td -0.346994 Tw (Unless explicitly specified as ªstaticº, all operations are virtual functions in)Tj -10.668 -13.7402 Td -0.0845768 Tw (C++. In the case of an inherited operation, the choice of whether or not to)Tj -0.750492 Tw (provide the operation may depend on the implementation. We therefore do not)' -1.4997 Tw (list inherited operations unless the subclass extends the semantics in some way.)' /R18609880 14 Tf 26.4 TL (1.2.1)' 0.000228119 Tc 40 0 Td (Names)Tj 0 Tc /R18360344 12 Tf -40 -20.4398 Td -0.68711 Tw (We use identifiers that begin with an upper case letter for types; we use lower)Tj 13.7398 TL -0.996705 Tw (case for operations and parameters. In type names consisting of multiple words,)' -1.22886 Tw (we capitalize the beginning of each word, as in FirstSecondThird. For operations)' -1.22726 Tw (or parameters we use underscores to separate words, as in first_second_third. An)' -1.49942 Tw (operation )' /R19053496 12 Tf 48.3242 0 Td -1.49987 Tw (f )Tj /R18360344 12 Tf 6.33633 0 Td -1.49965 Tw (for a class )Tj 0.00009918 Tc /R19053496 12 Tf 51.6484 0 Td (C)Tj 0 Tc /R18360344 12 Tf 8.00391 0 Td -1.49979 Tw ( is denoted by )Tj 0.00009155 Tc /R19053496 12 Tf 69.9973 0 Td (C)Tj 0.00006104 Tc /R18360344 12 Tf 8.00391 0 Td (::)Tj 0.00007629 Tc /R19053496 12 Tf 6.67188 0 Td (f)Tj 0 Tc /R18360344 12 Tf 3.33594 0 Td (.)Tj -191.654 -14.6398 Td -1.35616 Tw (We assume that some mechanism allows us to use whatever names we wish for)Tj -10.668 -13.7398 Td -0.298177 Tw (global symbols; that is, there is no need for a special prefix on all class and)Tj -0.395145 Tw (type names. Ideally, this capability would be provided by the implementation)' -1.31487 Tw (language, but this is not yet the case for C++. Currently, the implementation uses)' -0.483849 Tw (#define macros to prepend the prefix ``iv'' to all class names and global type)' -0.823505 Tw (names. This redefinition is hidden from the programmer, except inasmuch as it)' -1.3975 Tw (shows up during debugging. To undefine these macros, a source file must include)' -0.364694 Tw (ª<InterViews/leave-scope.h>º. After leaving the InterViews scope, InterViews)' -0.676067 Tw (names are specified by ª_lib_iv\()' 0.000149727 Tc /R19053496 12 Tf 162.552 0 Td (name)Tj 0 Tc /R18360344 12 Tf 25.9922 0 Td -0.676073 Tw (\)º, where )Tj 0.000149727 Tc /R19053496 12 Tf 50.934 0 Td (name)Tj 0 Tc /R18360344 12 Tf 25.9918 0 Td -0.676309 Tw ( is the class or type name)Tj 0.00009982 Tc 113.73 -21.0199 Td (1-2)Tj ET Q Q \n \n \n \n \n-2239\n+2238\n \n \n \n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -494,29 +494,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 708.3 Tm -1.49954 Tw (defined in this manual.)Tj /R35743448 14 Tf 26.4 TL (1.2.2)' 40 0 Td -1.74922 Tw (Use of const)Tj /R35493912 12 Tf -40 -20.4398 Td -0.826004 Tw (C++ allows the type modifier ªconstº to be used in a variety of different ways.)Tj 13.7402 TL -1.18231 Tw (For concrete objects \(int, float, char*\), it refers to read-only storage. For abstract)' 0.322231 Tw (objects, however, storage access should not be visible in an interface. For)' -0.678196 Tw (example, an operation on a transformation matrix could be defined that returns)' -1.41238 Tw (whether the matrix is the identity or not. A simple implementation could compute)' -0.528182 Tw (the identity test and could be defined as const in the storage sense. However,)' -1.38202 Tw (another implementation might cache the result of the test to avoid the overhead of)' -1.382 Tw (the test when the matrix is not changing. This second implementation is not const)' -1.49958 Tw (in the storage sense because it modifies the transformation matrix object.)' 10.668 -14.6398 Td -0.189484 Tw (We use const for operations that do not change the )Tj 0.00007868 Tc /R36187064 12 Tf 272.158 0 Td (behavior)Tj 0 Tc /R35493912 12 Tf 42.6598 0 Td -0.189462 Tw ( of an object.)Tj -325.486 -13.7398 Td -0.610195 Tw (That is, an operation is const if a call to it could be omitted without changing)Tj -0.576716 Tw (the effect of subsequent operations performed on the object. This definition is)' -0.915218 Tw (consistent with the notion that a compiler could eliminate redundant calls to the)' -0.784621 Tw (same const function. The one important counter-example is reference counting,)' -0.0601364 Tw (where incrementing and decrementing the reference count of a shared object)' -0.80319 Tw (changes its lifetime \(an operation that could not be eliminated by the compiler\))' -1.49966 Tw (but does not change its behavior \(the operation is considered const\).)' 10.668 -14.6398 Td 0.427689 Tw (Using our semantics of const, the transformation matrix identity function)Tj -10.668 -13.7402 Td 0.00234322 Tw (mentioned above should be defined as const. This approach implies that an)Tj -1.10093 Tw (implementation may be forced to cast the )' 0.00004196 Tc /R36187064 12 Tf 207.219 0 Td (this)Tj 0 Tc /R35493912 12 Tf 17.3398 0 Td -1.10104 Tw ( pointer from const to non-const to)Tj -224.559 -13.7398 Td -0.793271 Tw (avoid a compiler error message because C++ compilers normally assume that a)Tj -1.49971 Tw (function should not be const if the function does modifies storage.)' 10.668 -14.6398 Td -1.2422 Tw (It is also possible \(indeed, likely\) that a function does not follow our semantics)Tj -10.668 -13.7402 Td -1.37729 Tw (of const even though it does not modify the object's storage. If an object contains)Tj -0.718702 Tw (a pointer to another object and an operation performs a non-const operation on)' -1.49974 Tw (that object, then the first operation may also need to be defined as non-const.)' /R35743448 14 Tf 26.4 TL (1.2.3)' 40 0 Td -1.74921 Tw (Common Symbols)Tj /R35493912 12 Tf -40 -20.4402 Td -0.382319 Tw (Several definitions are pervasive throughout the system. These definitions are)Tj 13.7398 TL -0.0410517 Tw (automatically defined as a side effect of using any other InterViews classes.)' -0.253612 Tw (The type )' 0.000103542 Tc /R36187064 12 Tf 50.3086 0 Td (boolean)Tj 0 Tc /R35493912 12 Tf 38.6645 0 Td -0.253637 Tw ( is defined in the conventional sense of a language such as)Tj -88.973 -13.7398 Td -0.607082 Tw (Pascal, as are the constants )Tj 0.00009012 Tc /R36187064 12 Tf 141.562 0 Td (true)Tj 0 Tc /R35493912 12 Tf 19.332 0 Td -0.607431 Tw ( and )Tj 0.00008430 Tc /R36187064 12 Tf 26.898 0 Td (false)Tj 0 Tc /R35493912 12 Tf 22.668 0 Td -0.60724 Tw (. The constant )Tj 0.00004069 Tc /R36187064 12 Tf 78.4039 0 Td (nil)Tj 0 Tc /R35493912 12 Tf 12.6719 0 Td -0.607333 Tw ( is presumed to be)Tj -301.536 -13.7398 Td -0.54752 Tw (type-equivalent to any pointer type and represents an invalid pointer value. In)Tj -1.49953 Tw (C++, we #define nil to zero.)' 10.668 -14.6398 Td -0.724061 Tw (The type )Tj 0.00004196 Tc /R36187064 12 Tf 48.427 0 Td (String)Tj 0 Tc /R35493912 12 Tf 29.3402 0 Td -0.724082 Tw ( is used as a parameter to a number of operations, though no)Tj -88.4352 -13.7402 Td -0.871052 Tw (specific interface or implementation is presumed. Whereever a string parameter)Tj -1.49968 Tw (appears, one can assume that a C++ ªconst char*º type can also be passed.)' /R35743448 14 Tf 26.4 TL (1.2.4)' 0.000159524 Tc 40 0 Td (Coordinates)Tj 0 Tc /R35493912 12 Tf -40 -20.4398 Td -1.49692 Tw (Many objects and operations manipulate coordinates. We define the type )Tj 0.00002441 Tc /R36187064 12 Tf 352.987 0 Td (Coord)Tj 0 Tc /R35493912 12 Tf 30.6719 0 Td -1.49747 Tw ( to)Tj -383.659 -13.7402 Td -1.13687 Tw (represent a position or a distance. The default units for a coordinate are ªprinters)Tj 0.00009982 Tc 379.2 -21.3598 Td (1-3)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 708.3 Tm -1.49954 Tw (defined in this manual.)Tj /R18609880 14 Tf 26.4 TL (1.2.2)' 40 0 Td -1.74922 Tw (Use of const)Tj /R18360344 12 Tf -40 -20.4398 Td -0.826004 Tw (C++ allows the type modifier ªconstº to be used in a variety of different ways.)Tj 13.7402 TL -1.18231 Tw (For concrete objects \(int, float, char*\), it refers to read-only storage. For abstract)' 0.322231 Tw (objects, however, storage access should not be visible in an interface. For)' -0.678196 Tw (example, an operation on a transformation matrix could be defined that returns)' -1.41238 Tw (whether the matrix is the identity or not. A simple implementation could compute)' -0.528182 Tw (the identity test and could be defined as const in the storage sense. However,)' -1.38202 Tw (another implementation might cache the result of the test to avoid the overhead of)' -1.382 Tw (the test when the matrix is not changing. This second implementation is not const)' -1.49958 Tw (in the storage sense because it modifies the transformation matrix object.)' 10.668 -14.6398 Td -0.189484 Tw (We use const for operations that do not change the )Tj 0.00007868 Tc /R19053496 12 Tf 272.158 0 Td (behavior)Tj 0 Tc /R18360344 12 Tf 42.6598 0 Td -0.189462 Tw ( of an object.)Tj -325.486 -13.7398 Td -0.610195 Tw (That is, an operation is const if a call to it could be omitted without changing)Tj -0.576716 Tw (the effect of subsequent operations performed on the object. This definition is)' -0.915218 Tw (consistent with the notion that a compiler could eliminate redundant calls to the)' -0.784621 Tw (same const function. The one important counter-example is reference counting,)' -0.0601364 Tw (where incrementing and decrementing the reference count of a shared object)' -0.80319 Tw (changes its lifetime \(an operation that could not be eliminated by the compiler\))' -1.49966 Tw (but does not change its behavior \(the operation is considered const\).)' 10.668 -14.6398 Td 0.427689 Tw (Using our semantics of const, the transformation matrix identity function)Tj -10.668 -13.7402 Td 0.00234322 Tw (mentioned above should be defined as const. This approach implies that an)Tj -1.10093 Tw (implementation may be forced to cast the )' 0.00004196 Tc /R19053496 12 Tf 207.219 0 Td (this)Tj 0 Tc /R18360344 12 Tf 17.3398 0 Td -1.10104 Tw ( pointer from const to non-const to)Tj -224.559 -13.7398 Td -0.793271 Tw (avoid a compiler error message because C++ compilers normally assume that a)Tj -1.49971 Tw (function should not be const if the function does modifies storage.)' 10.668 -14.6398 Td -1.2422 Tw (It is also possible \(indeed, likely\) that a function does not follow our semantics)Tj -10.668 -13.7402 Td -1.37729 Tw (of const even though it does not modify the object's storage. If an object contains)Tj -0.718702 Tw (a pointer to another object and an operation performs a non-const operation on)' -1.49974 Tw (that object, then the first operation may also need to be defined as non-const.)' /R18609880 14 Tf 26.4 TL (1.2.3)' 40 0 Td -1.74921 Tw (Common Symbols)Tj /R18360344 12 Tf -40 -20.4402 Td -0.382319 Tw (Several definitions are pervasive throughout the system. These definitions are)Tj 13.7398 TL -0.0410517 Tw (automatically defined as a side effect of using any other InterViews classes.)' -0.253612 Tw (The type )' 0.000103542 Tc /R19053496 12 Tf 50.3086 0 Td (boolean)Tj 0 Tc /R18360344 12 Tf 38.6645 0 Td -0.253637 Tw ( is defined in the conventional sense of a language such as)Tj -88.973 -13.7398 Td -0.607082 Tw (Pascal, as are the constants )Tj 0.00009012 Tc /R19053496 12 Tf 141.562 0 Td (true)Tj 0 Tc /R18360344 12 Tf 19.332 0 Td -0.607431 Tw ( and )Tj 0.00008430 Tc /R19053496 12 Tf 26.898 0 Td (false)Tj 0 Tc /R18360344 12 Tf 22.668 0 Td -0.60724 Tw (. The constant )Tj 0.00004069 Tc /R19053496 12 Tf 78.4039 0 Td (nil)Tj 0 Tc /R18360344 12 Tf 12.6719 0 Td -0.607333 Tw ( is presumed to be)Tj -301.536 -13.7398 Td -0.54752 Tw (type-equivalent to any pointer type and represents an invalid pointer value. In)Tj -1.49953 Tw (C++, we #define nil to zero.)' 10.668 -14.6398 Td -0.724061 Tw (The type )Tj 0.00004196 Tc /R19053496 12 Tf 48.427 0 Td (String)Tj 0 Tc /R18360344 12 Tf 29.3402 0 Td -0.724082 Tw ( is used as a parameter to a number of operations, though no)Tj -88.4352 -13.7402 Td -0.871052 Tw (specific interface or implementation is presumed. Whereever a string parameter)Tj -1.49968 Tw (appears, one can assume that a C++ ªconst char*º type can also be passed.)' /R18609880 14 Tf 26.4 TL (1.2.4)' 0.000159524 Tc 40 0 Td (Coordinates)Tj 0 Tc /R18360344 12 Tf -40 -20.4398 Td -1.49692 Tw (Many objects and operations manipulate coordinates. We define the type )Tj 0.00002441 Tc /R19053496 12 Tf 352.987 0 Td (Coord)Tj 0 Tc /R18360344 12 Tf 30.6719 0 Td -1.49747 Tw ( to)Tj -383.659 -13.7402 Td -1.13687 Tw (represent a position or a distance. The default units for a coordinate are ªprinters)Tj 0.00009982 Tc 379.2 -21.3598 Td (1-3)Tj ET Q Q \n \n \n \n \n-2107\n+2108\n \n \n \n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -553,29 +553,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 708.3 Tm -1.2262 Tw (pointsº, or 1/72 of an inch. The scaling factor can be customized on a per-screen)Tj 0.00006517 Tc 13.7398 TL (basis.)' 0 Tc 10.668 -14.6402 Td -1.3722 Tw (Ideally, Coord would be an abstract type with set of operations and conversions)Tj -10.668 -13.7398 Td -0.106607 Tw (to concrete types. However, current C++ compilers do not make it practical)Tj 0.42296 Tw (to define a Coord class that is represented as a single word. The current)' -1.49952 Tw (implementation therefore defines Coord as the C++ type ªfloat'.)' 10.668 -14.6398 Td 1.18469 Tw (For applications with simple graphics needs, the use of floating point)Tj -10.668 -13.7402 Td -1.14139 Tw (coordinates is typically not a problem. Applications with more sophisticated text)Tj -1.49965 Tw (or graphics usually need to manipulate floating point coordinates anyway.)' 10.668 -14.6402 Td -1.31644 Tw (The use of non-pixel units allows objects to be resolution-independent, but also)Tj -10.668 -13.7398 Td -1.09075 Tw (means that one cannot rely on precise output at low resolutions. Coordinates are)Tj -0.441699 Tw (rounded-off to guarantee that objects that abut in coordinates will abut on the)' -1.2734 Tw (screen. This choice means that a one point line might generate one or two pixels,)' -0.984607 Tw (depending on where it is on the screen. Objects that need to generate consistent)' -0.530664 Tw (pixel sizes can explicitly round to whole-pixel coordinate values using Canvas)' 0.00006580 Tc (to_pixels_coord.)' 0 Tc /R35743448 14 Tf 26.4 TL (1.2.5)' 0.000187683 Tc 40 0 Td (Dimensions)Tj 0 Tc /R35493912 12 Tf -40 -20.4398 Td -0.98129 Tw (Many composition strategies manipulate coordinates in one dimension. To use a)Tj 13.7402 TL -1.0732 Tw (single strategy in any dimension, we define the type )' /R36187064 12 Tf 260.314 0 Td -1.07262 Tw (DimensionName )Tj /R35493912 12 Tf 83.8449 0 Td -1.07305 Tw (and values)Tj 0.000131087 Tc /R36187064 12 Tf -344.159 -13.7398 Td (Dimension_X)Tj 0 Tc /R35493912 12 Tf 65.3281 0 Td -1.40335 Tw (, )Tj 0.00008184 Tc /R36187064 12 Tf 6.19336 0 Td (Dimension_Y)Tj 0 Tc /R35493912 12 Tf 64.6676 0 Td -1.40317 Tw (, or )Tj 0.000109586 Tc /R36187064 12 Tf 19.3828 0 Td (Dimension_Z)Tj 0 Tc /R35493912 12 Tf 64.668 0 Td -1.4032 Tw (. It is possible that other dimensions)Tj -220.24 -13.7402 Td -1.27176 Tw (may be defined in the future. The constant )Tj 0.000108819 Tc /R36187064 12 Tf 211.668 0 Td (Dimension_Undefined)Tj 0 Tc /R35493912 12 Tf 107.988 0 Td -1.27164 Tw ( is defined after)Tj -319.656 -13.7398 Td -1.4994 Tw (any other dimensions.)Tj /R35743448 14 Tf 26.4 TL (1.2.6)' 40 0 Td -1.74813 Tw (Parameter conventions)Tj /R35493912 12 Tf -40 -20.4398 Td -1.44473 Tw (In specifying an operation, we list only the parameter type unless there are several)Tj 13.7402 TL -1.27756 Tw (parameters to the operation with the same type. In this case, we list both the type)' -1.49957 Tw (and a name for the parameter that clarifies what it is.)' 10.668 -14.6402 Td -1.38954 Tw (For parameters that are objects, we use a pointer type if the operation may store)Tj -10.668 -13.7398 Td -0.689048 Tw (a pointer to the object with a lifetime beyond the operation's activation. If the)Tj -0.983203 Tw (operation will not store a pointer, then we pass a reference type. Therefore, one)' -1.49963 Tw (should never pass the expression ª&xº for a local or parameter object ªxº.)' /R35743448 14 Tf 26.4 TL (1.2.7)' 40 0 Td -1.74866 Tw (Storage management)Tj /R35493912 12 Tf -40 -20.4398 Td -0.0814986 Tw (Because C++ does not provide garbage collection, it is necessary to manage)Tj 13.7402 TL -0.609766 Tw (shared objects within a program. We make objects easier to share by deriving)' 0.194498 Tw (from class Resource, which manages a reference count. If we had garbage)' -1.00909 Tw (collection, we would not need the resource class. Therefore, we do not consider)' -0.146858 Tw (resource really part of the InterViews programming interface and it does not)' -0.511293 Tw (appear in any function type signatures. However, it is necessary to understand)' -0.691162 Tw (which objects can be shared and as a practical matter the implementation must)' -1.49859 Tw (manage references correctly.)' 10.668 -14.6398 Td -0.993989 Tw (Figure 1.1 shows the Resource class interface. Every resource has a reference)Tj 0.00009982 Tc 368.532 -34.2 Td (1-4)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 708.3 Tm -1.2262 Tw (pointsº, or 1/72 of an inch. The scaling factor can be customized on a per-screen)Tj 0.00006517 Tc 13.7398 TL (basis.)' 0 Tc 10.668 -14.6402 Td -1.3722 Tw (Ideally, Coord would be an abstract type with set of operations and conversions)Tj -10.668 -13.7398 Td -0.106607 Tw (to concrete types. However, current C++ compilers do not make it practical)Tj 0.42296 Tw (to define a Coord class that is represented as a single word. The current)' -1.49952 Tw (implementation therefore defines Coord as the C++ type ªfloat'.)' 10.668 -14.6398 Td 1.18469 Tw (For applications with simple graphics needs, the use of floating point)Tj -10.668 -13.7402 Td -1.14139 Tw (coordinates is typically not a problem. Applications with more sophisticated text)Tj -1.49965 Tw (or graphics usually need to manipulate floating point coordinates anyway.)' 10.668 -14.6402 Td -1.31644 Tw (The use of non-pixel units allows objects to be resolution-independent, but also)Tj -10.668 -13.7398 Td -1.09075 Tw (means that one cannot rely on precise output at low resolutions. Coordinates are)Tj -0.441699 Tw (rounded-off to guarantee that objects that abut in coordinates will abut on the)' -1.2734 Tw (screen. This choice means that a one point line might generate one or two pixels,)' -0.984607 Tw (depending on where it is on the screen. Objects that need to generate consistent)' -0.530664 Tw (pixel sizes can explicitly round to whole-pixel coordinate values using Canvas)' 0.00006580 Tc (to_pixels_coord.)' 0 Tc /R18609880 14 Tf 26.4 TL (1.2.5)' 0.000187683 Tc 40 0 Td (Dimensions)Tj 0 Tc /R18360344 12 Tf -40 -20.4398 Td -0.98129 Tw (Many composition strategies manipulate coordinates in one dimension. To use a)Tj 13.7402 TL -1.0732 Tw (single strategy in any dimension, we define the type )' /R19053496 12 Tf 260.314 0 Td -1.07262 Tw (DimensionName )Tj /R18360344 12 Tf 83.8449 0 Td -1.07305 Tw (and values)Tj 0.000131087 Tc /R19053496 12 Tf -344.159 -13.7398 Td (Dimension_X)Tj 0 Tc /R18360344 12 Tf 65.3281 0 Td -1.40335 Tw (, )Tj 0.00008184 Tc /R19053496 12 Tf 6.19336 0 Td (Dimension_Y)Tj 0 Tc /R18360344 12 Tf 64.6676 0 Td -1.40317 Tw (, or )Tj 0.000109586 Tc /R19053496 12 Tf 19.3828 0 Td (Dimension_Z)Tj 0 Tc /R18360344 12 Tf 64.668 0 Td -1.4032 Tw (. It is possible that other dimensions)Tj -220.24 -13.7402 Td -1.27176 Tw (may be defined in the future. The constant )Tj 0.000108819 Tc /R19053496 12 Tf 211.668 0 Td (Dimension_Undefined)Tj 0 Tc /R18360344 12 Tf 107.988 0 Td -1.27164 Tw ( is defined after)Tj -319.656 -13.7398 Td -1.4994 Tw (any other dimensions.)Tj /R18609880 14 Tf 26.4 TL (1.2.6)' 40 0 Td -1.74813 Tw (Parameter conventions)Tj /R18360344 12 Tf -40 -20.4398 Td -1.44473 Tw (In specifying an operation, we list only the parameter type unless there are several)Tj 13.7402 TL -1.27756 Tw (parameters to the operation with the same type. In this case, we list both the type)' -1.49957 Tw (and a name for the parameter that clarifies what it is.)' 10.668 -14.6402 Td -1.38954 Tw (For parameters that are objects, we use a pointer type if the operation may store)Tj -10.668 -13.7398 Td -0.689048 Tw (a pointer to the object with a lifetime beyond the operation's activation. If the)Tj -0.983203 Tw (operation will not store a pointer, then we pass a reference type. Therefore, one)' -1.49963 Tw (should never pass the expression ª&xº for a local or parameter object ªxº.)' /R18609880 14 Tf 26.4 TL (1.2.7)' 40 0 Td -1.74866 Tw (Storage management)Tj /R18360344 12 Tf -40 -20.4398 Td -0.0814986 Tw (Because C++ does not provide garbage collection, it is necessary to manage)Tj 13.7402 TL -0.609766 Tw (shared objects within a program. We make objects easier to share by deriving)' 0.194498 Tw (from class Resource, which manages a reference count. If we had garbage)' -1.00909 Tw (collection, we would not need the resource class. Therefore, we do not consider)' -0.146858 Tw (resource really part of the InterViews programming interface and it does not)' -0.511293 Tw (appear in any function type signatures. However, it is necessary to understand)' -0.691162 Tw (which objects can be shared and as a practical matter the implementation must)' -1.49859 Tw (manage references correctly.)' 10.668 -14.6398 Td -0.993989 Tw (Figure 1.1 shows the Resource class interface. Every resource has a reference)Tj 0.00009982 Tc 368.532 -34.2 Td (1-4)Tj ET Q Q \n \n \n \n \n 1990\n \n \n \n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -612,31 +612,31 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 568.55 Tm 0.81955 Tw (count that is initially zero and must be explicitly incremented by calling)Tj 13.7398 TL -0.343258 Tw (Resource::ref. The reason the count is initially zero is that an object is often)' -0.773633 Tw (created and immediately passed as a parameter to another object that stores the)' -1.45725 Tw (reference. Since the receiver must reference the parameter anyway, it is confusing)' -1.49951 Tw (to force the creator to unreference the resource after passing it.)' 14.6398 TL -0.112047 Tw ( The C++ delete operator should not be used on resources directly; instead,)' 13.7398 TL -0.450903 Tw (Resource::unref or Resource::unref_deferred should be called to decrement the)' -1.43308 Tw (reference count of an object. If the count is no longer positive, then the resource's)' -0.409578 Tw (cleanup operation will be called. In the case of Resource::unref, the object is)' -0.749198 Tw (immediately destroyed. In the case of Resource::unref_deferred, the object will)' -1.48656 Tw (be put on a queue of objects to be destroyed in order the next time Resource::flush)' -1.45945 Tw (is called. Resource deferral is useful when an object initiates a delete on one of its)' -1.49959 Tw (ancestors or some other object with an active member function.)' /R35743448 14 Tf 26.4 TL (1.2.8)' 0.000144111 Tc 40 0 Td (Callbacks)Tj 0 Tc /R35493912 12 Tf -40 -20.4398 Td -0.900231 Tw (C++ provides a pointer-to-function type, but often one wishes to encapsulate an)Tj 13.7402 TL -1.0728 Tw (object and a pointer to a member function to call on the object. Our approach is)' 0.0352977 Tw (to define a base class containing the callback signature and a parameterized)' -0.744154 Tw (subclass for a callback to an object of a specific type. For example, the )' 0.00006517 Tc /R36187064 12 Tf 366 0 Td (action)Tj 0 Tc /R35493912 12 Tf -366 -13.7402 Td 0.0705856 Tw (class defines a single operation, Action::execute, with no parameters and no)Tj -0.933023 Tw (return value. A )' 0.000125885 Tc /R36187064 12 Tf 80.7789 0 Td (macro)Tj 0 Tc /R35493912 12 Tf 30.6602 0 Td -0.93307 Tw ( is an action that contains a list of actions, each of which)Tj -111.439 -13.7402 Td -0.269139 Tw (is executed in order. An )Tj /R36187064 12 Tf 133.009 0 Td -0.268345 Tw (action callback)Tj /R35493912 12 Tf 76.118 0 Td -0.269144 Tw ( is the subclass that is expanded for)Tj -209.127 -13.7398 Td -0.0538833 Tw (each destination type. The current implementation uses preprocessor macros,)Tj -0.381091 Tw (but will use templates in the future. Figure 1.2 shows the action, macro, and)' -1.4986 Tw (action-callback class interfaces.)' /R35743448 18 Tf 41.2801 TL (1.3)' 35 0 Td -2.24911 Tw (Basic concepts)Tj /R35493912 12 Tf -35 -32.4 Td 0.0801685 Tw (The goal of InterViews is to make it easy to compose user interfaces from)Tj 13.7398 TL -1.5202 Tw (reusable components. The central class for physical composition is Glyph because)' -0.637861 Tw (it defines the geometry of a user interface object. The central class for logical)' -0.164706 Tw (composition is InputHandler because it defines the input handling policy and)' -1.21968 Tw (update management. InputHandler is a subclass of glyph, normally delegating its)' 0.00009982 Tc 379.2 -27.9699 Td (1-5)Tj ET Q 1041.3 7002.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 125.466 683.72 Tm -1.38858 Tw (interface Resource {)Tj 8.33008 -11.5199 Td -1.3886 Tw (static void ref\(const Resource*\);)Tj 11.5199 TL -1.38852 Tw (static void unref\(const Resource*\);)' -1.38829 Tw (static void unref_deferred\(const Resource*\);)' -1.38862 Tw (static void flush\(\);)' -1.38832 Tw (void cleanup\(\);)' -8.33008 -11.5199 Td -1.38925 Tw (}; )Tj 97.1949 -16.5199 Td -1.38848 Tw (Figure 1.1:)Tj 56.1301 0 Td -1.38879 Tw (Resource class interface)Tj ET Q 1041.3 5899.1 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 568.55 Tm 0.81955 Tw (count that is initially zero and must be explicitly incremented by calling)Tj 13.7398 TL -0.343258 Tw (Resource::ref. The reason the count is initially zero is that an object is often)' -0.773633 Tw (created and immediately passed as a parameter to another object that stores the)' -1.45725 Tw (reference. Since the receiver must reference the parameter anyway, it is confusing)' -1.49951 Tw (to force the creator to unreference the resource after passing it.)' 14.6398 TL -0.112047 Tw ( The C++ delete operator should not be used on resources directly; instead,)' 13.7398 TL -0.450903 Tw (Resource::unref or Resource::unref_deferred should be called to decrement the)' -1.43308 Tw (reference count of an object. If the count is no longer positive, then the resource's)' -0.409578 Tw (cleanup operation will be called. In the case of Resource::unref, the object is)' -0.749198 Tw (immediately destroyed. In the case of Resource::unref_deferred, the object will)' -1.48656 Tw (be put on a queue of objects to be destroyed in order the next time Resource::flush)' -1.45945 Tw (is called. Resource deferral is useful when an object initiates a delete on one of its)' -1.49959 Tw (ancestors or some other object with an active member function.)' /R18609880 14 Tf 26.4 TL (1.2.8)' 0.000144111 Tc 40 0 Td (Callbacks)Tj 0 Tc /R18360344 12 Tf -40 -20.4398 Td -0.900231 Tw (C++ provides a pointer-to-function type, but often one wishes to encapsulate an)Tj 13.7402 TL -1.0728 Tw (object and a pointer to a member function to call on the object. Our approach is)' 0.0352977 Tw (to define a base class containing the callback signature and a parameterized)' -0.744154 Tw (subclass for a callback to an object of a specific type. For example, the )' 0.00006517 Tc /R19053496 12 Tf 366 0 Td (action)Tj 0 Tc /R18360344 12 Tf -366 -13.7402 Td 0.0705856 Tw (class defines a single operation, Action::execute, with no parameters and no)Tj -0.933023 Tw (return value. A )' 0.000125885 Tc /R19053496 12 Tf 80.7789 0 Td (macro)Tj 0 Tc /R18360344 12 Tf 30.6602 0 Td -0.93307 Tw ( is an action that contains a list of actions, each of which)Tj -111.439 -13.7402 Td -0.269139 Tw (is executed in order. An )Tj /R19053496 12 Tf 133.009 0 Td -0.268345 Tw (action callback)Tj /R18360344 12 Tf 76.118 0 Td -0.269144 Tw ( is the subclass that is expanded for)Tj -209.127 -13.7398 Td -0.0538833 Tw (each destination type. The current implementation uses preprocessor macros,)Tj -0.381091 Tw (but will use templates in the future. Figure 1.2 shows the action, macro, and)' -1.4986 Tw (action-callback class interfaces.)' /R18609880 18 Tf 41.2801 TL (1.3)' 35 0 Td -2.24911 Tw (Basic concepts)Tj /R18360344 12 Tf -35 -32.4 Td 0.0801685 Tw (The goal of InterViews is to make it easy to compose user interfaces from)Tj 13.7398 TL -1.5202 Tw (reusable components. The central class for physical composition is Glyph because)' -0.637861 Tw (it defines the geometry of a user interface object. The central class for logical)' -0.164706 Tw (composition is InputHandler because it defines the input handling policy and)' -1.21968 Tw (update management. InputHandler is a subclass of glyph, normally delegating its)' 0.00009982 Tc 379.2 -27.9699 Td (1-5)Tj ET Q 1041.3 7002.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 125.466 683.72 Tm -1.38858 Tw (interface Resource {)Tj 8.33008 -11.5199 Td -1.3886 Tw (static void ref\(const Resource*\);)Tj 11.5199 TL -1.38852 Tw (static void unref\(const Resource*\);)' -1.38829 Tw (static void unref_deferred\(const Resource*\);)' -1.38862 Tw (static void flush\(\);)' -1.38832 Tw (void cleanup\(\);)' -8.33008 -11.5199 Td -1.38925 Tw (}; )Tj 97.1949 -16.5199 Td -1.38848 Tw (Figure 1.1:)Tj 56.1301 0 Td -1.38879 Tw (Resource class interface)Tj ET Q 1041.3 5899.1 3960 10 re f* Q \n \n \n \n \n-1775\n+1774\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -673,29 +673,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 466.43 Tm -1.49949 Tw (geometry and appearance to another glyph.)Tj 10.668 -14.6402 Td -0.552199 Tw (The Canvas class defines a 2-dimensional surface upon to which a group of)Tj -10.668 -13.7398 Td -0.848163 Tw (glyphs are attached. The glyphs negotiate for space on the canvas, draw on the)Tj 13.7398 TL -0.480127 Tw (canvas to refresh their appearance, and damage the canvas to cause an update)' 0.000154877 Tc (traversal.)' 0 Tc 10.668 -14.6398 Td -0.52365 Tw (The Window class creates a canvas for a top-level input handler and allows)Tj -10.668 -13.7402 Td -0.0952838 Tw (the user to control the canvas on a screen through a window manager. The)Tj -1.28533 Tw (window class does not define a window management policy, only the mechanism)' -0.846875 Tw (for communicating appropriate information between a window manager and the)' 0.00001362 Tc (glyphs.)' 0 Tc 10.668 -14.6398 Td -0.464813 Tw (The InterViews input model is ``top-down''. That is, an input event is first)Tj -10.668 -13.7402 Td -1.12607 Tw (received by the appropriate window as determined by the window manager. The)Tj -0.805589 Tw (receiving window passes the event to the root input handler, which may pass it)' -1.49967 Tw (down to a nested input handler.)' /R35743448 14 Tf 26.4 TL (1.3.1)' 40 0 Td -1.74928 Tw (Main event loop)Tj /R35493912 12 Tf -40 -20.4402 Td 0.0483135 Tw (Every application creates a Session object to run an event dispatching loop.)Tj 13.7398 TL -1.37371 Tw (Sessions initially attach to the user's display and can attach to additional displays.)' -0.719678 Tw (A session defines a root Style object derived from user customization files and)' 0.257353 Tw (command-line arguments. Styles define named attributes with string values,)' 0.686739 Tw (wildcarding for matching classes of objects, and quick access to common)' -1.49971 Tw (attributes such as fonts and colors. Figure 1.3 shows the session protocol.)' 10.668 -14.6398 Td 0.109988 Tw (The session is given an alias \(class name\) for the root style, an array of)Tj -10.668 -13.7402 Td -0.706104 Tw (command-line arguments, an optional argument description, and optional initial)Tj -0.155637 Tw (style settings. The root style's name comes from the ª-nameº command-line)' -0.885503 Tw (option \(if given\), or the environment variable RESOURCE_NAME \(if defined\),)' -1.49962 Tw (or the value of argv[0] with leading path entries stripped.)' 0.00009982 Tc 379.2 -24.3098 Td (1-6)Tj ET Q 1091.7 7168.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 130.506 700.28 Tm -1.38825 Tw (typedef long MacroIndex;)Tj 16.5199 TL -1.38898 Tw (interface Action : Resource {)' 8.33008 -11.5203 Td -1.389 Tw (void execute\(\) = 0;)Tj 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc -1.38901 Tw (interface Macro : Action {)' 8.33008 -11.5199 Td -1.38921 Tw (Macro\(Action* = nil, Action* = nil, Action* = nil, Action* = nil\);)Tj 11.5199 TL -1.38754 Tw (void prepend\(Action*\);)' -1.38769 Tw (void append\(Action*\);)' -1.38814 Tw (void insert\(MacroIndex, Action*\);)' -1.38723 Tw (void remove\(MacroIndex\);)' -1.38823 Tw (MacroIndex count\(\) const;)' -1.38818 Tw (Action* action\(MacroIndex\) const;)' 0.000233889 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 16.5199 TL -1.3888 Tw (interface ActionCallback\(T\) : Action {)' 8.33008 -11.5199 Td -1.38789 Tw (ActionCallback\(T\)\(T*, void \(T::*\)\(\)\);)Tj 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 74.4 -16.5199 Td -1.38848 Tw (Figure 1.2:)Tj 56.1301 0 Td -1.38895 Tw (Action and related class interfaces.)Tj ET Q 1091.7 4877.9 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 466.43 Tm -1.49949 Tw (geometry and appearance to another glyph.)Tj 10.668 -14.6402 Td -0.552199 Tw (The Canvas class defines a 2-dimensional surface upon to which a group of)Tj -10.668 -13.7398 Td -0.848163 Tw (glyphs are attached. The glyphs negotiate for space on the canvas, draw on the)Tj 13.7398 TL -0.480127 Tw (canvas to refresh their appearance, and damage the canvas to cause an update)' 0.000154877 Tc (traversal.)' 0 Tc 10.668 -14.6398 Td -0.52365 Tw (The Window class creates a canvas for a top-level input handler and allows)Tj -10.668 -13.7402 Td -0.0952838 Tw (the user to control the canvas on a screen through a window manager. The)Tj -1.28533 Tw (window class does not define a window management policy, only the mechanism)' -0.846875 Tw (for communicating appropriate information between a window manager and the)' 0.00001362 Tc (glyphs.)' 0 Tc 10.668 -14.6398 Td -0.464813 Tw (The InterViews input model is ``top-down''. That is, an input event is first)Tj -10.668 -13.7402 Td -1.12607 Tw (received by the appropriate window as determined by the window manager. The)Tj -0.805589 Tw (receiving window passes the event to the root input handler, which may pass it)' -1.49967 Tw (down to a nested input handler.)' /R18609880 14 Tf 26.4 TL (1.3.1)' 40 0 Td -1.74928 Tw (Main event loop)Tj /R18360344 12 Tf -40 -20.4402 Td 0.0483135 Tw (Every application creates a Session object to run an event dispatching loop.)Tj 13.7398 TL -1.37371 Tw (Sessions initially attach to the user's display and can attach to additional displays.)' -0.719678 Tw (A session defines a root Style object derived from user customization files and)' 0.257353 Tw (command-line arguments. Styles define named attributes with string values,)' 0.686739 Tw (wildcarding for matching classes of objects, and quick access to common)' -1.49971 Tw (attributes such as fonts and colors. Figure 1.3 shows the session protocol.)' 10.668 -14.6398 Td 0.109988 Tw (The session is given an alias \(class name\) for the root style, an array of)Tj -10.668 -13.7402 Td -0.706104 Tw (command-line arguments, an optional argument description, and optional initial)Tj -0.155637 Tw (style settings. The root style's name comes from the ª-nameº command-line)' -0.885503 Tw (option \(if given\), or the environment variable RESOURCE_NAME \(if defined\),)' -1.49962 Tw (or the value of argv[0] with leading path entries stripped.)' 0.00009982 Tc 379.2 -24.3098 Td (1-6)Tj ET Q 1091.7 7168.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 130.506 700.28 Tm -1.38825 Tw (typedef long MacroIndex;)Tj 16.5199 TL -1.38898 Tw (interface Action : Resource {)' 8.33008 -11.5203 Td -1.389 Tw (void execute\(\) = 0;)Tj 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc -1.38901 Tw (interface Macro : Action {)' 8.33008 -11.5199 Td -1.38921 Tw (Macro\(Action* = nil, Action* = nil, Action* = nil, Action* = nil\);)Tj 11.5199 TL -1.38754 Tw (void prepend\(Action*\);)' -1.38769 Tw (void append\(Action*\);)' -1.38814 Tw (void insert\(MacroIndex, Action*\);)' -1.38723 Tw (void remove\(MacroIndex\);)' -1.38823 Tw (MacroIndex count\(\) const;)' -1.38818 Tw (Action* action\(MacroIndex\) const;)' 0.000233889 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 16.5199 TL -1.3888 Tw (interface ActionCallback\(T\) : Action {)' 8.33008 -11.5199 Td -1.38789 Tw (ActionCallback\(T\)\(T*, void \(T::*\)\(\)\);)Tj 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 74.4 -16.5199 Td -1.38848 Tw (Figure 1.2:)Tj 56.1301 0 Td -1.38895 Tw (Action and related class interfaces.)Tj ET Q 1091.7 4877.9 3960 10 re f* Q \n \n \n \n \n-1644\n+1643\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -732,29 +732,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 116.718 284.79 Tm -0.26301 Tw (The option description is an array of structures that describe command-line)Tj -10.668 -13.7398 Td -0.779651 Tw (arguments. The structure contains four fields: a )Tj 0.000142097 Tc /R36187064 12 Tf 242.256 0 Td (name)Tj 0 Tc /R35493912 12 Tf 25.9922 0 Td -0.779728 Tw ( that is the command-line)Tj -268.248 -13.7398 Td -1.44182 Tw (string, a )Tj 0.00001621 Tc /R36187064 12 Tf 41.8961 0 Td (path)Tj 0 Tc /R35493912 12 Tf 21.3359 0 Td -1.44175 Tw ( specifying a style attribute, a )Tj 0.00007757 Tc /R36187064 12 Tf 145.008 0 Td (format)Tj 0 Tc /R35493912 12 Tf 32.0043 0 Td -1.44153 Tw ( specifying where the associated)Tj -240.244 -13.7402 Td -1.28998 Tw (value is, and a default )Tj 0.000118256 Tc /R36187064 12 Tf 110.074 0 Td (value)Tj 0 Tc /R35493912 12 Tf 25.9922 0 Td -1.28987 Tw (. Valid formats are OptionPropertyNext \(use the next)Tj -136.066 -13.7398 Td -0.346853 Tw (argument as an attribute-value pair\), OptionValueNext \(use the next argument)Tj 13.7402 TL 0.00505447 Tw (as the value\), OptionValueImplicit \(use the default value\), OptionValueIsArg)' -0.926123 Tw (\(use the agument as the value\), and OptionValueAfter \(use the remainder of the)' -0.583375 Tw (argument as the value\). If a command-line argument is found that matches an)' -0.678464 Tw (option description, it will be interpreted and removed from argv. The agument)' -1.49963 Tw (count \(argc\) will be set to the number of uninterpreted command-line arguments.)' 10.668 -14.6402 Td 2.02312 Tw (In addition to the program-specified options, the Session constructor)Tj -10.668 -13.7398 Td -0.738501 Tw (automatically matches the options listed in Table 1.1. The optional initial style)Tj -0.876072 Tw (settings are specified by a nil-terminated array of pairs )' 0.00001035 Tc /R36187064 12 Tf 276.16 0 Td (<s1,s2>)Tj 0 Tc /R35493912 12 Tf 40.5359 0 Td -0.876211 Tw (, where )Tj 0.00001526 Tc /R36187064 12 Tf 40.8098 0 Td (s1)Tj 0 Tc /R35493912 12 Tf 10.6684 0 Td -0.876413 Tw ( is an)Tj -368.174 -13.7402 Td -1.29434 Tw (attribute name and )Tj 0.00001907 Tc /R36187064 12 Tf 93.548 0 Td (s2)Tj 0 Tc /R35493912 12 Tf 10.668 0 Td -1.29438 Tw ( is the value. User defaults will override any initial settings,)Tj 0.00009982 Tc 274.984 -29.6098 Td (1-7)Tj ET Q 1091.7 7130 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 130.506 696.44 Tm -1.38846 Tw (struct PropertyData {)Tj 8.33008 -11.5199 Td -1.38868 Tw (const char* path;)Tj 11.5199 TL -1.38873 Tw (const char* value;)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38868 Tw (struct OptionDesc {)' 8.33008 -11.5203 Td -1.38868 Tw (const char* name;)Tj 11.5199 TL (const char* path;)' -1.38761 Tw (OptionStyle format;)' -1.38873 Tw (const char* value;)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5203 TL -1.38869 Tw (interface Session {)' 0.000146389 Tc 8.33008 -11.5199 Td (Session\()Tj 0 Tc 8.33008 -11.5199 Td -1.38904 Tw (const char* name, int& argc, char** argv)Tj 11.5199 TL -1.38908 Tw (const OptionDesc* = nil, const PropertyData* = nil)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc -1.38838 Tw (static Session* instance\(\);)' -1.38866 Tw (int argc\(\) const;)' -1.38854 Tw (char** argv\(\) const;)' -1.38863 Tw (Style* style\(\) const;)' -1.38715 Tw (void default_display\(Display*\);)' -1.38836 Tw (Display* default_display\(\) const;)' -1.3884 Tw (Display* connect\(const String&\);)' -1.38849 Tw (Display* connect\(const char*\);)' -1.38773 Tw (void disconnect\(Display*\);)' -1.38831 Tw (int run\(\);)' -1.38734 Tw (int run_window\(Window*\);)' -1.38832 Tw (void quit\(\);)' -1.38801 Tw (boolean done\(\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 114.975 -16.5199 Td -1.38848 Tw (Figure 1.3:)Tj 56.1301 0 Td -1.38845 Tw (Session protocol)Tj -19.1699 -33.0402 Td -1.38848 Tw (Figure 1.4:)Tj ET Q 1091.7 3061.5 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 116.718 284.79 Tm -0.26301 Tw (The option description is an array of structures that describe command-line)Tj -10.668 -13.7398 Td -0.779651 Tw (arguments. The structure contains four fields: a )Tj 0.000142097 Tc /R19053496 12 Tf 242.256 0 Td (name)Tj 0 Tc /R18360344 12 Tf 25.9922 0 Td -0.779728 Tw ( that is the command-line)Tj -268.248 -13.7398 Td -1.44182 Tw (string, a )Tj 0.00001621 Tc /R19053496 12 Tf 41.8961 0 Td (path)Tj 0 Tc /R18360344 12 Tf 21.3359 0 Td -1.44175 Tw ( specifying a style attribute, a )Tj 0.00007757 Tc /R19053496 12 Tf 145.008 0 Td (format)Tj 0 Tc /R18360344 12 Tf 32.0043 0 Td -1.44153 Tw ( specifying where the associated)Tj -240.244 -13.7402 Td -1.28998 Tw (value is, and a default )Tj 0.000118256 Tc /R19053496 12 Tf 110.074 0 Td (value)Tj 0 Tc /R18360344 12 Tf 25.9922 0 Td -1.28987 Tw (. Valid formats are OptionPropertyNext \(use the next)Tj -136.066 -13.7398 Td -0.346853 Tw (argument as an attribute-value pair\), OptionValueNext \(use the next argument)Tj 13.7402 TL 0.00505447 Tw (as the value\), OptionValueImplicit \(use the default value\), OptionValueIsArg)' -0.926123 Tw (\(use the agument as the value\), and OptionValueAfter \(use the remainder of the)' -0.583375 Tw (argument as the value\). If a command-line argument is found that matches an)' -0.678464 Tw (option description, it will be interpreted and removed from argv. The agument)' -1.49963 Tw (count \(argc\) will be set to the number of uninterpreted command-line arguments.)' 10.668 -14.6402 Td 2.02312 Tw (In addition to the program-specified options, the Session constructor)Tj -10.668 -13.7398 Td -0.738501 Tw (automatically matches the options listed in Table 1.1. The optional initial style)Tj -0.876072 Tw (settings are specified by a nil-terminated array of pairs )' 0.00001035 Tc /R19053496 12 Tf 276.16 0 Td (<s1,s2>)Tj 0 Tc /R18360344 12 Tf 40.5359 0 Td -0.876211 Tw (, where )Tj 0.00001526 Tc /R19053496 12 Tf 40.8098 0 Td (s1)Tj 0 Tc /R18360344 12 Tf 10.6684 0 Td -0.876413 Tw ( is an)Tj -368.174 -13.7402 Td -1.29434 Tw (attribute name and )Tj 0.00001907 Tc /R19053496 12 Tf 93.548 0 Td (s2)Tj 0 Tc /R18360344 12 Tf 10.668 0 Td -1.29438 Tw ( is the value. User defaults will override any initial settings,)Tj 0.00009982 Tc 274.984 -29.6098 Td (1-7)Tj ET Q 1091.7 7130 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 130.506 696.44 Tm -1.38846 Tw (struct PropertyData {)Tj 8.33008 -11.5199 Td -1.38868 Tw (const char* path;)Tj 11.5199 TL -1.38873 Tw (const char* value;)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38868 Tw (struct OptionDesc {)' 8.33008 -11.5203 Td -1.38868 Tw (const char* name;)Tj 11.5199 TL (const char* path;)' -1.38761 Tw (OptionStyle format;)' -1.38873 Tw (const char* value;)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5203 TL -1.38869 Tw (interface Session {)' 0.000146389 Tc 8.33008 -11.5199 Td (Session\()Tj 0 Tc 8.33008 -11.5199 Td -1.38904 Tw (const char* name, int& argc, char** argv)Tj 11.5199 TL -1.38908 Tw (const OptionDesc* = nil, const PropertyData* = nil)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc -1.38838 Tw (static Session* instance\(\);)' -1.38866 Tw (int argc\(\) const;)' -1.38854 Tw (char** argv\(\) const;)' -1.38863 Tw (Style* style\(\) const;)' -1.38715 Tw (void default_display\(Display*\);)' -1.38836 Tw (Display* default_display\(\) const;)' -1.3884 Tw (Display* connect\(const String&\);)' -1.38849 Tw (Display* connect\(const char*\);)' -1.38773 Tw (void disconnect\(Display*\);)' -1.38831 Tw (int run\(\);)' -1.38734 Tw (int run_window\(Window*\);)' -1.38832 Tw (void quit\(\);)' -1.38801 Tw (boolean done\(\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 114.975 -16.5199 Td -1.38848 Tw (Figure 1.3:)Tj 56.1301 0 Td -1.38845 Tw (Session protocol)Tj -19.1699 -33.0402 Td -1.38848 Tw (Figure 1.4:)Tj ET Q 1091.7 3061.5 3960 10 re f* Q \n \n \n \n \n 1505\n \n \n \n \n-R36761712\n+R19628144\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -791,27 +791,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 329.82 Tm -1.49951 Tw (and command-line arguments will override user defaults. )Tj /R35743448 14 Tf 26.4 TL (1.3.2)' 40 0 Td -1.74894 Tw (Common widgets)Tj /R35493912 12 Tf -40 -20.4398 Td -1.39707 Tw (InterViews provides common behavior objects, such as buttons and menus, which)Tj 13.7402 TL -1.28842 Tw (are built using glyphs and input handlers. Unlike many other toolkits, InterViews)' -0.0595306 Tw (objects are cheap enough that behavior objects are separate from appearance)' -0.87487 Tw (objects. For example, the button class is given a separate glyph that denotes its)' -1.49955 Tw (appearance; the button only implements input behavior.)' 10.668 -14.6398 Td -0.604086 Tw (This approach of separating input and output objects makes the toolkit more)Tj -10.668 -13.7402 Td -1.54958 Tw (flexible and the individual objects simpler, but it can make the task of constructing)Tj -1.02699 Tw (higher-level user interface objects more confusing. In particular, it becomes less)' -0.413151 Tw (obvious whether it is appropriate to subclass or instance to create a particular)' 0.00006599 Tc (component.)' 0 Tc 10.668 -14.6398 Td -0.815094 Tw (InterViews provides a widget kit object that encapsulates these decisions in a)Tj -10.668 -13.7402 Td -1.09822 Tw (single programming interface while allowing various appearances and behaviors.)Tj -0.227689 Tw (A widget kit is an object that creates common user interface objects such as)' -1.38506 Tw (buttons, scrollbars, and menus. For example, a push button has button behavior, a)' 0.00009982 Tc 379.2 -26.8996 Td (1-8)Tj ET Q 0 0 0.0942383 rg 1251.3 3825 10 3331.2 re f* 2014.5 3825 10 3331.2 re f* 4744.26 3825 10 3331.2 re f* 1251.3 7146.2 3502.96 10 re f* 1251.3 7001.8 3502.96 10 re f* 1251.3 6857.4 3502.96 10 re f* 1251.3 6713 3502.96 10 re f* 1251.3 6568.6 3502.96 10 re f* 1251.3 6424.2 3502.96 10 re f* 1251.3 6279.8 3502.96 10 re f* 1251.3 6135.4 3502.96 10 re f* 1251.3 5991 3502.96 10 re f* 1251.3 5846.6 3502.96 10 re f* 1251.3 5702.2 3502.96 10 re f* 1251.3 5557.8 3502.96 10 re f* 1251.3 5413.4 3502.96 10 re f* 1251.3 5269 3502.96 10 re f* 1251.3 5124.6 3502.96 10 re f* 1251.3 4980.2 3502.96 10 re f* 1251.3 4835.8 3502.96 10 re f* 1251.3 4691.4 3502.96 10 re f* 1251.3 4547 3502.96 10 re f* 1251.3 4402.6 3502.96 10 re f* 1251.3 4258.2 3502.96 10 re f* 1251.3 4113.8 3502.96 10 re f* 1251.3 3969.4 3502.96 10 re f* 1251.3 3825 3502.96 10 re f* 0 0 0 rg q 10 0 0 10 0 0 cm BT 0.000101956 Tc /R35493912 12 Tf 1 0 0 1 130.13 704.06 Tm (-background)Tj 0 Tc 76.3199 0 Td -1.49965 Tw (next argument sets the background color)Tj 0.00009855 Tc -76.3199 -14.4402 Td (-bg)Tj 0 Tc 76.3199 0 Td -1.49949 Tw (same as -background)Tj 0.00007391 Tc -76.3199 -14.4398 Td (-dbu)Tj 0.000310421 Tc /R35493912 10 Tf 21.9961 0 Td (f)Tj 0 Tc /R35493912 12 Tf 54.3238 0 Td -1.49942 Tw (double-buffer windows by default)Tj 0.00009012 Tc -76.3199 -14.4402 Td (-display)Tj 0 Tc 76.3199 0 Td -1.49955 Tw (next argument specifies the target workstation display)Tj 0.00008917 Tc -76.3199 -14.4398 Td (-dpi)Tj 0 Tc 76.3199 0 Td -1.49945 Tw (next argument is coordinates-to-pixels ratio)Tj 0.000196775 Tc -76.3199 -14.4398 Td (-fg)Tj 0 Tc 76.3199 0 Td -1.49941 Tw (same as -foreground)Tj 0.000196075 Tc -76.3199 -14.4402 Td (-flat)Tj 0 Tc 76.3199 0 Td -1.49969 Tw (next argument sets the base color for bevels)Tj 0.000196775 Tc -76.3199 -14.4398 Td (-fn)Tj 0 Tc 76.3199 0 Td -1.49961 Tw (same as -font)Tj 0.000131226 Tc -76.3199 -14.4402 Td (-font)Tj 0 Tc 76.3199 0 Td -1.49961 Tw (next argument sets the default text font)Tj 0.00013178 Tc -76.3199 -14.4398 Td (-foreground)Tj 0 Tc 76.3199 0 Td -1.49962 Tw (next argument sets the foreground color)Tj 0.000139025 Tc -76.3199 -14.4398 Td (-geometry)Tj 0 Tc 76.3199 0 Td -1.49969 Tw (next argument sets the first window's position and size)Tj 0.000135694 Tc -76.3199 -14.4402 Td (-iconic)Tj 0 Tc 76.3199 0 Td -1.49962 Tw (starts up first window in iconic form)Tj 0.000144414 Tc -76.3199 -14.4398 Td (-malloc)Tj 0 Tc 76.3199 0 Td -1.49958 Tw (run with memory-management debugging on)Tj 0.000113747 Tc -76.3199 -14.4402 Td (-monochrome)Tj 0 Tc 76.3199 0 Td -1.49958 Tw (use monochrome style)Tj 0.000130335 Tc -76.3199 -14.4398 Td (-motif)Tj 0 Tc 76.3199 0 Td -1.49971 Tw (use Motif style)Tj 0.000177765 Tc -76.3199 -14.4398 Td (-name)Tj 0 Tc 76.3199 0 Td -1.49971 Tw (next argument sets the instance name of the session)Tj 0.00008447 Tc -76.3199 -14.4402 Td (-nodbuf)Tj 0 Tc 76.3199 0 Td -1.49957 Tw (do not double-buffer windows)Tj 0.00006909 Tc -76.3199 -14.4398 Td (-openlook)Tj 0 Tc 76.3199 0 Td -1.49958 Tw (use OpenLook style)Tj 0.00007693 Tc -76.3199 -14.4402 Td (-synchronous)Tj 0 Tc 76.3199 0 Td -1.49961 Tw (force synchronous operation with the window system)Tj 0.000135422 Tc -76.3199 -14.4398 Td (-title)Tj 0 Tc 76.3199 0 Td -1.49966 Tw (next argument sets the session's default title bar name)Tj 0.000102997 Tc -76.3199 -14.4398 Td (-visual)Tj 0 Tc 76.3199 0 Td -1.49974 Tw (next argument is visual class to use for windows)Tj 0.00007820 Tc -76.3199 -14.4402 Td (-visual_id)Tj 0 Tc 76.3199 0 Td -1.49977 Tw (next argument is visual id number to use for windows)Tj 0.000164032 Tc -76.3199 -14.4398 Td (-xrm)Tj 0 Tc 76.3199 0 Td -1.49956 Tw (next argument is ªname:valueº; sets named attribute)Tj -17.1602 -26.3199 Td -1.49944 Tw (Table 1.1:)Tj 59.3281 0 Td -1.49923 Tw (Predefined command-line options)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 329.82 Tm -1.49951 Tw (and command-line arguments will override user defaults. )Tj /R18609880 14 Tf 26.4 TL (1.3.2)' 40 0 Td -1.74894 Tw (Common widgets)Tj /R18360344 12 Tf -40 -20.4398 Td -1.39707 Tw (InterViews provides common behavior objects, such as buttons and menus, which)Tj 13.7402 TL -1.28842 Tw (are built using glyphs and input handlers. Unlike many other toolkits, InterViews)' -0.0595306 Tw (objects are cheap enough that behavior objects are separate from appearance)' -0.87487 Tw (objects. For example, the button class is given a separate glyph that denotes its)' -1.49955 Tw (appearance; the button only implements input behavior.)' 10.668 -14.6398 Td -0.604086 Tw (This approach of separating input and output objects makes the toolkit more)Tj -10.668 -13.7402 Td -1.54958 Tw (flexible and the individual objects simpler, but it can make the task of constructing)Tj -1.02699 Tw (higher-level user interface objects more confusing. In particular, it becomes less)' -0.413151 Tw (obvious whether it is appropriate to subclass or instance to create a particular)' 0.00006599 Tc (component.)' 0 Tc 10.668 -14.6398 Td -0.815094 Tw (InterViews provides a widget kit object that encapsulates these decisions in a)Tj -10.668 -13.7402 Td -1.09822 Tw (single programming interface while allowing various appearances and behaviors.)Tj -0.227689 Tw (A widget kit is an object that creates common user interface objects such as)' -1.38506 Tw (buttons, scrollbars, and menus. For example, a push button has button behavior, a)' 0.00009982 Tc 379.2 -26.8996 Td (1-8)Tj ET Q 0 0 0.0942383 rg 1251.3 3825 10 3331.2 re f* 2014.5 3825 10 3331.2 re f* 4744.26 3825 10 3331.2 re f* 1251.3 7146.2 3502.96 10 re f* 1251.3 7001.8 3502.96 10 re f* 1251.3 6857.4 3502.96 10 re f* 1251.3 6713 3502.96 10 re f* 1251.3 6568.6 3502.96 10 re f* 1251.3 6424.2 3502.96 10 re f* 1251.3 6279.8 3502.96 10 re f* 1251.3 6135.4 3502.96 10 re f* 1251.3 5991 3502.96 10 re f* 1251.3 5846.6 3502.96 10 re f* 1251.3 5702.2 3502.96 10 re f* 1251.3 5557.8 3502.96 10 re f* 1251.3 5413.4 3502.96 10 re f* 1251.3 5269 3502.96 10 re f* 1251.3 5124.6 3502.96 10 re f* 1251.3 4980.2 3502.96 10 re f* 1251.3 4835.8 3502.96 10 re f* 1251.3 4691.4 3502.96 10 re f* 1251.3 4547 3502.96 10 re f* 1251.3 4402.6 3502.96 10 re f* 1251.3 4258.2 3502.96 10 re f* 1251.3 4113.8 3502.96 10 re f* 1251.3 3969.4 3502.96 10 re f* 1251.3 3825 3502.96 10 re f* 0 0 0 rg q 10 0 0 10 0 0 cm BT 0.000101956 Tc /R18360344 12 Tf 1 0 0 1 130.13 704.06 Tm (-background)Tj 0 Tc 76.3199 0 Td -1.49965 Tw (next argument sets the background color)Tj 0.00009855 Tc -76.3199 -14.4402 Td (-bg)Tj 0 Tc 76.3199 0 Td -1.49949 Tw (same as -background)Tj 0.00007391 Tc -76.3199 -14.4398 Td (-dbu)Tj 0.000310421 Tc /R18360344 10 Tf 21.9961 0 Td (f)Tj 0 Tc /R18360344 12 Tf 54.3238 0 Td -1.49942 Tw (double-buffer windows by default)Tj 0.00009012 Tc -76.3199 -14.4402 Td (-display)Tj 0 Tc 76.3199 0 Td -1.49955 Tw (next argument specifies the target workstation display)Tj 0.00008917 Tc -76.3199 -14.4398 Td (-dpi)Tj 0 Tc 76.3199 0 Td -1.49945 Tw (next argument is coordinates-to-pixels ratio)Tj 0.000196775 Tc -76.3199 -14.4398 Td (-fg)Tj 0 Tc 76.3199 0 Td -1.49941 Tw (same as -foreground)Tj 0.000196075 Tc -76.3199 -14.4402 Td (-flat)Tj 0 Tc 76.3199 0 Td -1.49969 Tw (next argument sets the base color for bevels)Tj 0.000196775 Tc -76.3199 -14.4398 Td (-fn)Tj 0 Tc 76.3199 0 Td -1.49961 Tw (same as -font)Tj 0.000131226 Tc -76.3199 -14.4402 Td (-font)Tj 0 Tc 76.3199 0 Td -1.49961 Tw (next argument sets the default text font)Tj 0.00013178 Tc -76.3199 -14.4398 Td (-foreground)Tj 0 Tc 76.3199 0 Td -1.49962 Tw (next argument sets the foreground color)Tj 0.000139025 Tc -76.3199 -14.4398 Td (-geometry)Tj 0 Tc 76.3199 0 Td -1.49969 Tw (next argument sets the first window's position and size)Tj 0.000135694 Tc -76.3199 -14.4402 Td (-iconic)Tj 0 Tc 76.3199 0 Td -1.49962 Tw (starts up first window in iconic form)Tj 0.000144414 Tc -76.3199 -14.4398 Td (-malloc)Tj 0 Tc 76.3199 0 Td -1.49958 Tw (run with memory-management debugging on)Tj 0.000113747 Tc -76.3199 -14.4402 Td (-monochrome)Tj 0 Tc 76.3199 0 Td -1.49958 Tw (use monochrome style)Tj 0.000130335 Tc -76.3199 -14.4398 Td (-motif)Tj 0 Tc 76.3199 0 Td -1.49971 Tw (use Motif style)Tj 0.000177765 Tc -76.3199 -14.4398 Td (-name)Tj 0 Tc 76.3199 0 Td -1.49971 Tw (next argument sets the instance name of the session)Tj 0.00008447 Tc -76.3199 -14.4402 Td (-nodbuf)Tj 0 Tc 76.3199 0 Td -1.49957 Tw (do not double-buffer windows)Tj 0.00006909 Tc -76.3199 -14.4398 Td (-openlook)Tj 0 Tc 76.3199 0 Td -1.49958 Tw (use OpenLook style)Tj 0.00007693 Tc -76.3199 -14.4402 Td (-synchronous)Tj 0 Tc 76.3199 0 Td -1.49961 Tw (force synchronous operation with the window system)Tj 0.000135422 Tc -76.3199 -14.4398 Td (-title)Tj 0 Tc 76.3199 0 Td -1.49966 Tw (next argument sets the session's default title bar name)Tj 0.000102997 Tc -76.3199 -14.4398 Td (-visual)Tj 0 Tc 76.3199 0 Td -1.49974 Tw (next argument is visual class to use for windows)Tj 0.00007820 Tc -76.3199 -14.4402 Td (-visual_id)Tj 0 Tc 76.3199 0 Td -1.49977 Tw (next argument is visual id number to use for windows)Tj 0.000164032 Tc -76.3199 -14.4398 Td (-xrm)Tj 0 Tc 76.3199 0 Td -1.49956 Tw (next argument is ªname:valueº; sets named attribute)Tj -17.1602 -26.3199 Td -1.49944 Tw (Table 1.1:)Tj 59.3281 0 Td -1.49923 Tw (Predefined command-line options)Tj ET Q Q \n \n \n \n \n-1841\n+1842\n \n \n \n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -848,29 +848,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 708.3 Tm -0.728613 Tw (beveled or highlighted appearance when pressed, and a style for customization.)Tj 13.7398 TL 0.03029 Tw (The WidgetKit class provides a function to create a push button object; the)' -0.148012 Tw (implementation is free to compose what objects are necessary to provide the)' -0.740671 Tw (appropriate functionality. Each application normally creates a single WidgetKit)' 0.654414 Tw (object, which is typically a subclass defined for a particular look-and-feel)' 0.756301 Tw (such as OpenLook or Motif. The application can call the static function)' -1.26131 Tw (WidgetKit:::instance to return the object and therefore be unaware which specific)' -1.49941 Tw (look-and-feel is being used.)' /R35743448 18 Tf 41.2801 TL (1.4)' 35 0 Td -2.24922 Tw (A simple example)Tj /R35493912 12 Tf -35 -32.4 Td -1.26219 Tw (Figure 1.5 shows a simple InterViews application that display the text ªhi mom!º)Tj 13.7398 TL -1.33132 Tw (in a window. The application creates a session and runs it starting with a window)' -1.08386 Tw (containing the text over a background. The window is an ªapplication windowº,)' -0.346445 Tw (meaning it is recognized by other desktop services \(window manager, session)' -1.49956 Tw (manager\) as the main window for the application.)' 10.668 -14.6402 Td -1.09851 Tw (The window contains a background that contains a label. A background glyph)Tj -10.668 -13.7398 Td -0.935735 Tw (paints a given color behind its contents. The label's font and color are obtained)Tj -1.49952 Tw (from the default style for the session.)' 10.668 -14.6402 Td -0.519345 Tw (This application does not handle user input. It must therefore be terminated)Tj -10.668 -13.7398 Td -1.49961 Tw (externally, either from a window manager menu or through the system.)Tj /R35743448 18 Tf 41.2801 TL (1.5)' 35 0 Td -2.24863 Tw (Geometry management)Tj /R35493912 12 Tf -35 -32.4 Td -1.49848 Tw (See iv/src/examples/box[12].)Tj 0.00009982 Tc 379.2 -263.64 Td (1-9)Tj ET Q 1062.9 3395.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 127.626 323 Tm -1.38762 Tw (#include <IV-look/kit.h>)Tj 11.5199 TL -1.38652 Tw (#include <InterViews/background.h>)' -1.38712 Tw (#include <InterViews/session.h>)' -1.38703 Tw (#include <InterViews/window.h>)' 16.5199 TL -1.389 Tw (int main\(int argc, char** argv\) {)' 8.32969 -11.5199 Td -1.38898 Tw (Session* session = new Session\("Himom", argc, argv\);)Tj 11.5199 TL -1.38834 Tw (WidgetKit& kit = *WidgetKit::instance\(\);)' -1.38712 Tw (return session->run_window\()' 8.33008 -11.5203 Td -1.38785 Tw (new ApplicationWindow\()Tj 8.33008 -11.5199 Td -1.38836 Tw (new Background\()Tj 8.33008 -11.5199 Td -1.38787 Tw (kit.label\("hi mom!"\), kit.background\(\))Tj 0.000314236 Tc -8.33008 -11.5199 Td (\))Tj -8.33008 -11.5199 Td (\))Tj 0.000312805 Tc -8.33008 -11.5203 Td (\);)Tj 0.000156403 Tc -8.32969 -11.5199 Td (})Tj 0 Tc 84.4797 -16.5199 Td -1.38848 Tw (Figure 1.5:)Tj 56.1301 0 Td -1.38876 Tw (InterViews "hi mom!" program.)Tj ET Q 1062.9 1195.1 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 708.3 Tm -0.728613 Tw (beveled or highlighted appearance when pressed, and a style for customization.)Tj 13.7398 TL 0.03029 Tw (The WidgetKit class provides a function to create a push button object; the)' -0.148012 Tw (implementation is free to compose what objects are necessary to provide the)' -0.740671 Tw (appropriate functionality. Each application normally creates a single WidgetKit)' 0.654414 Tw (object, which is typically a subclass defined for a particular look-and-feel)' 0.756301 Tw (such as OpenLook or Motif. The application can call the static function)' -1.26131 Tw (WidgetKit:::instance to return the object and therefore be unaware which specific)' -1.49941 Tw (look-and-feel is being used.)' /R18609880 18 Tf 41.2801 TL (1.4)' 35 0 Td -2.24922 Tw (A simple example)Tj /R18360344 12 Tf -35 -32.4 Td -1.26219 Tw (Figure 1.5 shows a simple InterViews application that display the text ªhi mom!º)Tj 13.7398 TL -1.33132 Tw (in a window. The application creates a session and runs it starting with a window)' -1.08386 Tw (containing the text over a background. The window is an ªapplication windowº,)' -0.346445 Tw (meaning it is recognized by other desktop services \(window manager, session)' -1.49956 Tw (manager\) as the main window for the application.)' 10.668 -14.6402 Td -1.09851 Tw (The window contains a background that contains a label. A background glyph)Tj -10.668 -13.7398 Td -0.935735 Tw (paints a given color behind its contents. The label's font and color are obtained)Tj -1.49952 Tw (from the default style for the session.)' 10.668 -14.6402 Td -0.519345 Tw (This application does not handle user input. It must therefore be terminated)Tj -10.668 -13.7398 Td -1.49961 Tw (externally, either from a window manager menu or through the system.)Tj /R18609880 18 Tf 41.2801 TL (1.5)' 35 0 Td -2.24863 Tw (Geometry management)Tj /R18360344 12 Tf -35 -32.4 Td -1.49848 Tw (See iv/src/examples/box[12].)Tj 0.00009982 Tc 379.2 -263.64 Td (1-9)Tj ET Q 1062.9 3395.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 127.626 323 Tm -1.38762 Tw (#include <IV-look/kit.h>)Tj 11.5199 TL -1.38652 Tw (#include <InterViews/background.h>)' -1.38712 Tw (#include <InterViews/session.h>)' -1.38703 Tw (#include <InterViews/window.h>)' 16.5199 TL -1.389 Tw (int main\(int argc, char** argv\) {)' 8.32969 -11.5199 Td -1.38898 Tw (Session* session = new Session\("Himom", argc, argv\);)Tj 11.5199 TL -1.38834 Tw (WidgetKit& kit = *WidgetKit::instance\(\);)' -1.38712 Tw (return session->run_window\()' 8.33008 -11.5203 Td -1.38785 Tw (new ApplicationWindow\()Tj 8.33008 -11.5199 Td -1.38836 Tw (new Background\()Tj 8.33008 -11.5199 Td -1.38787 Tw (kit.label\("hi mom!"\), kit.background\(\))Tj 0.000314236 Tc -8.33008 -11.5199 Td (\))Tj -8.33008 -11.5199 Td (\))Tj 0.000312805 Tc -8.33008 -11.5203 Td (\);)Tj 0.000156403 Tc -8.32969 -11.5199 Td (})Tj 0 Tc 84.4797 -16.5199 Td -1.38848 Tw (Figure 1.5:)Tj 56.1301 0 Td -1.38876 Tw (InterViews "hi mom!" program.)Tj ET Q 1062.9 1195.1 3960 10 re f* Q \n \n \n \n \n 1465\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -907,27 +907,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 18 Tf 1 0 0 1 106.05 704.46 Tm (1.6)Tj 35 0 Td -2.24935 Tw (Creating a push button)Tj /R35493912 12 Tf -35 -32.4 Td -1.49842 Tw (See iv/src/examples/button[123].)Tj /R35743448 18 Tf 41.2801 TL (1.7)' 0.000154768 Tc 35 0 Td (Summary)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td 0.122891 Tw (This chapter has presented a broad overview of the InterViews architecture,)Tj 13.7402 TL -0.374881 Tw (introducing the basic concepts and giving some simple examples. In the next)' -1.31841 Tw (chapter, we focus on the semantics of glyphs as the smallest unit of user interface)' 0.00008070 Tc (construction.)' 0.000149727 Tc 379.2 -481.5 Td (1-)Tj 0 Tc 6.99609 0 Td (10)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 18 Tf 1 0 0 1 106.05 704.46 Tm (1.6)Tj 35 0 Td -2.24935 Tw (Creating a push button)Tj /R18360344 12 Tf -35 -32.4 Td -1.49842 Tw (See iv/src/examples/button[123].)Tj /R18609880 18 Tf 41.2801 TL (1.7)' 0.000154768 Tc 35 0 Td (Summary)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td 0.122891 Tw (This chapter has presented a broad overview of the InterViews architecture,)Tj 13.7402 TL -0.374881 Tw (introducing the basic concepts and giving some simple examples. In the next)' -1.31841 Tw (chapter, we focus on the semantics of glyphs as the smallest unit of user interface)' 0.00008070 Tc (construction.)' 0.000149727 Tc 379.2 -481.5 Td (1-)Tj 0 Tc 6.99609 0 Td (10)Tj ET Q Q \n \n \n \n \n 455\n \n \n \n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -964,29 +964,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 2)Tj 0.000134786 Tc 36.9602 TL (Glyphs)' 0 Tc /R35493912 12 Tf 28.3199 TL 0.919271 Tw (Glyphs are the basic building blocks for the presentation side of a user)' 13.7402 TL -1.38349 Tw (interface, providing a unified substrate for interactive objects, structured graphics,)' -0.120313 Tw (and formatted text. The glyph protocol supports geometry, drawing, picking,)' -0.0851562 Tw (composition, and structure. Glyph subclasses provide higher-level operations,)' -1.49965 Tw (such as input handling and update management.)' 10.668 -14.6398 Td 0.837967 Tw (The base class defines no storage and operations are passed contextual)Tj -10.668 -13.7402 Td -0.966797 Tw (information during rendering. Thus, glyphs may be shared and a glyph structure)Tj -0.774348 Tw (need not be strictly hierarchical; it may be a directed acyclic graph. Figure 2.1)' -1.49959 Tw (shows the glyph protocol.)' /R35743448 18 Tf 41.2801 TL (2.1)' 35 0 Td -2.24863 Tw (Geometry management)Tj /R35493912 12 Tf -35 -32.4 Td -1.50545 Tw (Glyph::request asks a glyph to specify its desired geometry. This operation should)Tj 13.7402 TL -0.023272 Tw (be fast to allow a composite glyph to compute rather than store the desired)' -1.27845 Tw (geometry of its components. Glyph::allocate notifies a glyph that a portion of the)' -1.22547 Tw (canvas has been allocated for it and returns an area that represents a conservative)' -1.49952 Tw (estimate of the actual area where the glyph will draw.)' /R35743448 18 Tf 41.2801 TL (2.2)' 0.000154768 Tc 35 0 Td (Drawing)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -1.40837 Tw (Glyph::draw displays the glyph on the canvas at the position and size specified by)Tj 13.7398 TL -1.49253 Tw (the allocation. No clipping or translation is implicit in this operation±the canvas is)' -0.808922 Tw (the entire drawing area and the allocation is in canvas coordinates. However, a)' -1.49971 Tw (composite glyph may set clipping on the canvas before drawing its children.)' 10.668 -14.6398 Td -0.483324 Tw (There is no guarantee that a call to draw will affect the screen immediately)Tj -10.668 -13.7402 Td -1.09643 Tw (because of the possibility \(indeed, likelihood\) that the canvas is double-buffered.)Tj 0.320195 Tw (Furthermore, drawing order is important for glyphs when they are partially)' -1.16842 Tw (transparent and are drawn in the same plane. A glyph's draw operation therefore)' -1.49969 Tw (should not be called directly, but rather is implicitly called during screen update.)' 10.668 -14.6398 Td -0.028449 Tw (Glyph::undraw notifies a glyph that its allocation is no longer valid. This)Tj -10.668 -13.7402 Td -0.694336 Tw (operation is generally a performance hint to free cached information associated)Tj -1.20391 Tw (with drawing or inhibit some operation that is unnecessary while the glyph is not)' -1.14689 Tw (visible, such as cursor blinking. Glyph::undraw is )' 0.00002035 Tc /R36187064 12 Tf 248.449 0 Td (not)Tj 0 Tc /R35493912 12 Tf 15.3363 0 Td -1.14693 Tw ( to be used when a glyph's)Tj -263.785 -13.7402 Td -0.232666 Tw (allocation changes; in that case, allocate and draw can simply be called with)Tj -1.49832 Tw (different parameters.)' 10.668 -14.6402 Td -1.21342 Tw (Glyph::print generates a representation of the glyph graph suitable for printing.)Tj -10.668 -13.7398 Td 0.922656 Tw (The canvas and printer rendering interfaces are identical, and the default)Tj 0.000149727 Tc 372.72 -25.6801 Td (2-)Tj 0 Tc 12.9961 0 Td (1)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 2)Tj 0.000134786 Tc 36.9602 TL (Glyphs)' 0 Tc /R18360344 12 Tf 28.3199 TL 0.919271 Tw (Glyphs are the basic building blocks for the presentation side of a user)' 13.7402 TL -1.38349 Tw (interface, providing a unified substrate for interactive objects, structured graphics,)' -0.120313 Tw (and formatted text. The glyph protocol supports geometry, drawing, picking,)' -0.0851562 Tw (composition, and structure. Glyph subclasses provide higher-level operations,)' -1.49965 Tw (such as input handling and update management.)' 10.668 -14.6398 Td 0.837967 Tw (The base class defines no storage and operations are passed contextual)Tj -10.668 -13.7402 Td -0.966797 Tw (information during rendering. Thus, glyphs may be shared and a glyph structure)Tj -0.774348 Tw (need not be strictly hierarchical; it may be a directed acyclic graph. Figure 2.1)' -1.49959 Tw (shows the glyph protocol.)' /R18609880 18 Tf 41.2801 TL (2.1)' 35 0 Td -2.24863 Tw (Geometry management)Tj /R18360344 12 Tf -35 -32.4 Td -1.50545 Tw (Glyph::request asks a glyph to specify its desired geometry. This operation should)Tj 13.7402 TL -0.023272 Tw (be fast to allow a composite glyph to compute rather than store the desired)' -1.27845 Tw (geometry of its components. Glyph::allocate notifies a glyph that a portion of the)' -1.22547 Tw (canvas has been allocated for it and returns an area that represents a conservative)' -1.49952 Tw (estimate of the actual area where the glyph will draw.)' /R18609880 18 Tf 41.2801 TL (2.2)' 0.000154768 Tc 35 0 Td (Drawing)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -1.40837 Tw (Glyph::draw displays the glyph on the canvas at the position and size specified by)Tj 13.7398 TL -1.49253 Tw (the allocation. No clipping or translation is implicit in this operation±the canvas is)' -0.808922 Tw (the entire drawing area and the allocation is in canvas coordinates. However, a)' -1.49971 Tw (composite glyph may set clipping on the canvas before drawing its children.)' 10.668 -14.6398 Td -0.483324 Tw (There is no guarantee that a call to draw will affect the screen immediately)Tj -10.668 -13.7402 Td -1.09643 Tw (because of the possibility \(indeed, likelihood\) that the canvas is double-buffered.)Tj 0.320195 Tw (Furthermore, drawing order is important for glyphs when they are partially)' -1.16842 Tw (transparent and are drawn in the same plane. A glyph's draw operation therefore)' -1.49969 Tw (should not be called directly, but rather is implicitly called during screen update.)' 10.668 -14.6398 Td -0.028449 Tw (Glyph::undraw notifies a glyph that its allocation is no longer valid. This)Tj -10.668 -13.7402 Td -0.694336 Tw (operation is generally a performance hint to free cached information associated)Tj -1.20391 Tw (with drawing or inhibit some operation that is unnecessary while the glyph is not)' -1.14689 Tw (visible, such as cursor blinking. Glyph::undraw is )' 0.00002035 Tc /R19053496 12 Tf 248.449 0 Td (not)Tj 0 Tc /R18360344 12 Tf 15.3363 0 Td -1.14693 Tw ( to be used when a glyph's)Tj -263.785 -13.7402 Td -0.232666 Tw (allocation changes; in that case, allocate and draw can simply be called with)Tj -1.49832 Tw (different parameters.)' 10.668 -14.6402 Td -1.21342 Tw (Glyph::print generates a representation of the glyph graph suitable for printing.)Tj -10.668 -13.7398 Td 0.922656 Tw (The canvas and printer rendering interfaces are identical, and the default)Tj 0.000149727 Tc 372.72 -25.6801 Td (2-)Tj 0 Tc 12.9961 0 Td (1)Tj ET Q Q \n \n \n \n \n-1711\n+1712\n \n \n \n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -1023,27 +1023,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 387.11 Tm -0.772063 Tw (implementation of print is simply to call draw. Most glyphs therefore need not)Tj 13.7402 TL -0.293939 Tw (define a print operation. The reason for a distinct print operation is to allow)' -0.11969 Tw (a glyph to use different rendering requests for the screen and a printer. For)' -0.69022 Tw (example, a glyph might use 3D requests to the screen, or might compute more)' -1.49944 Tw (precise output for printing.)' 10.668 -14.6398 Td 0.569139 Tw (Glyph::pick finds the glyphs that intersect a point or rectangle specified)Tj -10.668 -13.7402 Td 1.37893 Tw (in canvas-relative coordinates. Conceptually, picking is like drawing and)Tj 1.40691 Tw (determining what glyphs intersect the specified point or rectangle. The)' -0.312128 Tw (coordinates are contained in the hit parameter. The depth parameter specifies)' -1.12151 Tw (which level in the Hit object to store the intersecting glyphs. When pick returns,)' -1.4996 Tw (the Hit parameter contains the glyphs that were hit.)' 10.668 -14.6402 Td -1.40131 Tw (Figure 2.2 shows the hit protocol. A hit object may be constructed with a point,)Tj -10.668 -13.7398 Td -1.39364 Tw (a rectangle, or an event. In the case of the event, the event pointer coordinates are)Tj -1.4997 Tw (used to detect intersection and glyphs can associate a handler with the pick result.)' 10.668 -14.6398 Td -0.334627 Tw (Hit::event, Hit::left, Hit::bottom, Hit::right, Hit::top return information about)Tj -10.668 -13.7398 Td -1.03692 Tw (the specified hit area. Hit::event returns nil if the point or rectangle constructors)Tj -1.49907 Tw (were used.)' 10.668 -14.6398 Td -1.33034 Tw (Hit::push_transform, Hit::transform, and Hit::pop_transform modify the current)Tj -10.668 -13.7402 Td -1.21318 Tw (intersection area for picking. These operations are just like the canvas operations)Tj -1.49974 Tw (with the same names except they apply to the hit information instead of a canvas.)' 10.668 -14.6402 Td 0.351346 Tw (Glyphs record information in a hit object with Hit::begin, Hit::target and)Tj ET Q 1060.5 7146.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 127.386 698.12 Tm -1.38856 Tw (typedef long GlyphIndex;)Tj 11.5199 TL -1.38845 Tw (typedef unsigned int GlyphBreakType;)' 23.0398 TL -1.38898 Tw (interface Glyph : Resource {)' 8.33008 -11.5203 Td -1.38826 Tw (void request\(Requisition&\) const;)Tj 11.5199 TL -1.38864 Tw (void allocate\(Canvas*, const Allocation&, Extension&\);)' -1.38871 Tw (void draw\(Canvas*, const Allocation&\) const;)' -1.38828 Tw (void undraw\(\);)' -1.38858 Tw (void print\(Printer*, const Allocation&\) const;)' -1.38889 Tw (void pick\(Canvas*, const Allocation&, int depth, Hit&\);)' 23.0398 TL -1.38878 Tw (enum { no_break, pre_break, in_break, post_break };)' 11.5199 TL -1.38809 Tw (Glyph* compose\(GlyphBreakType\) const;)' 23.0402 TL -1.38774 Tw (void append\(Glyph*\);)' 11.5199 TL -1.38758 Tw (void prepend\(Glyph*\);)' -1.38822 Tw (void insert\(GlyphIndex, Glyph*\);)' -1.38734 Tw (void remove\(GlyphIndex\);)' -1.38818 Tw (void replace\(GlyphIndex, Glyph*\);)' -1.38726 Tw (void change\(GlyphIndext\);)' -1.38853 Tw (GlyphIndex count\(\) const;)' -1.38803 Tw (Glyph* component\(GlyphIndex\) const;)' -1.38826 Tw (void allotment\(GlyphIndext, DimensionName, Allotment&\) const;)' -8.33008 -11.5199 Td -1.3893 Tw (}; )Tj 119.7 -16.5203 Td -1.38848 Tw (Figure 2.1:)Tj 56.1301 0 Td -1.38844 Tw (Glyph protocol)Tj ET Q 1060.5 4084.7 3960 10 re f* q 10 0 0 10 0 0 cm BT 0.000149727 Tc /R35493912 12 Tf 1 0 0 1 478.29 73.9 Tm (2-)Tj 0 Tc 12.9961 0 Td (2)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 387.11 Tm -0.772063 Tw (implementation of print is simply to call draw. Most glyphs therefore need not)Tj 13.7402 TL -0.293939 Tw (define a print operation. The reason for a distinct print operation is to allow)' -0.11969 Tw (a glyph to use different rendering requests for the screen and a printer. For)' -0.69022 Tw (example, a glyph might use 3D requests to the screen, or might compute more)' -1.49944 Tw (precise output for printing.)' 10.668 -14.6398 Td 0.569139 Tw (Glyph::pick finds the glyphs that intersect a point or rectangle specified)Tj -10.668 -13.7402 Td 1.37893 Tw (in canvas-relative coordinates. Conceptually, picking is like drawing and)Tj 1.40691 Tw (determining what glyphs intersect the specified point or rectangle. The)' -0.312128 Tw (coordinates are contained in the hit parameter. The depth parameter specifies)' -1.12151 Tw (which level in the Hit object to store the intersecting glyphs. When pick returns,)' -1.4996 Tw (the Hit parameter contains the glyphs that were hit.)' 10.668 -14.6402 Td -1.40131 Tw (Figure 2.2 shows the hit protocol. A hit object may be constructed with a point,)Tj -10.668 -13.7398 Td -1.39364 Tw (a rectangle, or an event. In the case of the event, the event pointer coordinates are)Tj -1.4997 Tw (used to detect intersection and glyphs can associate a handler with the pick result.)' 10.668 -14.6398 Td -0.334627 Tw (Hit::event, Hit::left, Hit::bottom, Hit::right, Hit::top return information about)Tj -10.668 -13.7398 Td -1.03692 Tw (the specified hit area. Hit::event returns nil if the point or rectangle constructors)Tj -1.49907 Tw (were used.)' 10.668 -14.6398 Td -1.33034 Tw (Hit::push_transform, Hit::transform, and Hit::pop_transform modify the current)Tj -10.668 -13.7402 Td -1.21318 Tw (intersection area for picking. These operations are just like the canvas operations)Tj -1.49974 Tw (with the same names except they apply to the hit information instead of a canvas.)' 10.668 -14.6402 Td 0.351346 Tw (Glyphs record information in a hit object with Hit::begin, Hit::target and)Tj ET Q 1060.5 7146.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 127.386 698.12 Tm -1.38856 Tw (typedef long GlyphIndex;)Tj 11.5199 TL -1.38845 Tw (typedef unsigned int GlyphBreakType;)' 23.0398 TL -1.38898 Tw (interface Glyph : Resource {)' 8.33008 -11.5203 Td -1.38826 Tw (void request\(Requisition&\) const;)Tj 11.5199 TL -1.38864 Tw (void allocate\(Canvas*, const Allocation&, Extension&\);)' -1.38871 Tw (void draw\(Canvas*, const Allocation&\) const;)' -1.38828 Tw (void undraw\(\);)' -1.38858 Tw (void print\(Printer*, const Allocation&\) const;)' -1.38889 Tw (void pick\(Canvas*, const Allocation&, int depth, Hit&\);)' 23.0398 TL -1.38878 Tw (enum { no_break, pre_break, in_break, post_break };)' 11.5199 TL -1.38809 Tw (Glyph* compose\(GlyphBreakType\) const;)' 23.0402 TL -1.38774 Tw (void append\(Glyph*\);)' 11.5199 TL -1.38758 Tw (void prepend\(Glyph*\);)' -1.38822 Tw (void insert\(GlyphIndex, Glyph*\);)' -1.38734 Tw (void remove\(GlyphIndex\);)' -1.38818 Tw (void replace\(GlyphIndex, Glyph*\);)' -1.38726 Tw (void change\(GlyphIndext\);)' -1.38853 Tw (GlyphIndex count\(\) const;)' -1.38803 Tw (Glyph* component\(GlyphIndex\) const;)' -1.38826 Tw (void allotment\(GlyphIndext, DimensionName, Allotment&\) const;)' -8.33008 -11.5199 Td -1.3893 Tw (}; )Tj 119.7 -16.5203 Td -1.38848 Tw (Figure 2.1:)Tj 56.1301 0 Td -1.38844 Tw (Glyph protocol)Tj ET Q 1060.5 4084.7 3960 10 re f* q 10 0 0 10 0 0 cm BT 0.000149727 Tc /R18360344 12 Tf 1 0 0 1 478.29 73.9 Tm (2-)Tj 0 Tc 12.9961 0 Td (2)Tj ET Q Q \n \n \n \n \n 1537\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -1080,27 +1080,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 348.15 Tm 0.112332 Tw (Hit::end. Hit::target indicates that a glyph's output intersects the hit region.)Tj 13.7398 TL -0.691647 Tw (Hit::begin and Hit::end are used by composite glyphs that should be on the hit)' -0.565929 Tw (list if and only if one of their components calls Hit::target. The parameters to)' -1.40085 Tw (Hit::begin and Hit::target have the same meaning. The depth is the level in the hit)' -1.399 Tw (list where the information should be stored. The glyph is the hit glyph. The index)' -0.706829 Tw (is additional information about the hit. For a composite glyph, this is typically)' -0.584812 Tw (the index of the hit child. Hit::remove and Hit::retarget modify the current hit)' 0.00009251 Tc (information.)' 0 Tc 10.668 -14.6398 Td -0.345602 Tw (The remaining hit operations return information about a pick. The result is)Tj -10.668 -13.7402 Td -0.034487 Tw (a list of paths, each of which contains a list of glyphs terminating with the)Tj -1.30486 Tw (glyphs that would draw through the pick region. Hit::count returns the number of)' -1.17617 Tw (paths. Hit::depth returns the index of the last glyph in a specified path. The path)' -1.33278 Tw (corresponding to the top-most glyph is in position zero. Hit::target and Hit::index)' -1.4996 Tw (return the information for a given path and depth.)' 10.668 -14.6402 Td -0.737037 Tw (If a pick is done on a hit object constructed from an event, and one or more)Tj -10.668 -13.7398 Td -1.18859 Tw (glyphs find the event of interest, they will associate a handler with the hit object.)Tj -1.49963 Tw (Hit::handler returns the top-most, deepest handler, or nil if there is none.)' 0.000149727 Tc 372.24 -52.6102 Td (2-)Tj 0 Tc 12.9961 0 Td (3)Tj ET Q 1072.5 6842 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 128.586 667.64 Tm -1.38887 Tw (interface Hit {)Tj 8.33008 -11.5199 Td -1.38808 Tw (Hit\(const Event*\);)Tj 11.5199 TL -1.38887 Tw (Hit\(Coord x, Coord y\);)' -1.38881 Tw (Hit\(Coord left, Coord bottom, Coord right, Coord top\);)' 16.5199 TL -1.38876 Tw (const Event* event\(\) const;)' 11.5203 TL -1.38884 Tw (Coord left\(\) const, bottom\(\) const, right\(\) const, top\(\) const;)' 16.5199 TL -1.38734 Tw (void push_transform\(\);)' 11.5199 TL -1.38785 Tw (void transform\(const Transformer&\);)' -1.38734 Tw (void pop_transform\(\);)' 16.5199 TL -1.38888 Tw (void begin\(int depth, Glyph*, GlyphIndex, Handler* = nil\);)' 11.5203 TL -1.38884 Tw (void target\(int depth, Glyph*, GlyphIndex, Handler* = nil\);)' -1.3884 Tw (void end\(\);)' -1.38886 Tw (void remove\(int depth, GlyphIndex target = 0\);)' -1.38816 Tw (void retarget\()' 8.33008 -11.5199 Td -1.38906 Tw (int depth, Glyph*, GlyphIndex, Handler* = nil, GlyphIndex = 0)Tj 0.000312805 Tc -8.33008 -11.5203 Td (\);)Tj 0 Tc 16.5199 TL -1.38852 Tw (boolean any\(\) const;)' 11.5199 TL -1.3886 Tw (int count\(\) const;)' -1.38884 Tw (int depth\(GlyphIndex target = 0\) const;)' -1.38887 Tw (Glyph* target\(int depth, GlyphIndex target = 0\) const;)' -1.38887 Tw (GlyphIndex index\(int depth, GlyphIndex = 0\) const;)' -1.38823 Tw (Handler* handler\(\) const;)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 111.09 -16.5199 Td -1.38848 Tw (Figure 2.2:)Tj 56.1297 0 Td -1.38892 Tw (Hit class interface.)Tj ET Q 1072.5 3695.1 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 348.15 Tm 0.112332 Tw (Hit::end. Hit::target indicates that a glyph's output intersects the hit region.)Tj 13.7398 TL -0.691647 Tw (Hit::begin and Hit::end are used by composite glyphs that should be on the hit)' -0.565929 Tw (list if and only if one of their components calls Hit::target. The parameters to)' -1.40085 Tw (Hit::begin and Hit::target have the same meaning. The depth is the level in the hit)' -1.399 Tw (list where the information should be stored. The glyph is the hit glyph. The index)' -0.706829 Tw (is additional information about the hit. For a composite glyph, this is typically)' -0.584812 Tw (the index of the hit child. Hit::remove and Hit::retarget modify the current hit)' 0.00009251 Tc (information.)' 0 Tc 10.668 -14.6398 Td -0.345602 Tw (The remaining hit operations return information about a pick. The result is)Tj -10.668 -13.7402 Td -0.034487 Tw (a list of paths, each of which contains a list of glyphs terminating with the)Tj -1.30486 Tw (glyphs that would draw through the pick region. Hit::count returns the number of)' -1.17617 Tw (paths. Hit::depth returns the index of the last glyph in a specified path. The path)' -1.33278 Tw (corresponding to the top-most glyph is in position zero. Hit::target and Hit::index)' -1.4996 Tw (return the information for a given path and depth.)' 10.668 -14.6402 Td -0.737037 Tw (If a pick is done on a hit object constructed from an event, and one or more)Tj -10.668 -13.7398 Td -1.18859 Tw (glyphs find the event of interest, they will associate a handler with the hit object.)Tj -1.49963 Tw (Hit::handler returns the top-most, deepest handler, or nil if there is none.)' 0.000149727 Tc 372.24 -52.6102 Td (2-)Tj 0 Tc 12.9961 0 Td (3)Tj ET Q 1072.5 6842 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 128.586 667.64 Tm -1.38887 Tw (interface Hit {)Tj 8.33008 -11.5199 Td -1.38808 Tw (Hit\(const Event*\);)Tj 11.5199 TL -1.38887 Tw (Hit\(Coord x, Coord y\);)' -1.38881 Tw (Hit\(Coord left, Coord bottom, Coord right, Coord top\);)' 16.5199 TL -1.38876 Tw (const Event* event\(\) const;)' 11.5203 TL -1.38884 Tw (Coord left\(\) const, bottom\(\) const, right\(\) const, top\(\) const;)' 16.5199 TL -1.38734 Tw (void push_transform\(\);)' 11.5199 TL -1.38785 Tw (void transform\(const Transformer&\);)' -1.38734 Tw (void pop_transform\(\);)' 16.5199 TL -1.38888 Tw (void begin\(int depth, Glyph*, GlyphIndex, Handler* = nil\);)' 11.5203 TL -1.38884 Tw (void target\(int depth, Glyph*, GlyphIndex, Handler* = nil\);)' -1.3884 Tw (void end\(\);)' -1.38886 Tw (void remove\(int depth, GlyphIndex target = 0\);)' -1.38816 Tw (void retarget\()' 8.33008 -11.5199 Td -1.38906 Tw (int depth, Glyph*, GlyphIndex, Handler* = nil, GlyphIndex = 0)Tj 0.000312805 Tc -8.33008 -11.5203 Td (\);)Tj 0 Tc 16.5199 TL -1.38852 Tw (boolean any\(\) const;)' 11.5199 TL -1.3886 Tw (int count\(\) const;)' -1.38884 Tw (int depth\(GlyphIndex target = 0\) const;)' -1.38887 Tw (Glyph* target\(int depth, GlyphIndex target = 0\) const;)' -1.38887 Tw (GlyphIndex index\(int depth, GlyphIndex = 0\) const;)' -1.38823 Tw (Handler* handler\(\) const;)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 111.09 -16.5199 Td -1.38848 Tw (Figure 2.2:)Tj 56.1297 0 Td -1.38892 Tw (Hit class interface.)Tj ET Q 1072.5 3695.1 3960 10 re f* Q \n \n \n \n \n 1384\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -1137,29 +1137,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 18 Tf 1 0 0 1 106.05 704.46 Tm (2.3)Tj 0.000127619 Tc 35 0 Td (Composition)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -1.35571 Tw (BreakType defines the choices for how a composite glyph might break a group of)Tj 13.7402 TL -1.27258 Tw (glyphs in a layout. The break may occur before a glyph \(pre_break\), in the glyph)' -1.49941 Tw (\(in_break\), or after the glyph \(post_break\).)' 10.668 -14.6402 Td -0.886215 Tw (Glyph::compose returns a new glyph that should be used to replace the target)Tj -10.668 -13.7398 Td 0.458522 Tw (glyph when the break occurs. For example, discretionary white space in a)Tj -1.49969 Tw (document will turn into zero-size glue if a line-break or page-break occurs on it. )' /R35743448 18 Tf 41.2801 TL (2.4)' 0.000208537 Tc 35 0 Td (Structure)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -1.46969 Tw (Several operations are provided to manipulate the list of components that make up)Tj 13.7402 TL -0.894038 Tw (a composite glyph. Primitive glyphs ignore these operations, while monoglyphs)' -1.44592 Tw (pass the operation through to their body. A monoglyph is therefore ``transparent'')' -1.57499 Tw (with respect to structure, allowing one to put a monoglyph around a composite and)' -1.59521 Tw (pass the result to another object that manipulates the components of the composite.)' 10.668 -14.6398 Td -0.0881056 Tw (Glyph::append \(prepend\) adds a given glyph to the end \(beginning\) of the)Tj -10.668 -13.7402 Td -0.97445 Tw (component list. Glyph::insert adds a given glyph at a specified index in the list.)Tj -1.22356 Tw (Glyph::remove removes the glyph at the specified index. Glyph::replace replaces)' -0.771594 Tw (the glyph at the specified index with the given glyph. Glyph::change notifies a)' -1.43849 Tw (glyph that its component at the given index has changed, and therefore it might be)' -1.49926 Tw (necessary to reallocate it.)' 10.668 -14.6402 Td 2.75957 Tw (Glyph::count returns the number of glyphs in its component list.)Tj -10.668 -13.7398 Td -0.16614 Tw (Glyph::component returns the glyph in its component list at the given index.)Tj -1.36525 Tw (Glyph::allotment returns the allocation information in the given dimension for the)' -1.49972 Tw (glyph at the given index in its component list.)' /R35743448 18 Tf 41.2801 TL (2.5)' 0.000141144 Tc 35 0 Td (Requisitions)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td 0.786325 Tw (Glyphs define their geometric needs with a )Tj 0.00005479 Tc /R36187064 12 Tf 241.632 0 Td (requisition)Tj 0 Tc /R35493912 12 Tf 52.0078 0 Td 0.786364 Tw (, which specifies a)Tj 0.000119296 Tc /R36187064 12 Tf -293.64 -13.7398 Td (requirement)Tj 0 Tc /R35493912 12 Tf 58.6559 0 Td -1.31517 Tw ( in each dimension. Figure 2.3 shows the requisition and requirement)Tj -58.6559 -13.7398 Td -1.49857 Tw (class interfaces.)Tj 10.668 -14.6402 Td -0.0650803 Tw (Requisition::penalty is overloaded to set or get the penalty associated with)Tj -10.668 -13.7398 Td -0.823699 Tw (choosing a break at the position defined by the requisition. Requisition::require)Tj 13.7402 TL -0.243421 Tw (sets a requirement in a given dimension. Requisition::requirement returns the)' -1.49947 Tw (requirement for a given dimension.)' 10.668 -14.6398 Td 0.539734 Tw (A requirement consists of a natural size, stretchability, shrinkability, and)Tj -10.668 -13.7402 Td 0.00134145 Tw (alignment. The maximum size is the natural size plus the stretchability; the)Tj -0.6665 Tw (minimum is the natural minus the shrinkability. It is possible to have negative)' -0.997932 Tw (minimum sizes. The alignment is a fraction that indicates the origin of the area.)' 0.02844 Tw (An alignment of zero means the origin is at the lower coordinate value; an)' 0.000149727 Tc 372.24 -34.1 Td (2-)Tj 0 Tc 12.9961 0 Td (4)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 18 Tf 1 0 0 1 106.05 704.46 Tm (2.3)Tj 0.000127619 Tc 35 0 Td (Composition)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -1.35571 Tw (BreakType defines the choices for how a composite glyph might break a group of)Tj 13.7402 TL -1.27258 Tw (glyphs in a layout. The break may occur before a glyph \(pre_break\), in the glyph)' -1.49941 Tw (\(in_break\), or after the glyph \(post_break\).)' 10.668 -14.6402 Td -0.886215 Tw (Glyph::compose returns a new glyph that should be used to replace the target)Tj -10.668 -13.7398 Td 0.458522 Tw (glyph when the break occurs. For example, discretionary white space in a)Tj -1.49969 Tw (document will turn into zero-size glue if a line-break or page-break occurs on it. )' /R18609880 18 Tf 41.2801 TL (2.4)' 0.000208537 Tc 35 0 Td (Structure)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -1.46969 Tw (Several operations are provided to manipulate the list of components that make up)Tj 13.7402 TL -0.894038 Tw (a composite glyph. Primitive glyphs ignore these operations, while monoglyphs)' -1.44592 Tw (pass the operation through to their body. A monoglyph is therefore ``transparent'')' -1.57499 Tw (with respect to structure, allowing one to put a monoglyph around a composite and)' -1.59521 Tw (pass the result to another object that manipulates the components of the composite.)' 10.668 -14.6398 Td -0.0881056 Tw (Glyph::append \(prepend\) adds a given glyph to the end \(beginning\) of the)Tj -10.668 -13.7402 Td -0.97445 Tw (component list. Glyph::insert adds a given glyph at a specified index in the list.)Tj -1.22356 Tw (Glyph::remove removes the glyph at the specified index. Glyph::replace replaces)' -0.771594 Tw (the glyph at the specified index with the given glyph. Glyph::change notifies a)' -1.43849 Tw (glyph that its component at the given index has changed, and therefore it might be)' -1.49926 Tw (necessary to reallocate it.)' 10.668 -14.6402 Td 2.75957 Tw (Glyph::count returns the number of glyphs in its component list.)Tj -10.668 -13.7398 Td -0.16614 Tw (Glyph::component returns the glyph in its component list at the given index.)Tj -1.36525 Tw (Glyph::allotment returns the allocation information in the given dimension for the)' -1.49972 Tw (glyph at the given index in its component list.)' /R18609880 18 Tf 41.2801 TL (2.5)' 0.000141144 Tc 35 0 Td (Requisitions)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td 0.786325 Tw (Glyphs define their geometric needs with a )Tj 0.00005479 Tc /R19053496 12 Tf 241.632 0 Td (requisition)Tj 0 Tc /R18360344 12 Tf 52.0078 0 Td 0.786364 Tw (, which specifies a)Tj 0.000119296 Tc /R19053496 12 Tf -293.64 -13.7398 Td (requirement)Tj 0 Tc /R18360344 12 Tf 58.6559 0 Td -1.31517 Tw ( in each dimension. Figure 2.3 shows the requisition and requirement)Tj -58.6559 -13.7398 Td -1.49857 Tw (class interfaces.)Tj 10.668 -14.6402 Td -0.0650803 Tw (Requisition::penalty is overloaded to set or get the penalty associated with)Tj -10.668 -13.7398 Td -0.823699 Tw (choosing a break at the position defined by the requisition. Requisition::require)Tj 13.7402 TL -0.243421 Tw (sets a requirement in a given dimension. Requisition::requirement returns the)' -1.49947 Tw (requirement for a given dimension.)' 10.668 -14.6398 Td 0.539734 Tw (A requirement consists of a natural size, stretchability, shrinkability, and)Tj -10.668 -13.7402 Td 0.00134145 Tw (alignment. The maximum size is the natural size plus the stretchability; the)Tj -0.6665 Tw (minimum is the natural minus the shrinkability. It is possible to have negative)' -0.997932 Tw (minimum sizes. The alignment is a fraction that indicates the origin of the area.)' 0.02844 Tw (An alignment of zero means the origin is at the lower coordinate value; an)' 0.000149727 Tc 372.24 -34.1 Td (2-)Tj 0 Tc 12.9961 0 Td (4)Tj ET Q Q \n \n \n \n \n 1615\n \n \n \n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -1196,31 +1196,31 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 400.39 Tm -1.49969 Tw (alignment of one means it is at the upper coordinate value.)Tj 10.668 -14.6398 Td -1.01111 Tw (There are four constructors for requirement: with no parameters, which makes)Tj -10.668 -13.7398 Td -1.07368 Tw (the natural size undefined and the other fields zero; with a single coordinate that)Tj 13.7402 TL -1.16313 Tw (defines the natural size and makes the other fields zero; with explicit coordinates)' -0.233171 Tw (for the natural size, stretchability, and shrinkability, and a float value for the)' -1.23947 Tw (alignment; and with explicit coordinates for specifying the distances on each side)' -1.49954 Tw (of the origin.)' 10.668 -14.6398 Td 0.254759 Tw (Requirement::equals compares two requirements \(the target object and the)Tj -10.668 -13.7402 Td -0.0516052 Tw (argument\) using a given tolerance for the individual coordinate comparisons.)Tj -0.0298526 Tw (Requirement::defined returns whether the natural size has been defined. The)' 0.419727 Tw (overloaded functions natural, stretch, shrink, and alignment set and get the)' -1.49893 Tw (respective values.)' /R35743448 18 Tf 41.2801 TL (2.6)' 0.000115134 Tc 35 0 Td (Allocations)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.215811 Tw (The actual size a glyph is given is defined by an )Tj 0.00005112 Tc /R36187064 12 Tf 261.876 0 Td (allocation)Tj 0 Tc /R35493912 12 Tf 48.6719 0 Td -0.215517 Tw (, which specifies)Tj -310.548 -13.7398 Td -0.651017 Tw (an )Tj 0.00009410 Tc /R36187064 12 Tf 16.0258 0 Td (allotment)Tj 0 Tc /R35493912 12 Tf 45.3359 0 Td -0.650892 Tw ( in each dimension. Figure 2.4 shows the allocation and allotment)Tj -61.3617 -13.7402 Td -1.19361 Tw (class interfaces. An allotment specifies one dimension of an allocation with three)Tj 13.7398 TL -0.78063 Tw (values: an origin, a span, and an alignment. The origin is a position within the)' -0.756991 Tw (allotment and the span is the size of the allotment. The alignment is a fraction)' -0.956338 Tw (specifying the position of the origin. For example, if the origin is 1, span is 10,)' 0.000149727 Tc 372.24 -31.1699 Td (2-)Tj 0 Tc 12.9961 0 Td (5)Tj ET Q 1072.5 7149.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 128.586 698.36 Tm -1.38846 Tw (interface Requisition {)Tj 8.33008 -11.5203 Td -1.38797 Tw (void penalty\(int\);)Tj 11.5199 TL -1.38852 Tw (int penalty\(\) const;)' -1.38864 Tw (boolean equals\(const Requisition&, float epsilon\) const;)' -1.38816 Tw (void require\(DimensionName, const Requirement&\);)' -1.388 Tw (const Requirement& requirement\(DimensionName\) const;)' -1.38539 Tw (Requirement& requirement\(DimensionName\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38829 Tw (interface Requirement {)' 8.33008 -11.5199 Td -1.3866 Tw (Requirement\(Coord natural\);)Tj 11.5199 TL -1.38863 Tw (Requirement\(Coord natural, Coord stretch, Coord shrink, float\);)' 0.000233968 Tc (Requirement\()' 0 Tc 8.33008 -11.5199 Td -1.38868 Tw (Coord natural_lead, Coord max_lead, Coord min_lead,)Tj -1.38854 Tw (Coord natural_trail, Coord max_trail, Coord min_trail)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc 16.5199 TL -1.38867 Tw (boolean equals\(const Requirement&, float epsilon\) const;)' 11.5203 TL -1.3885 Tw (boolean defined\(\) const;)' -1.38793 Tw (void natural\(Coord\), stretch\(Coord\), shrink\(Coord\);)' -1.38876 Tw (Coord natural\(\) const, stretch\(\) const, shrink\(\) const;)' -1.38738 Tw (void alignment\(float\);)' -1.38823 Tw (float alignment\(\) const;)' 0.000233889 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 66.625 -16.5199 Td -1.38848 Tw (Figure 2.3:)Tj 56.1301 0 Td -1.38895 Tw (Requisition and Requirement classes. )Tj ET Q 1072.5 4217.5 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 400.39 Tm -1.49969 Tw (alignment of one means it is at the upper coordinate value.)Tj 10.668 -14.6398 Td -1.01111 Tw (There are four constructors for requirement: with no parameters, which makes)Tj -10.668 -13.7398 Td -1.07368 Tw (the natural size undefined and the other fields zero; with a single coordinate that)Tj 13.7402 TL -1.16313 Tw (defines the natural size and makes the other fields zero; with explicit coordinates)' -0.233171 Tw (for the natural size, stretchability, and shrinkability, and a float value for the)' -1.23947 Tw (alignment; and with explicit coordinates for specifying the distances on each side)' -1.49954 Tw (of the origin.)' 10.668 -14.6398 Td 0.254759 Tw (Requirement::equals compares two requirements \(the target object and the)Tj -10.668 -13.7402 Td -0.0516052 Tw (argument\) using a given tolerance for the individual coordinate comparisons.)Tj -0.0298526 Tw (Requirement::defined returns whether the natural size has been defined. The)' 0.419727 Tw (overloaded functions natural, stretch, shrink, and alignment set and get the)' -1.49893 Tw (respective values.)' /R18609880 18 Tf 41.2801 TL (2.6)' 0.000115134 Tc 35 0 Td (Allocations)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.215811 Tw (The actual size a glyph is given is defined by an )Tj 0.00005112 Tc /R19053496 12 Tf 261.876 0 Td (allocation)Tj 0 Tc /R18360344 12 Tf 48.6719 0 Td -0.215517 Tw (, which specifies)Tj -310.548 -13.7398 Td -0.651017 Tw (an )Tj 0.00009410 Tc /R19053496 12 Tf 16.0258 0 Td (allotment)Tj 0 Tc /R18360344 12 Tf 45.3359 0 Td -0.650892 Tw ( in each dimension. Figure 2.4 shows the allocation and allotment)Tj -61.3617 -13.7402 Td -1.19361 Tw (class interfaces. An allotment specifies one dimension of an allocation with three)Tj 13.7398 TL -0.78063 Tw (values: an origin, a span, and an alignment. The origin is a position within the)' -0.756991 Tw (allotment and the span is the size of the allotment. The alignment is a fraction)' -0.956338 Tw (specifying the position of the origin. For example, if the origin is 1, span is 10,)' 0.000149727 Tc 372.24 -31.1699 Td (2-)Tj 0 Tc 12.9961 0 Td (5)Tj ET Q 1072.5 7149.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 128.586 698.36 Tm -1.38846 Tw (interface Requisition {)Tj 8.33008 -11.5203 Td -1.38797 Tw (void penalty\(int\);)Tj 11.5199 TL -1.38852 Tw (int penalty\(\) const;)' -1.38864 Tw (boolean equals\(const Requisition&, float epsilon\) const;)' -1.38816 Tw (void require\(DimensionName, const Requirement&\);)' -1.388 Tw (const Requirement& requirement\(DimensionName\) const;)' -1.38539 Tw (Requirement& requirement\(DimensionName\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38829 Tw (interface Requirement {)' 8.33008 -11.5199 Td -1.3866 Tw (Requirement\(Coord natural\);)Tj 11.5199 TL -1.38863 Tw (Requirement\(Coord natural, Coord stretch, Coord shrink, float\);)' 0.000233968 Tc (Requirement\()' 0 Tc 8.33008 -11.5199 Td -1.38868 Tw (Coord natural_lead, Coord max_lead, Coord min_lead,)Tj -1.38854 Tw (Coord natural_trail, Coord max_trail, Coord min_trail)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc 16.5199 TL -1.38867 Tw (boolean equals\(const Requirement&, float epsilon\) const;)' 11.5203 TL -1.3885 Tw (boolean defined\(\) const;)' -1.38793 Tw (void natural\(Coord\), stretch\(Coord\), shrink\(Coord\);)' -1.38876 Tw (Coord natural\(\) const, stretch\(\) const, shrink\(\) const;)' -1.38738 Tw (void alignment\(float\);)' -1.38823 Tw (float alignment\(\) const;)' 0.000233889 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 66.625 -16.5199 Td -1.38848 Tw (Figure 2.3:)Tj 56.1301 0 Td -1.38895 Tw (Requisition and Requirement classes. )Tj ET Q 1072.5 4217.5 3960 10 re f* Q \n \n \n \n \n-1501\n+1502\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -1257,31 +1257,31 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 430.31 Tm -1.49979 Tw (and alignment is 0.5, then the allotment begins at -4 and ends at 6.)Tj 10.668 -14.6402 Td 0.615102 Tw (The allocation constructor initializes each allotment to have zero values.)Tj -10.668 -13.7398 Td 0.378468 Tw (Allocation::equals compares two allocations using a tolerance for individual)Tj 13.7402 TL 1.4531 Tw (coordinate comparisions. Allocation::allot sets the allotment for a given)' -1.49957 Tw (dimension. Allocation::allotment returns the allotment for a specified dimension.)' 10.668 -14.6398 Td -0.957531 Tw (Several operations are provided for convenience when accessing allotments in)Tj -10.668 -13.7402 Td -0.318453 Tw (the X and Y dimensions. Allocation::x and Allocation::y return the X and Y)Tj -1.03794 Tw (origins. Allocation::left and Allocation::right return the X dimension end-points,)' -1.49959 Tw (Allocation::bottom and Allocation::top return the Y dimension end-points.)' 10.668 -14.6398 Td 0.16955 Tw (The Allotment class also provides an equals operation for comparing two)Tj -10.668 -13.7398 Td 1.06763 Tw (allotments with a given tolerance. Allotment::origin, Allotment::span, and)Tj -0.923589 Tw (Allotment::alignment are overloaded names for setting and getting the allotment)' -1.49955 Tw (values. Allotment::offset adds to the current origin.)' 10.668 -14.6402 Td 0.105394 Tw (Allotment::begin and Allotment::end return the end-points of an allotment.)Tj -10.668 -13.7398 Td -0.92429 Tw (Allotment::begin is equivalent to the origin minus the alignment times the span.)Tj -1.49961 Tw (Allotment::end is equivalent to Allotment::begin plus the span.)' /R35743448 18 Tf 41.2801 TL (2.7)' 0.000115967 Tc 35 0 Td (Extensions)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.835679 Tw (The area that defines where a glyph actually draws is called an )Tj 0.000106388 Tc /R36187064 12 Tf 319.848 0 Td (extension)Tj 0 Tc /R35493912 12 Tf 45.3238 0 Td -0.835849 Tw (. This)Tj -365.172 -13.7402 Td -1.06565 Tw (area is typically used for update. If a glyph needs to be completely redrawn, the)Tj 13.7398 TL -1.49958 Tw (glyph's extension must be damaged.)' 10.668 -14.6398 Td -0.570292 Tw (Extensions are represented in device-independent units, but must be rounded)Tj 0.000149727 Tc 361.572 -30.9102 Td (2-)Tj 0 Tc 12.9961 0 Td (6)Tj ET Q 1060.5 7002.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 127.386 683.72 Tm -1.38852 Tw (interface Allocation {)Tj 8.33008 -11.5199 Td -1.38867 Tw (boolean equals\(const Allocation&, float epsilon\) const;)Tj 11.5199 TL -1.38838 Tw (void allot\(DimensionName, const Allotment&\);)' -1.38605 Tw (Allotment& allotment\(DimensionName\);)' -1.38821 Tw (const Allotment& allotment\(DimensionName\) const;)' -1.389 Tw (Coord x\(\) const, y\(\) const;)' -1.38884 Tw (Coord left\(\) const, right\(\) const, bottom\(\) const, top\(\) const;)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 23.0402 TL -1.38844 Tw (interface Allotment {)' 8.33008 -11.5199 Td -1.38852 Tw (Allotment\(Coord origin, Coord span, float alignment\);)Tj 11.5199 TL -1.38863 Tw (boolean equals\(const Allotment&, float epsilon\) const;)' -1.38803 Tw (void origin\(Coord\), offset\(Coord\), span\(Coord\);)' -1.38876 Tw (Coord origin\(\) const, span\(\) const;)' -1.38738 Tw (void alignment\(float\);)' -1.38823 Tw (float alignment\(\) const;)' -1.38848 Tw (Coord begin\(\) const;)' -1.38856 Tw (Coord end\(\) const;)' -8.33008 -11.5199 Td -1.38925 Tw (}; )Tj 63.0102 -16.5203 Td -1.38848 Tw (Figure 2.4:)Tj 56.1301 0 Td -1.38887 Tw (Allocation and allotment class interfaces)Tj ET Q 1060.5 4516.7 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 430.31 Tm -1.49979 Tw (and alignment is 0.5, then the allotment begins at -4 and ends at 6.)Tj 10.668 -14.6402 Td 0.615102 Tw (The allocation constructor initializes each allotment to have zero values.)Tj -10.668 -13.7398 Td 0.378468 Tw (Allocation::equals compares two allocations using a tolerance for individual)Tj 13.7402 TL 1.4531 Tw (coordinate comparisions. Allocation::allot sets the allotment for a given)' -1.49957 Tw (dimension. Allocation::allotment returns the allotment for a specified dimension.)' 10.668 -14.6398 Td -0.957531 Tw (Several operations are provided for convenience when accessing allotments in)Tj -10.668 -13.7402 Td -0.318453 Tw (the X and Y dimensions. Allocation::x and Allocation::y return the X and Y)Tj -1.03794 Tw (origins. Allocation::left and Allocation::right return the X dimension end-points,)' -1.49959 Tw (Allocation::bottom and Allocation::top return the Y dimension end-points.)' 10.668 -14.6398 Td 0.16955 Tw (The Allotment class also provides an equals operation for comparing two)Tj -10.668 -13.7398 Td 1.06763 Tw (allotments with a given tolerance. Allotment::origin, Allotment::span, and)Tj -0.923589 Tw (Allotment::alignment are overloaded names for setting and getting the allotment)' -1.49955 Tw (values. Allotment::offset adds to the current origin.)' 10.668 -14.6402 Td 0.105394 Tw (Allotment::begin and Allotment::end return the end-points of an allotment.)Tj -10.668 -13.7398 Td -0.92429 Tw (Allotment::begin is equivalent to the origin minus the alignment times the span.)Tj -1.49961 Tw (Allotment::end is equivalent to Allotment::begin plus the span.)' /R18609880 18 Tf 41.2801 TL (2.7)' 0.000115967 Tc 35 0 Td (Extensions)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.835679 Tw (The area that defines where a glyph actually draws is called an )Tj 0.000106388 Tc /R19053496 12 Tf 319.848 0 Td (extension)Tj 0 Tc /R18360344 12 Tf 45.3238 0 Td -0.835849 Tw (. This)Tj -365.172 -13.7402 Td -1.06565 Tw (area is typically used for update. If a glyph needs to be completely redrawn, the)Tj 13.7398 TL -1.49958 Tw (glyph's extension must be damaged.)' 10.668 -14.6398 Td -0.570292 Tw (Extensions are represented in device-independent units, but must be rounded)Tj 0.000149727 Tc 361.572 -30.9102 Td (2-)Tj 0 Tc 12.9961 0 Td (6)Tj ET Q 1060.5 7002.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 127.386 683.72 Tm -1.38852 Tw (interface Allocation {)Tj 8.33008 -11.5199 Td -1.38867 Tw (boolean equals\(const Allocation&, float epsilon\) const;)Tj 11.5199 TL -1.38838 Tw (void allot\(DimensionName, const Allotment&\);)' -1.38605 Tw (Allotment& allotment\(DimensionName\);)' -1.38821 Tw (const Allotment& allotment\(DimensionName\) const;)' -1.389 Tw (Coord x\(\) const, y\(\) const;)' -1.38884 Tw (Coord left\(\) const, right\(\) const, bottom\(\) const, top\(\) const;)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 23.0402 TL -1.38844 Tw (interface Allotment {)' 8.33008 -11.5199 Td -1.38852 Tw (Allotment\(Coord origin, Coord span, float alignment\);)Tj 11.5199 TL -1.38863 Tw (boolean equals\(const Allotment&, float epsilon\) const;)' -1.38803 Tw (void origin\(Coord\), offset\(Coord\), span\(Coord\);)' -1.38876 Tw (Coord origin\(\) const, span\(\) const;)' -1.38738 Tw (void alignment\(float\);)' -1.38823 Tw (float alignment\(\) const;)' -1.38848 Tw (Coord begin\(\) const;)' -1.38856 Tw (Coord end\(\) const;)' -8.33008 -11.5199 Td -1.38925 Tw (}; )Tj 63.0102 -16.5203 Td -1.38848 Tw (Figure 2.4:)Tj 56.1301 0 Td -1.38887 Tw (Allocation and allotment class interfaces)Tj ET Q 1060.5 4516.7 3960 10 re f* Q \n \n \n \n \n-1467\n+1468\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -1318,31 +1318,31 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 539.99 Tm -1.02196 Tw (out to the nearest device-dependent units. For example, if one of the bounds for)Tj 13.7398 TL -0.189934 Tw (one glyph's extension is 10.2 and another is 10.5, we would need to redraw)' 0.436956 Tw (both glyphs if the bounds translate to the same pixel coordinate. Because)' -0.798739 Tw (extensions are typically used to damage a canvas, the extension coordinates are)' 0.000150681 Tc (canvas-relative.)' 0 Tc 10.668 -14.6402 Td -0.891079 Tw (A glyph computes its extension as part of the allocate operation. Typically, a)Tj -10.668 -13.7398 Td -1.49966 Tw (glyph will simply return its allocation rounded according to the canvas.)Tj 10.668 -14.6398 Td -1.34998 Tw (Figure 2.5 shows the Extension protocol. Extension::set initializes an extension)Tj -10.668 -13.7402 Td 1.62031 Tw (to the given allocation transformed and rounded for the given canvas.)Tj -1.26648 Tw (Extension::clear sets an extension to be an empty area. Extension::merge extends)' -1.49972 Tw (an extension to include a new area in addition to its current one.)' 10.668 -14.6398 Td 0.146175 Tw (Extension::set_xy and Extension::merge_xy are short-hand for adjusting an)Tj -10.668 -13.7398 Td -1.34745 Tw (extension to include a given bounding box. Extension::left, bottom, right, and top)Tj -1.49961 Tw (return the bounding box.)' /R35743448 18 Tf 41.2801 TL (2.8)' 0.00009537 Tc 35 0 Td (Polyglyphs)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td 0.319085 Tw (A composite glyph contains one or more components. Any glyph subclass)Tj 13.7398 TL -0.238346 Tw (may contain subcomponents, but composite glyphs are typically derived from)' -1.49963 Tw (PolyGlyph to be able to store and retrieve their children.)' 10.668 -14.6402 Td -0.725765 Tw (The PolyGlyph protocol, shown in Figure 2.6 adds one operation beyond the)Tj -10.668 -13.7398 Td -0.622828 Tw (base class, PolyGlyph::modified\(GlyphIndex\), which notifies the glyph that the)Tj -1.0375 Tw (given component has changed. This operation is called when a glyph is inserted)' -1.49951 Tw (or removed from the composite.)' /R35743448 18 Tf 41.2801 TL (2.9)' 0.00009995 Tc 35 0 Td (MonoGlyphs)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.934375 Tw (MonoGlyph is an abstract class for glyphs that contain a single glyph, called its)Tj 0.00006628 Tc /R36187064 12 Tf 13.7398 TL (body)' 0 Tc /R35493912 12 Tf 23.3281 0 Td -0.949157 Tw (. The default behavior of monoglyphs is to pass operations on to the body.)Tj -23.3281 -13.7402 Td 0.094357 Tw (For example, the implementation of MonoGlyph::draw simply calls draw on)Tj 0.000149727 Tc 372.24 -26.5898 Td (2-)Tj 0 Tc 12.9961 0 Td (7)Tj ET Q 1101.3 7178 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 131.466 701.24 Tm -1.38894 Tw (interface Extension { )Tj 8.33008 -11.5199 Td -1.38857 Tw (void set\(Canvas*, const Allocation&\);)Tj 11.5199 TL -1.38894 Tw (void set_xy\(Canvas*, Coord left, Coord bottom, Coord right, Coord top\);)' -1.38852 Tw (void clear\(\);)' -1.38842 Tw (void merge\(const Extension&\);)' -1.38844 Tw (void merge\(Canvas*, const Allocation&\);)' -1.38847 Tw (void merge_xy\()' 8.33008 -11.5199 Td -1.38893 Tw (Canvas*, Coord left, Coord bottom, Coord right, Coord top)Tj 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc -1.38884 Tw (Coord left\(\) const, bottom\(\) const, right\(\) const, top\(\) const;)' 0.000233889 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 110.805 -16.5199 Td -1.38848 Tw (Figure 2.5:)Tj 56.1301 0 Td -1.38817 Tw (Extension protocol)Tj ET Q 1101.3 5613.5 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 539.99 Tm -1.02196 Tw (out to the nearest device-dependent units. For example, if one of the bounds for)Tj 13.7398 TL -0.189934 Tw (one glyph's extension is 10.2 and another is 10.5, we would need to redraw)' 0.436956 Tw (both glyphs if the bounds translate to the same pixel coordinate. Because)' -0.798739 Tw (extensions are typically used to damage a canvas, the extension coordinates are)' 0.000150681 Tc (canvas-relative.)' 0 Tc 10.668 -14.6402 Td -0.891079 Tw (A glyph computes its extension as part of the allocate operation. Typically, a)Tj -10.668 -13.7398 Td -1.49966 Tw (glyph will simply return its allocation rounded according to the canvas.)Tj 10.668 -14.6398 Td -1.34998 Tw (Figure 2.5 shows the Extension protocol. Extension::set initializes an extension)Tj -10.668 -13.7402 Td 1.62031 Tw (to the given allocation transformed and rounded for the given canvas.)Tj -1.26648 Tw (Extension::clear sets an extension to be an empty area. Extension::merge extends)' -1.49972 Tw (an extension to include a new area in addition to its current one.)' 10.668 -14.6398 Td 0.146175 Tw (Extension::set_xy and Extension::merge_xy are short-hand for adjusting an)Tj -10.668 -13.7398 Td -1.34745 Tw (extension to include a given bounding box. Extension::left, bottom, right, and top)Tj -1.49961 Tw (return the bounding box.)' /R18609880 18 Tf 41.2801 TL (2.8)' 0.00009537 Tc 35 0 Td (Polyglyphs)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td 0.319085 Tw (A composite glyph contains one or more components. Any glyph subclass)Tj 13.7398 TL -0.238346 Tw (may contain subcomponents, but composite glyphs are typically derived from)' -1.49963 Tw (PolyGlyph to be able to store and retrieve their children.)' 10.668 -14.6402 Td -0.725765 Tw (The PolyGlyph protocol, shown in Figure 2.6 adds one operation beyond the)Tj -10.668 -13.7398 Td -0.622828 Tw (base class, PolyGlyph::modified\(GlyphIndex\), which notifies the glyph that the)Tj -1.0375 Tw (given component has changed. This operation is called when a glyph is inserted)' -1.49951 Tw (or removed from the composite.)' /R18609880 18 Tf 41.2801 TL (2.9)' 0.00009995 Tc 35 0 Td (MonoGlyphs)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.934375 Tw (MonoGlyph is an abstract class for glyphs that contain a single glyph, called its)Tj 0.00006628 Tc /R19053496 12 Tf 13.7398 TL (body)' 0 Tc /R18360344 12 Tf 23.3281 0 Td -0.949157 Tw (. The default behavior of monoglyphs is to pass operations on to the body.)Tj -23.3281 -13.7402 Td 0.094357 Tw (For example, the implementation of MonoGlyph::draw simply calls draw on)Tj 0.000149727 Tc 372.24 -26.5898 Td (2-)Tj 0 Tc 12.9961 0 Td (7)Tj ET Q 1101.3 7178 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 131.466 701.24 Tm -1.38894 Tw (interface Extension { )Tj 8.33008 -11.5199 Td -1.38857 Tw (void set\(Canvas*, const Allocation&\);)Tj 11.5199 TL -1.38894 Tw (void set_xy\(Canvas*, Coord left, Coord bottom, Coord right, Coord top\);)' -1.38852 Tw (void clear\(\);)' -1.38842 Tw (void merge\(const Extension&\);)' -1.38844 Tw (void merge\(Canvas*, const Allocation&\);)' -1.38847 Tw (void merge_xy\()' 8.33008 -11.5199 Td -1.38893 Tw (Canvas*, Coord left, Coord bottom, Coord right, Coord top)Tj 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc -1.38884 Tw (Coord left\(\) const, bottom\(\) const, right\(\) const, top\(\) const;)' 0.000233889 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 110.805 -16.5199 Td -1.38848 Tw (Figure 2.5:)Tj 56.1301 0 Td -1.38817 Tw (Extension protocol)Tj ET Q 1101.3 5613.5 3960 10 re f* Q \n \n \n \n \n-1553\n+1554\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -1379,29 +1379,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 614.87 Tm -0.367752 Tw (the body. This feature is very useful because it means that a monoglyph can)Tj 13.7398 TL 0.00397392 Tw (affect one aspect of the body's behavior without changing other aspects. In)' -1.4339 Tw (particular, monoglyphs usually do not change structure management. Therefore, a)' -1.08024 Tw (monoglyph can be ªwrappedº around a composite glyph and the result passed to)' -1.13722 Tw (an object that modifies the structure of the composite without knowing about the)' -1.10473 Tw (presence of the monoglyph. For example, suppose a prototype menu is built and)' -1.40044 Tw (returned to a function that appends the items. All the function need assume is that)' -0.781062 Tw (the prototype is some glyph; it can use Glyph::append to put in the items. The)' -0.357683 Tw (arrangement of the items will be defined by the aggregate and any additional)' -0.328158 Tw (decoration, such as a 3D borderframe or shadow, can be wrapped around the)' -1.49879 Tw (aggregate independently.)' 10.668 -14.6398 Td -1.48223 Tw (Figure 2.7 shows the MonoGlyph base class interface. A non-nil glyph specifies)Tj -10.668 -13.7402 Td -1.4998 Tw (the initial body. MonoGlyph::body is overloaded to set and return the body.)Tj /R35743448 14 Tf 26.4 TL (2.9.1)' 0.000204904 Tc 40 0 Td (Patches)Tj 0 Tc /R35493912 12 Tf -40 -20.4398 Td -1.17039 Tw (A patch stores its canvas and allocation for subsequent use to update its body. A)Tj 13.7398 TL -0.855875 Tw (patch is useful for objects that need to be redrawn independently, such as those)' -1.11202 Tw (that depend on some external data. Typically, a patch appears in the middle of a)' -1.41891 Tw (glyph instance graph, where a change would be too expensive to redraw the entire)' 0.00009410 Tc (graph.)' 0 Tc 10.668 -14.6398 Td -1.13703 Tw (Figure 2.8 shows the Patch class interface. Patch::canvas and Patch::allocation)Tj -10.668 -13.7398 Td 2.0964 Tw (return the canvas and allocation most recently passed to Patch::draw.)Tj -0.68 Tw (Patch::reallocate calls allocate on the body using the current allocation, usually)' -1.21492 Tw (because the body has changed in some way and will allocate its itself differently.)' -0.885305 Tw (Patch::redraw calls draw on the body using the current allocation. Patch::repick)' -1.67587 Tw (returns the result of calling pick on the body with the current canvas and allocation.)' 0.000149727 Tc 372.24 -190.05 Td (2-)Tj 0 Tc 12.9961 0 Td (8)Tj ET Q 1062.9 7120.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 127.626 695.48 Tm -1.389 Tw (interface PolyGlyph : Glyph {)Tj 8.32969 -11.5199 Td -1.38846 Tw (PolyGlyph\(GlyphIndex initial_size = 10\);)Tj 11.5203 TL -1.38715 Tw (void modified\(GlyphIndex\);)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 111.085 -16.5199 Td -1.38848 Tw (Figure 2.6:)Tj 56.1301 0 Td -1.38828 Tw (Polyglyph protocol)Tj ET Q 1062.9 6362.3 3960 10 re f* 1070.1 2183.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 128.346 201.8 Tm -1.38892 Tw (interface MonoGlyph : Glyph {)Tj 8.33008 -11.5199 Td -1.38808 Tw (void body\(Glyph*\);)Tj 11.5199 TL -1.38858 Tw (Glyph* body\(\) const;)' -8.33008 -11.5203 Td -1.38925 Tw (}; )Tj 107.195 -16.5199 Td -1.38848 Tw (Figure 2.7:)Tj 56.1301 0 Td -1.38792 Tw (MonoGlyph protocol)Tj ET Q 1070.1 1425.5 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 614.87 Tm -0.367752 Tw (the body. This feature is very useful because it means that a monoglyph can)Tj 13.7398 TL 0.00397392 Tw (affect one aspect of the body's behavior without changing other aspects. In)' -1.4339 Tw (particular, monoglyphs usually do not change structure management. Therefore, a)' -1.08024 Tw (monoglyph can be ªwrappedº around a composite glyph and the result passed to)' -1.13722 Tw (an object that modifies the structure of the composite without knowing about the)' -1.10473 Tw (presence of the monoglyph. For example, suppose a prototype menu is built and)' -1.40044 Tw (returned to a function that appends the items. All the function need assume is that)' -0.781062 Tw (the prototype is some glyph; it can use Glyph::append to put in the items. The)' -0.357683 Tw (arrangement of the items will be defined by the aggregate and any additional)' -0.328158 Tw (decoration, such as a 3D borderframe or shadow, can be wrapped around the)' -1.49879 Tw (aggregate independently.)' 10.668 -14.6398 Td -1.48223 Tw (Figure 2.7 shows the MonoGlyph base class interface. A non-nil glyph specifies)Tj -10.668 -13.7402 Td -1.4998 Tw (the initial body. MonoGlyph::body is overloaded to set and return the body.)Tj /R18609880 14 Tf 26.4 TL (2.9.1)' 0.000204904 Tc 40 0 Td (Patches)Tj 0 Tc /R18360344 12 Tf -40 -20.4398 Td -1.17039 Tw (A patch stores its canvas and allocation for subsequent use to update its body. A)Tj 13.7398 TL -0.855875 Tw (patch is useful for objects that need to be redrawn independently, such as those)' -1.11202 Tw (that depend on some external data. Typically, a patch appears in the middle of a)' -1.41891 Tw (glyph instance graph, where a change would be too expensive to redraw the entire)' 0.00009410 Tc (graph.)' 0 Tc 10.668 -14.6398 Td -1.13703 Tw (Figure 2.8 shows the Patch class interface. Patch::canvas and Patch::allocation)Tj -10.668 -13.7398 Td 2.0964 Tw (return the canvas and allocation most recently passed to Patch::draw.)Tj -0.68 Tw (Patch::reallocate calls allocate on the body using the current allocation, usually)' -1.21492 Tw (because the body has changed in some way and will allocate its itself differently.)' -0.885305 Tw (Patch::redraw calls draw on the body using the current allocation. Patch::repick)' -1.67587 Tw (returns the result of calling pick on the body with the current canvas and allocation.)' 0.000149727 Tc 372.24 -190.05 Td (2-)Tj 0 Tc 12.9961 0 Td (8)Tj ET Q 1062.9 7120.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 127.626 695.48 Tm -1.389 Tw (interface PolyGlyph : Glyph {)Tj 8.32969 -11.5199 Td -1.38846 Tw (PolyGlyph\(GlyphIndex initial_size = 10\);)Tj 11.5203 TL -1.38715 Tw (void modified\(GlyphIndex\);)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 111.085 -16.5199 Td -1.38848 Tw (Figure 2.6:)Tj 56.1301 0 Td -1.38828 Tw (Polyglyph protocol)Tj ET Q 1062.9 6362.3 3960 10 re f* 1070.1 2183.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 128.346 201.8 Tm -1.38892 Tw (interface MonoGlyph : Glyph {)Tj 8.33008 -11.5199 Td -1.38808 Tw (void body\(Glyph*\);)Tj 11.5199 TL -1.38858 Tw (Glyph* body\(\) const;)' -8.33008 -11.5203 Td -1.38925 Tw (}; )Tj 107.195 -16.5199 Td -1.38848 Tw (Figure 2.7:)Tj 56.1301 0 Td -1.38792 Tw (MonoGlyph protocol)Tj ET Q 1070.1 1425.5 3960 10 re f* Q \n \n \n \n \n 1546\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -1438,29 +1438,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 18 Tf 1 0 0 1 106.05 562.79 Tm (2.10)Tj 0.00012425 Tc 35 0 Td (Example)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -1.49883 Tw (See iv/src/examples/circle. )Tj 0.000149727 Tc 372.24 -456.49 Td (2-)Tj 0 Tc 12.9961 0 Td (9)Tj ET Q 1041.3 7098.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 125.466 693.32 Tm -1.38892 Tw (interface Patch : MonoGlyph {)Tj 0.000201089 Tc 8.33008 -11.5199 Td (Patch\(Glyph*\);)Tj 0 Tc 11.5199 TL -1.3886 Tw (Canvas* canvas\(\) const;)' -1.38854 Tw (const Allocation& allocation\(\) const;)' -1.38797 Tw (void reallocate\(\);)' -1.38852 Tw (void redraw\(\) const;)' -1.38852 Tw (boolean repick\(int depth, Hit&\);)' -8.33008 -11.5199 Td -1.38925 Tw (}; )Tj 119.975 -16.5199 Td -1.38848 Tw (Figure 2.8:)Tj 56.1301 0 Td -1.38843 Tw (Patch protocol)Tj ET Q 1041.3 5879.9 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 18 Tf 1 0 0 1 106.05 562.79 Tm (2.10)Tj 0.00012425 Tc 35 0 Td (Example)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -1.49883 Tw (See iv/src/examples/circle. )Tj 0.000149727 Tc 372.24 -456.49 Td (2-)Tj 0 Tc 12.9961 0 Td (9)Tj ET Q 1041.3 7098.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 125.466 693.32 Tm -1.38892 Tw (interface Patch : MonoGlyph {)Tj 0.000201089 Tc 8.33008 -11.5199 Td (Patch\(Glyph*\);)Tj 0 Tc 11.5199 TL -1.3886 Tw (Canvas* canvas\(\) const;)' -1.38854 Tw (const Allocation& allocation\(\) const;)' -1.38797 Tw (void reallocate\(\);)' -1.38852 Tw (void redraw\(\) const;)' -1.38852 Tw (boolean repick\(int depth, Hit&\);)' -8.33008 -11.5199 Td -1.38925 Tw (}; )Tj 119.975 -16.5199 Td -1.38848 Tw (Figure 2.8:)Tj 56.1301 0 Td -1.38843 Tw (Patch protocol)Tj ET Q 1041.3 5879.9 3960 10 re f* Q \n \n \n \n \n-478\n+476\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -1497,31 +1497,31 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 3)Tj 36.9602 TL -2.99852 Tw (Event processing)' /R35493912 12 Tf 28.3199 TL -1.10701 Tw (This chapter describes the InterViews mechanisms for processing user input. An)' 0.000171661 Tc /R36187064 12 Tf 13.7402 TL (event)' 0 Tc /R35493912 12 Tf 25.3199 0 Td -0.699626 Tw ( is an object that represents a user input action, such as pressing a mouse)Tj -25.3199 -13.7398 Td -0.924728 Tw (button or a keystroke. Events are low-level objects that application code should)Tj -0.901366 Tw (rarely need to access directly. A )' 0.00005123 Tc /R36187064 12 Tf 166.226 0 Td (handler)Tj 0 Tc /R35493912 12 Tf 37.332 0 Td -0.901496 Tw ( is an object that processes events. An)Tj /R36187064 12 Tf -203.558 -13.7402 Td -1.48546 Tw (input handler)Tj /R35493912 12 Tf 65.0324 0 Td -1.48544 Tw ( is a glyph that provides a handler that translates events to operations)Tj -65.0324 -13.7398 Td -1.49951 Tw (such as press, release, and keystroke.)Tj /R35743448 18 Tf 41.2801 TL (3.1)' 0.000137965 Tc 35 0 Td (Events)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.905523 Tw (The event class interface is shown in Figure 3.1. Input events arrive in a single)Tj 13.7398 TL -0.557468 Tw (stream \(per display\) to an application. EventType is the kind of event \(mouse)' -0.632831 Tw (motion, button down, etc.\). An application receives all window system events,)' -0.157656 Tw (but Event::type is only defined for device input. Other events have the type)' 0.000112745 Tc (Event::other_event)' 0.000311375 Tc /R36761712 10 Tf 91.3199 0 Td (.)Tj 0 Tc /R35493912 12 Tf 2.78008 0 Td -1.076 Tw ( EventButton is the number of a button on a pointing device,)Tj -94.1 -13.7398 Td -1.49962 Tw (where Event::any refers to any one of the buttons.)Tj 10.668 -14.6398 Td -0.075093 Tw (Event::window returns the window that received the event. Event::pending)Tj -10.668 -13.7402 Td -0.732961 Tw (tests if more events are waiting to be read. Event::unread puts the event at the)Tj -1.49962 Tw (front of the input queue for the display.)' 0.000149727 Tc 377.52 -307.2 Td (3-)Tj 0 Tc 12.9961 0 Td (1)Tj ET Q 1077.3 3657.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 129.066 349.16 Tm -1.3886 Tw (typedef unsigned int EventType;)Tj 11.5203 TL -1.38854 Tw (typedef unsigned long EventTime;)' -1.38848 Tw (typedef unsigned int EventButton;)' -1.38836 Tw (typedef unsigned int EventModifierKey;)' 16.5199 TL -1.38869 Tw (interface Event {)' 8.33008 -11.5199 Td -1.38896 Tw (enum { undefined, motion, down, up, key, other_event };)Tj 11.5203 TL -1.38894 Tw (enum { none, any, left, middle, right, other_button };)' -1.38904 Tw (enum { control, shift, capslock, meta };)' 16.5199 TL -1.38848 Tw (Window* window\(\) const;)' 11.5199 TL -1.38774 Tw (boolean pending\(\);)' -1.3882 Tw (void unread\(\);)' -1.38842 Tw (EventType type\(\) const;)' -1.38834 Tw (EventTime time\(\) const;)' -1.38853 Tw (Coord pointer_x\(\) const, pointer_y\(\) const;)' -1.38783 Tw (EventButton pointer_button\(\) const;)' -1.3876 Tw (boolean button_is_down\(EventButton\) const;)' -1.38737 Tw (boolean modifier_is_down\(EventModifierKey\) const;)' -1.3887 Tw (unsigned char keycode\(\) const;)' -1.38888 Tw (unsigned int mapkey\(char*, unsigned int len\) const;)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 119.975 -16.5199 Td -1.38848 Tw (Figure 3.1:)Tj 56.1301 0 Td -1.38845 Tw (Event protocol)Tj ET Q 1077.3 955.898 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 3)Tj 36.9602 TL -2.99852 Tw (Event processing)' /R18360344 12 Tf 28.3199 TL -1.10701 Tw (This chapter describes the InterViews mechanisms for processing user input. An)' 0.000171661 Tc /R19053496 12 Tf 13.7402 TL (event)' 0 Tc /R18360344 12 Tf 25.3199 0 Td -0.699626 Tw ( is an object that represents a user input action, such as pressing a mouse)Tj -25.3199 -13.7398 Td -0.924728 Tw (button or a keystroke. Events are low-level objects that application code should)Tj -0.901366 Tw (rarely need to access directly. A )' 0.00005123 Tc /R19053496 12 Tf 166.226 0 Td (handler)Tj 0 Tc /R18360344 12 Tf 37.332 0 Td -0.901496 Tw ( is an object that processes events. An)Tj /R19053496 12 Tf -203.558 -13.7402 Td -1.48546 Tw (input handler)Tj /R18360344 12 Tf 65.0324 0 Td -1.48544 Tw ( is a glyph that provides a handler that translates events to operations)Tj -65.0324 -13.7398 Td -1.49951 Tw (such as press, release, and keystroke.)Tj /R18609880 18 Tf 41.2801 TL (3.1)' 0.000137965 Tc 35 0 Td (Events)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.905523 Tw (The event class interface is shown in Figure 3.1. Input events arrive in a single)Tj 13.7398 TL -0.557468 Tw (stream \(per display\) to an application. EventType is the kind of event \(mouse)' -0.632831 Tw (motion, button down, etc.\). An application receives all window system events,)' -0.157656 Tw (but Event::type is only defined for device input. Other events have the type)' 0.000112745 Tc (Event::other_event)' 0.000311375 Tc /R19628144 10 Tf 91.3199 0 Td (.)Tj 0 Tc /R18360344 12 Tf 2.78008 0 Td -1.076 Tw ( EventButton is the number of a button on a pointing device,)Tj -94.1 -13.7398 Td -1.49962 Tw (where Event::any refers to any one of the buttons.)Tj 10.668 -14.6398 Td -0.075093 Tw (Event::window returns the window that received the event. Event::pending)Tj -10.668 -13.7402 Td -0.732961 Tw (tests if more events are waiting to be read. Event::unread puts the event at the)Tj -1.49962 Tw (front of the input queue for the display.)' 0.000149727 Tc 377.52 -307.2 Td (3-)Tj 0 Tc 12.9961 0 Td (1)Tj ET Q 1077.3 3657.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 129.066 349.16 Tm -1.3886 Tw (typedef unsigned int EventType;)Tj 11.5203 TL -1.38854 Tw (typedef unsigned long EventTime;)' -1.38848 Tw (typedef unsigned int EventButton;)' -1.38836 Tw (typedef unsigned int EventModifierKey;)' 16.5199 TL -1.38869 Tw (interface Event {)' 8.33008 -11.5199 Td -1.38896 Tw (enum { undefined, motion, down, up, key, other_event };)Tj 11.5203 TL -1.38894 Tw (enum { none, any, left, middle, right, other_button };)' -1.38904 Tw (enum { control, shift, capslock, meta };)' 16.5199 TL -1.38848 Tw (Window* window\(\) const;)' 11.5199 TL -1.38774 Tw (boolean pending\(\);)' -1.3882 Tw (void unread\(\);)' -1.38842 Tw (EventType type\(\) const;)' -1.38834 Tw (EventTime time\(\) const;)' -1.38853 Tw (Coord pointer_x\(\) const, pointer_y\(\) const;)' -1.38783 Tw (EventButton pointer_button\(\) const;)' -1.3876 Tw (boolean button_is_down\(EventButton\) const;)' -1.38737 Tw (boolean modifier_is_down\(EventModifierKey\) const;)' -1.3887 Tw (unsigned char keycode\(\) const;)' -1.38888 Tw (unsigned int mapkey\(char*, unsigned int len\) const;)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 119.975 -16.5199 Td -1.38848 Tw (Figure 3.1:)Tj 56.1301 0 Td -1.38845 Tw (Event protocol)Tj ET Q 1077.3 955.898 3960 10 re f* Q \n \n \n \n \n-1531\n+1529\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -1558,29 +1558,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 116.718 708.3 Tm -1.29688 Tw (Event::time returns a timestamp in milliseconds for the event. Event::pointer_x)Tj -10.668 -13.7398 Td 0.136563 Tw (and Event::pointer_y return the pointer location for the event in coordinates)Tj 13.7402 TL -0.256811 Tw (relative to the lower-left corner of the window. Pointer locations are defined)' 0.668796 Tw (for motion, button, and keyboard events. Event::pointer_button returns the)' 1.3661 Tw (EventButton for a down or up event, Event::none for all other events.)' 1.00391 Tw (Event::button_is_down \(Event::modifier_is_down\) returns whether the given)' -1.4996 Tw (button \(modifier key\) was down )' 0.000102361 Tc /R36187064 12 Tf 157.645 0 Td (before)Tj 0 Tc /R35493912 12 Tf 30.6602 0 Td -1.49961 Tw ( the event occurred.)Tj -177.637 -14.6402 Td -0.503033 Tw (Event::keycode returns the code associated with a keystroke. Key codes are)Tj -10.668 -13.7398 Td -0.585478 Tw (potentially platform-specific and should be avoided if possible. Event::mapkey)Tj -0.565524 Tw (finds the string binding for a given key. Event::mapkey is passed a buffer for)' -0.574506 Tw (the result and the size of the buffer; it returns the number of characters in the)' -1.49967 Tw (translated string. If the event is not a key event, Event::mapkey returns -1.)' /R35743448 18 Tf 41.2801 TL (3.2)' 0.000126839 Tc 35 0 Td (Handlers)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.457422 Tw (A handler is an object that is passed an event to process. The only operation)Tj 13.7402 TL 0.704219 Tw (is Handler::event, which translates a raw event into an abstract operation.)' -0.527699 Tw (InputHandler is a monoglygph subclass that uses a handler to translate events.)' -0.886182 Tw (ActiveHandler is a subclass of input handler that detects when the input pointer)' -1.17041 Tw (enters or leaves its body. Figure 3.2 shows the handler, input handler, and active)' -1.4992 Tw (handler protocols.)' 10.668 -14.6402 Td 0.66992 Tw (The InputHandler constructor is passed the glyph body \(which can also)Tj -10.668 -13.7398 Td 0.0818127 Tw (be set with MonoGlyph::body\) and a style. Though a glyph can in general)Tj -0.395605 Tw (have multiple parents, input handlers form a hierarchy for focus management.)' 1.10818 Tw (InputHandler::append_focusable adds a child, setting the child's parent to)' 0.91651 Tw (the target input handler. InputHandler::remove_focusable removes a child.)' -0.459256 Tw (InputHandler::focus sets the current focus for the input handler. The effect of)' 0.156745 Tw (setting focus is that key events \(or in general any focusable event\) will be)' -0.612696 Tw (processed by the focus input handler as opposed to an input handler under the)' -1.49923 Tw (input pointer coordinates.)' 10.668 -14.6398 Td 2.3407 Tw (InputHandler::next_focus and InputHandler::prev_focus move the focus)Tj -10.668 -13.7402 Td 3.54169 Tw (forward and backward through the children of an input handler.)Tj -0.254232 Tw (InputHandler::focus_in moves the focus ªdownº the hierarchy and returns the)' -0.347635 Tw (handler that now has focus. InputHandler::focus_out notifies an input handler)' -0.438156 Tw (that it no longer will receive focusable events, in case it wishes to change its)' 0.000171661 Tc (appearance.)' 0 Tc 10.668 -14.6402 Td 0.487108 Tw (InputHandler::move, press, drag, release, and keystroke are called by the)Tj -10.668 -13.7398 Td -0.180322 Tw (handler in response to motion, button down, motion while a button is down,)Tj 0.616735 Tw (button up, and key events. InputHandler::double_click is called when two)' -0.764221 Tw (button down events occurs within a threshold time. The threshold is set by the)' -1.4995 Tw (ªclickDelayº style attribute; the default is 250 milliseconds.)' 10.668 -14.6398 Td 0.461693 Tw (InputHandler::allocation_changed is a notification that the glyph's size or)Tj -10.668 -13.7402 Td 0.782399 Tw (position has changed; subclasses can override this operation and therefore)Tj 0.000149727 Tc 377.52 -34.0199 Td (3-)Tj 0 Tc 12.9961 0 Td (2)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 116.718 708.3 Tm -1.29688 Tw (Event::time returns a timestamp in milliseconds for the event. Event::pointer_x)Tj -10.668 -13.7398 Td 0.136563 Tw (and Event::pointer_y return the pointer location for the event in coordinates)Tj 13.7402 TL -0.256811 Tw (relative to the lower-left corner of the window. Pointer locations are defined)' 0.668796 Tw (for motion, button, and keyboard events. Event::pointer_button returns the)' 1.3661 Tw (EventButton for a down or up event, Event::none for all other events.)' 1.00391 Tw (Event::button_is_down \(Event::modifier_is_down\) returns whether the given)' -1.4996 Tw (button \(modifier key\) was down )' 0.000102361 Tc /R19053496 12 Tf 157.645 0 Td (before)Tj 0 Tc /R18360344 12 Tf 30.6602 0 Td -1.49961 Tw ( the event occurred.)Tj -177.637 -14.6402 Td -0.503033 Tw (Event::keycode returns the code associated with a keystroke. Key codes are)Tj -10.668 -13.7398 Td -0.585478 Tw (potentially platform-specific and should be avoided if possible. Event::mapkey)Tj -0.565524 Tw (finds the string binding for a given key. Event::mapkey is passed a buffer for)' -0.574506 Tw (the result and the size of the buffer; it returns the number of characters in the)' -1.49967 Tw (translated string. If the event is not a key event, Event::mapkey returns -1.)' /R18609880 18 Tf 41.2801 TL (3.2)' 0.000126839 Tc 35 0 Td (Handlers)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.457422 Tw (A handler is an object that is passed an event to process. The only operation)Tj 13.7402 TL 0.704219 Tw (is Handler::event, which translates a raw event into an abstract operation.)' -0.527699 Tw (InputHandler is a monoglygph subclass that uses a handler to translate events.)' -0.886182 Tw (ActiveHandler is a subclass of input handler that detects when the input pointer)' -1.17041 Tw (enters or leaves its body. Figure 3.2 shows the handler, input handler, and active)' -1.4992 Tw (handler protocols.)' 10.668 -14.6402 Td 0.66992 Tw (The InputHandler constructor is passed the glyph body \(which can also)Tj -10.668 -13.7398 Td 0.0818127 Tw (be set with MonoGlyph::body\) and a style. Though a glyph can in general)Tj -0.395605 Tw (have multiple parents, input handlers form a hierarchy for focus management.)' 1.10818 Tw (InputHandler::append_focusable adds a child, setting the child's parent to)' 0.91651 Tw (the target input handler. InputHandler::remove_focusable removes a child.)' -0.459256 Tw (InputHandler::focus sets the current focus for the input handler. The effect of)' 0.156745 Tw (setting focus is that key events \(or in general any focusable event\) will be)' -0.612696 Tw (processed by the focus input handler as opposed to an input handler under the)' -1.49923 Tw (input pointer coordinates.)' 10.668 -14.6398 Td 2.3407 Tw (InputHandler::next_focus and InputHandler::prev_focus move the focus)Tj -10.668 -13.7402 Td 3.54169 Tw (forward and backward through the children of an input handler.)Tj -0.254232 Tw (InputHandler::focus_in moves the focus ªdownº the hierarchy and returns the)' -0.347635 Tw (handler that now has focus. InputHandler::focus_out notifies an input handler)' -0.438156 Tw (that it no longer will receive focusable events, in case it wishes to change its)' 0.000171661 Tc (appearance.)' 0 Tc 10.668 -14.6402 Td 0.487108 Tw (InputHandler::move, press, drag, release, and keystroke are called by the)Tj -10.668 -13.7398 Td -0.180322 Tw (handler in response to motion, button down, motion while a button is down,)Tj 0.616735 Tw (button up, and key events. InputHandler::double_click is called when two)' -0.764221 Tw (button down events occurs within a threshold time. The threshold is set by the)' -1.4995 Tw (ªclickDelayº style attribute; the default is 250 milliseconds.)' 10.668 -14.6398 Td 0.461693 Tw (InputHandler::allocation_changed is a notification that the glyph's size or)Tj -10.668 -13.7402 Td 0.782399 Tw (position has changed; subclasses can override this operation and therefore)Tj 0.000149727 Tc 377.52 -34.0199 Td (3-)Tj 0 Tc 12.9961 0 Td (2)Tj ET Q Q \n \n \n \n \n-1829\n+1830\n \n \n \n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -1617,31 +1617,31 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 296.55 Tm 0.355366 Tw (typically do not need to define an allocate operation. InputHandler::redraw)Tj 13.7398 TL -1.49963 Tw (damages the canvas and area where the input handler was most recently drawn.)' 10.668 -14.6402 Td 1.1697 Tw (The implementation of ActiveHandler notices when motion events first)Tj -10.668 -13.7398 Td -1.45051 Tw (intersect the glyph's body, in which case ActiveHandler::enter is called, and when)Tj -0.572372 Tw (the motion next leaves the body, in which case ActiveHandler::leave is called.)' -1.23894 Tw (The default enter and leave operations do nothing; subclasses should define these)' -1.4992 Tw (operations as desired.)' /R35743448 18 Tf 41.2801 TL (3.3)' 0.000120435 Tc 35 0 Td (Targets)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.251435 Tw (A )Tj 0.00007025 Tc /R36187064 12 Tf 14.1609 0 Td (target)Tj 0 Tc /R35493912 12 Tf 28.668 0 Td -0.251385 Tw ( controls the behavior of picking on its body. A target is useful for)Tj -42.8289 -13.7398 Td -1.22788 Tw (defining a pick area that is not identical to the underlying object. For example, if)Tj 13.7398 TL -1.47688 Tw (one wanted to pick in a line of characters then one might wish to interpret the pick)' -1.11286 Tw (based on the line height instead of the heights of the individual characters. So, a)' 0.000149727 Tc 377.52 -24.3301 Td (3-)Tj 0 Tc 12.9961 0 Td (3)Tj ET Q 1077.3 7132.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 129.066 696.68 Tm -1.38891 Tw (interface Handler : Resource {)Tj 8.33008 -11.5199 Td -1.38857 Tw (boolean event\(Event&\) ;)Tj 0.000233889 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 23.0398 TL -1.38867 Tw (interface InputHandler : MonoGlyph {)' 8.33008 -11.5199 Td -1.38671 Tw (InputHandler\(Glyph*, Style*\);)Tj 16.5199 TL -1.38845 Tw (Handler* handler\(\) const;)' 11.5203 TL -1.38812 Tw (InputHandler* parent\(\) const;)' -1.38861 Tw (Style* style\(\) const;)' -1.38519 Tw (void append_input_handler\(InputHandler*\);)' -1.38522 Tw (void remove_input_handler\(InputHandler*\);)' -1.38706 Tw (void focus\(InputHandler*\);)' -1.388 Tw (void next_focus\(\);)' (void prev_focus\(\);)' -1.38706 Tw (InputHandler* focus_in\(\);)' -1.388 Tw (void focus_out\(\);)' 16.5199 TL -1.38867 Tw (void move\(const Event&\);)' 11.5203 TL (void press\(const Event&\);)' -1.38861 Tw (void drag\(const Event&\);)' -1.38853 Tw (void release\(const Event&\);)' (void keystroke\(const Event&\);)' -1.38845 Tw (void double_click\(const Event&\);)' 16.5203 TL -1.38825 Tw (void allocation_changed\(Canvas*, const Allocation&\);)' 11.5199 TL -1.38849 Tw (void redraw\(\) const;)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38864 Tw (interface ActiveHandler : InputHandler {)' 8.33008 -11.5199 Td -1.38702 Tw (ActiveHandler\(Glyph*, Style*\);)Tj 11.5203 TL -1.38823 Tw (void enter\(\);)' -1.38851 Tw (void leave\(\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 73.0102 -16.5199 Td -1.38848 Tw (Figure 3.2:)Tj 56.1297 0 Td -1.38861 Tw (Handler and InputHandler protocols)Tj ET Q 1077.3 3179.1 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 296.55 Tm 0.355366 Tw (typically do not need to define an allocate operation. InputHandler::redraw)Tj 13.7398 TL -1.49963 Tw (damages the canvas and area where the input handler was most recently drawn.)' 10.668 -14.6402 Td 1.1697 Tw (The implementation of ActiveHandler notices when motion events first)Tj -10.668 -13.7398 Td -1.45051 Tw (intersect the glyph's body, in which case ActiveHandler::enter is called, and when)Tj -0.572372 Tw (the motion next leaves the body, in which case ActiveHandler::leave is called.)' -1.23894 Tw (The default enter and leave operations do nothing; subclasses should define these)' -1.4992 Tw (operations as desired.)' /R18609880 18 Tf 41.2801 TL (3.3)' 0.000120435 Tc 35 0 Td (Targets)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.251435 Tw (A )Tj 0.00007025 Tc /R19053496 12 Tf 14.1609 0 Td (target)Tj 0 Tc /R18360344 12 Tf 28.668 0 Td -0.251385 Tw ( controls the behavior of picking on its body. A target is useful for)Tj -42.8289 -13.7398 Td -1.22788 Tw (defining a pick area that is not identical to the underlying object. For example, if)Tj 13.7398 TL -1.47688 Tw (one wanted to pick in a line of characters then one might wish to interpret the pick)' -1.11286 Tw (based on the line height instead of the heights of the individual characters. So, a)' 0.000149727 Tc 377.52 -24.3301 Td (3-)Tj 0 Tc 12.9961 0 Td (3)Tj ET Q 1077.3 7132.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 129.066 696.68 Tm -1.38891 Tw (interface Handler : Resource {)Tj 8.33008 -11.5199 Td -1.38857 Tw (boolean event\(Event&\) ;)Tj 0.000233889 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 23.0398 TL -1.38867 Tw (interface InputHandler : MonoGlyph {)' 8.33008 -11.5199 Td -1.38671 Tw (InputHandler\(Glyph*, Style*\);)Tj 16.5199 TL -1.38845 Tw (Handler* handler\(\) const;)' 11.5203 TL -1.38812 Tw (InputHandler* parent\(\) const;)' -1.38861 Tw (Style* style\(\) const;)' -1.38519 Tw (void append_input_handler\(InputHandler*\);)' -1.38522 Tw (void remove_input_handler\(InputHandler*\);)' -1.38706 Tw (void focus\(InputHandler*\);)' -1.388 Tw (void next_focus\(\);)' (void prev_focus\(\);)' -1.38706 Tw (InputHandler* focus_in\(\);)' -1.388 Tw (void focus_out\(\);)' 16.5199 TL -1.38867 Tw (void move\(const Event&\);)' 11.5203 TL (void press\(const Event&\);)' -1.38861 Tw (void drag\(const Event&\);)' -1.38853 Tw (void release\(const Event&\);)' (void keystroke\(const Event&\);)' -1.38845 Tw (void double_click\(const Event&\);)' 16.5203 TL -1.38825 Tw (void allocation_changed\(Canvas*, const Allocation&\);)' 11.5199 TL -1.38849 Tw (void redraw\(\) const;)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38864 Tw (interface ActiveHandler : InputHandler {)' 8.33008 -11.5199 Td -1.38702 Tw (ActiveHandler\(Glyph*, Style*\);)Tj 11.5203 TL -1.38823 Tw (void enter\(\);)' -1.38851 Tw (void leave\(\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 73.0102 -16.5199 Td -1.38848 Tw (Figure 3.2:)Tj 56.1297 0 Td -1.38861 Tw (Handler and InputHandler protocols)Tj ET Q 1077.3 3179.1 3960 10 re f* Q \n \n \n \n \n 1316\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -1678,27 +1678,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 708.3 Tm -1.49973 Tw (pick lower than the top of the ``h'' in ``the'' but above the ``e'' will not miss.)Tj 10.668 -14.6398 Td -1.31678 Tw (Figure 3.3 shows the target class interface. The target behavior is controlled by)Tj -10.668 -13.7402 Td -1.36304 Tw (the sensitivity parameter to the constructor. TargetPrimitiveHit means the body is)Tj 13.7398 TL -1.10696 Tw (hit if the pick region intersects the target's allocation. TargetCharacterHit means)' -1.49973 Tw (the body is hit if the area intersects the target's allocation in the X dimension.)' 0.000149727 Tc 377.52 -578.46 Td (3-)Tj 0 Tc 12.9961 0 Td (4)Tj ET Q 1067.7 4511.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 128.106 434.6 Tm -1.3884 Tw (enum TargetSensitivity {)Tj 0.000201175 Tc 8.33008 -11.5199 Td (TargetPrimitiveHit,)Tj 0.000221676 Tc 11.5199 TL (TargetCharacterHit)' 0.000233889 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 16.5199 TL -1.38883 Tw (interface Target : MonoGlyph {)' 8.33008 -11.5199 Td -1.38781 Tw (Target\(Glyph* body, TargetSensitivity\);)Tj 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 104.14 -16.5199 Td -1.38848 Tw (Figure 3.3:)Tj 56.1301 0 Td -1.38873 Tw (Target class interface)Tj ET Q 1067.7 3357.9 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 708.3 Tm -1.49973 Tw (pick lower than the top of the ``h'' in ``the'' but above the ``e'' will not miss.)Tj 10.668 -14.6398 Td -1.31678 Tw (Figure 3.3 shows the target class interface. The target behavior is controlled by)Tj -10.668 -13.7402 Td -1.36304 Tw (the sensitivity parameter to the constructor. TargetPrimitiveHit means the body is)Tj 13.7398 TL -1.10696 Tw (hit if the pick region intersects the target's allocation. TargetCharacterHit means)' -1.49973 Tw (the body is hit if the area intersects the target's allocation in the X dimension.)' 0.000149727 Tc 377.52 -578.46 Td (3-)Tj 0 Tc 12.9961 0 Td (4)Tj ET Q 1067.7 4511.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 128.106 434.6 Tm -1.3884 Tw (enum TargetSensitivity {)Tj 0.000201175 Tc 8.33008 -11.5199 Td (TargetPrimitiveHit,)Tj 0.000221676 Tc 11.5199 TL (TargetCharacterHit)' 0.000233889 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 16.5199 TL -1.38883 Tw (interface Target : MonoGlyph {)' 8.33008 -11.5199 Td -1.38781 Tw (Target\(Glyph* body, TargetSensitivity\);)Tj 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 104.14 -16.5199 Td -1.38848 Tw (Figure 3.3:)Tj 56.1301 0 Td -1.38873 Tw (Target class interface)Tj ET Q 1067.7 3357.9 3960 10 re f* Q \n \n \n \n \n-638\n+640\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -1735,31 +1735,31 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 4)Tj 0.000171661 Tc 36.9602 TL (Views)' 0 Tc /R35493912 12 Tf 28.3199 TL -0.280429 Tw (This chapter describes the mechanisms for supporting multiple views of data.)' 13.7402 TL -0.0679281 Tw (Currently, this support consists of three protocols: )' 0.00009270 Tc /R36187064 12 Tf 266.301 0 Td (observable)Tj 0 Tc /R35493912 12 Tf 52.6559 0 Td -0.0684967 Tw (, )Tj 0.000112057 Tc /R36187064 12 Tf 8.86289 0 Td (observer)Tj 0 Tc /R35493912 12 Tf 41.9883 0 Td -0.067874 Tw (, and)Tj 0.00004807 Tc /R36187064 12 Tf -369.808 -13.7398 Td (adjustable)Tj 0 Tc /R35493912 12 Tf 50.0039 0 Td -1.33094 Tw (. An observable object is one that has one or more observers that it can)Tj -50.0039 -13.7398 Td -0.72123 Tw (notify \(typically when it changes\). An adjustable object uses an observable for)Tj -1.4727 Tw (each dimension to keep track of observers that can scroll or zoom the visible areas)' -1.49948 Tw (of the object.)' /R35743448 18 Tf 41.2801 TL (4.1)' 35 0 Td -2.24907 Tw (Observable and Observer)Tj /R35493912 12 Tf -35 -32.4 Td -0.271519 Tw (Figure 4.1 shows the observable and observer protocols. An observer can be)Tj 13.7398 TL -1.05264 Tw (attached or detached to an observable. Observable::notify calls Observer::update)' -1.36681 Tw (on each of the attached observers. When an observable object is destroyed, it will)' -1.49931 Tw (call Observer::disconnect on any attached observers.)' /R35743448 18 Tf 41.2801 TL (4.2)' 0.000170135 Tc 35 0 Td (Adjustable)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.911733 Tw (An adjustable is an object that handles requests to modify its viewing area. For)Tj 13.7398 TL -0.164003 Tw (example, a scrollable list is adjustable in that a scrollbar or other object can)' -1.49968 Tw (request that a particular subrange of items in the list be shown.)' 10.668 -14.6398 Td 3.53557 Tw (Figure 4.2 shows the adjustable protocol. Adjustable::attach and)Tj -10.668 -13.7402 Td -1.38564 Tw (Adjustable::detach add an observer to the list of objects notified when a particular)Tj -1.40047 Tw (dimension changes. Adjustable::notify calls update on those observers attached to)' -0.0698194 Tw (the given dimension. Adjustable::notify_all is equivalent to calling notify on)' -1.49914 Tw (every dimension.)' 0.000149727 Tc 377.52 -206.04 Td (4-)Tj 0 Tc 12.9961 0 Td (1)Tj ET Q 1062.9 2589.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 127.626 242.36 Tm -1.38844 Tw (interface Observable {)Tj 8.32969 -11.5203 Td -1.38738 Tw (void attach\(Observer*\);)Tj 11.5199 TL -1.38742 Tw (void detach\(Observer*\);)' -1.38836 Tw (void notify\(\);)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.3885 Tw (interface Observer {)' 8.32969 -11.5203 Td -1.38719 Tw (void update\(Observable*\);)Tj 11.5199 TL -1.38715 Tw (void disconnect\(Observable*\);)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 74.125 -16.5199 Td -1.38847 Tw (Figure 4.1:)Tj 56.1297 0 Td -1.38873 Tw (Observable and observer protocols)Tj ET Q 1062.9 1205.1 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 4)Tj 0.000171661 Tc 36.9602 TL (Views)' 0 Tc /R18360344 12 Tf 28.3199 TL -0.280429 Tw (This chapter describes the mechanisms for supporting multiple views of data.)' 13.7402 TL -0.0679281 Tw (Currently, this support consists of three protocols: )' 0.00009270 Tc /R19053496 12 Tf 266.301 0 Td (observable)Tj 0 Tc /R18360344 12 Tf 52.6559 0 Td -0.0684967 Tw (, )Tj 0.000112057 Tc /R19053496 12 Tf 8.86289 0 Td (observer)Tj 0 Tc /R18360344 12 Tf 41.9883 0 Td -0.067874 Tw (, and)Tj 0.00004807 Tc /R19053496 12 Tf -369.808 -13.7398 Td (adjustable)Tj 0 Tc /R18360344 12 Tf 50.0039 0 Td -1.33094 Tw (. An observable object is one that has one or more observers that it can)Tj -50.0039 -13.7398 Td -0.72123 Tw (notify \(typically when it changes\). An adjustable object uses an observable for)Tj -1.4727 Tw (each dimension to keep track of observers that can scroll or zoom the visible areas)' -1.49948 Tw (of the object.)' /R18609880 18 Tf 41.2801 TL (4.1)' 35 0 Td -2.24907 Tw (Observable and Observer)Tj /R18360344 12 Tf -35 -32.4 Td -0.271519 Tw (Figure 4.1 shows the observable and observer protocols. An observer can be)Tj 13.7398 TL -1.05264 Tw (attached or detached to an observable. Observable::notify calls Observer::update)' -1.36681 Tw (on each of the attached observers. When an observable object is destroyed, it will)' -1.49931 Tw (call Observer::disconnect on any attached observers.)' /R18609880 18 Tf 41.2801 TL (4.2)' 0.000170135 Tc 35 0 Td (Adjustable)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.911733 Tw (An adjustable is an object that handles requests to modify its viewing area. For)Tj 13.7398 TL -0.164003 Tw (example, a scrollable list is adjustable in that a scrollbar or other object can)' -1.49968 Tw (request that a particular subrange of items in the list be shown.)' 10.668 -14.6398 Td 3.53557 Tw (Figure 4.2 shows the adjustable protocol. Adjustable::attach and)Tj -10.668 -13.7402 Td -1.38564 Tw (Adjustable::detach add an observer to the list of objects notified when a particular)Tj -1.40047 Tw (dimension changes. Adjustable::notify calls update on those observers attached to)' -0.0698194 Tw (the given dimension. Adjustable::notify_all is equivalent to calling notify on)' -1.49914 Tw (every dimension.)' 0.000149727 Tc 377.52 -206.04 Td (4-)Tj 0 Tc 12.9961 0 Td (1)Tj ET Q 1062.9 2589.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 127.626 242.36 Tm -1.38844 Tw (interface Observable {)Tj 8.32969 -11.5203 Td -1.38738 Tw (void attach\(Observer*\);)Tj 11.5199 TL -1.38742 Tw (void detach\(Observer*\);)' -1.38836 Tw (void notify\(\);)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.3885 Tw (interface Observer {)' 8.32969 -11.5203 Td -1.38719 Tw (void update\(Observable*\);)Tj 11.5199 TL -1.38715 Tw (void disconnect\(Observable*\);)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 74.125 -16.5199 Td -1.38847 Tw (Figure 4.1:)Tj 56.1297 0 Td -1.38873 Tw (Observable and observer protocols)Tj ET Q 1062.9 1205.1 3960 10 re f* Q \n \n \n \n \n-1310\n+1307\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -1796,31 +1796,31 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 116.718 394.23 Tm 1.95828 Tw (Adjustable::lower and Adjustable::upper define a coordinate range for)Tj -10.668 -13.7402 Td 3.11237 Tw (adjustment in a specific dimension. Adjustable::length is equivalent)Tj 13.7398 TL 2.24574 Tw (to Adjustable::upper minus Adjustable::lower. Adjustable::cur_lower and)' -1.46236 Tw (Adjustable::cur_upper define the region within a coordinate range that is currently)' 0.0908325 Tw (in view. Adjustable::cur_length is equivalent to Adjustable::cur_upper minus)' 0.000123804 Tc (Adjustable::cur_lower.)' 0 Tc 10.668 -14.6402 Td -0.716278 Tw (Adjustable::scroll_forward and Adjustable::scroll_backward add a small fixed)Tj -10.668 -13.7398 Td 0.929058 Tw (amount to Adjustable::cur_lower \(where the amount is determined by the)Tj 0.824958 Tw (adjustable object\). Adjustable::page_forward and Adjustable::page_backward)' 0.00357698 Tw (add a larger fixed amount. Adjustable::scroll_to sets the adjustable's current)' -0.980152 Tw (lower coordinate to a specific value. Adjustable::scale_to sets the current length)' -0.131735 Tw (to a given fraction of the total length. Adjustable::zoom_to sets the scale in)' -0.519854 Tw (all dimensions at once. Adjustable::constrain restricts a value to be within the)' -1.49948 Tw (adjustable's lower and upper bounds.)' /R36187064 12 Tf 10.668 -14.6402 Td -1.49862 Tw (Example: see iv/src/examples/bvalue/main.c.)Tj /R35743448 18 Tf -10.668 -41.2801 Td (4.3)Tj 0.000222206 Tc 35 0 Td (View)Tj 0 Tc /R36187064 12 Tf -35 -32.3996 Td -1.49961 Tw (This section will be completed in the future.)Tj 0.000149727 Tc /R35493912 12 Tf 377.52 -52.4102 Td (4-)Tj 0 Tc 12.9961 0 Td (2)Tj ET Q 1072.5 7072.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 128.586 690.68 Tm -1.38848 Tw (interface Adjustable {)Tj 8.33008 -11.5199 Td -1.38771 Tw (Observable* observable\(DimensionName\) const;)Tj 11.5203 TL -1.38787 Tw (void attach\(DimensionName, Observer*\);)' -1.38789 Tw (void detach\(DimensionName, Observer*\);)' -1.38824 Tw (void notify\(DimensionName\) const;)' -1.38842 Tw (void notify_all\(\) const;)' 16.5199 TL -1.38816 Tw (Coord lower\(DimensionName\) const;)' 11.5203 TL -1.38808 Tw (Coord upper\(DimensionName\) const;)' -1.38807 Tw (Coord length\(DimensionName\) const;)' -1.38791 Tw (Coord cur_lower\(DImensionName\) const;)' -1.38789 Tw (Coord cur_upper\(DimensionName\) const;)' -1.38787 Tw (Coord cur_length\(DimensionName\) const;)' 16.5203 TL -1.38644 Tw (void scroll_forward\(DimensionName\);)' 11.5199 TL -1.38664 Tw (void scroll_backward\(DimensionName\);)' -1.38632 Tw (void page_forward\(DimensionName\);)' -1.38652 Tw (void page_backwards\(DimensionName\);)' 16.5199 TL -1.38837 Tw (void scroll_to\(DImensionName, Coord lower\);)' 11.5203 TL -1.3883 Tw (void scale_to\(DimensionName, float fraction\);)' -1.38799 Tw (void zoom_to\(float magnification\);)' 16.5199 TL -1.3884 Tw (void constrain\(DimensionName, Coord&\) const;)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 109.415 -16.5199 Td -1.38848 Tw (Figure 4.2:)Tj 56.1297 0 Td -1.388 Tw (Adjustable protocol)Tj ET Q 1072.5 4155.9 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 116.718 394.23 Tm 1.95828 Tw (Adjustable::lower and Adjustable::upper define a coordinate range for)Tj -10.668 -13.7402 Td 3.11237 Tw (adjustment in a specific dimension. Adjustable::length is equivalent)Tj 13.7398 TL 2.24574 Tw (to Adjustable::upper minus Adjustable::lower. Adjustable::cur_lower and)' -1.46236 Tw (Adjustable::cur_upper define the region within a coordinate range that is currently)' 0.0908325 Tw (in view. Adjustable::cur_length is equivalent to Adjustable::cur_upper minus)' 0.000123804 Tc (Adjustable::cur_lower.)' 0 Tc 10.668 -14.6402 Td -0.716278 Tw (Adjustable::scroll_forward and Adjustable::scroll_backward add a small fixed)Tj -10.668 -13.7398 Td 0.929058 Tw (amount to Adjustable::cur_lower \(where the amount is determined by the)Tj 0.824958 Tw (adjustable object\). Adjustable::page_forward and Adjustable::page_backward)' 0.00357698 Tw (add a larger fixed amount. Adjustable::scroll_to sets the adjustable's current)' -0.980152 Tw (lower coordinate to a specific value. Adjustable::scale_to sets the current length)' -0.131735 Tw (to a given fraction of the total length. Adjustable::zoom_to sets the scale in)' -0.519854 Tw (all dimensions at once. Adjustable::constrain restricts a value to be within the)' -1.49948 Tw (adjustable's lower and upper bounds.)' /R19053496 12 Tf 10.668 -14.6402 Td -1.49862 Tw (Example: see iv/src/examples/bvalue/main.c.)Tj /R18609880 18 Tf -10.668 -41.2801 Td (4.3)Tj 0.000222206 Tc 35 0 Td (View)Tj 0 Tc /R19053496 12 Tf -35 -32.3996 Td -1.49961 Tw (This section will be completed in the future.)Tj 0.000149727 Tc /R18360344 12 Tf 377.52 -52.4102 Td (4-)Tj 0 Tc 12.9961 0 Td (2)Tj ET Q 1072.5 7072.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 128.586 690.68 Tm -1.38848 Tw (interface Adjustable {)Tj 8.33008 -11.5199 Td -1.38771 Tw (Observable* observable\(DimensionName\) const;)Tj 11.5203 TL -1.38787 Tw (void attach\(DimensionName, Observer*\);)' -1.38789 Tw (void detach\(DimensionName, Observer*\);)' -1.38824 Tw (void notify\(DimensionName\) const;)' -1.38842 Tw (void notify_all\(\) const;)' 16.5199 TL -1.38816 Tw (Coord lower\(DimensionName\) const;)' 11.5203 TL -1.38808 Tw (Coord upper\(DimensionName\) const;)' -1.38807 Tw (Coord length\(DimensionName\) const;)' -1.38791 Tw (Coord cur_lower\(DImensionName\) const;)' -1.38789 Tw (Coord cur_upper\(DimensionName\) const;)' -1.38787 Tw (Coord cur_length\(DimensionName\) const;)' 16.5203 TL -1.38644 Tw (void scroll_forward\(DimensionName\);)' 11.5199 TL -1.38664 Tw (void scroll_backward\(DimensionName\);)' -1.38632 Tw (void page_forward\(DimensionName\);)' -1.38652 Tw (void page_backwards\(DimensionName\);)' 16.5199 TL -1.38837 Tw (void scroll_to\(DImensionName, Coord lower\);)' 11.5203 TL -1.3883 Tw (void scale_to\(DimensionName, float fraction\);)' -1.38799 Tw (void zoom_to\(float magnification\);)' 16.5199 TL -1.3884 Tw (void constrain\(DimensionName, Coord&\) const;)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 109.415 -16.5199 Td -1.38848 Tw (Figure 4.2:)Tj 56.1297 0 Td -1.388 Tw (Adjustable protocol)Tj ET Q 1072.5 4155.9 3960 10 re f* Q \n \n \n \n \n 1210\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -1857,29 +1857,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 18 Tf 1 0 0 1 106.05 704.46 Tm (4.4)Tj 0.000136375 Tc 35 0 Td (Data)Tj 0 Tc /R36187064 12 Tf -35 -32.4 Td -1.49961 Tw (This section will be completed in the future.)Tj /R35743448 18 Tf 41.2801 TL (4.5)' 0.000147247 Tc 35 0 Td (Inset)Tj 0 Tc /R36187064 12 Tf -35 -32.4 Td (This section will be completed in the future.)Tj 0.000149727 Tc /R35493912 12 Tf 377.52 -524.4 Td (4-)Tj 0 Tc 12.9961 0 Td (3)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 18 Tf 1 0 0 1 106.05 704.46 Tm (4.4)Tj 0.000136375 Tc 35 0 Td (Data)Tj 0 Tc /R19053496 12 Tf -35 -32.4 Td -1.49961 Tw (This section will be completed in the future.)Tj /R18609880 18 Tf 41.2801 TL (4.5)' 0.000147247 Tc 35 0 Td (Inset)Tj 0 Tc /R19053496 12 Tf -35 -32.4 Td (This section will be completed in the future.)Tj 0.000149727 Tc /R18360344 12 Tf 377.52 -524.4 Td (4-)Tj 0 Tc 12.9961 0 Td (3)Tj ET Q Q \n \n \n \n \n-254\n+253\n \n \n \n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -1916,31 +1916,31 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 5)Tj 0.000136239 Tc 36.9602 TL (Windows)' 0 Tc /R35493912 12 Tf 28.3199 TL -0.796445 Tw (The previous chapters covered the composition of physical \(glyphs\) and logical)' 13.7402 TL -0.245586 Tw (\(views\) objects. This chapter discusses the other objects necessary to manage)' -1.37352 Tw (where glyphs are drawn. A )' 0.00004323 Tc /R36187064 12 Tf 135.512 0 Td (window)Tj 0 Tc /R35493912 12 Tf 37.3438 0 Td -1.37364 Tw ( is an object that can be mapped onto a )Tj 0.000144323 Tc /R36187064 12 Tf 191.824 0 Td (screen)Tj 0 Tc /R35493912 12 Tf -364.68 -13.7398 Td -1.58287 Tw (and receive input. Associated with a window is the root of a directed acyclic graph)Tj -1.02981 Tw (of glyphs. The window creates a )' 0.00009473 Tc /R36187064 12 Tf 166.573 0 Td (canvas)Tj 0 Tc /R35493912 12 Tf 33.3238 0 Td -1.02989 Tw ( that is bound to a portion of the screen)Tj -199.897 -13.7398 Td -1.33176 Tw (when the window is mapped. The window calls Glyph::draw on the root glyph to)Tj -1.49971 Tw (refresh the canvas and Glyph::pick to determine what to do with input events)' 10.668 -14.6398 Td 0.0820487 Tw (Figure 5.1 shows the Window base class interface. Window::style sets or)Tj -10.668 -13.7398 Td 0.573494 Tw (gets the style associated with the window. Several style attributes control)Tj -0.819305 Tw (characteristics of a window: ªdouble_bufferedº controls whether the window is)' -1.06029 Tw (double-buffered by default, ªvisualº specifies the name of a visual to use for the)' -1.32944 Tw (window, ªvisual_idº specifies the id of the desired visual, and ªoverlayº specifies)' -1.49962 Tw (whether overlay planes should be used for the window.)' 0.000134468 Tc 374.64 -394.62 Td (5-)Tj 0 Tc 12.9957 0 Td (1)Tj ET Q 1079.7 4391.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 129.306 422.6 Tm -1.38865 Tw (interface Window {)Tj 8.33008 -11.5199 Td -1.38856 Tw (Window\(Glyph* = nil\);)Tj 11.5199 TL -1.3882 Tw (void style\(Style*\);)' -1.38863 Tw (Style* style\(\) const;)' -1.38808 Tw (void display\(Display*\);)' -1.38858 Tw (Display* display\(\) const;)' -1.38885 Tw (Canvas* canvas\(\) const;)' -1.38774 Tw (void cursor\(Cursor*\);)' -1.3884 Tw (Cursor* cursor\(\) const;)' -1.38793 Tw (void push_cursor\(\);)' (void pop_cursor\(\);)' 23.0398 TL -1.38864 Tw (void place\(Coord left, Coord bottom\);)' 11.5203 TL -1.38894 Tw (void align\(float x, float y\);)' -1.38882 Tw (Coord left\(\) const, bottom\(\) const, width\(\) const, height\(\) const;)' 23.0398 TL -1.38832 Tw (void map\(\), unmap\(\);)' 11.5199 TL -1.38844 Tw (boolean is_mapped\(\) const;)' -1.38838 Tw (void raise\(\), lower\(\);)' -1.38864 Tw (void move\(Coord left, Coord bottom\);)' -1.38851 Tw (void resize\(\);)' 23.0398 TL -1.38861 Tw (void receive\(const Event&\);)' 11.5203 TL -1.38868 Tw (void grab_pointer\(Cursor* = nil\) const;)' -1.38828 Tw (void ungrab_pointer\(\) const;)' -1.38824 Tw (void repair\(\);)' -8.33008 -11.5199 Td -1.38925 Tw (}; )Tj 114.98 -16.5199 Td -1.38848 Tw (Figure 5.1:)Tj 56.1301 0 Td -1.38836 Tw (Window protocol)Tj ET Q 1079.7 983.898 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 5)Tj 0.000136239 Tc 36.9602 TL (Windows)' 0 Tc /R18360344 12 Tf 28.3199 TL -0.796445 Tw (The previous chapters covered the composition of physical \(glyphs\) and logical)' 13.7402 TL -0.245586 Tw (\(views\) objects. This chapter discusses the other objects necessary to manage)' -1.37352 Tw (where glyphs are drawn. A )' 0.00004323 Tc /R19053496 12 Tf 135.512 0 Td (window)Tj 0 Tc /R18360344 12 Tf 37.3438 0 Td -1.37364 Tw ( is an object that can be mapped onto a )Tj 0.000144323 Tc /R19053496 12 Tf 191.824 0 Td (screen)Tj 0 Tc /R18360344 12 Tf -364.68 -13.7398 Td -1.58287 Tw (and receive input. Associated with a window is the root of a directed acyclic graph)Tj -1.02981 Tw (of glyphs. The window creates a )' 0.00009473 Tc /R19053496 12 Tf 166.573 0 Td (canvas)Tj 0 Tc /R18360344 12 Tf 33.3238 0 Td -1.02989 Tw ( that is bound to a portion of the screen)Tj -199.897 -13.7398 Td -1.33176 Tw (when the window is mapped. The window calls Glyph::draw on the root glyph to)Tj -1.49971 Tw (refresh the canvas and Glyph::pick to determine what to do with input events)' 10.668 -14.6398 Td 0.0820487 Tw (Figure 5.1 shows the Window base class interface. Window::style sets or)Tj -10.668 -13.7398 Td 0.573494 Tw (gets the style associated with the window. Several style attributes control)Tj -0.819305 Tw (characteristics of a window: ªdouble_bufferedº controls whether the window is)' -1.06029 Tw (double-buffered by default, ªvisualº specifies the name of a visual to use for the)' -1.32944 Tw (window, ªvisual_idº specifies the id of the desired visual, and ªoverlayº specifies)' -1.49962 Tw (whether overlay planes should be used for the window.)' 0.000134468 Tc 374.64 -394.62 Td (5-)Tj 0 Tc 12.9957 0 Td (1)Tj ET Q 1079.7 4391.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 129.306 422.6 Tm -1.38865 Tw (interface Window {)Tj 8.33008 -11.5199 Td -1.38856 Tw (Window\(Glyph* = nil\);)Tj 11.5199 TL -1.3882 Tw (void style\(Style*\);)' -1.38863 Tw (Style* style\(\) const;)' -1.38808 Tw (void display\(Display*\);)' -1.38858 Tw (Display* display\(\) const;)' -1.38885 Tw (Canvas* canvas\(\) const;)' -1.38774 Tw (void cursor\(Cursor*\);)' -1.3884 Tw (Cursor* cursor\(\) const;)' -1.38793 Tw (void push_cursor\(\);)' (void pop_cursor\(\);)' 23.0398 TL -1.38864 Tw (void place\(Coord left, Coord bottom\);)' 11.5203 TL -1.38894 Tw (void align\(float x, float y\);)' -1.38882 Tw (Coord left\(\) const, bottom\(\) const, width\(\) const, height\(\) const;)' 23.0398 TL -1.38832 Tw (void map\(\), unmap\(\);)' 11.5199 TL -1.38844 Tw (boolean is_mapped\(\) const;)' -1.38838 Tw (void raise\(\), lower\(\);)' -1.38864 Tw (void move\(Coord left, Coord bottom\);)' -1.38851 Tw (void resize\(\);)' 23.0398 TL -1.38861 Tw (void receive\(const Event&\);)' 11.5203 TL -1.38868 Tw (void grab_pointer\(Cursor* = nil\) const;)' -1.38828 Tw (void ungrab_pointer\(\) const;)' -1.38824 Tw (void repair\(\);)' -8.33008 -11.5199 Td -1.38925 Tw (}; )Tj 114.98 -16.5199 Td -1.38848 Tw (Figure 5.1:)Tj 56.1301 0 Td -1.38836 Tw (Window protocol)Tj ET Q 1079.7 983.898 3960 10 re f* Q \n \n \n \n \n-1414\n+1412\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -1977,27 +1977,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 116.718 708.3 Tm -1.14192 Tw (Window::display sets or gets the display that a window is mapped on \(or nil if)Tj -10.668 -13.7398 Td -1.38801 Tw (the window is not currently mapped\). Window::canvas returns the canvas that the)Tj 13.7402 TL -1.49965 Tw (window passes to its glyph for drawing.)' 10.668 -14.6398 Td -0.937324 Tw (Window::cursor sets or gets the image that tracks a pointing device's position)Tj -10.668 -13.7402 Td 0.0508965 Tw (when the it is inside the window. Cursors are defined by two bitmaps and)Tj 0.629578 Tw (a ``hot spot''. The mask bitmap specifies which pixels are to be drawn,)' 0.549058 Tw (and the pattern bitmap specifies which pixels are in foreground color and)' 0.37611 Tw (which are in background color. The hot spot specifies the location of the)' -0.344141 Tw (pointing device relative to the cursor's lower-left corner. The foreground and)' -0.752894 Tw (background colors for a cursor are defined by the attributes ªpointerColorº and)' -1.49932 Tw (ªpointerColorBackgroundº in the window's style.)' 10.668 -14.6398 Td -0.52365 Tw (Figure 5.2 shows the cursor protocol. A cursor can be created from specific)Tj -10.668 -13.7402 Td -1.40814 Tw (data, pattern and mask bitmaps, a character in a font, or an index into the standard)Tj -0.877093 Tw (cursor information for the target window system. If the cursor is specified with)' -0.0824912 Tw (bitmaps, the hot spot is the origin of the pattern bitmap; if specified with a)' -1.02054 Tw (character, it is the origin of the character's bitmap in the font. An index implies)' -0.641972 Tw (both bitmaps as well as the hot spot. Specific values for the index are usually)' -0.996585 Tw (defined in an include file. For example, standard X11 cursors are defined in the)' -1.4988 Tw (file <X11/cursorfont.h>.)' 10.668 -14.6402 Td 1.61001 Tw (Window::place specifies the desired screen coordinates for a window.)Tj -10.668 -13.7398 Td -1.0486 Tw (Window::align specifies a desired alignment. The alignment values are fractions)Tj 0.245809 Tw (that indicate where the window should appear relative to its coordinates as)' -1.43731 Tw (specified by a call to Window::place. For example, an alignment of 0.0,1.0 means)' -0.459799 Tw (the placement specifies the upper-left corner of the window. An alignment of)' -1.38747 Tw (0.5,0.5 means the placement specifies the center of the window. Unless specified,)' -0.130469 Tw (the alignment will be 0.0,0.0, meaning the placement coordinates specify the)' -1.49932 Tw (lower-left corner of the window.)' 10.668 -14.6402 Td -1.35766 Tw (Window::map requests the window to be mapped onto the screen. If no display)Tj -10.668 -13.7398 Td -0.571438 Tw (has been set, then the session's default display is used. Window::map may be)Tj -1.1816 Tw (asynchronous±one cannot assume the window is usable immediately after calling)' -1.49966 Tw (map. Window::unmap requests that the window be removed from the screen.)' 10.668 -14.6398 Td -0.896623 Tw (Window::raise and Window::lower control the stacking order of a window on)Tj -10.668 -13.7402 Td -1.27697 Tw (the screen. Window::raise makes the window above all the other windows on the)Tj -1.07559 Tw (screen; Window::lower make the window below all the others. These operations)' -0.878593 Tw (usually are neither necessary nor appropriate, as stacking order should normally)' 0.000149727 Tc 374.96 -162.5 Td (5-)Tj 0 Tc 12.9957 0 Td (2)Tj ET Q 1070.1 2097.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 128.346 193.16 Tm -1.38864 Tw (interface Cursor {)Tj 8.33008 -11.5203 Td -1.38904 Tw (Cursor\(short x, short y, const int* pattern, const int* mask\);)Tj 11.5199 TL -1.38878 Tw (Cursor\(const Bitmap* pat, const Bitmap* mask\);)' -1.38876 Tw (Cursor\(const Font*, int pattern, int mask\);)' -1.38798 Tw (Cursor\(int index\);)' -8.33008 -11.5199 Td -1.3893 Tw (}; )Tj 103.59 -16.5203 Td -1.38848 Tw (Figure 5.2:)Tj 56.1301 0 Td -1.38883 Tw (Cursor class interface)Tj ET Q 1070.1 1108.7 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 116.718 708.3 Tm -1.14192 Tw (Window::display sets or gets the display that a window is mapped on \(or nil if)Tj -10.668 -13.7398 Td -1.38801 Tw (the window is not currently mapped\). Window::canvas returns the canvas that the)Tj 13.7402 TL -1.49965 Tw (window passes to its glyph for drawing.)' 10.668 -14.6398 Td -0.937324 Tw (Window::cursor sets or gets the image that tracks a pointing device's position)Tj -10.668 -13.7402 Td 0.0508965 Tw (when the it is inside the window. Cursors are defined by two bitmaps and)Tj 0.629578 Tw (a ``hot spot''. The mask bitmap specifies which pixels are to be drawn,)' 0.549058 Tw (and the pattern bitmap specifies which pixels are in foreground color and)' 0.37611 Tw (which are in background color. The hot spot specifies the location of the)' -0.344141 Tw (pointing device relative to the cursor's lower-left corner. The foreground and)' -0.752894 Tw (background colors for a cursor are defined by the attributes ªpointerColorº and)' -1.49932 Tw (ªpointerColorBackgroundº in the window's style.)' 10.668 -14.6398 Td -0.52365 Tw (Figure 5.2 shows the cursor protocol. A cursor can be created from specific)Tj -10.668 -13.7402 Td -1.40814 Tw (data, pattern and mask bitmaps, a character in a font, or an index into the standard)Tj -0.877093 Tw (cursor information for the target window system. If the cursor is specified with)' -0.0824912 Tw (bitmaps, the hot spot is the origin of the pattern bitmap; if specified with a)' -1.02054 Tw (character, it is the origin of the character's bitmap in the font. An index implies)' -0.641972 Tw (both bitmaps as well as the hot spot. Specific values for the index are usually)' -0.996585 Tw (defined in an include file. For example, standard X11 cursors are defined in the)' -1.4988 Tw (file <X11/cursorfont.h>.)' 10.668 -14.6402 Td 1.61001 Tw (Window::place specifies the desired screen coordinates for a window.)Tj -10.668 -13.7398 Td -1.0486 Tw (Window::align specifies a desired alignment. The alignment values are fractions)Tj 0.245809 Tw (that indicate where the window should appear relative to its coordinates as)' -1.43731 Tw (specified by a call to Window::place. For example, an alignment of 0.0,1.0 means)' -0.459799 Tw (the placement specifies the upper-left corner of the window. An alignment of)' -1.38747 Tw (0.5,0.5 means the placement specifies the center of the window. Unless specified,)' -0.130469 Tw (the alignment will be 0.0,0.0, meaning the placement coordinates specify the)' -1.49932 Tw (lower-left corner of the window.)' 10.668 -14.6402 Td -1.35766 Tw (Window::map requests the window to be mapped onto the screen. If no display)Tj -10.668 -13.7398 Td -0.571438 Tw (has been set, then the session's default display is used. Window::map may be)Tj -1.1816 Tw (asynchronous±one cannot assume the window is usable immediately after calling)' -1.49966 Tw (map. Window::unmap requests that the window be removed from the screen.)' 10.668 -14.6398 Td -0.896623 Tw (Window::raise and Window::lower control the stacking order of a window on)Tj -10.668 -13.7402 Td -1.27697 Tw (the screen. Window::raise makes the window above all the other windows on the)Tj -1.07559 Tw (screen; Window::lower make the window below all the others. These operations)' -0.878593 Tw (usually are neither necessary nor appropriate, as stacking order should normally)' 0.000149727 Tc 374.96 -162.5 Td (5-)Tj 0 Tc 12.9957 0 Td (2)Tj ET Q 1070.1 2097.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 128.346 193.16 Tm -1.38864 Tw (interface Cursor {)Tj 8.33008 -11.5203 Td -1.38904 Tw (Cursor\(short x, short y, const int* pattern, const int* mask\);)Tj 11.5199 TL -1.38878 Tw (Cursor\(const Bitmap* pat, const Bitmap* mask\);)' -1.38876 Tw (Cursor\(const Font*, int pattern, int mask\);)' -1.38798 Tw (Cursor\(int index\);)' -8.33008 -11.5199 Td -1.3893 Tw (}; )Tj 103.59 -16.5203 Td -1.38848 Tw (Figure 5.2:)Tj 56.1301 0 Td -1.38883 Tw (Cursor class interface)Tj ET Q 1070.1 1108.7 3960 10 re f* Q \n \n \n \n \n 1753\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -2034,27 +2034,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 708.3 Tm -1.49965 Tw (be under control of the user through a window manager.)Tj 10.668 -14.6398 Td -1.4842 Tw (The window systems delivers input events to a particular window, which in turn)Tj -10.668 -13.7402 Td -1.36909 Tw (tries to find a handler to process each event. Window::receive examines an event,)Tj 13.7398 TL -0.0842719 Tw (handling window maintenance events internally. For example, X expose and)' -1.49938 Tw (configure events are handled directly by Window::receive.)' 10.668 -14.6398 Td -0.126977 Tw (Window::grab_pointer takes control of pointer input events for the display.)Tj -10.668 -13.7398 Td -0.871777 Tw (Other applications will not receive pointer events until Window::ungrab_pointer)Tj -1.17036 Tw (is called to release control. If a cursor is passed to Window::grab_pointer, it will)' -1.49973 Tw (be used when the pointer is outside the window during the grab.)' 10.668 -14.6402 Td 0.0194591 Tw (If any part of a window's canvas has been damaged, Window::repair will)Tj -10.668 -13.7398 Td 0.143327 Tw (call draw on the root glyph and perform the necessary screen update when)Tj 0.494285 Tw (double-buffering. All windows on a display will be repaired automatically)' -0.900733 Tw (before blocking for input from the display, so applications usually need not call)' -1.499 Tw (Window::repair directly. )' /R35743448 18 Tf 41.2801 TL (5.1)' 0.000119723 Tc 35 0 Td (ManagedWindow)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td 0.953769 Tw (A managed window specifies information for a window manager to use.)Tj 13.7398 TL 0.0424483 Tw (ManagedWindow is an abstract base class with four predefined descendants:)' 0.924904 Tw (ApplicationWindow, TopLevelWindow, TransientWindow, and IconWindow.)' -0.866926 Tw (An application should create one application window, which makes information)' -0.981481 Tw (about command-line arguments available to a session manager, if present on the)' -1.3758 Tw (system. After the application window, normal windows are top-level. A top-level)' -1.44973 Tw (window can have a ``group leader'', which is typically the application window. A)' -0.747705 Tw (window manager may allow quick control of all windows with the same group)' -1.49955 Tw (leader, such as when iconifying or deiconifying.)' 10.668 -14.6402 Td -1.01056 Tw (A transient window is often treated specially by window managers. It may be)Tj -10.668 -13.7398 Td -0.64762 Tw (decorated differently \(or not at all\), or automatically unmapped when the main)Tj -1.19964 Tw (window is iconified. Transient windows are used for temporary controls, such as)' -0.86525 Tw (dialog boxes, but not for unmanaged windows such as popups or pulldowns. A)' -1.49952 Tw (transient is usually associated with another managed window.)' 10.668 -14.6402 Td -0.0817401 Tw (An icon window is a window that is mapped when its associated window)Tj -10.668 -13.7398 Td -0.505971 Tw (is iconified and unmapped when its associated window is deiconified. Calling)Tj -1.4476 Tw (Window::map on an icon window will therefore bind it to the window system, but)' -1.49963 Tw (will not map it on the screen.)' 10.668 -14.6398 Td -0.297931 Tw (Figure 5.3 shows the ManagedWindow protocol. Most of the operations on)Tj -10.668 -13.7402 Td -0.257932 Tw (a managed window set or return information associated with the window. In)Tj -0.268824 Tw (addition, ManagedWindow interprets additional attributes in its style inherited)' 0.430422 Tw (from the base class. The attribute ªnameº specifies a string name for the)' -0.571804 Tw (window manager to use, ªiconNameº specifies a string for the window's icon,)' -0.0556889 Tw (ªgeometryº specifies the desired geometry, and ªiconGeometryº specifies the)' -0.821298 Tw (desired geometry for the window's icon. Geometry specifications are strings of)' -1.50328 Tw (the form ``WxH+X+Y'' where W is the width, H the height, X the left corner, and)' 0.000149727 Tc 374.96 -32.9602 Td (5-)Tj 0 Tc 12.9957 0 Td (3)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 708.3 Tm -1.49965 Tw (be under control of the user through a window manager.)Tj 10.668 -14.6398 Td -1.4842 Tw (The window systems delivers input events to a particular window, which in turn)Tj -10.668 -13.7402 Td -1.36909 Tw (tries to find a handler to process each event. Window::receive examines an event,)Tj 13.7398 TL -0.0842719 Tw (handling window maintenance events internally. For example, X expose and)' -1.49938 Tw (configure events are handled directly by Window::receive.)' 10.668 -14.6398 Td -0.126977 Tw (Window::grab_pointer takes control of pointer input events for the display.)Tj -10.668 -13.7398 Td -0.871777 Tw (Other applications will not receive pointer events until Window::ungrab_pointer)Tj -1.17036 Tw (is called to release control. If a cursor is passed to Window::grab_pointer, it will)' -1.49973 Tw (be used when the pointer is outside the window during the grab.)' 10.668 -14.6402 Td 0.0194591 Tw (If any part of a window's canvas has been damaged, Window::repair will)Tj -10.668 -13.7398 Td 0.143327 Tw (call draw on the root glyph and perform the necessary screen update when)Tj 0.494285 Tw (double-buffering. All windows on a display will be repaired automatically)' -0.900733 Tw (before blocking for input from the display, so applications usually need not call)' -1.499 Tw (Window::repair directly. )' /R18609880 18 Tf 41.2801 TL (5.1)' 0.000119723 Tc 35 0 Td (ManagedWindow)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td 0.953769 Tw (A managed window specifies information for a window manager to use.)Tj 13.7398 TL 0.0424483 Tw (ManagedWindow is an abstract base class with four predefined descendants:)' 0.924904 Tw (ApplicationWindow, TopLevelWindow, TransientWindow, and IconWindow.)' -0.866926 Tw (An application should create one application window, which makes information)' -0.981481 Tw (about command-line arguments available to a session manager, if present on the)' -1.3758 Tw (system. After the application window, normal windows are top-level. A top-level)' -1.44973 Tw (window can have a ``group leader'', which is typically the application window. A)' -0.747705 Tw (window manager may allow quick control of all windows with the same group)' -1.49955 Tw (leader, such as when iconifying or deiconifying.)' 10.668 -14.6402 Td -1.01056 Tw (A transient window is often treated specially by window managers. It may be)Tj -10.668 -13.7398 Td -0.64762 Tw (decorated differently \(or not at all\), or automatically unmapped when the main)Tj -1.19964 Tw (window is iconified. Transient windows are used for temporary controls, such as)' -0.86525 Tw (dialog boxes, but not for unmanaged windows such as popups or pulldowns. A)' -1.49952 Tw (transient is usually associated with another managed window.)' 10.668 -14.6402 Td -0.0817401 Tw (An icon window is a window that is mapped when its associated window)Tj -10.668 -13.7398 Td -0.505971 Tw (is iconified and unmapped when its associated window is deiconified. Calling)Tj -1.4476 Tw (Window::map on an icon window will therefore bind it to the window system, but)' -1.49963 Tw (will not map it on the screen.)' 10.668 -14.6398 Td -0.297931 Tw (Figure 5.3 shows the ManagedWindow protocol. Most of the operations on)Tj -10.668 -13.7402 Td -0.257932 Tw (a managed window set or return information associated with the window. In)Tj -0.268824 Tw (addition, ManagedWindow interprets additional attributes in its style inherited)' 0.430422 Tw (from the base class. The attribute ªnameº specifies a string name for the)' -0.571804 Tw (window manager to use, ªiconNameº specifies a string for the window's icon,)' -0.0556889 Tw (ªgeometryº specifies the desired geometry, and ªiconGeometryº specifies the)' -0.821298 Tw (desired geometry for the window's icon. Geometry specifications are strings of)' -1.50328 Tw (the form ``WxH+X+Y'' where W is the width, H the height, X the left corner, and)' 0.000149727 Tc 374.96 -32.9602 Td (5-)Tj 0 Tc 12.9957 0 Td (3)Tj ET Q Q \n \n \n \n \n-1801\n+1802\n \n \n \n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -2091,27 +2091,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 459.87 Tm -0.976802 Tw (Y the top corner of the window. Either the position or the size may be omitted,)Tj 13.7398 TL -1.40543 Tw (and the position can use ``±'' instead of ``+'' to denote distance from the opposite)' -0.23979 Tw (of the display to the opposite side of the window. For example, a ±X value)' -1.47726 Tw (specifies that the right side of the window should be a distance of X from the right)' -1.49945 Tw (edge of the screen.)' 10.668 -14.6402 Td -0.743217 Tw (ManagedWindow::icon_bitmap and ManagedWindow::icon_mask specify two)Tj -10.668 -13.7398 Td -0.926681 Tw (bitmaps to use to draw an icon. The mask defines the area to be drawn and the)Tj -1.12663 Tw (bitmap defines the foreground and background areas. Pixels that correspond to a)' -0.652968 Tw (one in the bitmap and a one in the mask are drawn with the foreground color.)' -1.42918 Tw (Pixels that correspond to a zero in the bitmap and a one in the mask are draw with)' -1.49974 Tw (the background color. Pixels that correspond to a zero in the mask are not drawn.)' 10.668 -14.6398 Td 0.485046 Tw (ManagedWindow::icon specifies a second window to map when the first)Tj -10.668 -13.7402 Td 0.375625 Tw (window is iconified. Using a window as an icon overrides the other icon)Tj -0.294572 Tw (information. Therefore, it does not make sense to use ManagedWindow::icon)' 2.54434 Tw (in conjunction with icon_bitmap, icon_mask, or the ªiconNameº and)' -1.49837 Tw (ªiconGeometryº attributes.)' 10.668 -14.6398 Td -1.57685 Tw (ManagedWindow::iconic specifies the initial state of a window. If iconic is true,)Tj -10.668 -13.7402 Td -0.804914 Tw (mapping a window will actually map its icon instead. ManagedWindow::iconic)Tj -1.38199 Tw (need not be called directly by an application; it is called automatically if specified)' -1.49936 Tw (by user customization information.)' 10.668 -14.6402 Td -1.41257 Tw (ManagedWindow::iconify requests the window be unmapped and the window's)Tj -10.668 -13.7398 Td -1.52105 Tw (icon be mapped to the screen. ManagedWindow::deiconify reverses the operation,)Tj -1.23313 Tw (unmapping the icon and mapping the original window. It does not make sense to)' -1.49957 Tw (iconify or deiconify an icon window.)' 10.668 -14.6398 Td -1.37428 Tw (ManagedWindow::focus_event specifies handlers for the window receiving and)Tj -10.668 -13.7402 Td -1.01711 Tw (losing keyboard focus from the window manager. ManagedWindow::wm_delete)Tj -1.21396 Tw (specifies a handler for a request from the window manager to delete the window.)' 0.000149727 Tc 374.96 -23.9902 Td (5-)Tj 0 Tc 12.9957 0 Td (4)Tj ET Q 1050.9 7002.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 126.426 683.72 Tm -1.38879 Tw (interface ManagedWindow : Window {)Tj 8.32969 -11.5199 Td -1.38715 Tw (void icon_bitmap\(Bitmap*\);)Tj 11.5199 TL -1.38836 Tw (Bitmap* icon_bitmap\(\) const;)' -1.38758 Tw (void icon_mask\(Bitmap*\);)' -1.38832 Tw (Bitmap* icon_mask\(\) const;)' 16.5199 TL -1.38722 Tw (void icon\(ManagedWindow*\);)' 11.5199 TL -1.3884 Tw (ManagedWindow* icon\(\) const;)' 23.0398 TL -1.38789 Tw (void iconic\(boolean\);)' 11.5203 TL -1.38848 Tw (boolean iconic\(\) const;)' -1.38848 Tw (void iconify\(\);)' -1.38824 Tw (void deiconify\(\);)' 23.0398 TL -1.38856 Tw (void focus_event\(Handler* in, Handler* out\);)' 11.5203 TL -1.38718 Tw (void wm_delete\(Handler*\);)' -8.32969 -11.5199 Td -1.38925 Tw (}; )Tj 79.9648 -16.5199 Td -1.38848 Tw (Figure 5.3:)Tj 56.1301 0 Td -1.38843 Tw (ManagedWindow class interface)Tj ET Q 1050.9 4812.3 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 459.87 Tm -0.976802 Tw (Y the top corner of the window. Either the position or the size may be omitted,)Tj 13.7398 TL -1.40543 Tw (and the position can use ``±'' instead of ``+'' to denote distance from the opposite)' -0.23979 Tw (of the display to the opposite side of the window. For example, a ±X value)' -1.47726 Tw (specifies that the right side of the window should be a distance of X from the right)' -1.49945 Tw (edge of the screen.)' 10.668 -14.6402 Td -0.743217 Tw (ManagedWindow::icon_bitmap and ManagedWindow::icon_mask specify two)Tj -10.668 -13.7398 Td -0.926681 Tw (bitmaps to use to draw an icon. The mask defines the area to be drawn and the)Tj -1.12663 Tw (bitmap defines the foreground and background areas. Pixels that correspond to a)' -0.652968 Tw (one in the bitmap and a one in the mask are drawn with the foreground color.)' -1.42918 Tw (Pixels that correspond to a zero in the bitmap and a one in the mask are draw with)' -1.49974 Tw (the background color. Pixels that correspond to a zero in the mask are not drawn.)' 10.668 -14.6398 Td 0.485046 Tw (ManagedWindow::icon specifies a second window to map when the first)Tj -10.668 -13.7402 Td 0.375625 Tw (window is iconified. Using a window as an icon overrides the other icon)Tj -0.294572 Tw (information. Therefore, it does not make sense to use ManagedWindow::icon)' 2.54434 Tw (in conjunction with icon_bitmap, icon_mask, or the ªiconNameº and)' -1.49837 Tw (ªiconGeometryº attributes.)' 10.668 -14.6398 Td -1.57685 Tw (ManagedWindow::iconic specifies the initial state of a window. If iconic is true,)Tj -10.668 -13.7402 Td -0.804914 Tw (mapping a window will actually map its icon instead. ManagedWindow::iconic)Tj -1.38199 Tw (need not be called directly by an application; it is called automatically if specified)' -1.49936 Tw (by user customization information.)' 10.668 -14.6402 Td -1.41257 Tw (ManagedWindow::iconify requests the window be unmapped and the window's)Tj -10.668 -13.7398 Td -1.52105 Tw (icon be mapped to the screen. ManagedWindow::deiconify reverses the operation,)Tj -1.23313 Tw (unmapping the icon and mapping the original window. It does not make sense to)' -1.49957 Tw (iconify or deiconify an icon window.)' 10.668 -14.6398 Td -1.37428 Tw (ManagedWindow::focus_event specifies handlers for the window receiving and)Tj -10.668 -13.7402 Td -1.01711 Tw (losing keyboard focus from the window manager. ManagedWindow::wm_delete)Tj -1.21396 Tw (specifies a handler for a request from the window manager to delete the window.)' 0.000149727 Tc 374.96 -23.9902 Td (5-)Tj 0 Tc 12.9957 0 Td (4)Tj ET Q 1050.9 7002.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 126.426 683.72 Tm -1.38879 Tw (interface ManagedWindow : Window {)Tj 8.32969 -11.5199 Td -1.38715 Tw (void icon_bitmap\(Bitmap*\);)Tj 11.5199 TL -1.38836 Tw (Bitmap* icon_bitmap\(\) const;)' -1.38758 Tw (void icon_mask\(Bitmap*\);)' -1.38832 Tw (Bitmap* icon_mask\(\) const;)' 16.5199 TL -1.38722 Tw (void icon\(ManagedWindow*\);)' 11.5199 TL -1.3884 Tw (ManagedWindow* icon\(\) const;)' 23.0398 TL -1.38789 Tw (void iconic\(boolean\);)' 11.5203 TL -1.38848 Tw (boolean iconic\(\) const;)' -1.38848 Tw (void iconify\(\);)' -1.38824 Tw (void deiconify\(\);)' 23.0398 TL -1.38856 Tw (void focus_event\(Handler* in, Handler* out\);)' 11.5203 TL -1.38718 Tw (void wm_delete\(Handler*\);)' -8.32969 -11.5199 Td -1.38925 Tw (}; )Tj 79.9648 -16.5199 Td -1.38848 Tw (Figure 5.3:)Tj 56.1301 0 Td -1.38843 Tw (ManagedWindow class interface)Tj ET Q 1050.9 4812.3 3960 10 re f* Q \n \n \n \n \n 1488\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -2148,29 +2148,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 436.07 Tm -1.40488 Tw (If the handler is nil \(which is the initial value\), then the response to this event will)Tj 13.7398 TL -1.49954 Tw (be to call Session::quit.)' 10.668 -14.6402 Td 1.91958 Tw (Figure 5.4 shows the operations on the ManagedWindow subclasses.)Tj -10.668 -13.7398 Td -1.07961 Tw (ApplicationWindow and IconWindow provide no additional operations beyond a)Tj -0.504799 Tw (constructor. TopLevelWindow provides an operation to set or return its group)' -1.18947 Tw (leader. TransientWindow is a subclass to TopLevelWindow that can additionally)' -1.49949 Tw (be associated with a primary window with TransientWindow::transient_for. )' /R35743448 18 Tf 41.2801 TL (5.2)' 0.000151201 Tc 35 0 Td (PopupWindow)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td 0.3663 Tw (A popup window is mapped directly to a screen without window manager)Tj 13.7398 TL -0.275716 Tw (interaction \(or knowledge\). In the X Window System, a popup window will)' -1.21428 Tw (override the normal redirection of map requests to window managers. Popups on)' -1.39819 Tw (X also will request that the pixels under the popup be saved to avoid a subsequent)' -1.49965 Tw (exposure when the popup is unmapped.)' 10.668 -14.6398 Td -1.4848 Tw (Popups should only be used for temporary windows, such as popup or pulldown)Tj -10.668 -13.7398 Td -1.05148 Tw (menus. Because they do not go through the window manager, popups should be)Tj -0.317955 Tw (placed explicitly. Here is an example of using a popup that appears below a)' -1.49975 Tw (menubar, aligning the top of the popup to the lower left corner of the menubar:)' /R36761712 10 Tf 16.6602 -18.4801 Td -1.38886 Tw (void pulldown\(Window* menubar, Glyph* g\) {)Tj 8.32969 -11.5199 Td -1.38865 Tw (PopupWindow* popup = new PopupWindow\(g\);)Tj 8.33008 -11.5199 Td -1.38336 Tw (popup->place\(menubar->left\(\), menubar\(\)->bottom\(\)\);)Tj 11.5203 TL -1.38703 Tw (popup->align\(0.0, 1.0\);)' -1.38801 Tw (popup->map\(\); )' 0.000149727 Tc /R35493912 12 Tf 341.64 -29.5301 Td (5-)Tj 0 Tc 12.9957 0 Td (5)Tj ET Q 1070.1 7060.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 128.346 689.48 Tm -1.38858 Tw (interface ApplicationWindow : ManagedWindow {)Tj 0.000179584 Tc 8.33008 -11.5199 Td (ApplicationWindow\(Glyph*\);)Tj 0.000184298 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 23.0398 TL -1.38862 Tw (interface TopLevelWindow : ManagedWindow {)' 0.00018974 Tc 8.33008 -11.5199 Td (TopLevelWindow\(Glyph*\);)Tj 0 Tc 11.5199 TL -1.38614 Tw (void group_leader\(ManagedWindow*\);)' -1.38786 Tw (ManagedWindow* group_leader\(\) const;)' 0.000184298 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 23.0398 TL -1.3886 Tw (interface TransientWindow : TopLevelWindow {)' 0.000197411 Tc 8.33008 -11.5199 Td (TransientWindow\(Glyph*\);)Tj 0 Tc 11.5203 TL -1.38602 Tw (void transient_for\(ManagedWindow*\);)' -1.38817 Tw (void ManagedWindow* transient_for\(\) const;)' 0.000184298 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 23.0398 TL -1.38871 Tw (interface IconWindow : ManagedWindow {)' 0.000191939 Tc 8.33008 -11.5203 Td (IconWindow\(Glyph*\);)Tj 0 Tc -8.33008 -11.5199 Td -1.3893 Tw (}; )Tj 87.1898 -16.5199 Td -1.38848 Tw (Figure 5.4:)Tj 56.1301 0 Td -1.38782 Tw (ManagedWindow subclasses)Tj ET Q 1070.1 4574.3 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 436.07 Tm -1.40488 Tw (If the handler is nil \(which is the initial value\), then the response to this event will)Tj 13.7398 TL -1.49954 Tw (be to call Session::quit.)' 10.668 -14.6402 Td 1.91958 Tw (Figure 5.4 shows the operations on the ManagedWindow subclasses.)Tj -10.668 -13.7398 Td -1.07961 Tw (ApplicationWindow and IconWindow provide no additional operations beyond a)Tj -0.504799 Tw (constructor. TopLevelWindow provides an operation to set or return its group)' -1.18947 Tw (leader. TransientWindow is a subclass to TopLevelWindow that can additionally)' -1.49949 Tw (be associated with a primary window with TransientWindow::transient_for. )' /R18609880 18 Tf 41.2801 TL (5.2)' 0.000151201 Tc 35 0 Td (PopupWindow)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td 0.3663 Tw (A popup window is mapped directly to a screen without window manager)Tj 13.7398 TL -0.275716 Tw (interaction \(or knowledge\). In the X Window System, a popup window will)' -1.21428 Tw (override the normal redirection of map requests to window managers. Popups on)' -1.39819 Tw (X also will request that the pixels under the popup be saved to avoid a subsequent)' -1.49965 Tw (exposure when the popup is unmapped.)' 10.668 -14.6398 Td -1.4848 Tw (Popups should only be used for temporary windows, such as popup or pulldown)Tj -10.668 -13.7398 Td -1.05148 Tw (menus. Because they do not go through the window manager, popups should be)Tj -0.317955 Tw (placed explicitly. Here is an example of using a popup that appears below a)' -1.49975 Tw (menubar, aligning the top of the popup to the lower left corner of the menubar:)' /R19628144 10 Tf 16.6602 -18.4801 Td -1.38886 Tw (void pulldown\(Window* menubar, Glyph* g\) {)Tj 8.32969 -11.5199 Td -1.38865 Tw (PopupWindow* popup = new PopupWindow\(g\);)Tj 8.33008 -11.5199 Td -1.38336 Tw (popup->place\(menubar->left\(\), menubar\(\)->bottom\(\)\);)Tj 11.5203 TL -1.38703 Tw (popup->align\(0.0, 1.0\);)' -1.38801 Tw (popup->map\(\); )' 0.000149727 Tc /R18360344 12 Tf 341.64 -29.5301 Td (5-)Tj 0 Tc 12.9957 0 Td (5)Tj ET Q 1070.1 7060.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 128.346 689.48 Tm -1.38858 Tw (interface ApplicationWindow : ManagedWindow {)Tj 0.000179584 Tc 8.33008 -11.5199 Td (ApplicationWindow\(Glyph*\);)Tj 0.000184298 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 23.0398 TL -1.38862 Tw (interface TopLevelWindow : ManagedWindow {)' 0.00018974 Tc 8.33008 -11.5199 Td (TopLevelWindow\(Glyph*\);)Tj 0 Tc 11.5199 TL -1.38614 Tw (void group_leader\(ManagedWindow*\);)' -1.38786 Tw (ManagedWindow* group_leader\(\) const;)' 0.000184298 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 23.0398 TL -1.3886 Tw (interface TransientWindow : TopLevelWindow {)' 0.000197411 Tc 8.33008 -11.5199 Td (TransientWindow\(Glyph*\);)Tj 0 Tc 11.5203 TL -1.38602 Tw (void transient_for\(ManagedWindow*\);)' -1.38817 Tw (void ManagedWindow* transient_for\(\) const;)' 0.000184298 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 23.0398 TL -1.38871 Tw (interface IconWindow : ManagedWindow {)' 0.000191939 Tc 8.33008 -11.5203 Td (IconWindow\(Glyph*\);)Tj 0 Tc -8.33008 -11.5199 Td -1.3893 Tw (}; )Tj 87.1898 -16.5199 Td -1.38848 Tw (Figure 5.4:)Tj 56.1301 0 Td -1.38782 Tw (ManagedWindow subclasses)Tj ET Q 1070.1 4574.3 3960 10 re f* Q \n \n \n \n \n-1404\n+1403\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -2207,31 +2207,31 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT 0.000156403 Tc /R36761712 10 Tf 1 0 0 1 122.71 709.26 Tm (})Tj 0 Tc /R35743448 18 Tf -16.6602 -54.7602 Td (5.3)Tj 0.000102452 Tc 35 0 Td (Display)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.809385 Tw (A )Tj 0.00005995 Tc /R36187064 12 Tf 13.0449 0 Td (display)Tj 0 Tc /R35493912 12 Tf 34.668 0 Td -0.809375 Tw ( is the unit of window system control; typically it consists of a single)Tj -47.7129 -13.7398 Td -0.091685 Tw (screen, keyboard, and a mouse or other pointing device. Application objects)Tj 13.7402 TL -0.692708 Tw (typically need not deal directly with a display; the functionality of the window)' -1.49936 Tw (class is normally sufficient.)' 10.668 -14.6402 Td -0.997759 Tw (Figure 5.5 shows the display class interface. Display::open is a static member)Tj -10.668 -13.7398 Td 0.321829 Tw (function that opens a connection to the display with the given name. The)Tj 0.596637 Tw (interpretation of a display name is system-dependent. On X, the name is)' 0.00009259 Tc /R36187064 12 Tf (host:number)' 0 Tc /R35493912 12 Tf 60.6602 0 Td -1.25371 Tw ( where )Tj 0.00002480 Tc /R36187064 12 Tf 36.3 0 Td (host)Tj 0 Tc /R35493912 12 Tf 20.0039 0 Td -1.25379 Tw ( is a machine's hostname and )Tj 0.000104904 Tc /R36187064 12 Tf 146.928 0 Td (number)Tj 0 Tc /R35493912 12 Tf 36.6598 0 Td -1.25383 Tw ( is the index for the)Tj -300.552 -13.7398 Td -0.838504 Tw (display connected to that host \(typically 0\). If successful, Display::open returns)Tj -0.113732 Tw (a pointer to a display object. If not successful, it returns nil. Display::close)' -1.49909 Tw (terminates the connection.)' 10.668 -14.6398 Td 0.12639 Tw (Display::width and Display::height return the dimensions in coordinates of)Tj -10.668 -13.7402 Td -0.545175 Tw (the display's current screen. Display::a_width and Display::a_height return the)Tj -1.49971 Tw (dimensions in points \(72 points = one inch\).)' 0.000149727 Tc 374.96 -367.54 Td (5-)Tj 0 Tc 12.9957 0 Td (6)Tj ET Q 1072.5 4202 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 128.586 403.64 Tm -1.38873 Tw (interface Display {)Tj 8.33008 -11.5199 Td -1.38855 Tw (static Display* open\(const String&\);)Tj 11.5199 TL -1.38852 Tw (static Display* open\(\);)' -1.38862 Tw (virtual void close\(\);)' 16.5199 TL -1.38869 Tw (virtual Coord width\(\) const;)' 11.5203 TL -1.38862 Tw (virtual Coord height\(\) const;)' -1.38861 Tw (virtual Coord a_width\(\) const;)' -1.38854 Tw (virtual Coord a_height\(\) const;)' -1.38823 Tw (int to_pixels\(Coord\) const;)' -1.38813 Tw (Coord to_coord\(int\) const;)' 16.5203 TL -1.38815 Tw (virtual void set_screen\(int\);)' -1.38838 Tw (virtual void style\(Style*\);)' 11.5199 TL -1.38878 Tw (virtual Style* style\(\) const;)' 16.5199 TL -1.3884 Tw (virtual void repair\(\);)' 11.5199 TL -1.38854 Tw (virtual void flush\(\);)' -1.38877 Tw (virtual void sync\(\))' 16.5199 TL -1.38817 Tw (virtual void ring_bell\(int\);)' 11.5199 TL -1.3885 Tw (virtual void set_key_click\(int\);)' -1.38773 Tw (virtual void set_auto_repeat\(boolean\);)' -1.38856 Tw (virtual void set_pointer_feedback\(int thresh, int scale\);)' -1.3888 Tw (virtual void move_pointer\(Coord x, Coord y\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 100.81 -16.5199 Td -1.38848 Tw (Figure 5.5:)Tj 56.1301 0 Td -1.38886 Tw (Display class interface.)Tj ET Q 1072.5 1120.3 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT 0.000156403 Tc /R19628144 10 Tf 1 0 0 1 122.71 709.26 Tm (})Tj 0 Tc /R18609880 18 Tf -16.6602 -54.7602 Td (5.3)Tj 0.000102452 Tc 35 0 Td (Display)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.809385 Tw (A )Tj 0.00005995 Tc /R19053496 12 Tf 13.0449 0 Td (display)Tj 0 Tc /R18360344 12 Tf 34.668 0 Td -0.809375 Tw ( is the unit of window system control; typically it consists of a single)Tj -47.7129 -13.7398 Td -0.091685 Tw (screen, keyboard, and a mouse or other pointing device. Application objects)Tj 13.7402 TL -0.692708 Tw (typically need not deal directly with a display; the functionality of the window)' -1.49936 Tw (class is normally sufficient.)' 10.668 -14.6402 Td -0.997759 Tw (Figure 5.5 shows the display class interface. Display::open is a static member)Tj -10.668 -13.7398 Td 0.321829 Tw (function that opens a connection to the display with the given name. The)Tj 0.596637 Tw (interpretation of a display name is system-dependent. On X, the name is)' 0.00009259 Tc /R19053496 12 Tf (host:number)' 0 Tc /R18360344 12 Tf 60.6602 0 Td -1.25371 Tw ( where )Tj 0.00002480 Tc /R19053496 12 Tf 36.3 0 Td (host)Tj 0 Tc /R18360344 12 Tf 20.0039 0 Td -1.25379 Tw ( is a machine's hostname and )Tj 0.000104904 Tc /R19053496 12 Tf 146.928 0 Td (number)Tj 0 Tc /R18360344 12 Tf 36.6598 0 Td -1.25383 Tw ( is the index for the)Tj -300.552 -13.7398 Td -0.838504 Tw (display connected to that host \(typically 0\). If successful, Display::open returns)Tj -0.113732 Tw (a pointer to a display object. If not successful, it returns nil. Display::close)' -1.49909 Tw (terminates the connection.)' 10.668 -14.6398 Td 0.12639 Tw (Display::width and Display::height return the dimensions in coordinates of)Tj -10.668 -13.7402 Td -0.545175 Tw (the display's current screen. Display::a_width and Display::a_height return the)Tj -1.49971 Tw (dimensions in points \(72 points = one inch\).)' 0.000149727 Tc 374.96 -367.54 Td (5-)Tj 0 Tc 12.9957 0 Td (6)Tj ET Q 1072.5 4202 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 128.586 403.64 Tm -1.38873 Tw (interface Display {)Tj 8.33008 -11.5199 Td -1.38855 Tw (static Display* open\(const String&\);)Tj 11.5199 TL -1.38852 Tw (static Display* open\(\);)' -1.38862 Tw (virtual void close\(\);)' 16.5199 TL -1.38869 Tw (virtual Coord width\(\) const;)' 11.5203 TL -1.38862 Tw (virtual Coord height\(\) const;)' -1.38861 Tw (virtual Coord a_width\(\) const;)' -1.38854 Tw (virtual Coord a_height\(\) const;)' -1.38823 Tw (int to_pixels\(Coord\) const;)' -1.38813 Tw (Coord to_coord\(int\) const;)' 16.5203 TL -1.38815 Tw (virtual void set_screen\(int\);)' -1.38838 Tw (virtual void style\(Style*\);)' 11.5199 TL -1.38878 Tw (virtual Style* style\(\) const;)' 16.5199 TL -1.3884 Tw (virtual void repair\(\);)' 11.5199 TL -1.38854 Tw (virtual void flush\(\);)' -1.38877 Tw (virtual void sync\(\))' 16.5199 TL -1.38817 Tw (virtual void ring_bell\(int\);)' 11.5199 TL -1.3885 Tw (virtual void set_key_click\(int\);)' -1.38773 Tw (virtual void set_auto_repeat\(boolean\);)' -1.38856 Tw (virtual void set_pointer_feedback\(int thresh, int scale\);)' -1.3888 Tw (virtual void move_pointer\(Coord x, Coord y\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 100.81 -16.5199 Td -1.38848 Tw (Figure 5.5:)Tj 56.1301 0 Td -1.38886 Tw (Display class interface.)Tj ET Q 1072.5 1120.3 3960 10 re f* Q \n \n \n \n \n 1389\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -2268,27 +2268,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 116.718 708.3 Tm 0.72656 Tw (Display::to_pixels and Display::to_coord convert between coordinates and)Tj -10.668 -13.7398 Td -0.963903 Tw (pixels. The conversion is a function of the )Tj 0.00002035 Tc /R36187064 12 Tf 215.582 0 Td (dpi)Tj 0 Tc /R35493912 12 Tf 15.3359 0 Td -0.963935 Tw ( attribute, which is 75 by default.)Tj -230.918 -13.7402 Td -1.49968 Tw (One coordinate unit length is a printer's point, defined as 72/)Tj 0.00002035 Tc /R36187064 12 Tf 292.297 0 Td (dpi)Tj 0 Tc /R35493912 12 Tf 15.3363 0 Td -1.49979 Tw ( pixels.)Tj -296.965 -14.6398 Td 0.72643 Tw (Display::set_screen sets the current screen to use for display operations.)Tj -10.668 -13.7402 Td -1.49952 Tw (Initially, current screen is set to 0.)Tj 10.668 -14.6398 Td -0.729787 Tw (Display::repair calls Window::repair for each window on the display that has)Tj -10.668 -13.7398 Td -0.170062 Tw (a canvas with damage. It is not necessary to call Display::repair directly, as)Tj 13.7402 TL -1.49954 Tw (windows will automatically be repaired before blocking for input events.)' 10.668 -14.6398 Td 0.0763652 Tw (Display::flush and Display::sync are used to synchronize with the window)Tj -10.668 -13.7402 Td -0.823103 Tw (system. Display::flush repairs all damaged windows on the display and ensures)Tj -1.19831 Tw (that any pending requests have been sent to the window system. Display::sync is)' -0.914023 Tw (the same as Display::flush, but additionally waits for an acknowledgement from)' -1.49937 Tw (the window system.)' 10.668 -14.6398 Td -0.278805 Tw (Display::ring_bell sounds the workstation's bell at a specified volume. The)Tj -10.668 -13.7402 Td -1.05339 Tw (parameter should be between 0 and 100, where 0 is silent and 100 is the loudest)Tj -1.49938 Tw (possible bell.)' 10.668 -14.6398 Td 1.94234 Tw (The operations set_key_click, set_auto_repeat, and set_pointer_feedback)Tj -10.668 -13.7402 Td -0.694052 Tw (modify the key click volume, the flag determining whether keys should repeat,)Tj -0.0713642 Tw (and the pointer interpretation parameters, respectively. Display::move_pointer)' -0.229824 Tw (changes the position of the input pointer. This operation can have surprising)' -1.49963 Tw (effects to the user and should generally be avoided.)' 0.000149727 Tc 374.96 -354.86 Td (5-)Tj 0 Tc 12.9957 0 Td (7)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 116.718 708.3 Tm 0.72656 Tw (Display::to_pixels and Display::to_coord convert between coordinates and)Tj -10.668 -13.7398 Td -0.963903 Tw (pixels. The conversion is a function of the )Tj 0.00002035 Tc /R19053496 12 Tf 215.582 0 Td (dpi)Tj 0 Tc /R18360344 12 Tf 15.3359 0 Td -0.963935 Tw ( attribute, which is 75 by default.)Tj -230.918 -13.7402 Td -1.49968 Tw (One coordinate unit length is a printer's point, defined as 72/)Tj 0.00002035 Tc /R19053496 12 Tf 292.297 0 Td (dpi)Tj 0 Tc /R18360344 12 Tf 15.3363 0 Td -1.49979 Tw ( pixels.)Tj -296.965 -14.6398 Td 0.72643 Tw (Display::set_screen sets the current screen to use for display operations.)Tj -10.668 -13.7402 Td -1.49952 Tw (Initially, current screen is set to 0.)Tj 10.668 -14.6398 Td -0.729787 Tw (Display::repair calls Window::repair for each window on the display that has)Tj -10.668 -13.7398 Td -0.170062 Tw (a canvas with damage. It is not necessary to call Display::repair directly, as)Tj 13.7402 TL -1.49954 Tw (windows will automatically be repaired before blocking for input events.)' 10.668 -14.6398 Td 0.0763652 Tw (Display::flush and Display::sync are used to synchronize with the window)Tj -10.668 -13.7402 Td -0.823103 Tw (system. Display::flush repairs all damaged windows on the display and ensures)Tj -1.19831 Tw (that any pending requests have been sent to the window system. Display::sync is)' -0.914023 Tw (the same as Display::flush, but additionally waits for an acknowledgement from)' -1.49937 Tw (the window system.)' 10.668 -14.6398 Td -0.278805 Tw (Display::ring_bell sounds the workstation's bell at a specified volume. The)Tj -10.668 -13.7402 Td -1.05339 Tw (parameter should be between 0 and 100, where 0 is silent and 100 is the loudest)Tj -1.49938 Tw (possible bell.)' 10.668 -14.6398 Td 1.94234 Tw (The operations set_key_click, set_auto_repeat, and set_pointer_feedback)Tj -10.668 -13.7402 Td -0.694052 Tw (modify the key click volume, the flag determining whether keys should repeat,)Tj -0.0713642 Tw (and the pointer interpretation parameters, respectively. Display::move_pointer)' -0.229824 Tw (changes the position of the input pointer. This operation can have surprising)' -1.49963 Tw (effects to the user and should generally be avoided.)' 0.000149727 Tc 374.96 -354.86 Td (5-)Tj 0 Tc 12.9957 0 Td (7)Tj ET Q Q \n \n \n \n \n 1136\n \n \n \n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -2325,27 +2325,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 6)Tj 0.000173781 Tc 36.9602 TL (Rendering)' 0 Tc /R35493912 12 Tf 28.3199 TL -1.14932 Tw (This chapter describes the InterViews classes for drawing on the screen and on a)' 13.7402 TL -0.435469 Tw (printer. The two primary classes are Canvas, which represents an area on the)' -1.03971 Tw (screen, and Printer, which sends output suitable for printing to an output stream.)' -0.789918 Tw (The drawing classes are intended to be simple and resolution-independent. The)' -1.4993 Tw (programming interface resembles the PostScript drawing operations.)' 10.668 -14.6398 Td -0.206219 Tw (Printer is a subclass of Canvas, and as such implements the same drawing)Tj -10.668 -13.7402 Td -1.42436 Tw (operations as Canvas. However, it is possible that glyphs may use other rendering)Tj -0.76334 Tw (operations than those provided by Canvas, such as for 3D. In this case, glyphs)' -0.0247339 Tw (should provide distinct draw and print operations. If a glyph does not need)' -1.38206 Tw (operations other than those provided by Canvas then the glyph can rely on default)' -1.34469 Tw (implementation of drawing on a printer, which just calls the canvas-directed draw)' -1.49955 Tw (with the printer as the target. )' /R35743448 18 Tf 41.2797 TL (6.1)' 35 0 Td -2.2485 Tw (Graphics Attributes)Tj /R35493912 12 Tf -35 -32.4 Td 0.301151 Tw (InterViews provides classes that represent graphics attributes such as colors)Tj 13.7402 TL 0.453754 Tw (and fonts. The instances are all sharable, meaning the classes are derived)' 0.021237 Tw (from Resource. The objects are also display-independent, meaning they will)' 0.00210876 Tw (correspond to several underlying objects in applications that run on multiple)' -1.43181 Tw (displays. For example, a single InterViews color object might have different pixel)' -1.49955 Tw (values on different displays. )' /R35743448 14 Tf 26.4 TL (6.1.1)' 0.000162506 Tc 40 0 Td (Brush)Tj 0 Tc /R35493912 12 Tf -40 -20.4402 Td -0.37075 Tw (A brush defines the line thickness and line style for drawing operations. The)Tj 13.7398 TL 0.787961 Tw (effect of these operations is as if a line segment equal in length to the)' -0.632919 Tw (brush's width were dragged along an infinitely thin path between the specified)' -1.30596 Tw (coordinates. At each point along the path the brush is angled perpendicular to the)' -0.515697 Tw (path. As a special case, a brush width of zero specifies a minimal-width line.)' -0.952042 Tw (Many devices can render minimal-width lines more quickly than wide lines, but)' -1.09223 Tw (the resulting display may vary slightly across devices. A solid brush style paints)' -0.936183 Tw (all pixels along the path with a single color. A dashed brush defines alternating)' -0.229492 Tw (foreground and background segments, measured along the length of the path.)' -1.49954 Tw (Foreground segments are painted, while background segments are not.)' 10.668 -14.6402 Td -1.26349 Tw (Figure 6.1 shows the Brush class interface. The first constructor creates a solid)Tj -10.668 -13.7398 Td -1.00951 Tw (brush of the given width. The second constructor creates a brush with the given)Tj -1.41688 Tw (width and line style. The pattern is an array of integers that specifies the length of)' -0.659479 Tw (successive foreground and background segments. Even-numbered array indices)' 0.448395 Tw (\(starting from 0\) specify the length of foreground segments; odd-numbered)' 0.000149727 Tc 372.72 -23.9602 Td (6-)Tj 0 Tc 12.9961 0 Td (1)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 6)Tj 0.000173781 Tc 36.9602 TL (Rendering)' 0 Tc /R18360344 12 Tf 28.3199 TL -1.14932 Tw (This chapter describes the InterViews classes for drawing on the screen and on a)' 13.7402 TL -0.435469 Tw (printer. The two primary classes are Canvas, which represents an area on the)' -1.03971 Tw (screen, and Printer, which sends output suitable for printing to an output stream.)' -0.789918 Tw (The drawing classes are intended to be simple and resolution-independent. The)' -1.4993 Tw (programming interface resembles the PostScript drawing operations.)' 10.668 -14.6398 Td -0.206219 Tw (Printer is a subclass of Canvas, and as such implements the same drawing)Tj -10.668 -13.7402 Td -1.42436 Tw (operations as Canvas. However, it is possible that glyphs may use other rendering)Tj -0.76334 Tw (operations than those provided by Canvas, such as for 3D. In this case, glyphs)' -0.0247339 Tw (should provide distinct draw and print operations. If a glyph does not need)' -1.38206 Tw (operations other than those provided by Canvas then the glyph can rely on default)' -1.34469 Tw (implementation of drawing on a printer, which just calls the canvas-directed draw)' -1.49955 Tw (with the printer as the target. )' /R18609880 18 Tf 41.2797 TL (6.1)' 35 0 Td -2.2485 Tw (Graphics Attributes)Tj /R18360344 12 Tf -35 -32.4 Td 0.301151 Tw (InterViews provides classes that represent graphics attributes such as colors)Tj 13.7402 TL 0.453754 Tw (and fonts. The instances are all sharable, meaning the classes are derived)' 0.021237 Tw (from Resource. The objects are also display-independent, meaning they will)' 0.00210876 Tw (correspond to several underlying objects in applications that run on multiple)' -1.43181 Tw (displays. For example, a single InterViews color object might have different pixel)' -1.49955 Tw (values on different displays. )' /R18609880 14 Tf 26.4 TL (6.1.1)' 0.000162506 Tc 40 0 Td (Brush)Tj 0 Tc /R18360344 12 Tf -40 -20.4402 Td -0.37075 Tw (A brush defines the line thickness and line style for drawing operations. The)Tj 13.7398 TL 0.787961 Tw (effect of these operations is as if a line segment equal in length to the)' -0.632919 Tw (brush's width were dragged along an infinitely thin path between the specified)' -1.30596 Tw (coordinates. At each point along the path the brush is angled perpendicular to the)' -0.515697 Tw (path. As a special case, a brush width of zero specifies a minimal-width line.)' -0.952042 Tw (Many devices can render minimal-width lines more quickly than wide lines, but)' -1.09223 Tw (the resulting display may vary slightly across devices. A solid brush style paints)' -0.936183 Tw (all pixels along the path with a single color. A dashed brush defines alternating)' -0.229492 Tw (foreground and background segments, measured along the length of the path.)' -1.49954 Tw (Foreground segments are painted, while background segments are not.)' 10.668 -14.6402 Td -1.26349 Tw (Figure 6.1 shows the Brush class interface. The first constructor creates a solid)Tj -10.668 -13.7398 Td -1.00951 Tw (brush of the given width. The second constructor creates a brush with the given)Tj -1.41688 Tw (width and line style. The pattern is an array of integers that specifies the length of)' -0.659479 Tw (successive foreground and background segments. Even-numbered array indices)' 0.448395 Tw (\(starting from 0\) specify the length of foreground segments; odd-numbered)' 0.000149727 Tc 372.72 -23.9602 Td (6-)Tj 0 Tc 12.9961 0 Td (1)Tj ET Q Q \n \n \n \n \n-1708\n+1709\n \n \n \n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -2382,29 +2382,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 602.15 Tm -0.815839 Tw (indices specify background segments. The )Tj 0.000201416 Tc /R36761712 10 Tf 215.65 0 Td (count)Tj 0 Tc /R35493912 12 Tf 24.4602 0 Td -0.815947 Tw ( is the number of entries in the)Tj -240.11 -13.7398 Td -1.12726 Tw (array. The count can be zero, which specifies a solid brush. The last constructor)Tj 13.7402 TL -0.470867 Tw (defines a brush with a given width and a style specified by a bit vector. The)' -0.645674 Tw (least significant 16 bits of )' 0.000268664 Tc /R36761712 10 Tf 135.537 0 Td (pattern)Tj 0 Tc /R35493912 12 Tf 31.1301 0 Td -0.645671 Tw ( are interpreted as a bit pattern, with one bits)Tj -166.667 -13.7402 Td -1.49963 Tw (specifying foreground segments and zero bits specifying background segments. )Tj /R35743448 14 Tf 26.4 TL (6.1.2)' 0.000154114 Tc 40 0 Td (Color)Tj 0 Tc /R35493912 12 Tf -40 -20.4398 Td -1.15335 Tw (A color object defines an output color, which is specified by a mix of RGB \(red,)Tj 13.7398 TL -1.44197 Tw (green, and blue\) intensities, and an alpha value for blending. Figure 6.2 shows the)' -0.401885 Tw (Color class interface. RGB and alpha values are represented as floating point)' -0.676172 Tw (numbers between 0 and 1, where 1 is full intensity \(or visibility in the case of)' -1.34278 Tw (alpha\). A color object is created with the RGB intensities, an alpha value \(default)' -0.582891 Tw (is 1.0\), and a drawing operation. A color drawing operation need be specified)' -1.19728 Tw (only on rare occasions. The default operation, Copy)' 0.00006104 Tc /R36761712 12 Tf 254.988 0 Td (,)Tj 0 Tc /R35493912 12 Tf 3.33594 0 Td -1.19736 Tw ( blends the color in directly.)Tj -258.324 -13.7402 Td -1.09956 Tw (The Xor operation uses a pixel value computed by taking the exclusive-or of the)Tj -1.49979 Tw (color and the existing pixel value. Xor is only useful on a monochrome system.)' 10.668 -14.6402 Td -0.609247 Tw (Color::lookup returns the color with the given name as defined on the given)Tj -10.668 -13.7398 Td -0.905984 Tw (display or nil if the name is not defined. Color::distinguished determines if two)Tj -1.21588 Tw (colors are distinct on a particular display. A common use of Color::distinguished)' -0.470248 Tw (is to check if a highlighting color is distinct from foreground and background)' -0.478281 Tw (colors. Color::intensities returns the RGB values for a given color on a given)' -0.233171 Tw (display. Color::brightness creates a new color that is brighter or darker than)' -0.429947 Tw (the given color by a certain adjustment. If the adjust parameter is positive, it)' -0.858187 Tw (indicates the new intensity should be the given fraction of the distance between)' -0.837766 Tw (the current intensity and full intensity. If the parameter is negative, its absolute)' -1.49954 Tw (value specifies a distance to zero intensity.)' 10.668 -14.6402 Td -0.162184 Tw (InterViews automatically translates an RGB specification to the appropriate)Tj -10.668 -13.7398 Td -0.750459 Tw (pixel value for a window. This approach hides the system-dependent details of)Tj -0.015647 Tw (color management from applications, making them more portable and giving)' -1.56934 Tw (greater flexibility to graphics system implementors. Under the X Window System,)' 0.460155 Tw (color-intensive applications might not find the default color implementation)' -1.05406 Tw (acceptable. To assist such applications, InterViews provides a way to specify an)' -1.27903 Tw (X visual, either on the command-line with the ``-visual'' flag, or with a ``visual'')' -0.197484 Tw (X resource defined to the desired visual type. For example, on displays that)' -0.196426 Tw (support TrueColor \(which means pixel values can be computed directly from)' -1.47574 Tw (RGB values\) but for which the default visual is not TrueColor, a user could run an)' -1.03665 Tw (application with ``-visual TrueColor'' or define ``*app*visual:TrueColor'' in the)' 0.000149727 Tc 372.72 -24.1902 Td (6-)Tj 0 Tc 12.9961 0 Td (2)Tj ET Q 1060.5 7108.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 127.386 694.28 Tm -1.38898 Tw (interface Brush : Resource {)Tj 8.33008 -11.5199 Td -1.38777 Tw (Brush\(Coord width\);)Tj 11.5203 TL -1.38871 Tw (Brush\(int* pattern, int count, Coord width\);)' -1.38841 Tw (Brush\(int pattern, Coord width\);)' -8.33008 -11.5199 Td -1.38925 Tw (}; )Tj 105.53 -16.5199 Td -1.38848 Tw (Figure 6.1:)Tj 56.1301 0 Td -1.38891 Tw (Brush class interface)Tj ET Q 1060.5 6235.1 3960 10 re f* q 10 0 0 10 0 0 cm BT 0.000149727 Tc /R35493912 12 Tf 1 0 0 1 479.09 76.0602 Tm (6-)Tj 0 Tc 12.9957 0 Td (2)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 602.15 Tm -0.815839 Tw (indices specify background segments. The )Tj 0.000201416 Tc /R19628144 10 Tf 215.65 0 Td (count)Tj 0 Tc /R18360344 12 Tf 24.4602 0 Td -0.815947 Tw ( is the number of entries in the)Tj -240.11 -13.7398 Td -1.12726 Tw (array. The count can be zero, which specifies a solid brush. The last constructor)Tj 13.7402 TL -0.470867 Tw (defines a brush with a given width and a style specified by a bit vector. The)' -0.645674 Tw (least significant 16 bits of )' 0.000268664 Tc /R19628144 10 Tf 135.537 0 Td (pattern)Tj 0 Tc /R18360344 12 Tf 31.1301 0 Td -0.645671 Tw ( are interpreted as a bit pattern, with one bits)Tj -166.667 -13.7402 Td -1.49963 Tw (specifying foreground segments and zero bits specifying background segments. )Tj /R18609880 14 Tf 26.4 TL (6.1.2)' 0.000154114 Tc 40 0 Td (Color)Tj 0 Tc /R18360344 12 Tf -40 -20.4398 Td -1.15335 Tw (A color object defines an output color, which is specified by a mix of RGB \(red,)Tj 13.7398 TL -1.44197 Tw (green, and blue\) intensities, and an alpha value for blending. Figure 6.2 shows the)' -0.401885 Tw (Color class interface. RGB and alpha values are represented as floating point)' -0.676172 Tw (numbers between 0 and 1, where 1 is full intensity \(or visibility in the case of)' -1.34278 Tw (alpha\). A color object is created with the RGB intensities, an alpha value \(default)' -0.582891 Tw (is 1.0\), and a drawing operation. A color drawing operation need be specified)' -1.19728 Tw (only on rare occasions. The default operation, Copy)' 0.00006104 Tc /R19628144 12 Tf 254.988 0 Td (,)Tj 0 Tc /R18360344 12 Tf 3.33594 0 Td -1.19736 Tw ( blends the color in directly.)Tj -258.324 -13.7402 Td -1.09956 Tw (The Xor operation uses a pixel value computed by taking the exclusive-or of the)Tj -1.49979 Tw (color and the existing pixel value. Xor is only useful on a monochrome system.)' 10.668 -14.6402 Td -0.609247 Tw (Color::lookup returns the color with the given name as defined on the given)Tj -10.668 -13.7398 Td -0.905984 Tw (display or nil if the name is not defined. Color::distinguished determines if two)Tj -1.21588 Tw (colors are distinct on a particular display. A common use of Color::distinguished)' -0.470248 Tw (is to check if a highlighting color is distinct from foreground and background)' -0.478281 Tw (colors. Color::intensities returns the RGB values for a given color on a given)' -0.233171 Tw (display. Color::brightness creates a new color that is brighter or darker than)' -0.429947 Tw (the given color by a certain adjustment. If the adjust parameter is positive, it)' -0.858187 Tw (indicates the new intensity should be the given fraction of the distance between)' -0.837766 Tw (the current intensity and full intensity. If the parameter is negative, its absolute)' -1.49954 Tw (value specifies a distance to zero intensity.)' 10.668 -14.6402 Td -0.162184 Tw (InterViews automatically translates an RGB specification to the appropriate)Tj -10.668 -13.7398 Td -0.750459 Tw (pixel value for a window. This approach hides the system-dependent details of)Tj -0.015647 Tw (color management from applications, making them more portable and giving)' -1.56934 Tw (greater flexibility to graphics system implementors. Under the X Window System,)' 0.460155 Tw (color-intensive applications might not find the default color implementation)' -1.05406 Tw (acceptable. To assist such applications, InterViews provides a way to specify an)' -1.27903 Tw (X visual, either on the command-line with the ``-visual'' flag, or with a ``visual'')' -0.197484 Tw (X resource defined to the desired visual type. For example, on displays that)' -0.196426 Tw (support TrueColor \(which means pixel values can be computed directly from)' -1.47574 Tw (RGB values\) but for which the default visual is not TrueColor, a user could run an)' -1.03665 Tw (application with ``-visual TrueColor'' or define ``*app*visual:TrueColor'' in the)' 0.000149727 Tc 372.72 -24.1902 Td (6-)Tj 0 Tc 12.9961 0 Td (2)Tj ET Q 1060.5 7108.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 127.386 694.28 Tm -1.38898 Tw (interface Brush : Resource {)Tj 8.33008 -11.5199 Td -1.38777 Tw (Brush\(Coord width\);)Tj 11.5203 TL -1.38871 Tw (Brush\(int* pattern, int count, Coord width\);)' -1.38841 Tw (Brush\(int pattern, Coord width\);)' -8.33008 -11.5199 Td -1.38925 Tw (}; )Tj 105.53 -16.5199 Td -1.38848 Tw (Figure 6.1:)Tj 56.1301 0 Td -1.38891 Tw (Brush class interface)Tj ET Q 1060.5 6235.1 3960 10 re f* q 10 0 0 10 0 0 cm BT 0.000149727 Tc /R18360344 12 Tf 1 0 0 1 479.09 76.0602 Tm (6-)Tj 0 Tc 12.9957 0 Td (2)Tj ET Q Q \n \n \n \n \n-2115\n+2116\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -2441,29 +2441,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 450.47 Tm -1.49938 Tw (application defaults file. )Tj /R35743448 14 Tf 26.4 TL (6.1.3)' 0.00009775 Tc 40 0 Td (Font)Tj 0 Tc /R35493912 12 Tf -40 -20.4398 Td -0.716618 Tw (A font defines a mapping between character codes and their appearance on the)Tj 13.7402 TL -0.584781 Tw (screen. PSFont is a subclass of Font that uses PostScript metrics for character)' -1.19397 Tw (widths, if the metrics are available on the system. Figure 6.3 shows the Font and)' -0.887268 Tw (PSFont class interfaces. The Font constructor is given the full name of the font)' -0.947053 Tw (and a scaling factor. If the font is used on a display that does not recognize the)' -1.21333 Tw (name, then a default font will be used. Font::find can be used to compute a valid)' -0.783162 Tw (fullname for a font from a given font family name, desired point size, and font)' -0.968134 Tw (style \(such as italic or bold\). If a font is available that matches all but the point)' -1.09929 Tw (size, Font::find will return the font with )' 0.000108719 Tc /R36761712 10 Tf 198.938 0 Td (scale)Tj 0 Tc /R35493912 12 Tf 23.3402 0 Td -1.09943 Tw ( set to the ratio of the desired point)Tj -222.278 -13.7402 Td -1.49953 Tw (size to the actual point size.)Tj 10.668 -14.6398 Td 0.446017 Tw (Font::name returns the full name of the font. Font::encoding returns the)Tj -10.668 -13.7402 Td -0.932683 Tw (character set identification, such as ``iso8859'' for ISO Latin. Font::size returns)Tj -1.49959 Tw (the point size of the font.)' 10.668 -14.6398 Td 0.332889 Tw (Font::font_bbox, Font::char_bbox, and Font::string_bbox return information)Tj -10.668 -13.7402 Td -0.793373 Tw (about the overall font, a specific character in the font, or a string of characters.)Tj -1.34725 Tw (Each operation returns a FontBoundingBox object, which has operations to return)' -1.49895 Tw (detailed information.)' 10.668 -14.6398 Td 1.85957 Tw (FontBoundingBox::ascent returns the extent above the font's baseline;)Tj -10.668 -13.7398 Td 2.169 Tw (FontBoundingBox::descent returns the extent below the font's baseline.)Tj 0.00268555 Tw (FontBoundingBox::left_bearing returns the left edge of the bitmap associated)' -1.49951 Tw (with a character; FontBoundingBox::right_bearing returns the right edge.)' 10.668 -14.6402 Td -0.147977 Tw (Font::width on a single character returns the width of a character's bitmap)Tj -10.668 -13.7398 Td -0.22433 Tw (and on a string it returns the sum of the widths of the individual characters.)Tj 0.000149727 Tc 372.72 -21.85 Td (6-)Tj 0 Tc 12.9961 0 Td (3)Tj 0.000149727 Tc -12.6758 0.160156 Td (6-)Tj 0 Tc 12.9957 0 Td (3)Tj ET Q 1060.5 7089.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 127.386 692.36 Tm -1.38801 Tw (typedef float ColorIntensity;)Tj 11.5203 TL -1.38861 Tw (typedef unsigned int ColorOp;)' 23.0398 TL -1.38898 Tw (interface Color : Resource {)' 8.33008 -11.5199 Td -1.38917 Tw (enum { Copy, Xor };)Tj 0.000225067 Tc 11.5199 TL (Color\()' 0 Tc 8.33008 -11.5203 Td -1.38862 Tw (ColorIntensity r, ColorIntensity g, ColorIntensity b,)Tj -1.38914 Tw (float alpha = 1.0, ColorOp = Copy)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc -1.38902 Tw (Color\(const Color&, float alpha = 1.0, ColorOp = Copy\);)' -1.38885 Tw (static const Color* lookup\(Display*, const String& name\);)' -1.38882 Tw (static const Color* lookup\(Display*, const char*\);)' -1.38797 Tw (boolean distinguished\(Display*, Color*\);)' -1.38836 Tw (void intensities\()' 8.33008 -11.5199 Td -1.38879 Tw (Display*, ColorIntensity& r, ColorIntensity& g, ColorIntensity& b)Tj -8.33008 -11.5199 Td -1.38879 Tw (\) const;)Tj -1.3886 Tw (const Color* brightness\(float adjust\) const;)' -8.33008 -11.5199 Td -1.38925 Tw (}; )Tj 106.645 -16.5199 Td -1.38848 Tw (Figure 6.2:)Tj 56.1301 0 Td -1.38888 Tw (Color class interface)Tj ET Q 1060.5 4718.3 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 450.47 Tm -1.49938 Tw (application defaults file. )Tj /R18609880 14 Tf 26.4 TL (6.1.3)' 0.00009775 Tc 40 0 Td (Font)Tj 0 Tc /R18360344 12 Tf -40 -20.4398 Td -0.716618 Tw (A font defines a mapping between character codes and their appearance on the)Tj 13.7402 TL -0.584781 Tw (screen. PSFont is a subclass of Font that uses PostScript metrics for character)' -1.19397 Tw (widths, if the metrics are available on the system. Figure 6.3 shows the Font and)' -0.887268 Tw (PSFont class interfaces. The Font constructor is given the full name of the font)' -0.947053 Tw (and a scaling factor. If the font is used on a display that does not recognize the)' -1.21333 Tw (name, then a default font will be used. Font::find can be used to compute a valid)' -0.783162 Tw (fullname for a font from a given font family name, desired point size, and font)' -0.968134 Tw (style \(such as italic or bold\). If a font is available that matches all but the point)' -1.09929 Tw (size, Font::find will return the font with )' 0.000108719 Tc /R19628144 10 Tf 198.938 0 Td (scale)Tj 0 Tc /R18360344 12 Tf 23.3402 0 Td -1.09943 Tw ( set to the ratio of the desired point)Tj -222.278 -13.7402 Td -1.49953 Tw (size to the actual point size.)Tj 10.668 -14.6398 Td 0.446017 Tw (Font::name returns the full name of the font. Font::encoding returns the)Tj -10.668 -13.7402 Td -0.932683 Tw (character set identification, such as ``iso8859'' for ISO Latin. Font::size returns)Tj -1.49959 Tw (the point size of the font.)' 10.668 -14.6398 Td 0.332889 Tw (Font::font_bbox, Font::char_bbox, and Font::string_bbox return information)Tj -10.668 -13.7402 Td -0.793373 Tw (about the overall font, a specific character in the font, or a string of characters.)Tj -1.34725 Tw (Each operation returns a FontBoundingBox object, which has operations to return)' -1.49895 Tw (detailed information.)' 10.668 -14.6398 Td 1.85957 Tw (FontBoundingBox::ascent returns the extent above the font's baseline;)Tj -10.668 -13.7398 Td 2.169 Tw (FontBoundingBox::descent returns the extent below the font's baseline.)Tj 0.00268555 Tw (FontBoundingBox::left_bearing returns the left edge of the bitmap associated)' -1.49951 Tw (with a character; FontBoundingBox::right_bearing returns the right edge.)' 10.668 -14.6402 Td -0.147977 Tw (Font::width on a single character returns the width of a character's bitmap)Tj -10.668 -13.7398 Td -0.22433 Tw (and on a string it returns the sum of the widths of the individual characters.)Tj 0.000149727 Tc 372.72 -21.85 Td (6-)Tj 0 Tc 12.9961 0 Td (3)Tj 0.000149727 Tc -12.6758 0.160156 Td (6-)Tj 0 Tc 12.9957 0 Td (3)Tj ET Q 1060.5 7089.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 127.386 692.36 Tm -1.38801 Tw (typedef float ColorIntensity;)Tj 11.5203 TL -1.38861 Tw (typedef unsigned int ColorOp;)' 23.0398 TL -1.38898 Tw (interface Color : Resource {)' 8.33008 -11.5199 Td -1.38917 Tw (enum { Copy, Xor };)Tj 0.000225067 Tc 11.5199 TL (Color\()' 0 Tc 8.33008 -11.5203 Td -1.38862 Tw (ColorIntensity r, ColorIntensity g, ColorIntensity b,)Tj -1.38914 Tw (float alpha = 1.0, ColorOp = Copy)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc -1.38902 Tw (Color\(const Color&, float alpha = 1.0, ColorOp = Copy\);)' -1.38885 Tw (static const Color* lookup\(Display*, const String& name\);)' -1.38882 Tw (static const Color* lookup\(Display*, const char*\);)' -1.38797 Tw (boolean distinguished\(Display*, Color*\);)' -1.38836 Tw (void intensities\()' 8.33008 -11.5199 Td -1.38879 Tw (Display*, ColorIntensity& r, ColorIntensity& g, ColorIntensity& b)Tj -8.33008 -11.5199 Td -1.38879 Tw (\) const;)Tj -1.3886 Tw (const Color* brightness\(float adjust\) const;)' -8.33008 -11.5199 Td -1.38925 Tw (}; )Tj 106.645 -16.5199 Td -1.38848 Tw (Figure 6.2:)Tj 56.1301 0 Td -1.38888 Tw (Color class interface)Tj ET Q 1060.5 4718.3 3960 10 re f* Q \n \n \n \n \n-1697\n+1698\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -2500,29 +2500,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 278.99 Tm -0.246358 Tw (Font::index returns the index of the character in a string that would be )Tj 0.000233014 Tc /R36761712 10 Tf 371.54 0 Td (offset)Tj 0 Tc /R35493912 12 Tf -371.54 -13.7398 Td -0.372595 Tw (coordinates from the left if the string were displayed. If )Tj 0.000221252 Tc /R36761712 10 Tf 294.113 0 Td (between)Tj 0 Tc /R35493912 12 Tf 37.8 0 Td -0.372608 Tw ( is false, the)Tj -331.913 -13.7398 Td -0.911832 Tw (index of the character that contains )Tj 0.000235558 Tc /R36761712 10 Tf 178.342 0 Td (offset)Tj 0 Tc /R35493912 12 Tf 24.4598 0 Td -0.911862 Tw ( is returned; otherwise the index of the)Tj -202.802 -13.7402 Td -0.966244 Tw (character following the between-character space that is nearest )Tj 0.000233014 Tc /R36761712 10 Tf 312.419 0 Td (offset)Tj 0 Tc /R35493912 12 Tf 24.4598 0 Td -0.966429 Tw ( is returned.)Tj -336.879 -13.7398 Td -1.0849 Tw (In either case a negative offset will return an index of zero and an offset beyond)Tj 13.7402 TL -1.49978 Tw (the end of the string will return an index equal to the length of the string. )' /R35743448 14 Tf 26.4 TL (6.1.4)' 0.000225414 Tc 40 0 Td (Transformer)Tj 0 Tc /R35493912 12 Tf -40 -20.4398 Td -1.51012 Tw (A transformer object represents a 3x2 matrix for use in translating 2D coordinates.)Tj 13.7398 TL -0.468112 Tw (Figure 6.4 shows the Transformer class interface. The transformer constructor)' -0.489011 Tw (with no parameters creates an identity matrix. The other constructor takes the)' -0.504849 Tw (explicit matrix values as parameters. Transformer::identity returns whether the)' -1.49953 Tw (matrix is currently the identity matrix.)' 0.000149727 Tc 372.72 -32.5898 Td (6-)Tj 0 Tc 12.9961 0 Td (4)Tj 0.000149727 Tc -12.6758 0.160156 Td (6-)Tj 0 Tc 12.9957 0 Td (4)Tj ET Q 1060.5 7137.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 127.386 697.16 Tm -1.38819 Tw (interface FontBoundingBox {)Tj 8.33008 -11.5203 Td -1.38828 Tw (Coord left_bearing\(\) const, right_bearing\(\) const;)Tj 11.5199 TL -1.38882 Tw (Coord width\(\) const, ascent\(\) const, descent\(\) const;)' -1.38838 Tw (Coord font_ascent\(\) const, font_descent\(\) const;)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38811 Tw (typedef long FontCharCode;)' -1.38897 Tw (interface Font : Resource {)' 8.33008 -11.5199 Td -1.38889 Tw (Font\(const String&, float scale = 1.0\);)Tj 11.5199 TL -1.38891 Tw (Font\(const char* fullname, float scale = 1.0\);)' -1.38854 Tw (static boolean find\()' 8.33008 -11.5199 Td -1.38912 Tw (const char* family, int size, const char* style,)Tj -1.38886 Tw (const char*& fullname, float& scale)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc -1.38874 Tw (static const Font* lookup\(const char*\);)' -1.38869 Tw (static const Font* lookup\(const String&\);)' 16.5199 TL -1.38878 Tw (const char* name\(\) const;)' 11.5203 TL -1.3887 Tw (const char* encoding\(\) const;)' -1.38851 Tw (Coord size\(\);)' 23.0398 TL -1.38787 Tw (void font_bbox\(FontBoundingBox&\) const;)' 11.5199 TL -1.38804 Tw (void char_bbox\(FontCharCode, FontBoundingBox&\) const;)' -1.38846 Tw (void stringt_bbox\(const char*, int, FontBoundingBox&\);)' -1.38797 Tw (virtual Coord width\(FontCharCode\);)' -1.3887 Tw (virtual Coord width\(const char*, int\);)' -1.38885 Tw (virtual int index\(const char*, int, float offset, boolean between\);)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 23.0402 TL -1.38899 Tw (interface PSFont : Font {)' 0.000211988 Tc 8.33008 -11.5199 Td (PSFont\()Tj 0 Tc 8.33008 -11.5199 Td -1.38906 Tw (const char* psname, Coord size, const char* encoding, float scale)Tj 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc -8.33008 -11.5203 Td -1.38925 Tw (}; )Tj 78.2902 -16.5199 Td -1.38848 Tw (Figure 6.3:)Tj 56.1297 0 Td -1.38904 Tw (Font and PSFont class interfaces)Tj ET Q 1060.5 3003.5 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 278.99 Tm -0.246358 Tw (Font::index returns the index of the character in a string that would be )Tj 0.000233014 Tc /R19628144 10 Tf 371.54 0 Td (offset)Tj 0 Tc /R18360344 12 Tf -371.54 -13.7398 Td -0.372595 Tw (coordinates from the left if the string were displayed. If )Tj 0.000221252 Tc /R19628144 10 Tf 294.113 0 Td (between)Tj 0 Tc /R18360344 12 Tf 37.8 0 Td -0.372608 Tw ( is false, the)Tj -331.913 -13.7398 Td -0.911832 Tw (index of the character that contains )Tj 0.000235558 Tc /R19628144 10 Tf 178.342 0 Td (offset)Tj 0 Tc /R18360344 12 Tf 24.4598 0 Td -0.911862 Tw ( is returned; otherwise the index of the)Tj -202.802 -13.7402 Td -0.966244 Tw (character following the between-character space that is nearest )Tj 0.000233014 Tc /R19628144 10 Tf 312.419 0 Td (offset)Tj 0 Tc /R18360344 12 Tf 24.4598 0 Td -0.966429 Tw ( is returned.)Tj -336.879 -13.7398 Td -1.0849 Tw (In either case a negative offset will return an index of zero and an offset beyond)Tj 13.7402 TL -1.49978 Tw (the end of the string will return an index equal to the length of the string. )' /R18609880 14 Tf 26.4 TL (6.1.4)' 0.000225414 Tc 40 0 Td (Transformer)Tj 0 Tc /R18360344 12 Tf -40 -20.4398 Td -1.51012 Tw (A transformer object represents a 3x2 matrix for use in translating 2D coordinates.)Tj 13.7398 TL -0.468112 Tw (Figure 6.4 shows the Transformer class interface. The transformer constructor)' -0.489011 Tw (with no parameters creates an identity matrix. The other constructor takes the)' -0.504849 Tw (explicit matrix values as parameters. Transformer::identity returns whether the)' -1.49953 Tw (matrix is currently the identity matrix.)' 0.000149727 Tc 372.72 -32.5898 Td (6-)Tj 0 Tc 12.9961 0 Td (4)Tj 0.000149727 Tc -12.6758 0.160156 Td (6-)Tj 0 Tc 12.9957 0 Td (4)Tj ET Q 1060.5 7137.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 127.386 697.16 Tm -1.38819 Tw (interface FontBoundingBox {)Tj 8.33008 -11.5203 Td -1.38828 Tw (Coord left_bearing\(\) const, right_bearing\(\) const;)Tj 11.5199 TL -1.38882 Tw (Coord width\(\) const, ascent\(\) const, descent\(\) const;)' -1.38838 Tw (Coord font_ascent\(\) const, font_descent\(\) const;)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38811 Tw (typedef long FontCharCode;)' -1.38897 Tw (interface Font : Resource {)' 8.33008 -11.5199 Td -1.38889 Tw (Font\(const String&, float scale = 1.0\);)Tj 11.5199 TL -1.38891 Tw (Font\(const char* fullname, float scale = 1.0\);)' -1.38854 Tw (static boolean find\()' 8.33008 -11.5199 Td -1.38912 Tw (const char* family, int size, const char* style,)Tj -1.38886 Tw (const char*& fullname, float& scale)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc -1.38874 Tw (static const Font* lookup\(const char*\);)' -1.38869 Tw (static const Font* lookup\(const String&\);)' 16.5199 TL -1.38878 Tw (const char* name\(\) const;)' 11.5203 TL -1.3887 Tw (const char* encoding\(\) const;)' -1.38851 Tw (Coord size\(\);)' 23.0398 TL -1.38787 Tw (void font_bbox\(FontBoundingBox&\) const;)' 11.5199 TL -1.38804 Tw (void char_bbox\(FontCharCode, FontBoundingBox&\) const;)' -1.38846 Tw (void stringt_bbox\(const char*, int, FontBoundingBox&\);)' -1.38797 Tw (virtual Coord width\(FontCharCode\);)' -1.3887 Tw (virtual Coord width\(const char*, int\);)' -1.38885 Tw (virtual int index\(const char*, int, float offset, boolean between\);)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 23.0402 TL -1.38899 Tw (interface PSFont : Font {)' 0.000211988 Tc 8.33008 -11.5199 Td (PSFont\()Tj 0 Tc 8.33008 -11.5199 Td -1.38906 Tw (const char* psname, Coord size, const char* encoding, float scale)Tj 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc -8.33008 -11.5203 Td -1.38925 Tw (}; )Tj 78.2902 -16.5199 Td -1.38848 Tw (Figure 6.3:)Tj 56.1297 0 Td -1.38904 Tw (Font and PSFont class interfaces)Tj ET Q 1060.5 3003.5 3960 10 re f* Q \n \n \n \n \n-1482\n+1481\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -2559,27 +2559,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 116.718 708.3 Tm -0.464272 Tw (Transformer::premultiply and Transformer::postmultiply set the matrix to be)Tj -10.668 -13.7398 Td -0.478281 Tw (the result of multiplying the matrix and the given matrix. Two operations are)Tj 13.7402 TL -0.792904 Tw (necessary because matrix multiplication is not commutative for 2D coordinates.)' -1.48468 Tw (Premultiply means the current matrix is on the left-hand side of the multiplication,)' -1.38957 Tw (postmultiply means the current matrix is on the right. Transformer::invert sets the)' -1.49952 Tw (matrix to its inverse.)' 10.668 -14.6398 Td -1.15502 Tw (Transformer::translate modifies the matrix to add )Tj 0.000115871 Tc /R36761712 10 Tf 244.098 0 Td (dx)Tj 0 Tc /R35493912 12 Tf 10.5602 0 Td -1.15534 Tw ( to the x coordinate and )Tj 0.000115871 Tc /R36761712 10 Tf 120.114 0 Td (dy)Tj 0 Tc /R35493912 12 Tf -385.44 -13.7402 Td -1.17137 Tw (to the y coordinate. Transformer::scale modifies the matrix to multiply the x and)Tj -1.13962 Tw (y coordinates by )' /R36761712 10 Tf 84.4809 0 Td (sx)Tj /R35493912 12 Tf 10 0 Td -1.13968 Tw ( and )Tj /R36761712 10 Tf 24.7691 0 Td (sy)Tj 0.00006104 Tc /R36761712 12 Tf 10 0 Td (,)Tj 0 Tc /R35493912 12 Tf 3.33594 0 Td -1.13921 Tw ( respectively. Transformer::rotate modifies the matrix)Tj -132.586 -13.7402 Td -0.423047 Tw (to rotate x and y coordinates by a given angle in degrees. Transformer::skew)Tj -1.49966 Tw (modifies the matrix to skew coordinates by )' /R36761712 10 Tf 210.313 0 Td (sx)Tj /R35493912 12 Tf 10 0 Td -1.49994 Tw ( and )Tj /R36761712 10 Tf 23.3293 0 Td (sy)Tj /R35493912 12 Tf 10 0 Td (.)Tj -242.974 -14.6398 Td 0.752708 Tw (Transformer::transform multiplies the given coordinates by the matrix to)Tj -10.668 -13.7402 Td 0.123323 Tw (compute transformed coordinates. The coordinates can either transformed in)Tj -0.641061 Tw (place stored in specific out parameters \(tx, ty\). Transformer::inverse_transform)' -0.84757 Tw (performs the inverse mapping; taking transformed coordinates and returning the)' -1.499 Tw (original coordinates.)' 10.668 -14.6398 Td -1.49954 Tw (The following example shows how to use transformers:)Tj /R36761712 10 Tf 14.3219 -18.4801 Td -1.38801 Tw (Transformer t;)Tj 79.45 0 Td -1.38886 Tw (// start with identity)Tj 0.000281016 Tc -79.45 -11.5199 Td (t.rotate\(90.0\);)Tj 0 Tc 12.5203 TL -1.38676 Tw (t.translate\(20.0, 10.0\);)' 11.5199 TL -1.3877 Tw (t.scale\(0.5, 0.5\);)' -1.38922 Tw (float x = 1.0, y = 0.0;)' -1.38891 Tw (float tx, ty;)' 0.000149727 Tc /R35493912 12 Tf 347.73 -332.78 Td (6-)Tj 0 Tc 12.9961 0 Td (5)Tj 0.000149727 Tc -12.6758 0.160156 Td (6-)Tj 0 Tc 12.9957 0 Td (5)Tj ET Q 1079.7 3815.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 129.306 365 Tm -1.38875 Tw (interface Transformer : Resource {)Tj 0.000262124 Tc 8.33008 -11.5199 Td (Transformer\(\);)Tj 0.000253677 Tc 11.5199 TL (Transformer\()' 0 Tc 8.33008 -11.5203 Td -1.38906 Tw (float a00, float a01, float a10, float a11, float a20, float a21)Tj 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc -1.38827 Tw (boolean identity\(\) const;)' -1.38789 Tw (void premultiply\(const Transformer&\);)' -1.38789 Tw (void postmultiply\(const Transformer&\);)' -1.38836 Tw (void invert\(\);)' -1.38874 Tw (void translate\(float dx, float dy\);)' -1.38898 Tw (void scale\(float sx, float sy\);)' -1.38811 Tw (void rotate\(float angle\);)' -1.38901 Tw (void skew\(float sx, float sy\);)' -1.38784 Tw (void transform\(floatx, floaty\);)' -1.38877 Tw (void transform\(float x, float y, floattx, floatty\);)' -1.38775 Tw (void inverse_transform\(floatx, floaty\);)' -1.38866 Tw (void inverse_transform\(float tx, float ty, floatx, floaty\);)' -1.38839 Tw (void matrix\(floata00, floata01, floata10, floata11, floata20, floata21\);)' -8.33008 -11.5203 Td -1.38925 Tw (}; )Tj 105.535 -16.5199 Td -1.38848 Tw (Figure 6.4:)Tj 56.1301 0 Td -1.3875 Tw (Transformer protocol)Tj ET Q 1079.7 1329.5 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 116.718 708.3 Tm -0.464272 Tw (Transformer::premultiply and Transformer::postmultiply set the matrix to be)Tj -10.668 -13.7398 Td -0.478281 Tw (the result of multiplying the matrix and the given matrix. Two operations are)Tj 13.7402 TL -0.792904 Tw (necessary because matrix multiplication is not commutative for 2D coordinates.)' -1.48468 Tw (Premultiply means the current matrix is on the left-hand side of the multiplication,)' -1.38957 Tw (postmultiply means the current matrix is on the right. Transformer::invert sets the)' -1.49952 Tw (matrix to its inverse.)' 10.668 -14.6398 Td -1.15502 Tw (Transformer::translate modifies the matrix to add )Tj 0.000115871 Tc /R19628144 10 Tf 244.098 0 Td (dx)Tj 0 Tc /R18360344 12 Tf 10.5602 0 Td -1.15534 Tw ( to the x coordinate and )Tj 0.000115871 Tc /R19628144 10 Tf 120.114 0 Td (dy)Tj 0 Tc /R18360344 12 Tf -385.44 -13.7402 Td -1.17137 Tw (to the y coordinate. Transformer::scale modifies the matrix to multiply the x and)Tj -1.13962 Tw (y coordinates by )' /R19628144 10 Tf 84.4809 0 Td (sx)Tj /R18360344 12 Tf 10 0 Td -1.13968 Tw ( and )Tj /R19628144 10 Tf 24.7691 0 Td (sy)Tj 0.00006104 Tc /R19628144 12 Tf 10 0 Td (,)Tj 0 Tc /R18360344 12 Tf 3.33594 0 Td -1.13921 Tw ( respectively. Transformer::rotate modifies the matrix)Tj -132.586 -13.7402 Td -0.423047 Tw (to rotate x and y coordinates by a given angle in degrees. Transformer::skew)Tj -1.49966 Tw (modifies the matrix to skew coordinates by )' /R19628144 10 Tf 210.313 0 Td (sx)Tj /R18360344 12 Tf 10 0 Td -1.49994 Tw ( and )Tj /R19628144 10 Tf 23.3293 0 Td (sy)Tj /R18360344 12 Tf 10 0 Td (.)Tj -242.974 -14.6398 Td 0.752708 Tw (Transformer::transform multiplies the given coordinates by the matrix to)Tj -10.668 -13.7402 Td 0.123323 Tw (compute transformed coordinates. The coordinates can either transformed in)Tj -0.641061 Tw (place stored in specific out parameters \(tx, ty\). Transformer::inverse_transform)' -0.84757 Tw (performs the inverse mapping; taking transformed coordinates and returning the)' -1.499 Tw (original coordinates.)' 10.668 -14.6398 Td -1.49954 Tw (The following example shows how to use transformers:)Tj /R19628144 10 Tf 14.3219 -18.4801 Td -1.38801 Tw (Transformer t;)Tj 79.45 0 Td -1.38886 Tw (// start with identity)Tj 0.000281016 Tc -79.45 -11.5199 Td (t.rotate\(90.0\);)Tj 0 Tc 12.5203 TL -1.38676 Tw (t.translate\(20.0, 10.0\);)' 11.5199 TL -1.3877 Tw (t.scale\(0.5, 0.5\);)' -1.38922 Tw (float x = 1.0, y = 0.0;)' -1.38891 Tw (float tx, ty;)' 0.000149727 Tc /R18360344 12 Tf 347.73 -332.78 Td (6-)Tj 0 Tc 12.9961 0 Td (5)Tj 0.000149727 Tc -12.6758 0.160156 Td (6-)Tj 0 Tc 12.9957 0 Td (5)Tj ET Q 1079.7 3815.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 129.306 365 Tm -1.38875 Tw (interface Transformer : Resource {)Tj 0.000262124 Tc 8.33008 -11.5199 Td (Transformer\(\);)Tj 0.000253677 Tc 11.5199 TL (Transformer\()' 0 Tc 8.33008 -11.5203 Td -1.38906 Tw (float a00, float a01, float a10, float a11, float a20, float a21)Tj 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc -1.38827 Tw (boolean identity\(\) const;)' -1.38789 Tw (void premultiply\(const Transformer&\);)' -1.38789 Tw (void postmultiply\(const Transformer&\);)' -1.38836 Tw (void invert\(\);)' -1.38874 Tw (void translate\(float dx, float dy\);)' -1.38898 Tw (void scale\(float sx, float sy\);)' -1.38811 Tw (void rotate\(float angle\);)' -1.38901 Tw (void skew\(float sx, float sy\);)' -1.38784 Tw (void transform\(floatx, floaty\);)' -1.38877 Tw (void transform\(float x, float y, floattx, floatty\);)' -1.38775 Tw (void inverse_transform\(floatx, floaty\);)' -1.38866 Tw (void inverse_transform\(float tx, float ty, floatx, floaty\);)' -1.38839 Tw (void matrix\(floata00, floata01, floata10, floata11, floata20, floata21\);)' -8.33008 -11.5203 Td -1.38925 Tw (}; )Tj 105.535 -16.5199 Td -1.38848 Tw (Figure 6.4:)Tj 56.1301 0 Td -1.3875 Tw (Transformer protocol)Tj ET Q 1079.7 1329.5 3960 10 re f* Q \n \n \n \n \n-1478\n+1476\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -2616,29 +2616,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 131.04 709.26 Tm -1.38862 Tw (t.transform\(x, y, tx, ty\);)Tj 12.4801 TL -1.38924 Tw (// now tx = 10.0, ty = 5.5)' /R35493912 12 Tf -24.9898 -14.6402 Td -1.46335 Tw (Although the transformation is a single step, one can think of it as individual steps)Tj 13.7398 TL -1.06649 Tw (for each of the rotate, translate, and scale steps. First the given point \(1.0,0.0\) is)' -0.0500747 Tw (rotated to \(0.0,1.0\), then it is translated to \(20.0,11.0\), finally it is scaled to)' -1.4995 Tw (\(10.0,5.5\). )' /R35743448 14 Tf 26.4 TL (6.1.5)' 0.000148137 Tc 40 0 Td (Bitmap)Tj 0 Tc /R35493912 12 Tf -40 -20.4398 Td -0.763281 Tw (A bitmap is a two-dimensional array of boolean values. A bitmap is useful for)Tj 13.7402 TL -0.857753 Tw (stenciling; that is, drawing through a mask that allows some pixels to be drawn)' -0.848033 Tw (but prevents others from being changed. The Stencil class can be used to put a)' -1.4997 Tw (bitmap in a glyph graph.)' 10.668 -14.6402 Td 0.400389 Tw (Figure 6.5 shows the Bitmap class interface. There are two constructors)Tj -10.668 -13.7398 Td -0.318675 Tw (for bitmaps. One takes the bitmap data, width, height, and origin. The other)Tj -1.46069 Tw (constructor creates a bitmap for a given character in a font, optionally scaling by a)' -1.15832 Tw (given factor. In this case, the bitmap width and height will reflect the actual size)' -0.567982 Tw (of the character glyph and the bitmap origin will be the same as the character)' 0.00006022 Tc (origin.)' 0 Tc 10.668 -14.6398 Td -1.33223 Tw (Bitmap::open operation tries to open a file containing a bitmap definition in the)Tj -10.668 -13.7402 Td -0.492553 Tw (format produced by the X bitmap program. If the file is found and is a valid)Tj -1.4996 Tw (format, open returns true and sets the bitmap information.)' 10.668 -14.6398 Td -1.4522 Tw (Bitmap::peek and Bitmap::poke are used to read and write at specified positions)Tj -10.668 -13.7402 Td -0.86948 Tw (in the bitmap. Bitmap::width and Bitmap::height return the width and height of)Tj -0.795637 Tw (the bitmap in coordinates, while Bitmap::pwidth and Bitmap::pheight return the)' -1.49964 Tw (number of bits defined in each dimension.)' 10.668 -14.6398 Td -1.61688 Tw (Treating the bitmap origin as \(0,0\), Bitmap::left_bearing, Bitmap::right_bearing,)Tj -10.668 -13.7398 Td 0.779015 Tw (Bitmap::ascent, and Bitmap::descent return the left, right, top, and bottom)Tj -0.519888 Tw (coordinates of the bitmap, respectively. For example, a 16x16 bitmap with its)' -1.11893 Tw (origin at \(7,5\) would have a left_bearing of -7, a right_bearing of 9, an ascent of)' -1.49967 Tw (12, and a descent of -5. )' 0.000149727 Tc 372.72 -226.04 Td (6-)Tj 0 Tc 12.9961 0 Td (6)Tj 0.000149727 Tc -12.6758 0.160156 Td (6-)Tj 0 Tc 12.9957 0 Td (6)Tj ET Q 1050.9 2855.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 126.426 269 Tm -1.38895 Tw (interface Bitmap : Resource {)Tj 0.000222887 Tc 8.33008 -11.5199 Td (Bitmap\()Tj 0 Tc 8.32969 -11.5199 Td -1.38924 Tw (void*, unsigned int width, unsigned int height, int x0 = -1, int y0 = -1)Tj 0.000312805 Tc -8.32969 -11.5203 Td (\);)Tj 0 Tc 11.5199 TL -1.38895 Tw (Bitmap\(Font*, int code, float scale = 1.0\);)' -1.38862 Tw (static Bitmap* open\(const char* filename\);)' -1.38907 Tw (void poke\(boolean set, unsigned int x, unsigned int y\);)' -1.38905 Tw (void peek\(unsigned int x, unsigned int y\);)' -1.38873 Tw (Coord width\(\) const, height\(\) const;)' -1.38877 Tw (unsigned int pwidth\(\) const, pheight\(\) const;)' -1.3883 Tw (Coord left_bearing\(\) const, right_bearing\(\) const;)' -1.38873 Tw (Coord ascent\(\) const, descent\(\) const;)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 117.2 -16.5203 Td -1.38848 Tw (Figure 6.5:)Tj 56.1297 0 Td -1.38824 Tw (Bitmap protocol)Tj ET Q 1050.9 1060.7 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 131.04 709.26 Tm -1.38862 Tw (t.transform\(x, y, tx, ty\);)Tj 12.4801 TL -1.38924 Tw (// now tx = 10.0, ty = 5.5)' /R18360344 12 Tf -24.9898 -14.6402 Td -1.46335 Tw (Although the transformation is a single step, one can think of it as individual steps)Tj 13.7398 TL -1.06649 Tw (for each of the rotate, translate, and scale steps. First the given point \(1.0,0.0\) is)' -0.0500747 Tw (rotated to \(0.0,1.0\), then it is translated to \(20.0,11.0\), finally it is scaled to)' -1.4995 Tw (\(10.0,5.5\). )' /R18609880 14 Tf 26.4 TL (6.1.5)' 0.000148137 Tc 40 0 Td (Bitmap)Tj 0 Tc /R18360344 12 Tf -40 -20.4398 Td -0.763281 Tw (A bitmap is a two-dimensional array of boolean values. A bitmap is useful for)Tj 13.7402 TL -0.857753 Tw (stenciling; that is, drawing through a mask that allows some pixels to be drawn)' -0.848033 Tw (but prevents others from being changed. The Stencil class can be used to put a)' -1.4997 Tw (bitmap in a glyph graph.)' 10.668 -14.6402 Td 0.400389 Tw (Figure 6.5 shows the Bitmap class interface. There are two constructors)Tj -10.668 -13.7398 Td -0.318675 Tw (for bitmaps. One takes the bitmap data, width, height, and origin. The other)Tj -1.46069 Tw (constructor creates a bitmap for a given character in a font, optionally scaling by a)' -1.15832 Tw (given factor. In this case, the bitmap width and height will reflect the actual size)' -0.567982 Tw (of the character glyph and the bitmap origin will be the same as the character)' 0.00006022 Tc (origin.)' 0 Tc 10.668 -14.6398 Td -1.33223 Tw (Bitmap::open operation tries to open a file containing a bitmap definition in the)Tj -10.668 -13.7402 Td -0.492553 Tw (format produced by the X bitmap program. If the file is found and is a valid)Tj -1.4996 Tw (format, open returns true and sets the bitmap information.)' 10.668 -14.6398 Td -1.4522 Tw (Bitmap::peek and Bitmap::poke are used to read and write at specified positions)Tj -10.668 -13.7402 Td -0.86948 Tw (in the bitmap. Bitmap::width and Bitmap::height return the width and height of)Tj -0.795637 Tw (the bitmap in coordinates, while Bitmap::pwidth and Bitmap::pheight return the)' -1.49964 Tw (number of bits defined in each dimension.)' 10.668 -14.6398 Td -1.61688 Tw (Treating the bitmap origin as \(0,0\), Bitmap::left_bearing, Bitmap::right_bearing,)Tj -10.668 -13.7398 Td 0.779015 Tw (Bitmap::ascent, and Bitmap::descent return the left, right, top, and bottom)Tj -0.519888 Tw (coordinates of the bitmap, respectively. For example, a 16x16 bitmap with its)' -1.11893 Tw (origin at \(7,5\) would have a left_bearing of -7, a right_bearing of 9, an ascent of)' -1.49967 Tw (12, and a descent of -5. )' 0.000149727 Tc 372.72 -226.04 Td (6-)Tj 0 Tc 12.9961 0 Td (6)Tj 0.000149727 Tc -12.6758 0.160156 Td (6-)Tj 0 Tc 12.9957 0 Td (6)Tj ET Q 1050.9 2855.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 126.426 269 Tm -1.38895 Tw (interface Bitmap : Resource {)Tj 0.000222887 Tc 8.33008 -11.5199 Td (Bitmap\()Tj 0 Tc 8.32969 -11.5199 Td -1.38924 Tw (void*, unsigned int width, unsigned int height, int x0 = -1, int y0 = -1)Tj 0.000312805 Tc -8.32969 -11.5203 Td (\);)Tj 0 Tc 11.5199 TL -1.38895 Tw (Bitmap\(Font*, int code, float scale = 1.0\);)' -1.38862 Tw (static Bitmap* open\(const char* filename\);)' -1.38907 Tw (void poke\(boolean set, unsigned int x, unsigned int y\);)' -1.38905 Tw (void peek\(unsigned int x, unsigned int y\);)' -1.38873 Tw (Coord width\(\) const, height\(\) const;)' -1.38877 Tw (unsigned int pwidth\(\) const, pheight\(\) const;)' -1.3883 Tw (Coord left_bearing\(\) const, right_bearing\(\) const;)' -1.38873 Tw (Coord ascent\(\) const, descent\(\) const;)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 117.2 -16.5203 Td -1.38848 Tw (Figure 6.5:)Tj 56.1297 0 Td -1.38824 Tw (Bitmap protocol)Tj ET Q 1050.9 1060.7 3960 10 re f* Q \n \n \n \n \n-1735\n+1737\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -2675,29 +2675,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 14 Tf 1 0 0 1 106.05 707.34 Tm (6.1.6)Tj 0.000253042 Tc 40 0 Td (Raster)Tj 0 Tc /R35493912 12 Tf -40 -20.4398 Td -0.539671 Tw (A raster is a color image specified by a two-dimensional array of colors. The)Tj 13.7398 TL -0.857535 Tw (Image class can be used to put a raster in a glyph graph. The TIFFRaster class)' -0.612139 Tw (provides a single operation, load, for reading a TIFF image file and creating a)' -0.997997 Tw (raster for it. If the file is not readable or not a valid TIFF file, TIFFRaster::load)' -1.49941 Tw (will return nil.)' 10.668 -14.6398 Td 0.63705 Tw (Figure 6.6 shows the Raster and TIFFRaster class interfaces. The raster)Tj -10.668 -13.7398 Td 1.36518 Tw (constructor is given the size of the array of colors. Raster::width and)Tj 1.72507 Tw (Raster::height return the dimensions of the raster in coordinates, while)' -1.07615 Tw (Raster::pwidth and Raster::pheight return the dimensions of the array. A raster's)' -1.49945 Tw (origin is always the lower left corner.)' 10.668 -14.6398 Td -0.877931 Tw (Raster::peek and Raster::poke read and write the color array, accessing colors)Tj -10.668 -13.7398 Td -1.28498 Tw (in terms of the RGB intensities and an alpha value. Peek and poke operations are)Tj -0.634086 Tw (guaranteed to be cheap; that is, any processing \(especially interaction with the)' -1.49963 Tw (window system\) will be deferred until the raster is next displayed.)' /R35743448 18 Tf 41.2801 TL (6.2)' 0.00008774 Tc 35 0 Td (Canvas)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.61025 Tw (A canvas is a 2-dimensional area on which to draw. The base implementation)Tj 13.7398 TL -0.470447 Tw (draws on a portion of the screen, normally created by a window object rather)' -0.315846 Tw (than directly by an application. The Printer subclass uses the same rendering)' -0.792161 Tw (operations to generate PostScript to a file. Thus, it is possible to write a single)' -1.49966 Tw (drawing routine that can be used to generate screen or printer output.)' 10.668 -14.6398 Td 0.162628 Tw (Figure 6.7 shows the canvas and printer operations. For screen canvases,)Tj -10.668 -13.7398 Td -0.737566 Tw (Canvas::window returns the window containing the canvas; otherwise it returns)Tj 0.000149727 Tc 372.72 -273.56 Td (6-)Tj 0 Tc 12.9961 0 Td (7)Tj 0.000149727 Tc -12.6758 0.160156 Td (6-)Tj 0 Tc 12.9957 0 Td (7)Tj ET Q 1050.9 3239.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 126.426 307.4 Tm -1.38895 Tw (interface Raster : Resource {)Tj 8.32969 -11.5199 Td -1.38865 Tw (Raster\(unsigned int pwidth, unsigned int pheight\);)Tj 11.5199 TL -1.38871 Tw (Coord width\(\) const, height\(\) const;)' -1.38876 Tw (unsigned int pwidth\(\) const, pheight\(\) const;)' -1.38876 Tw (void peek\()' 8.33008 -11.5199 Td -1.3891 Tw (unsigned int x, unsigned int y,)Tj -1.38882 Tw (ColorIntensity& r, ColorIntensity& g, ColorIntensity& b, float& alpha)' -8.33008 -11.5199 Td -1.38884 Tw (\) const;)Tj -1.38876 Tw (void poke\()' 8.33008 -11.5199 Td -1.3891 Tw (unsigned int x, unsigned int y,)Tj -1.38877 Tw (ColorIntensity r, ColorIntensity g, ColorIntensity b, float alpha)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 16.5203 TL -1.38836 Tw (interface TIFFRaster {)' 8.32969 -11.5199 Td -1.38864 Tw (static Raster* load\(const char* filename\);)Tj -8.32969 -11.5199 Td -1.38925 Tw (}; )Tj 79.1348 -16.5199 Td -1.38848 Tw (Figure 6.6:)Tj 56.1301 0 Td -1.38874 Tw (Raster and TIFFRaster protocols)Tj ET Q 1050.9 1049.1 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 14 Tf 1 0 0 1 106.05 707.34 Tm (6.1.6)Tj 0.000253042 Tc 40 0 Td (Raster)Tj 0 Tc /R18360344 12 Tf -40 -20.4398 Td -0.539671 Tw (A raster is a color image specified by a two-dimensional array of colors. The)Tj 13.7398 TL -0.857535 Tw (Image class can be used to put a raster in a glyph graph. The TIFFRaster class)' -0.612139 Tw (provides a single operation, load, for reading a TIFF image file and creating a)' -0.997997 Tw (raster for it. If the file is not readable or not a valid TIFF file, TIFFRaster::load)' -1.49941 Tw (will return nil.)' 10.668 -14.6398 Td 0.63705 Tw (Figure 6.6 shows the Raster and TIFFRaster class interfaces. The raster)Tj -10.668 -13.7398 Td 1.36518 Tw (constructor is given the size of the array of colors. Raster::width and)Tj 1.72507 Tw (Raster::height return the dimensions of the raster in coordinates, while)' -1.07615 Tw (Raster::pwidth and Raster::pheight return the dimensions of the array. A raster's)' -1.49945 Tw (origin is always the lower left corner.)' 10.668 -14.6398 Td -0.877931 Tw (Raster::peek and Raster::poke read and write the color array, accessing colors)Tj -10.668 -13.7398 Td -1.28498 Tw (in terms of the RGB intensities and an alpha value. Peek and poke operations are)Tj -0.634086 Tw (guaranteed to be cheap; that is, any processing \(especially interaction with the)' -1.49963 Tw (window system\) will be deferred until the raster is next displayed.)' /R18609880 18 Tf 41.2801 TL (6.2)' 0.00008774 Tc 35 0 Td (Canvas)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.61025 Tw (A canvas is a 2-dimensional area on which to draw. The base implementation)Tj 13.7398 TL -0.470447 Tw (draws on a portion of the screen, normally created by a window object rather)' -0.315846 Tw (than directly by an application. The Printer subclass uses the same rendering)' -0.792161 Tw (operations to generate PostScript to a file. Thus, it is possible to write a single)' -1.49966 Tw (drawing routine that can be used to generate screen or printer output.)' 10.668 -14.6398 Td 0.162628 Tw (Figure 6.7 shows the canvas and printer operations. For screen canvases,)Tj -10.668 -13.7398 Td -0.737566 Tw (Canvas::window returns the window containing the canvas; otherwise it returns)Tj 0.000149727 Tc 372.72 -273.56 Td (6-)Tj 0 Tc 12.9961 0 Td (7)Tj 0.000149727 Tc -12.6758 0.160156 Td (6-)Tj 0 Tc 12.9957 0 Td (7)Tj ET Q 1050.9 3239.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 126.426 307.4 Tm -1.38895 Tw (interface Raster : Resource {)Tj 8.32969 -11.5199 Td -1.38865 Tw (Raster\(unsigned int pwidth, unsigned int pheight\);)Tj 11.5199 TL -1.38871 Tw (Coord width\(\) const, height\(\) const;)' -1.38876 Tw (unsigned int pwidth\(\) const, pheight\(\) const;)' -1.38876 Tw (void peek\()' 8.33008 -11.5199 Td -1.3891 Tw (unsigned int x, unsigned int y,)Tj -1.38882 Tw (ColorIntensity& r, ColorIntensity& g, ColorIntensity& b, float& alpha)' -8.33008 -11.5199 Td -1.38884 Tw (\) const;)Tj -1.38876 Tw (void poke\()' 8.33008 -11.5199 Td -1.3891 Tw (unsigned int x, unsigned int y,)Tj -1.38877 Tw (ColorIntensity r, ColorIntensity g, ColorIntensity b, float alpha)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 16.5203 TL -1.38836 Tw (interface TIFFRaster {)' 8.32969 -11.5199 Td -1.38864 Tw (static Raster* load\(const char* filename\);)Tj -8.32969 -11.5199 Td -1.38925 Tw (}; )Tj 79.1348 -16.5199 Td -1.38848 Tw (Figure 6.6:)Tj 56.1301 0 Td -1.38874 Tw (Raster and TIFFRaster protocols)Tj ET Q 1050.9 1049.1 3960 10 re f* Q \n \n \n \n \n-1551\n+1550\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -2734,29 +2734,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 708.3 Tm -0.284281 Tw (nil. Canvas::width and Canvas::height return the dimensions of the canvas in)Tj 0.000104268 Tc 13.7398 TL (coordinates.)' 0 Tc 10.668 -14.6402 Td 4.29492 Tw (The canvas rendering operations are similar to the PostScript)Tj -10.668 -13.7398 Td 2.18867 Tw (drawing operations. Canvas::new_path, Canvas::move_to, Canvas::line_to,)Tj -1.14621 Tw (Canvas::curve_to, and Canvas::close_path are used to define a list of coordinates)' -0.867901 Tw (on which to perform a drawing operation. Canvas::move_to sets the position in)' -1.57799 Tw (the path, and Canvas::line_to extends the path to a new position. Canvas::curve_to)' -1.28331 Tw (also extends the path, but with a Bezier curve between the old and new positions.)' -0.943812 Tw (Canvas::close_path closes the path. Canvas::stroke draws along the current path)' -0.442868 Tw (with a given brush and color. Canvas::fill draws inside the path with a given)' -1.33223 Tw (color. Canvas::clip restricts subsequent drawing to be inside the path. Clipping is)' -1.4292 Tw (cumulative; that is, two consecutive clip operations will result in a clipping region)' -1.49968 Tw (that is the intersection of the paths specified by the two requests.)' 10.668 -14.6398 Td -1.52227 Tw (Canvas::line, Canvas::rect, Canvas::fill_rect, and Canvas::clip_rect are provided)Tj -10.668 -13.7402 Td -0.621638 Tw (for convenience. Canvas::line is equivalent to stroking a path with two points,)Tj -0.92079 Tw (Canvas::rect strokes a rectangular path, Canvas::fill_rect fills a rectangular path,)' -1.49962 Tw (and Canvas::clip_rect restricts subsequent output to be within a rectangular path.)' 10.668 -14.6402 Td 1.10305 Tw (Drawing operations are typically batched to improve performance. For)Tj -10.668 -13.7398 Td -1.43581 Tw (example, a series of Canvas::character operations might be combined into a single)Tj -1.2237 Tw (request on many graphics systems. An application cannot determine if or when a)' -1.32841 Tw (particular operation has completed. No synchronization operations are defined on)' -0.873017 Tw (a canvas, as several canvases may be active at the same time. Display::flush or)' -0.34572 Tw (Display::sync can be used to wait until the display starts or finishes drawing,)' 0.000121483 Tc (respectively.)' 0 Tc 10.668 -14.6402 Td -0.510679 Tw (As an example of the drawing operations, the following code draws a filled)Tj -10.668 -13.7398 Td -1.49952 Tw (triangle with corners \(x1,y1\), \(x2,y2\), and \(x3,y3\):)Tj 0.000205191 Tc /R36761712 10 Tf 24.9898 -18.4801 Td (canvas->new_path\(\);)Tj 0 Tc 11.5199 TL -1.38747 Tw (canvas->move_to\(x1, y1\);)' -1.38754 Tw (canvas->line_to\(x2, y2\);)' (canvas->line_to\(x3, y3\);)' 0.000185649 Tc (canvas->close_path\(\);)' 0 Tc 12.4797 TL -1.38793 Tw (canvas->fill\(color\); )' /R35743448 18 Tf -24.9898 -41.2801 Td (6.3)Tj 0.000212533 Tc 35 0 Td (Printer)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.603544 Tw (A printer is a 2-D drawing surface like a canvas, but that generates output for)Tj 13.7402 TL -1.27215 Tw (hardcopy or previewing. The printer class normally generates PostScript text to a)' -1.49956 Tw (file; other printer formats may be available at a particular site.)' 10.668 -14.6398 Td -1.02781 Tw (Printer is a subclass of Canvas with different implementations for the drawing)Tj -10.668 -13.7402 Td -1.34157 Tw (operations. Thus, a printer can be passed to an operation expecting a canvas. The)Tj -1.49953 Tw (printer class also provides a few additional operations.)' 10.668 -14.6398 Td -0.219175 Tw (The printer constructor takes a pointer to an output stream where the print)Tj -10.668 -13.7402 Td 0.144489 Tw (representation will be written. Printer::resize specifies the boundaries of the)Tj 0.129502 Tw (printed page. Printer::comment generates text that will appear in the output)' 0.000149727 Tc 372.72 -22.8602 Td (6-)Tj 0 Tc 12.9961 0 Td (8)Tj 0.000149727 Tc -12.6758 0.160156 Td (6-)Tj 0 Tc 12.9957 0 Td (8)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 708.3 Tm -0.284281 Tw (nil. Canvas::width and Canvas::height return the dimensions of the canvas in)Tj 0.000104268 Tc 13.7398 TL (coordinates.)' 0 Tc 10.668 -14.6402 Td 4.29492 Tw (The canvas rendering operations are similar to the PostScript)Tj -10.668 -13.7398 Td 2.18867 Tw (drawing operations. Canvas::new_path, Canvas::move_to, Canvas::line_to,)Tj -1.14621 Tw (Canvas::curve_to, and Canvas::close_path are used to define a list of coordinates)' -0.867901 Tw (on which to perform a drawing operation. Canvas::move_to sets the position in)' -1.57799 Tw (the path, and Canvas::line_to extends the path to a new position. Canvas::curve_to)' -1.28331 Tw (also extends the path, but with a Bezier curve between the old and new positions.)' -0.943812 Tw (Canvas::close_path closes the path. Canvas::stroke draws along the current path)' -0.442868 Tw (with a given brush and color. Canvas::fill draws inside the path with a given)' -1.33223 Tw (color. Canvas::clip restricts subsequent drawing to be inside the path. Clipping is)' -1.4292 Tw (cumulative; that is, two consecutive clip operations will result in a clipping region)' -1.49968 Tw (that is the intersection of the paths specified by the two requests.)' 10.668 -14.6398 Td -1.52227 Tw (Canvas::line, Canvas::rect, Canvas::fill_rect, and Canvas::clip_rect are provided)Tj -10.668 -13.7402 Td -0.621638 Tw (for convenience. Canvas::line is equivalent to stroking a path with two points,)Tj -0.92079 Tw (Canvas::rect strokes a rectangular path, Canvas::fill_rect fills a rectangular path,)' -1.49962 Tw (and Canvas::clip_rect restricts subsequent output to be within a rectangular path.)' 10.668 -14.6402 Td 1.10305 Tw (Drawing operations are typically batched to improve performance. For)Tj -10.668 -13.7398 Td -1.43581 Tw (example, a series of Canvas::character operations might be combined into a single)Tj -1.2237 Tw (request on many graphics systems. An application cannot determine if or when a)' -1.32841 Tw (particular operation has completed. No synchronization operations are defined on)' -0.873017 Tw (a canvas, as several canvases may be active at the same time. Display::flush or)' -0.34572 Tw (Display::sync can be used to wait until the display starts or finishes drawing,)' 0.000121483 Tc (respectively.)' 0 Tc 10.668 -14.6402 Td -0.510679 Tw (As an example of the drawing operations, the following code draws a filled)Tj -10.668 -13.7398 Td -1.49952 Tw (triangle with corners \(x1,y1\), \(x2,y2\), and \(x3,y3\):)Tj 0.000205191 Tc /R19628144 10 Tf 24.9898 -18.4801 Td (canvas->new_path\(\);)Tj 0 Tc 11.5199 TL -1.38747 Tw (canvas->move_to\(x1, y1\);)' -1.38754 Tw (canvas->line_to\(x2, y2\);)' (canvas->line_to\(x3, y3\);)' 0.000185649 Tc (canvas->close_path\(\);)' 0 Tc 12.4797 TL -1.38793 Tw (canvas->fill\(color\); )' /R18609880 18 Tf -24.9898 -41.2801 Td (6.3)Tj 0.000212533 Tc 35 0 Td (Printer)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.603544 Tw (A printer is a 2-D drawing surface like a canvas, but that generates output for)Tj 13.7402 TL -1.27215 Tw (hardcopy or previewing. The printer class normally generates PostScript text to a)' -1.49956 Tw (file; other printer formats may be available at a particular site.)' 10.668 -14.6398 Td -1.02781 Tw (Printer is a subclass of Canvas with different implementations for the drawing)Tj -10.668 -13.7402 Td -1.34157 Tw (operations. Thus, a printer can be passed to an operation expecting a canvas. The)Tj -1.49953 Tw (printer class also provides a few additional operations.)' 10.668 -14.6398 Td -0.219175 Tw (The printer constructor takes a pointer to an output stream where the print)Tj -10.668 -13.7402 Td 0.144489 Tw (representation will be written. Printer::resize specifies the boundaries of the)Tj 0.129502 Tw (printed page. Printer::comment generates text that will appear in the output)' 0.000149727 Tc 372.72 -22.8602 Td (6-)Tj 0 Tc 12.9961 0 Td (8)Tj 0.000149727 Tc -12.6758 0.160156 Td (6-)Tj 0 Tc 12.9957 0 Td (8)Tj ET Q Q \n \n \n \n \n-1820\n+1822\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -2793,27 +2793,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 188.83 Tm -1.43235 Tw (stream, but will not show on the printed page. Printer::page generates information)Tj 13.7402 TL -1.27468 Tw (about the current page. This operation will not result in any printed output, but is)' -1.4996 Tw (used by previewers. Printer::flush forces any locally-buffered data to be written. )' 0.000149727 Tc 372.72 -85.45 Td (6-)Tj 0 Tc 12.9961 0 Td (9)Tj 0.000149727 Tc -12.6758 0.160156 Td (6-)Tj 0 Tc 12.9957 0 Td (9)Tj ET Q 1067.7 7142 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 128.106 697.64 Tm -1.38871 Tw (interface Canvas {)Tj 8.33008 -11.5199 Td -1.38848 Tw (Window* window\(\) const;)Tj 11.5199 TL -1.38871 Tw (Coord width\(\) const, height\(\) const;)' 16.5199 TL -1.38824 Tw (PixelCoord to_pixels\(Coord\) const;)' 11.5199 TL -1.38815 Tw (Coord to_coord\(PixelCoord\) const;)' -1.38805 Tw (Coord to_pixels_coord\(Coord\) const;)' 16.5199 TL (void new_path\(\);)' 11.5199 TL -1.38887 Tw (void move_to\(Coord x, Coord y\);)' -1.38889 Tw (void line_to\(Coord x, Coord y\);)' -1.38918 Tw (void curve_to\(Coord x, Coord y, Coord x1, Coord y1, Coord x2, Coord y2\);)' -1.38805 Tw (void close_path\(\);)' -1.38874 Tw (void stroke\(const Color*, const Brush*\);)' -1.38915 Tw (void rect\(Coord l, Coord b, Coord r, Coord t, const Color*, const Brush*\);)' -1.38846 Tw (void fill\(const Color*\);)' -1.38906 Tw (void fill_rect\(Coord l, Coord b, Coord r, Coord t, const Color*\);)' -1.38832 Tw (void character\()' 8.33008 -11.5199 Td -1.38917 Tw (const Font*, int ch, Coord width, const Color*, Coord x, Coord y)Tj 0.000310898 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc -1.38903 Tw (void stencil\(const Bitmap*, const Color*, Coord x, Coord y\);)' -1.38898 Tw (void image\(const Raster*, Coord x, Coord y\);)' 16.5203 TL -1.38748 Tw (void push_transform\(\), pop_transform\(\);)' 11.5199 TL -1.38785 Tw (void transform\(const Transformer&\);)' -1.38771 Tw (void transformer\(const Transformer&\);)' -1.38817 Tw (const Transformer& transformer\(\) const;)' -1.38803 Tw (void push_clipping\(\), pop_clipping\(\);)' -1.38855 Tw (void clip\(\);)' -1.38905 Tw (void clip_rect\(Coord l, Coord b, Coord r, Coord t\);)' 16.5199 TL -1.38838 Tw (void damage\(const Extension&\);)' 11.5199 TL -1.38905 Tw (void damage\(Coord l, Coord b, Coord r, Coord t\);)' -1.38832 Tw (boolean damaged\(const Extension&\) const;)' -1.38901 Tw (boolean damaged\(Coord l, Coord b, Coord r, Coord t\) const;)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38897 Tw (interface Printer : Canvas {)' 0.000238631 Tc 8.33008 -11.5199 Td (Printer\(ostream*\);)Tj 0 Tc 11.5199 TL -1.38891 Tw (void resize\(Coord left, Coord bottom, Coord right, Coord top\);)' -1.38823 Tw (void comment\(const char*\);)' -1.3884 Tw (void page\(const char*\);)' -1.38832 Tw (void flush\(\);)' -8.33008 -11.5199 Td -1.38925 Tw (}; )Tj 88.0203 -16.5199 Td -1.38847 Tw (Figure 6.7:)Tj 56.1297 0 Td -1.38888 Tw (Canvas and printer protocols)Tj ET Q 1067.7 2101.9 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 188.83 Tm -1.43235 Tw (stream, but will not show on the printed page. Printer::page generates information)Tj 13.7402 TL -1.27468 Tw (about the current page. This operation will not result in any printed output, but is)' -1.4996 Tw (used by previewers. Printer::flush forces any locally-buffered data to be written. )' 0.000149727 Tc 372.72 -85.45 Td (6-)Tj 0 Tc 12.9961 0 Td (9)Tj 0.000149727 Tc -12.6758 0.160156 Td (6-)Tj 0 Tc 12.9957 0 Td (9)Tj ET Q 1067.7 7142 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 128.106 697.64 Tm -1.38871 Tw (interface Canvas {)Tj 8.33008 -11.5199 Td -1.38848 Tw (Window* window\(\) const;)Tj 11.5199 TL -1.38871 Tw (Coord width\(\) const, height\(\) const;)' 16.5199 TL -1.38824 Tw (PixelCoord to_pixels\(Coord\) const;)' 11.5199 TL -1.38815 Tw (Coord to_coord\(PixelCoord\) const;)' -1.38805 Tw (Coord to_pixels_coord\(Coord\) const;)' 16.5199 TL (void new_path\(\);)' 11.5199 TL -1.38887 Tw (void move_to\(Coord x, Coord y\);)' -1.38889 Tw (void line_to\(Coord x, Coord y\);)' -1.38918 Tw (void curve_to\(Coord x, Coord y, Coord x1, Coord y1, Coord x2, Coord y2\);)' -1.38805 Tw (void close_path\(\);)' -1.38874 Tw (void stroke\(const Color*, const Brush*\);)' -1.38915 Tw (void rect\(Coord l, Coord b, Coord r, Coord t, const Color*, const Brush*\);)' -1.38846 Tw (void fill\(const Color*\);)' -1.38906 Tw (void fill_rect\(Coord l, Coord b, Coord r, Coord t, const Color*\);)' -1.38832 Tw (void character\()' 8.33008 -11.5199 Td -1.38917 Tw (const Font*, int ch, Coord width, const Color*, Coord x, Coord y)Tj 0.000310898 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc -1.38903 Tw (void stencil\(const Bitmap*, const Color*, Coord x, Coord y\);)' -1.38898 Tw (void image\(const Raster*, Coord x, Coord y\);)' 16.5203 TL -1.38748 Tw (void push_transform\(\), pop_transform\(\);)' 11.5199 TL -1.38785 Tw (void transform\(const Transformer&\);)' -1.38771 Tw (void transformer\(const Transformer&\);)' -1.38817 Tw (const Transformer& transformer\(\) const;)' -1.38803 Tw (void push_clipping\(\), pop_clipping\(\);)' -1.38855 Tw (void clip\(\);)' -1.38905 Tw (void clip_rect\(Coord l, Coord b, Coord r, Coord t\);)' 16.5199 TL -1.38838 Tw (void damage\(const Extension&\);)' 11.5199 TL -1.38905 Tw (void damage\(Coord l, Coord b, Coord r, Coord t\);)' -1.38832 Tw (boolean damaged\(const Extension&\) const;)' -1.38901 Tw (boolean damaged\(Coord l, Coord b, Coord r, Coord t\) const;)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38897 Tw (interface Printer : Canvas {)' 0.000238631 Tc 8.33008 -11.5199 Td (Printer\(ostream*\);)Tj 0 Tc 11.5199 TL -1.38891 Tw (void resize\(Coord left, Coord bottom, Coord right, Coord top\);)' -1.38823 Tw (void comment\(const char*\);)' -1.3884 Tw (void page\(const char*\);)' -1.38832 Tw (void flush\(\);)' -8.33008 -11.5199 Td -1.38925 Tw (}; )Tj 88.0203 -16.5199 Td -1.38847 Tw (Figure 6.7:)Tj 56.1297 0 Td -1.38888 Tw (Canvas and printer protocols)Tj ET Q 1067.7 2101.9 3960 10 re f* Q \n \n \n \n \n 1088\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -2850,29 +2850,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 8)Tj 0.000130335 Tc 36.9602 TL (Styles)' 0 Tc /R35493912 12 Tf 28.3199 TL 0.744422 Tw (User interface toolkits traditionally have coupled the management of style)' 13.7402 TL -0.601142 Tw (attributes such as color and font with the composition of objects in a window.)' -1.31654 Tw (This coupling is too rigid and inefficient for many applications because attributes)' -0.0147362 Tw (are )' 0.00006485 Tc /R36187064 12 Tf 20.6219 0 Td (logical)Tj 0 Tc /R35493912 12 Tf 33.3359 0 Td -0.0148519 Tw ( information, whereas composition is a )Tj 0.00008631 Tc /R36187064 12 Tf 207.466 0 Td (physical)Tj 0 Tc /R35493912 12 Tf 39.9957 0 Td -0.0148621 Tw ( organization. For)Tj -301.42 -13.7402 Td -1.36283 Tw (example, a document logically contains text and graphics organized into chapters,)Tj -0.50717 Tw (sections, subsections, and paragraphs. Physically, the document contains lines,)' 0.187804 Tw (columns, and pages. The font of a string of characters in the document is)' -1.38695 Tw (independent of whether there is a line break within the string or not, thus the style)' -1.49963 Tw (information is orthogonal to the layout.)' 10.668 -14.6402 Td -0.312689 Tw (InterViews provides a )Tj 0.000138092 Tc /R36187064 12 Tf 116.093 0 Td (style)Tj 0 Tc /R35493912 12 Tf 21.9961 0 Td -0.312733 Tw ( class for organizing user interface attributes. A)Tj -148.757 -13.7398 Td -0.370824 Tw (style is similar to an environment in a text formatting system such as Scribe.)Tj -0.73265 Tw (Styles may be nested hierarchically, and attributes defined in an outer style are)' -1.01025 Tw (visible in an inner style if not otherwise defined. A style consists of an optional)' -1.26942 Tw (name, an optional list of prefixes for wildcard-matching, a collection of attributes)' -1.54814 Tw (\(name-value pairs\), a collection of styles nested inside the style, and a parent style.)' /R35743448 18 Tf 41.2801 TL (8.1)' 35 0 Td -2.24928 Tw (Defining a style)Tj /R35493912 12 Tf -35 -32.4 Td -0.224396 Tw (Figure 8.1 shows the style class operations for creating and accessing simple)Tj 13.7398 TL -0.330844 Tw (style information. When a style is created, its name and parent style may be)' -0.280318 Tw (specified. The default parent style is nil. Style::name sets or gets the style's)' -1.18953 Tw (name. Style::parent gets the style's parent. The parent cannot be set directly, but)' -1.49969 Tw (can be changed by appending the style to its \(new\) parent.)' 10.668 -14.6402 Td -0.776206 Tw (Style::append and Style::remove add and delete a style from the list of styles)Tj -10.668 -13.7398 Td -0.680227 Tw (nested inside another style. Style::children returns the number of nested styles.)Tj -0.0631133 Tw (Style::child returns the indexed child in the list. Style::find_style returns the)' -1.49969 Tw (nested style with the given name or nil if there is none.)' 10.668 -14.6398 Td -1.20361 Tw (Style::attribute adds a <)Tj 0.000118256 Tc /R36187064 12 Tf 116.208 0 Td (name,value)Tj 0 Tc /R35493912 12 Tf 54.984 0 Td -1.20381 Tw (> pair to the list of attributes in the style. If)Tj -181.86 -13.7402 Td -0.625556 Tw (an attribute is already defined with the name, the value will be updated unless)Tj -0.481232 Tw (the specified priority is lower than the already-defined priority of the attribute)' -1.01619 Tw (Style::remove_attribute deletes the named attribute from the style's attribute list.)' -1.22874 Tw (Style::attributes and the get form of Style::attribute can be used to retrieve all the)' -1.49968 Tw (attributes defined on a style. The order of the list is arbitrary.)' /R35743448 18 Tf 41.2801 TL (8.2)' 35 0 Td -2.24902 Tw (Finding an attribute)Tj /R35493912 12 Tf -35 -32.4 Td -0.815111 Tw (The style class provides two overloaded functions for finding an attribute value)Tj 0.000149727 Tc 378.8 -24.5 Td (8-)Tj 0 Tc 12.9961 0 Td (1)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 8)Tj 0.000130335 Tc 36.9602 TL (Styles)' 0 Tc /R18360344 12 Tf 28.3199 TL 0.744422 Tw (User interface toolkits traditionally have coupled the management of style)' 13.7402 TL -0.601142 Tw (attributes such as color and font with the composition of objects in a window.)' -1.31654 Tw (This coupling is too rigid and inefficient for many applications because attributes)' -0.0147362 Tw (are )' 0.00006485 Tc /R19053496 12 Tf 20.6219 0 Td (logical)Tj 0 Tc /R18360344 12 Tf 33.3359 0 Td -0.0148519 Tw ( information, whereas composition is a )Tj 0.00008631 Tc /R19053496 12 Tf 207.466 0 Td (physical)Tj 0 Tc /R18360344 12 Tf 39.9957 0 Td -0.0148621 Tw ( organization. For)Tj -301.42 -13.7402 Td -1.36283 Tw (example, a document logically contains text and graphics organized into chapters,)Tj -0.50717 Tw (sections, subsections, and paragraphs. Physically, the document contains lines,)' 0.187804 Tw (columns, and pages. The font of a string of characters in the document is)' -1.38695 Tw (independent of whether there is a line break within the string or not, thus the style)' -1.49963 Tw (information is orthogonal to the layout.)' 10.668 -14.6402 Td -0.312689 Tw (InterViews provides a )Tj 0.000138092 Tc /R19053496 12 Tf 116.093 0 Td (style)Tj 0 Tc /R18360344 12 Tf 21.9961 0 Td -0.312733 Tw ( class for organizing user interface attributes. A)Tj -148.757 -13.7398 Td -0.370824 Tw (style is similar to an environment in a text formatting system such as Scribe.)Tj -0.73265 Tw (Styles may be nested hierarchically, and attributes defined in an outer style are)' -1.01025 Tw (visible in an inner style if not otherwise defined. A style consists of an optional)' -1.26942 Tw (name, an optional list of prefixes for wildcard-matching, a collection of attributes)' -1.54814 Tw (\(name-value pairs\), a collection of styles nested inside the style, and a parent style.)' /R18609880 18 Tf 41.2801 TL (8.1)' 35 0 Td -2.24928 Tw (Defining a style)Tj /R18360344 12 Tf -35 -32.4 Td -0.224396 Tw (Figure 8.1 shows the style class operations for creating and accessing simple)Tj 13.7398 TL -0.330844 Tw (style information. When a style is created, its name and parent style may be)' -0.280318 Tw (specified. The default parent style is nil. Style::name sets or gets the style's)' -1.18953 Tw (name. Style::parent gets the style's parent. The parent cannot be set directly, but)' -1.49969 Tw (can be changed by appending the style to its \(new\) parent.)' 10.668 -14.6402 Td -0.776206 Tw (Style::append and Style::remove add and delete a style from the list of styles)Tj -10.668 -13.7398 Td -0.680227 Tw (nested inside another style. Style::children returns the number of nested styles.)Tj -0.0631133 Tw (Style::child returns the indexed child in the list. Style::find_style returns the)' -1.49969 Tw (nested style with the given name or nil if there is none.)' 10.668 -14.6398 Td -1.20361 Tw (Style::attribute adds a <)Tj 0.000118256 Tc /R19053496 12 Tf 116.208 0 Td (name,value)Tj 0 Tc /R18360344 12 Tf 54.984 0 Td -1.20381 Tw (> pair to the list of attributes in the style. If)Tj -181.86 -13.7402 Td -0.625556 Tw (an attribute is already defined with the name, the value will be updated unless)Tj -0.481232 Tw (the specified priority is lower than the already-defined priority of the attribute)' -1.01619 Tw (Style::remove_attribute deletes the named attribute from the style's attribute list.)' -1.22874 Tw (Style::attributes and the get form of Style::attribute can be used to retrieve all the)' -1.49968 Tw (attributes defined on a style. The order of the list is arbitrary.)' /R18609880 18 Tf 41.2801 TL (8.2)' 35 0 Td -2.24902 Tw (Finding an attribute)Tj /R18360344 12 Tf -35 -32.4 Td -0.815111 Tw (The style class provides two overloaded functions for finding an attribute value)Tj 0.000149727 Tc 378.8 -24.5 Td (8-)Tj 0 Tc 12.9961 0 Td (1)Tj ET Q Q \n \n \n \n \n-1758\n+1759\n \n \n \n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -2909,29 +2909,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 298.99 Tm -1.10761 Tw (given the name. Style::find_attribute takes two parameters and returns a boolean)Tj 13.7398 TL -1.2154 Tw (value that is true if the attribute is found and false otherwise. The first parameter)' -0.386158 Tw (is the desired name, which can either be passed as a String object or a )' 0.00007210 Tc /R36187064 12 Tf 370.668 0 Td (const)Tj 0.00005913 Tc -370.668 -13.7402 Td (char*)Tj 0 Tc /R35493912 12 Tf 27.9961 0 Td -0.661874 Tw (. The second parameter is a reference to where the value of the attribute)Tj -27.9961 -13.7398 Td -0.783266 Tw (should be stored if found. If the parameter is a string, then the value is simply)Tj -0.245603 Tw (copied directly. If it is a long or double, then value string is converted to a)' -1.25548 Tw (number. If the result parameter is a Coord, then the value string is converted to a)' -1.24174 Tw (number and multiplied by the units specified in the value string after the number.)' -0.467611 Tw (The unit specification can be ªinº for inches, ªcmº for centimeters, ªmmº for)' -1.14056 Tw (millimeters, ªemº for the width in points of the character ªmº in the style's font,)' -1.49957 Tw (and ªptº for points.)' 10.668 -14.6398 Td -1.07796 Tw (The other function for finding an attribute is Style::value_is_on. This function)Tj -10.668 -13.7398 Td -1.16571 Tw (is equivalent to calling Style::find_attribute and testing if the value string is ªonº)Tj -1.4995 Tw (or ªtrueº. The test is case-insensitive.)' 0.000149727 Tc 378.8 -44.3699 Td (8-)Tj 0 Tc 12.9961 0 Td (2)Tj ET Q 1062.9 7091.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 127.626 692.6 Tm -1.38901 Tw (interface Style : Resource {)Tj 0.000204802 Tc 8.32969 -11.5199 Td (Style\(\);)Tj 0 Tc 11.5199 TL -1.3885 Tw (Style\(const String& name\);)' -1.38765 Tw (Style\(Style* parent\);)' -1.38863 Tw (Style\(const String& name, Style* parent\);)' 16.5199 TL -1.38828 Tw (void name\(const String&\);)' 11.5199 TL -1.3887 Tw (const String* name\(\) const;)' -1.38838 Tw (void alias\(const String&\);)' -1.38834 Tw (long alias_count\(\) const;)' -1.38864 Tw (const String* alias\(long\) const;)' -1.3884 Tw (Style* parent\(\) const;)' 16.5199 TL -1.38781 Tw (void append\(Style*\);)' 11.5199 TL -1.38785 Tw (void remove\(Style*\);)' -1.38846 Tw (long children\(\) const;)' -1.38844 Tw (Style* child\(long\) const;)' 16.5199 TL -1.38904 Tw (void attribute\(const String& name, const String& value, int priority = 0\);)' 11.5199 TL -1.38811 Tw (void remove_attribute\(const String& name\);)' -1.38824 Tw (long attributes\(\) const;)' -1.38866 Tw (boolean attribute\(long, String& name, String& value\) const;)' 16.5199 TL -1.3886 Tw (void add_trigger\(const String& , Action*\);)' 11.5199 TL -1.38871 Tw (void remove_trigger\(const String&, Action* = nil\);)' -1.38672 Tw (void add_trigger_any\(Action*\);)' -1.38641 Tw (void remove_trigger_any\(Action*\);)' 16.5203 TL -1.38858 Tw (boolean find_attribute\(const String&, String& value\) const;)' 11.5199 TL -1.38833 Tw (boolean find_attribute\(const String&, long&\) const;)' -1.3884 Tw (boolean find_attribute\(const String&, double&\) const;)' -1.38842 Tw (boolean find_attribute\(const String&, Coord&\) const;)' -1.3881 Tw (boolean value_is_on\(const String&\);)' 0.000233889 Tc -8.32969 -11.5203 Td (};)Tj 0 Tc 120.255 -16.5199 Td -1.38848 Tw (Figure 8.1:)Tj 56.1301 0 Td -1.38835 Tw (Style protocol.)Tj ET Q 1062.9 3203.5 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 298.99 Tm -1.10761 Tw (given the name. Style::find_attribute takes two parameters and returns a boolean)Tj 13.7398 TL -1.2154 Tw (value that is true if the attribute is found and false otherwise. The first parameter)' -0.386158 Tw (is the desired name, which can either be passed as a String object or a )' 0.00007210 Tc /R19053496 12 Tf 370.668 0 Td (const)Tj 0.00005913 Tc -370.668 -13.7402 Td (char*)Tj 0 Tc /R18360344 12 Tf 27.9961 0 Td -0.661874 Tw (. The second parameter is a reference to where the value of the attribute)Tj -27.9961 -13.7398 Td -0.783266 Tw (should be stored if found. If the parameter is a string, then the value is simply)Tj -0.245603 Tw (copied directly. If it is a long or double, then value string is converted to a)' -1.25548 Tw (number. If the result parameter is a Coord, then the value string is converted to a)' -1.24174 Tw (number and multiplied by the units specified in the value string after the number.)' -0.467611 Tw (The unit specification can be ªinº for inches, ªcmº for centimeters, ªmmº for)' -1.14056 Tw (millimeters, ªemº for the width in points of the character ªmº in the style's font,)' -1.49957 Tw (and ªptº for points.)' 10.668 -14.6398 Td -1.07796 Tw (The other function for finding an attribute is Style::value_is_on. This function)Tj -10.668 -13.7398 Td -1.16571 Tw (is equivalent to calling Style::find_attribute and testing if the value string is ªonº)Tj -1.4995 Tw (or ªtrueº. The test is case-insensitive.)' 0.000149727 Tc 378.8 -44.3699 Td (8-)Tj 0 Tc 12.9961 0 Td (2)Tj ET Q 1062.9 7091.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 127.626 692.6 Tm -1.38901 Tw (interface Style : Resource {)Tj 0.000204802 Tc 8.32969 -11.5199 Td (Style\(\);)Tj 0 Tc 11.5199 TL -1.3885 Tw (Style\(const String& name\);)' -1.38765 Tw (Style\(Style* parent\);)' -1.38863 Tw (Style\(const String& name, Style* parent\);)' 16.5199 TL -1.38828 Tw (void name\(const String&\);)' 11.5199 TL -1.3887 Tw (const String* name\(\) const;)' -1.38838 Tw (void alias\(const String&\);)' -1.38834 Tw (long alias_count\(\) const;)' -1.38864 Tw (const String* alias\(long\) const;)' -1.3884 Tw (Style* parent\(\) const;)' 16.5199 TL -1.38781 Tw (void append\(Style*\);)' 11.5199 TL -1.38785 Tw (void remove\(Style*\);)' -1.38846 Tw (long children\(\) const;)' -1.38844 Tw (Style* child\(long\) const;)' 16.5199 TL -1.38904 Tw (void attribute\(const String& name, const String& value, int priority = 0\);)' 11.5199 TL -1.38811 Tw (void remove_attribute\(const String& name\);)' -1.38824 Tw (long attributes\(\) const;)' -1.38866 Tw (boolean attribute\(long, String& name, String& value\) const;)' 16.5199 TL -1.3886 Tw (void add_trigger\(const String& , Action*\);)' 11.5199 TL -1.38871 Tw (void remove_trigger\(const String&, Action* = nil\);)' -1.38672 Tw (void add_trigger_any\(Action*\);)' -1.38641 Tw (void remove_trigger_any\(Action*\);)' 16.5203 TL -1.38858 Tw (boolean find_attribute\(const String&, String& value\) const;)' 11.5199 TL -1.38833 Tw (boolean find_attribute\(const String&, long&\) const;)' -1.3884 Tw (boolean find_attribute\(const String&, double&\) const;)' -1.38842 Tw (boolean find_attribute\(const String&, Coord&\) const;)' -1.3881 Tw (boolean value_is_on\(const String&\);)' 0.000233889 Tc -8.32969 -11.5203 Td (};)Tj 0 Tc 120.255 -16.5199 Td -1.38848 Tw (Figure 8.1:)Tj 56.1301 0 Td -1.38835 Tw (Style protocol.)Tj ET Q 1062.9 3203.5 3960 10 re f* Q \n \n \n \n \n-1343\n+1344\n \n \n \n \n-R36761712\n+R19628144\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -2968,29 +2968,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 18 Tf 1 0 0 1 106.05 704.46 Tm (8.3)Tj 35 0 Td -2.24893 Tw (Wildcard matching)Tj /R35493912 12 Tf -35 -32.4 Td -0.217875 Tw (Attribute names may contain ª*º characters to specify wildcard matching. A)Tj 13.7402 TL -0.32056 Tw (name of the form A*B will match an attribute B in a nested style named A.)' -0.5382 Tw (Wildcard names also may begin with a ª*º, which matches in any descendant)' -0.739309 Tw (style. Thus, *A*B will match an attribute B in any descendant style named A.)' -1.01128 Tw (Because attributes are inherited, specifying the wildcard name *B is identical to)' -1.49948 Tw (specifying the normal attribute B.)' 10.668 -14.6402 Td -0.998395 Tw (In addition to a name, styles may have a list of associated aliases. Style::alias)Tj -10.668 -13.7398 Td -1.04682 Tw (prepends a string to the list. Wildcard matches search using a style's name first,)Tj -1.43668 Tw (then search using the style's aliases in the reverse order in which they are defined.)' -0.0638275 Tw (Aliases are typically used for indicating a subclass relationship and allowing)' -1.49952 Tw (styles to inherit attributes specified for a superclass.)' 10.668 -14.6402 Td -1.49961 Tw (For example, suppose the root style defines the following attributes:)Tj 0.000245594 Tc /R36761712 10 Tf 21.3359 -14.6398 Td (*Mover*autorepeat:off)Tj 0.000230963 Tc 14.4402 TL (*UpMover*autorepeat:on)' 0 Tc /R35493912 12 Tf -21.3359 -19.4398 Td -1.024 Tw (Consider descendant styles S and T: S's aliases are UpMover and Mover; T's)Tj -10.668 -13.7398 Td -0.30864 Tw (aliases are DownMover and Mover. Style::find_attribute for ªautorepeatº will)Tj 13.7402 TL -1.49948 Tw (return ªonº for S, ªoffº for T.)' 10.668 -14.6398 Td -1.36053 Tw (The wildcard matching algorithm is compatible with the X resource manager to)Tj -10.668 -13.7402 Td -0.781686 Tw (support the same user customization functionality. Wildcard attributes typically)Tj -1.30542 Tw (are defined only on the root style, as loaded from the window system, application)' -1.49933 Tw (defaults files, or command-line arguments.)' /R35743448 18 Tf 41.2801 TL (8.4)' 35 0 Td -2.2494 Tw (Using styles with glyphs)Tj /R35493912 12 Tf -35 -32.4 Td -0.36131 Tw (Glyphs that draw typically contain the specific style information they need to)Tj 13.7402 TL -1.42191 Tw (render. For example, a character glyph contains the font and color it uses to draw.)' -0.484795 Tw (Higher level glyphs, such as a slider for scrolling, contain a style from which)' -0.727679 Tw (they construct their components. When styles support trigger routines to detect)' -1.24578 Tw (attribute value changes, these higher-level components will be able to reconstruct)' -1.49905 Tw (their contents automatically.)' 10.668 -14.6402 Td 0.21079 Tw (Figure 8.2 shows a function that builds a vertical scrollbar by creating a)Tj -10.668 -13.7398 Td -0.238548 Tw (box containing an up-mover \(button with up-arrow\), a scroller \(slider\), and a)Tj -0.344735 Tw (down-mover \(button with down-arrow\). The function creates a new style and)' -1.01177 Tw (gives it the prefixes VScrollBar and ScrollBar for customization. If the attribute)' -1.57399 Tw (ªmover_sizeº is defined on the style, then its value will override the default \(15.0\).)' /R35743448 18 Tf 41.2801 TL (8.5)' 0.000154768 Tc 35 0 Td (Summary)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -1.46109 Tw (User interface geometry and attribute management are two different problems that)Tj 0.000149727 Tc 378.8 -26.5 Td (8-)Tj 0 Tc 12.9961 0 Td (3)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 18 Tf 1 0 0 1 106.05 704.46 Tm (8.3)Tj 35 0 Td -2.24893 Tw (Wildcard matching)Tj /R18360344 12 Tf -35 -32.4 Td -0.217875 Tw (Attribute names may contain ª*º characters to specify wildcard matching. A)Tj 13.7402 TL -0.32056 Tw (name of the form A*B will match an attribute B in a nested style named A.)' -0.5382 Tw (Wildcard names also may begin with a ª*º, which matches in any descendant)' -0.739309 Tw (style. Thus, *A*B will match an attribute B in any descendant style named A.)' -1.01128 Tw (Because attributes are inherited, specifying the wildcard name *B is identical to)' -1.49948 Tw (specifying the normal attribute B.)' 10.668 -14.6402 Td -0.998395 Tw (In addition to a name, styles may have a list of associated aliases. Style::alias)Tj -10.668 -13.7398 Td -1.04682 Tw (prepends a string to the list. Wildcard matches search using a style's name first,)Tj -1.43668 Tw (then search using the style's aliases in the reverse order in which they are defined.)' -0.0638275 Tw (Aliases are typically used for indicating a subclass relationship and allowing)' -1.49952 Tw (styles to inherit attributes specified for a superclass.)' 10.668 -14.6402 Td -1.49961 Tw (For example, suppose the root style defines the following attributes:)Tj 0.000245594 Tc /R19628144 10 Tf 21.3359 -14.6398 Td (*Mover*autorepeat:off)Tj 0.000230963 Tc 14.4402 TL (*UpMover*autorepeat:on)' 0 Tc /R18360344 12 Tf -21.3359 -19.4398 Td -1.024 Tw (Consider descendant styles S and T: S's aliases are UpMover and Mover; T's)Tj -10.668 -13.7398 Td -0.30864 Tw (aliases are DownMover and Mover. Style::find_attribute for ªautorepeatº will)Tj 13.7402 TL -1.49948 Tw (return ªonº for S, ªoffº for T.)' 10.668 -14.6398 Td -1.36053 Tw (The wildcard matching algorithm is compatible with the X resource manager to)Tj -10.668 -13.7402 Td -0.781686 Tw (support the same user customization functionality. Wildcard attributes typically)Tj -1.30542 Tw (are defined only on the root style, as loaded from the window system, application)' -1.49933 Tw (defaults files, or command-line arguments.)' /R18609880 18 Tf 41.2801 TL (8.4)' 35 0 Td -2.2494 Tw (Using styles with glyphs)Tj /R18360344 12 Tf -35 -32.4 Td -0.36131 Tw (Glyphs that draw typically contain the specific style information they need to)Tj 13.7402 TL -1.42191 Tw (render. For example, a character glyph contains the font and color it uses to draw.)' -0.484795 Tw (Higher level glyphs, such as a slider for scrolling, contain a style from which)' -0.727679 Tw (they construct their components. When styles support trigger routines to detect)' -1.24578 Tw (attribute value changes, these higher-level components will be able to reconstruct)' -1.49905 Tw (their contents automatically.)' 10.668 -14.6402 Td 0.21079 Tw (Figure 8.2 shows a function that builds a vertical scrollbar by creating a)Tj -10.668 -13.7398 Td -0.238548 Tw (box containing an up-mover \(button with up-arrow\), a scroller \(slider\), and a)Tj -0.344735 Tw (down-mover \(button with down-arrow\). The function creates a new style and)' -1.01177 Tw (gives it the prefixes VScrollBar and ScrollBar for customization. If the attribute)' -1.57399 Tw (ªmover_sizeº is defined on the style, then its value will override the default \(15.0\).)' /R18609880 18 Tf 41.2801 TL (8.5)' 0.000154768 Tc 35 0 Td (Summary)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -1.46109 Tw (User interface geometry and attribute management are two different problems that)Tj 0.000149727 Tc 378.8 -26.5 Td (8-)Tj 0 Tc 12.9961 0 Td (3)Tj ET Q Q \n \n \n \n \n-1634\n+1633\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -3027,25 +3027,25 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 708.3 Tm -0.346362 Tw (are best solved independently. Whereas glyphs define a physical organization)Tj 13.7398 TL -0.482633 Tw (with a directed acyclic graph, styles define a logical organization with a strict)' 0.54321 Tw (hierarchy. Both structures are simple and the connection between them is)' 0.000141621 Tc (straightforward.)' 0 Tc 10.668 -14.6402 Td -1.05772 Tw (Styles provide a unified framework for managing user-customizable attributes,)Tj -10.668 -13.7398 Td -0.40825 Tw (document formatting information, and structured graphics state. Style prefixes)Tj 0.743011 Tw (support wildcarding and allow the decoupling of the implementation class)' -0.439616 Tw (hierarchy from the logical class hierarchy offered to the user for the purposes)' -0.330592 Tw (of customization. This approach makes applications simpler to develop, more)' -1.49959 Tw (consistent to use, and easier to integrate.)' 0.000149727 Tc 378.8 -508.64 Td (8-)Tj 0 Tc 12.9961 0 Td (4)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 708.3 Tm -0.346362 Tw (are best solved independently. Whereas glyphs define a physical organization)Tj 13.7398 TL -0.482633 Tw (with a directed acyclic graph, styles define a logical organization with a strict)' 0.54321 Tw (hierarchy. Both structures are simple and the connection between them is)' 0.000141621 Tc (straightforward.)' 0 Tc 10.668 -14.6402 Td -1.05772 Tw (Styles provide a unified framework for managing user-customizable attributes,)Tj -10.668 -13.7398 Td -0.40825 Tw (document formatting information, and structured graphics state. Style prefixes)Tj 0.743011 Tw (support wildcarding and allow the decoupling of the implementation class)' -0.439616 Tw (hierarchy from the logical class hierarchy offered to the user for the purposes)' -0.330592 Tw (of customization. This approach makes applications simpler to develop, more)' -1.49959 Tw (consistent to use, and easier to integrate.)' 0.000149727 Tc 378.8 -508.64 Td (8-)Tj 0 Tc 12.9961 0 Td (4)Tj ET Q Q \n \n \n \n \n 631\n \n \n \n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -3082,27 +3082,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT 0.000149727 Tc /R35493912 12 Tf 1 0 0 1 484.85 75.1 Tm (8-)Tj 0 Tc 12.9961 0 Td (5)Tj ET Q 1043.7 6506 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 125.706 634.04 Tm -1.38859 Tw (Glyph* vscroll_bar\(Adjustable* a\) {)Tj 8.33008 -11.5199 Td -1.38834 Tw (WidgetKit& kit = *WidgetKit::instance\(\);)Tj 11.5199 TL -1.38849 Tw (const LayoutKit& layout = *LayoutKit::instance\(\);)' 0.000166575 Tc (kit.begin_style\("VScrollBar"\);)' 0.000159554 Tc 12.5199 TL (kit.alias\("ScrollBar"\);)' 0 Tc 11.5203 TL -1.38897 Tw (Style* s = kit.style\(\);)' -1.38882 Tw (Coord mover_size = 15.0;)' -1.38551 Tw (s->find_attribute\("mover_size", mover_size\);)' -1.38861 Tw (Glyph* sep = layout.vspace\(1.0\);)' -1.38711 Tw (return kit.inset_frame\()' 0.000181834 Tc 8.33008 -11.5203 Td (layout.vbox\()Tj 0 Tc 8.33008 -11.5199 Td -1.38737 Tw (layout.v_fixed_span\(up_mover\(a, s\), mover_size\),)Tj 0.00019455 Tc (sep,)' 0 Tc -1.38858 Tw (new VScroller\(a, s\),)' 0.00019455 Tc (sep,)' 0 Tc -1.38737 Tw (layout.v_fixed_span\(down_mover\(a, s\), mover_size\))' 0.000310898 Tc -8.33008 -11.5199 Td (\),)Tj 0 Tc (s)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0.000156403 Tc -8.33008 -11.5199 Td (})Tj 0 Tc 90.2453 -16.5203 Td -1.38848 Tw (Figure 8.2:)Tj 56.1297 0 Td -1.38922 Tw (Using styles to build glyphs.)Tj ET Q 1043.7 3894.7 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT 0.000149727 Tc /R18360344 12 Tf 1 0 0 1 484.85 75.1 Tm (8-)Tj 0 Tc 12.9961 0 Td (5)Tj ET Q 1043.7 6506 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 125.706 634.04 Tm -1.38859 Tw (Glyph* vscroll_bar\(Adjustable* a\) {)Tj 8.33008 -11.5199 Td -1.38834 Tw (WidgetKit& kit = *WidgetKit::instance\(\);)Tj 11.5199 TL -1.38849 Tw (const LayoutKit& layout = *LayoutKit::instance\(\);)' 0.000166575 Tc (kit.begin_style\("VScrollBar"\);)' 0.000159554 Tc 12.5199 TL (kit.alias\("ScrollBar"\);)' 0 Tc 11.5203 TL -1.38897 Tw (Style* s = kit.style\(\);)' -1.38882 Tw (Coord mover_size = 15.0;)' -1.38551 Tw (s->find_attribute\("mover_size", mover_size\);)' -1.38861 Tw (Glyph* sep = layout.vspace\(1.0\);)' -1.38711 Tw (return kit.inset_frame\()' 0.000181834 Tc 8.33008 -11.5203 Td (layout.vbox\()Tj 0 Tc 8.33008 -11.5199 Td -1.38737 Tw (layout.v_fixed_span\(up_mover\(a, s\), mover_size\),)Tj 0.00019455 Tc (sep,)' 0 Tc -1.38858 Tw (new VScroller\(a, s\),)' 0.00019455 Tc (sep,)' 0 Tc -1.38737 Tw (layout.v_fixed_span\(down_mover\(a, s\), mover_size\))' 0.000310898 Tc -8.33008 -11.5199 Td (\),)Tj 0 Tc (s)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0.000156403 Tc -8.33008 -11.5199 Td (})Tj 0 Tc 90.2453 -16.5203 Td -1.38848 Tw (Figure 8.2:)Tj 56.1297 0 Td -1.38922 Tw (Using styles to build glyphs.)Tj ET Q 1043.7 3894.7 3960 10 re f* Q \n \n \n \n \n 649\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -3139,29 +3139,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 9)Tj 0.000130547 Tc 36.9602 TL (WidgetKit)' 0 Tc /R35493912 12 Tf 28.3199 TL -0.760898 Tw (WidgetKit defines operations for creating user interface objects with a concrete)' 13.7402 TL 0.242113 Tw (look-and-feel. Typically, an application uses a widget kit to create specific)' -0.647739 Tw (components, such as pulldown menus, push buttons, and scrollbars. WidgetKit)' -0.996715 Tw (isolates the application from specific look-and-feel issues and the details of how)' 0.179071 Tw (a concrete component is implemented. Many components are defined using)' -0.653096 Tw (instances of existing classes. For example, a push button with a string label is)' -1.49966 Tw (created using a button, label, and two bevel objects.)' 10.668 -14.6398 Td -1.23775 Tw (InterViews provides a base widget kit class for creating common user interface)Tj -10.668 -13.7398 Td -1.07563 Tw (objects. Subclasses are provided for implementing concrete objects based on the)Tj -1.49934 Tw (Motif \(default\) and OpenLook user interfaces.)' 10.668 -14.6398 Td -0.930861 Tw (WidgetKit::instance is a static member function that returns a default kit. If a)Tj -10.668 -13.7402 Td -0.920916 Tw (kit has not yet been created, WidgetKit::instance creates one using the session's)Tj -1.49962 Tw (style to determine which kit subclass to construct.)' /R35743448 18 Tf 41.2801 TL (9.1)' 35 0 Td -2.24887 Tw (Style management)Tj /R35493912 12 Tf -35 -32.4 Td -0.752021 Tw (WidgetKit maintains a current style for use in customizing widgets. The initial)Tj 13.7398 TL -1.30729 Tw (style is the root style for all windows. WidgetKit defines the operations shown in)' -1.49968 Tw (Figure 9.1 for querying and modifying the style.)' 10.668 -14.6398 Td -1.28195 Tw (WidgetKit::style sets or gets the current style. When the style is set or changed)Tj -10.668 -13.7398 Td -1.05354 Tw (via a Style::attribute call, WidgetKit::style_changed is called to allow WidgetKit)Tj -0.429805 Tw (subclasses to recompute information associated with the current style \(such as)' -1.49927 Tw (colors for shading\).)' 10.668 -14.6402 Td -0.397404 Tw (WidgetKit::begin_style sets the current style to a newly-created style that is)Tj -10.668 -13.7398 Td -0.0733239 Tw (a child of the current style. The given string is the name of the new style.)Tj 0.108408 Tw (WidgetKit::alias adds an alias name for the current style. Widget::end_style)' 0.000149727 Tc 378.8 -192.5 Td (9-)Tj 0 Tc 12.9961 0 Td (1)Tj ET Q 1062.9 2445.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 127.626 227.96 Tm -1.3882 Tw (void style\(Style*\);)Tj 11.5203 TL -1.38864 Tw (Style* style\(\) const;)' -1.38819 Tw (void begin_style\(const String&\), end_style\(\);)' -1.38838 Tw (void alias\(const String&\);)' -1.38805 Tw (void push_style\(\), pop_style\(\);)' -1.38739 Tw (void style_changed\(Style*\);)' -1.38873 Tw (const Font* font\(\) const;)' -1.38849 Tw (const Color* foreground\(\) const;)' -1.3886 Tw (const Color* background\(\) const;)' 56.3398 -16.5199 Td -1.38843 Tw (Figure 9.1:)Tj 56.1301 0 Td -1.3887 Tw (WidgetKit operations for style management)Tj ET Q 1062.9 1111.1 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 9)Tj 0.000130547 Tc 36.9602 TL (WidgetKit)' 0 Tc /R18360344 12 Tf 28.3199 TL -0.760898 Tw (WidgetKit defines operations for creating user interface objects with a concrete)' 13.7402 TL 0.242113 Tw (look-and-feel. Typically, an application uses a widget kit to create specific)' -0.647739 Tw (components, such as pulldown menus, push buttons, and scrollbars. WidgetKit)' -0.996715 Tw (isolates the application from specific look-and-feel issues and the details of how)' 0.179071 Tw (a concrete component is implemented. Many components are defined using)' -0.653096 Tw (instances of existing classes. For example, a push button with a string label is)' -1.49966 Tw (created using a button, label, and two bevel objects.)' 10.668 -14.6398 Td -1.23775 Tw (InterViews provides a base widget kit class for creating common user interface)Tj -10.668 -13.7398 Td -1.07563 Tw (objects. Subclasses are provided for implementing concrete objects based on the)Tj -1.49934 Tw (Motif \(default\) and OpenLook user interfaces.)' 10.668 -14.6398 Td -0.930861 Tw (WidgetKit::instance is a static member function that returns a default kit. If a)Tj -10.668 -13.7402 Td -0.920916 Tw (kit has not yet been created, WidgetKit::instance creates one using the session's)Tj -1.49962 Tw (style to determine which kit subclass to construct.)' /R18609880 18 Tf 41.2801 TL (9.1)' 35 0 Td -2.24887 Tw (Style management)Tj /R18360344 12 Tf -35 -32.4 Td -0.752021 Tw (WidgetKit maintains a current style for use in customizing widgets. The initial)Tj 13.7398 TL -1.30729 Tw (style is the root style for all windows. WidgetKit defines the operations shown in)' -1.49968 Tw (Figure 9.1 for querying and modifying the style.)' 10.668 -14.6398 Td -1.28195 Tw (WidgetKit::style sets or gets the current style. When the style is set or changed)Tj -10.668 -13.7398 Td -1.05354 Tw (via a Style::attribute call, WidgetKit::style_changed is called to allow WidgetKit)Tj -0.429805 Tw (subclasses to recompute information associated with the current style \(such as)' -1.49927 Tw (colors for shading\).)' 10.668 -14.6402 Td -0.397404 Tw (WidgetKit::begin_style sets the current style to a newly-created style that is)Tj -10.668 -13.7398 Td -0.0733239 Tw (a child of the current style. The given string is the name of the new style.)Tj 0.108408 Tw (WidgetKit::alias adds an alias name for the current style. Widget::end_style)' 0.000149727 Tc 378.8 -192.5 Td (9-)Tj 0 Tc 12.9961 0 Td (1)Tj ET Q 1062.9 2445.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 127.626 227.96 Tm -1.3882 Tw (void style\(Style*\);)Tj 11.5203 TL -1.38864 Tw (Style* style\(\) const;)' -1.38819 Tw (void begin_style\(const String&\), end_style\(\);)' -1.38838 Tw (void alias\(const String&\);)' -1.38805 Tw (void push_style\(\), pop_style\(\);)' -1.38739 Tw (void style_changed\(Style*\);)' -1.38873 Tw (const Font* font\(\) const;)' -1.38849 Tw (const Color* foreground\(\) const;)' -1.3886 Tw (const Color* background\(\) const;)' 56.3398 -16.5199 Td -1.38843 Tw (Figure 9.1:)Tj 56.1301 0 Td -1.3887 Tw (WidgetKit operations for style management)Tj ET Q 1062.9 1111.1 3960 10 re f* Q \n \n \n \n \n-1482\n+1480\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -3198,29 +3198,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 561.11 Tm -1.09465 Tw (returns the current style to what it was before the call to WidgetKit::begin_style.)Tj 13.7402 TL -1.49967 Tw (WidgetKit::push_style and pop_style save and restore the current style on a stack.)' 10.668 -14.6398 Td 2.78359 Tw (WidgetKit::font, foreground, and background return specific attribute)Tj -10.668 -13.7402 Td -0.0916298 Tw (information for the current style. These operations are equivalent to \(though)Tj 0.113298 Tw (potentially faster than\) finding the string value of a style attribute and then)' -0.592409 Tw (looking up the resource with the given name. For example, WidgetKit::font is)' -0.63724 Tw (the same as finding the attribute named ªfontº and calling Font::lookup on the)' -1.4988 Tw (attribute's value.)' /R35743448 18 Tf 41.2801 TL (9.2)' 35 0 Td -2.24906 Tw (Common cursors)Tj /R35493912 12 Tf -35 -32.4 Td -0.848936 Tw (WidgetKit provides operations to retrieve commonly-used cursors that might be)Tj 13.7398 TL -1.39916 Tw (shared among several widgets. Figure 9.2 shows the currently-defined operations.)' -0.546622 Tw (WidgetKit::hand_cursor is the outline of a small hand. WidgetKit::lfast_cursor)' -0.383294 Tw (is a double-arrow pointing to the left that is typically used in continuous rate)' -1.44131 Tw (scrolling. Similarly, the other ªfastº cursors are double-arrows pointing in various)' 0.00009537 Tc (directions.)' 0 Tc /R35743448 18 Tf 41.2801 TL (9.3)' 0.000115077 Tc 35 0 Td (Bevels)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -1.49815 Tw (On color displays, it is often desirable to frame objects with a beveled look to give)Tj 13.7398 TL -0.884152 Tw (a 3D appearance. WidgetKit provides the following three functions for creating)' -1.49873 Tw (beveled frames:)' 10.668 -19.4398 Td -1.4989 Tw (Glyph* inset_frame\(Glyph*\) const;)Tj 13.4398 TL -1.49915 Tw (Glyph* outset_frame\(Glyph*\) const;)' -1.49904 Tw (Glyph* bright_inset_frame\(Glyph*\) const;)' -10.668 -19.4398 Td 0.102324 Tw (WidgetKit:inset_frame uses dark shading in the upper left and light shading)Tj 13.7402 TL -0.0322821 Tw (in the lower right to make the contents of the frame appear to be recessed.)' -0.0328996 Tw (WidgetKit::outset_frame reverses the shading to make the contents appear to)' -0.628619 Tw (project out of the frame. WidgetKit::bright_inset_frame is like inset_frame but)' -1.49964 Tw (uses a brighter background color and is thinner.)' 0.000149727 Tc 378.8 -23.7098 Td (9-)Tj 0 Tc 12.9961 0 Td (2)Tj ET Q 1072.5 7158.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 128.586 699.32 Tm -1.38836 Tw (Cursor* hand_cursor\(\) const;)Tj 11.5199 TL -1.38811 Tw (Cursor* lfast_cursor\(\) const;)' -1.38805 Tw (Cursor* lufast_cursor\(\) const;)' -1.38832 Tw (Cursor* ufast_cursor\(\) const;)' -1.38824 Tw (Cursor* rufast_cursor\(\) const;)' -1.38805 Tw (Cursor* rfast_cursor\(\) const;)' -1.38824 Tw (Cursor* rdfast_cursor\(\) const;)' -1.38832 Tw (Cursor* dfast_cursor\(\) const;)' -1.38805 Tw (Cursor* ldfast_cursor\(\) const;)' 112.76 -16.5203 Td -1.38848 Tw (Figure 9.2:)Tj 56.1301 0 Td -1.38828 Tw (WidgetKit cursors)Tj ET Q 1072.5 5824.7 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 561.11 Tm -1.09465 Tw (returns the current style to what it was before the call to WidgetKit::begin_style.)Tj 13.7402 TL -1.49967 Tw (WidgetKit::push_style and pop_style save and restore the current style on a stack.)' 10.668 -14.6398 Td 2.78359 Tw (WidgetKit::font, foreground, and background return specific attribute)Tj -10.668 -13.7402 Td -0.0916298 Tw (information for the current style. These operations are equivalent to \(though)Tj 0.113298 Tw (potentially faster than\) finding the string value of a style attribute and then)' -0.592409 Tw (looking up the resource with the given name. For example, WidgetKit::font is)' -0.63724 Tw (the same as finding the attribute named ªfontº and calling Font::lookup on the)' -1.4988 Tw (attribute's value.)' /R18609880 18 Tf 41.2801 TL (9.2)' 35 0 Td -2.24906 Tw (Common cursors)Tj /R18360344 12 Tf -35 -32.4 Td -0.848936 Tw (WidgetKit provides operations to retrieve commonly-used cursors that might be)Tj 13.7398 TL -1.39916 Tw (shared among several widgets. Figure 9.2 shows the currently-defined operations.)' -0.546622 Tw (WidgetKit::hand_cursor is the outline of a small hand. WidgetKit::lfast_cursor)' -0.383294 Tw (is a double-arrow pointing to the left that is typically used in continuous rate)' -1.44131 Tw (scrolling. Similarly, the other ªfastº cursors are double-arrows pointing in various)' 0.00009537 Tc (directions.)' 0 Tc /R18609880 18 Tf 41.2801 TL (9.3)' 0.000115077 Tc 35 0 Td (Bevels)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -1.49815 Tw (On color displays, it is often desirable to frame objects with a beveled look to give)Tj 13.7398 TL -0.884152 Tw (a 3D appearance. WidgetKit provides the following three functions for creating)' -1.49873 Tw (beveled frames:)' 10.668 -19.4398 Td -1.4989 Tw (Glyph* inset_frame\(Glyph*\) const;)Tj 13.4398 TL -1.49915 Tw (Glyph* outset_frame\(Glyph*\) const;)' -1.49904 Tw (Glyph* bright_inset_frame\(Glyph*\) const;)' -10.668 -19.4398 Td 0.102324 Tw (WidgetKit:inset_frame uses dark shading in the upper left and light shading)Tj 13.7402 TL -0.0322821 Tw (in the lower right to make the contents of the frame appear to be recessed.)' -0.0328996 Tw (WidgetKit::outset_frame reverses the shading to make the contents appear to)' -0.628619 Tw (project out of the frame. WidgetKit::bright_inset_frame is like inset_frame but)' -1.49964 Tw (uses a brighter background color and is thinner.)' 0.000149727 Tc 378.8 -23.7098 Td (9-)Tj 0 Tc 12.9961 0 Td (2)Tj ET Q 1072.5 7158.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 128.586 699.32 Tm -1.38836 Tw (Cursor* hand_cursor\(\) const;)Tj 11.5199 TL -1.38811 Tw (Cursor* lfast_cursor\(\) const;)' -1.38805 Tw (Cursor* lufast_cursor\(\) const;)' -1.38832 Tw (Cursor* ufast_cursor\(\) const;)' -1.38824 Tw (Cursor* rufast_cursor\(\) const;)' -1.38805 Tw (Cursor* rfast_cursor\(\) const;)' -1.38824 Tw (Cursor* rdfast_cursor\(\) const;)' -1.38832 Tw (Cursor* dfast_cursor\(\) const;)' -1.38805 Tw (Cursor* ldfast_cursor\(\) const;)' 112.76 -16.5203 Td -1.38848 Tw (Figure 9.2:)Tj 56.1301 0 Td -1.38828 Tw (WidgetKit cursors)Tj ET Q 1072.5 5824.7 3960 10 re f* Q \n \n \n \n \n-1383\n+1384\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -3257,29 +3257,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 18 Tf 1 0 0 1 106.05 704.46 Tm (9.4)Tj 0.000111898 Tc 35 0 Td (Labels)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.274084 Tw (A label is a string of text with the current style's font and color. WidgetKit)Tj 13.7402 TL -1.49944 Tw (provides two operations for creating labels:)' 21.3359 -19.4398 Td -1.49929 Tw (Glyph* label\(const char*\) const;)Tj 13.4402 TL -1.49933 Tw (Glyph* label\(const String&\) const;)' /R35743448 18 Tf -21.3359 -41.2797 Td (9.5)Tj 0.000152043 Tc 35 0 Td (Buttons)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.677284 Tw (A button is an input handler that can perform an action when pressed. Buttons)Tj 13.7402 TL -0.701447 Tw (manipulate a )' /R36187064 12 Tf 67.8488 0 Td -0.701315 Tw (telltale state)Tj /R35493912 12 Tf 60.6 0 Td -0.701496 Tw ( object so that views \(which are typically part of the)Tj -128.449 -13.7398 Td -1.30814 Tw (button's body\) can reflect the current state visually. The button itself is a view so)Tj -1.49549 Tw (that it can damage the canvas when appropriate, freeing other views from the need)' -1.49943 Tw (to store update information.)' 10.668 -14.6398 Td -1.22993 Tw (A telltale state can be part of a )Tj /R36187064 12 Tf 153.609 0 Td -1.22956 Tw (telltale group)Tj /R35493912 12 Tf 65.5441 0 Td -1.23002 Tw (. When one member of a group is)Tj -229.821 -13.7402 Td -0.55106 Tw (chosen, then the currently chosen state becomes unchosen. Telltale groups are)Tj -1.49951 Tw (useful for implementing radio buttons.)' 10.668 -14.6402 Td 0.867889 Tw (Figure 9.3 shows the button, telltale state, and telltale group protocols.)Tj -10.668 -13.7398 Td -0.891477 Tw (Button just provides operations to access the associated telltale state and action.)Tj -0.981963 Tw (TelltaleState defines a set of flags that define the current state. TelltaleState::set)' 2.04575 Tw (and TelltaleState::test modify and query the current state, respectively.)' -0.954906 Tw (TelltaleState::join and TelltaleState::leave_group allow the state to be associated)' -1.49955 Tw (with a group.)' 10.668 -14.6398 Td -0.539176 Tw (Figure 9.4 shows the WidgetKit operations that return buttons. Push button,)Tj -10.668 -13.7398 Td -0.938247 Tw (default button, and palette button typically have a similar appearance. Neither a)Tj -0.813281 Tw (push button or a default button can be chosen, whereas a palette button can. A)' -0.973424 Tw (default button might have a different appearance to indicate to the user that it is)' -1.49936 Tw (the common choice.)' 10.668 -14.6398 Td -1.42059 Tw (A check box is a toggle button: choosing it when already chosen will cause it to)Tj -10.668 -13.7398 Td -0.937124 Tw (become unchosen. A radio button must belong to a telltale group so that within)Tj -1.49975 Tw (the group only one button is chosen at any given time.)' 10.668 -14.6398 Td -1.46577 Tw (For application-specific actions, it is necessary to define action callbacks for the)Tj -10.668 -13.7402 Td -1.52134 Tw (relevant application classes. In the case of quitting the application WidgetKit::quit)Tj -1.49968 Tw (can be used to return an action that calls Session::quit.)' /R35743448 18 Tf 41.2801 TL (9.6)' 0.000165558 Tc 35 0 Td (Menus)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -1.37514 Tw (A menu is similar to a group of related buttons, called menu items. Like a button,)Tj 13.7398 TL -0.549704 Tw (the look of a menu item is dependant on a telltalestate. Menu items can have)' -0.770094 Tw (associated actions that are executed when the item is chosen. Menus items can)' -1.49696 Tw (also have associated nested menus, in which case the submenu is opened when the)' 0.000149727 Tc 378.8 -26.5398 Td (9-)Tj 0 Tc 12.9961 0 Td (3)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 18 Tf 1 0 0 1 106.05 704.46 Tm (9.4)Tj 0.000111898 Tc 35 0 Td (Labels)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.274084 Tw (A label is a string of text with the current style's font and color. WidgetKit)Tj 13.7402 TL -1.49944 Tw (provides two operations for creating labels:)' 21.3359 -19.4398 Td -1.49929 Tw (Glyph* label\(const char*\) const;)Tj 13.4402 TL -1.49933 Tw (Glyph* label\(const String&\) const;)' /R18609880 18 Tf -21.3359 -41.2797 Td (9.5)Tj 0.000152043 Tc 35 0 Td (Buttons)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.677284 Tw (A button is an input handler that can perform an action when pressed. Buttons)Tj 13.7402 TL -0.701447 Tw (manipulate a )' /R19053496 12 Tf 67.8488 0 Td -0.701315 Tw (telltale state)Tj /R18360344 12 Tf 60.6 0 Td -0.701496 Tw ( object so that views \(which are typically part of the)Tj -128.449 -13.7398 Td -1.30814 Tw (button's body\) can reflect the current state visually. The button itself is a view so)Tj -1.49549 Tw (that it can damage the canvas when appropriate, freeing other views from the need)' -1.49943 Tw (to store update information.)' 10.668 -14.6398 Td -1.22993 Tw (A telltale state can be part of a )Tj /R19053496 12 Tf 153.609 0 Td -1.22956 Tw (telltale group)Tj /R18360344 12 Tf 65.5441 0 Td -1.23002 Tw (. When one member of a group is)Tj -229.821 -13.7402 Td -0.55106 Tw (chosen, then the currently chosen state becomes unchosen. Telltale groups are)Tj -1.49951 Tw (useful for implementing radio buttons.)' 10.668 -14.6402 Td 0.867889 Tw (Figure 9.3 shows the button, telltale state, and telltale group protocols.)Tj -10.668 -13.7398 Td -0.891477 Tw (Button just provides operations to access the associated telltale state and action.)Tj -0.981963 Tw (TelltaleState defines a set of flags that define the current state. TelltaleState::set)' 2.04575 Tw (and TelltaleState::test modify and query the current state, respectively.)' -0.954906 Tw (TelltaleState::join and TelltaleState::leave_group allow the state to be associated)' -1.49955 Tw (with a group.)' 10.668 -14.6398 Td -0.539176 Tw (Figure 9.4 shows the WidgetKit operations that return buttons. Push button,)Tj -10.668 -13.7398 Td -0.938247 Tw (default button, and palette button typically have a similar appearance. Neither a)Tj -0.813281 Tw (push button or a default button can be chosen, whereas a palette button can. A)' -0.973424 Tw (default button might have a different appearance to indicate to the user that it is)' -1.49936 Tw (the common choice.)' 10.668 -14.6398 Td -1.42059 Tw (A check box is a toggle button: choosing it when already chosen will cause it to)Tj -10.668 -13.7398 Td -0.937124 Tw (become unchosen. A radio button must belong to a telltale group so that within)Tj -1.49975 Tw (the group only one button is chosen at any given time.)' 10.668 -14.6398 Td -1.46577 Tw (For application-specific actions, it is necessary to define action callbacks for the)Tj -10.668 -13.7402 Td -1.52134 Tw (relevant application classes. In the case of quitting the application WidgetKit::quit)Tj -1.49968 Tw (can be used to return an action that calls Session::quit.)' /R18609880 18 Tf 41.2801 TL (9.6)' 0.000165558 Tc 35 0 Td (Menus)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -1.37514 Tw (A menu is similar to a group of related buttons, called menu items. Like a button,)Tj 13.7398 TL -0.549704 Tw (the look of a menu item is dependant on a telltalestate. Menu items can have)' -0.770094 Tw (associated actions that are executed when the item is chosen. Menus items can)' -1.49696 Tw (also have associated nested menus, in which case the submenu is opened when the)' 0.000149727 Tc 378.8 -26.5398 Td (9-)Tj 0 Tc 12.9961 0 Td (3)Tj ET Q Q \n \n \n \n \n-1652\n+1650\n \n \n \n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -3316,27 +3316,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 297.27 Tm -0.554769 Tw (item is highlighted. Figure 9.5 shows the WidgetKit menu operations and the)Tj 13.7398 TL -1.49961 Tw (menu item and menu protocols.)' 10.668 -14.6402 Td -0.663811 Tw (WidgetKit::menubar creates a horizontal menu with a small amount of white)Tj -10.668 -13.7398 Td 1.08059 Tw (space between items. WidgetKit::pulldown and WidgetKit::pullright create)Tj -1.1816 Tw (vertical menus. The top of a pulldown menu will be aligned to the bottom of the)' -1.05877 Tw (menubar, while a pullright's top will be aligned to the top right of its containing)' 0.00009041 Tc (item.)' 0 Tc 10.668 -14.6402 Td -0.412722 Tw (WidgetKit::menubar_item creates an item centered horizontally with a small)Tj -10.668 -13.7398 Td -1.55158 Tw (amount of white space on each side. WidgetKit::menu_item creates a left-adjusted)Tj -0.947012 Tw (item, WidgetKit::check_menu_item creates a toggle item that looks like a check)' -0.593956 Tw (box when chosen. WidgetKit::radio_menu_item creates an item that looks like)' 0.120428 Tw (a radio button. WidgetKit::menu_item_separator returns an item for visually)' -1.49956 Tw (separating other items \(such as a horizontal line\).)' 0.000149727 Tc 378.8 -54.5297 Td (9-)Tj 0 Tc 12.9961 0 Td (4)Tj ET Q 1062.9 6794 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 127.626 662.84 Tm -1.3888 Tw (interface Button : ActiveHandler, Observer {)Tj 8.32969 -11.5199 Td -1.38825 Tw (Button\(Glyph*, Style*, TelltaleState*, Action*\);)Tj 11.5199 TL -1.38803 Tw (TelltaleState* state\(\) const;)' -1.38846 Tw (Action* action\(\) const;)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 16.5203 TL -1.38848 Tw (typedef unsigned int TelltaleFlags;)' -1.38873 Tw (interface TelltaleState : Resource, Observable {)' 8.32969 -11.5199 Td -1.38835 Tw (TelltaleState\(const TelltaleFlags = 0\);)Tj 11.5199 TL -1.3889 Tw (enum {)' 8.33008 -11.5199 Td -1.38829 Tw (is_enabled, is_visible, is_enabled_visible, is_active, is_enabled_active,)Tj -1.38779 Tw (is_visible_active, is_enabled_visible_active, is_chosen, is_enabled_chosen,)' -1.38632 Tw (is_visible_chosen, is_enabled_visible_chosen,)' -1.38617 Tw (is_enabled_active_chosen, is_active_chosen,)' -1.38524 Tw (is_visible_active_chosen, is_enabled_visible_active_chosen,)' -1.38812 Tw (is_running, is_choosable, is_toggle,)' 0.000182258 Tc (max_flags)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38823 Tw (TelltaleFlags flags\(\) const;)' 11.5199 TL -1.38837 Tw (void set\(const TelltaleFlags, boolean\);)' -1.38834 Tw (boolean test\(const TelltaleFlags\) const;)' -1.38715 Tw (void join\(TelltaleGroup*\);)' -1.38781 Tw (void leave_group\(\);)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38874 Tw (interface TelltaleGroup : Resource {)' 8.32969 -11.5199 Td -1.38679 Tw (void update\(TelltaleState*\);)Tj 11.5203 TL -1.38688 Tw (void remove\(TelltaleState*\);)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 41.3246 -16.5199 Td -1.38843 Tw (Figure 9.3:)Tj 56.1301 0 Td -1.38842 Tw (Button, TelltaleState, and TelltaleGroup protocols.)Tj ET Q 1062.9 3186.3 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 297.27 Tm -0.554769 Tw (item is highlighted. Figure 9.5 shows the WidgetKit menu operations and the)Tj 13.7398 TL -1.49961 Tw (menu item and menu protocols.)' 10.668 -14.6402 Td -0.663811 Tw (WidgetKit::menubar creates a horizontal menu with a small amount of white)Tj -10.668 -13.7398 Td 1.08059 Tw (space between items. WidgetKit::pulldown and WidgetKit::pullright create)Tj -1.1816 Tw (vertical menus. The top of a pulldown menu will be aligned to the bottom of the)' -1.05877 Tw (menubar, while a pullright's top will be aligned to the top right of its containing)' 0.00009041 Tc (item.)' 0 Tc 10.668 -14.6402 Td -0.412722 Tw (WidgetKit::menubar_item creates an item centered horizontally with a small)Tj -10.668 -13.7398 Td -1.55158 Tw (amount of white space on each side. WidgetKit::menu_item creates a left-adjusted)Tj -0.947012 Tw (item, WidgetKit::check_menu_item creates a toggle item that looks like a check)' -0.593956 Tw (box when chosen. WidgetKit::radio_menu_item creates an item that looks like)' 0.120428 Tw (a radio button. WidgetKit::menu_item_separator returns an item for visually)' -1.49956 Tw (separating other items \(such as a horizontal line\).)' 0.000149727 Tc 378.8 -54.5297 Td (9-)Tj 0 Tc 12.9961 0 Td (4)Tj ET Q 1062.9 6794 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 127.626 662.84 Tm -1.3888 Tw (interface Button : ActiveHandler, Observer {)Tj 8.32969 -11.5199 Td -1.38825 Tw (Button\(Glyph*, Style*, TelltaleState*, Action*\);)Tj 11.5199 TL -1.38803 Tw (TelltaleState* state\(\) const;)' -1.38846 Tw (Action* action\(\) const;)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 16.5203 TL -1.38848 Tw (typedef unsigned int TelltaleFlags;)' -1.38873 Tw (interface TelltaleState : Resource, Observable {)' 8.32969 -11.5199 Td -1.38835 Tw (TelltaleState\(const TelltaleFlags = 0\);)Tj 11.5199 TL -1.3889 Tw (enum {)' 8.33008 -11.5199 Td -1.38829 Tw (is_enabled, is_visible, is_enabled_visible, is_active, is_enabled_active,)Tj -1.38779 Tw (is_visible_active, is_enabled_visible_active, is_chosen, is_enabled_chosen,)' -1.38632 Tw (is_visible_chosen, is_enabled_visible_chosen,)' -1.38617 Tw (is_enabled_active_chosen, is_active_chosen,)' -1.38524 Tw (is_visible_active_chosen, is_enabled_visible_active_chosen,)' -1.38812 Tw (is_running, is_choosable, is_toggle,)' 0.000182258 Tc (max_flags)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38823 Tw (TelltaleFlags flags\(\) const;)' 11.5199 TL -1.38837 Tw (void set\(const TelltaleFlags, boolean\);)' -1.38834 Tw (boolean test\(const TelltaleFlags\) const;)' -1.38715 Tw (void join\(TelltaleGroup*\);)' -1.38781 Tw (void leave_group\(\);)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38874 Tw (interface TelltaleGroup : Resource {)' 8.32969 -11.5199 Td -1.38679 Tw (void update\(TelltaleState*\);)Tj 11.5203 TL -1.38688 Tw (void remove\(TelltaleState*\);)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 41.3246 -16.5199 Td -1.38843 Tw (Figure 9.3:)Tj 56.1301 0 Td -1.38842 Tw (Button, TelltaleState, and TelltaleGroup protocols.)Tj ET Q 1062.9 3186.3 3960 10 re f* Q \n \n \n \n \n 1264\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -3373,29 +3373,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 18 Tf 1 0 0 1 106.05 489.11 Tm (9.7)Tj 0.000185649 Tc 35 0 Td (Adjusters)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -1.29943 Tw (Scrollbars and mover buttons are examples of interactive objects that ªadjustº the)Tj 13.7402 TL 0.0340024 Tw (view shown by another object. WidgetKit provides the operations shown in)' -1.49953 Tw (Figure 9.6 to create common adjusters.)' 10.668 -14.6402 Td -1.16231 Tw (WidgetKit::hscroll_bar and WidgetKit::vscroll_bar return controls for scrolling)Tj -10.668 -13.7398 Td -1.27726 Tw (a view in the horizontal and vertical dimensions, respectively. WidgetKit::panner)Tj -1.54383 Tw (returns a control for scrolling two adjustables at once. One adjustable is controlled)' -0.958313 Tw (by the horizontal position of the panner, one by the vertical position. Typically,)' -1.49961 Tw (the same adjustable is passed to both parameters when creating a panners.)' 0.000149727 Tc 378.8 -283.57 Td (9-)Tj 0 Tc 12.9961 0 Td (5)Tj ET Q 1082.1 7168.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 129.546 700.28 Tm -1.3884 Tw (Button* push_button\(const String&, Action*\) const;)Tj 11.5199 TL -1.38815 Tw (Button* push_button\(Glyph*, Action*\) const;)' -1.38828 Tw (Button* default_button\(const String&, Action*\) const;)' -1.388 Tw (Button* default_button\(Glyph*, Action*\) const;)' -1.38828 Tw (Button* palette_button\(const String&, Action*\) const;)' -1.388 Tw (Button* palette_button\(Glyph*, Action*\) const;)' -1.38857 Tw (Button* check_box\(const String&, Action*\) const;)' -1.38856 Tw (Button* check_box\(Glyph*, Action*\) const;)' -1.38839 Tw (Button* radio_button\(TelltaleGroup*, const String&, Action*\) const;)' 23.0398 TL -1.388 Tw (Glyph* push_button_look\(Glyph*, TelltaleState*\) const;)' 11.5199 TL -1.38784 Tw (Glyph* default_button_look\(Glyph*, TelltaleState*\) const;)' (Glyph* palette_button_look\(Glyph*, TelltaleState*\) const;)' -1.38822 Tw (Glyph* check_box_look\(Glyph*, TelltaleState*\) const;)' -1.38793 Tw (Glyph* radio_button_look\(Glyph*, TelltaleState*\) const;)' 90.5148 -16.5199 Td -1.38848 Tw (Figure 9.4:)Tj 56.1301 0 Td -1.38834 Tw (WidgetKit button operations)Tj ET Q 1082.1 5143.1 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 18 Tf 1 0 0 1 106.05 489.11 Tm (9.7)Tj 0.000185649 Tc 35 0 Td (Adjusters)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -1.29943 Tw (Scrollbars and mover buttons are examples of interactive objects that ªadjustº the)Tj 13.7402 TL 0.0340024 Tw (view shown by another object. WidgetKit provides the operations shown in)' -1.49953 Tw (Figure 9.6 to create common adjusters.)' 10.668 -14.6402 Td -1.16231 Tw (WidgetKit::hscroll_bar and WidgetKit::vscroll_bar return controls for scrolling)Tj -10.668 -13.7398 Td -1.27726 Tw (a view in the horizontal and vertical dimensions, respectively. WidgetKit::panner)Tj -1.54383 Tw (returns a control for scrolling two adjustables at once. One adjustable is controlled)' -0.958313 Tw (by the horizontal position of the panner, one by the vertical position. Typically,)' -1.49961 Tw (the same adjustable is passed to both parameters when creating a panners.)' 0.000149727 Tc 378.8 -283.57 Td (9-)Tj 0 Tc 12.9961 0 Td (5)Tj ET Q 1082.1 7168.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 129.546 700.28 Tm -1.3884 Tw (Button* push_button\(const String&, Action*\) const;)Tj 11.5199 TL -1.38815 Tw (Button* push_button\(Glyph*, Action*\) const;)' -1.38828 Tw (Button* default_button\(const String&, Action*\) const;)' -1.388 Tw (Button* default_button\(Glyph*, Action*\) const;)' -1.38828 Tw (Button* palette_button\(const String&, Action*\) const;)' -1.388 Tw (Button* palette_button\(Glyph*, Action*\) const;)' -1.38857 Tw (Button* check_box\(const String&, Action*\) const;)' -1.38856 Tw (Button* check_box\(Glyph*, Action*\) const;)' -1.38839 Tw (Button* radio_button\(TelltaleGroup*, const String&, Action*\) const;)' 23.0398 TL -1.388 Tw (Glyph* push_button_look\(Glyph*, TelltaleState*\) const;)' 11.5199 TL -1.38784 Tw (Glyph* default_button_look\(Glyph*, TelltaleState*\) const;)' (Glyph* palette_button_look\(Glyph*, TelltaleState*\) const;)' -1.38822 Tw (Glyph* check_box_look\(Glyph*, TelltaleState*\) const;)' -1.38793 Tw (Glyph* radio_button_look\(Glyph*, TelltaleState*\) const;)' 90.5148 -16.5199 Td -1.38848 Tw (Figure 9.4:)Tj 56.1301 0 Td -1.38834 Tw (WidgetKit button operations)Tj ET Q 1082.1 5143.1 3960 10 re f* Q \n \n \n \n \n-902\n+901\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -3432,27 +3432,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT 0.000149727 Tc /R35493912 12 Tf 1 0 0 1 484.85 76.0602 Tm (9-)Tj 0 Tc 12.9961 0 Td (6)Tj ET Q 1043.7 6909.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 125.706 674.36 Tm -1.3889 Tw (Menu* menubar\(\) const, * pulldown\(\) const, * pullright\(\) const;)Tj 11.5203 TL -1.38801 Tw (MenuItem* menubar_item\(const String&\) const;)' -1.3877 Tw (MenuItem* menubar_item\(Glyph*\) const;)' -1.38814 Tw (MenuItem* menu_item\(const String&\) const;)' -1.38789 Tw (MenuItem* menu_item\(Glyph*\) const;)' -1.38819 Tw (MenuItem* check_menu_item\(const String&\) const;)' -1.38772 Tw (MenuItem* check_menu_item\(Glyph*\) const;)' -1.38773 Tw (MenuItem* radio_menu_item\(TelltaleGroup*, Glyph*\) const;)' -1.38756 Tw (MenuItem* menu_item_separator\(\) const;)' 16.5199 TL -1.38857 Tw (Glyph* menubar_look\(\) const, pulldown_look\(\) const, pullright_look\(\) const;)' 11.5199 TL -1.38793 Tw (Glyph* menubar_item_look\(Glyph*, TelltaleState*\) const;)' -1.38806 Tw (Glyph* menu_item_look\(Glyph*, TelltaleState*\) const;)' -1.38794 Tw (Glyph* check_menu_item_look\(Glyph*, TelltaleState*\) const;)' -1.3883 Tw (Glyph* radio_menu_item _look\(Glyph*, TelltaleState*\) const;)' -1.3877 Tw (Glyph* menu_item_separator_look\(\) const;)' 21.5199 TL -1.38879 Tw (interface MenuItem : Observer {)' 8.32969 -11.5203 Td -1.38611 Tw (MenuItem\(Glyph*, TelltaleState*\);)Tj 11.5199 TL -1.3886 Tw (Glyph* body\(\) const;)' -1.38806 Tw (TelltaleState* state\(\) const;)' -1.3879 Tw (void action\(Action*\);)' -1.38849 Tw (Action* action\(\) const;)' -1.38886 Tw (void menu\(Menu*, Window* = nil\);)' -1.38849 Tw (Menu* menu\(\) const;)' -1.3885 Tw (Window* window\(\) const;)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.3888 Tw (interface Menu : InputHandler {)' 8.32969 -11.5203 Td -1.38903 Tw (Menu\(Glyph*, Style*, float x1, float y1, float x2, float y2\);)Tj 11.5199 TL -1.38654 Tw (void append_item\(MenuItem*\);)' -1.38638 Tw (void prepend_item\(MenuItem*\);)' -1.38762 Tw (void insert_item\(GlyphIndex, MenuItem*\);)' -1.38681 Tw (void remove_item\(GlyphIndex\);)' -1.38758 Tw (void replace_item\(GlyphIndex, MenuItem*\);)' -1.38802 Tw (GlyphIndex item_count\(\) const;)' -1.388 Tw (MenuItem* item\(GlyphIndex\) const;)' -1.38763 Tw (void select\(GlyphIndex\);)' -1.38823 Tw (GlyphIndex selected\(\) const;)' 0.000233889 Tc -8.32969 -11.5203 Td (};)Tj 0 Tc 17.7098 -16.5199 Td -1.38848 Tw (Figure 9.5:)Tj 56.1301 0 Td -1.38889 Tw (WidgetKit menu operations, menu, and menu item protocols.)Tj ET Q 1043.7 2149.5 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT 0.000149727 Tc /R18360344 12 Tf 1 0 0 1 484.85 76.0602 Tm (9-)Tj 0 Tc 12.9961 0 Td (6)Tj ET Q 1043.7 6909.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 125.706 674.36 Tm -1.3889 Tw (Menu* menubar\(\) const, * pulldown\(\) const, * pullright\(\) const;)Tj 11.5203 TL -1.38801 Tw (MenuItem* menubar_item\(const String&\) const;)' -1.3877 Tw (MenuItem* menubar_item\(Glyph*\) const;)' -1.38814 Tw (MenuItem* menu_item\(const String&\) const;)' -1.38789 Tw (MenuItem* menu_item\(Glyph*\) const;)' -1.38819 Tw (MenuItem* check_menu_item\(const String&\) const;)' -1.38772 Tw (MenuItem* check_menu_item\(Glyph*\) const;)' -1.38773 Tw (MenuItem* radio_menu_item\(TelltaleGroup*, Glyph*\) const;)' -1.38756 Tw (MenuItem* menu_item_separator\(\) const;)' 16.5199 TL -1.38857 Tw (Glyph* menubar_look\(\) const, pulldown_look\(\) const, pullright_look\(\) const;)' 11.5199 TL -1.38793 Tw (Glyph* menubar_item_look\(Glyph*, TelltaleState*\) const;)' -1.38806 Tw (Glyph* menu_item_look\(Glyph*, TelltaleState*\) const;)' -1.38794 Tw (Glyph* check_menu_item_look\(Glyph*, TelltaleState*\) const;)' -1.3883 Tw (Glyph* radio_menu_item _look\(Glyph*, TelltaleState*\) const;)' -1.3877 Tw (Glyph* menu_item_separator_look\(\) const;)' 21.5199 TL -1.38879 Tw (interface MenuItem : Observer {)' 8.32969 -11.5203 Td -1.38611 Tw (MenuItem\(Glyph*, TelltaleState*\);)Tj 11.5199 TL -1.3886 Tw (Glyph* body\(\) const;)' -1.38806 Tw (TelltaleState* state\(\) const;)' -1.3879 Tw (void action\(Action*\);)' -1.38849 Tw (Action* action\(\) const;)' -1.38886 Tw (void menu\(Menu*, Window* = nil\);)' -1.38849 Tw (Menu* menu\(\) const;)' -1.3885 Tw (Window* window\(\) const;)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.3888 Tw (interface Menu : InputHandler {)' 8.32969 -11.5203 Td -1.38903 Tw (Menu\(Glyph*, Style*, float x1, float y1, float x2, float y2\);)Tj 11.5199 TL -1.38654 Tw (void append_item\(MenuItem*\);)' -1.38638 Tw (void prepend_item\(MenuItem*\);)' -1.38762 Tw (void insert_item\(GlyphIndex, MenuItem*\);)' -1.38681 Tw (void remove_item\(GlyphIndex\);)' -1.38758 Tw (void replace_item\(GlyphIndex, MenuItem*\);)' -1.38802 Tw (GlyphIndex item_count\(\) const;)' -1.388 Tw (MenuItem* item\(GlyphIndex\) const;)' -1.38763 Tw (void select\(GlyphIndex\);)' -1.38823 Tw (GlyphIndex selected\(\) const;)' 0.000233889 Tc -8.32969 -11.5203 Td (};)Tj 0 Tc 17.7098 -16.5199 Td -1.38848 Tw (Figure 9.5:)Tj 56.1301 0 Td -1.38889 Tw (WidgetKit menu operations, menu, and menu item protocols.)Tj ET Q 1043.7 2149.5 3960 10 re f* Q \n \n \n \n \n-827\n+828\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -3489,27 +3489,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT 0.000149727 Tc /R35493912 12 Tf 1 0 0 1 484.85 76.0602 Tm (9-)Tj 0 Tc 12.9961 0 Td (7)Tj ET Q 1053.3 6342.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 126.666 617.72 Tm -1.38824 Tw (Glyph* hslider\(Adjustable*\) const;)Tj 11.5199 TL -1.38805 Tw (Glyph* hscroll_bar\(Adjustable*\) const;)' -1.3883 Tw (Glyph* vslider\(Adjustable*\) const;)' -1.3881 Tw (Glyph* vscroll_bar\(Adjustable*\) const;)' -1.38831 Tw (Glyph* panner\(Adjustable*, Adjustable*\) const;)' 16.5199 TL -1.38787 Tw (Stepper* enlarger\(Adjustable*\) const;)' 11.5199 TL -1.38795 Tw (Stepper* reducer\(Adjustabel*\) const;)' -1.38789 Tw (Stepper* up_mover\(Adjustable*\) const;)' -1.38781 Tw (Stepper* down_mover\(Adjustable*\) const;)' -1.38777 Tw (Stepper* left_mover\(Adjustable*\) const;)' -1.38771 Tw (Stepper* right_mover\(Adjustable*\) const;)' 16.5199 TL -1.38819 Tw (Glyph* slider_look\(DimensionName, Adjustable*\) const;)' 11.5199 TL -1.38806 Tw (Glyph* scroll_bar_look\(DimensionName, Adjustable*\) const;)' -1.38818 Tw (Glyph* panner_look\(Adjustable*, Adjustable*\) const;)' -1.38598 Tw (Glyph* enlarger_look\(TelltaleState*\);)' -1.38613 Tw (Glyph* reducer_look\(TelltaleState*\);)' -1.38602 Tw (Glyph* up_mover_look\(TelltaleState*\);)' -1.38586 Tw (Glyph* down_mover_look\(TelltaleState*\);)' -1.38578 Tw (Glyph* left_mover_look\(TelltaleState*\);)' -1.38567 Tw (Glyph* right_mover_look\(TelltaleState*\);)' 86.6301 -16.5199 Td -1.38848 Tw (Figure 9.6:)Tj 56.1301 0 Td -1.38832 Tw (WidgetKit adjuster operations)Tj ET Q 1053.3 3641.5 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT 0.000149727 Tc /R18360344 12 Tf 1 0 0 1 484.85 76.0602 Tm (9-)Tj 0 Tc 12.9961 0 Td (7)Tj ET Q 1053.3 6342.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 126.666 617.72 Tm -1.38824 Tw (Glyph* hslider\(Adjustable*\) const;)Tj 11.5199 TL -1.38805 Tw (Glyph* hscroll_bar\(Adjustable*\) const;)' -1.3883 Tw (Glyph* vslider\(Adjustable*\) const;)' -1.3881 Tw (Glyph* vscroll_bar\(Adjustable*\) const;)' -1.38831 Tw (Glyph* panner\(Adjustable*, Adjustable*\) const;)' 16.5199 TL -1.38787 Tw (Stepper* enlarger\(Adjustable*\) const;)' 11.5199 TL -1.38795 Tw (Stepper* reducer\(Adjustabel*\) const;)' -1.38789 Tw (Stepper* up_mover\(Adjustable*\) const;)' -1.38781 Tw (Stepper* down_mover\(Adjustable*\) const;)' -1.38777 Tw (Stepper* left_mover\(Adjustable*\) const;)' -1.38771 Tw (Stepper* right_mover\(Adjustable*\) const;)' 16.5199 TL -1.38819 Tw (Glyph* slider_look\(DimensionName, Adjustable*\) const;)' 11.5199 TL -1.38806 Tw (Glyph* scroll_bar_look\(DimensionName, Adjustable*\) const;)' -1.38818 Tw (Glyph* panner_look\(Adjustable*, Adjustable*\) const;)' -1.38598 Tw (Glyph* enlarger_look\(TelltaleState*\);)' -1.38613 Tw (Glyph* reducer_look\(TelltaleState*\);)' -1.38602 Tw (Glyph* up_mover_look\(TelltaleState*\);)' -1.38586 Tw (Glyph* down_mover_look\(TelltaleState*\);)' -1.38578 Tw (Glyph* left_mover_look\(TelltaleState*\);)' -1.38567 Tw (Glyph* right_mover_look\(TelltaleState*\);)' 86.6301 -16.5199 Td -1.38848 Tw (Figure 9.6:)Tj 56.1301 0 Td -1.38832 Tw (WidgetKit adjuster operations)Tj ET Q 1053.3 3641.5 3960 10 re f* Q \n \n \n \n \n 516\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -3546,27 +3546,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 10)Tj 0.000107659 Tc 36.9602 TL (DialogKit)' 0 Tc /R35493912 12 Tf 28.3199 TL 0.768583 Tw (Whereas WidgetKit provides operations for creating common look-and-feel)' 13.7402 TL 1.28034 Tw (components such as scrollbars, menus, and buttons, DialogKit is creates)' -0.428011 Tw (higher-level dialog objects. The current implementation of DialogKit provides)' 0.398543 Tw (only field editors and file choosers, but in the future this kit will provide)' -1.50526 Tw (operations for creating confirmers, quit dialogs, and information messages. Figure)' -1.49962 Tw (10.1 shows the operations provided by DialogKit.)' /R35743448 18 Tf 41.2801 TL (10.1)' 35 0 Td -2.24907 Tw (Field editor)Tj /R35493912 12 Tf -35 -32.4 Td -1.49056 Tw (Many application need simple editors for entering or browsing data. A field editor)Tj 13.7398 TL -1.07831 Tw (is suitable for incorporating into other components, such as a dialog box. Figure)' -1.49954 Tw (10.2 shows the field editor class interface.)' 10.668 -14.6398 Td 1.01905 Tw (Clicking inside the editor \(or calling FieldEditor::edit\) initiates an edit.)Tj -10.668 -13.7402 Td -1.16178 Tw (Subsequent keyboard events, regardless of the pointer location, are interpreted as)Tj -1.49973 Tw (editing operations on the text. Clicking outside the editor terminates the editing.)' 10.668 -14.6398 Td -1.33135 Tw (Text is selected with the pointer or with the keyboard. A single click of the left)Tj -10.668 -13.7402 Td -1.18449 Tw (button selects a new insertion point between characters. Dragging across the text)Tj -1.18099 Tw (selects a range of characters. A set of control characters is mapped into common)' -0.0665299 Tw (editing operations. A character not specifically associated with commands is)' -0.0236486 Tw (inserted in place of the current selection, the replaced text is discarded, and)' -0.440755 Tw (the selection becomes an insertion point following the inserted character. The)' -1.49913 Tw (commands defined are:)' 21.3359 -19.4398 Td -1.49804 Tw (character-left \(^B\))Tj 13.4402 TL -1.49816 Tw (character-right \(^F\))' -1.49857 Tw (beginning-of-text \(^A\))' -1.49862 Tw (end-of-text \(^E\))' -1.49922 Tw (erase \(^H or DEL\))' -1.49874 Tw (delete \(^D\))' -1.49858 Tw (select-all \(^U\))' 0.00019989 Tc (select-word\(^W\))' 0 Tc -21.3359 -19.4398 Td -1.51631 Tw (Strings that are too long to fit into the editor can be scrolled horizontally. Clicking)Tj 13.7402 TL -1.07137 Tw (the middle button inside the editor initiates ªgrab-scrollingº. While the button is)' -0.959254 Tw (down the editor scrolls the text to follow the pointer, giving the appearance that)' -1.23762 Tw (the user is dragging the text. Clicking the right button engages ªrate-scrollingº, a)' -0.905025 Tw (joy-stick-like scrolling interface in which the scrolling rate increases as the user)' -1.4996 Tw (drags the pointer away from the initial click location.)' 10.668 -14.6402 Td -0.123227 Tw (The field editor constructor is passed a sample string, used to compute its)Tj 0.00009982 Tc 368.132 -32.9598 Td (10-)Tj 0 Tc 18.9961 0 Td (1)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 10)Tj 0.000107659 Tc 36.9602 TL (DialogKit)' 0 Tc /R18360344 12 Tf 28.3199 TL 0.768583 Tw (Whereas WidgetKit provides operations for creating common look-and-feel)' 13.7402 TL 1.28034 Tw (components such as scrollbars, menus, and buttons, DialogKit is creates)' -0.428011 Tw (higher-level dialog objects. The current implementation of DialogKit provides)' 0.398543 Tw (only field editors and file choosers, but in the future this kit will provide)' -1.50526 Tw (operations for creating confirmers, quit dialogs, and information messages. Figure)' -1.49962 Tw (10.1 shows the operations provided by DialogKit.)' /R18609880 18 Tf 41.2801 TL (10.1)' 35 0 Td -2.24907 Tw (Field editor)Tj /R18360344 12 Tf -35 -32.4 Td -1.49056 Tw (Many application need simple editors for entering or browsing data. A field editor)Tj 13.7398 TL -1.07831 Tw (is suitable for incorporating into other components, such as a dialog box. Figure)' -1.49954 Tw (10.2 shows the field editor class interface.)' 10.668 -14.6398 Td 1.01905 Tw (Clicking inside the editor \(or calling FieldEditor::edit\) initiates an edit.)Tj -10.668 -13.7402 Td -1.16178 Tw (Subsequent keyboard events, regardless of the pointer location, are interpreted as)Tj -1.49973 Tw (editing operations on the text. Clicking outside the editor terminates the editing.)' 10.668 -14.6398 Td -1.33135 Tw (Text is selected with the pointer or with the keyboard. A single click of the left)Tj -10.668 -13.7402 Td -1.18449 Tw (button selects a new insertion point between characters. Dragging across the text)Tj -1.18099 Tw (selects a range of characters. A set of control characters is mapped into common)' -0.0665299 Tw (editing operations. A character not specifically associated with commands is)' -0.0236486 Tw (inserted in place of the current selection, the replaced text is discarded, and)' -0.440755 Tw (the selection becomes an insertion point following the inserted character. The)' -1.49913 Tw (commands defined are:)' 21.3359 -19.4398 Td -1.49804 Tw (character-left \(^B\))Tj 13.4402 TL -1.49816 Tw (character-right \(^F\))' -1.49857 Tw (beginning-of-text \(^A\))' -1.49862 Tw (end-of-text \(^E\))' -1.49922 Tw (erase \(^H or DEL\))' -1.49874 Tw (delete \(^D\))' -1.49858 Tw (select-all \(^U\))' 0.00019989 Tc (select-word\(^W\))' 0 Tc -21.3359 -19.4398 Td -1.51631 Tw (Strings that are too long to fit into the editor can be scrolled horizontally. Clicking)Tj 13.7402 TL -1.07137 Tw (the middle button inside the editor initiates ªgrab-scrollingº. While the button is)' -0.959254 Tw (down the editor scrolls the text to follow the pointer, giving the appearance that)' -1.23762 Tw (the user is dragging the text. Clicking the right button engages ªrate-scrollingº, a)' -0.905025 Tw (joy-stick-like scrolling interface in which the scrolling rate increases as the user)' -1.4996 Tw (drags the pointer away from the initial click location.)' 10.668 -14.6402 Td -0.123227 Tw (The field editor constructor is passed a sample string, used to compute its)Tj 0.00009982 Tc 368.132 -32.9598 Td (10-)Tj 0 Tc 18.9961 0 Td (1)Tj ET Q Q \n \n \n \n \n 1519\n \n \n \n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -3603,27 +3603,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 560.11 Tm -0.89414 Tw (natural size, a style for customization, and a field editor action to execute when)Tj 13.7402 TL -0.0549595 Tw (editing returns. Editing normally completes when a carriage return or tab is)' -1.4994 Tw (entered; abnormally when an escape character is entered.)' 10.668 -14.6402 Td -1.43769 Tw (FieldEditor::field sets the contents of the string being edited. FieldEditor::select)Tj -10.668 -13.7398 Td 0.349442 Tw (sets the insertion point or subrange within the edit string. FieldEditor::edit)Tj -0.531047 Tw (initiates an edit. Specifying a string and selection range is short-hand for first)' 0.359737 Tw (calling FieldEditor::field and FieldEditor::select. FieldEditor::text returns the)' -0.917121 Tw (current value of the string being edited. The caller must copy the string to save)' -1.49969 Tw (the contents, as it will be modified by a subsequent edit.)' 0.00009982 Tc 378.8 -373.23 Td (10-)Tj 0 Tc 18.9961 0 Td (2)Tj ET Q 1062.9 7158.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 127.626 699.32 Tm -1.38856 Tw (interface DialogKit {)Tj 8.32969 -11.5199 Td -1.38825 Tw (static DialogKit* instance\(\);)Tj 11.5199 TL -1.38711 Tw (FieldEditor* field_editor\()' 8.33008 -11.5199 Td -1.3889 Tw (const String& sample, Style*, FieldEditorAction* = nil)Tj -8.33008 -12.5203 Td -1.38878 Tw (\) const;)Tj -1.38738 Tw (FileChooser* file_chooser\()' 8.33008 -11.5199 Td -1.38881 Tw (constString& dir, Style*, FileChooserAction* = nil)Tj -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 104.415 -16.5203 Td -1.38836 Tw (Figure 10.1:)Tj 61.6898 0 Td -1.38792 Tw (DialogKit operations)Tj ET Q 1062.9 5814.7 3960 10 re f* 1034.1 4067.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 124.746 390.2 Tm -1.38862 Tw (interface FieldEditorAction Resource {)Tj 8.33008 -11.5199 Td -1.38822 Tw (void execute\(FieldEditor*, boolean accept\);)Tj 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5203 TL -1.38839 Tw (interface FieldEditorCallback\(T\) : FieldEditorAction {)' 8.33008 -11.5199 Td -1.38801 Tw (FieldEditorCallback\(T\)\(T*, void \(T::*\)\(FieldEditor*, boolean accept\)\);)Tj 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc -1.38865 Tw (interface FieldEditor : InputHandler {)' 8.33008 -11.5199 Td -1.38876 Tw (FieldEditor\(const char* sample, Style*, FieldEditorAction* = nil\);)Tj 11.5203 TL -1.38873 Tw (FieldEditor\(const String& sample, Style*, FieldEditorAction* = nil\);)' 16.5199 TL -1.3884 Tw (void field\(const char*\);)' 11.5199 TL -1.3883 Tw (void field\(const String&\);)' -1.38858 Tw (void select\(int pos\);)' -1.38881 Tw (void select\(int left, int right\);)' -1.38832 Tw (void edit\(\);)' -1.38893 Tw (void edit\(const char*, int left, int right\);)' -1.3889 Tw (void edit\(const String&, int left, int right\);)' -1.3888 Tw (const char* text\(\) const;)' -1.38832 Tw (void text\(String&\) const;)' 0.000235796 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 89.6898 -16.5199 Td -1.38836 Tw (Figure 10.2:)Tj 61.6902 0 Td -1.38888 Tw (Field editor class interface.)Tj ET Q 1034.1 1431.5 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 560.11 Tm -0.89414 Tw (natural size, a style for customization, and a field editor action to execute when)Tj 13.7402 TL -0.0549595 Tw (editing returns. Editing normally completes when a carriage return or tab is)' -1.4994 Tw (entered; abnormally when an escape character is entered.)' 10.668 -14.6402 Td -1.43769 Tw (FieldEditor::field sets the contents of the string being edited. FieldEditor::select)Tj -10.668 -13.7398 Td 0.349442 Tw (sets the insertion point or subrange within the edit string. FieldEditor::edit)Tj -0.531047 Tw (initiates an edit. Specifying a string and selection range is short-hand for first)' 0.359737 Tw (calling FieldEditor::field and FieldEditor::select. FieldEditor::text returns the)' -0.917121 Tw (current value of the string being edited. The caller must copy the string to save)' -1.49969 Tw (the contents, as it will be modified by a subsequent edit.)' 0.00009982 Tc 378.8 -373.23 Td (10-)Tj 0 Tc 18.9961 0 Td (2)Tj ET Q 1062.9 7158.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 127.626 699.32 Tm -1.38856 Tw (interface DialogKit {)Tj 8.32969 -11.5199 Td -1.38825 Tw (static DialogKit* instance\(\);)Tj 11.5199 TL -1.38711 Tw (FieldEditor* field_editor\()' 8.33008 -11.5199 Td -1.3889 Tw (const String& sample, Style*, FieldEditorAction* = nil)Tj -8.33008 -12.5203 Td -1.38878 Tw (\) const;)Tj -1.38738 Tw (FileChooser* file_chooser\()' 8.33008 -11.5199 Td -1.38881 Tw (constString& dir, Style*, FileChooserAction* = nil)Tj -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 104.415 -16.5203 Td -1.38836 Tw (Figure 10.1:)Tj 61.6898 0 Td -1.38792 Tw (DialogKit operations)Tj ET Q 1062.9 5814.7 3960 10 re f* 1034.1 4067.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 124.746 390.2 Tm -1.38862 Tw (interface FieldEditorAction Resource {)Tj 8.33008 -11.5199 Td -1.38822 Tw (void execute\(FieldEditor*, boolean accept\);)Tj 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5203 TL -1.38839 Tw (interface FieldEditorCallback\(T\) : FieldEditorAction {)' 8.33008 -11.5199 Td -1.38801 Tw (FieldEditorCallback\(T\)\(T*, void \(T::*\)\(FieldEditor*, boolean accept\)\);)Tj 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc -1.38865 Tw (interface FieldEditor : InputHandler {)' 8.33008 -11.5199 Td -1.38876 Tw (FieldEditor\(const char* sample, Style*, FieldEditorAction* = nil\);)Tj 11.5203 TL -1.38873 Tw (FieldEditor\(const String& sample, Style*, FieldEditorAction* = nil\);)' 16.5199 TL -1.3884 Tw (void field\(const char*\);)' 11.5199 TL -1.3883 Tw (void field\(const String&\);)' -1.38858 Tw (void select\(int pos\);)' -1.38881 Tw (void select\(int left, int right\);)' -1.38832 Tw (void edit\(\);)' -1.38893 Tw (void edit\(const char*, int left, int right\);)' -1.3889 Tw (void edit\(const String&, int left, int right\);)' -1.3888 Tw (const char* text\(\) const;)' -1.38832 Tw (void text\(String&\) const;)' 0.000235796 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 89.6898 -16.5199 Td -1.38836 Tw (Figure 10.2:)Tj 61.6902 0 Td -1.38888 Tw (Field editor class interface.)Tj ET Q 1034.1 1431.5 3960 10 re f* Q \n \n \n \n \n-1217\n+1219\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -3660,29 +3660,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 18 Tf 1 0 0 1 106.05 581.27 Tm (10.2)Tj 0.00008011 Tc 35 0 Td (Dialog)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.643398 Tw (A dialog is an object that can be posted temporarily and grabs input until it is)Tj 13.7398 TL -0.248067 Tw (dismissed. Figure 10.3 shows the Dialog protocol. Dialog::post_for creates a)' -1.35714 Tw (transient window for the dialog and aligns over the given window using the given)' -1.49976 Tw (x and y alignment. The default is for the dialog to be centered over the window.)' 10.668 -14.6398 Td -0.793621 Tw (Dialog::post_at creates a top-level window aligned around the given position.)Tj -10.668 -13.7402 Td -0.128971 Tw (Dialog::run blocks until Dialog::dismiss is called, and Dialog::run returns the)Tj -1.49961 Tw (value of the parameter that is passed to Dialog::dismiss.)' /R35743448 18 Tf 41.2801 TL (10.3)' 0.000152588 Tc 35 0 Td (FileChooser)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -1.5075 Tw (A file chooser is a dialog subclass that allows the user to select a file in a directory)Tj 13.7398 TL -1.49966 Tw (and returns the file name. Figure 10.4 shows the FileChooser protocol.)' 0.00009982 Tc 378.8 -302.05 Td (10-)Tj 0 Tc 18.9961 0 Td (3)Tj ET Q 1043.7 7168.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 125.706 700.28 Tm -1.38877 Tw (interface DIalog : InputHandler {)Tj 8.33008 -11.5199 Td -1.38766 Tw (Dialog\(Glyph*, Style*\);)Tj 11.5203 TL -1.38888 Tw (boolean post_for\(Window*, float = 0.5, float = 0.5\);)' -1.38907 Tw (boolean post_at\(Coord x, Coord y, float = 0.5, float = 0.5\);)' -1.38808 Tw (boolean run\(\);)' -1.38827 Tw (void dismiss\(boolean accept\);)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 115.81 -16.5203 Td -1.38836 Tw (Figure 10.3:)Tj 61.6898 0 Td -1.3884 Tw (Dialog protocol)Tj ET Q 1043.7 6064.7 3960 10 re f* 1062.9 3146 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 127.626 298.04 Tm -1.38873 Tw (interface FileChooserAction : Resource {)Tj 8.32969 -11.5199 Td -1.38841 Tw (void execute\(FileChooser*, boolean accept\);)Tj 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38843 Tw (interface FileChooserCallback\(T\) : FileChooserAction {)' 8.32969 -11.5199 Td -1.38805 Tw (FileChooserCallback\(T\)\(T*, void \(T::*\)\(FileChooser*, boolean accept\)\);)Tj 0.000233889 Tc -8.32969 -11.5203 Td (};)Tj 0 Tc -1.3889 Tw (interface FileChooser : Dialog {)' 8.32969 -11.5199 Td -1.38865 Tw (const String* selected\(\) const;)Tj 11.5199 TL -1.38816 Tw (void reread\(\);)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 103.03 -16.5203 Td -1.38836 Tw (Figure 10.4:)Tj 61.6902 0 Td -1.3879 Tw (FileChooser protocol)Tj ET Q 1062.9 1596.7 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 18 Tf 1 0 0 1 106.05 581.27 Tm (10.2)Tj 0.00008011 Tc 35 0 Td (Dialog)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.643398 Tw (A dialog is an object that can be posted temporarily and grabs input until it is)Tj 13.7398 TL -0.248067 Tw (dismissed. Figure 10.3 shows the Dialog protocol. Dialog::post_for creates a)' -1.35714 Tw (transient window for the dialog and aligns over the given window using the given)' -1.49976 Tw (x and y alignment. The default is for the dialog to be centered over the window.)' 10.668 -14.6398 Td -0.793621 Tw (Dialog::post_at creates a top-level window aligned around the given position.)Tj -10.668 -13.7402 Td -0.128971 Tw (Dialog::run blocks until Dialog::dismiss is called, and Dialog::run returns the)Tj -1.49961 Tw (value of the parameter that is passed to Dialog::dismiss.)' /R18609880 18 Tf 41.2801 TL (10.3)' 0.000152588 Tc 35 0 Td (FileChooser)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -1.5075 Tw (A file chooser is a dialog subclass that allows the user to select a file in a directory)Tj 13.7398 TL -1.49966 Tw (and returns the file name. Figure 10.4 shows the FileChooser protocol.)' 0.00009982 Tc 378.8 -302.05 Td (10-)Tj 0 Tc 18.9961 0 Td (3)Tj ET Q 1043.7 7168.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 125.706 700.28 Tm -1.38877 Tw (interface DIalog : InputHandler {)Tj 8.33008 -11.5199 Td -1.38766 Tw (Dialog\(Glyph*, Style*\);)Tj 11.5203 TL -1.38888 Tw (boolean post_for\(Window*, float = 0.5, float = 0.5\);)' -1.38907 Tw (boolean post_at\(Coord x, Coord y, float = 0.5, float = 0.5\);)' -1.38808 Tw (boolean run\(\);)' -1.38827 Tw (void dismiss\(boolean accept\);)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 115.81 -16.5203 Td -1.38836 Tw (Figure 10.3:)Tj 61.6898 0 Td -1.3884 Tw (Dialog protocol)Tj ET Q 1043.7 6064.7 3960 10 re f* 1062.9 3146 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 127.626 298.04 Tm -1.38873 Tw (interface FileChooserAction : Resource {)Tj 8.32969 -11.5199 Td -1.38841 Tw (void execute\(FileChooser*, boolean accept\);)Tj 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38843 Tw (interface FileChooserCallback\(T\) : FileChooserAction {)' 8.32969 -11.5199 Td -1.38805 Tw (FileChooserCallback\(T\)\(T*, void \(T::*\)\(FileChooser*, boolean accept\)\);)Tj 0.000233889 Tc -8.32969 -11.5203 Td (};)Tj 0 Tc -1.3889 Tw (interface FileChooser : Dialog {)' 8.32969 -11.5199 Td -1.38865 Tw (const String* selected\(\) const;)Tj 11.5199 TL -1.38816 Tw (void reread\(\);)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 103.03 -16.5203 Td -1.38836 Tw (Figure 10.4:)Tj 61.6902 0 Td -1.3879 Tw (FileChooser protocol)Tj ET Q 1062.9 1596.7 3960 10 re f* Q \n \n \n \n \n 1134\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -3719,29 +3719,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 11)Tj 0.000121223 Tc 36.9602 TL (LayoutKit)' 0 Tc /R35493912 12 Tf 28.3199 TL 1.50163 Tw (Composite glyphs usually manage the physical layout of their children.)' 13.7402 TL -1.39054 Tw (LayoutKit provides operations for creating objects that are useful in managing the)' -1.35613 Tw (arrangement of one or more glyphs. The LayoutKit objects are modelled after the)' -1.49941 Tw (Knuth's TeX document processing system.)' /R35743448 18 Tf 41.2801 TL (11.1)' 0.00007782 Tc 35 0 Td (Boxes)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -1.4098 Tw (A box is a polyglyph that uses a layout object to arrange its components. A layout)Tj 13.7402 TL -0.724511 Tw (object is not a glyph, but helps a glyph manage the requests and allocations of)' -0.231934 Tw (component glyphs. Figure 11.1 shows the Layout protocol and the LayoutKit)' -1.49932 Tw (operations that create boxes.)' 10.668 -14.6402 Td -1.09766 Tw (Layout::request is given an array of requisitions for the individual components)Tj -10.668 -13.7398 Td -0.316916 Tw (and computes a single requisition for the result. Layout::allocate is given the)Tj -1.44744 Tw (requisitions of the components and the overall allocation, returning the allocations)' -1.49953 Tw (of the individual components.)' 10.668 -14.6398 Td -1.4322 Tw (A box can be constructed either with a list of up to 10 initial glyph components,)Tj -10.668 -13.7402 Td 0.0246361 Tw (or an initial size estimate on the number of components. The size is not a)Tj -1.49966 Tw (maximum, but can avoid growing the list dynamically.)' 10.668 -14.6402 Td 2.43385 Tw (LayoutKit::hbox returns a box that tiles its components in the X)Tj -10.668 -13.7398 Td -0.149121 Tw (dimension left-to-right and aligns the component origins in the Y dimension.)Tj 0.455167 Tw (LayoutKit::vbox returns a box that tiles top-to-bottom and aligns in the X)' -0.84029 Tw (dimension. LayoutKit::overlay aligns in both the X and Y dimensions, drawing)' -1.4994 Tw (the components in back-to-front order.)' 10.668 -14.6402 Td 0.667623 Tw (LayoutKit::hbox returns a box with its X origin at the left side of the)Tj -10.668 -13.7398 Td -0.0113841 Tw (box; LayoutKit::vbox returns a box with its Y origin at the top of the box.)Tj -0.109749 Tw (Sometimes it is more convenient to have the origin correspond to the origin)' 0.0633387 Tw (of the first component. For example, a column of text might want to have)' 0.0447329 Tw (its Y origin correspond to the base line of the first line of text. When the)' 0.119101 Tw (aligment should correspond to the first component's alignment, one can use)' -1.49859 Tw (LayoutKit::hbox_first_aligned or LayoutKit::vbox_first_aligned.)' 10.668 -14.6398 Td -0.207835 Tw (A )Tj 0.000199318 Tc /R36187064 12 Tf 14.248 0 Td (deck)Tj 0 Tc /R35493912 12 Tf 21.984 0 Td -0.207797 Tw ( is a polyglyph similar in some ways to an overlay box. However,)Tj -46.9 -13.7402 Td -1.36692 Tw (instead of overlaying its components, a deck is a polyglyph where only one of the)Tj -0.924681 Tw (components is visible at any time. Figure 11.2 shows the deck protocol and the)' -1.49935 Tw (LayoutKit operations to create decks.)' 10.668 -14.6398 Td -0.291109 Tw (Deck::flip_to sets which component should currently be visible; Deck::card)Tj -10.668 -13.7398 Td -0.663999 Tw (returns the current top. The natural size of a deck is the maximum size of the)Tj -0.470464 Tw (natural sizes of its components. A deck can be stretched to be as large as its)' -1.49908 Tw (largest fully-stretched component.)' 0.00009982 Tc 372.72 -28.8602 Td (11-)Tj 0 Tc 18.9961 0 Td (1)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 11)Tj 0.000121223 Tc 36.9602 TL (LayoutKit)' 0 Tc /R18360344 12 Tf 28.3199 TL 1.50163 Tw (Composite glyphs usually manage the physical layout of their children.)' 13.7402 TL -1.39054 Tw (LayoutKit provides operations for creating objects that are useful in managing the)' -1.35613 Tw (arrangement of one or more glyphs. The LayoutKit objects are modelled after the)' -1.49941 Tw (Knuth's TeX document processing system.)' /R18609880 18 Tf 41.2801 TL (11.1)' 0.00007782 Tc 35 0 Td (Boxes)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -1.4098 Tw (A box is a polyglyph that uses a layout object to arrange its components. A layout)Tj 13.7402 TL -0.724511 Tw (object is not a glyph, but helps a glyph manage the requests and allocations of)' -0.231934 Tw (component glyphs. Figure 11.1 shows the Layout protocol and the LayoutKit)' -1.49932 Tw (operations that create boxes.)' 10.668 -14.6402 Td -1.09766 Tw (Layout::request is given an array of requisitions for the individual components)Tj -10.668 -13.7398 Td -0.316916 Tw (and computes a single requisition for the result. Layout::allocate is given the)Tj -1.44744 Tw (requisitions of the components and the overall allocation, returning the allocations)' -1.49953 Tw (of the individual components.)' 10.668 -14.6398 Td -1.4322 Tw (A box can be constructed either with a list of up to 10 initial glyph components,)Tj -10.668 -13.7402 Td 0.0246361 Tw (or an initial size estimate on the number of components. The size is not a)Tj -1.49966 Tw (maximum, but can avoid growing the list dynamically.)' 10.668 -14.6402 Td 2.43385 Tw (LayoutKit::hbox returns a box that tiles its components in the X)Tj -10.668 -13.7398 Td -0.149121 Tw (dimension left-to-right and aligns the component origins in the Y dimension.)Tj 0.455167 Tw (LayoutKit::vbox returns a box that tiles top-to-bottom and aligns in the X)' -0.84029 Tw (dimension. LayoutKit::overlay aligns in both the X and Y dimensions, drawing)' -1.4994 Tw (the components in back-to-front order.)' 10.668 -14.6402 Td 0.667623 Tw (LayoutKit::hbox returns a box with its X origin at the left side of the)Tj -10.668 -13.7398 Td -0.0113841 Tw (box; LayoutKit::vbox returns a box with its Y origin at the top of the box.)Tj -0.109749 Tw (Sometimes it is more convenient to have the origin correspond to the origin)' 0.0633387 Tw (of the first component. For example, a column of text might want to have)' 0.0447329 Tw (its Y origin correspond to the base line of the first line of text. When the)' 0.119101 Tw (aligment should correspond to the first component's alignment, one can use)' -1.49859 Tw (LayoutKit::hbox_first_aligned or LayoutKit::vbox_first_aligned.)' 10.668 -14.6398 Td -0.207835 Tw (A )Tj 0.000199318 Tc /R19053496 12 Tf 14.248 0 Td (deck)Tj 0 Tc /R18360344 12 Tf 21.984 0 Td -0.207797 Tw ( is a polyglyph similar in some ways to an overlay box. However,)Tj -46.9 -13.7402 Td -1.36692 Tw (instead of overlaying its components, a deck is a polyglyph where only one of the)Tj -0.924681 Tw (components is visible at any time. Figure 11.2 shows the deck protocol and the)' -1.49935 Tw (LayoutKit operations to create decks.)' 10.668 -14.6398 Td -0.291109 Tw (Deck::flip_to sets which component should currently be visible; Deck::card)Tj -10.668 -13.7398 Td -0.663999 Tw (returns the current top. The natural size of a deck is the maximum size of the)Tj -0.470464 Tw (natural sizes of its components. A deck can be stretched to be as large as its)' -1.49908 Tw (largest fully-stretched component.)' 0.00009982 Tc 372.72 -28.8602 Td (11-)Tj 0 Tc 18.9961 0 Td (1)Tj ET Q Q \n \n \n \n \n 1614\n \n \n \n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -3778,29 +3778,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 18 Tf 1 0 0 1 106.05 282.31 Tm (11.2)Tj 0.000144958 Tc 35 0 Td (Glue)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.417052 Tw (Boxes stretch or shrink their components to fit the available space. However,)Tj 13.7402 TL -0.156742 Tw (many components are rigid. For example, characters in text typically do not)' -1.09476 Tw (stretch or shrink. Instead, we prefer to stretch or shrink the white space between)' -1.49961 Tw (words. In TeX, this flexible white space is referred to as ªglueº.)' 10.668 -14.6398 Td -1.05319 Tw (LayoutKit provides the set of operations to create glue object shown in Figure)Tj -10.668 -13.7398 Td -0.471875 Tw (11.3. LayoutKit::glue is the most general operation. It can either be passed a)Tj -0.979601 Tw (specific dimension, natural size, stretchability, shrinkability, and alignment, or it)' -1.49955 Tw (can be passed a complete requisition.)' 10.668 -14.6402 Td -0.626911 Tw (LayoutKit::hglue and LayoutKit::vglue can create glue that is horizontally or)Tj -10.668 -13.7398 Td -0.505469 Tw (vertically stretchable, respectively. The requirement in the minor dimension is)Tj -0.039844 Tw (undefined. If no parameters are passed to LayoutKit::hglue or vglue, then a)' -0.928691 Tw (natural size of zero is assumed. If no stretchability is specified, then the glue is)' 0.00009982 Tc 372.72 -23.95 Td (11-)Tj 0 Tc 18.9961 0 Td (2)Tj ET Q 1072.5 7158.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 128.586 699.32 Tm -1.3886 Tw (interface Layout {)Tj 8.33008 -11.5199 Td -1.38866 Tw (void request\(GlyphIndex count, const Requisition*, Requisition& result\);)Tj 11.5199 TL -1.38856 Tw (void allocate\()' 8.33008 -11.5199 Td -1.38887 Tw (const Allocation& given, GlyphIndex count, const Requisition*,)Tj -1.38824 Tw (Allocation* result)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 21.5199 TL -1.38893 Tw (PolyGlyph* box\(Layout*, GlyphIndex size = 10\) const;)' 11.5199 TL -1.38852 Tw (PolyGlyph* hbox\(GlyphIndex size\) const;)' -1.38848 Tw (PolyGlyph* hbox\()' 8.33008 -11.5199 Td -1.38932 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil,)Tj -1.38933 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil)' -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38856 Tw (PolyGlyph* vbox\(GlyphIndex size\) const;)' -1.38859 Tw (PolyGlyph* vbox\()' 8.33008 -11.5199 Td -1.38932 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil,)Tj -1.38933 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil)' -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38821 Tw (PolyGlyph* hbox_first_aligned\(GlyphIndex size\) const;)' -1.38707 Tw (PolyGlyph* hbox_first_aligned\()' 8.33008 -11.5199 Td -1.38932 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil,)Tj -1.38933 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil)' -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38825 Tw (PolyGlyph* vbox_first_aligned\(GlyphIndex size\) const;)' -1.38718 Tw (PolyGlyph* vbox_first_aligned\()' 8.33008 -11.5199 Td -1.38932 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil,)Tj -1.38933 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil)' -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38828 Tw (PolyGlyph* overlay\()' 8.33008 -11.5203 Td -1.38932 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil,)Tj -1.38933 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil)' -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj 48.8199 -16.5199 Td -1.38831 Tw (Figure 11.1:)Tj 61.6902 0 Td -1.3889 Tw (Layout protocol and LayoutKit box operations)Tj ET Q 1072.5 3075.1 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 18 Tf 1 0 0 1 106.05 282.31 Tm (11.2)Tj 0.000144958 Tc 35 0 Td (Glue)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.417052 Tw (Boxes stretch or shrink their components to fit the available space. However,)Tj 13.7402 TL -0.156742 Tw (many components are rigid. For example, characters in text typically do not)' -1.09476 Tw (stretch or shrink. Instead, we prefer to stretch or shrink the white space between)' -1.49961 Tw (words. In TeX, this flexible white space is referred to as ªglueº.)' 10.668 -14.6398 Td -1.05319 Tw (LayoutKit provides the set of operations to create glue object shown in Figure)Tj -10.668 -13.7398 Td -0.471875 Tw (11.3. LayoutKit::glue is the most general operation. It can either be passed a)Tj -0.979601 Tw (specific dimension, natural size, stretchability, shrinkability, and alignment, or it)' -1.49955 Tw (can be passed a complete requisition.)' 10.668 -14.6402 Td -0.626911 Tw (LayoutKit::hglue and LayoutKit::vglue can create glue that is horizontally or)Tj -10.668 -13.7398 Td -0.505469 Tw (vertically stretchable, respectively. The requirement in the minor dimension is)Tj -0.039844 Tw (undefined. If no parameters are passed to LayoutKit::hglue or vglue, then a)' -0.928691 Tw (natural size of zero is assumed. If no stretchability is specified, then the glue is)' 0.00009982 Tc 372.72 -23.95 Td (11-)Tj 0 Tc 18.9961 0 Td (2)Tj ET Q 1072.5 7158.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 128.586 699.32 Tm -1.3886 Tw (interface Layout {)Tj 8.33008 -11.5199 Td -1.38866 Tw (void request\(GlyphIndex count, const Requisition*, Requisition& result\);)Tj 11.5199 TL -1.38856 Tw (void allocate\()' 8.33008 -11.5199 Td -1.38887 Tw (const Allocation& given, GlyphIndex count, const Requisition*,)Tj -1.38824 Tw (Allocation* result)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 21.5199 TL -1.38893 Tw (PolyGlyph* box\(Layout*, GlyphIndex size = 10\) const;)' 11.5199 TL -1.38852 Tw (PolyGlyph* hbox\(GlyphIndex size\) const;)' -1.38848 Tw (PolyGlyph* hbox\()' 8.33008 -11.5199 Td -1.38932 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil,)Tj -1.38933 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil)' -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38856 Tw (PolyGlyph* vbox\(GlyphIndex size\) const;)' -1.38859 Tw (PolyGlyph* vbox\()' 8.33008 -11.5199 Td -1.38932 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil,)Tj -1.38933 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil)' -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38821 Tw (PolyGlyph* hbox_first_aligned\(GlyphIndex size\) const;)' -1.38707 Tw (PolyGlyph* hbox_first_aligned\()' 8.33008 -11.5199 Td -1.38932 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil,)Tj -1.38933 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil)' -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38825 Tw (PolyGlyph* vbox_first_aligned\(GlyphIndex size\) const;)' -1.38718 Tw (PolyGlyph* vbox_first_aligned\()' 8.33008 -11.5199 Td -1.38932 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil,)Tj -1.38933 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil)' -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38828 Tw (PolyGlyph* overlay\()' 8.33008 -11.5203 Td -1.38932 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil,)Tj -1.38933 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil)' -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj 48.8199 -16.5199 Td -1.38831 Tw (Figure 11.1:)Tj 61.6902 0 Td -1.3889 Tw (Layout protocol and LayoutKit box operations)Tj ET Q 1072.5 3075.1 3960 10 re f* Q \n \n \n \n \n-1224\n+1223\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -3837,27 +3837,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 558.03 Tm -1.49944 Tw (assumed to be infinitely stretchable.)Tj 10.668 -14.6402 Td -0.829982 Tw (LayoutKit::hspace and LayoutKit::vspace create glue with a given size that is)Tj -10.668 -13.7398 Td -0.791071 Tw (rigid. LayoutKit::shape_of returns glue that has the same requisition as another)Tj 13.7398 TL -1.42593 Tw (glyph. LayoutKit::shape_of_xy returns glue that takes its X requirement from one)' -1.49964 Tw (glyph and its Y requirement from another glyph.)' 10.668 -14.6398 Td -0.996753 Tw (LayoutKit::spaces returns glue that correspond to a given number of spaces in)Tj 0.00009982 Tc 362.052 -414.51 Td (11-)Tj 0 Tc 18.9961 0 Td (3)Tj ET Q 1072.5 7178 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 128.586 701.24 Tm -1.38906 Tw (interface Deck : PolyGlyph {)Tj 8.33008 -11.5199 Td -1.38834 Tw (GlyphIndex card\(\) const;)Tj 11.5199 TL -1.38726 Tw (void flip_to\(GlyphIndex\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38871 Tw (Deck* deck\(GlyphIndex size\) const;)' 11.5203 TL -1.38891 Tw (Deck* deck\()' 8.33008 -11.5199 Td -1.38932 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil,)Tj -1.38933 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil)' -8.33008 -11.5199 Td -1.38883 Tw (\) const;)Tj 61.8902 -16.5199 Td -1.38836 Tw (Figure 11.2:)Tj 61.6898 0 Td -1.38888 Tw (Deck protocol and LayoutKit operations)Tj ET Q 1072.5 5793.9 3960 10 re f* 1043.7 4595.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 125.706 443 Tm -1.38843 Tw (Glyph* glue\()Tj 8.33008 -11.5199 Td -1.38882 Tw (DimensionName, Coord natural, Coord stretch, Coord shrink, float alignment)Tj -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj 11.5203 TL -1.38849 Tw (Glyph* glue\(const Requisition&\) const;)' -1.3885 Tw (Glyph* hglue\(\) const;)' -1.38844 Tw (Glyph* hglue\(Coord natural\) const;)' -1.38879 Tw (Glyph* hglue\(Coord natural, Coord stretch, Coord shrink\) const;)' -1.38885 Tw (Glyph* hglue\(Coord natural, Coord stretch, Coord shrink, float alignment\) const;)' 16.5203 TL -1.38856 Tw (Glyph* vglue\(\) const;)' 11.5199 TL -1.38807 Tw (Glyph* vglue\(Coord natural\);)' -1.38881 Tw (Glyph* vglue\(Coord natural, Coord stretch, Coord shrink\) const;)' -1.38887 Tw (Glyph* vglue\(Coord natural, Coord stretch, Coord shrink, float alignment\) const;)' 16.5199 TL -1.38824 Tw (Glyph* hspace\(Coord\) const;)' 11.5203 TL -1.3883 Tw (Glyph* vspace\(Coord\) const;)' -1.38832 Tw (Glyph* shape_of\(Glyph*\) const;)' -1.38835 Tw (Glyph* shape_of_xy\(Glyph*, Glyph*\) const;)' 16.5199 TL -1.38904 Tw (Glyph* spaces\(int count, Coord each, const Font*, const Color*\) const;)' 11.5199 TL -1.38824 Tw (Glyph* strut\()' 8.33008 -11.5203 Td -1.38922 Tw (const Font*, Coord natural = 0, Coord stretch = 0, Coord shrink = 0)Tj -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38817 Tw (Glyph* hstrut\()' 8.33008 -11.5199 Td -1.3887 Tw (Coord right_bearing, Coord left_bearing = 0,)Tj -1.38923 Tw (Coord natural = 0, Coord stretch = 0, Coord shrink = 0)' -8.33008 -11.5203 Td -1.38878 Tw (\) const;)Tj -1.38828 Tw (Glyph* vstrut\()' 8.33008 -11.5199 Td -1.38904 Tw (Coord ascent, Coord descent = 0,)Tj -1.38923 Tw (Coord natural = 0, Coord stretch = 0, Coord shrink = 0)' -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj 42.7152 -16.5199 Td -1.38831 Tw (Figure 11.3:)Tj 61.6898 0 Td -1.38887 Tw (LayoutKit operations for creating spacing glyphs)Tj ET Q 1043.7 922.699 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 558.03 Tm -1.49944 Tw (assumed to be infinitely stretchable.)Tj 10.668 -14.6402 Td -0.829982 Tw (LayoutKit::hspace and LayoutKit::vspace create glue with a given size that is)Tj -10.668 -13.7398 Td -0.791071 Tw (rigid. LayoutKit::shape_of returns glue that has the same requisition as another)Tj 13.7398 TL -1.42593 Tw (glyph. LayoutKit::shape_of_xy returns glue that takes its X requirement from one)' -1.49964 Tw (glyph and its Y requirement from another glyph.)' 10.668 -14.6398 Td -0.996753 Tw (LayoutKit::spaces returns glue that correspond to a given number of spaces in)Tj 0.00009982 Tc 362.052 -414.51 Td (11-)Tj 0 Tc 18.9961 0 Td (3)Tj ET Q 1072.5 7178 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 128.586 701.24 Tm -1.38906 Tw (interface Deck : PolyGlyph {)Tj 8.33008 -11.5199 Td -1.38834 Tw (GlyphIndex card\(\) const;)Tj 11.5199 TL -1.38726 Tw (void flip_to\(GlyphIndex\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38871 Tw (Deck* deck\(GlyphIndex size\) const;)' 11.5203 TL -1.38891 Tw (Deck* deck\()' 8.33008 -11.5199 Td -1.38932 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil,)Tj -1.38933 Tw (Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil, Glyph* = nil)' -8.33008 -11.5199 Td -1.38883 Tw (\) const;)Tj 61.8902 -16.5199 Td -1.38836 Tw (Figure 11.2:)Tj 61.6898 0 Td -1.38888 Tw (Deck protocol and LayoutKit operations)Tj ET Q 1072.5 5793.9 3960 10 re f* 1043.7 4595.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 125.706 443 Tm -1.38843 Tw (Glyph* glue\()Tj 8.33008 -11.5199 Td -1.38882 Tw (DimensionName, Coord natural, Coord stretch, Coord shrink, float alignment)Tj -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj 11.5203 TL -1.38849 Tw (Glyph* glue\(const Requisition&\) const;)' -1.3885 Tw (Glyph* hglue\(\) const;)' -1.38844 Tw (Glyph* hglue\(Coord natural\) const;)' -1.38879 Tw (Glyph* hglue\(Coord natural, Coord stretch, Coord shrink\) const;)' -1.38885 Tw (Glyph* hglue\(Coord natural, Coord stretch, Coord shrink, float alignment\) const;)' 16.5203 TL -1.38856 Tw (Glyph* vglue\(\) const;)' 11.5199 TL -1.38807 Tw (Glyph* vglue\(Coord natural\);)' -1.38881 Tw (Glyph* vglue\(Coord natural, Coord stretch, Coord shrink\) const;)' -1.38887 Tw (Glyph* vglue\(Coord natural, Coord stretch, Coord shrink, float alignment\) const;)' 16.5199 TL -1.38824 Tw (Glyph* hspace\(Coord\) const;)' 11.5203 TL -1.3883 Tw (Glyph* vspace\(Coord\) const;)' -1.38832 Tw (Glyph* shape_of\(Glyph*\) const;)' -1.38835 Tw (Glyph* shape_of_xy\(Glyph*, Glyph*\) const;)' 16.5199 TL -1.38904 Tw (Glyph* spaces\(int count, Coord each, const Font*, const Color*\) const;)' 11.5199 TL -1.38824 Tw (Glyph* strut\()' 8.33008 -11.5203 Td -1.38922 Tw (const Font*, Coord natural = 0, Coord stretch = 0, Coord shrink = 0)Tj -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38817 Tw (Glyph* hstrut\()' 8.33008 -11.5199 Td -1.3887 Tw (Coord right_bearing, Coord left_bearing = 0,)Tj -1.38923 Tw (Coord natural = 0, Coord stretch = 0, Coord shrink = 0)' -8.33008 -11.5203 Td -1.38878 Tw (\) const;)Tj -1.38828 Tw (Glyph* vstrut\()' 8.33008 -11.5199 Td -1.38904 Tw (Coord ascent, Coord descent = 0,)Tj -1.38923 Tw (Coord natural = 0, Coord stretch = 0, Coord shrink = 0)' -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj 42.7152 -16.5199 Td -1.38831 Tw (Figure 11.3:)Tj 61.6898 0 Td -1.38887 Tw (LayoutKit operations for creating spacing glyphs)Tj ET Q 1043.7 922.699 3960 10 re f* Q \n \n \n \n \n-1109\n+1108\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -3894,29 +3894,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 397.71 Tm -1.3723 Tw (the current font. Unlike other glue objects, which despite being generally referred)Tj 13.7402 TL -0.983245 Tw (to as ªwhite spaceº do not actually have an appearance, spaces are drawn in the)' -1.49932 Tw (given color.)' /R35743448 18 Tf 41.2801 TL (11.3)' 0.000173781 Tc 35 0 Td (Alignment)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -1.2326 Tw (In addition to laying out a collection of glyphs, it is often desirable to modify the)Tj 13.7398 TL -1.07194 Tw (positioning of a single glyph. LayoutKit provides operations to adjust the layout)' -1.49968 Tw (of a glyph. These operations return a monoglyph.)' 10.668 -14.6398 Td 0.699004 Tw (Figure 11.4 shows the operations that affect the requisition of a glyph.)Tj -10.668 -13.7402 Td -1.21156 Tw (LayoutKit::center , center_dimension, hcenter, and vcenter change the origin of a)Tj -1.19246 Tw (glyph as it appears in a requisition. When the glyph body is allocated, it is given)' -1.18384 Tw (the origin it requested. Thus, the name ªcenterº is somewhat misleading as these)' -1.44618 Tw (monoglyphs merely return a glyph that asks to be centered at a particular position,)' -1.49964 Tw (they do not actually change the origin themselves.)' 10.668 -14.6402 Td -1.42229 Tw (LayoutKit::fixed, fixed_dimension, hfixed, and vfixed change a glyph to appear)Tj -10.668 -13.7398 Td 0.081875 Tw (rigid even if it is flexible. Fixed monoglyphs are ideal for specifying sizes)Tj -0.379702 Tw (that are otherwise undefined, such as the initial height of a file chooser. The)' -0.631503 Tw (inverse functionality±making a glyph flexible that may be rigid±is provided by)' -0.385384 Tw (the LayoutKit::flexible, flexible_dimension, hflexible, and vflexible operations.)' -0.92341 Tw (The LayoutKit::natural, natural_dimension, hnatural, and vnatural operations are)' 0.00009982 Tc 372.72 -29.3699 Td (11-)Tj 0 Tc 18.9961 0 Td (4)Tj ET Q 1053.3 7072.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 126.666 690.68 Tm -1.38909 Tw (MonoGlyph* center\(Glyph*, float x = 0.5, float y = 0.5\) const;)Tj 11.5199 TL -1.38839 Tw (MonoGlyph* center_dimension\(Glyph*, DimensionName, float align\) const;)' -1.38888 Tw (MonoGlyph* hcenter\(Glyph*, float x = 0.5\) const;)' -1.38889 Tw (MonoGlyph* vcenter\(Glyph*, float y = 0.5\) const;)' 16.5199 TL -1.3889 Tw (MonoGlyph* fixed\(Glyph*, Coord x, Coord y\) const;)' 11.5199 TL -1.38824 Tw (MonoGlyph* fixed_dimension\(Glyph*, DimensionName, Coord\) const;)' -1.38865 Tw (MonoGlyph* hfixed\(Glyph*, Coord x\) const;)' -1.38868 Tw (MonoGlyph* vfixed\(Glyph*, Coord y\) const;)' -1.38907 Tw (MonoGlyph* flexible\(Glyph*, Coord stretch = fil, Coord shrink = fil\) const;)' -1.38695 Tw (MonoGlyph* flexible_dimension\()' 8.33008 -11.5199 Td -1.38908 Tw (Glyph*, DimensionName, Coord stretch = fil, Coord shrink = fil)Tj -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38778 Tw (MonoGlyph* hflexible\()' 8.33008 -11.5199 Td -1.38917 Tw (Glyph*, Coord stretch = fil, Coord shrink = fil)Tj -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38789 Tw (MonoGlyph* vflexible\()' 8.33008 -11.5199 Td -1.38917 Tw (Glyph*, Coord stretch = fil, Coord shrink = fil)Tj -8.33008 -11.5203 Td -1.38878 Tw (\) const;)Tj -1.38884 Tw (MonoGlyph* natural\(Glyph*, Coord x, Coord y\) const;)' -1.38815 Tw (MonoGlyph* natural_dimension\(Glyph*, DimensionName, Coord\) const;)' -1.38818 Tw (MonoGlyph* hnatural\(Glyph*, Coord\) const;)' -1.38822 Tw (MonoGlyph* vnatural\(Glyph*, Coord\) const;)' 56.0496 -16.5203 Td -1.38826 Tw (Figure 11.4:)Tj 61.6902 0 Td -1.38869 Tw (LayoutKit operations that adjust alignment)Tj ET Q 1053.3 4190.7 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 397.71 Tm -1.3723 Tw (the current font. Unlike other glue objects, which despite being generally referred)Tj 13.7402 TL -0.983245 Tw (to as ªwhite spaceº do not actually have an appearance, spaces are drawn in the)' -1.49932 Tw (given color.)' /R18609880 18 Tf 41.2801 TL (11.3)' 0.000173781 Tc 35 0 Td (Alignment)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -1.2326 Tw (In addition to laying out a collection of glyphs, it is often desirable to modify the)Tj 13.7398 TL -1.07194 Tw (positioning of a single glyph. LayoutKit provides operations to adjust the layout)' -1.49968 Tw (of a glyph. These operations return a monoglyph.)' 10.668 -14.6398 Td 0.699004 Tw (Figure 11.4 shows the operations that affect the requisition of a glyph.)Tj -10.668 -13.7402 Td -1.21156 Tw (LayoutKit::center , center_dimension, hcenter, and vcenter change the origin of a)Tj -1.19246 Tw (glyph as it appears in a requisition. When the glyph body is allocated, it is given)' -1.18384 Tw (the origin it requested. Thus, the name ªcenterº is somewhat misleading as these)' -1.44618 Tw (monoglyphs merely return a glyph that asks to be centered at a particular position,)' -1.49964 Tw (they do not actually change the origin themselves.)' 10.668 -14.6402 Td -1.42229 Tw (LayoutKit::fixed, fixed_dimension, hfixed, and vfixed change a glyph to appear)Tj -10.668 -13.7398 Td 0.081875 Tw (rigid even if it is flexible. Fixed monoglyphs are ideal for specifying sizes)Tj -0.379702 Tw (that are otherwise undefined, such as the initial height of a file chooser. The)' -0.631503 Tw (inverse functionality±making a glyph flexible that may be rigid±is provided by)' -0.385384 Tw (the LayoutKit::flexible, flexible_dimension, hflexible, and vflexible operations.)' -0.92341 Tw (The LayoutKit::natural, natural_dimension, hnatural, and vnatural operations are)' 0.00009982 Tc 372.72 -29.3699 Td (11-)Tj 0 Tc 18.9961 0 Td (4)Tj ET Q 1053.3 7072.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 126.666 690.68 Tm -1.38909 Tw (MonoGlyph* center\(Glyph*, float x = 0.5, float y = 0.5\) const;)Tj 11.5199 TL -1.38839 Tw (MonoGlyph* center_dimension\(Glyph*, DimensionName, float align\) const;)' -1.38888 Tw (MonoGlyph* hcenter\(Glyph*, float x = 0.5\) const;)' -1.38889 Tw (MonoGlyph* vcenter\(Glyph*, float y = 0.5\) const;)' 16.5199 TL -1.3889 Tw (MonoGlyph* fixed\(Glyph*, Coord x, Coord y\) const;)' 11.5199 TL -1.38824 Tw (MonoGlyph* fixed_dimension\(Glyph*, DimensionName, Coord\) const;)' -1.38865 Tw (MonoGlyph* hfixed\(Glyph*, Coord x\) const;)' -1.38868 Tw (MonoGlyph* vfixed\(Glyph*, Coord y\) const;)' -1.38907 Tw (MonoGlyph* flexible\(Glyph*, Coord stretch = fil, Coord shrink = fil\) const;)' -1.38695 Tw (MonoGlyph* flexible_dimension\()' 8.33008 -11.5199 Td -1.38908 Tw (Glyph*, DimensionName, Coord stretch = fil, Coord shrink = fil)Tj -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38778 Tw (MonoGlyph* hflexible\()' 8.33008 -11.5199 Td -1.38917 Tw (Glyph*, Coord stretch = fil, Coord shrink = fil)Tj -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38789 Tw (MonoGlyph* vflexible\()' 8.33008 -11.5199 Td -1.38917 Tw (Glyph*, Coord stretch = fil, Coord shrink = fil)Tj -8.33008 -11.5203 Td -1.38878 Tw (\) const;)Tj -1.38884 Tw (MonoGlyph* natural\(Glyph*, Coord x, Coord y\) const;)' -1.38815 Tw (MonoGlyph* natural_dimension\(Glyph*, DimensionName, Coord\) const;)' -1.38818 Tw (MonoGlyph* hnatural\(Glyph*, Coord\) const;)' -1.38822 Tw (MonoGlyph* vnatural\(Glyph*, Coord\) const;)' 56.0496 -16.5203 Td -1.38826 Tw (Figure 11.4:)Tj 61.6902 0 Td -1.38869 Tw (LayoutKit operations that adjust alignment)Tj ET Q 1053.3 4190.7 3960 10 re f* Q \n \n \n \n \n 1404\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -3953,27 +3953,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 272.15 Tm -1.36497 Tw (similar to the fixed operations in that they change the natural size, but they do not)Tj 13.7398 TL -1.49907 Tw (affect the flexibility.)' 10.668 -14.6402 Td -0.549461 Tw (LayoutKit also provides a set of operations to put a margin around a glyph.)Tj -10.668 -13.7398 Td -0.807087 Tw (These operations are shown in Figure 11.5. LayoutKit::margin is overloaded to)Tj -0.527113 Tw (specify a fixed margin around the entire glyph, distinct horizontal and vertical)' -0.194975 Tw (margins, separate left, right, bottom, and top margins, or flexible margins on)' -0.919682 Tw (each side. LayoutKit::hmargin specifies horizontal margins; LayoutKit::vmargin)' -0.241069 Tw (specifies vertical margins. LayoutKit::lmargin, rmargin, bmargin, and tmargin)' -1.49958 Tw (specify left, right, bottom, and top margins, respectively.)' 0.00009982 Tc 372.72 -88.3102 Td (11-)Tj 0 Tc 18.9961 0 Td (5)Tj ET Q 1053.3 7149.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 126.666 698.36 Tm -1.38826 Tw (MonoGlyph* margin\(Glyph*, Coord\) const;)Tj 11.5203 TL -1.38868 Tw (MonoGlyph* margin\(Glyph*, Coord hmargin, Coord vmargin\) const;)' -1.38781 Tw (MonoGlyph* margin\()' 8.33008 -11.5199 Td -1.38886 Tw (Glyph*, Coord lmargin, Coord rmargin, Coord bmargin, Coord tmargin)Tj -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38781 Tw (MonoGlyph* margin\()' 0.000189645 Tc 8.33008 -11.5203 Td (Glyph*,)Tj 0 Tc -1.38878 Tw (Coord lmargin, Coord lstretch, Coord lshrink,)' -1.38871 Tw (Coord rmargin, Coord rstretch, Coord rshrink,)' -1.38873 Tw (Coord bmargin, Coord bstretch, Coord bshrink,)' -1.38874 Tw (Coord tmargin, Coord tstretch, Coord tshrink)' -8.33008 -11.5203 Td -1.38878 Tw (\) const;)Tj -1.38822 Tw (MonoGlyph* hmargin\(Glyph*, Coord\) const;)' -1.38865 Tw (MonoGlyph* hmargin\(Glyph*, Coord lmargin, Coord rmargin\) const;)' -1.3877 Tw (MonoGlyph* hmargin\()' 0.000189645 Tc 8.33008 -11.5199 Td (Glyph*,)Tj 0 Tc -1.38878 Tw (Coord lmargin, Coord lstretch, Coord lshrink,)' -1.38874 Tw (Coord rmargin, Coord rstretch, Coord rshrink)' -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38826 Tw (MonoGlyph* vmargin\(Glyph*, Coord\) const;)' -1.38867 Tw (MonoGlyph* vmargin\(Glyph*, Coord lmargin, Coord rmargin\) const;)' -1.38781 Tw (MonoGlyph* vmargin\()' 0.000189645 Tc 8.33008 -11.5199 Td (Glyph*,)Tj 0 Tc -1.38873 Tw (Coord bmargin, Coord bstretch, Coord bshrink,)' -1.38874 Tw (Coord tmargin, Coord tstretch, Coord tshrink)' -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38824 Tw (MonoGlyph* lmargin\(Glyph*, Coord\) const;)' -1.38884 Tw (MonoGlyph* lmargin\(Glyph*, Coord nat, Coord stretch, Coord shrink\) const;)' -1.3882 Tw (MonoGlyph* rmargin\(Glyph*, Coord\) const;)' -1.38883 Tw (MonoGlyph* rmargin\(Glyph*, Coord nat, Coord stretch, Coord shrink\) const;)' -1.38822 Tw (MonoGlyph* bmargin\(Glyph*, Coord\) const;)' -1.38883 Tw (MonoGlyph* bmargin\(Glyph*, Coord nat, Coord stretch, Coord shrink\) const;)' -1.3882 Tw (MonoGlyph* tmargin\(Glyph*, Coord\) const;)' -1.38883 Tw (MonoGlyph* tmargin\(Glyph*, Coord nat, Coord stretch, Coord shrink\) const;)' 86.9051 -16.5199 Td -1.38836 Tw (Figure 11.5:)Tj 61.6898 0 Td -1.38838 Tw (LayoutKit margin operations)Tj ET Q 1053.3 2935.1 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 272.15 Tm -1.36497 Tw (similar to the fixed operations in that they change the natural size, but they do not)Tj 13.7398 TL -1.49907 Tw (affect the flexibility.)' 10.668 -14.6402 Td -0.549461 Tw (LayoutKit also provides a set of operations to put a margin around a glyph.)Tj -10.668 -13.7398 Td -0.807087 Tw (These operations are shown in Figure 11.5. LayoutKit::margin is overloaded to)Tj -0.527113 Tw (specify a fixed margin around the entire glyph, distinct horizontal and vertical)' -0.194975 Tw (margins, separate left, right, bottom, and top margins, or flexible margins on)' -0.919682 Tw (each side. LayoutKit::hmargin specifies horizontal margins; LayoutKit::vmargin)' -0.241069 Tw (specifies vertical margins. LayoutKit::lmargin, rmargin, bmargin, and tmargin)' -1.49958 Tw (specify left, right, bottom, and top margins, respectively.)' 0.00009982 Tc 372.72 -88.3102 Td (11-)Tj 0 Tc 18.9961 0 Td (5)Tj ET Q 1053.3 7149.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 126.666 698.36 Tm -1.38826 Tw (MonoGlyph* margin\(Glyph*, Coord\) const;)Tj 11.5203 TL -1.38868 Tw (MonoGlyph* margin\(Glyph*, Coord hmargin, Coord vmargin\) const;)' -1.38781 Tw (MonoGlyph* margin\()' 8.33008 -11.5199 Td -1.38886 Tw (Glyph*, Coord lmargin, Coord rmargin, Coord bmargin, Coord tmargin)Tj -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38781 Tw (MonoGlyph* margin\()' 0.000189645 Tc 8.33008 -11.5203 Td (Glyph*,)Tj 0 Tc -1.38878 Tw (Coord lmargin, Coord lstretch, Coord lshrink,)' -1.38871 Tw (Coord rmargin, Coord rstretch, Coord rshrink,)' -1.38873 Tw (Coord bmargin, Coord bstretch, Coord bshrink,)' -1.38874 Tw (Coord tmargin, Coord tstretch, Coord tshrink)' -8.33008 -11.5203 Td -1.38878 Tw (\) const;)Tj -1.38822 Tw (MonoGlyph* hmargin\(Glyph*, Coord\) const;)' -1.38865 Tw (MonoGlyph* hmargin\(Glyph*, Coord lmargin, Coord rmargin\) const;)' -1.3877 Tw (MonoGlyph* hmargin\()' 0.000189645 Tc 8.33008 -11.5199 Td (Glyph*,)Tj 0 Tc -1.38878 Tw (Coord lmargin, Coord lstretch, Coord lshrink,)' -1.38874 Tw (Coord rmargin, Coord rstretch, Coord rshrink)' -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38826 Tw (MonoGlyph* vmargin\(Glyph*, Coord\) const;)' -1.38867 Tw (MonoGlyph* vmargin\(Glyph*, Coord lmargin, Coord rmargin\) const;)' -1.38781 Tw (MonoGlyph* vmargin\()' 0.000189645 Tc 8.33008 -11.5199 Td (Glyph*,)Tj 0 Tc -1.38873 Tw (Coord bmargin, Coord bstretch, Coord bshrink,)' -1.38874 Tw (Coord tmargin, Coord tstretch, Coord tshrink)' -8.33008 -11.5199 Td -1.38878 Tw (\) const;)Tj -1.38824 Tw (MonoGlyph* lmargin\(Glyph*, Coord\) const;)' -1.38884 Tw (MonoGlyph* lmargin\(Glyph*, Coord nat, Coord stretch, Coord shrink\) const;)' -1.3882 Tw (MonoGlyph* rmargin\(Glyph*, Coord\) const;)' -1.38883 Tw (MonoGlyph* rmargin\(Glyph*, Coord nat, Coord stretch, Coord shrink\) const;)' -1.38822 Tw (MonoGlyph* bmargin\(Glyph*, Coord\) const;)' -1.38883 Tw (MonoGlyph* bmargin\(Glyph*, Coord nat, Coord stretch, Coord shrink\) const;)' -1.3882 Tw (MonoGlyph* tmargin\(Glyph*, Coord\) const;)' -1.38883 Tw (MonoGlyph* tmargin\(Glyph*, Coord nat, Coord stretch, Coord shrink\) const;)' 86.9051 -16.5199 Td -1.38836 Tw (Figure 11.5:)Tj 61.6898 0 Td -1.38838 Tw (LayoutKit margin operations)Tj ET Q 1053.3 2935.1 3960 10 re f* Q \n \n \n \n \n-946\n+947\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -4010,29 +4010,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 12)Tj 0.000173395 Tc 36.9602 TL (DocumentKit)' 0 Tc /R35493912 12 Tf 28.3199 TL 0.103574 Tw (In Chapter 11, we described the LayoutKit class, which provides operations)' 13.7402 TL 0.354091 Tw (for creating layout objects. The DocumentKit class will provide operations)' -0.496407 Tw (for creating document objects that use LayoutKit objects to produce formatted)' -0.649796 Tw (documents. The DocumentKit class has not yet been implemented, so for now)' -0.691179 Tw (we describe several objects that can be useful for building document editors in)' -1.49946 Tw (conjunction with the LayoutKit objects.)' 10.668 -14.6402 Td -1.41184 Tw (A )Tj 0.00008275 Tc /R36187064 12 Tf 11.8398 0 Td (discretionary)Tj 0 Tc /R35493912 12 Tf 63.9961 0 Td -1.41169 Tw ( can take on one of several appearances depending on whether a)Tj -86.5039 -13.7398 Td -1.46411 Tw (break occurs on it. A common use of a discretionary is for white space in a line of)Tj -0.469967 Tw (text, where the white space becomes zero-width glue if a break occurs on the)' -1.42413 Tw (discretionary. The penalty associated with a discretionary defines the relative cost)' -0.296727 Tw (of breaking. Currently, operations to create discretionaries are defined on the)' 0.000114059 Tc (LayoutKit.)' 0 Tc 10.668 -14.6398 Td -0.643586 Tw (An )Tj 0.00014623 Tc /R36187064 12 Tf 19.3766 0 Td (lr-marker)Tj 0 Tc /R35493912 12 Tf 46.6559 0 Td -0.643579 Tw ( is a glyph that can mark a region of its body. The marking is)Tj -76.7004 -13.7398 Td -0.791073 Tw (done by painting a color under the area or a color on top of the area \(or both\).)Tj -0.634596 Tw (The region is a shape normally associated with text selections. The LRMarker)' -1.21444 Tw (constructor takes two colors, either of which can be nil if the associated underlay)' -1.30493 Tw (or overlay drawing is not desired. LRMarker::mark paints the given region. If y1)' -0.824407 Tw (and y2 are the same, then the mark region is a single rectangle. Otherwise, the)' -0.795605 Tw (region is defined as starting at \(x1,y1\) and filling a height of h1 to \(x1,right\(\)\),)' -1.20964 Tw (then filling \(left\(\),y1+h1\) to \(right\(\),y2\) and filling a height of h2 from \(left\(\),y2\))' -1.07086 Tw (to \(x2,y2\). LRMarker::unmark restores the area to its unmarked appearance. An)' 0.000194126 Tc /R36187064 12 Tf (xy-marker)' 0 Tc /R35493912 12 Tf 49.3078 0 Td -1.04594 Tw ( is simliar to an lr-marker, but it only paints a rectangular area. While)Tj -49.3078 -13.7398 Td -1.0931 Tw (an lr-marker is most useful for selecting text, xy-markers are useful for selecting)Tj -1.04372 Tw (an item in a list or table. Figure 12.1 shows the LRMarker and XYMarker class)' 0.000164379 Tc (interfaces.)' 0 Tc /R35743448 18 Tf 41.2801 TL (12.1)' 0.000120799 Tc 35 0 Td (Compositions)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.331836 Tw (A )Tj 0.00007387 Tc /R36187064 12 Tf 14 0 Td (composition)Tj 0 Tc /R35493912 12 Tf 58.668 0 Td -0.3319 Tw ( is a glyph that uses a )Tj 0.00007820 Tc /R36187064 12 Tf 122.012 0 Td (compositor)Tj 0 Tc /R35493912 12 Tf 54 0 Td -0.331631 Tw ( to determine suitable breaks)Tj -248.68 -13.7398 Td -1.18386 Tw (between groups of its components. Figure 12.2 shows the class interfaces for the)Tj 13.7398 TL -0.492832 Tw (composition and its subclasses. The list of components is broken into sublists)' 0.0157394 Tw (that are put into separate composite glyphs and then inserted into the body.)' -0.663755 Tw (The LRComposition subclass uses LayoutKit::hbox_first_aligned to create each)' -1.49952 Tw (sublist, while the TBComposition subclass uses LayoutKit::vbox_first_aligned.)' 10.668 -14.6398 Td -0.695758 Tw (Compositions can be used to break paragraphs into lines, lines into columns,)Tj -10.668 -13.7398 Td -0.403533 Tw (or columns into pages. A document editor might create an lr-composition for)Tj -1.17871 Tw (characters that puts the resulting hboxes for lines into a tb-composition, which in)' -1.17977 Tw (turn puts the vboxes for columns into an lr-composition, which puts the resulting)' 0.00009982 Tc 372.72 -31.5602 Td (12-)Tj 0 Tc 18.9961 0 Td (1)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 24 Tf 1 0 0 1 106.05 699.66 Tm -2.99887 Tw (Chapter 12)Tj 0.000173395 Tc 36.9602 TL (DocumentKit)' 0 Tc /R18360344 12 Tf 28.3199 TL 0.103574 Tw (In Chapter 11, we described the LayoutKit class, which provides operations)' 13.7402 TL 0.354091 Tw (for creating layout objects. The DocumentKit class will provide operations)' -0.496407 Tw (for creating document objects that use LayoutKit objects to produce formatted)' -0.649796 Tw (documents. The DocumentKit class has not yet been implemented, so for now)' -0.691179 Tw (we describe several objects that can be useful for building document editors in)' -1.49946 Tw (conjunction with the LayoutKit objects.)' 10.668 -14.6402 Td -1.41184 Tw (A )Tj 0.00008275 Tc /R19053496 12 Tf 11.8398 0 Td (discretionary)Tj 0 Tc /R18360344 12 Tf 63.9961 0 Td -1.41169 Tw ( can take on one of several appearances depending on whether a)Tj -86.5039 -13.7398 Td -1.46411 Tw (break occurs on it. A common use of a discretionary is for white space in a line of)Tj -0.469967 Tw (text, where the white space becomes zero-width glue if a break occurs on the)' -1.42413 Tw (discretionary. The penalty associated with a discretionary defines the relative cost)' -0.296727 Tw (of breaking. Currently, operations to create discretionaries are defined on the)' 0.000114059 Tc (LayoutKit.)' 0 Tc 10.668 -14.6398 Td -0.643586 Tw (An )Tj 0.00014623 Tc /R19053496 12 Tf 19.3766 0 Td (lr-marker)Tj 0 Tc /R18360344 12 Tf 46.6559 0 Td -0.643579 Tw ( is a glyph that can mark a region of its body. The marking is)Tj -76.7004 -13.7398 Td -0.791073 Tw (done by painting a color under the area or a color on top of the area \(or both\).)Tj -0.634596 Tw (The region is a shape normally associated with text selections. The LRMarker)' -1.21444 Tw (constructor takes two colors, either of which can be nil if the associated underlay)' -1.30493 Tw (or overlay drawing is not desired. LRMarker::mark paints the given region. If y1)' -0.824407 Tw (and y2 are the same, then the mark region is a single rectangle. Otherwise, the)' -0.795605 Tw (region is defined as starting at \(x1,y1\) and filling a height of h1 to \(x1,right\(\)\),)' -1.20964 Tw (then filling \(left\(\),y1+h1\) to \(right\(\),y2\) and filling a height of h2 from \(left\(\),y2\))' -1.07086 Tw (to \(x2,y2\). LRMarker::unmark restores the area to its unmarked appearance. An)' 0.000194126 Tc /R19053496 12 Tf (xy-marker)' 0 Tc /R18360344 12 Tf 49.3078 0 Td -1.04594 Tw ( is simliar to an lr-marker, but it only paints a rectangular area. While)Tj -49.3078 -13.7398 Td -1.0931 Tw (an lr-marker is most useful for selecting text, xy-markers are useful for selecting)Tj -1.04372 Tw (an item in a list or table. Figure 12.1 shows the LRMarker and XYMarker class)' 0.000164379 Tc (interfaces.)' 0 Tc /R18609880 18 Tf 41.2801 TL (12.1)' 0.000120799 Tc 35 0 Td (Compositions)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.331836 Tw (A )Tj 0.00007387 Tc /R19053496 12 Tf 14 0 Td (composition)Tj 0 Tc /R18360344 12 Tf 58.668 0 Td -0.3319 Tw ( is a glyph that uses a )Tj 0.00007820 Tc /R19053496 12 Tf 122.012 0 Td (compositor)Tj 0 Tc /R18360344 12 Tf 54 0 Td -0.331631 Tw ( to determine suitable breaks)Tj -248.68 -13.7398 Td -1.18386 Tw (between groups of its components. Figure 12.2 shows the class interfaces for the)Tj 13.7398 TL -0.492832 Tw (composition and its subclasses. The list of components is broken into sublists)' 0.0157394 Tw (that are put into separate composite glyphs and then inserted into the body.)' -0.663755 Tw (The LRComposition subclass uses LayoutKit::hbox_first_aligned to create each)' -1.49952 Tw (sublist, while the TBComposition subclass uses LayoutKit::vbox_first_aligned.)' 10.668 -14.6398 Td -0.695758 Tw (Compositions can be used to break paragraphs into lines, lines into columns,)Tj -10.668 -13.7398 Td -0.403533 Tw (or columns into pages. A document editor might create an lr-composition for)Tj -1.17871 Tw (characters that puts the resulting hboxes for lines into a tb-composition, which in)' -1.17977 Tw (turn puts the vboxes for columns into an lr-composition, which puts the resulting)' 0.00009982 Tc 372.72 -31.5602 Td (12-)Tj 0 Tc 18.9961 0 Td (1)Tj ET Q Q \n \n \n \n \n-1846\n+1845\n \n \n \n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -4069,27 +4069,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 504.23 Tm -1.4995 Tw (lr-boxes for pages into a deck.)Tj 10.668 -14.6402 Td -0.575797 Tw (Compositions also can be used just as easily for arranging buttons in a box,)Tj -10.668 -13.7398 Td -0.0476708 Tw (where one wants the buttons to ``wrap-around'' if there are too many to fit)Tj 13.7398 TL -1.49974 Tw (horizontally. The code to do this could look as follows:)' /R36761712 10 Tf 24.9898 -25.2 Td -1.38883 Tw (LRComposition* c = new LRComposition\()Tj 8.33008 -11.5203 Td -1.38904 Tw (layout.vbox\(\), new SimpleCompositor, /* no separator */ nil, /* width */ 4*72.0)Tj 0.000310898 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc 11.5199 TL -1.38888 Tw (Discretionary* ok = layout.discretionary\(0, nil, nil, nil, nil\);)' -1.38922 Tw (for \(unsigned int i = 0; i < nbuttons; i++\) {)' 0.000241597 Tc 8.33008 -11.5199 Td (c->append\(button[i]\);)Tj 0.000217438 Tc (c->append\(ok\);)' 0.000156403 Tc -8.33008 -11.5199 Td (})Tj 0.000234604 Tc (c->repair\(\);)' 0 Tc -24.9898 -12.4801 Td -1.38949 Tw ( )Tj /R35493912 12 Tf 10.668 -14.6398 Td 0.652609 Tw (The composition constructor takes a body in which to insert sublists, a)Tj -10.668 -13.7402 Td -1.03395 Tw (compositor to determine where to break, a separator to be inserted at each break)Tj 13.7398 TL -0.789427 Tw (\(unless it is nil\), the dimension to use, the width in which the sublists must fit,)' -0.597306 Tw (and optionally the initial size of the list of components. The initial size is not)' -0.130064 Tw (a maximum, but the list by default starts at a small size and is dynamically)' -0.082784 Tw (reallocated as needed. For large lists, it can be more efficient to specify an)' -0.728795 Tw (estimate of the list size. Composition::repair updates the composition to reflect)' -0.492255 Tw (changes to its structure. Composition::item returns the index of the sublist \(in)' -0.982085 Tw (other words, the component of the body\) containing the component specified by)' -0.975512 Tw (the given index. For example, this function could be used to return the line that)' -0.623553 Tw (contains a particular character. Composition::beginning_of returns the index of)' -0.705344 Tw (the component that starts the sublist specified by the given item. For example,)' -0.445523 Tw (this function could be used to return the character that starts a particular line.)' -1.10538 Tw (Composition::end_of is like beginning_of except it returns the end of the sublist.)' -0.164747 Tw (Composition::margin causes space to be left at the beginning and end of the)' -0.110026 Tw (specified item in the body. For example, this function could be used to put)' -1.34584 Tw (margins on a line of text. Composition::view guarantees that breaks are computed)' 0.00009982 Tc 372.72 -24.7699 Td (12-)Tj 0 Tc 18.9961 0 Td (2)Tj ET Q 1060.5 7166 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 127.386 700.04 Tm -1.38881 Tw (interface LRMarker : MonoGlyph {)Tj 8.33008 -11.5199 Td -1.38855 Tw (LRMarker\(Glyph*, Color* overlay, Color* underlay\);)Tj 11.5199 TL -1.38868 Tw (void mark\()' 8.33008 -11.5199 Td -1.38903 Tw (Coord left, Coord right, Coord x1, Coord y1,)Tj -1.38914 Tw (Coord h1, Coord x2, Coord y2, Coord h2)' 0.000312805 Tc -8.33008 -11.5203 Td (\);)Tj 0 Tc -1.38828 Tw (void unmark\(\);)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 23.0398 TL -1.38883 Tw (interface XYMarker : MonoGlyph {)' 8.33008 -11.5203 Td -1.38857 Tw (XYMarker\(Glyph*, Color* overlay, Color* underlay\);)Tj 11.5199 TL -1.38886 Tw (void mark\(Coord left, Coord bottom, Coord right, Coord top\);)' -1.38828 Tw (void unmark\(\);)' -8.33008 -11.5199 Td -1.3893 Tw (}; )Tj 72.1902 -16.5199 Td -1.38836 Tw (Figure 12.1:)Tj 61.6898 0 Td -1.38875 Tw (LRMarker and XYMarker protocols)Tj ET Q 1060.5 5255.9 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 504.23 Tm -1.4995 Tw (lr-boxes for pages into a deck.)Tj 10.668 -14.6402 Td -0.575797 Tw (Compositions also can be used just as easily for arranging buttons in a box,)Tj -10.668 -13.7398 Td -0.0476708 Tw (where one wants the buttons to ``wrap-around'' if there are too many to fit)Tj 13.7398 TL -1.49974 Tw (horizontally. The code to do this could look as follows:)' /R19628144 10 Tf 24.9898 -25.2 Td -1.38883 Tw (LRComposition* c = new LRComposition\()Tj 8.33008 -11.5203 Td -1.38904 Tw (layout.vbox\(\), new SimpleCompositor, /* no separator */ nil, /* width */ 4*72.0)Tj 0.000310898 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc 11.5199 TL -1.38888 Tw (Discretionary* ok = layout.discretionary\(0, nil, nil, nil, nil\);)' -1.38922 Tw (for \(unsigned int i = 0; i < nbuttons; i++\) {)' 0.000241597 Tc 8.33008 -11.5199 Td (c->append\(button[i]\);)Tj 0.000217438 Tc (c->append\(ok\);)' 0.000156403 Tc -8.33008 -11.5199 Td (})Tj 0.000234604 Tc (c->repair\(\);)' 0 Tc -24.9898 -12.4801 Td -1.38949 Tw ( )Tj /R18360344 12 Tf 10.668 -14.6398 Td 0.652609 Tw (The composition constructor takes a body in which to insert sublists, a)Tj -10.668 -13.7402 Td -1.03395 Tw (compositor to determine where to break, a separator to be inserted at each break)Tj 13.7398 TL -0.789427 Tw (\(unless it is nil\), the dimension to use, the width in which the sublists must fit,)' -0.597306 Tw (and optionally the initial size of the list of components. The initial size is not)' -0.130064 Tw (a maximum, but the list by default starts at a small size and is dynamically)' -0.082784 Tw (reallocated as needed. For large lists, it can be more efficient to specify an)' -0.728795 Tw (estimate of the list size. Composition::repair updates the composition to reflect)' -0.492255 Tw (changes to its structure. Composition::item returns the index of the sublist \(in)' -0.982085 Tw (other words, the component of the body\) containing the component specified by)' -0.975512 Tw (the given index. For example, this function could be used to return the line that)' -0.623553 Tw (contains a particular character. Composition::beginning_of returns the index of)' -0.705344 Tw (the component that starts the sublist specified by the given item. For example,)' -0.445523 Tw (this function could be used to return the character that starts a particular line.)' -1.10538 Tw (Composition::end_of is like beginning_of except it returns the end of the sublist.)' -0.164747 Tw (Composition::margin causes space to be left at the beginning and end of the)' -0.110026 Tw (specified item in the body. For example, this function could be used to put)' -1.34584 Tw (margins on a line of text. Composition::view guarantees that breaks are computed)' 0.00009982 Tc 372.72 -24.7699 Td (12-)Tj 0 Tc 18.9961 0 Td (2)Tj ET Q 1060.5 7166 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 127.386 700.04 Tm -1.38881 Tw (interface LRMarker : MonoGlyph {)Tj 8.33008 -11.5199 Td -1.38855 Tw (LRMarker\(Glyph*, Color* overlay, Color* underlay\);)Tj 11.5199 TL -1.38868 Tw (void mark\()' 8.33008 -11.5199 Td -1.38903 Tw (Coord left, Coord right, Coord x1, Coord y1,)Tj -1.38914 Tw (Coord h1, Coord x2, Coord y2, Coord h2)' 0.000312805 Tc -8.33008 -11.5203 Td (\);)Tj 0 Tc -1.38828 Tw (void unmark\(\);)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 23.0398 TL -1.38883 Tw (interface XYMarker : MonoGlyph {)' 8.33008 -11.5203 Td -1.38857 Tw (XYMarker\(Glyph*, Color* overlay, Color* underlay\);)Tj 11.5199 TL -1.38886 Tw (void mark\(Coord left, Coord bottom, Coord right, Coord top\);)' -1.38828 Tw (void unmark\(\);)' -8.33008 -11.5199 Td -1.3893 Tw (}; )Tj 72.1902 -16.5199 Td -1.38836 Tw (Figure 12.1:)Tj 61.6898 0 Td -1.38875 Tw (LRMarker and XYMarker protocols)Tj ET Q 1060.5 5255.9 3960 10 re f* Q \n \n \n \n \n 1698\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -4126,29 +4126,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 376.55 Tm 0.00144958 Tw (for the components between indices )Tj 0.00004883 Tc /R36187064 12 Tf 190.643 0 Td (first)Tj 0 Tc /R35493912 12 Tf 19.3441 0 Td 0.00131845 Tw ( and )Tj 0.00003815 Tc /R36187064 12 Tf 29.3328 0 Td (last)Tj 0 Tc /R35493912 12 Tf 17.3402 0 Td 0.00147356 Tw ( inclusively. By restricting)Tj -256.66 -13.7398 Td -0.011648 Tw (the viewing area, this operation can eliminate the computation of breaks for)Tj 13.7402 TL -1.49957 Tw (components that are not visible.)' 10.668 -14.6398 Td -1.41423 Tw (A compositor computes the breaks based on assessing the penalty for a possible)Tj -10.668 -13.7402 Td -1.38745 Tw (breaks. Three subclasses are provided that use different levels of sophistication in)Tj -0.13382 Tw (determining breaks. An )' 0.00008821 Tc /R36187064 12 Tf 127.041 0 Td (array-compositor)Tj 0 Tc /R35493912 12 Tf 84.6602 0 Td -0.133772 Tw ( positions breaks every N elements,)Tj -211.701 -13.7398 Td -0.113481 Tw (where N is specified in the constructor. A )Tj 0.000107709 Tc /R36187064 12 Tf 228.022 0 Td (simple-compositor)Tj 0 Tc /R35493912 12 Tf 89.3281 0 Td -0.113477 Tw ( finds a simple)Tj -317.35 -13.7402 Td 0.113628 Tw (set of breaks quickly. It is analogous to a line-at-a-time text formatter. A)Tj 0.00013079 Tc /R36187064 12 Tf (TeX-compositor)' 0 Tc /R35493912 12 Tf 77.3281 0 Td -1.4996 Tw ( finds breaks using Knuth's TeX algorithm.)Tj -66.6602 -14.6402 Td 4.96084 Tw (Figure 12.3 shows the interfaces to the compositor classes.)Tj -10.668 -13.7398 Td 1.54385 Tw (Compositor::compose uses the natural, stretch, shrink, penalty, and span)Tj -0.228176 Tw (information for each component as input parameters. The return value is the)' -0.744118 Tw (number of breaks found. The )' 0.000168482 Tc /R36761712 10 Tf 152.444 0 Td (breaks)Tj 0 Tc /R35493912 12 Tf 30.0098 0 Td -0.744147 Tw ( array contains the positions of the breaks;)Tj -182.454 -13.7398 Td -1.49985 Tw (that is, )Tj 0.000214577 Tc /R36761712 10 Tf 35.0043 0 Td (break[i])Tj 0 Tc /R35493912 12 Tf 32.7898 0 Td -1.49975 Tw ( is the index of the component where the )Tj 0.00006104 Tc /R36187064 12 Tf 198.301 0 Td (i)Tj 0 Tc /R35493912 12 Tf 3.33594 0 Td -1.49956 Tw (th break occurs.)Tj 0.00009982 Tc 103.289 -123.11 Td (12-)Tj 0 Tc 18.9961 0 Td (3)Tj ET Q 1050.9 7156.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 126.426 699.08 Tm -1.38876 Tw (interface Composition : MonoGlyph {)Tj 0.000204086 Tc 8.33008 -11.5199 Td (Composition\()Tj 0 Tc 8.33008 -11.5203 Td -1.38843 Tw (Glyph*, Compositor*, Glyph* separator, DimensionName,)Tj 11.5199 TL -1.38875 Tw (Coord width, GlyphIndex size)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc -1.38819 Tw (void repair\(\);)' -1.38683 Tw (GlyphIndex item\(GlyphIndex\);)' -1.38616 Tw (lyphIndex beginning_of\(GlyphIndex\);)' -1.38655 Tw (GlyphIndex end_of\(GlyphIndex\);)' -1.38865 Tw (void margin\(GlyphIndex, Coord begin, Coord end\);)' -1.3886 Tw (void view\(GlyphIndex first, GlyphIndex last\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 23.0402 TL -1.3887 Tw (interface LRComposition : Composition {)' 0.000196729 Tc 8.33008 -11.5199 Td (LRComposition\()Tj 0 Tc 8.33008 -11.5199 Td -1.38893 Tw (Glyph*, Compositor*, Glyph* sep, Coord, GlyphIndex = 10)Tj 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0.000233889 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc -1.3887 Tw (interface TBComposition : Composition {)' 0.000196729 Tc 8.33008 -11.5199 Td (TBComposition\()Tj 0 Tc 8.33008 -11.5199 Td -1.38893 Tw (Glyph*, Compositor*, Glyph* sep, Coord, GlyphIndex = 10)Tj 0.000312805 Tc -8.33008 -11.5203 Td (\);)Tj 0 Tc -8.33008 -11.5199 Td -1.38925 Tw (}; )Tj 103.31 -16.5199 Td -1.38836 Tw (Figure 12.2:)Tj 61.6902 0 Td -1.3884 Tw (Composition classes)Tj 192.22 -16.5199 Td -1.38969 Tw ( )Tj ET Q 1050.9 3979.1 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 376.55 Tm 0.00144958 Tw (for the components between indices )Tj 0.00004883 Tc /R19053496 12 Tf 190.643 0 Td (first)Tj 0 Tc /R18360344 12 Tf 19.3441 0 Td 0.00131845 Tw ( and )Tj 0.00003815 Tc /R19053496 12 Tf 29.3328 0 Td (last)Tj 0 Tc /R18360344 12 Tf 17.3402 0 Td 0.00147356 Tw ( inclusively. By restricting)Tj -256.66 -13.7398 Td -0.011648 Tw (the viewing area, this operation can eliminate the computation of breaks for)Tj 13.7402 TL -1.49957 Tw (components that are not visible.)' 10.668 -14.6398 Td -1.41423 Tw (A compositor computes the breaks based on assessing the penalty for a possible)Tj -10.668 -13.7402 Td -1.38745 Tw (breaks. Three subclasses are provided that use different levels of sophistication in)Tj -0.13382 Tw (determining breaks. An )' 0.00008821 Tc /R19053496 12 Tf 127.041 0 Td (array-compositor)Tj 0 Tc /R18360344 12 Tf 84.6602 0 Td -0.133772 Tw ( positions breaks every N elements,)Tj -211.701 -13.7398 Td -0.113481 Tw (where N is specified in the constructor. A )Tj 0.000107709 Tc /R19053496 12 Tf 228.022 0 Td (simple-compositor)Tj 0 Tc /R18360344 12 Tf 89.3281 0 Td -0.113477 Tw ( finds a simple)Tj -317.35 -13.7402 Td 0.113628 Tw (set of breaks quickly. It is analogous to a line-at-a-time text formatter. A)Tj 0.00013079 Tc /R19053496 12 Tf (TeX-compositor)' 0 Tc /R18360344 12 Tf 77.3281 0 Td -1.4996 Tw ( finds breaks using Knuth's TeX algorithm.)Tj -66.6602 -14.6402 Td 4.96084 Tw (Figure 12.3 shows the interfaces to the compositor classes.)Tj -10.668 -13.7398 Td 1.54385 Tw (Compositor::compose uses the natural, stretch, shrink, penalty, and span)Tj -0.228176 Tw (information for each component as input parameters. The return value is the)' -0.744118 Tw (number of breaks found. The )' 0.000168482 Tc /R19628144 10 Tf 152.444 0 Td (breaks)Tj 0 Tc /R18360344 12 Tf 30.0098 0 Td -0.744147 Tw ( array contains the positions of the breaks;)Tj -182.454 -13.7398 Td -1.49985 Tw (that is, )Tj 0.000214577 Tc /R19628144 10 Tf 35.0043 0 Td (break[i])Tj 0 Tc /R18360344 12 Tf 32.7898 0 Td -1.49975 Tw ( is the index of the component where the )Tj 0.00006104 Tc /R19053496 12 Tf 198.301 0 Td (i)Tj 0 Tc /R18360344 12 Tf 3.33594 0 Td -1.49956 Tw (th break occurs.)Tj 0.00009982 Tc 103.289 -123.11 Td (12-)Tj 0 Tc 18.9961 0 Td (3)Tj ET Q 1050.9 7156.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 126.426 699.08 Tm -1.38876 Tw (interface Composition : MonoGlyph {)Tj 0.000204086 Tc 8.33008 -11.5199 Td (Composition\()Tj 0 Tc 8.33008 -11.5203 Td -1.38843 Tw (Glyph*, Compositor*, Glyph* separator, DimensionName,)Tj 11.5199 TL -1.38875 Tw (Coord width, GlyphIndex size)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0 Tc -1.38819 Tw (void repair\(\);)' -1.38683 Tw (GlyphIndex item\(GlyphIndex\);)' -1.38616 Tw (lyphIndex beginning_of\(GlyphIndex\);)' -1.38655 Tw (GlyphIndex end_of\(GlyphIndex\);)' -1.38865 Tw (void margin\(GlyphIndex, Coord begin, Coord end\);)' -1.3886 Tw (void view\(GlyphIndex first, GlyphIndex last\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 23.0402 TL -1.3887 Tw (interface LRComposition : Composition {)' 0.000196729 Tc 8.33008 -11.5199 Td (LRComposition\()Tj 0 Tc 8.33008 -11.5199 Td -1.38893 Tw (Glyph*, Compositor*, Glyph* sep, Coord, GlyphIndex = 10)Tj 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0.000233889 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc -1.3887 Tw (interface TBComposition : Composition {)' 0.000196729 Tc 8.33008 -11.5199 Td (TBComposition\()Tj 0 Tc 8.33008 -11.5199 Td -1.38893 Tw (Glyph*, Compositor*, Glyph* sep, Coord, GlyphIndex = 10)Tj 0.000312805 Tc -8.33008 -11.5203 Td (\);)Tj 0 Tc -8.33008 -11.5199 Td -1.38925 Tw (}; )Tj 103.31 -16.5199 Td -1.38836 Tw (Figure 12.2:)Tj 61.6902 0 Td -1.3884 Tw (Composition classes)Tj 192.22 -16.5199 Td -1.38969 Tw ( )Tj ET Q 1050.9 3979.1 3960 10 re f* Q \n \n \n \n \n 1508\n \n \n \n \n-R36761712\n+R19628144\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -4185,27 +4185,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 424.55 Tm -1.49816 Tw (See iv/src/examples/preview.)Tj 0.00009982 Tc 372.72 -351.53 Td (12-)Tj 0 Tc 18.9961 0 Td (4)Tj ET Q 1041.3 7060.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 125.466 689.48 Tm -1.3884 Tw (interface Compositor {)Tj 8.33008 -11.5199 Td -1.38858 Tw (virtual int compose\()Tj 8.33008 -11.5203 Td -1.38873 Tw (Coord* natural, Coord* stretch, Coord* shrink,)Tj 11.5199 TL -1.38836 Tw (int* penalties, int component_count,)' -1.38866 Tw (Coord* spans, int span_count,)' -1.38869 Tw (int* breaks, int break_count)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0.000233889 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 23.0398 TL -1.38864 Tw (interface ArrayCompositor : Compositor {)' 8.33008 -11.5199 Td -1.38739 Tw (ArrayCompositor\(int N\);)Tj 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc -1.38862 Tw (interface SimpleCompositor : Compositor {)' 0.000209608 Tc 8.33008 -11.5199 Td (SimpleCompositor\(\);)Tj 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc -1.38868 Tw (interface TeXCompositor : Compositor {)' 16.6602 -11.5199 Td -1.38696 Tw (TeXCompositor\(int penalty\);)Tj -16.6602 -11.5199 Td -1.38925 Tw (}; )Tj 105.535 -16.5199 Td -1.38836 Tw (Figure 12.3:)Tj 61.6898 0 Td -1.3884 Tw (Compositor classes)Tj ET Q 1041.3 4459.1 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 424.55 Tm -1.49816 Tw (See iv/src/examples/preview.)Tj 0.00009982 Tc 372.72 -351.53 Td (12-)Tj 0 Tc 18.9961 0 Td (4)Tj ET Q 1041.3 7060.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 125.466 689.48 Tm -1.3884 Tw (interface Compositor {)Tj 8.33008 -11.5199 Td -1.38858 Tw (virtual int compose\()Tj 8.33008 -11.5203 Td -1.38873 Tw (Coord* natural, Coord* stretch, Coord* shrink,)Tj 11.5199 TL -1.38836 Tw (int* penalties, int component_count,)' -1.38866 Tw (Coord* spans, int span_count,)' -1.38869 Tw (int* breaks, int break_count)' 0.000312805 Tc -8.33008 -11.5199 Td (\);)Tj 0.000233889 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 23.0398 TL -1.38864 Tw (interface ArrayCompositor : Compositor {)' 8.33008 -11.5199 Td -1.38739 Tw (ArrayCompositor\(int N\);)Tj 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc -1.38862 Tw (interface SimpleCompositor : Compositor {)' 0.000209608 Tc 8.33008 -11.5199 Td (SimpleCompositor\(\);)Tj 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc -1.38868 Tw (interface TeXCompositor : Compositor {)' 16.6602 -11.5199 Td -1.38696 Tw (TeXCompositor\(int penalty\);)Tj -16.6602 -11.5199 Td -1.38925 Tw (}; )Tj 105.535 -16.5199 Td -1.38836 Tw (Figure 12.3:)Tj 61.6898 0 Td -1.3884 Tw (Compositor classes)Tj ET Q 1041.3 4459.1 3960 10 re f* Q \n \n \n \n \n 561\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -4242,31 +4242,31 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35743448 24 Tf 1 0 0 1 106.05 699.66 Tm -2.9986 Tw (Appendix A)Tj 36.9602 TL -2.9989 Tw (Operating System Interface)' /R35493912 12 Tf 28.3199 TL -1.39273 Tw (This appendix describes the classes that abstract operating system services. These)' 13.7402 TL -1.16372 Tw (classes do not yet cover the entire range of operating system operations, but they)' -1.13082 Tw (offer higher-level abstractions in some cases, relief from name space concerns in)' -1.49939 Tw (other cases, and greater application portability.)' 10.668 -14.6402 Td -0.316417 Tw (The classes are presented below in alphabetical order. A )Tj 0.000109779 Tc /R36187064 12 Tf 297.233 0 Td (directory)Tj 0 Tc /R35493912 12 Tf 43.9918 0 Td -0.316738 Tw ( is a list)Tj -351.893 -13.7398 Td 0.157461 Tw (of files or other directories. A file is a list of bytes. Both directories and)Tj -0.42179 Tw (files are accessed by a string name. A )' 0.00005722 Tc /R36187064 12 Tf 203.437 0 Td (list)Tj 0 Tc /R35493912 12 Tf 14.6758 0 Td -0.421787 Tw ( is an ordered sequence of objects,)Tj -218.113 -13.7398 Td 0.0332376 Tw (parameterized by the element type. The math class provides an interface to)Tj -0.615644 Tw (common mathematical operations on concrete types \(e.g., ints and floats\). The)' -1.43728 Tw (memory class provides operations on variable-length arrays of bytes. A )' 0.00003052 Tc /R36187064 12 Tf 348.41 0 Td (string)Tj 0 Tc /R35493912 12 Tf 28.0078 0 Td -1.43741 Tw ( is a)Tj -376.418 -13.7398 Td -1.4222 Tw (variable-length list of characters. A )Tj 0.00007820 Tc /R36187064 12 Tf 174.971 0 Td (table)Tj 0 Tc /R35493912 12 Tf 24 0 Td -1.42241 Tw ( is an associative map from a key type to)Tj -198.971 -13.7402 Td -1.4995 Tw (a data type.)Tj 10.668 -14.6398 Td 0.179853 Tw (List and table are generic classes, parameterized by other types. Because)Tj -10.668 -13.7398 Td -0.230274 Tw (few C++ implementations currently support a generic mechanism \(though the)Tj -0.316162 Tw (language defines a template construct\), it is necessary to define list and table)' -1.49954 Tw (classes using preprocessor macros and must be instantiated explicitly.)' 0.00009855 Tc /R35743448 18 Tf 41.2801 TL (A.1)' 0.000161065 Tc 35 0 Td (Directory)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.0121649 Tw (Figure A.1 shows the directory class interface. The static member functions)Tj 13.7398 TL 2.27681 Tw (Directory::current and Directory::open return a pointer to a Directory.)' 0.467122 Tw (Directory::current looks in the default directory for the application context,)' -1.50324 Tw (Directory::open tries to find the directory with the given name. If the name cannot)' -1.49962 Tw (be found or access is denied to the directory, Director::open returns nil.)' 0.000314236 Tc 377.84 -224.66 Td (A-)Tj 0 Tc 15.6602 0 Td (1)Tj ET Q 1072.5 2733.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 128.586 256.76 Tm -1.38852 Tw (interface Directory {)Tj 8.33008 -11.5203 Td -1.38813 Tw (static Directory* current\(\);)Tj 11.5199 TL -1.38841 Tw (static Directory* open\(const String&\);)' -1.3886 Tw (int count\(\) const;)' -1.38892 Tw (const char* name\(int i\) const;)' -1.38872 Tw (int index\(const char*\) const;)' -1.38841 Tw (boolean is_directory\(int index\) const;)' -1.38867 Tw (void close\(\);)' -1.3884 Tw (static String* canonical\(const String&\);)' -1.38884 Tw (static boolean match\(const String& name, const String& pattern\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 96.6449 -16.5203 Td -1.38855 Tw (Figure A.1:)Tj 57.2402 0 Td -1.38866 Tw (Directory class interface.)Tj ET Q 1072.5 1168.7 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18609880 24 Tf 1 0 0 1 106.05 699.66 Tm -2.9986 Tw (Appendix A)Tj 36.9602 TL -2.9989 Tw (Operating System Interface)' /R18360344 12 Tf 28.3199 TL -1.39273 Tw (This appendix describes the classes that abstract operating system services. These)' 13.7402 TL -1.16372 Tw (classes do not yet cover the entire range of operating system operations, but they)' -1.13082 Tw (offer higher-level abstractions in some cases, relief from name space concerns in)' -1.49939 Tw (other cases, and greater application portability.)' 10.668 -14.6402 Td -0.316417 Tw (The classes are presented below in alphabetical order. A )Tj 0.000109779 Tc /R19053496 12 Tf 297.233 0 Td (directory)Tj 0 Tc /R18360344 12 Tf 43.9918 0 Td -0.316738 Tw ( is a list)Tj -351.893 -13.7398 Td 0.157461 Tw (of files or other directories. A file is a list of bytes. Both directories and)Tj -0.42179 Tw (files are accessed by a string name. A )' 0.00005722 Tc /R19053496 12 Tf 203.437 0 Td (list)Tj 0 Tc /R18360344 12 Tf 14.6758 0 Td -0.421787 Tw ( is an ordered sequence of objects,)Tj -218.113 -13.7398 Td 0.0332376 Tw (parameterized by the element type. The math class provides an interface to)Tj -0.615644 Tw (common mathematical operations on concrete types \(e.g., ints and floats\). The)' -1.43728 Tw (memory class provides operations on variable-length arrays of bytes. A )' 0.00003052 Tc /R19053496 12 Tf 348.41 0 Td (string)Tj 0 Tc /R18360344 12 Tf 28.0078 0 Td -1.43741 Tw ( is a)Tj -376.418 -13.7398 Td -1.4222 Tw (variable-length list of characters. A )Tj 0.00007820 Tc /R19053496 12 Tf 174.971 0 Td (table)Tj 0 Tc /R18360344 12 Tf 24 0 Td -1.42241 Tw ( is an associative map from a key type to)Tj -198.971 -13.7402 Td -1.4995 Tw (a data type.)Tj 10.668 -14.6398 Td 0.179853 Tw (List and table are generic classes, parameterized by other types. Because)Tj -10.668 -13.7398 Td -0.230274 Tw (few C++ implementations currently support a generic mechanism \(though the)Tj -0.316162 Tw (language defines a template construct\), it is necessary to define list and table)' -1.49954 Tw (classes using preprocessor macros and must be instantiated explicitly.)' 0.00009855 Tc /R18609880 18 Tf 41.2801 TL (A.1)' 0.000161065 Tc 35 0 Td (Directory)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.0121649 Tw (Figure A.1 shows the directory class interface. The static member functions)Tj 13.7398 TL 2.27681 Tw (Directory::current and Directory::open return a pointer to a Directory.)' 0.467122 Tw (Directory::current looks in the default directory for the application context,)' -1.50324 Tw (Directory::open tries to find the directory with the given name. If the name cannot)' -1.49962 Tw (be found or access is denied to the directory, Director::open returns nil.)' 0.000314236 Tc 377.84 -224.66 Td (A-)Tj 0 Tc 15.6602 0 Td (1)Tj ET Q 1072.5 2733.2 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 128.586 256.76 Tm -1.38852 Tw (interface Directory {)Tj 8.33008 -11.5203 Td -1.38813 Tw (static Directory* current\(\);)Tj 11.5199 TL -1.38841 Tw (static Directory* open\(const String&\);)' -1.3886 Tw (int count\(\) const;)' -1.38892 Tw (const char* name\(int i\) const;)' -1.38872 Tw (int index\(const char*\) const;)' -1.38841 Tw (boolean is_directory\(int index\) const;)' -1.38867 Tw (void close\(\);)' -1.3884 Tw (static String* canonical\(const String&\);)' -1.38884 Tw (static boolean match\(const String& name, const String& pattern\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 96.6449 -16.5203 Td -1.38855 Tw (Figure A.1:)Tj 57.2402 0 Td -1.38866 Tw (Directory class interface.)Tj ET Q 1072.5 1168.7 3960 10 re f* Q \n \n \n \n \n-1652\n+1651\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -4303,29 +4303,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 116.718 708.3 Tm -1.08817 Tw (Directory::count returns the number of entries \(files and directories\), including)Tj -10.668 -13.7398 Td -1.02303 Tw (any special system entries such as ª.º and ª..º on Unix. Directory::name returns)Tj 13.7402 TL -0.743187 Tw (the name of the specified entry. Directory::index returns the index of the entry)' -1.2566 Tw (that matches the given name or -1 if no match is found. Directory::close discards)' -1.49943 Tw (the information associated with the directory.)' 0.00009855 Tc /R35743448 18 Tf 41.2797 TL (A.2)' 0.000184059 Tc 35 0 Td (File)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.943844 Tw (Figure A.2 shows the file class interface and subclasses for input handling. The)Tj 13.7402 TL -0.810407 Tw (base class File is abstract and defines no data access functions. Currently, only)' 0.219464 Tw (input files are implemented. File::name returns the string name of the file.)' 0.146943 Tw (File::length returns the number of bytes in the file. File::close releases any)' -1.4994 Tw (information associated with the file.)' 10.668 -14.6398 Td -1.45332 Tw (File::limit sets an upper bound on the size of a buffer to allocate for file storage.)Tj -10.668 -13.7402 Td -0.747673 Tw (By default, a file attempts to allocate contiguous storage for its entire contents.)Tj -0.571822 Tw (This approach can allow for simpler application code and can be implemented)' -1.49946 Tw (very efficiently on systems with memory-mapped files.)' 10.668 -14.6398 Td -1.25108 Tw (The contents of an input file can be accessed but not modified. InputFile::open)Tj -10.668 -13.7398 Td -0.762819 Tw (returns nil if the named file cannot be found or is not readable. InputFile::read)Tj -1.29395 Tw (allocates a data area for the file contents, sets the start parameter to the beginning)' -0.115096 Tw (of the area, and returns the length of the area. If no storage limit has been)' -1.17501 Tw (specified and the file is on disk \(as opposed to a terminal or pipe\), then read will)' -1.49935 Tw (return the entire file.)' 0.00009855 Tc /R35743448 18 Tf 41.2801 TL (A.3)' 0.000132084 Tc 35 0 Td (List)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.563129 Tw (Figure A.3 shows the list generic class interfaces. The implementation of lists)Tj 13.7398 TL -0.291857 Tw (uses a dynamic array with an insertion gap, meaning that large lists are very)' 0.000314236 Tc 377.84 -224.9 Td (A-)Tj 0 Tc 15.6602 0 Td (2)Tj ET Q 1082.1 2714 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 129.546 254.84 Tm -1.38875 Tw (interface File {)Tj 8.33008 -11.5199 Td -1.38878 Tw (const char* name\(\) const;)Tj 11.5199 TL -1.38848 Tw (long length\(\) const;)' -1.38867 Tw (void close\(\);)' 16.5199 TL -1.38845 Tw (void limit\(unsigned int buffersize\);)' 0.000235796 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc -1.38894 Tw (interface InputFile : File {)' 8.33008 -11.5199 Td -1.38861 Tw (static InputFile* open\(const char* name\);)Tj 11.5199 TL -1.3886 Tw (int read\(const char*& start\);)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 109.14 -16.5203 Td -1.38855 Tw (Figure A.2:)Tj 57.2402 0 Td -1.38774 Tw (InputFile protocols.)Tj ET Q 1082.1 1164.7 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 116.718 708.3 Tm -1.08817 Tw (Directory::count returns the number of entries \(files and directories\), including)Tj -10.668 -13.7398 Td -1.02303 Tw (any special system entries such as ª.º and ª..º on Unix. Directory::name returns)Tj 13.7402 TL -0.743187 Tw (the name of the specified entry. Directory::index returns the index of the entry)' -1.2566 Tw (that matches the given name or -1 if no match is found. Directory::close discards)' -1.49943 Tw (the information associated with the directory.)' 0.00009855 Tc /R18609880 18 Tf 41.2797 TL (A.2)' 0.000184059 Tc 35 0 Td (File)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.943844 Tw (Figure A.2 shows the file class interface and subclasses for input handling. The)Tj 13.7402 TL -0.810407 Tw (base class File is abstract and defines no data access functions. Currently, only)' 0.219464 Tw (input files are implemented. File::name returns the string name of the file.)' 0.146943 Tw (File::length returns the number of bytes in the file. File::close releases any)' -1.4994 Tw (information associated with the file.)' 10.668 -14.6398 Td -1.45332 Tw (File::limit sets an upper bound on the size of a buffer to allocate for file storage.)Tj -10.668 -13.7402 Td -0.747673 Tw (By default, a file attempts to allocate contiguous storage for its entire contents.)Tj -0.571822 Tw (This approach can allow for simpler application code and can be implemented)' -1.49946 Tw (very efficiently on systems with memory-mapped files.)' 10.668 -14.6398 Td -1.25108 Tw (The contents of an input file can be accessed but not modified. InputFile::open)Tj -10.668 -13.7398 Td -0.762819 Tw (returns nil if the named file cannot be found or is not readable. InputFile::read)Tj -1.29395 Tw (allocates a data area for the file contents, sets the start parameter to the beginning)' -0.115096 Tw (of the area, and returns the length of the area. If no storage limit has been)' -1.17501 Tw (specified and the file is on disk \(as opposed to a terminal or pipe\), then read will)' -1.49935 Tw (return the entire file.)' 0.00009855 Tc /R18609880 18 Tf 41.2801 TL (A.3)' 0.000132084 Tc 35 0 Td (List)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.563129 Tw (Figure A.3 shows the list generic class interfaces. The implementation of lists)Tj 13.7398 TL -0.291857 Tw (uses a dynamic array with an insertion gap, meaning that large lists are very)' 0.000314236 Tc 377.84 -224.9 Td (A-)Tj 0 Tc 15.6602 0 Td (2)Tj ET Q 1082.1 2714 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 129.546 254.84 Tm -1.38875 Tw (interface File {)Tj 8.33008 -11.5199 Td -1.38878 Tw (const char* name\(\) const;)Tj 11.5199 TL -1.38848 Tw (long length\(\) const;)' -1.38867 Tw (void close\(\);)' 16.5199 TL -1.38845 Tw (void limit\(unsigned int buffersize\);)' 0.000235796 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc -1.38894 Tw (interface InputFile : File {)' 8.33008 -11.5199 Td -1.38861 Tw (static InputFile* open\(const char* name\);)Tj 11.5199 TL -1.3886 Tw (int read\(const char*& start\);)' 0.000235796 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 109.14 -16.5203 Td -1.38855 Tw (Figure A.2:)Tj 57.2402 0 Td -1.38774 Tw (InputFile protocols.)Tj ET Q 1082.1 1164.7 3960 10 re f* Q \n \n \n \n \n-1477\n+1475\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -4362,27 +4362,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 302.83 Tm -0.732812 Tw (space-efficient. The time efficiency depends on the distribution of insertions±if)Tj 13.7402 TL -1.49967 Tw (the insertion position moves frequently, the list will do excessive copying.)' 10.668 -14.6398 Td -1.43037 Tw (The list constructor takes an optional initial size for the dynamic array. For lists)Tj -10.668 -13.7398 Td -1.49775 Tw (that are known to be large, specifying an initial size avoids the cost of growing the)Tj -1.11809 Tw (array dynamically. List::count returns the number of elements in the list \(not the)' -1.49958 Tw (size of the array\). List::item returns the indexed item.)' 10.668 -14.6402 Td -1.10144 Tw (List::prepend adds an item at the beginning of the list, List::append at the end,)Tj -10.668 -13.7398 Td -1.41771 Tw (and List::insert before an indexed item. List::remove deletes the item specified by)Tj -1.49968 Tw (the given index. List::remove_all deletes all the items in the list.)' 10.668 -14.6402 Td -0.122136 Tw (ListItr is a class for iterating through the elements of a list, parameterized)Tj -10.668 -13.7398 Td -0.937543 Tw (explicitly by the list type and implicitly by the element type. The constructor is)Tj -1.24341 Tw (given the target list. ListItr::more returns true if additional elements are available)' -0.463281 Tw (in the iteration. ListItr::cur returns the current iteration's item. ListItr::cur_ref)' 0.195331 Tw (returns a reference to the item. ListItr::remove_cur deletes the current item)' -0.510976 Tw (from the list. ListItr::next moves the iteration to the next item in the list. No)' 0.000314236 Tc 377.84 -34.5898 Td (A-)Tj 0 Tc 15.6602 0 Td (3)Tj ET Q 1072.5 6784.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 128.586 661.88 Tm -1.38854 Tw (interface List\(T\) {)Tj 8.33008 -11.5199 Td -1.38865 Tw (List\(T\)\(long initial_size = 0\);)Tj 16.5203 TL -1.38856 Tw (long count\(\) const;)' 11.5199 TL -1.38878 Tw (T item\(long index\) const;)' -1.38858 Tw (T& item_ref\(long index\) const;)' -1.38836 Tw (void prepend\(const T&\);)' -1.38844 Tw (void append\(const T&\);)' -1.38886 Tw (void insert\(long index, const T&\);)' -1.38834 Tw (void remove\(long index\);)' -1.38797 Tw (void remove_all\(\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38803 Tw (interface ListItr\(ListType\) {)' 8.33008 -11.5203 Td -1.38622 Tw (ListItr\(ListType\)\)\(const ListType&\);)Tj -1.38836 Tw (boolean more\(\) const;)' 11.5199 TL -1.38881 Tw (T cur\(\) const;)' -1.38852 Tw (T& cur_ref\(\) const;)' -1.38836 Tw (void next\(\);)' 0.000233889 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 16.5199 TL -1.3881 Tw (interface ListUpdater\(ListType\) {)' 0.000198827 Tc 8.33008 -11.5199 Td (ListUpdater\(ListType\)\(ListType&\);)Tj 0 Tc -1.38836 Tw (boolean more\(\) const;)' 11.5199 TL -1.38881 Tw (T cur\(\) const;)' -1.38852 Tw (T& cur_ref\(\) const;)' -1.38789 Tw (void remove_cur\(\);)' -1.38836 Tw (void next\(\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 79.6852 -16.5199 Td -1.38856 Tw (Figure A.3:)Tj 57.2398 0 Td -1.38894 Tw (List and iterator class interfaces.)Tj ET Q 1072.5 3241.9 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 302.83 Tm -0.732812 Tw (space-efficient. The time efficiency depends on the distribution of insertions±if)Tj 13.7402 TL -1.49967 Tw (the insertion position moves frequently, the list will do excessive copying.)' 10.668 -14.6398 Td -1.43037 Tw (The list constructor takes an optional initial size for the dynamic array. For lists)Tj -10.668 -13.7398 Td -1.49775 Tw (that are known to be large, specifying an initial size avoids the cost of growing the)Tj -1.11809 Tw (array dynamically. List::count returns the number of elements in the list \(not the)' -1.49958 Tw (size of the array\). List::item returns the indexed item.)' 10.668 -14.6402 Td -1.10144 Tw (List::prepend adds an item at the beginning of the list, List::append at the end,)Tj -10.668 -13.7398 Td -1.41771 Tw (and List::insert before an indexed item. List::remove deletes the item specified by)Tj -1.49968 Tw (the given index. List::remove_all deletes all the items in the list.)' 10.668 -14.6402 Td -0.122136 Tw (ListItr is a class for iterating through the elements of a list, parameterized)Tj -10.668 -13.7398 Td -0.937543 Tw (explicitly by the list type and implicitly by the element type. The constructor is)Tj -1.24341 Tw (given the target list. ListItr::more returns true if additional elements are available)' -0.463281 Tw (in the iteration. ListItr::cur returns the current iteration's item. ListItr::cur_ref)' 0.195331 Tw (returns a reference to the item. ListItr::remove_cur deletes the current item)' -0.510976 Tw (from the list. ListItr::next moves the iteration to the next item in the list. No)' 0.000314236 Tc 377.84 -34.5898 Td (A-)Tj 0 Tc 15.6602 0 Td (3)Tj ET Q 1072.5 6784.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 128.586 661.88 Tm -1.38854 Tw (interface List\(T\) {)Tj 8.33008 -11.5199 Td -1.38865 Tw (List\(T\)\(long initial_size = 0\);)Tj 16.5203 TL -1.38856 Tw (long count\(\) const;)' 11.5199 TL -1.38878 Tw (T item\(long index\) const;)' -1.38858 Tw (T& item_ref\(long index\) const;)' -1.38836 Tw (void prepend\(const T&\);)' -1.38844 Tw (void append\(const T&\);)' -1.38886 Tw (void insert\(long index, const T&\);)' -1.38834 Tw (void remove\(long index\);)' -1.38797 Tw (void remove_all\(\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 16.5199 TL -1.38803 Tw (interface ListItr\(ListType\) {)' 8.33008 -11.5203 Td -1.38622 Tw (ListItr\(ListType\)\)\(const ListType&\);)Tj -1.38836 Tw (boolean more\(\) const;)' 11.5199 TL -1.38881 Tw (T cur\(\) const;)' -1.38852 Tw (T& cur_ref\(\) const;)' -1.38836 Tw (void next\(\);)' 0.000233889 Tc -8.33008 -11.5203 Td (};)Tj 0 Tc 16.5199 TL -1.3881 Tw (interface ListUpdater\(ListType\) {)' 0.000198827 Tc 8.33008 -11.5199 Td (ListUpdater\(ListType\)\(ListType&\);)Tj 0 Tc -1.38836 Tw (boolean more\(\) const;)' 11.5199 TL -1.38881 Tw (T cur\(\) const;)' -1.38852 Tw (T& cur_ref\(\) const;)' -1.38789 Tw (void remove_cur\(\);)' -1.38836 Tw (void next\(\);)' 0.000233889 Tc -8.33008 -11.5199 Td (};)Tj 0 Tc 79.6852 -16.5199 Td -1.38856 Tw (Figure A.3:)Tj 57.2398 0 Td -1.38894 Tw (List and iterator class interfaces.)Tj ET Q 1072.5 3241.9 3960 10 re f* Q \n \n \n \n \n-1268\n+1269\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -4419,27 +4419,27 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 708.3 Tm -0.562831 Tw (modifications should be made to the list during an iteration \(except in the last)Tj 13.7398 TL -1.49959 Tw (step\), as this may cause unexpected or erroneous results.)' 10.668 -14.6402 Td -0.997414 Tw (As an example, consider a list of pointers to glyphs. We could declare such a)Tj -10.668 -13.7398 Td -1.49959 Tw (list in a header or source file as follows:)Tj 0.000139298 Tc 21.3359 -19.4402 Td (declarePtrList\(GlyphList,Glyph\))Tj 0 Tc -21.3359 -19.4398 Td -1.49965 Tw (Only one source file may contain the expansion of the implementation:)Tj 0.000112823 Tc 21.3359 -19.4398 Td (implementPtrList\(GlyphList,Glyph\))Tj 0 Tc -21.3359 -19.4402 Td -1.49975 Tw (A loop to iterate over all the glyphs in a list could be written as follows:)Tj 21.3359 -19.4398 Td -1.49916 Tw (for \(ListItr\(GlyphList\) i\(list\); i.more\(\); i.next\(\)\) {)Tj 10.668 -13.4402 Td -1.49955 Tw (Glyph* g = i.cur\(\);)Tj 13.4398 TL -1.49974 Tw (// do something with g)' 0.000236511 Tc -10.668 -13.4398 Td (})Tj 0 Tc -10.668 -19.4402 Td -1.18535 Tw (A list makes no assumptions about its element type. In particular, destroying a)Tj -10.668 -13.7398 Td -1.49974 Tw (list of pointers will not destroy the objects that are the targets of the pointers.)Tj 0.00009855 Tc /R35743448 18 Tf 41.2801 TL (A.4)' 0.000161171 Tc 35 0 Td (Math)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -1.34187 Tw (Figure A.4 shows the math class interface. One cannot create a ªmath objectº; all)Tj 13.7398 TL -0.919104 Tw (the member functions are static. Math::min and Math::max return the minimum)' -1.1953 Tw (and maximum of two or four numbers, respectively. For the sake of brevity only)' -0.771537 Tw (the floating point definitions are shown, but Math::min and Math::max are also)' -1.49976 Tw (defined for ints, longs, unsigned ints, unsigned longs, and doubles.)' 10.668 -14.6398 Td -0.124257 Tw (Math::abs returns the absolute value of a number. Math::round returns the)Tj -10.668 -13.7398 Td -1.30194 Tw (integer nearest to a floating point value. Math::equal compares two floating point)Tj -1.35713 Tw (numbers and returns whether they are within a given epsilon \(the third parameter\))' -1.49937 Tw (of each other.)' 0.00009855 Tc /R35743448 18 Tf 41.2801 TL (A.5)' 0.000143687 Tc 35 0 Td (Memory)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -0.904 Tw (Figure A.5 shows the memory class interface. Like the math class, the memory)Tj 13.7398 TL -1.36248 Tw (class consists solely of static member functions. Memory::copy writes a specified)' 0.529605 Tw (number of bytes from one memory location to another. Memory::compare)' -0.997552 Tw (determines if a specified number of bytes at one memory location is identical to)' -1.38564 Tw (those at another location. If so, Memory::compare returns 0. Otherwise, it returns)' -1.16942 Tw (a non-zero value. Memory::zero sets a specified number of bytes to zero starting)' -1.49958 Tw (at a given memory location.)' 10.668 -14.6402 Td -0.787127 Tw (In certain circumstances, memory operations are faster than a loop over a set)Tj -10.668 -13.7398 Td -0.206765 Tw (of elements. Memory::zero and Memory::copy are useful for implementing a)Tj -1.49958 Tw (dynamic array, quickly clearing or copying data when the array grows.)' 0.000314236 Tc 377.84 -39.5598 Td (A-)Tj 0 Tc 15.6602 0 Td (4)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 708.3 Tm -0.562831 Tw (modifications should be made to the list during an iteration \(except in the last)Tj 13.7398 TL -1.49959 Tw (step\), as this may cause unexpected or erroneous results.)' 10.668 -14.6402 Td -0.997414 Tw (As an example, consider a list of pointers to glyphs. We could declare such a)Tj -10.668 -13.7398 Td -1.49959 Tw (list in a header or source file as follows:)Tj 0.000139298 Tc 21.3359 -19.4402 Td (declarePtrList\(GlyphList,Glyph\))Tj 0 Tc -21.3359 -19.4398 Td -1.49965 Tw (Only one source file may contain the expansion of the implementation:)Tj 0.000112823 Tc 21.3359 -19.4398 Td (implementPtrList\(GlyphList,Glyph\))Tj 0 Tc -21.3359 -19.4402 Td -1.49975 Tw (A loop to iterate over all the glyphs in a list could be written as follows:)Tj 21.3359 -19.4398 Td -1.49916 Tw (for \(ListItr\(GlyphList\) i\(list\); i.more\(\); i.next\(\)\) {)Tj 10.668 -13.4402 Td -1.49955 Tw (Glyph* g = i.cur\(\);)Tj 13.4398 TL -1.49974 Tw (// do something with g)' 0.000236511 Tc -10.668 -13.4398 Td (})Tj 0 Tc -10.668 -19.4402 Td -1.18535 Tw (A list makes no assumptions about its element type. In particular, destroying a)Tj -10.668 -13.7398 Td -1.49974 Tw (list of pointers will not destroy the objects that are the targets of the pointers.)Tj 0.00009855 Tc /R18609880 18 Tf 41.2801 TL (A.4)' 0.000161171 Tc 35 0 Td (Math)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -1.34187 Tw (Figure A.4 shows the math class interface. One cannot create a ªmath objectº; all)Tj 13.7398 TL -0.919104 Tw (the member functions are static. Math::min and Math::max return the minimum)' -1.1953 Tw (and maximum of two or four numbers, respectively. For the sake of brevity only)' -0.771537 Tw (the floating point definitions are shown, but Math::min and Math::max are also)' -1.49976 Tw (defined for ints, longs, unsigned ints, unsigned longs, and doubles.)' 10.668 -14.6398 Td -0.124257 Tw (Math::abs returns the absolute value of a number. Math::round returns the)Tj -10.668 -13.7398 Td -1.30194 Tw (integer nearest to a floating point value. Math::equal compares two floating point)Tj -1.35713 Tw (numbers and returns whether they are within a given epsilon \(the third parameter\))' -1.49937 Tw (of each other.)' 0.00009855 Tc /R18609880 18 Tf 41.2801 TL (A.5)' 0.000143687 Tc 35 0 Td (Memory)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -0.904 Tw (Figure A.5 shows the memory class interface. Like the math class, the memory)Tj 13.7398 TL -1.36248 Tw (class consists solely of static member functions. Memory::copy writes a specified)' 0.529605 Tw (number of bytes from one memory location to another. Memory::compare)' -0.997552 Tw (determines if a specified number of bytes at one memory location is identical to)' -1.38564 Tw (those at another location. If so, Memory::compare returns 0. Otherwise, it returns)' -1.16942 Tw (a non-zero value. Memory::zero sets a specified number of bytes to zero starting)' -1.49958 Tw (at a given memory location.)' 10.668 -14.6402 Td -0.787127 Tw (In certain circumstances, memory operations are faster than a loop over a set)Tj -10.668 -13.7398 Td -0.206765 Tw (of elements. Memory::zero and Memory::copy are useful for implementing a)Tj -1.49958 Tw (dynamic array, quickly clearing or copying data when the array grows.)' 0.000314236 Tc 377.84 -39.5598 Td (A-)Tj 0 Tc 15.6602 0 Td (4)Tj ET Q Q \n \n \n \n \n 1551\n \n \n \n \n-R35743448\n+R18609880\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -4476,31 +4476,31 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT 0.00009855 Tc /R35743448 18 Tf 1 0 0 1 106.05 504.27 Tm (A.6)Tj 0.000153224 Tc 35 0 Td (String)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td -1.02097 Tw (Figure A.6 shows the string class interface. The purpose of the string class is to)Tj 13.7398 TL -1.10551 Tw (provide a convenient set of operations for manipulating variable-length character)' -1.43237 Tw (arrays, )' 0.00002162 Tc /R36187064 12 Tf 35.45 0 Td (not)Tj 0 Tc /R35493912 12 Tf 15.3359 0 Td -1.43267 Tw ( to manage storage. The base class does not allocate or free any storage)Tj -50.7859 -13.7398 Td -1.49916 Tw (associated with the characters.)Tj 10.668 -14.6398 Td -1.32898 Tw (Three string constructors are available. The first, with no arguments, creates an)Tj -10.668 -13.7402 Td -0.171892 Tw (uninitialized string that should be assigned to another string before use. The)Tj -0.885923 Tw (second, with a character pointer, sets the string's data to the given pointer. The)' -0.776237 Tw (string's length is computed from the pointer under the assumption that the data)' -0.408723 Tw (is null-terminated. The third constructor takes a character pointer and explicit)' -1.49968 Tw (length. It does not assume the data is null-terminated.)' 10.668 -14.6402 Td 0.714878 Tw (String::string returns a pointer to the character data, which may not be)Tj -10.668 -13.7398 Td -0.0848485 Tw (null-terminated. String::length returns the number of characters in the string.)Tj 1.07639 Tw (String::null_terminated returns whether the string is already known to be)' -1.45527 Tw (null-terminated \(it does not attempt to find a null\). String::hash returns a value for)' -1.49972 Tw (the string data suitable for indexing the strings into a hash table.)' 10.668 -14.6402 Td -1.39336 Tw (The string class provides operators for assignment and comparison. The second)Tj -10.668 -13.7398 Td -0.846296 Tw (operand for these operations can be a string or a character pointer. In the latter)Tj -0.369439 Tw (case, the data is assumed to be null-terminated. String::case_insensitive_equal)' -1.49964 Tw (tests for equality ignoring the case of the characters in the strings.)' 0.000314236 Tc 377.84 -148.67 Td (A-)Tj 0 Tc 15.6602 0 Td (5)Tj ET Q 1062.9 7139.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 127.626 697.4 Tm -1.38864 Tw (interface Math {)Tj 8.32969 -11.5199 Td -1.38891 Tw (static float min\(float a, float b\);)Tj 11.5199 TL -1.38892 Tw (static float max\(float a, float b\);)' -1.38908 Tw (static float min\(float a, float b, float c, float d\);)' -1.38908 Tw (static float max\(float a, float b, float c, float d\);)' 16.5199 TL -1.38854 Tw (static int abs\(int\);)' 11.5199 TL -1.38846 Tw (static long abs\(long\);)' -1.38823 Tw (static double abs\(double\);)' -1.38821 Tw (static int round\(float\);)' -1.38819 Tw (static int round\(double\);)' -1.38899 Tw (static boolean equal\(float x, float y, float e\);)' -1.38897 Tw (static boolean equal\(double x, double y, double e\);)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 105.53 -16.5203 Td -1.38855 Tw (Figure A.4:)Tj 57.2402 0 Td -1.38877 Tw (Math class interface.)Tj ET Q 1062.9 5294.7 3960 10 re f* 1062.9 1926.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 127.626 176.12 Tm -1.38856 Tw (interface Memory {)Tj 8.32969 -11.5199 Td -1.38904 Tw (static void copy\(const void*, void* to, unsigned int nbytes\);)Tj 11.5199 TL -1.38895 Tw (static int compare\(const void*, const void*, unsigned int nbytes\);)' -1.38885 Tw (static void zero\(void*, unsigned int nbytes\);)' 0.000233889 Tc -8.32969 -11.5203 Td (};)Tj 0 Tc 98.5898 -16.5199 Td -1.38855 Tw (Figure A.5:)Tj 57.2398 0 Td -1.38869 Tw (Memory class interface.)Tj ET Q 1062.9 1053.5 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT 0.00009855 Tc /R18609880 18 Tf 1 0 0 1 106.05 504.27 Tm (A.6)Tj 0.000153224 Tc 35 0 Td (String)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td -1.02097 Tw (Figure A.6 shows the string class interface. The purpose of the string class is to)Tj 13.7398 TL -1.10551 Tw (provide a convenient set of operations for manipulating variable-length character)' -1.43237 Tw (arrays, )' 0.00002162 Tc /R19053496 12 Tf 35.45 0 Td (not)Tj 0 Tc /R18360344 12 Tf 15.3359 0 Td -1.43267 Tw ( to manage storage. The base class does not allocate or free any storage)Tj -50.7859 -13.7398 Td -1.49916 Tw (associated with the characters.)Tj 10.668 -14.6398 Td -1.32898 Tw (Three string constructors are available. The first, with no arguments, creates an)Tj -10.668 -13.7402 Td -0.171892 Tw (uninitialized string that should be assigned to another string before use. The)Tj -0.885923 Tw (second, with a character pointer, sets the string's data to the given pointer. The)' -0.776237 Tw (string's length is computed from the pointer under the assumption that the data)' -0.408723 Tw (is null-terminated. The third constructor takes a character pointer and explicit)' -1.49968 Tw (length. It does not assume the data is null-terminated.)' 10.668 -14.6402 Td 0.714878 Tw (String::string returns a pointer to the character data, which may not be)Tj -10.668 -13.7398 Td -0.0848485 Tw (null-terminated. String::length returns the number of characters in the string.)Tj 1.07639 Tw (String::null_terminated returns whether the string is already known to be)' -1.45527 Tw (null-terminated \(it does not attempt to find a null\). String::hash returns a value for)' -1.49972 Tw (the string data suitable for indexing the strings into a hash table.)' 10.668 -14.6402 Td -1.39336 Tw (The string class provides operators for assignment and comparison. The second)Tj -10.668 -13.7398 Td -0.846296 Tw (operand for these operations can be a string or a character pointer. In the latter)Tj -0.369439 Tw (case, the data is assumed to be null-terminated. String::case_insensitive_equal)' -1.49964 Tw (tests for equality ignoring the case of the characters in the strings.)' 0.000314236 Tc 377.84 -148.67 Td (A-)Tj 0 Tc 15.6602 0 Td (5)Tj ET Q 1062.9 7139.6 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 127.626 697.4 Tm -1.38864 Tw (interface Math {)Tj 8.32969 -11.5199 Td -1.38891 Tw (static float min\(float a, float b\);)Tj 11.5199 TL -1.38892 Tw (static float max\(float a, float b\);)' -1.38908 Tw (static float min\(float a, float b, float c, float d\);)' -1.38908 Tw (static float max\(float a, float b, float c, float d\);)' 16.5199 TL -1.38854 Tw (static int abs\(int\);)' 11.5199 TL -1.38846 Tw (static long abs\(long\);)' -1.38823 Tw (static double abs\(double\);)' -1.38821 Tw (static int round\(float\);)' -1.38819 Tw (static int round\(double\);)' -1.38899 Tw (static boolean equal\(float x, float y, float e\);)' -1.38897 Tw (static boolean equal\(double x, double y, double e\);)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 105.53 -16.5203 Td -1.38855 Tw (Figure A.4:)Tj 57.2402 0 Td -1.38877 Tw (Math class interface.)Tj ET Q 1062.9 5294.7 3960 10 re f* 1062.9 1926.8 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 127.626 176.12 Tm -1.38856 Tw (interface Memory {)Tj 8.32969 -11.5199 Td -1.38904 Tw (static void copy\(const void*, void* to, unsigned int nbytes\);)Tj 11.5199 TL -1.38895 Tw (static int compare\(const void*, const void*, unsigned int nbytes\);)' -1.38885 Tw (static void zero\(void*, unsigned int nbytes\);)' 0.000233889 Tc -8.32969 -11.5203 Td (};)Tj 0 Tc 98.5898 -16.5199 Td -1.38855 Tw (Figure A.5:)Tj 57.2398 0 Td -1.38869 Tw (Memory class interface.)Tj ET Q 1062.9 1053.5 3960 10 re f* Q \n \n \n \n \n-1491\n+1489\n \n \n \n \n-R36761712\n+R19628144\n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -4537,29 +4537,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 116.718 708.3 Tm -0.903002 Tw (The subscript operator allows access to individual characters. It is an error to)Tj -10.668 -13.7398 Td -1.2579 Tw (pass a negative index or an index greater than or equal to the length of the string.)Tj 13.7402 TL -0.119105 Tw (String::substr returns a new string representing the part of the original string)' -0.664141 Tw (begining at the )' 0.00001678 Tc /R36187064 12 Tf 79.3422 0 Td (start)Tj 0 Tc /R35493912 12 Tf 22.0078 0 Td -0.663992 Tw ( parameter and continuing for )Tj 0.00006517 Tc /R36187064 12 Tf 153.989 0 Td (length)Tj 0 Tc /R35493912 12 Tf 30 0 Td -0.663913 Tw ( characters. If )Tj 0.00004272 Tc /R36187064 12 Tf 75.9781 0 Td (start)Tj 0 Tc /R35493912 12 Tf 22.0078 0 Td -0.664459 Tw ( is)Tj -383.325 -13.7402 Td -1.42935 Tw (negative, the beginning position is the end of the string offset by )Tj 0.00003662 Tc /R36187064 12 Tf 314.003 0 Td (start)Tj 0 Tc /R35493912 12 Tf 22.0078 0 Td -1.42948 Tw (. If )Tj 0.00006517 Tc /R36187064 12 Tf 18.8441 0 Td (length)Tj 0 Tc /R35493912 12 Tf 30 0 Td -1.42946 Tw ( is)Tj -384.855 -13.7398 Td -1.04822 Tw (±1, then the remainder of the string is included. String::substr does not copy the)Tj -1.2246 Tw (data, it simply creates another string that points into the same data as the original)' -1.14077 Tw (string. String::left and String::right are short-hand for accessing the beginning or)' -0.978776 Tw (end of a string. String::set_to_substr, String::set_to_left, and String::set_to_right)' -1.19014 Tw (are convenience for changing a string to a particular substring instead of creating)' -1.49947 Tw (a new string.)' 10.668 -14.6398 Td -0.751724 Tw (String::search returns the index of the occurrence of the given character after)Tj 0.000314236 Tc 367.172 -483.08 Td (A-)Tj 0 Tc 15.6602 0 Td (6)Tj ET Q 1062.9 5354 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 127.626 518.84 Tm -1.3886 Tw (interface String {)Tj 0.000243717 Tc 8.32969 -11.5199 Td (String\(\);)Tj 0 Tc 11.5199 TL -1.38774 Tw (String\(const char*\);)' -1.38849 Tw (String\(const char*, int length\);)' 16.5199 TL -1.38875 Tw (const char* string\(\) const;)' 11.5203 TL -1.38852 Tw (int length\(\) const;)' -1.38805 Tw (boolean null_terminated\(\) const;)' -1.38874 Tw (unsigned long hash\(\) const;)' 16.5199 TL -1.38841 Tw (String& operator =\(const String&\);)' 11.5199 TL -1.3886 Tw (boolean operator ==\(const String&\) const;)' -1.38858 Tw (boolean operator !=\(const String&\) const;)' -1.38861 Tw (boolean operator >\(const String&\) const;)' -1.3886 Tw (boolean operator >=\(const String&\) const;)' -1.38861 Tw (boolean operator <\(const String&\) const;)' -1.3886 Tw (boolean operator <=\(const String&\) const;)' -1.38823 Tw (boolean case_insensitive_equal\(const String&\) const;)' 16.5199 TL -1.38841 Tw (char operator[]\(int index\) const;)' 11.5199 TL -1.38878 Tw (String substr\(int start, int length\) const;)' -1.38854 Tw (String left\(int length\) const;)' -1.38853 Tw (String right\(int start\) const;)' -1.38854 Tw (void set_to_substr\(int start, int length\);)' -1.3882 Tw (void set_to_left\(int length\);)' -1.38793 Tw (void set_to_right\(int start\);)' 16.5199 TL -1.38878 Tw (int search\(int start, char\) const;)' 11.5199 TL -1.38846 Tw (int index\(char\) const;)' -1.38838 Tw (int rindex\(char\) const;)' 16.5199 TL -1.38838 Tw (boolean convert\(int&\) const;)' 11.5199 TL -1.38834 Tw (boolean convert\(long&\) const;)' -1.38824 Tw (boolean convert\(float&\) const;)' -1.38823 Tw (boolean convert\(double&\) const;)' 0.000233889 Tc -8.32969 -11.5203 Td (};)Tj 0 Tc 103.585 -16.5195 Td -1.38855 Tw (Figure A.6:)Tj 57.2402 0 Td -1.38873 Tw (String class interface.)Tj ET Q 1062.9 1235.5 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 116.718 708.3 Tm -0.903002 Tw (The subscript operator allows access to individual characters. It is an error to)Tj -10.668 -13.7398 Td -1.2579 Tw (pass a negative index or an index greater than or equal to the length of the string.)Tj 13.7402 TL -0.119105 Tw (String::substr returns a new string representing the part of the original string)' -0.664141 Tw (begining at the )' 0.00001678 Tc /R19053496 12 Tf 79.3422 0 Td (start)Tj 0 Tc /R18360344 12 Tf 22.0078 0 Td -0.663992 Tw ( parameter and continuing for )Tj 0.00006517 Tc /R19053496 12 Tf 153.989 0 Td (length)Tj 0 Tc /R18360344 12 Tf 30 0 Td -0.663913 Tw ( characters. If )Tj 0.00004272 Tc /R19053496 12 Tf 75.9781 0 Td (start)Tj 0 Tc /R18360344 12 Tf 22.0078 0 Td -0.664459 Tw ( is)Tj -383.325 -13.7402 Td -1.42935 Tw (negative, the beginning position is the end of the string offset by )Tj 0.00003662 Tc /R19053496 12 Tf 314.003 0 Td (start)Tj 0 Tc /R18360344 12 Tf 22.0078 0 Td -1.42948 Tw (. If )Tj 0.00006517 Tc /R19053496 12 Tf 18.8441 0 Td (length)Tj 0 Tc /R18360344 12 Tf 30 0 Td -1.42946 Tw ( is)Tj -384.855 -13.7398 Td -1.04822 Tw (±1, then the remainder of the string is included. String::substr does not copy the)Tj -1.2246 Tw (data, it simply creates another string that points into the same data as the original)' -1.14077 Tw (string. String::left and String::right are short-hand for accessing the beginning or)' -0.978776 Tw (end of a string. String::set_to_substr, String::set_to_left, and String::set_to_right)' -1.19014 Tw (are convenience for changing a string to a particular substring instead of creating)' -1.49947 Tw (a new string.)' 10.668 -14.6398 Td -0.751724 Tw (String::search returns the index of the occurrence of the given character after)Tj 0.000314236 Tc 367.172 -483.08 Td (A-)Tj 0 Tc 15.6602 0 Td (6)Tj ET Q 1062.9 5354 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 127.626 518.84 Tm -1.3886 Tw (interface String {)Tj 0.000243717 Tc 8.32969 -11.5199 Td (String\(\);)Tj 0 Tc 11.5199 TL -1.38774 Tw (String\(const char*\);)' -1.38849 Tw (String\(const char*, int length\);)' 16.5199 TL -1.38875 Tw (const char* string\(\) const;)' 11.5203 TL -1.38852 Tw (int length\(\) const;)' -1.38805 Tw (boolean null_terminated\(\) const;)' -1.38874 Tw (unsigned long hash\(\) const;)' 16.5199 TL -1.38841 Tw (String& operator =\(const String&\);)' 11.5199 TL -1.3886 Tw (boolean operator ==\(const String&\) const;)' -1.38858 Tw (boolean operator !=\(const String&\) const;)' -1.38861 Tw (boolean operator >\(const String&\) const;)' -1.3886 Tw (boolean operator >=\(const String&\) const;)' -1.38861 Tw (boolean operator <\(const String&\) const;)' -1.3886 Tw (boolean operator <=\(const String&\) const;)' -1.38823 Tw (boolean case_insensitive_equal\(const String&\) const;)' 16.5199 TL -1.38841 Tw (char operator[]\(int index\) const;)' 11.5199 TL -1.38878 Tw (String substr\(int start, int length\) const;)' -1.38854 Tw (String left\(int length\) const;)' -1.38853 Tw (String right\(int start\) const;)' -1.38854 Tw (void set_to_substr\(int start, int length\);)' -1.3882 Tw (void set_to_left\(int length\);)' -1.38793 Tw (void set_to_right\(int start\);)' 16.5199 TL -1.38878 Tw (int search\(int start, char\) const;)' 11.5199 TL -1.38846 Tw (int index\(char\) const;)' -1.38838 Tw (int rindex\(char\) const;)' 16.5199 TL -1.38838 Tw (boolean convert\(int&\) const;)' 11.5199 TL -1.38834 Tw (boolean convert\(long&\) const;)' -1.38824 Tw (boolean convert\(float&\) const;)' -1.38823 Tw (boolean convert\(double&\) const;)' 0.000233889 Tc -8.32969 -11.5203 Td (};)Tj 0 Tc 103.585 -16.5195 Td -1.38855 Tw (Figure A.6:)Tj 57.2402 0 Td -1.38873 Tw (String class interface.)Tj ET Q 1062.9 1235.5 3960 10 re f* Q \n \n \n \n \n-1341\n+1340\n \n \n \n \n-R36761712\n+R19628144\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -4596,29 +4596,29 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R35493912 12 Tf 1 0 0 1 106.05 708.3 Tm -0.953152 Tw (the given starting position. If the starting position is negative, it is treated as an)Tj 13.7398 TL -1.40502 Tw (offset from the end of the string and the search is made right-to-left. String::index)' -1.30218 Tw (and String::rindex are short-hand for searching from the beginning and end of the)' -1.49899 Tw (string, respectively.)' 10.668 -14.6402 Td 0.728478 Tw (String::convert attempts to interpret the string as a number and sets its)Tj -10.668 -13.7398 Td -1.59039 Tw (parameter to the value. If the conversion is successful, String::convert returns true.)Tj 10.668 -14.6398 Td -0.121681 Tw (Three string subclasses of string are provided, all of which have the same)Tj -10.668 -13.7402 Td 0.0889773 Tw (constructors and operations as the base class. CopyString is a subclass that)Tj 0.110547 Tw (copies the string data when constructed and frees the storage when deleted.)' -1.06904 Tw (When the copy is made, a null is appended to ensure the data is null-terminated.)' -0.94987 Tw (NullTerminatedString is a subclass that guarantees its data is null-terminated. If)' -0.741887 Tw (constructed with a normal string, it will copy the data much like a copy-string.)' -0.164047 Tw (However, if the given string is already a copy-string, then no copy is made.)' -0.414824 Tw (NullTerminatedString is useful for passing string data to external C functions,)' -1.49947 Tw (such as printf.)' 10.668 -14.6398 Td -0.873716 Tw (The third string subclass is UniqueString, which uses a table to map identical)Tj -10.668 -13.7398 Td -1.40551 Tw (strings to the same data. Comparing unique strings for equality is fast because the)Tj -0.72766 Tw (implementation can compare pointers instead of the string data. Unique strings)' -1.49908 Tw (are not null-terminated.)' 0.00009855 Tc /R35743448 18 Tf 41.2801 TL (A.7)' 0.000125122 Tc 35 0 Td (Table)Tj 0 Tc /R35493912 12 Tf -35 -32.4 Td 0.163426 Tw (Figure A.7 shows the table class interface. Table is a generic class that is)Tj 13.7398 TL -1.22218 Tw (parameterized by a key type and a value type. The constructor is given a size for)' -0.996723 Tw (the hash table implementation. For good access performance, the size should be)' -1.49958 Tw (roughly twice the expected number of keys.)' 10.668 -14.6402 Td 0.0812892 Tw (Table::insert stores a <key,value> pair. Table::find searches an entry with)Tj -10.668 -13.7398 Td -0.466429 Tw (the given key. If such an entry exists, Table::find sets )Tj 0.000119781 Tc /R36187064 12 Tf 282.496 0 Td (value)Tj 0 Tc /R35493912 12 Tf 25.9918 0 Td -0.466361 Tw ( and returns true.)Tj -308.488 -13.7398 Td -0.749178 Tw (Otherwise, it leaves the parameter unmodified and returns false. Table::remove)Tj -0.910473 Tw (deletes a <key,value> pair from the table if one exists. Table::find_and_remove)' -1.49967 Tw (combines the find and remove operations in a single call.)' 10.668 -14.6402 Td -0.497703 Tw (If the same key is inserted more than once, Table::find will return the most)Tj -10.668 -13.7398 Td -0.43532 Tw (recently inserted value. Similarly, Table::remove will delete the most recently)Tj -1.499 Tw (inserted pair.)' 10.668 -14.6402 Td -0.796127 Tw (TableIterator allows one to iterate over all the <key,value> pairs defined in a)Tj -10.668 -13.7398 Td -1.31596 Tw (table. TableIterator is parameterized explicitly by the table type, implicitly by the)Tj -0.569739 Tw (key and value types. TableIterator::cur_key and TableIterator::cur_value return)' -0.5919 Tw (the current entry information. TableIterator::more tests if additional entries are)' -1.4996 Tw (defined. TableIterator::next moves to the next entry in the table.)' 0.000314236 Tc 377.84 -88.8801 Td (A-)Tj 0 Tc 15.6602 0 Td (7)Tj ET Q Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT /R18360344 12 Tf 1 0 0 1 106.05 708.3 Tm -0.953152 Tw (the given starting position. If the starting position is negative, it is treated as an)Tj 13.7398 TL -1.40502 Tw (offset from the end of the string and the search is made right-to-left. String::index)' -1.30218 Tw (and String::rindex are short-hand for searching from the beginning and end of the)' -1.49899 Tw (string, respectively.)' 10.668 -14.6402 Td 0.728478 Tw (String::convert attempts to interpret the string as a number and sets its)Tj -10.668 -13.7398 Td -1.59039 Tw (parameter to the value. If the conversion is successful, String::convert returns true.)Tj 10.668 -14.6398 Td -0.121681 Tw (Three string subclasses of string are provided, all of which have the same)Tj -10.668 -13.7402 Td 0.0889773 Tw (constructors and operations as the base class. CopyString is a subclass that)Tj 0.110547 Tw (copies the string data when constructed and frees the storage when deleted.)' -1.06904 Tw (When the copy is made, a null is appended to ensure the data is null-terminated.)' -0.94987 Tw (NullTerminatedString is a subclass that guarantees its data is null-terminated. If)' -0.741887 Tw (constructed with a normal string, it will copy the data much like a copy-string.)' -0.164047 Tw (However, if the given string is already a copy-string, then no copy is made.)' -0.414824 Tw (NullTerminatedString is useful for passing string data to external C functions,)' -1.49947 Tw (such as printf.)' 10.668 -14.6398 Td -0.873716 Tw (The third string subclass is UniqueString, which uses a table to map identical)Tj -10.668 -13.7398 Td -1.40551 Tw (strings to the same data. Comparing unique strings for equality is fast because the)Tj -0.72766 Tw (implementation can compare pointers instead of the string data. Unique strings)' -1.49908 Tw (are not null-terminated.)' 0.00009855 Tc /R18609880 18 Tf 41.2801 TL (A.7)' 0.000125122 Tc 35 0 Td (Table)Tj 0 Tc /R18360344 12 Tf -35 -32.4 Td 0.163426 Tw (Figure A.7 shows the table class interface. Table is a generic class that is)Tj 13.7398 TL -1.22218 Tw (parameterized by a key type and a value type. The constructor is given a size for)' -0.996723 Tw (the hash table implementation. For good access performance, the size should be)' -1.49958 Tw (roughly twice the expected number of keys.)' 10.668 -14.6402 Td 0.0812892 Tw (Table::insert stores a <key,value> pair. Table::find searches an entry with)Tj -10.668 -13.7398 Td -0.466429 Tw (the given key. If such an entry exists, Table::find sets )Tj 0.000119781 Tc /R19053496 12 Tf 282.496 0 Td (value)Tj 0 Tc /R18360344 12 Tf 25.9918 0 Td -0.466361 Tw ( and returns true.)Tj -308.488 -13.7398 Td -0.749178 Tw (Otherwise, it leaves the parameter unmodified and returns false. Table::remove)Tj -0.910473 Tw (deletes a <key,value> pair from the table if one exists. Table::find_and_remove)' -1.49967 Tw (combines the find and remove operations in a single call.)' 10.668 -14.6402 Td -0.497703 Tw (If the same key is inserted more than once, Table::find will return the most)Tj -10.668 -13.7398 Td -0.43532 Tw (recently inserted value. Similarly, Table::remove will delete the most recently)Tj -1.499 Tw (inserted pair.)' 10.668 -14.6402 Td -0.796127 Tw (TableIterator allows one to iterate over all the <key,value> pairs defined in a)Tj -10.668 -13.7398 Td -1.31596 Tw (table. TableIterator is parameterized explicitly by the table type, implicitly by the)Tj -0.569739 Tw (key and value types. TableIterator::cur_key and TableIterator::cur_value return)' -0.5919 Tw (the current entry information. TableIterator::more tests if additional entries are)' -1.4996 Tw (defined. TableIterator::next moves to the next entry in the table.)' 0.000314236 Tc 377.84 -88.8801 Td (A-)Tj 0 Tc 15.6602 0 Td (7)Tj ET Q Q \n \n \n \n \n-1678\n+1677\n \n \n \n \n-R35743448\n+R18609880\n \n-R36187064\n+R19053496\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n Type\n@@ -4655,84 +4655,84 @@\n \n Length\n \n Filter\n FlateDecode\n \n \n-q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT 0.000314236 Tc /R35493912 12 Tf 1 0 0 1 483.89 73.1801 Tm (A-)Tj 0 Tc 15.6602 0 Td (8)Tj ET Q 1043.7 6256.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R36761712 10 Tf 1 0 0 1 125.706 609.08 Tm -1.38835 Tw (unsigned long key_to_hash\(Key\);)Tj 16.5199 TL -1.38815 Tw (interface Table\(Key,Value\) {)' 8.32969 -11.5203 Td -1.3861 Tw (Table\(Key,Value\)\(int hash_table_size\);)Tj -1.38843 Tw (void insert\(Key, Value\);)' 11.5199 TL -1.38825 Tw (boolean find\(Value&, Key\);)' -1.38818 Tw (void remove\(Key\);)' -1.38787 Tw (boolean find_and_remove\(Value&, Key\);)' 0.000233889 Tc -8.32969 -11.5203 Td (};)Tj 0 Tc 16.5199 TL -1.38743 Tw (interface TableIterator\(Table\(Key,Value\)\) {)' 0.000217513 Tc 8.32969 -11.5199 Td (TableIterator\(Table\(Key,Value\)\)\(Table\(Key,Value\)&\);)Tj 0 Tc -1.38857 Tw (Key& cur_key\(\);)' 11.5199 TL -1.38802 Tw (Value& cur_value\(\);)' -1.38798 Tw (boolean more\(\);)' -1.38814 Tw (boolean next\(\);)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 104.14 -16.5199 Td -1.38856 Tw (Figure A.7:)Tj 57.2398 0 Td -1.38879 Tw (Table class interface.)Tj ET Q 1043.7 4031.1 3960 10 re f* Q \n+q 0.1 0 0 0.1 0 0 cm 0 0 0 rg q 10 0 0 10 0 0 cm BT 0.000314236 Tc /R18360344 12 Tf 1 0 0 1 483.89 73.1801 Tm (A-)Tj 0 Tc 15.6602 0 Td (8)Tj ET Q 1043.7 6256.4 3960 10 re f* q 10 0 0 10 0 0 cm BT /R19628144 10 Tf 1 0 0 1 125.706 609.08 Tm -1.38835 Tw (unsigned long key_to_hash\(Key\);)Tj 16.5199 TL -1.38815 Tw (interface Table\(Key,Value\) {)' 8.32969 -11.5203 Td -1.3861 Tw (Table\(Key,Value\)\(int hash_table_size\);)Tj -1.38843 Tw (void insert\(Key, Value\);)' 11.5199 TL -1.38825 Tw (boolean find\(Value&, Key\);)' -1.38818 Tw (void remove\(Key\);)' -1.38787 Tw (boolean find_and_remove\(Value&, Key\);)' 0.000233889 Tc -8.32969 -11.5203 Td (};)Tj 0 Tc 16.5199 TL -1.38743 Tw (interface TableIterator\(Table\(Key,Value\)\) {)' 0.000217513 Tc 8.32969 -11.5199 Td (TableIterator\(Table\(Key,Value\)\)\(Table\(Key,Value\)&\);)Tj 0 Tc -1.38857 Tw (Key& cur_key\(\);)' 11.5199 TL -1.38802 Tw (Value& cur_value\(\);)' -1.38798 Tw (boolean more\(\);)' -1.38814 Tw (boolean next\(\);)' 0.000233889 Tc -8.32969 -11.5199 Td (};)Tj 0 Tc 104.14 -16.5199 Td -1.38856 Tw (Figure A.7:)Tj 57.2398 0 Td -1.38879 Tw (Table class interface.)Tj ET Q 1043.7 4031.1 3960 10 re f* Q \n \n \n \n \n 528\n \n \n \n \n-R36761712\n+R19628144\n \n-R35493912\n+R18360344\n \n \n \n \n \n \n \n \n Filter\n FlateDecode\n Length\n-654\n+655\n \n \n-/CIDInit /ProcSet findresource begin 12 dict begin begincmap /CMapType 2 def /CMapName/R35404952 def 1 begincodespacerange <00><ff> endcodespacerange 83 beginbfrange <20><20><0020> <21><21><0021> <22><22><0022> <23><23><0023> <26><26><0026> <28><28><0028> <29><29><0029> <2a><2a><002a> <2b><2b><002b> <2c><2c><002c> <2d><2d><002d> <2e><2e><002e> <2f><2f><002f> <30><30><0030> <31><31><0031> <32><32><0032> <33><33><0033> <34><34><0034> <35><35><0035> <36><36><0036> <37><37><0037> <38><38><0038> <39><39><0039> <3a><3a><003a> <3b><3b><003b> <3c><3c><003c> <3d><3d><003d> <3e><3e><003e> <41><41><0041> <42><42><0042> <43><43><0043> <44><44><0044> <45><45><0045> <46><46><0046> <47><47><0047> <48><48><0048> <49><49><0049> <4b><4b><004b> <4c><4c><004c> <4d><4d><004d> <4e><4e><004e> <4f><4f><004f> <50><50><0050> <52><52><0052> <53><53><0053> <54><54><0054> <55><55><0055> <56><56><0056> <57><57><0057> <58><58><0058> <59><59><0059> <5b><5b><005b> <5d><5d><005d> <5f><5f><005f> <61><61><0061> <62><62><0062> <63><63><0063> <64><64><0064> <65><65><0065> <66><66><0066> <67><67><0067> <68><68><0068> <69><69><0069> <6a><6a><006a> <6b><6b><006b> <6c><6c><006c> <6d><6d><006d> <6e><6e><006e> <6f><6f><006f> <70><70><0070> <71><71><0071> <72><72><0072> <73><73><0073> <74><74><0074> <75><75><0075> <76><76><0076> <77><77><0077> <78><78><0078> <79><79><0079> <7a><7a><007a> <7b><7b><007b> <7d><7d><007d> <ba><ba><201d> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end \n+/CIDInit /ProcSet findresource begin 12 dict begin begincmap /CMapType 2 def /CMapName/R18271384 def 1 begincodespacerange <00><ff> endcodespacerange 83 beginbfrange <20><20><0020> <21><21><0021> <22><22><0022> <23><23><0023> <26><26><0026> <28><28><0028> <29><29><0029> <2a><2a><002a> <2b><2b><002b> <2c><2c><002c> <2d><2d><002d> <2e><2e><002e> <2f><2f><002f> <30><30><0030> <31><31><0031> <32><32><0032> <33><33><0033> <34><34><0034> <35><35><0035> <36><36><0036> <37><37><0037> <38><38><0038> <39><39><0039> <3a><3a><003a> <3b><3b><003b> <3c><3c><003c> <3d><3d><003d> <3e><3e><003e> <41><41><0041> <42><42><0042> <43><43><0043> <44><44><0044> <45><45><0045> <46><46><0046> <47><47><0047> <48><48><0048> <49><49><0049> <4b><4b><004b> <4c><4c><004c> <4d><4d><004d> <4e><4e><004e> <4f><4f><004f> <50><50><0050> <52><52><0052> <53><53><0053> <54><54><0054> <55><55><0055> <56><56><0056> <57><57><0057> <58><58><0058> <59><59><0059> <5b><5b><005b> <5d><5d><005d> <5f><5f><005f> <61><61><0061> <62><62><0062> <63><63><0063> <64><64><0064> <65><65><0065> <66><66><0066> <67><67><0067> <68><68><0068> <69><69><0069> <6a><6a><006a> <6b><6b><006b> <6c><6c><006c> <6d><6d><006d> <6e><6e><006e> <6f><6f><006f> <70><70><0070> <71><71><0071> <72><72><0072> <73><73><0073> <74><74><0074> <75><75><0075> <76><76><0076> <77><77><0077> <78><78><0078> <79><79><0079> <7a><7a><007a> <7b><7b><007b> <7d><7d><007d> <ba><ba><201d> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end \n \n \n \n \n \n \n \n Filter\n FlateDecode\n Length\n 529\n \n \n-/CIDInit /ProcSet findresource begin 12 dict begin begincmap /CMapType 2 def /CMapName/R35407032 def 1 begincodespacerange <00><ff> endcodespacerange 59 beginbfrange <20><20><0020> <2e><2e><002e> <30><30><0030> <31><31><0031> <32><32><0032> <33><33><0033> <34><34><0034> <35><35><0035> <36><36><0036> <37><37><0037> <38><38><0038> <39><39><0039> <41><41><0041> <42><42><0042> <43><43><0043> <44><44><0044> <45><45><0045> <46><46><0046> <47><47><0047> <48><48><0048> <49><49><0049> <4b><4b><004b> <4c><4c><004c> <4d><4d><004d> <4e><4e><004e> <4f><4f><004f> <50><50><0050> <52><52><0052> <53><53><0053> <54><54><0054> <55><55><0055> <56><56><0056> <57><57><0057> <61><61><0061> <62><62><0062> <63><63><0063> <64><64><0064> <65><65><0065> <66><66><0066> <67><67><0067> <68><68><0068> <69><69><0069> <6a><6a><006a> <6b><6b><006b> <6c><6c><006c> <6d><6d><006d> <6e><6e><006e> <6f><6f><006f> <70><70><0070> <71><71><0071> <72><72><0072> <73><73><0073> <74><74><0074> <75><75><0075> <76><76><0076> <77><77><0077> <78><78><0078> <79><79><0079> <7a><7a><007a> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end \n+/CIDInit /ProcSet findresource begin 12 dict begin begincmap /CMapType 2 def /CMapName/R18273464 def 1 begincodespacerange <00><ff> endcodespacerange 59 beginbfrange <20><20><0020> <2e><2e><002e> <30><30><0030> <31><31><0031> <32><32><0032> <33><33><0033> <34><34><0034> <35><35><0035> <36><36><0036> <37><37><0037> <38><38><0038> <39><39><0039> <41><41><0041> <42><42><0042> <43><43><0043> <44><44><0044> <45><45><0045> <46><46><0046> <47><47><0047> <48><48><0048> <49><49><0049> <4b><4b><004b> <4c><4c><004c> <4d><4d><004d> <4e><4e><004e> <4f><4f><004f> <50><50><0050> <52><52><0052> <53><53><0053> <54><54><0054> <55><55><0055> <56><56><0056> <57><57><0057> <61><61><0061> <62><62><0062> <63><63><0063> <64><64><0064> <65><65><0065> <66><66><0066> <67><67><0067> <68><68><0068> <69><69><0069> <6a><6a><006a> <6b><6b><006b> <6c><6c><006c> <6d><6d><006d> <6e><6e><006e> <6f><6f><006f> <70><70><0070> <71><71><0071> <72><72><0072> <73><73><0073> <74><74><0074> <75><75><0075> <76><76><0076> <77><77><0077> <78><78><0078> <79><79><0079> <7a><7a><007a> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end \n \n \n \n \n \n \n \n Filter\n FlateDecode\n Length\n-557\n+558\n \n \n-/CIDInit /ProcSet findresource begin 12 dict begin begincmap /CMapType 2 def /CMapName/R35407352 def 1 begincodespacerange <00><ff> endcodespacerange 63 beginbfrange <20><20><0020> <28><28><0028> <29><29><0029> <2a><2a><002a> <2b><2b><002b> <2c><2c><002c> <2d><2d><002d> <2e><2e><002e> <2f><2f><002f> <31><31><0031> <32><32><0032> <34><34><0034> <39><39><0039> <3a><3a><003a> <3c><3c><003c> <3e><3e><003e> <42><42><0042> <43><43><0043> <44><44><0044> <45><45><0045> <46><46><0046> <47><47><0047> <48><48><0048> <49><49><0049> <4b><4b><004b> <4c><4c><004c> <4d><4d><004d> <4e><4e><004e> <4f><4f><004f> <53><53><0053> <54><54><0054> <55><55><0055> <56><56><0056> <57><57><0057> <58><58><0058> <59><59><0059> <5a><5a><005a> <5f><5f><005f> <61><61><0061> <62><62><0062> <63><63><0063> <64><64><0064> <65><65><0065> <66><66><0066> <67><67><0067> <68><68><0068> <69><69><0069> <6a><6a><006a> <6b><6b><006b> <6c><6c><006c> <6d><6d><006d> <6e><6e><006e> <6f><6f><006f> <70><70><0070> <71><71><0071> <72><72><0072> <73><73><0073> <74><74><0074> <75><75><0075> <76><76><0076> <77><77><0077> <78><78><0078> <79><79><0079> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end \n+/CIDInit /ProcSet findresource begin 12 dict begin begincmap /CMapType 2 def /CMapName/R18273784 def 1 begincodespacerange <00><ff> endcodespacerange 63 beginbfrange <20><20><0020> <28><28><0028> <29><29><0029> <2a><2a><002a> <2b><2b><002b> <2c><2c><002c> <2d><2d><002d> <2e><2e><002e> <2f><2f><002f> <31><31><0031> <32><32><0032> <34><34><0034> <39><39><0039> <3a><3a><003a> <3c><3c><003c> <3e><3e><003e> <42><42><0042> <43><43><0043> <44><44><0044> <45><45><0045> <46><46><0046> <47><47><0047> <48><48><0048> <49><49><0049> <4b><4b><004b> <4c><4c><004c> <4d><4d><004d> <4e><4e><004e> <4f><4f><004f> <53><53><0053> <54><54><0054> <55><55><0055> <56><56><0056> <57><57><0057> <58><58><0058> <59><59><0059> <5a><5a><005a> <5f><5f><005f> <61><61><0061> <62><62><0062> <63><63><0063> <64><64><0064> <65><65><0065> <66><66><0066> <67><67><0067> <68><68><0068> <69><69><0069> <6a><6a><006a> <6b><6b><006b> <6c><6c><006c> <6d><6d><006d> <6e><6e><006e> <6f><6f><006f> <70><70><0070> <71><71><0071> <72><72><0072> <73><73><0073> <74><74><0074> <75><75><0075> <76><76><0076> <77><77><0077> <78><78><0078> <79><79><0079> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end \n \n \n \n \n \n \n \n Filter\n FlateDecode\n Length\n-675\n+677\n \n \n-/CIDInit /ProcSet findresource begin 12 dict begin begincmap /CMapType 2 def /CMapName/R35407672 def 1 begincodespacerange <00><ff> endcodespacerange 89 beginbfrange <20><20><0020> <21><21><0021> <23><23><0023> <26><26><0026> <27><27><2019> <28><28><0028> <29><29><0029> <2a><2a><002a> <2b><2b><002b> <2c><2c><002c> <2d><2d><002d> <2e><2e><002e> <2f><2f><002f> <30><30><0030> <31><31><0031> <32><32><0032> <33><33><0033> <34><34><0034> <35><35><0035> <36><36><0036> <37><37><0037> <38><38><0038> <39><39><0039> <3a><3a><003a> <3b><3b><003b> <3c><3c><003c> <3d><3d><003d> <3e><3e><003e> <40><40><0040> <41><41><0041> <42><42><0042> <43><43><0043> <44><44><0044> <45><45><0045> <46><46><0046> <47><47><0047> <48><48><0048> <49><49><0049> <4a><4a><004a> <4b><4b><004b> <4c><4c><004c> <4d><4d><004d> <4e><4e><004e> <4f><4f><004f> <50><50><0050> <52><52><0052> <53><53><0053> <54><54><0054> <55><55><0055> <56><56><0056> <57><57><0057> <58><58><0058> <59><59><0059> <5b><5b><005b> <5d><5d><005d> <5e><5e><005e> <5f><5f><005f> <60><60><2018> <61><61><0061> <62><62><0062> <63><63><0063> <64><64><0064> <65><65><0065> <66><66><0066> <67><67><0067> <68><68><0068> <69><69><0069> <6a><6a><006a> <6b><6b><006b> <6c><6c><006c> <6d><6d><006d> <6e><6e><006e> <6f><6f><006f> <70><70><0070> <71><71><0071> <72><72><0072> <73><73><0073> <74><74><0074> <75><75><0075> <76><76><0076> <77><77><0077> <78><78><0078> <79><79><0079> <7a><7a><007a> <7b><7b><007b> <7d><7d><007d> <aa><aa><201c> <b1><b1><2013> <ba><ba><201d> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end \n+/CIDInit /ProcSet findresource begin 12 dict begin begincmap /CMapType 2 def /CMapName/R18274104 def 1 begincodespacerange <00><ff> endcodespacerange 89 beginbfrange <20><20><0020> <21><21><0021> <23><23><0023> <26><26><0026> <27><27><2019> <28><28><0028> <29><29><0029> <2a><2a><002a> <2b><2b><002b> <2c><2c><002c> <2d><2d><002d> <2e><2e><002e> <2f><2f><002f> <30><30><0030> <31><31><0031> <32><32><0032> <33><33><0033> <34><34><0034> <35><35><0035> <36><36><0036> <37><37><0037> <38><38><0038> <39><39><0039> <3a><3a><003a> <3b><3b><003b> <3c><3c><003c> <3d><3d><003d> <3e><3e><003e> <40><40><0040> <41><41><0041> <42><42><0042> <43><43><0043> <44><44><0044> <45><45><0045> <46><46><0046> <47><47><0047> <48><48><0048> <49><49><0049> <4a><4a><004a> <4b><4b><004b> <4c><4c><004c> <4d><4d><004d> <4e><4e><004e> <4f><4f><004f> <50><50><0050> <52><52><0052> <53><53><0053> <54><54><0054> <55><55><0055> <56><56><0056> <57><57><0057> <58><58><0058> <59><59><0059> <5b><5b><005b> <5d><5d><005d> <5e><5e><005e> <5f><5f><005f> <60><60><2018> <61><61><0061> <62><62><0062> <63><63><0063> <64><64><0064> <65><65><0065> <66><66><0066> <67><67><0067> <68><68><0068> <69><69><0069> <6a><6a><006a> <6b><6b><006b> <6c><6c><006c> <6d><6d><006d> <6e><6e><006e> <6f><6f><006f> <70><70><0070> <71><71><0071> <72><72><0072> <73><73><0073> <74><74><0074> <75><75><0075> <76><76><0076> <77><77><0077> <78><78><0078> <79><79><0079> <7a><7a><007a> <7b><7b><007b> <7d><7d><007d> <aa><aa><201c> <b1><b1><2013> <ba><ba><201d> endbfrange endcmap CMapName currentdict /CMap defineresource pop end end \n \n \n \n \n \n \n \n@@ -4740,15 +4740,15 @@\n Metadata\n Subtype\n XML\n Length\n 1165\n \n \n-<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <?adobe-xap-filters esc="CRLF"?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'> <rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 10.04.0'/> <rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-03-04T00:20:46Z</xmp:ModifyDate> <xmp:CreateDate>2024-03-04T00:20:46Z</xmp:CreateDate> <xmp:CreatorTool>./appA.doc</xmp:CreatorTool></rdf:Description> <rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:98585ccc-11d9-11fa-0000-ef38b6d40710'/> <rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>\n+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <?adobe-xap-filters esc="CRLF"?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'> <rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 10.04.0'/> <rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-03-04T00:20:46Z</xmp:ModifyDate> <xmp:CreateDate>2024-03-04T00:20:46Z</xmp:CreateDate> <xmp:CreatorTool>./appA.doc</xmp:CreatorTool></rdf:Description> <rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:98585ccc-11d9-11fa-0000-6cf87e051ece'/> <rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?>\n \n \n \n \n \n Size\n 321\n"}]}]}]}]}]}]}