Adobe Systems Incorporated

Release Notes

These are the current release notes for the Adobe Source Libraries as found in the release_notes file in the distribution:

(Note: I have left Adobe and will be pursuing other opportunities.
This release is my first as an "external" opensource contributor.
Please use my mmarcus <at> emarcus <dot> org address instead of my
former address. - Mat )


2009/05/13 : 1.0.42

        - Property model library (Adam)
            Changed calculation logic so that when an interface cell is defined
            by a direct expression and by a relate clause, both expression are
            applied. Prior it was one or the other. For example:
                y <== round(y);
                relate {
                    x <== y;
                    y <== x;
            When x is of higher priority, y will be evaluated as:
            y'  = x;
            y'' = round(y')
            This avoids having to replicate filters (self referential
            expression on an interface cell) in relate clauses.
            Note that if the expression defining y was not self referential,
            then the relate clause would be ignored. For example, if y were
            defined as:
            y <== 10;
            Then y would have the value of 10 regardless of the value of x.
        	- Fixed issue introduced in 1.0.41 with incorrect poison set being
        	    calculated for invariants.
	        - Reworked invariant cells they now behave more like output cells 
	          and can be refered to in expressions.
	        - Updated the image_size example to demonstrate an ignored/disabled 
	          control (resample method when not resampling).
        - Some 64 bit fixes and cleanup.
        - Minor cleanup, performance improvements and bug fixes.

2009/02/13 : 1.0.41

        - Property model library (Adam) - rewrote main solver
	        - no longer uses exceptions as flow control.
	        - fixed bug with initializers that refer to cells with 
              define_expressions has causing the define_expressions to evaluate 
              which could refer to cells which had not been declared.
	        - exported get() member, it is now the client responsibility to wire
              sheet_t::get() to the variable lookup in the VM (this also allows
              the clients to hook the variable lookup for supporting custom
              variables). In the future the VM will be separated entirely from
              the property model library.
	        - added some more error reporting including reporting duplicate cell
        - virtual machine library
            - removed the contributing buts which were tracked through 
              calculations. The VM stack is now just a stack of any_regular_t.
            - removed the use of storing size_t in an any_regular_t in the VM 
              (was breaking serialization among other things because size_t is 
              not a C++ basic type on Win64).
        - any_regular_t
            - improved serialization by removing one heap alloc/dealloc per item
              serialized, also uses logN search for type instead of linear
                - removed the hack to handle size_t serialization on Win64.
            - serialization will now throw an exception when it encounters a 
              type other than one of the 7 CEL types (it used to assert).
            - in debug builds, the version field of the any_regular_t vtable 
              contains a short type name for debugging purposes only. 
              See the wiki documentation.

2008/12/23 : 1.0.40

        - The pmeval (property model evaluator) interpreter is ready
          for general purpose use. It has been enhanced to allow
          flexible exploration and testing of property models.
          Commands include check assertions, print statements, update,
          reinitialize, and property model dumps (showing enablement,
          contributing/intent). pmeval can be built from source (all
          platforms, including cygwinand *N*X) or downloaded from
          sourceforge for Mac or Windows.

        - Property models can also be evaluated via an experimental
          web form-based interface to pmeval.  The service, along with
          an intermediate property modeling tutorial is available
          through .

        - Rewrote enablement for the property model engine.  Enabled
          status is set to a conservative approximation of enablement
          detection (erring towards enablement): it is set to false if
          a change to the cell cannot affect the output of a correct
          sheet, and true if it *may* effect the output.
        - Replaced monitor_active with monitor_enabled (conservative
          enablement, touch_set support).  See the documentation for
          monitor_enabled in adam.hpp, and the calls to
          monitor_enabled in (APL's) widget_factory.hpp for details.
          (Note that it is incorrect to unconditionally pass NULLs to
          monitor_enabled.  The bug will manifest as incorrect
          enablement behavior in the presence of touch sets in eve

        - Fixed bug where interface cells appearing in a when clause
	  condition were not contributing.

        - New papers and presnetations at 

        - Patched boost to allow preservation of test targets (now the
        - Patched to serializes std::size_t on MSVC when compiling for
          64 bit architecture.

        - Added qualification to binary_search algorithm to remove

        - Refactored pmeval, introduced (test-only) queryable_sheet_t.
          pmeval now supports multiple input files, sheet separate
          from commands, multiple simultaneous sheets.

        - Allow monitoring of invariants under monitor_value.

        - Improved release notes and build scripts for *N*X/cygwin

    User supported libs (APL): 
        - Updated widget factory so that widgets monitor_considered
	  instead of monitor_active, to properly enable in presence of
	  touch sets.
        - Fixed reveal widget bug

        - Update so that both stlab and internal adobe frameworks can
          leverage widget_factory.hpp; also rolled in updates from
          other teams within adobe

2008/11/06 : 1.0.39

        - Added sheet_t::reinitialize(). "Input cells are
          re-initialized, in sheet order, and interface cell
          initializers are re-evaluated. Priorities are updated, but
          no callbacks are triggered. Calls to reinitialize should be
          followed by calls to update must be called, just as if the
          cells were updated by set operations on sorted ranges."
        - Adam documentaion improvements
        - Updated to (patched) boost 1.37.0
        - Added a command line property model evaluator tool, and
          programmer-oriented tutorial at:

        - New (theoretical) paper on Property Models from ACM GPCE
          2008 added to:
        - Regressions now also run under Vista 64-bit
        - Regressions now also run under Mac OS X 64-bit
        - Deprecated pin library. Replaced with clamp library. Also
	  added median(of 3) and some select algorithms.

    User supported libs (APL): 
        - Formatter improvements.

2008/09/10 : 1.0.38

        - New papers and presnetations at 

        - Major improvements to documentation structure
        - Fix 64-bit poly_test issue
        - Fixes for identity<> and pointer_to<> and their use.
        - Eliminated concept macros
        - Minor fix for static_table.hpp to include stdexcept
        - Fix for lexer to allow keywords as names, i.e. @empty.
        - Fix for MSVC compiler warning in memory.hpp (from Jon
        - Predicates for conditional relate declarations are now
          calculated up-front and cannot be dependent themselves on a
          relate declaration. 
        - Raising limit on number of interface cells to 256.
        - Added parameter to final to avoid misuse.
        - Added -L to curl commands in net setup scripts to protect
          against redirects
        - Made selection_t equality_comparable    
        - Added bool has_input(name) and bool has_output(name) to the
          property model library. 
        - removed outdated expression_filter routines; updated
          adam_tutorial output format; deleting some unnecessary
        - Cleaned out static intializers
        - Collapsed entity lookup to a single place -- removed the
          once stuff from xml_parser
        - Fixed issue with implicit casts of enum node state in
        - Fixed bug in property model library where an active monitor
          wasn't called on connect. 
        - Added code to layout library to reset metrics prior to
          calling client measure function to avoid errors where client
          code assumes defaulted value. 
        - Fixed bug with active monitor not being called on connection
          in Adam. 

    User supported libs (APL): 
        - Improvements to the expression, property model, and layout
          formatters. they print are much more readably now,
          especially with arrays and dictionaries with many items. 
        - Added shift as a modifier key to the new modifier key
        - Move controller and view concepts (compile and runtime) to
        - BBedit language modules
        - xml_to_forest test app
        - Added xml_element_forest, a utility header that round-trips
          an XML file to a forest of dictionaries; also gives the user
          the ability to hand-generate a forest of dictionaries with a
          specific format and stream out a resulting XML file. 
        - Moved functions_as_controller to widget_proxies.hpp in APL
        - Renamed to_utf* to value_to_utf* in the singleton code point
        - Removed subview factory
        - Gave behaviors the ability to have their verbs pointed to
          another callback once they've been established. This gives
          clients the ability to do more than just resize the eve layout
          at the appropriate time (e.g., to resize a parent container
          not managed by eve.) 
        - sequence_model and associated view and controller concepts
          and implementations. Multiple changes and to improve the
          overall mvc architecture of the system. Also added a
          multiplexer/demultiplexer system to allow for the routing of
          commands between the sequence_model and any attached
          sequence views and controllers.
        - dictionary_set migration from obscure widgets lib location
          to APL 
        - Added breakpoint-compatible formatting to some of the
          casting type checks 
        - Logic fix for one of the selection algorithms
        - Fixed error reporting code in Begin.
        - Added formatter_tokens to eliminate duplicate symbols when
          both formatters are included in a single project 
        - Cleaned up a lot of the serialization code, pulled out
          dynamic memory allocations, etc 
        - Added expression_filter, for the escaping and unescaping of
          xml entities in a string; useful for serialization work 
        - Fixed some of the image_t leaks under win32. Problems run
          deeper though, since the architecture fails to store
          platform resources for cleanup when bitmaps updated or when
          window closes. Deeper fixes will be required to plug the
          rest of the leaks
        - Added the ability to add 'raw' functions to the function
          pack, bypassing all the function pack magic in case you'd like
          to do the work yourself. 
        - Update example code. inlined some function_pack routines,
          and added an nbitpath helper routine to the bitpath structure 

2008/05/02 : 1.0.37
        - Update ASL to depend on boost 1.35.0
        - Patch boost 1.35.0 to fix bugs in boost threads and boost
        - Patch boost build to add a link-incompatible feature
          allowing _SECURE_SCL to be disabled, thus avoiding
          unjustifiable performance penalty on release builds.
        - Multiple net setup and build improvements.
        - Workaround the bjam MkDir bug that was causing build errors
          and the need for multiple invocations of bjam.
        - Tested against gcc 4.3.0.
        - Update ASL to depend on Intel Thread Building Blocks
          2008.04.08 stable release, now supporting atomics under ppc 32bit.
        - Patch TBB to support windows/cygwin-based gcc 4.1.1 and
        - Fix bug on 64 bit little-endian machines in closed_hash
        - Documentation improvements and corrections for any_regular_t
          and some algorithms
        - Fixed a potential memory leak in any_regular_t
        - Fixed thread safety issue with forest<>::size()
        - New binary_search (unlike std::binary_search, this is useful)
        - Added gather algorithm (thanks to Marshall Clow)
        - Started to break-up functional -
        - Deleted find_first_of_set.hpp - use find_if with is_member
        - Change sheet and basic sheet API to remove
          attach_view/detach_view in favor of signals
          mechanism. Remove function_as_view since function/bind
          results can once again be used directly. poly_view is now
          optional for clients who find it more convenient.
        - Change adam API to remove
          attach_controller/detach_controller in favor of signals
          mechanism. poly_controller is now optional for clients who
          find it convenient.
        - Remove dependence of adam_tutorial on APL and move to
          ASL. Add visual project for adam_tutorial.
        - Rewrite copy_on_write to use a well-defined binary
          representation, add custom allocator support, move to
          version1 namespace.
        - Added script to update a directory in p4 based on "offline"
          changes, and other scripts to automate documentation update
        - Fixes to vector and string for windows min/max problems,
          thanks to Jesper.
        - Add check ensuring operator== interoperability of forest
          iters and const iters.

        - Add property_model_formatter.hpp and layout_formatter.hpp
          for parsing layout and property model descriptions into a
          data structure instead of to the widget factory.
        - Add layout_tidy and property_model_tidy which check layout
          and property model definitions validity.

2008/03/20 : 1.0.36
        - version_1 types (replace version_0 types) - better, defined binary 
        layout and carry allocator for applications with replaced new/delete.
        - capture_allocator, an std::allocator compatible allocator which 
        carries a paired new/delete.
        - Allocator support in closed_hash_set<>, closed_hash_map<>, and 
        - Vastly improved move library (Thanks to Dave Abrahams!).
        - Vastly improved copy-on-write library (now uses move library to 
        reduce number of increment/decrements).
        - Bug fix in layout library that caused containers with the width 
        driven by the frame width to layout children incorrectly.
        - Bug fix in forest::erase where the beginning of the erased range has 
        a lower depth then the end of the range.
        - Forest test cases and minor fixes to forest types.
        - Misc bug fixes.
        - Fixes to build and distribution tools.
        - Fixed search on documentation site to point to stlab and not 
        opensource domain.

2008/01/28 : 1.0.35
        - More property model library simplifications and the removal 
        of "weak" which never worked.
        - Bug fix for copy-on-write assignment which was leaking.
        - Work on runtime_cast<> for any_regular_t.
        - Fixed a bug with edit_number and disabled items with multiple units.
        - Fixed a bug with image_size (introduced in some recent cleanup).
        - removed adobe/algorithm/assign.hpp
        - improved rvalue assignment in some classes
        - renamed copy_bound to copy_bounded
        - minor improvements to operator+() for strings
        - updated doxyfile for latest doxygen
        - More algorithm documentation clean-up. Greately improved erase/erase_if 
        container algorithms and container storage type function.
        - Templatize erase_if test cases
        - Initial work on forest unit_test

2008/01/03 : 1.0.34
        - Lots of clean up and removed defered initialization of
        property model cells.
        - changes to the initializers for the property model library
        you must now call upate() prior to monitoring or attaching a
        view (you'll get an assert if you don't) and the monitor
        function (or view) is called immeditely when attached with the
        current state.
        - support for stateful function object (hash, key function,
        and compare) to closed_hash_set
        - hash_index class which is similar to table_index but
        implemented with a hash_set instead of a vector - 
        there is stills some room here to generalize the two.
        -  Changed ordering in compressed_pair so it actually
        compresses on Windows

        - Makefile and documentation fixes. Intel fixes.

2007/12/06 : 1.0.33
        - Microsoft Visual Studio 2008 support
        - ASL now uses Intel Thread Building Blocks Atomics (for copy_on_write)
        - XCode 3.0 Support
        - ASL 64 bit Mac support (However, APL still Carbon)
        - Mac shared library support
        - Mac universal build support update (to appear in boost 1.35)
        - ASL Command Shell environment for windows
        - lower_bound_n, upper_bound_n, and equal_range_n added
        - forms of lower_bound, upper_bound, and equal_range which take a key
        - removed bound_if (use new form of lower or upper_bound instead).
        - minor work around to gcc optimizer bug in name_t
        - removed count_min_max (bad algorithm - use min/max_element and count instead).
        - boost patches for unused variables
        - significant boost patches for bjam to support new builds
        - split the main test into small ones
        - removed unused Jamfile
        - updated GIL to version 2.1.2 (see GIL release notes for more details)

2007/11/01 : 1.0.32
        - With most of the re-factoring completed we're focusing on 
        documentation and test cases (with some code cleanup). As a first pass 
        we've "surfaced" all of ASL in the table-of-contents and are working to 
        organize and structure the documentation. Our plan file on the wiki has 
        more detailed information.
        - Finished removal of dependencies on boost::serialization.
        - Working to add Vista64 and Leopard64 to our supported builds.
        - Fixing bug in insert_parent for empty range.
        - (re)added overlay support for eve_evaluate.
        - Fixed a minor issue with type_info.
        - Made any_regular_t robust against struct padding/alignment settings.
        - Fixed a big-endian bug in dynamic_channel_reference
        - fixed C4503 warnings
        - removed ALL the unnecessary pragma warning directives from GIL sources
        - Added BitField parameter to bit_aligned_pixel_reference (there are 
        rare cases where it cannot be automatically inferred). Also replaced 
        tabs with spaces.
        - Added a BitField template parameter to bit_aligned_pixel_reference. 
        (There are rare cases when it cannot be inferred)
        - fixed incorrect header files for std::bad_cast
        - changed int to std::ptrdiff_t in utilities.hpp and 
        iterator_from_2d.hpp for problems under 64-bit platforms
        - removed several extra semi-colons after GIL_CLASS_REQUIRE
        - Updated to GIL 2.1.1 (see GIL release notes for more).

2007/09/06 : 1.0.31
        - Major re-factoring of the libraries (and supporting
        scripts/projects, etc.) so that adobe_source_libraries
        (ASL/GIL), adobe_platform_libraries (APL), and boost_libraries
        (Boost) are all peers at the top level directory. In upcoming
        releases we will be focusing on "completing" the core ASL
        portion of the library, with full documentation and test
        suites. ASL contains the layout engine, property model,
        algorithms, poly library and other components.  APL contains
        the "platform" widget code and other miscellaneous pieces. APL
        depends on ASL depends on Boost.

        - Added back a BitField template parameter to
        channel_reference and dynamic_channel_reference to fix an
        endianness bug.
        - iterator_from_2d now maintains the current y coordinate. It
        is needed in rare cases to properly determine equality of two
        - kth_element_type, kth_element_reference_type and
        kth_element_const_reference_type are now specified outside the
        - Fixed copy_pixels to compile on Intel compilers.
        - Resample (and thus resize) now allows the source and
        destination to be incompatible
        - Fixed VC projects to compile with the new paths of ASL and

        - now lives under .../boost_libraries at the root level

2007/08/02 : 1.0.30
        - Improved documentation and tutorial for move library.
        - Property model library (Adam) now filters input cells from 
        - Minor bug fixes for pair and closed_hash.
        - Fix for preset saving.
        - More examples for Begin and some bug fixes.
        - Moved GIL out of the third party directory so that it no longer needs 
        to be overlaid with
        an install of Boost.
        - Added code snippet examples to documentation.
        - Swapping the template arguments for color_element_type, 
        color_element_reference_type and 
        color_element_const_reference_type to take ColorBase first. This makes 
        them consistent with 
        the other similar metafunctions.
        - Fixed a bug in default channel conversion when the channel min value 
        is not zero.
        - Made any C pointer to a pixel model HomogeneousPixelBasedConcept and 
        HasDynamicXStepTypeConcept. Also made pixel_reference_is_mutable be 
        automatically inferred.
        - Added pixel_reference_is_proxy and changed is_pixel_reference to 
        - Moved to Boost 1.34.1

2007/07/05 : 1.0.29
        - We didn't make it as far as we would have liked for this release with 
        vacations and the holiday - but we did manage to get some important bug 
        fixes in so we're going to go ahead with the release.
        - Initial fix for visibility queue update issue with multiple optional 
        panels toggled at once.
        - Fixed a type cast issue in unicode.hpp.
        - Added several functions to string_t and string16_t: clear, reserve, capacity, append, 
        push_back, operator+=, and operator+ (as a free function). operator+() relies on the move 
        library for efficient operation even when chained.
        - Bug fix for any_regular_t. x.assign(u); where x and u are any_regular_t no longer results 
        in an any_regular_t inside an any_regular_t - it just does a simple assignment.
        - Killed const_once_name_t (use aggregate_name_t instead).
        - Fixed a bug with the parser/virtual_machine with mismatched types in an any_regular_t that 
        caused a failure on Win64.
        - platform_image now at parity between mac and windows.
        - removed 'extern 'C'' from the platform cursor code.
        - fix to catch all throws out of make_cursor
        - added scrubability to image widget, bound via bind_controller to a dictionary
        - Minor edits for widgets to compiler for Win64.

        - Made any C pointer to a pixel model HomogeneousPixelBasedConcept and 
        HasDynamicXStepTypeConcept. Also made pixel_reference_is_mutable be automatically inferred.
        - Added pixel_reference_is_proxy and changed is_pixel_reference to pixel_is_reference
        - Swapping the template arguments for color_element_type, color_element_reference_type and     
        color_element_const_reference_type to take ColorBase first. This makes them consistent with     
        the other similar metafunctions.
        - Fixed a bug in default channel conversion when the channel min value is not zero.
        - Added Doxygen code snippets for many GIL constructs
        - Minor fixes to web page and compile issue on VC7
        - GIL 2.1 release <>

2007/06/14 : 1.0.28
        - Pardon our dust... We delayed this release so we could finish the work on the version_0
        libraries - we believe the code is now complete but we still have documentation to write
        (and not all the test cases are written, although Begin uses the libraries quite heavily).
        We will continue to work on test cases and documentation for version_0 for 1.0.29 although
        we aren't expecting any code changes, and certainly no breaking changes. A quick overview:
            -- move library: This reduces the overhead of copying objects with remote parts by
            automatically moving from r-values. Move sinks can accept movable r-values without
            -- typeinfo library: (static) RTTI that doesn't depend on compiler RTTI for binary
            -- any_regular library. Any regular is now movable and a move sink and leverages
            typeinfo library and removes dependency on v-table layout for binary compatibility.
            -- closed_hash library: An implementation of closed_hash_set and closed_hash_map. These
            containers are movable and move sinks.
            -- vector library: A high performance vector container which is movable and a move sink.
            -- string library: Added a string_t and string16_t which sit on the vector
            implementation and are movable objects.
            -- name library: added an aggregate_name_t which replaces const_once_name_t (which is
            now deprecated and will be removed in 1.0.29). To construct an aggregate_name_t simply
            write "aggregate_name_t key_width = { "key_width" };" There is no need for once
            initialization (nor is it possible). Note that the c_str() for names are no longer
            guaranteed to be unique.
            -- array_t and dictionary_t are now typedefs for a vector<any_regular_t> and
            closed_hash_map<name_t, any_regular_t>. These are no longer copy-on-write objects and
            now rely on move to reduce the number of copies made.
        - The version_0 libraries are not the whole story though. There has been quite a bit of work
        in the poly library including:
            -- added poly_regular and poly_copyable
            -- poly is now a movable type
            -- simpler poly framework (eliminated multiple inheritance and poly_state)
            -- reduced heap allocations in poly
            -- better swap support
        - Pulled boost serialization support. ADOBE_STD_SERIALIZATION is very minimal (will be
        addressed in 1.0.29).
        - Added an ignore_unused() function that can make conditional usage of parameters a little
        easier to manage (thanks to Jeremy Siek).
        - Fixed a bug in message_handler_t (thanks to Eric Berdahl)
        - Fix for memory leak of cursors on Mac (thanks to Jesper Bache)
        - Moved to Boost 1.34.0.
        - Improved Macintosh event handler classes (thanks to Eric and Foster).
        - Start of drag and drop support as a sub-controller for widgets (Foster's efforts).
        - Some directory structure cleanup.
        -  Added kth_channel_view (like nth_channel_view, but operating on heterogeneous views).
        Added anonymous color space of 1 channel (which made resample work on grayscale pixels). 

2007/05/03 : 1.0.27
        - clean up of file and class names. concept header files end in _concept.hpp. any_->poly_.
        - eliminate unnecessary heap allocation from attach_view
        - Eliminate copy of Placeable inside of layout engine. Rename add_view_element to
        - Added high performance vector for 'version 0' binary compatibility.
        - added funcion_as_poly_view to allow boost::bind to work with adam w/o needing to create
        - added no-debug-symbols config file to xcode steup; reworked the widget factory mechanism
        to add another layer to customizability for the clent
        - added vm extensions to support the loading of images
        (adobe/future/virtual_machine_extension); also added View-concept modeling to the image
        widget, so you can now specify a cell that Holds An Image In An Adam Sheet and it'll be
        reflected in the image widget (with auto-relayout)
        - Pulled out the parameter dictionary from eve into  eve_evaluate - new function called
        apply_layout_parameters can be used prior to adding items to eve. This removes the last
        vistages of parser/layout library entanglement. Yea! Doing this as part of improving RTL
        support. Much cleanup of header file includes came along (please watch your includes!)
        - Added explicit default construction for eve_client_holder::root_display_m data member.
        This allows client code to detect that the data member has not yet been assigned -- that
        there is not yet a root node, as opposed to the data member holding uninitialized garbage.
        - Update C++ conformance ofr gcc 4.3.0. Improve conceptgcc concept support
        - Add small object optimization to poly<> 
        - Moving close_hash implementation for new version_0 work.
        - remove equality_comparable requirement from poly<>
        - Adding find_first_of_set() - suggestion came in an e-mail for this algorithm.
        - Fixed bugs in asl_net_setup.bat (thanks to Michael Marcin)

        - Improved the speed of image creation (avoids unnecessarily default-constructing every
        pixel). Added operator*(int, point2)
        - Calling the destructor of each pixel when destructing an image. Also fixed a potential
        memory leak if the pixel default constructor throws.

2007/04/05 : 1.0.26

        - replaced any_object and supporting machinery with poly<>
        template. Poly supports creation of regular runtime
        polymorphic value_types.
        - any_view, any_placeable, any_controller, any_key_handler, any_sequence_view, any_iterator
         upgraded to use the new poly<> mechanism
        - Add basic concept checking to any_regular.
        - Improve hybrid C++/C++++ concept support.
        - Removed superfluous uses of adobe:: throughout the codebase.
        - Simply swap: now ASL swap calls are always unqualified,
        (this is possible thanks to using std::swap; declaration in adobe/implementation/swap.hpp)
        - algorithm.hpp split into finer grained files
        - removed ISOLATION_AWARE macro from the MSVC build; also added inline editing of values to
        the list manager on win32; also cleaned up some message forwarding code
        - array_t::assign now has the same semantics as std::vector<T>::assign
        - adding array_t::assign and array_t::resize implementations (they'd been missing all this
        time!) -- thanks to Eric Berdahl for catching this one (and many others).
        - Various minor bug fixes, mostly with virtual image, make_step_iterator and tiff_io.
        - Major cleanup of the test files, especially image.cpp. Now using checksums to compare
        images with reference data. No external library dependencies are needed to build GIL
        regression tests (in the default mode), but that also means GIL i/o is not being tested.
        - Removed the large number of reference images.
        - MAJOR GIL update. GIL 2.0 released. 
        GIL is now in the boost tree.
        See a better formatted version of this description here:
        GIL 2.0 Changes
        This document outlines the more significant changes in GIL introduced in version 2.0
        Overall changes:
        Added deprecated.hpp - a file that maps many of the deprecated names to current ones.
        Including it will help porting your code to GIL 2.0. After porting to GIL 2.0, however, make
        sure that your code works when this file is not included.
        File structure:
         - Directories follow the boost convention
         - Removed (flattened) the 'core' directory
         - Different models are usually now split in separate files
         - Renamed some files to be more consistent
         - Renamed classes, functions and template arguments with longer but clearer and more
         consistent names.
        - Now compiles with GCC 4.1.1.
        Changes in image, image_view, any_image and any_image_view: There are no longer global
        functions get_width(), get_height(), get_dimensions(), num_channels(). Use class methods
        width(), height(), dimensions() instead.
        Changes in models of pixel, pixel iterator, pixel locator, image view and image:
        There used to be different ways of getting to a pixel, channel, color space, etc. of an
        image view, pixel, locator, iterator and image. Some classes were using traits, other -
        member typedefs. In GIL 2.0 all pixel-based GIL constructs (pixels, pixel iterators,
        locators, image views and images) model PixelBasedConcept, which means they provide the
        following metafunctions:
        And for homogeneous constructs we also have:
        To get the pixel type or pixel reference/const reference type of an image, image view,
        locator, and pixel, use member typedefs value_type, reference and const_reference.
        Changes in locator, image, image_view, any_image and any_image_view:
        Removed dynamic_x_step_t, dynamic_y_step_t, dynamic_xy_step_t, and
        dynamic_xy_step_transposed_t as member typedefs of locators and image views. Instead, there
        are separate concepts HasDynamicXStepTypeConcept, HasDynamicYStepTypeConcept,
        HasTransposedTypeConcept which all GIL provided locators, views and images model. Those
        concepts require a metafunction to get the corresponding type. Analogously, all GIL pixel
        iterators model HasDynamicXStepTypeConcept.
        - Fixed some bugs in defining reference proxies. Also added the required swap function for
        reference proxies, since the std::swap default does not do the right thing.
        - Added metafunctions iterator_type_from_pixel and view_type_from_pixel to allow creating
        standard iterators and views associated with a pixel type.
        -The design guide and tutorial have been updated with GIL 2.0 changes. The syntax used in
        concepts is updated with the latest concepts proposal (though there is still some syntax we
        are using that is probably not legal)
        -The Doxygen documentation has been updated and restructured, so that concepts and models
        are closer in the browse tree.
        Channel changes:
        - The channel min/max value is now part of the channel traits. For all built-in types the
        channel range equals the physical range (as determined by numeric_traits<T>::max()).
        - Added scoped_channel_value, a channel adaptor that changes the operational range of a
        channel. bits32f is defined as a float with range 0.0 to 1.0
        - Added packed_channel_value, packed_channel_reference and packed_dynamic_channel_reference
        - models of channels operating on bit ranges. (see below for an example)
        - Added support for channel_convert between any of the GIL provided channel types. The
        operation is also consistent - conversion is done as a linear mapping that maps the min/max
        to the min/max
        - Added a comprehensive regression test for channels
        Pixel changes:
        - Major redesign of pixel-level constructs. Got rid of the channel accessors. color_base is
        renamed to homogeneous_color_base and is defined once, not for each color space. In general,
        the work needed to define a new color space is very minimal. Here is all you need to create
        an RGB color space with RGB and BGR ordering:
        // create channel names
        struct red_t {};
        struct green_t {};
        struct blue_t {}; 
        // create a color space
        typedef mpl::vector3<red_t,green_t,blue_t> rgb_t;
        // create layouts (color space with associated channel ordering)
        typedef layout<rgb_t> rgb_layout_t;
        typedef layout<rgb_t, mpl::vector3_c<int,2,1,0> > bgr_layout_t;
        - As the example shows, the color space now only specifies the set of channels. Their
        ordering in memory is specified by a layout. pixel is now templated over the channel value
        and layout:
        typedef pixel<bits8, bgr_layout_t> bgr8_pixel_t;
        - Color base is a first-class concept. Think of color base as a bundle of color elements. A
        pixel is a color base whose color elements are channels. A planar pixel iterator is a color
        base whose elements are channel iterators. A planar pixel reference proxy is a color base
        whose elements are channel references. A planar image can be represented as a color base
        whose elements are image planes, etc.
        All former pixel-level algorithms and accessors now operate on color bases. The elements of
        a color base can be accessed by physical or semantic index or by name. Example:
        rgb8_pixel_t rgb8(1,2,3);
        bgr8_pixel_t bgr8(rgb8);
        // Physical, semantic and named element accessors.
        assert(at_c<0>(bgr8) != at_c<0>(rgb8));
        assert(semantic_at_c<0>(bgr8) == semantic_at_c<0>(rgb8));
        assert(get_color(bgr8,blue_t()) == get_color(rgb8,blue_t()));
        // Physical element accessor whose index is specified at run time. 
        // Only works for homogeneous bases
        assert(dynamic_at_c(bgr8,0) != dynamic_at_c(rgb8,0));
        assert(bgr8[0] != rgb8[0]); // for pixels only, operator[] does the same
        - channel names can no longer be accessed as members of the pixel (my_pixel.gray = 0). Use
        get_color instead, as shown above.
        equal_channels    static_equal
        copy_channels      static_copy
        fill_channels          static_fill
        for_each_channel   static_for_each
        min_channel          static_min
        max_channel        static_max
        get_nth_channel     dynamic_at_c
        planar_ptr   planar_pixel_iterator
        planar_ref   planar_pixel_reference
        PixelConcept   HomogeneousPixelConcept
        HeterogeneousPixelConcept   PixelConcept
        - added metafunctions to get the k-th element of a color base (or its reference):
        kth_semantic_element_type<rgb8_pixel_t,1>::type green = semantic_at_c<1>(my_rgb);
        my_pixel::num_channels is no longer available. To get the number of elements of a color base
        use the metafunction size:
        BOOST_STATIC_ASSERT(gil::size<rgb8_pixel_t>::value == 3);
        - Added heterogeneous_packed_pixel, a model of a pixel whose channels are bit ranges. For
        example, here is how to define a 16-bit RGB pixel in the '565' format:
        typedef const packed_channel_reference<uint16_t, 0,5,true> rgb565_channel0_t;
        typedef const packed_channel_reference<uint16_t, 5,6,true> rgb565_channel1_t;
        typedef const packed_channel_reference<uint16_t,11,5,true> rgb565_channel2_t;
        typedef mpl::vector3<rgb565_channel0_t,rgb565_channel1_t,rgb565_channel2_t> 
        typedef heterogeneous_packed_pixel<uint16_t,rgb565_channels_t,rgb_layout_t>             
        - most color base algorithms now can take heterogeneous pixels (i.e. pixels each channel of
        which may have a different type). color_convert can operate on heterogeneous pixels with the
        exception of to/from RGBA.
        - got rid of pixel_traits. Use nested typedefs value_type, reference and const_reference or
        metafunctions implementing PixelBasedConcept (see below).
        - No more LAB and HSB color space, because there is no color conversion support implemented
        for these. New color spaces can be added with just a few lines of code, as shown above.
        - added a comprehensive regression test for pixels
        Pixel iterator changes:
        - got rid of pixel_iterator_traits. Use std::iterator_traits, PixelBasedConcept
        metafunctions or the following new metafunctions for pixel iterators:
        In addition, iterator adaptors have these new metafunctions:
        - renamed pixel_image_iterator to iterator_from_2d
        Pixel locator changes:
        Renamed is_contiguous to is_1d_traversable.
        Renamed membased_2d_locator to byte_addressable_2d_locator.
        Image view changes:
        - added algorithms uninitialized_fill_pixels and uninitialized_copy_pixels. 
        - added method is_1d_traversable.
        Image changes:
        -Images don't allow for getting access to the pixels - only through views. Got rid of the
        ability to directly navigate the pixels of an image. So image no longer models STLís random
        access container concept
        -The class image is no longer templated over the image view. It is now templated over pixel
        value and a Boolean indicating if the image is planar:
        typedef image<rgb8_pixel_t, true> rgb8_planar_image_t;
        -Added support for creating images with a new value to fill. 
        -Images now invoke the default constructor of the pixels they allocate.
        -Renamed resize_clobber_image to Image::recreate. Also allowed for optionally specifying the
        initial value.
        Dynamic image changes:
        -No cross_vector_image_types and cross_vector_image_view_types. Instead, just create a
        vector to explicitly enumerate your types. This resulted in removing a lot of MPL related
        code and simplified significantly the design.
        - Improved display_number implementation on both mac and windows to improve measurement.
        Also added the long-needed metrics::measure_text so we can measure strings without having to
        dance around widgets to make it happen
        - Now, instead of a global registry, there are these factory objects one can construct.
        There's also the 'default ASL' factory that is used by default, but the user can copy it and
        modify their copy to provide custom implementations. Clients can hold several of these factories
        and use them interchangeably as they so desire. Each factory, then, is a context of widgets, and
        by applying a different context to a layout, you get a different platform view constructed out
        the other end.
        - More list model work; selections can now be appended, removed, and set for the
        sequence_model; you can erase items by selection now, instead of by index (much more flexible);
        list.cpp for both mac and windows has been updated to the new system, though win32 still doesn't
        do a) in place editing, and 2) drag and drop support; fixed a couple bugs in the selection code
        - added an omitted overlay_factory function prototype
        - full erase implementation pushed to win32 list widget now.
        - widget_factory updates, and some more sequence model work.
        - visible_update_queue processing moved to be a function of the views of the model, not the
        controllers. This is a significantly more correct behavior.
        - the 'using CEL' macro in presets_common has been replaced with ADOBE_STD_SERIALIZATION
        - checkbox and slider on mac now properly respond to size attribute
        - fixed an issue where mac's panel was growing by one after every refresh of the dialog

2007/03/01 : 1.0.25
        - Extended the bjam test suite to include additional tests
        - Added adobe::sequence_model_t and supporting headers and sources. The sequence_model_t is
          a notify-on-write structure that manages a sequence of homogeneous items; it gives clients
          the ability to attach controllers and views to the model, allowing for correct architecture
          of a sequence-based MVC system. While not complete, it is a step in the right direction.
        - Introduced adobe/selection.hpp; adobe::selection_t is a container of indices that
          represent a selection. The intent is that this data strucuture will be used as the basis for
          a selection_model_t (or augmented to the sequence_model_t structure), as the architecture of
          a sequence-based MVC system calls for the need to model the selection of that sequence as
        - Added adobe/algorithm/selection_algorithms.hpp, a collection of algorithms centered around
          the new Selection concept. This includes selection_stable_partition, a modified version of
          stable_partition_selection, and its supporting algorithms.
        - Cleaned up the top level Jamfile
        - Changes to support gcc-4.1.1 and conceptgcc a5
        - Removing manifest nonsense, including manifest.jam, in favor of a patch to msvc.jam
        - Manifest file nonsense has been resolved, resulting in Win64 support
        - The boost patch file has been updated; please repatch your boost distribution
        - Added bjam code to support manifest file auto-embedding at link time (msvc)
        - Altering the language slightly in the contributing page
        - Began documentation for adobe::sequence_model and supporting data structures and algorithms
        - Began documentation for adobe::selection_t and supporting data structures and algorithms
        - Added stub headers for the platform-specific requirements within the widgets library
          (cygwin/other platform support)
        - Setting up the stub variable for widgets' Jamfile (cygwin/other platform support)
        - Simplify assemblage to be a collection of nullary function objects invoked in LIFO order
          upon destruction.
        - Added a list implementation for mac and windows (the mac is in a much better place than
          win32, though).

2007/02/01 : 1.0.24
        - Improved build scripts a little
        - Added Alex Stepanov's reduction algorithm and supporting files as described at

        - Added partition_selection_copy
        - Added algorithms for rotate, split_selection, and stable_partition_selection

        - Simplify overloading and namespace strategy: remove namespaces fn and adl, move to direct
          overloading strategy. Begin elimination of qualified calls.

        - Fixed typos
        - Updated the web page to include GIL wish list
        - Added link to GIL discussion forum from the GIL web site

        - Updated the read_me
        - Updated copyrights

2007/01/04 : 1.0.23
        - Implement updated namespace strategy for widget library
        - Fixed a memory leak in the mac locale code

        - Added a path to the even client holder so subdialogs can be
          created relative to the files that are opened.
        - GIL: Posted a minor GIL patch (allowing again for channels to be
          assigned to grayscale pixels)

        - New resource lookup scheme- it searches the whole stack of paths
          to find a resource instead of suing the top one only; also fixed a
          nasty subdialog issue for windows on the mac.
        - layout_attributes migrated from the concrete widget to a table in
          the widget factory registry
        - fix for bug 1533328 ] Overriding type 2 debouncing when
          debounce_t is in ca
        - default_extents removed; added layout_attributes to the factory
        - is_container query moved from the widget implementations to the
          widget factory registry

        - Allows channels to be assigned to grayscale pixels again.
        - Minor fixes to color_convert_view for dynamic images
        - Fixes for GCC 3.4 (adding any_color_converted_view)
        - Fixed assigning channels to grayscale pixels. Fixed dynamic image
          color converted view.

2006/12/07 : 1.0.22
        - Migrated modal_dialog_interface documentation from the wiki to
          the sources
        - build.bat now bails if it finds a space in the directory
          structure in which it lies
        - Added adobe/future/platform_primitives.hpp, along with
          platform-specific subheader files for carbon and win32
        - Added Adam reentrancy check to update for debug builds
        - Moved alert.cpp to widgets, fix adam-tutorial jamfile include
        - A proper respect for the owner window implemented for
        - Adobe folder now created if the presets widget needs it
          (thanks to Alan Shouls)
        - Adding a dialog_parent variable to pick_file, pick_save
        - Preset subdialogs now pass in a handle to the currently open
          dialog though handle_dialog
        - Removed display_t tree node wrapping nonsense
        - Removed yet more files, including client_assembler
        - Cleaned up display::insert<HWND>
        - ui_core_common, uncategorized_functions, and client_assembler
          all gone. We hardly knew ye.
        - Eliminated invisible_parent on win32!
        - Broke window_server out of client_assembler
        - ui_core.* and ui_core_implementation.* were removed
        - widgets' platform controls are now created at display::insert
          time instead of when the widget_t is ctor'd. This allows proper
          ownership to be established for a widget on win32, as well as
          several drastic code reductions and other improvements
        - removed control_t and event_dispatcher from win32
        - Show focus rects when tabbing through dialogs on win32

2006/11/02 : 1.0.21
        - Boost patches. Please update your boost installation
        - Objective-C and Objective C++ compiler support for bjam under
        - Added any_key_handler.cpp, key_handler.cpp and keyboard.hpp for
          generic keyboard event handling
        - Making sure _all_ normal dictionary types serialize correctly via
        - Added a small tool to convert from CEL to the new xml archival
          format via boost::serialization
        - adobe::value_t has been replaced by adobe::any_regular_t
        - Number formatting (via number_formatter_t) has been greatly
          improved on win32 and mac to account for the currently selected
          machine locale. Changing the locale mid-execution of the application
          also updates the number formatters.
        - added a dynamic_cast of sorts for the Carbon CFTypeRef
          'polymorphic' type; added locale-specific information to the
          current_locale dictionary in Carbon to match win32
        - adding a 'first time' flag to debounce to override type 2
          debouncing the first time -- when the sheet initially sets the value
          of the view, type 2 debouncing is enabled. Then the immediately
          following operation by that controller is debounced mistakenly. This
          shorts that effect.
        - Update build.bat for VC8
        - Add flexibility to vsprops chain (thanks to Scott Byer)
        - Removed a mac os minimum version flag that didn't belong in the
          top level Jamfile because we have since specified them as features
          in darwin.jam (by Hubert Figuiere)
        - Added the ability to set property model and leyout sheet cells
          directly from within the Begin editor.
        - Added several new examples to stretch the functionality of some of
          our more recent widgets.
        - Basic Accelerator (Alt-mnemonic) behavior in place for modal
          dialogs on win32; Underlined letters don't appear when a certain
          OS setting is checked, however; improvements still need to be made.
        - Default push button now looks like one on win32.
        - Enable tabbing through fields on win32, with proper field order.
          Many widgets types now work properly, though there are still some
          issues with checkboxes and sliders. I had hoped that asking Foster
          to add a call to IsDialogMessage to prior to Translatemessage would
          do the trick, but that in itself was not sufficient. It turns out
          that Win32 uses z-order of visible widgets with WS_TABSTOP for tab
          order. But our calls to SetParent when inserting into the display_t
          hierarchy were messing up the z-order. That is, SetParent forces the
          widget to the front of its peer group. Now we call SetWindoPos after
          SetParent to put the widget at the bottom of the z-order, so that
          ultimate z-order matches creation order (amongst peers). This worked
          well except for some compound widgets that did things in the other
          direction. The compound widget display_t inserts were also adjusted.
          Now new_doc and image_size ase following correct tab order. To Do...
          still need to work on highlighting, group order, and parent vs.
          owner issues for handle_dialog, but I beleive that the code in its
          present form is stable enough for milestone release.
        - modal dialog change -- now supports tabstops.
        - win32 edit text field now loses its selection when it goes out of
        - fixed the issue where a slider with a negative number snaps
        - fixed an issue on win32 when edit_number prefilter failed the
          value would still be sent to the sheet.
        - added disabled state for presets for when the bind_output cell is
          invalid by means of an invariant
        - result cell not required now for modal_dialog_interface -- you'll
          just get nothing back.
        - edit_number better handles the case when its text is in an
          intermediate state (e.g., blank)
        - holding down shift while scrubbing jumps the delta by a factor of
        - better autorelease code for the cocoa bridge; it still says we're
          leaking a resource, though; I can't figure out why
        - better scrub behavior on mac for edit_number label
        - edit number label scrubby behavior working on win32.
        - custom cursor support for Mac (via Cocoa bridge) and win32 (win32:
          max 32x32 size cursor)
        - Popups now set themselves to 'custom' should there be no option
          they have that matches the cell they represent.
        - fix for edit_number trying to display a value for which it has no
          unit specified
        - presets are now views upon the result cell of the dialog -- they
          set themselves to a preset automatically if the state of the result
          cell matches one of them.
        - In a modal dialog, arrow up/down in an edit_number field
          increments the value
        - edit_number now communicates the selected unit through a cell in
          the layout sheet. This allows for multiple edit_numbers to be bound
          to the same cell, as well as allowing one to set which unit should
          show up at the initial opening of the dialog.
        - basic_sheet now has contributing(); handle_dialog uses this to get
          the layout display state
        - adding min/max values to edit number widget
        - With popups, if the value of the popup exists in the new set of
          menu items when the menu item set is repopulated, the menu item
          corresponding to the last value is selected
        - Improved modifier key handling
        - top-level window no longer 'scoots' in some cases when the client
          application munges with the window origin (by Scott Byer)
        - Added boost::serialization support. Enabling old serialization
          support under the conditional ADOBE_STD_SERIALIZATION
        - Many, many minor bug fixes on both platforms for varying issues.
        - Improvbed handle_dialog behaviors
        - Added a display_number widget -- a label bound to a cell for the
          purposes of displaying a numeric value
        - edit_number debounce_type now inits to
          std::numeric_limits<debounce_type>::min() to prevent an
          initialization to 0 from getting debounced
        - removal of widget-side localization of strings; pushed to vm via
          localize() operation
        - adding localize() to the VM -- also setting up presets so one can
          localize their internal strings
        - Widgetes: win32 label_t no longer snaps to the top-left corner of
          its parent window when measured
        - Fix Add presets "font" assert on win32
        - Fix for bug #156752 : up arrow key in edit num doesn't
          always add 1
        - Added scrollwheel support to edit_number on win32
        - Add parent parameter to handle_dialog (WIN32 only)
        - removed the static-text -> edit-text theme remapping that took
          place in the win32 label initializer, in favor of the better (and
          more general) remapping in metrics.cpp
        - revamped the resource system, combining both platforms under a
          single image format (targa), but it's easy to change. Cleaned up
          some APIs as a result of not needing to pass around a working
          directory. Also eliminates the need for resources to be built into
          the app -- just put them all in a directory and point the library to
          that directory, and Bob's your uncle.
        - adding a resource root path API
        - Clean up widget-factory (renaming factory routines), cleanup
          insert<> for display_t a little bit, remove stale overlay code.
        - Updated web site with latest fixes
        - Fixes to channel_max_value (compile error on VS2003). Fixes to
          resampling code in the numeric extension.
        - submitted a safer version of bilinear sampler
        - fixed two glitches in the implementation of resize_view() and
        - Updated web page with regression tests and code samples, and with
          the latest GIL
        - Minor update to tutorial
        - Minor fixes to pixel (fixed gray_pixel_t::operator== with channel)
        - Updated the examples directory and the regression tests directory.
          Provided a more generic pixel constructor
        - added explicit channel type casting for gray-scale pixels into the
        - test submitted the place holder for the directories.
        - initial submission of gil/test
        - examples added "return 0;" to each of the example files in example
        - completed an initial version of GIL example tests. These are the
          ones we have now: affine convolution histogram interleaved_ptr
          mandelbrot packed_pixel resize x_gradient.
        - documentation: Adding integration with Vigra example
        - Adding an example of packed pixel model
        - fixed some warnings for release builds under Mac.
        - fixed return types for channel_min_value() and channel_max_value()
        - Updated stand-alone version with latest changes
        - Fix to physical channel accessors of planar reference
        - Fixed up include files in i/o. Changes to nth_channel_view
        - Fixes to code bloat reduction mechanism
        - Fixed a 64-bit issue in numeric extension
        - Update to the web page. Added the numeric extension
        - Fixed a bug happening when taking nth-channel view of virtual
        - Making gil_reinterpret_cast_c for constant casts
        - numerics: simplified interface of convolution with fixed kernel
        - Cleaned up #defines (prefixed all with GIL_ and #undef-ed the temp
          ones). Replaced reinterpret_cast with static_cast since the former
          is implementation-dependent.
        - propagate pixel_traits into the numeric extension
        - Added pixel_traits. Updated the documentation accordingly.
        - Making point2::operator[] alignment-safe
        - added different versions of copy_channels(), fill_channels(),
          generate_channels(), for_each_channel() and transform_channels()
        - swapped the order of source and destination pixels in
          copy_channels(). Now source pixel is before destination pixel
        - changed the name of equal_to() to equal_pixels()
        - Changing the template arguments from THIS_STYLE to ThisStyle
        - More cleanup of kernel
        - Simplifications to the numeric extension
        - added generate_pixles() (algorithm.hpp)
        - a better version of GIL_FORCEINLINE (gil_config.hpp)
        - added one header file (locator.hpp)
        - added generate_channels() (pixel_algorithm.hpp)
        - added versions of for_each_channel() that take input pixels by
          reference instead of const reference (pixel_algorithm.hpp)
        - Added numeric extension which is intended to be the place for
          numeric image algorithms. Currently, we provide correlations and
          convolutions with fixed-size and variable-size one-dimensional
          kernels and image re-sample.
        - Consistently using mpl::bool_ as the superclass for compile-time
        - Fixed member initialization ordering in rgba-variant color spaces.
        - Simplified some color conversion stuff. Updated the documentation
          with the color conversion changes. Made NO_ASL to be determined
        - MAJOR update (overhaul of GIL color-convert mechanism)
        - GIL now has a new infrastructure for doing color conversion which
          accepts use-defined conversion objects. These objects would work not
          only for use-defined pixel types but also for GIL built-in pixel
          types, i.e. the user can now overwrite the behavior of GIL built-in
          color conversions. Under the new infrastructure, the ONLY
          requirement for color conversion objects is that they have
          operator() defined for source and destination pixels that passed in
          for conversion. Such operator is invoked as void operator()(const
          SRC& src,DST& dst). All color-conversion related GIL structs and
          functions have been updated to conform to this new infrastructure.
          GIl still provides simple built-in conversions and overloads for
          functions to use the built-in ones.
        - moved planar_xxx_view for various color spaces out of
          image_view_factory.hpp to the own files. For instance:
          planar_hsb_view() is now in hsb.hpp instead of
        - moved color_convert_deref_fn from color_convert.hpp to
        - added a template argument to color_convert_deref_fn
        - moved the definition of _color_converter out of pixel.hpp into
        - added color_converted_view() which accepts use-defined
          color_conversion objects
        - in color_convert.hpp we added an overload for
          color_converted_view() which makes use of GIL default
        - changed the syntax for color_converter. Now it takes two
          arguments: source and destination and does not return anything
        - added color_converter_unary which is a metafunction that can
          convert a general color-conversion object into a unary function
          given the destination type
        - added a non-templated color-conversion objects
          (default_color_converter) based on color_converter
        - updated copy_and_convert_pixels() to be aware of user-defined
          color-conversion objects
        - added an overload for copy_and_convert_pixels() to use GIL default
          color-conversion objects
        - removed throw(...) in the generic implementation of
          channel_multiply(). Instead, we leave the function un-defined for
          unknown types. This way, we will get a compiler error instead of a
          run-time exception
        - updated ALL io functions (PNG,JPEG,TIFF) to make them aware of
          user-defined color-conversion objects
        - updated related places in dynamic extension
          (copy_and_convert_pixels, etc)
        - updated the test file
        - Added NO_ASL in the GIL stand-alone version
        - Fixed numerous small inconsistencies and typos in the code and
          documentation. Added some example code. Got it to compile on 64-bit

2006/09/07 : 1.0.20
    property_model (adam.hpp):
        - Changed how contributing values are reported - much more precise though
        still not perfect (will change again when the new propery_model library is
        complete). This removed the need for current_mark() and the array of touched cells.
        - Changing the way the generated IDE libraries link to Begin (XCode); we
        used to link the libraries to those libraries that depended upon them
        directly; now we hold off any linking of all static libs until we get to
        the top of the build hierarchy (that is, the application). This is to
        cut back on potentially serious symbol conflicts.
        - Adding long branching option to xcconfigs
        - Extending the list of configurations for XCode (from 2 to 8)
        - Adding rset, a bidirectional lookup table good for a relatively small
        number of entries
        - Fixed a bug in enum_ops regarding unary -
        - adobe::regular_object has been renamed to adobe::any_object
        - adobe::number_formatter_t was extracted from the UI Core into a standalone
        set of sources
        - Introduced the controller, view and placeable headers, their any_*
        counterparts, and concept checking.
        - Begin elimination of client_assembler and ui_* files, breaking out widgets
        and, separately, their factories to reduce concrete widget dependencies on
        high level ASL components.
        - Factor out edit_text edit_num from client_assembler.
        - Eliminate some stale files, begin uniformazation of factory mechanism.
        - Added an exists() function for associative containers.
        - Updated documentation and added an example for any_iterator.
        - Added a build_docs perl script and updating the doxyfile a bit, too, in
        order to ease the process of building the documentation with known warnings
        - Minor fix to make number parsing properly locale agnostic. Need better
        number parsing code.

        - Extending read support of tiff files
        - Small typos to tutorial/design guide
        - Adding support for DeviceN images of up to 5 unnamed channels. Providing
        default typedefs for signed channel types.
        - Refactored the locator model so that creating virtual image views is easy.
        - Added as an example a virtual view of the Mandelbrot set.
        - Added file virtual_locator.hpp (see below for more)
        - There is a new concept, PixelDereferenceAdaptorConcept. It is a unary
        function that can be applied upon derefencing a pixel iterator/locator. Its
        argument may be anything and its result type must model PixelConcept
            template <boost::UnaryFunctionObject D>
            concept PixelDereferenceAdaptorConcept {
                typename const_t;         where PixelDereferenceAdaptorConcept<const_t>;
                typename value_type;      where PixelValueConcept<value_type>;
                typename reference;       where PixelConcept<reference>;      // may be mutable
                typename const_reference; where PixelConcept<const_reference>;// must not be mutable
                static const bool is_mutable;
        - Provided a few models:
          - nth_channel_deref_fn:   Returns a grayscale pixel of the N-th channel of
          a given pixel type
          - color_convert_deref_fn: Returns the source pixel color-converted to a
          given destination pixel type
          - deref_compose:          Composes two pixel dereference adaptors. Very
          similar to std::unary_compose, but also propagates the typedefs.
        - Abstracted out common pixel locator functionality in a base class,
        pixel_2d_locator_base. There are now two concrete subclasses, memory-based
        locator, membased_2d_locator (which was the old pixel_2d_locator) and
        virtual_2d_locator. Both model PixelLocatorConcept. The base class provides
        defaults for many of the methods and typedefs required by the
        PixelLocatorConcept. Subclasses may override some with faster
        - Locator's old dynamic_step_t is replaced by four typedefs: 
             - dynamic_x_step_t:            // a locator whose Y iterator can have a dynamic step
             - dynamic_y_step_t:            // a locator whose X iterator can have a dynamic step
             - dynamic_xy_step_t:           // a locator both of whose iterators can have a dynamic step
             - dynamic_x_step_transposed_t: // dynamic_xy_step_t that also has the X and Y iterators swapped
            (The equivalent changes are made to image_view and any_image_view models and concepts)
        - Locators and image views have the following new factory struct inside
        (part of the concepts):
            template <typename DEREF>
            struct add_deref {
                typedef ... type;
                static type make(const this_t& loc, const DEREF& nderef);
        where 'this_t' is the encompasing class, a locator or an image_view and
        DEREF models PixelDereferenceAdaptorConcept. It allows us to construct the
        type of (and an instace of) a locator / image view that invokes the given
        derefence adaptor upon dereferencing.
        - Iterators have the equivalent factory struct, except that it is
        free-floating because iterators may be pointers:
            template <typename IT, typename DEREF>
            struct iterator_add_deref {
                typedef ... type;
                static type make(const IT& it, const DEREF& d);
        - RandomAccess2DLocatorConcept now requires additional constructors/methods:
        - locator::locator(const locator& loc2, y_coord_t y_step);
            Makes a locator just like the given one except it has additional step
            vertically. Only valid for locators that have dynamic step in Y
        - locator::locator(const locator& loc2, x_coord_t x_step, y_coord_t y_step,
        bool transposed=false); Makes a locator just like the given one except it
        has additional steps horizontally and vertically. Only valid for locators
        that have dynamic step in both X and Y. In addition transposed must be true
        if and only if the locator is of transposed type (i.e. of type where X
        navigates vertically and Y horizontally)
        - bool locator::is_contiguous(x_coord_t width) const;
            Determines whether incrementing an x_iterator positioned at the last
            pixel of a row will move it to the first pixel of the next row, i.e. if
            the image is contiguous. Some algorithms may use this fact to provide
            faster versions. It needs to know the number of pixels per row (width).
        - Virtual locators are usually not contiguous whereas sometimes memory-based
        - y_coord_t locator::y_distance_to(const locator& loc2, x_coord_t xDiff) const;
            Returns the vertical distance between this and another locator from the
            same image view given their horizontal distance.
        - The following memory-based methods and constructors are moved to the
        memory-based locator (and are no longer part of PixelLocatorConcept)
                std::ptrdiff_t         locator::row_bytes();
                std::ptrdiff_t         locator::pix_bytestep();
        - Similarly, the corresponding methods are no longer part of
        ImageViewConcept and are removed from image_view:
                image_view::image_view(const point_t& sz, const x_iterator& x_it, coord_t row_bytes);
                image_view::image_view(coord_t width, coord_t height, const x_iterator& x_it, coord_t row_bytes);
                std::ptrdiff_t         image_view::row_bytes();
                std::ptrdiff_t         image_view::pix_bytestep();
        - The image view factory methods now use the new interface for locators and
        image views and can work for virtual image views as well.
        - flipped_left_right_view's return type is VIEW::dynamic_x_step_t;
        flipped_up_down_view's return type is VIEW::dynamic_y_step_t subsampled_view
        and rotated180_view return VIEW::dynamic_xy_step_t. rotated90cw_view,
        rotated90ccw_view and transposed_view return
        VIEW::dynamic_xy_step_transposed_t since they also swap the X and the Y.
        - color_converted_view uses the add_deref factory struct to add a color
        conversion dereference adaptor to the given view (unless the color
        conversion is a no-op)
        - nth_channel_view uses the add_deref factory struct to add an
        nth_channel_deref_fn dereference adaptor, which returns a grayscale pixel of
        the N-th channel of the source. For performance, it still has
        specializations for memory-based views to return a simple view or a step
        view, but it can now work with virtual images as well.
        - The image class assumes the locator is memory-based and has access to
        memory-specific methods such as row_bytes(), pix_bytestep(), etc. So do the
        factory methods interleaved_view and planar_xxx_view.
        - Provided an implementation for a virtual image view (new file
        virtual_locator.hpp). To create a virtual image view one needs to
        instantiate the image view with a virtual locator and provide a function
        object (model of PixelDereferenceAdaptorConcept) to be invoked upon
        dereferencing. The function object takes a point (the current coordinates)
        and returns a pixel (const) reference. The virtual image view uses
        position_iterator for the X and Y iterators - an iterator that maintains its
        - Added metafunctions for pixel references (analogous to the metafunctions
        for iterators, locators, views, images):
            - pixel_reference_type and derived_pixel_reference_type for constructing
            - pixel_reference_is_basic, pixel_reference_is_planar,
            - derived_iterator_type for constructing iterators
            - also added is_pixel_reference and make_pixel_reference for easy
            conversion between values and references
        - Various other changes:
             - The dereference_iterator_adaptor now accepts a
             PixelDereferenceAdaptorConcept as the function object. It dereferences
             the given iterator before invoking it
               (dereferencing used to happen inside the function object which had
               its own advantages)
             - Removed the pixel_data_is_real bool constant from pixel iterator's
        - Cleaned up the image.cpp test file. Removed testing stuff that is not
        released. Added an implementation of virtual image using Mandelbrot set and
        included it in the tests.
        - Also uncommented other tests commented out by Hailin and made them compile
        and run properly.
        - Fixing a few outdates examples in the documentation
        - Some fixes to doxygen warnings + updating external documentation.

        - Adding label to reveal widget
        - Fixed the transparent scrubby slider so it moves with the label widget to
        which it is bound
        - You can now change the value of an edit_number field with the scroll
        wheel. Holding down the option key multiplies the increment amount by 10.
        you can specify the increment amount in the eve declaration of the
        edit_number field. (scroll wheel support is mac-only for now)
        - two-tiered presets for mac and windows
        - Initial removal of value_t in favor of model_type for concrete widgets
        - Added load/add/delete preset functionality
        - Added default presets to the preset widget implementation; it uses the
        resource directory for the widget to get the defaults
        - Added widget factory support headers
        - Selecting a popup's menu item by typing on the keyboard now works on win32

2006/08/03 : 1.0.19
    Adam (property_model):
        - API names are being refactored to reflect a model-centric view of
          the MVC system
        - Rename set_model_value to attach_setter
        - Rename monitor to set_model_value
        - Deferring token initialization to first use (removing from static
        - Using external polymorphism (view_t) for views instead of using

        - FLTK support has been dropped
        - Changed the type of the lex and the xml parser to take unsigned
          char* pointers instead of char*; this permits std::isspace, et al,
          to work without needing a cast
        - Adding const declarations to file_slurp's empty() and size()
        - Added adobe/localization.hpp, a resource registrar/provider of
          localization strings

        - Adding adobe::debounce_t as a general standalone header
        - Fix for win32 image_t implementation to get the new targa code
        - Fix for bug 1533374: Icons not drawing properly
        - Fix for bug 1533440: empty_containers tab group not wide
        - Fix for bug 1533240: Win32 Clicking in page of trackbar
          breaks inequality example
        - Fixing up edit_number handling when not bound to any item
        - adobe::popup_t has been pulled from client_assembler and put into
          its own set of standalone sources
        - Fix for bug 1530593: text wrap broken in win32
        - Created adobe/future/carbon, a directory with some utilities that
          came out of the widgets work that might be useful elsewhere.
        - Moving carbon event handler to adobe/future/carbon
        - Altering adobe::labelt_t::name_m on win32 so it measures properly
        - Transparent scrubby sliders for Carbon edit_number fields. We
          still need to be able to specify the min, init and max bounds in the
          eve definition, though
        - Added increment support for edit_number widgets via the arrow keys
          (specified by increment in the eve declaration)

        - Moved multimedia GIL documeentation to the //media/... depot

2006/07/06 : 1.0.18
        - Added a couple more macro tests to future/endian.hpp (for Mac)
        - Fix for SourceForge bug 1514948 :
          any_iterator<...>::implementation_t lacks a virtual dtor
        - MSVC 7.1 compatibility has been reinstated (thanks to Andy Little
          for the push)
        - Improved future/iomanip_pdf.hpp code
        - Improved future/iomanip_asl_cel.hpp code to produce correctly
          round-trippable serializations of the basic adobe types (dictionary,
          array, name, and value).
        - Replace layout_attributes_t parameter to measure routines with
          extents_t. Move layout_attributes_t adjustments to default_extents()
          for now.
        - Fix for SourceForge bug 1492999 : Problems building 1.0.16 on
        - Fix if/else type error in checkbox_control example
        - Improved error message handling from OS routines on Win32
        - Extended "My Dialog" a bit to include alt_text and multiple button
        - Binding OK in the opening "My Dialog" to the output again, so
          something comes up in the results
        - Image Size example updated with Tooltips
        - Boost patch update; Please repatch your Boost distribution.

        - Universal Binary building working again on the Mac with XCode 2.3
        - Updating the minimum operating system requirements in order to
          build begin on the Mac; also added a blurb in the readme to that
        - Fix for SourceForge bug 1514410 : zuidgen not building on Mac OS X
        - We have a new Wiki! Hopefully this one will fare better than the
        - Many devil-in-the-details documentation updates (thanks to Mike
          Engler for looking over the docs so thoroughly)
        - Updating CSS for Doxygen 1.4.7
        - Removing generated GIL docs from the html directory -- they are
          generated and uploaded directly to the standalone site now
        - Tweaks to the readme to make more explicit the need to replace a
          string in a pseudo-URL
        - Documentation:
            - Removed GIL docs from the main opensource site; referencing
              the standalone GIL site now (
            - Added a Breeze presentation of GIL
            - Fixed an include bug in documentation
            - Updated GIL stand-alone documentation to use tar.gz in
              addition to zip
            - Fixed backslash in doxygen specification
            - Updated main.dox so that the ASL version of GIL will have the
              same page as before
            - Added doxygen documentation for the I/O extension
            - Updated the tutorial and design guide with the I/O extension
              and the changes in metafunctions
        - Simplified color spaces a bit, fixed a small bug in I/O and some
          more work on the test files to use the new I/O
        - Added two missing forward declarations in pxiel_algorithm.hpp
        - Fixed an incorrect referenec to jpeg_read_support in
          jpeg_io_private (should be jpeg_read_support_private)
        - I/O Update. Merged the read_and_convert files into the templated
          I/O files. Moved ASL I/O into a separate extension, asl_io
        - Removed the immutable image concept.
        - Removed the ability to do math operations on pixels (and planar
        - Updated the test files to compile without image_io.hpp.
        - Added support for reading and color converting images for all
           three image types. The main interfaces are
            - png_read_and_convert_view()
            - png_read_and_convert_image().
        - Small fixes in png_io.hpp, mainly comments
        - I/O Added boilerplates to I/O files
        - Major cleanup of I/O extension:
            - Created a file_mgr class that all I/O classes subclass from.
              It handles properly opening and closing a FILE. That simplified
              a lot of code that used to do low-level I/O
            - Removed intermediate global private I/O functions - they added
              unnecessary complexity
            - All the compile-time format checks now happen at the first
              line of the public functions. Removed any other places (in
              private) that do that
            - Removed lots of obsolete code in jpeg_io_private
            - BUG: Added a check in jpeg read view to throw if the view
              dimensions don't match the file
            - Removed the validity check API for png, because it was
              inconsistent with the other formats. It is now invoked every
              time you open a file for read and exception is thrown if the
              file doesn't work. We no longer need non-standard API for png
              (passing around the number of read bytes for example). Validity
              can be added back for all files by simply creating the reader
              class and catching any exception that it may throw.
            - Made resize_clobber_image reallocate only if the dimensions
              don't match. Removed that check from the I/O code
            - BUG: Added error checks for every call to a TIFF function
        - In dynamic_io files:
            - Moved all format checker predicates outside and before the
              corresponding dynamic read class (some were inside, some were
              after the class)
            - Created a method write_view in each dynamic_writer class - it
              corresponds to "read_image" in the dynamic reader classes
            - The dynamic writers now subclass from the corresponding writer
              classes (jpeg_writer, tiff_writer, png_writer). This is so that
              the code matches with the dynamic readers
            - Added quality parameter for the dynamic reader
            - BUG: Moved the apply_operation function object as a separate
              object outside the class. This is because apply_operation takes
              it by value. Passing the heavyweight reader/writer class was a
              bad idea - for example, its destructor cleans up I/O which used
              to cause a crash.
            - Simplified the six function objects into one generic one and
              moved it for now into io_error (the only file shared by all)
        - I/O Update:
            - Added reader and writer classes to have better exception safety
            - Fixed some other exception safety issues
            - Cleaned up the code
        - Updated tutorial and made the API more consistent to use .x() to
          get x-iterator and .x_pos() to get the x coordinate
    XML Parser:
        - Added extensions to provide for pseudo full-xml-document parsing
          (by Eric Berdahl)
        - Added extensions to handle properly-formed xml comments found
          during a parse (by Eric Berdahl)
        - Added bjam test suite and documentation for xml_parser_t (by Eric
        - Added logic to xml_parser_t::is_bom to recognize utf16 boms and to
          throw an exception when they are encountered. (by Eric Berdahl)
        - Migrated ASL implementation-detail xml_element_parser.hpp to
          first-class header xml_parser.hpp
    Widgets (UI Core):
        - Added a reveal widget. See

        - Added a general-use preset widget. See

        - Added general tooltip functionality to both Mac and Win32 widget
          sets. While not all widgets support tooltips yet, adding support is
          relatively easy. See

        - Rewrote metrics system on Win32 to remove object inheritance,
          thereby increasing dispatching performance and readability.
        - Tweaked the metrics code to return valid values in the case of a slider.
        - Fix edit_number alignment bug on windows
        - Fix for SourceForge bug 1179547 : link widget does not draw link icon
        - UI Core place() (aka set_bounds) calls now take place_data_t
        - Fixed a shifty label issue when it was being recalculated
        - Fixed a nasty heap violation in mac/metrics.cpp (by Eric Berdahl)
        - Figured out the resources issue on win32- the external bitmap
          files are no longer needed as a sibling to the final binary.
        - Set up the resources section of the adobe widgets library
        - Added error detection in convert_utf and win32 error message
          formatter (by Mike Engler)

2006/06/01 : 1.0.17
        - Eliminated eve's boost::signals client communication mechanism
          in favor of a Regular Object based mechanism (see for example:
        - We have migrated to Perforce as our source code management solution
        - Greatly improved the speed of the net_install scripts by
          extracting boost once, not twice
        - Created the p4checkout scripts for *nix and Win32 to allow for
          anonymous Perforce checkout access
        - Support for MSVC 7.1 has been dropped.

        - Updating the Begin Jamfile to link statically with the C++
          library (Mac OS X, XCode 2.3)

        - Boost patch update; Please repatch your Boost distribution.
        - Removed the requirement that there be a source and a dest
          directory to patch boost

        - Initial update of eve tutorial dox for layout_element. Still
          in progress...
        - Add layout_element_t documentation to eve.dox
        - CSS overhaul: faster and cleaner now, though may need some
          prettyness later
        - Updates to contributing documentation and policy, the read me,
          and the structure of the main web site
        - Made the readme file markdown-formatted and added an HTML
          version of it

        - Image align
        - Made num_channels constant available in locator, image_view and image
        - Added a PDF version of the new tutorial; split
          any_image_view.hpp out of any_image.hpp
        - Added resize_clobber_image for any_image
        - Tutorial updated and rewritten
        - Adding for_each_pixel_position and transform_pixel_positions.
          Adding "f" for floating point channels.
        - Fixing Doxygen errors
        - copy_view -> copy_pixels, copy_and_convert_view ->
          copy_and_convert_pixels, fill_view -> fill_pixels,
          transform_view -> transform_pixels, resample_view ->
        - New GIL has a new image io extension. 
            - This extension is in charge of reading and writing
              various image files.
            - Currently, we support JPEG, TIFF and PNG through
              interfacing with libjpeg, libtiff, libpng and zlib.
            - New formats will be added in the future to deal with
              other image formats.
            - Both static typed and dynamic typed images/views are supported.
            - Check out the installation notes (install.txt) for how to
              obtain individual libraries and how to use the new io

        - Fix control leak in factory

        - Bringing xcode projects up to 2.3
        - New xcconfig architecture for the 2.3 projects -- one
          top-level configuration file that selectively includes
          subconfiguration files based on the type and settings of your
        - More darwin-specific features to in the top level Jamfile

2006/05/04 : 1.0.16
        - adobe/future/file_monitor.hpp was added; a utility for
          Mac/Win32 that runs a callback when a specified file is modified
          on-disk by a 3rd party.
        - Began support for building and binding against Lua
          ( To activate it you must download Lua and
          place it in /third_party/lua_tp/lua, and activate its building
          (see project-root.jam on how to do this).
        - Added adobe/algorithm/filter.hpp suggested by a question from 
          Vladimir Samarskiy.
        - Fix for guide lists being appended instead of copied.
        - Fixed a bug where making a change in the Begin IDE would cause
          a relayout in the dialog.
        - Fix for bug [ 1475350 ] win32\label.cpp CreateWindowEx
        - The top-level ASL Jamfile has been modified so that you can
          specify --asl-all-boost from the command line to build all boost
          libraries that need to be built. Alternatively, you can specify
          one or more --asl-boost-<library> to build a specific <library>
          within boost. The build will first build the boost files
          requested, then build ASL (including any boost libraries that
          ASL may need.) Examples:
            - bjam --asl-all-boost # builds all of Boost and all of ASL*
            - bjam --asl-boost-regex # builds Boost Regex and all of ASL*
            - bjam --asl-boost-date_time release # builds release
              version of Boost Date Time and all of ASL*
                * = Also builds the Boost libraries upon which ASL
                depends (currently filesystem, signals, and thread)
        - Note that you cannot build a specific subproject of ASL and
          use the --asl-* construct at the same time. To wit:
            - bjam --asl-boost-date_time adobe/test/begin #
              "--asl-boost-date_time" is ignored
        - Added several documentation templates for use when documenting
          ASL components
        - View, Controller, and Placeable concept documentation drafted
        - Improvements to the forest documentation, including examples
        - Added revisions of the SGI STL documentation on the site.
        - Other general cleanup.
        - _MAJOR_ improvements to GIL-s run-time type specification. It
          is now possible to specify a vector of allowed image types
          directly when defining any_image (and equivalently for
          any_view). You can use mpl::vector or your own type that must
          model a few simple metafunctions.
        - You can also define implicitly the types of allowed images by
          as a cross-product of dimensions by specifying each dimension
          separately, for example [{8-bit, 16-bit} and {rgb,cmyk} and
          {planar+interleaved}] results in eight images.
        - You can also define type sets as unions of other type sets,
          for example a cross product plus an enumeration of image types.
        - Algorithms taking variants can auto-generate the appropriate
          return variant type. For example, passing any_view to
          subsample_view will return any_view over step view types.
        - Variants can now be used in nth_channel_view and
        - Any_image and any_view are now subclasses of variant, which
          makes the code more readable and type-safe. Some member typedefs
          are defined. For example any_image<T>::view_t is the
          any_image_view class with corresponding view types.
        - The concept_space GIL extension is removed.
        - Added reduce and reduce with variant. Created a macro for
          standard GIL typedefs. Removed the TypeVector abstraction
        - Moved runtime-instantiated image support into a new GIL
          extension, dynamic_image
    Layout Engine (Eve):
        - Bug fix for frames (top of frame used as bottom).
        - Minor changes to Eve API suggested by Ralph Thomas to allow
          layout dimentions to be provided by evaluate. Also allows width 
          and height to be supplied independently for both  evaluate and adjust.

2006/04/10 : 1.0.15
        - Fix cmath.hpp for gcc 3.4 and bug with name hiding.
        - Added adobe::behavior_t, a tree based defered processing mechanism used for queuing
          function in predefined order of execution.
        - Alert API now has a fixed number of buttons (3) and the API is cleaned up to reflect that.
    Layout Library (Eve):
        - Significant overhaul of guides to support mixed right-to-left (RTL) and
          left-to-right layouts as well as the adding support for constructing reversed layouts.
          See <>.
        - The guide rework for RTL also addressed other issues. Guides are now properly suppressed
          for items which are aligned centered or proportional, leaf node guide suppression now
          works correctly. See the align_reverse and align_right test example for Begin.
        - Many changes to the ui core layout element concept design and implementation. Only a
          handful of the ui core widgets are moved over to the new design, and it is likely to stay 
          that way until the design is shaken out a little further.
        - Added a widget_factory_registry, where UI widget developers will register their widgets 
          in order that they may be used by Eve.
        - Added controller.*pp to the ui core.
        - Fixed a bug where the file contents wouldn't show up properly when the file is resident
          only in memory (the initial temp state).
        - Hide/show working with new behavior system -- multiple window support too.
        - Support for deferred window deletion upon closing of a dialog. This fixes
          bug 1436580.
        - Building bjam with the release variant automatically forces fat binary building. (Darwin)
        - Multithreaded builds are now default instead of required in top level jam file
        - Updated documentation for circular_queue library.
        - DOT graphs removed from ASL documentation
        - Other documentation tweaks and updates
        - Renamed recur{} in pixel.hpp to struct channel_recursion{}
        - Renamed set_channels to fill_channels and set_val to copy_channels
        - Changed the implementation of recur (or channel_recursion) and min_max_recur to stop at 0
          instead of -1
        - Removed max_channel_index from pixel{} as it is not used any more
        - Removed operator+(), operator-(), operator*() and operator/() from pixel.hpp. However,
          operator+=(), operator-=(), operator*=(), operator/=() are kept.
        - Added bits64 (which is double) to channel.hpp
        - Changed r,g,b for rgb and bgr to red, green, blue and changed r,g,b,a for rgba to
        - Changed c,m,y,k for cmyk to cyan, magenta, yellow and black
        - Changed l,a,b for lab to luminance,a,b
        - Changed per_channel_op to for_each_channel and per_channel_set_op to transform_channels
        - bgra is now inside GIL core (removed the extension). However, it is not yet added as part
          of any_image, any_view
        - In general, constness rules have changed at the pixel level. Constness used to be defined
          as having "const T" as the channel type template parameter.
        - "const T" is no longer used anywhere (whereas "const T*" and "const T&" are still used).
          For example pixel<const T,CS> is no longer legal; const pixel<T,CS> should be used 
        - Const planar reference is still pixel<const T&, CS>
        - Interleaved const iterator is const pixel<T,CS>* (not pixel<const T,CS>*).
        - Planar const iterator is planar_ptr<const T*,CS> (not planar_ptr<const T, CS>)
        - planar_ptr now takes channel iterator type (not channel type). It could be T* or const T*
        - planar_ptr now inherits from color_base<T*,CS> (instead of containing one). As a result
          the color plane pointers could be accessed directly:, etc.
        - planar_ptr has the same logical/physical channel accessors as pixel, which allows using it
          in per-channel algorithms, such as for_each_channel, transform_channels, etc.
        - There is a new version of physical channel accessor that takes its index as a template
          parameter. Future heterogeneous pixels can only use this accessor.
        - The physical channels of a pixel can be accessed via operator[].
        - The physical pointers to color planes in a planar_ptr can be accessed via an accessor
        - The metafunctions iterator_type, step_iterator_type, pixel_xy_locator_type, view_type,
          image_type etc. now take channel iterator type (not channel type)
        - channel_traits::value_type has the constness stripped. There is no longer
        - interleaved_view factory method is now templated over pixel iterator (used to be pixel
          value). It also takes a pixel iterator to the first pixel (used to be channel pointer to
          the first channel)
        - a new typedef iterator_traits::channel_pointer is added to pixel iterator traits.
        - Removed dynamic_step_base_type typedef in places that don't need it
        - Modified the constructor of bgr and argb so that the order of the input is consistent with
          the order of channels.
        - Renamed fliplr_view() to flipped_left_right_view(), flipud_view() to
          flipped_up_down_view() and transpose_view() and transpose_view().
        - Renamed all *_type to *_t, except value_type, size_type, difference_type, allocator_type
          (which are STL legacy names).
        - Cleaned up the pixel class (used channel_traits instead of boost::type_traits).
        - Added support for the arrow operator of planar pointers.
        - Renamed channel_traits::min() to channel_traits::min_value(). Same for max.
        - Renamed pixel::nth_channel_t to pixel::kth_channel_t.
        - Changed the argument order of for_each_channel() and transform_channels(). Now the
          function object is the last one and the destination pixel in transform_channels() is the 
          one next to the last. The same changes are applied to 
          channel_recursion::for_each_channel() and channel_recursion::transform_channels() too.
        - In addition to re-ordering, I also added a return value for for_each_channel() and
          transform_channels(). Now their behaviors are more similar to the STL ones.
        - Added back the versions of for_each_channel() and transform_channels() with function
          objects passed in by either reference or const reference. The version with function 
          objects passed in by value is still there. There is a macro to switch between them. I 
          did some preliminary tests. Both versions yield the same code. Therefore, the "by-value" 
          version is current ON by default.
        - Changed std::iterator_traits to GIL::pixel_iterator_traits. Replaced most of the places
          where std::iterator_traits is used. However, I didn't change those calls to the standard 
          types which are defined already in std::iterator_traits. For instance, 
        - Modified the implementation in pixel_operations.hpp. Now they are more generic.
        - Renamed color_convert_view -> color_converted_view
        - Renamed channel() to semantic_channel()
        - Renamed physical_channel() to channel()
        - renamed pixel_xy_locator to pixel_2d_locator.
        - added pixel_t to image, image_view, pixel_2d_locator, planar_ptr_base,
          pixel_image_iterator, and various pixel_iterator_traits.
        - renamed xxx_tag to xxx_t. For instance, rgb_tag was renamed to rgb_t and lab_tag was
          renamed to lab_t.
        - Iterator traits cleanup and fixes
        - Created a custom planar reference class
        - modified transform_pixels() to return the the function object.
        - removed non-const access function in planar_ref.
        - moved planar_ref::operator->() to private and added planar_ref to the friend list of
        - Simplification of channel accessors:
        - We don't need logical_channel_accessor at all - we simply call the
          physical_channel_accessor of the base color space. That saved lots of specializations.
        - Now that we have only physical_channel_accessor, I renamed it to channel_accessor. That is
          consistent with us calling the physical channel method simply "channel".
        - The channel_accessor now takes a generic type P (not our color_base). That class must
          provide the type of a reference and const reference of its n-th element. For our color 
          base they are all the same. As a result, channel_accessor no longer needs to change when 
          we introduce heterogeneous pixels. We only need to change color_base.
        - The only remaining glitch is where to put the homogeneous_color_base - right now it is in
          gil_config.hpp, but we should find a better place for it.
        - cached_location -> cached_location_t
        - All GIL typedefed constructs now have _t suffix
        - Fixed rgba8 type.
        - Updated tutorial, design guide and concepts.

        - Added adobe::alert(), a one-function API that leverages the
          modal dialog integration kit to display an alert to the user with a
          consistent look and feel
        - Added adobe/future/endian.hpp, a file intended to help in the
          conversion of  data from in one endian-specific format to another
          (including "this computer's endianness")
        - adobe/bin/ execution warnings have been fixed
        - adobe/future/timer.hpp operator == and operator < functions
          are now inlined (by Alex Dixon)
        - Changed the XCode projects to build the native architecture in
          debug mode, and Universal Binary in release mode
        - Created an action callback for the handle_dialog API to better
          handle the behavior of invoking a button
        - Jamfile improvements include pushing the arch flag on Mac OS X all the
          way back to darwin.jam. Also cleaned up the top-level JF to remove all
          references to arch, cleaning up a lot of cruft.
        - Removed stale stationery files
        - Split file_buffer_t into its own file (adobe/future/file.hpp
          and related source file) in Begin in preparation for fleshing it out
          some more. This includes some native code for picking a save file path,
          and leverages the adobe::alert() API to query the user regarding file
        - Added documentation to the Adobe Source Libraries Wiki for ASL
          works in progress
        - Added the GIL tutorial to the tutorial listings
        - Edits from Mike Engler
        - Many other tweaks and updates
        - Added adobe/gil/extension/io/targa as a file format
          detect/import/export module to be used by the GIL image IO factory.
        - Added an ARGB pixel format specification
        - Fixes for planar references
        - Moved std::copy_n stuff into detail
        - Wrapped immutable interleaved pixel iterators in an adaptor
          class that allows them to be constructed from mutable.
        - Large GIL checkin by Lubomir Bourdev:
            I took a stab at the GIL changes Sean proposed. I had to
            change some ASL files so please review my changes.
            This involved moving some stuff from GIL's utilities.hpp to
            various places in ASL.
            To preserve the standalone capability of GIL, the code that
            moved outside GIL is also copied inside GIL_config.hpp. GIL_config.hpp
            provides all the glue to make GIL work outside of ASL if necessary. Let
            me know if you can think of a better solution.
            The changes I made:
                - moved pixel_step_iterator to adobe/iterator.hpp
                - made all operations on pixel_step_iterator and point2
                  as global functions.
                - renamed round, round_down, round_up to iround, ifloor
                  and iceil (returning int) and provided the equivalent overloads for
                  point2. (See comments below.)
                - moved copy_n to a new file - adobe/algorithm/copy.hpp
                  and moved its helper functions in detail namespace
                - replaced size_t with std::size_t
                - renamed get_aligned with align
                - renamed plus to plus_asymmetric, since unlike
                  std::plus it takes arguments of different types (I use it to advance an
                  iterator by a given distance)
                - moved plus_asymmetric, inc, dec to
                - replaced GIL::bind1st and GIL::bind2nd with
                - removed GIL::equal_to (and fixed a bug in the place that called it)
            Some remaining issues:
                - is plus_asymmetric a good name? I know Alex doesn't
                  like asymmetric plus, but I haven't thought of a way to avoid it in this
                - what shall we do about rounding to an int? I currently
                  have iround, ifloor and iceil; I don't know if that's what you want to
                  have. GIL uses ptrdiff_t (since this is the distance type for pixel
                  iterators) which is an int. I am open to changing it to other types.
                  (Right now these have remained in GIL's utilities.hpp)
                - point2 is very similar to adobe::point_2d. Any
                  thoughts about combining them? One issue is that in the most abstract
                  form GIL concepts of images (and thus points) are N-dimensional. So
                  gil::point2 models N-dimensional point and has some API that would make
                  sense for higher dimensions but would not be very useful. Right now this
                  has remained in GIL's utilities.hpp, since it models a GIL concept.
        - Add set_theme_name to metrics classes on win32 for more
          flexibility with static text.
        - Added a fix regarding Win32 unit edit text parity with the Mac
          (by Thomas Witt)
        - adobe::image_t has been added as a standalone UI core widget.
          Further documentation can be found on the ASL Wiki.
        - adobe::label_t and adobe::image_t are separated from the rest
          of the ui_core_implementation. This has required some deep cuts through
          the remainder of ui_core_implementation, but they are good cuts. Also,
          there is an issue present where the static_disabled text in those
          widgets that support it are not showing up in the dialog because they
          are not being set as children of their containing view, which is done
          once at construction time but static_disabled_text items are constructed
          as they are needed at runtime, and so do not get the chance to be
          embedded in their parents. The eventual (and correct) fix for this is to
          remove the cross-widget dependencies within edit_text, popup, and
          unit_edit_text so each is implemented completely independently of the
        - adobe::static_text_t has been removed and replaced with
          adobe::label_t, which is a better semantic name than static_text_t, and
          has a more refined API than its predecessor
        - Bug fixes for the mlte implementation
        - Release build fixes
        - The background of static text widgets in a tab container now
          draw with the correct background brush (by Ralph Thomas)
        - The virtual machine in ui_core's mac/metrics.cpp is now
          thread-local storage, so it only needs to be constructed one time,
          speeding up metrics expression evaluations
        - We started a new widget API / factory implementation that takes
          into account the various concepts that a UI element may model.

        - Added adobe::basic_sheet_t, a class used to manage dialog
          state-related values, a subset of features of the full Adam
        - Added support for "weak" relations.
        - Better error reporting for over-contraint cases.
        - Unlinked cells are once again allowed to relate to each other when
          figuring out whether or not to pin a new value on the model.
        - Extended information at:
        - Tabs have been replaced with 4 spaces in the entire ASL code
          repository. This includes everything but Doxygen-generated html files
          and IDE project files.
        - Added a nearest_cast<> from Mark Ruzon. Used it as an excuse to
          clean-up the rounding code in ASL to conform with C99 round() and added
          "path stability" to Adam solver.
        - adobe/cmath.hpp has been augmented to include support for more
          C99/TR1 extensions
        - Added modal_dialog_interface and adobe::handle_dialog, a
          self-contained API used to manage a modal dialog instance, leveraging
          Adam, Eve and the ui_core.
        - More fixes for stream error reporting has been changed; you now
          supply a callback to fetch a line from the stream and the stream
          formatter will use the callback before formatting the stream error
        - Fixing code from Eve parser rework and stripping of widget
          serialization and overlay from non-debug builds.
        - More examples added to demonstrate various Adam/Eve features
        - Much work has been done to improve manifest support for Win32.
          Manifest generation has been added MSVC 8 projects. bjam was augmented
          with a rule that copies the appropriate manifest file into place
        - Reworked the factory_token and setting the root widget display
          element in the eve_client_holder, which allows for us to extract the
          platform-specific root window view out of it and manipulate it (e.g.,
          run it under a modal loop).
        - Unpatched msvc.jam. Use conditional based on msvc-toolset:version
          in Begin's Jamfile.v2 instead. Fixes merged 8.0/7.1 settings bug
        - Please repatch your Boost distribution
        - Eve now supports a minimum height and width for containers; Both
          the Mac and Win32 ui_core implementations have been updated to leverage
        - Hide/show updates
        - Many bug fixes and other improvements
        - Updates to the design guide. Added tutorial.
        - Moved iomanip files from widgets to asl_dev (Mac and Win32)
        - MSVC project now has a build directory and copy sheets and
          glossary from sources (by Thomas Witt)
    Widgets Library:
        - Began fixing up static text rect size on win32
        - Fixed a Mac bug where a widget's static disabled text's bounds and
          position were incorrect when shown at the first instance
        - Resolved the bug where the combo box drop down would take up the
          entire screen if there were enough elements. It turned out that this
          behavior was being explicitly set (!); now we will show enough room for
          all of the elements up to a maximum of 10 (at which point you will get a
          scrollbar). This still doesn't verify that the specified size can fit on
          the screen (e.g.: Windows PocketPC might have trouble), and uses a fixed
          value. (by Ralph Thomas)
        - The Mac ui_core implementation has been completely reworked,
          removing inheritance and cleaning up general code flow. Consequently the
          essentials() and widget serialization hooks have been stripped and
        - This commit partially addresses the Win32 nested group issue.
          There is more information on the fix in the comments of
          ui_core_implementation.cpp. Inner groups labels are struck through by
          the group line; there may be another message that we can catch to fix
          this... dialogs now look better, but still not perfect (by Ralph Thomas)
        - Fix Win32 edit_number crashes when label is empty. (by Thomas
        - Mac ui_core implementation caches widget metrics now, speeding up
          metrics-related operations (by Ralph Thomas)

    - Added the Generic Image Library (GIL). This library allows for
      writing generic imaging algorithms with performance comparable to
      hand-coding for a particular image type.
    - Lubomir has been hard at work getting the GIL tutorial and design
      guide ready for release. We anticipate it within a couple weeks;
      hang in there.
    - Begin handles line endings a little better now. It accepts all
      three common line ending formats and converts all of them to the
      line ending for the current platform upon read-in and saving the
      Adam or Eve file.
    - The text in an edit_text widget now takes more than 1023
      characters (by Thomas Witt)
    - The edit_text widget now grows vertically (by Thomas Witt)
    - Added forest_smoke as a test framework for adobe::forest
    - Metrowerks CodeWarrior support has been completely dropped for
      this release. Consequently this allowed for a lot of directory and
      file clean-up.
    - Improved Adam error reporting.
    - Save button semantics in Adobe Begin have been changed so you can
      now save the modifications without first having to push the update
      button. (by Thomas Witt)
    - IDE projects were reworked and added back in to the ASL
      distribution. Most notably, both the MSVC 8 and XCode 2.2 projects
      take advantage of features in these IDEs to specify common
      settings in files external to the projects themselves. This allows
      for increased consistency and compatibility between projects.
    - Warning-as-error compilation settings turned back on; removed
      deprecated warnings for the time being
    - cmd_system now requires every command be unique. Fixed up the APIs
      to reflect that.
    - ASL now compiles against Boost 1.33.1. The old 1.33.0 patchfile
      has been removed, and a 1.33.1 patchfile has been started.
    - Patch Boost's cast.hpp for VS 2003 (Not needed for VS 2005)
    - Other bugs squashed and code enhancements
    - Multiple documentation tweaks and enhancements
    - Major rework of <adobe/forest.hpp>. I'm hoping one more pass for
      the next release and forest.hpp will be complete.
        - preorder and postorder iterator adaptors collapsed into a 
          single edge_iterator<> adaptor.
    - fullorder iterator interface changed
        - depth() moved into a separate iterator adaptor, this makes 
              fullorder iterators significantly less expensive.
            - leading() replaced by edge() which return 
              forest_leading_edge (1) or forest_trailing_edge (0).
        - set_leading() replaced with assignment to edge().
        _ pivot() removed (can use edge() ^= 1 to pivot).
        - reverse_fullorder_cursor reworked to be fully symmetric. See
          discussion at:
        - added depth_fullorder_cursor adaptor which provides the old
          depth() feature to any fullorder iterator.
        - Changed implementation to make use of
          <adobe/iterator/set_next.hpp> which greatly simplifies the
          implementation and allows for developing generic node based
        - Allow set_next() for forest::iterator and
        - Added support for copy-construction, assignment, and equality-
          comparison for forest.
        - Added max_size(), empty(), and clear() member functions.
        - Added a root() member function which return an iterator.
          root() cannot be dereferenced but can be used with set_next().
        - Fixed a bug with the result of erase().
        - Added insert() which can insert a complete sub-forest.
        - Fixed several bugs with splice and added a result iterator
          to the spliced in elements (similar to insert).
        - Greatly improved the size() invalidation logic for splice().
        - Added a size_valid() member function which can be used to
          determine if size() will execute in O(1) or O(N) time.
        - Added a variant of splice which excepts a distance for the
          provided range to eliminate many cases where size would be
        - Added a result to insert_parent() to return an iterator to the
          inserted element.
        - Added a reverse() member function which can reverse any
          sub-forest in the forest.
        - An empty forest no longer performs a heap allocation.
        - Added helper functions to construct reversed or depth ranges.

    - Every header file now includes adobe/config.hpp for compatibility
    - Compiler-specific checks added to adobe/config.hpp for MSVC 8
    - Implemented missing pieces of event handling for Win32 widgets
      This fixes progress bars, edit, edit_num entry boxes and sliders
    - Warnings as errors (/WX) turned on under msvc-8.0
    - msvc 7.1 compiler compatibility changes
    - Updated VC manifest for common controls to work even in the
      presence of third party DLLs
    - Began work on an experimental menu/command system
    - MSVC 8 IDE projects added
    - Changed Adam contributing to report touched cells
    - Many compatibility updates to the Begin example dialogs: began the
      process of removing bevel_button from the ui_core implementation
    - Removing adobe::successor in favor of boost next/prior
    - Defined UNICODE for Win32 BBv2 builds
    - Sliders (among other controls) were broken on Windows. The reason
      seemed to be that the name for the control class expected by
      CreateWindowEx is different from the name expected by
      OpenThemeData in many cases. Implemented a conversion facility to
      recover the theme name from the class name so that opening the
      theme data no longer fails. Needs a bit more research, but seems
      to work for now
    - Documentation for ui_core enumerations added, along with
      refactoring suggestions
    - Updated the Begin projects for XCode 2.2
    - Updated Boost patch file; please re-patch your Boost distribution.
    - Other bugs squashed and code enhancements
    - Multiple documentation tweaks and enhancements

    - The script-generated user-config.jam file has been updated for
      Win32 to extend toolset choices when building with multiple
      versions of MSVC. Please delete the user-config.jam file
      from the default location and rerun the build script.
    - Updates for MSVC 8 (Visual Studio 2005) compatibility
    - Updated ASL for compatibility with Boost 1.33.1. A patchfile
      for the new version of boost is included, however the auto-
      patching scripts are still set up for boost 1.33.0. You will
      have to patch boost 1.33.1 with the necessary patches manually.
    - Updates for CW 9.6 compatibility. CW 10 is not supported.
    - Support for creating polymorphic regular objects as an alternative
      to object oriented programming (adobe::regular_object)
    - Began a Boost 1.33.1 patchfile
    - #define _CRT_SECURE_NO_DEPRECATE for MSVC toolset in top level JF
      to defeat MS's "Safe STL" deprecation.
    - Pulled deprecated APIs from the Mac OS implementation.
    - ATSUI text measurement now instead of QuickDraw in the Mac ui_core
    - Added UTF16 conversion support to adobe/unicode.hpp.
    - Integrated xstring localization to Adobe Begin. Dialogs can now
      show in English, Japanese, Korean, German, and Pig Latin. A sample
      glossary for the image_size sample dialog is included in the
    - Updating FLTK port to be up to date with recent FLTK2 snapshots
      (anything from r4301+). Also added changes for some ASL changes.
      The FLTK window now supports resizing. Adding two functions for
      calculating and placing external widgets. There is a little usage
      example embedded in the Doxygen comments. (by Ralph Thomas)
    - Made an improvement to touch in Adam (and how it manifests in
      Eve, see the Image Size example). Relative order of touched cells
      is now prerved which gives more stable behavior and a better
      contributing set for scripting.
    - Improved markers in Adam so that getting the contributing values
      from a mark will include values that were derived, but now contribute
      because of a change in a conditional relation.

    - Removed eve_container_defaults_proc_m and replaced it with
    - Many improvements to the Adobe Begin metrics code in MacOS X.
    - Experimental closed hash implementation (in future) - interesting
      but so far not useful.
    - Added bit-oriented implementations of the Secure Hash Algorithms
      SHA-1, -224, -256, -384, and -512, as well as a test framework.
    - Version tagging on built library artifacts has been removed
    - Varied changes to promote CodeWarrior compatibility
    - begin_no_bjam added: an XCode project that needs only the Boost
      libraries built under bjam in order to build Adobe Begin
    - Added Knuth's Dancing Links Algorithm, a toroid specialized
      container for the algorithm, and a Sudoku puzzle test app that
      utilizes and tests it. Also added an N-queens test app for the
      dancing links algorithm test platform.
    - Preorder proc and element handler in the xstring system are now
    - BBv2 now builds the Application Package for MacOS X, and installs
      Adobe Begin in a separate install folder in bin.v2. It does
      similar steps for Win32 as well, moving all necessary files to a
      separate install folder.
    - Updated Boost patch file; please re-patch your Boost distribution.
    - Other bugs squashed and code enhancements
    - Multiple documentation tweaks and enhancements

    - Updated to Boost 1.33
    - Updated naming convention of the adobe-source libraries to match
      Boost 1.33
    - Updated Boost 1.33 patch file; please re-patch your Boost
      distribution. (Updated darwin.jam and gcc.jam with patches for
      XCode/GCC 4/MacTel)
    - Lots of xstring work to improve on the engine. Introduced a
      file_slurp buffer container that releases ownership of the buffer
      to the xstring system for parsing. This allows the xstring system
      to parse the buffer in-place, resulting in minimized memory
      allocations, and greatly speeding up the parsing process (15,000
      element parse down to ~ .25 seconds on a 1.67 GHz Powerbook G4).
    - Patch boost Jamfile.v2 for test module to build as static under
      darwin, just as on windows
    - Some CodeWarrior cleanup
    - bug fixes for Cygwin; also it now rebuilds bjam every
    - Rewrite enum_ops to follow original intent of limiting operations
      to *specifically* designated enum types
    - Updated the all-in-one scripts, fixing bugs and started to add
    - Extended iterator documentation. Thanks to Jon Reid for this
    - Fixed a nasty bug that was preventing Adobe Begin Win32 from
      launching when its path had any whitespace in it.
    - Other bugs squashed and code enhancements
    - Multiple documentation tweaks and enhancements

    - Added hide/show visibility support to eve. Support "hacked" into
      panels in Adobe Begin (Mac ui_core). Eve support is solid but demo
      still needs some work.
    - Added filter_fullorder_cursor to forest library. Made
      pre/postorder cursors into proper adaptors.
    - Added proper reverse_fullorder_cursor to forest library. Thanks to
      Eric Berdahl for this contribution.
    - Add any_iterator (a polymorphic adaptor for iterators) and
      index_iterator (adapts functional indexing to an iterator). Thanks
      to Jon Reid for this contribution.
    - Put in a conservative fix for a bug in Adam for tracking indirect
      conditional contributions. For example:
        when(p) relate { x <== y; y <== x; }
      Evaluation of this conditional will be deferred until all but one
      of the cells in the relation has been resolved and all non-
      conditional relations have been resolved. Then p will be
      evaluated. If p is true it will contribute to the remaining cell.
      If p is false, it will contribute, indirectly, to all cells
      subsequently evaluated.
      This is a conservative answer, if p is false, it should only
      contribute to any cell which could have been effected by the
      evaluation of the remaining cell in the relation. Adam currently
      doesn't have a way to precisely track such an indirect dependency,
      this is a usably close approximation.
    - Replaced once_name_t with const_once_name_t - eliminates the evil
      const casting.
    - Renamed adobe::advance_of() to adobe::successor() and added
    - Fixed problems with "Release" variants of applications under OS X.
    - Stationery projects for MSVC and XCode.
    - Updated Boost patch file; please re-patch your Boost distribution.
    - Universal version of Adobe Begin (MacTel/MacPPC).

    - Mac OS X 10.4 (Tiger) support within BBv2. CodeWarrior support
      will slowly decline as MacTel/gcc 4 support increases
    - Adobe Begin has been moved from ./adobe/test/visual to
    - Increased XCode support, including updating to XCode 2.1
    - XCode- and MSVC-based projects now rely on BBv2 for building ASL
    - Automated building of ASL from within XCode- and MSVC-based
      projects for Adobe Begin
    - Library hierarchy reorganization to comply more with current
      industry standards
    - Added adobe/numeric.hpp, beginning similar support for <numeric>
      as we have for <algorithm>
    - Added any_itearator and index_iterator adaptor
    - Pulled UI code from Adobe Begin and made into its own library,
    - Renamed xstring-related files from "xstr" to "xstring"
    - Improvements made to the lexical analyzer, parser, and processing
      of xstrings
    - Updated Boost patch file; please repatch your Boost distribution
    - Some test app bug fixes (by Jamie Gadd)
    - Countless bugs squashed and code enhancements
    - Multiple documentation tweaks and enhancements, including removal
      of the frame (replaced it with a link table)

    - Updated Boost patch file (by Jamie Gadd)
    - Added several test folders which should have been a part of
      yesterday's release (thanks to Dr. Bruce Stephens for the catch)
    - Added missing Jamfile.v2 (thanks to Dr. Bruce Stephens for the
    - Beginnings of FLTK support (by Ralph Thomas)
    - Modified settings in boost_lib that prevented Mac CodeWarrior
      builds from succeeding
    - Removed many outdated and/or superfluous files from the CVS
    - Updated the read_me.txt with more build help and troubleshooting

    - Buildsystem completely reworked using Boost Build version 2
      project files. Full builds and tests now supported. Tested under
      msvc, darwin, and cygwin gcc, though some issues remain with Adobe
      Begin. See Compiling the Libraries section below for more
    - Windows builds now supported
    - Warnings are now treated as errors
    - ZUID class added (UUID-like identifiers that do not contain
      personal data)
    - thread_id operation added (thread-unique identifier)
    - Updated to_utf32 API in Unicode conversion for more streamlined
    - Begin Win32 now has the Editor palette & a drag-and-drop
      targetable window
    - Win32 ui_core enhancements and bug fixes (by Ralph Thomas)
    - Continued XCode support (by David Catmull)
    - Adobe Begin proxy class removal (cont'd), improving ui_core public
      API (cont'd)
    - More Boost bug fixes; please repatch your Boost distribution
    - Countless bugs squashed and code enhancements
    - Multiple documentation tweaks and enhancements

    - Added simple support for utf-8 <=> utf-32 (both single code points
      and strings)
    - Added xstring glossary lookup system for localizing strings in
      your app
    - Improved our Jamfile usage (by Ralph Thomas and Tobias Schwinger)
    - Improved performance in adobe::value_t by leveraging
    - Improved ui, countless bug fixes in Win32 for Adobe Begin (by
      Ralph Thomas)
    - Adobe Begin modularization - factory work and more (by Ralph
    - Adobe Begin proxy class removal (begun), improving ui_core public
      API (begun)
    - Many compiler warnings squashed (by Tobias Schwinger)
    - MinGW support (by Tobias Schwinger)
    - Countless bugs squashed
    - Multiple documentation tweaks and enhancements

    - Started bringing Adobe Begin for Win32 online. Took a good chunk
      out of it, but bugs remain.
    - Reworking of Win32 metrics measurement / UI enhancement on Win32
      (by Ralph Thomas)
    - Reworking of bjam build environment within adobe-source (by Ralph
    - Separation of platform code from express_viewer.cpp (by Ralph
    - Added eve_smoke, a test app for verifying Eve2 view definitions
      from the command line
    - Reworked ui_core API for edit_text, popup, and unit_edit_text
    - Improved ui_core fudge code, though it still needs improvement
    - Added command line tutorial program for Adam (thanks to Peter
      Kummel for the discussion prompting the work)
    - Fixed several ASL compilation bugs for various platforms.
    - Added boost patch file to the distro (thanks to Nick Kraft for
      pointing out the omission)
    - Multiple documentation tweaks and enhancements
    - Added XCode projects for asl_lib, boost_lib, and Adobe Begin (by
      David Catmull)

    - First public release! Lots of kinks to work out still, though.

    - Many content-related documentation tweaks
    - Documentation compiling with Doxygen 1.40
    - Added documentation on Adam
    - Added documentation for table_index
    - Move iomanip to future directory
    - Added an Adobe Begin widget reference
    - Documentation CSS tweaks
    - Added build support for GCC using Bjam
    - ASL compiles with VC 7.1 again
    - Started working on the tutorial section of the site

    - Initial release to external testers.

Copyright © 2006-2007 Adobe Systems Incorporated.

Use of this website signifies your agreement to the Terms of Use and Online Privacy Policy.

Search powered by Google