Planned Changes in Agar 1.6 --------------------------- - Implement stereoscopic GUI rendering with quad buffered OpenGL. - Link the GUI library against ag_math. Use M_Vector3 to represent widget coordinates, M_Color to represent colors, etc. Allow affine transformations in low-level widget rendering code. - Improve the VG library. Implement SVG compliance; switch to ag_math. Merge the VG library into ag_gui. Provide a simplified equivalent to VG_View for rendering static GUI elements. Replace bitmap icons with SVG equivalents. - Implement internal font rendering using VG -- SVG fonts would provide a good default on platforms where a FreeType dependency is inconvenient. - Provide a consistent interface for applications to define cross- platform keyboard shortcuts. - Get rid of the AG_MenuBool(3) and AG_MenuIntFlags(3) family of functions, and allow standard widget bindings to be used against AG_MenuItem instead; also, make AG_MenuItem a widget object. Planned Changes in Agar 1.7 --------------------------- - Define widget orientations, so that widgets may be rotated. This would eliminate things such as AG_SCROLLBAR_HORIZ/VERT. Planned Changes in Agar 2.0 --------------------------- - Provide a C++ class interface, with 1:1 correspondence to Agar classes (the Agar object structures can be packed statically in C++ classes). - Move much of the code found in widget constructors (AG_FooNew()) to the object Init() routine. Init() will now accept arguments and will be allowed to fail. This will simplify the definition of constructor routines in C++ and other languages. - Simplify the handling of strings in the C api. Things like constructor routine variants accepting printf-style arguments will be removed (they are rendered obsolete by the AG_Printf(3) and AG_PrintfP(3) routines, whose return values can be used directly). - Replace AG_PopupNew() with AG_MenuNewPopup() (and move the contents of the AG_PopupMenu structure to AG_Menu). - Proposed: Removing the AG_Event magic in favor of passing event handlers a NULL-terminated array of AG_Variable elements. An event handler in C may then look like: { void MyEvent(void *obj, AG_Variable *argv) { int x = argv[0].i; char *s = argv[1].s; Uint32 u32 = argv[2].u32; } AG_SetEvent(obj, "my-event", AG_PrintfV("%i,%s", myInt, myString)); AG_PostEvent(obj, "my-event", AG_PrintfV("%[u32]", myUint32); } If we remove the AG_Event magic, macros AG_INT(), etc. are no longer used. This would also allow us to rename AG_VARIABLE_FOO -> AG_FOO. - Remove the excessive number of binding-setting constructors the C API (e.g., AG_ScrollbarNewInt(), etc.). People should preferably use AG_SetInt(), etc. directly. - Remove some of the old specialty flags in AG_Object(3). Clean up the nightmare of a manpage that AG_Object(3) has become. - Import the BSD units(1) conversion program and database to replace AG_Units. Make it easier to specify application-specific lists of suggested units. - In AG_Scrollbar(3), make AG_SCROLLBAR_AUTOSIZE the default behavior. - Get rid of the "bound" event in AG_Object(3). - In AG_Object, save_pfx and archivePath -> savePath