Release Notes for Agar 1.3 (The Birth of an Era Obscured by Sulfur and Flames) ------------------------------------------------------------------------------ Here are some of the notable changes since Agar 1.2 in no particular order. This excludes the numerous cosmetic changes that were made. For a complete list of all changes, see ChangeLog-1.3.txt. - Merged Agar-MAP (http://hypertriton.com/agar-map/) into the main Agar source distribution as a separate library. - Merged Agar-NET (http://hypertriton.com/agar-net/) into the main Agar source distribution as a separate library disabled by default. - Merged Agar-SC (http://hypertriton.com/agar-sc/) into the main Agar source distribution as a separate library. - Moved all code useful for development and debugging purposes (e.g., AG_ObjMgr, and everything that was in core/monitor) to a separate library named Agar-DEV. - Added a couple of new demos. - Work around a compilation issue due to recent SDL versions polluting namespace with defines such as HAVE_STDLIB_H. - GUI: Moved Animview widget to RG. - CORE: Removed all code that had anything to do with graphics. - RG: Implemented transform chains and caching, based on previous code. - Add "agarpaint" to the distribution. agarpaint is a pixmap/animation editor that demonstrates the use of Agar-RG. All icon sets used by the various Agar libraries have been written in agarpaint. - Removed "core-icons.den" entirely. Icon resources are now built into the library and no external files are needed. Implemented "header export" function into agarpaint so that other applications and libraries can use the same method. - GUI: Added support for built-in fonts (fonts bundled into the library or applications). This is useful for consoles and platforms where files are inconvenient (such as Windows when using Cygwin/MSYS build). - MAP: Implemented MAP_Actor object. - RG: Added static tile/animation tables, so that external objects can rely on names not changing as items are added or removed. - CORE: Simplify class registration with AG_RegisterClass(). - GUI: In AG_FileDlg(3), use stat(2) where available to determine if files are accessible, instead of open(2) which may cause problems with large directories (thanks KOC!). - GUI: Add Flags (bitmask) bindings to AG_Checkbox(3) and AG_Button(3). - GUI: In AG_Table(3), enforce minimum column width when resizing. - In the manual pages, avoid using "void *" when referring to Object arguments, use the base class instead. - Implement thread safety in OpenGL mode. The main issue was avoiding texture operations outside of widget Draw() operations (i.e., in initializers), so a number of widgets were modified to postpone surface mapping operations until Draw(). - Introduce an _AGAR_INTERNAL define; clean up header files. - Change the way internal headers are included so that the build process no longer requires symlinks. This fixes non-concurrent building on platforms such as MSYS. - Move from csoft-mk to our new build system, BSDBuild (http://hypertriton.com/bsdbuild/). - GUI: Eliminate some subtle differences (mostly off-by-ones) in the way primitives are rendered in OpenGL vs SDL mode. - GUI: Implement AG_LABEL_NOMINSIZE flag in AG_Label(3), and use it by default in widgets like AG_Titlebar(3). This flag causes the label to display a "..." if it is too small to display a string fully. - GUI: Implement Flag description tables and bitmask bindings in AG_Label(3). - GUI: Renamed the (previously undocumented) AG_Graph widget to AG_FixedPlotter. AG_Graph(3) is now used by another widget to display edges/vertices structures. - CORE: Rework of the Object API for better inheritance support. The Object system now automatically invokes object operations (e.g., init, destroy, etc) for all parent classes. Of course, all classes now need to be registered with AG_RegisterClass(). - CORE: Renamed AG_ObjectOps -> AG_ObjectClass. - CORE: AG_ObjectLoad() now automatically does version checking, and the load() operation now accepts an AG_Version argument. - CORE: AG_ObjectDestroy() now automatically uses free(3) on objects that did not have the AG_OBJECT_STATIC flag. - GUI: The AG_Text(3) interface now acts like a state machine in the way fonts, colors and other text attributes are specified. Add support for multiline text, background colors and justification. - GUI: Add FooNODUP() variants to various widget functions using surfaces. - GUI: Implement AG_Graph(3) widget which displays graphs (as in vertices and edges). The autoplacer algorithm is still very crude. - GUI: Add various convenient variants for widget constructor functions. - GUI: AG_WidgetEnable() and AG_WidgetDisable() is now the preferred way of setting widget states. - GUI: Add more precise left/right/top/bottom padding and spacing parameters to various widgets. - CORE: Add "sender" argument to AG_ForwardEvent(). - GUI: Add Text antialiasing setting. - GUI: Greatly improve the behavior of widgets when they are scaled to extremely small sizes. - GUI: Implement garbage collection of text glyphs based on time. - GUI: Implement AG_TextWarning() canned dialog with built-in persistent "Don't show again" setting for convenience. - GUI: Implement AG_WidgetBlitSurfaceGL(), when blitting to transformed coordinates is necessary. - GUI: Improve the behavior of modal windows. Multiple modal windows are now allowed. - GUI: Introduce AG_Numerical(3) as a replacement for both AG_FSpinbutton(3) and AG_Spinbutton(3), that can handle both integral and floating-point bindings. - GUI: In AG_Menu(3), store items a single tree instead of multiple trees; improve dynamic item support; implement item "state" flag. - GUI: Provide AG_FileDlgCheck(Read|Write)Access() functions, provide means of overriding default ok/cancel behavior. - CORE: Simplify the Object load/save routines. Provide separate AG_ObjectLoadGenericFromFile() and AG_ObjectLoadDataFromFile() functions. - CORE: Implement AG_ObjectGenName() and AG_OBJECT_NAME_ONATTACH flag. - GUI: Remove (previously undocumented) AG_HPane and AG_VPane widgets, they are replaced by AG_Pane(3). - DEV: Make the GUI debugger more useful. - CORE: Add "tmp-path" and "initial-run" settings to AG_Config(3) - CORE: Implement AG_Object(Get|Set)ArchivePath(), for use by editors. - CORE: Rework AG_ObjectChanged() to do an exact comparison instead of using checksums. - CORE: Add portable AG_GetSystemTempDir() and AG_FileDelete() functions to compat. - GUI: Rework the interface for widget sizing. Instead of a single scale() operation, we now have size_request() for requisition and size_allocate() as a callback for allocation. - GUI: Make page increment configurable. - GUI: Implement AG_FileDlgSetDirectoryMRU(3). - GUI: Widget objects are now provided with unique name strings. - Import agarrcsd into the main Agar distribution. agarrcsd is the server for the built-in AG_Object revision control system which is available when compiling with --enable-network. - GUI: Allow windows to be moved outside of the view area; suggestion by phip. - GUI: On window resize events in OpenGL mode, release and regenerate all textures since preservation of the GL context through window resizes is a platform-specific matter. - CORE: Implement AG_GetCPUInfo(), to obtain information about architecture extensions in a portable manner. - GUI: Implement AG_Socket and drag-and-droppable AG_Icon widgets (a frequent request by game developers); add ./demos/sockets. - Provide "project files" for those pesky IDEs. We do this using from the new BSDBuild which generates those files for us. - Merge ag_compat library into ag_core. - Remove a preposterous amount of unused variables throughout the Agar code. - Add a number of portability fixes for proper compilation under Visual Studio. - MAP: Fix crash bug when resizing node attribute grids. - RG: Fix alpha blending of controls in OpenGL mode. - CORE: Replace AG_Netbuf with a new API called AG_DataSource, which allows new types of data sources to be readily implemented. - GUI: Implement a new themeing API, AG_Style(3). It allows theme designers to change every possible cosmetic aspect of the GUI. Added AG_SetStyle(3) function. - GUI: Improve the AG_Radio(3) API; add hotkey support. - The manual pages now include a "STRUCTURE DATA" section for structures that make some of their members public; suggestion by Julien Clement. - GUI: Introduce AG_Rect structure. - GUI: New widget: AG_ProgressBar(3).