1 2Release Notes for Agar 1.5.0 (A Mild Breeze Upon The Brow Of The Dead) 3---------------------------------------------------------------------- 4 5Here are some of the most notable changes since Agar 1.4.1, in no 6particular order. 7 8This release preserves backward compatibility with Agar 1.4.x, but it is 9recommended to compile Agar with the `--disable-legacy' configure option, 10ensuring that existing applications are not using deprecated API calls. 11 12- A new Agar testsuite, "agartest", available from tests/ in the source 13 distribution. Code previously in demos/ was moved to tests/. 14- Numerous fixes and improvements to the documentation; added some example 15 code and images for the web and printable versions of the manual. 16- Build system upgraded to BSDBuild 3.2. Note the `agar-config` and 17 `agar-foo-config` scripts are now auto-generated by configure. 18- The "rg" library has been moved over to the FreeSG distribution 19 (http://freesg.org). 20- Major changes to low-level event handling logic of the standard event 21 loop. Event handling was originally done in a driver-specific fashion. 22 This was replaced by a generic ag_core based interface which is able to 23 utilize a whichever most efficient kernel event-notifications mechanism 24 (such as kqueue(2) or select(2) / timerfd). Agar can now handle multiple 25 event loops running under separate threads; see AG_EventLoop(3). 26- GUI: Redesign of the styling interface. AG_Style calls are no longer used. 27 By loading a style sheet (see gui/style.css), or calling AG_SetStyle(), 28 style attributes (such as "font-size" or "color") may be set on a global, 29 per-widget, or per-window basis. Default attributes are inherited from 30 the parent widgets. 31- GUI: Font sizes may now be set dynamically (application-wide or on specific 32 windows). See AG_WindowSetZoom(3), AG_ZoomIn(3) and AG_ZoomOut(3). 33- GUI: Implement AG_BindStdGlobalKeys(). It is recommended for setting up 34 standard shortcuts for zoom controls and application exit. 35- GUI: Implement native MacOS X Cocoa driver "cocoa"; see AG_DriverCOCOA(3). 36- GUI: Significant improvements in CPU usage and rendering efficiency of 37 standard GUI widgets. Eliminated unnecessary redraws and periodic tests 38 in many instances where exclusive access to binding data can be guaranteed. 39- CORE: Introduce new AG_Timer(3) API, replacing the old AG_Timeout(3). The 40 AG_Timer(3) code is integrated with the new AG_EventLoop(3) such that 41 safe free-threaded timer operation can be guaranteed on all platforms. 42 Unless --disable-legacy is used, old AG_Timeout() calls are defined as 43 wrappers around the new API. 44- CORE: Introduce basic AG_Db(3) interface with included backends "hash", 45 "btree" and "mysql". 46- CORE: Introduce the AG_TextElement(3) for easier handling of dynamically 47 allocated, multilingual text buffers. 48- AG_Pane: Clean up division/expansion code, replace confusing flags with 49 simpler AG_PaneResizeAction() interface. 50- AG_Surface: Remove unused AG_PixelFormat argument to AG_ReadSurface(). 51- AG_Surface: Enforce alignment on 4-byte boundary. 52- AG_Surface: Honor source x-offset (thanks pi31415!). 53- AG_Combo: Pin popup menus to parent window; set WM_COMBO hint so that 54 popup menus interact correctly with most window managers. 55- AG_Keyboard: Implement keysym database functions AG_LookupKeyName(), 56 AG_LookupKeySym(). Provide AG_CompareKeyMods() for comparing modifier 57 states in a simpler way. 58- AG_Console: Improve scrolling and selection behavior; make autoscrolling the 59 default. Add export to txt and select/copy operations. 60- AG_Console: Remove AG_ConsoleSetFont(), since fonts are now handled 61 generically by AG_SetStyle(). 62- AG_Console: AG_ConsoleAppendLine() may now fail returning NULL. 63- AG_Console: Add AG_ConsoleMsgEdit() for updating an existing line. 64 The "benchmark" in agartest demonstrates this feature nicely. 65- AG_Console: Implement AG_ConsoleExportText(). 66- AG_Window: Add AG_WINDOW_MAIN flag. An automatic break out of AG_EventLoop() 67 is done whenever the (last) window with the MAIN flag is destroyed. 68- AG_Window: Implement AG_WindowSetOpacity() and FADEIN/FADEOUT option 69 (requires a compositing WM). 70- AG_Window: Add AG_WindowNewSw(), for creating windows under specific 71 instances of single-window drivers. 72- AG_Window: Use queues to guarantee safe free-threaded operation of 73 AG_WindowShow() and AG_WindowHide() with all drivers. 74- AG_Window: Implement auto-tiling behavior with TILING option. 75- AG_Window: Implement pinning; see AG_WindowPin(), AG_WindowMakeTransient(). 76- GUI: Implement stereographic 3D display mode. To request a stereographic 77 visual, the Agar driver should be initialized with "stereo" option. 78- GUI: In single-window mode, auto-tile minimized window icons correctly. 79- GUI: Move standard clipping and texture management code for OpenGL 80 drivers to drv_gl_common.c. 81- GUI: Avoid redundant surface conversions to native GL format. 82- WGL Driver: Rewrite of keyboard handling code. 83- WGL Driver: Honor AG_WINDOW_KEEPABOVE. 84- GLX Driver: If Xinerama extension is available, have GetDisplaySize() 85 query Xinerama and return the dimensions of the first screen only. 86- GLX Driver: Always specify an EWMH-compliant window type; set precise 87 Motif functions / decorations / input hints. 88- GUI: Improve efficiency of text areas embedded into widgets (such as 89 AG_Numerical(3)) by enabling exclusive buffer access (EXCL option). 90- GUI: Implement AG_ColorFromString(). 91- AG_Scrollbar: Provide EXCL and AUTOSIZE options. New "inc" binding for 92 setting the scrolling increment. 93- AG_Scrollbar: Now handles clicks outside of control bar by seeking 94 progressively to match the behavior of most other GUIs. 95- AG_Text: Add AG_TextTabWidth() for setting rendering tab width 96 (subject to AG_PushTextState() attribute stack). 97- AG_Text: Add AG_UnusedFont() for decrementing reference count on a font. 98- AG_Button: Provide an EXCL option. Remove MOUSEOVER code since mouseover 99 style is now handled generically. 100- AG_Text: Add fontconfig support to AG_FetchFont(), if available. 101- AG_Text: Fix multithread behavior of AG_TextTmsg(). 102- AG_ProgressBar: Add EXCL option. 103- AG_Text: AG_TextRender() may now fail and return NULL. 104- AG_Menu: Fix modal behavior of AG_MenuExpand()-generated popup windows. 105- AG_Menu: Implement AG_MenuCollapseAll(). 106- AG_Widget: Added USE_MOUSEOVER option and MOUSEOVER flag. 107- AG_Widget: Added USE_TEXT option and 'font-changed' event, so we can 108 effectively deal with dynamic font changes required by zooming. Widgets 109 which map surfaces generated by AG_TextRender() are expected to enable 110 USE_TEXT and implement a 'font-changed' handler. 111- AG_File: Implement AG_RegisterFileExtMappings(3). 112- AG_FileDlg: Implement user-settable "mask hidden files" (MASK_HIDDEN) 113 and "filter by extension" (MASK_EXT) options. 114- AG_FileDlg: Use the ag_core AG_User(3) interface to determine home directory. 115- AG_FileDlg: Avoid a duplicate refresh when widget initially appears. 116- AG_FileDlg: Cosmetic fixes; add flags to hide specific elements. 117- AG_Editable: Implement buffer access and control interfaces (see 118 manual page, "BUFFER ACCESS ROUTINES" section). 119- AG_Editable: Textboxes may now bind to AG_Text(3) elements; added 120 MULTILINGUAL option and AG_TextboxSetLang(). 121- AG_Editable: Implement new clipboard interface. 122- AG_Editable: Improve scrolling behavior, allow pixel-based as well as 123 line and character-based scrolling queries. 124- AG_Editable: With the word-wrapping feature, consider all possible 125 Unicode space characters, not only isspace(). 126- AG_Textbox: Inherits the above changes to AG_Editable(3); added EXCL option. 127- AG_Tlist: Add AG_TlistSetIconWidth(), `tlist-return' event. 128- AG_Slider: Add EXCL option. 129- GUI: Implement AG_Color(3) interface; add "color" binding to AG_HSVPal(3). 130- GUI: Handle top-down encoded images correctly in AG_SurfaceFromBMP(). 131- GUI: Implement AG_DirDlg(3) widget as an alternative to AG_FileDlg(3) 132 for selecting directories only. 133- GUI: Store tunable GUI settings in agConfig. 134- GUI: Process driver options passed to AG_InitGraphics() 135- GUI: Implement AG_SetFont() and AG_SetStyle() functions, for setting 136 style attributes on a per-widget basis. 137- GUI: Added globally-inheritable widget style attributes "font-family", 138 "font-size", "font-weight" and "color" (see STYLE PROPERTIES section 139 in AG_Widget(3)). 140- GUI: Implement AG_RedrawOnChange(), AG_RedrawOnTick() 141- GUI: Implement AG_SetVideoSurfaceSDL() operation for changing the video 142 context at runtime with sdl* drivers. 143- GUI: The "polled label" feature of AG_Label(3) is now implemented using 144 the more general AG_PrintfP() (see the new AG_String(3) interface). 145- GUI: Fix MacOS X build if _USE_SDL_FRAMEWORK is set. 146- AG_Table: Don't compare cells across columns when restoring selection 147 state in AG_TableBegin() / AG_TableEnd(). 148- AG_DriverMw: Create a windowless "root" driver instance, so we can handle 149 things like X server connections more efficiently. 150- New built-in conversion units: EnergyPerSubstanceAmount, MolarHeatCapacity, 151 Resistivity, ThermalConductivity, ThermalExpansion, Density. 152- AG_Notebook: Fix memory leak of container widgets on detach. 153- AG_Notebook: Use an embedded AG_Label to display text labels. 154- AG_GLView: Implement background fill (BGFILL) and underlay options. 155- GUI: Added AG_UsingGL() and AG_UsingSDL() test functions. 156- GUI: In AG_TextCache(3), use a more efficient expiration policy which 157 does not require timestamps. 158- CORE: Document all routines related to C strings in AG_String(3). 159- CORE: Implement a formatting engine built into Agar, AG_Printf(3). This 160 extends the standard printf(3) functionality with support for custom 161 modifiers and formatting routines. The AG_PrintfP(3) interface also provides 162 a generalized, non-GUI version of "polled labels" of AG_Label(3). 163- MATH: Implement AG_Printf(3) modifiers; see M_String(3). 164- CORE: Introduce AG_User(3) user information access routines. 165- CORE: Introduce AG_Net(3) cross-platform network API. 166- CORE: Implement AG_BindVariable(), AG_DerefVariable(), AG_CompareVariables(). 167- CORE: AG_InitCore() now allows NULL as progname argument. 168- AG_DataSource(3): Implement AG_OpenNetSocket() and AG_DataSourceRealloc(). 169 Document the internal API to allow user-defined sources. 170- Prevent binary structure differences when compiling threaded vs. 171 non-threaded and debug vs. non-debug (thanks reinoud!). 172- Define the global GUI variables (agKbdDelay, agText*, etc.) in ag_gui. 173 agConfig is no longer auto-loaded in AG_InitCore(), so libraries such as 174 ag_gui have an opportunity to create variable bindings before loading. 175- In AG_ObjectFind(), recognize pathnames terminating in "/". 176- CORE: Implement AG_ObjectGetName() variant to AG_ObjectCopyName(). 177- CORE: Implement AG_ObjectLoadFromDB(), AG_ObjectSaveToDB(). 178- CORE: Implement AG_GetStringP() variant to AG_GetString(). 179- CORE: Implement AG_ObjectGetInheritHier(), AG_ObjectGetInheritHierString(). 180- AU: Introduce AU(3) audio interface. 181- MATH: When compiling for SSE, ignore the configure-specified precision and 182 force M_Vector[34], M_Matrix44 and M_Color into single-precision. 183- MATH: Implement M_Polyhedron(3); document M_PointSet(3) interface. 184- MATH: Implement SSE versions of additional M_Matrix(3)/M_Vector(3) operations. 185