I'm pleased to announce the release of Agar-1.5.0. The source code and
binary packages are available for download at:
http://libagar.org/download.html
This release preserves backward compatibility with Agar 1.4.x, but it is
recommended to compile Agar with the "--disable-legacy" configure
option, ensuring that existing applications are not using deprecated API
calls.
I'd like to thank everyone who has provided feedback and contributions,
as well as our sponsors: Csoft.net Hosting and ElectronTubeStore.com.
Release Notes for Agar 1.5.0 (A Mild Breeze Upon The Brow Of The Dead)
----------------------------------------------------------------------
Here are some of the most notable changes since Agar 1.4.1, in no
particular order.
- A new Agar testsuite, "agartest", available from tests/ in the source
distribution. Code previously in demos/ was moved to tests/.
- Numerous fixes and improvements to the documentation; added some
example code and images for the web and printable versions of the
manual.
- Build system upgraded to BSDBuild 3.2. Note the `agar-config` and
`agar-foo-config` scripts are now auto-generated by configure.
- The "rg" library has been moved over to the FreeSG distribution
(http://freesg.org).
- Major changes to low-level event handling logic of the standard event
loop. Event handling was originally done in a driver-specific fashion.
This was replaced by a generic ag_core based interface which is able
to utilize a whichever most efficient kernel event-notifications
mechanism (such as kqueue(2) or select(2) / timerfd). Agar can now
handle multiple event loops running under separate threads; see
AG_EventLoop(3).
- GUI: Redesign of the styling interface. AG_Style calls are no
longer used. By loading a style sheet (see gui/style.css), or
calling AG_SetStyle(), style attributes (such as "font-size"
or "color") may be set on a global, per-widget, or per-window
basis. Default attributes are inherited from the parent widgets.
- GUI: Font sizes may now be set dynamically (application-wide or
on specific windows). See AG_WindowSetZoom(3), AG_ZoomIn(3)
and AG_ZoomOut(3).
- GUI: Implement AG_BindStdGlobalKeys(). It is recommended for
setting up standard shortcuts for zoom controls and application exit.
- GUI: Implement native MacOS X Cocoa driver "cocoa"; see
AG_DriverCOCOA(3).
- GUI: Significant improvements in CPU usage and rendering efficiency
of standard GUI widgets. Eliminated unnecessary redraws and periodic
tests in many instances where exclusive access to binding data can be
guaranteed.
- CORE: Introduce new AG_Timer(3) API, replacing the old AG_Timeout(3).
The AG_Timer(3) code is integrated with the new AG_EventLoop(3) such
that safe free-threaded timer operation can be guaranteed on all
platforms. Unless --disable-legacy is used, old AG_Timeout() calls
are defined as wrappers around the new API.
- CORE: Introduce basic AG_Db(3) interface with included backends
"hash", "btree" and "mysql".
- CORE: Introduce the AG_TextElement(3) for easier handling of
dynamically allocated, multilingual text buffers.
- AG_Pane: Clean up division/expansion code, replace confusing flags
with simpler AG_PaneResizeAction() interface.
- AG_Surface: Remove unused AG_PixelFormat argument to AG_ReadSurface().
- AG_Surface: Enforce alignment on 4-byte boundary.
- AG_Surface: Honor source x-offset (thanks pi31415!).
- AG_Combo: Pin popup menus to parent window; set WM_COMBO hint so that
popup menus interact correctly with most window managers.
- AG_Keyboard: Implement keysym database functions AG_LookupKeyName(),
AG_LookupKeySym(). Provide AG_CompareKeyMods() for comparing modifier
states in a simpler way.
- AG_Console: Improve scrolling and selection behavior; make
autoscrolling the default. Add export to txt and select/copy
operations.
- AG_Console: Remove AG_ConsoleSetFont(), since fonts are now handled
generically by AG_SetStyle().
- AG_Console: AG_ConsoleAppendLine() may now fail returning NULL.
- AG_Console: Add AG_ConsoleMsgEdit() for updating an existing line.
The "benchmark" in agartest demonstrates this feature nicely.
- AG_Console: Implement AG_ConsoleExportText().
- AG_Window: Add AG_WINDOW_MAIN flag. An automatic break out of
AG_EventLoop()
is done whenever the (last) window with the MAIN flag is destroyed.
- AG_Window: Implement AG_WindowSetOpacity() and FADEIN/FADEOUT option
(requires a compositing WM).
- AG_Window: Add AG_WindowNewSw(), for creating windows under specific
instances of single-window drivers.
- AG_Window: Use queues to guarantee safe free-threaded operation of
AG_WindowShow() and AG_WindowHide() with all drivers.
- AG_Window: Implement auto-tiling behavior with TILING option.
- AG_Window: Implement pinning; see AG_WindowPin(),
AG_WindowMakeTransient().
- GUI: Implement stereographic 3D display mode. To request a
stereographic visual, the Agar driver should be initialized with
"stereo" option.
- GUI: In single-window mode, auto-tile minimized window icons
correctly.
- GUI: Move standard clipping and texture management code for OpenGL
drivers to drv_gl_common.c.
- GUI: Avoid redundant surface conversions to native GL format.
- WGL Driver: Rewrite of keyboard handling code.
- WGL Driver: Honor AG_WINDOW_KEEPABOVE.
- GLX Driver: If Xinerama extension is available, have GetDisplaySize()
query Xinerama and return the dimensions of the first screen only.
- GLX Driver: Always specify an EWMH-compliant window type; set precise
Motif functions / decorations / input hints.
- GUI: Improve efficiency of text areas embedded into widgets (such as
AG_Numerical(3)) by enabling exclusive buffer access (EXCL option).
- GUI: Implement AG_ColorFromString().
- AG_Scrollbar: Provide EXCL and AUTOSIZE options. New "inc" binding for
setting the scrolling increment.
- AG_Scrollbar: Now handles clicks outside of control bar by seeking
progressively to match the behavior of most other GUIs.
- AG_Text: Add AG_TextTabWidth() for setting rendering tab width
(subject to AG_PushTextState() attribute stack).
- AG_Text: Add AG_UnusedFont() for decrementing reference count on a
font.
- AG_Button: Provide an EXCL option. Remove MOUSEOVER code since
mouseover
style is now handled generically.
- AG_Text: Add fontconfig support to AG_FetchFont(), if available.
- AG_Text: Fix multithread behavior of AG_TextTmsg().
- AG_ProgressBar: Add EXCL option.
- AG_Text: AG_TextRender() may now fail and return NULL.
- AG_Menu: Fix modal behavior of AG_MenuExpand()-generated popup
windows.
- AG_Menu: Implement AG_MenuCollapseAll().
- AG_Widget: Added USE_MOUSEOVER option and MOUSEOVER flag.
- AG_Widget: Added USE_TEXT option and 'font-changed' event, so we can
effectively deal with dynamic font changes required by zooming.
Widgets which map surfaces generated by AG_TextRender() are expected
to enable USE_TEXT and implement a 'font-changed' handler.
- AG_File: Implement AG_RegisterFileExtMappings(3).
- AG_FileDlg: Implement user-settable "mask hidden files" (MASK_HIDDEN)
and "filter by extension" (MASK_EXT) options.
- AG_FileDlg: Use the ag_core AG_User(3) interface to determine home
directory.
- AG_FileDlg: Avoid a duplicate refresh when widget initially appears.
- AG_FileDlg: Cosmetic fixes; add flags to hide specific elements.
- AG_Editable: Implement buffer access and control interfaces (see
manual page, "BUFFER ACCESS ROUTINES" section).
- AG_Editable: Textboxes may now bind to AG_Text(3) elements; added
MULTILINGUAL option and AG_TextboxSetLang().
- AG_Editable: Implement new clipboard interface.
- AG_Editable: Improve scrolling behavior, allow pixel-based as well as
line and character-based scrolling queries.
- AG_Editable: With the word-wrapping feature, consider all possible
Unicode space characters, not only isspace().
- AG_Textbox: Inherits the above changes to AG_Editable(3); added EXCL
option.
- AG_Tlist: Add AG_TlistSetIconWidth(), `tlist-return' event.
- AG_Slider: Add EXCL option.
- GUI: Implement AG_Color(3) interface; add "color" binding to
AG_HSVPal(3).
- GUI: Handle top-down encoded images correctly in AG_SurfaceFromBMP().
- GUI: Implement AG_DirDlg(3) widget as an alternative to AG_FileDlg(3)
for selecting directories only.
- GUI: Store tunable GUI settings in agConfig.
- GUI: Process driver options passed to AG_InitGraphics()
- GUI: Implement AG_SetFont() and AG_SetStyle() functions, for setting
style attributes on a per-widget basis.
- GUI: Added globally-inheritable widget style attributes "font-family",
"font-size", "font-weight" and "color" (see STYLE PROPERTIES section
in AG_Widget(3)).
- GUI: Implement AG_RedrawOnChange(), AG_RedrawOnTick()
- GUI: Implement AG_SetVideoSurfaceSDL() operation for changing the
video context at runtime with sdl* drivers.
- GUI: The "polled label" feature of AG_Label(3) is now implemented
using the more general AG_PrintfP() (see the new AG_String(3)
interface).
- GUI: Fix MacOS X build if _USE_SDL_FRAMEWORK is set.
- AG_Table: Don't compare cells across columns when restoring selection
state in AG_TableBegin() / AG_TableEnd().
- AG_DriverMw: Create a windowless "root" driver instance, so we can
handle things like X server connections more efficiently.
- New built-in conversion units: EnergyPerSubstanceAmount,
MolarHeatCapacity, Resistivity, ThermalConductivity,
ThermalExpansion, Density.
- AG_Notebook: Fix memory leak of container widgets on detach.
- AG_Notebook: Use an embedded AG_Label to display text labels.
- AG_GLView: Implement background fill (BGFILL) and underlay options.
- GUI: Added AG_UsingGL() and AG_UsingSDL() test functions.
- GUI: In AG_TextCache(3), use a more efficient expiration policy which
does not require timestamps.
- CORE: Document all routines related to C strings in AG_String(3).
- CORE: Implement a formatting engine built into Agar, AG_Printf(3).
This extends the standard printf(3) functionality with support for
custom modifiers and formatting routines. The AG_PrintfP(3) interface
also provide a generalized, non-GUI version of "polled labels" of
AG_Label(3).
- MATH: Implement AG_Printf(3) modifiers; see M_String(3).
- CORE: Introduce AG_User(3) user information access routines.
- CORE: Introduce AG_Net(3) cross-platform network API.
- CORE: Implement AG_BindVariable(), AG_DerefVariable(),
AG_CompareVariables().
- CORE: AG_InitCore() now allows NULL as progname argument.
- AG_DataSource(3): Implement AG_OpenNetSocket() and
AG_DataSourceRealloc().
Document the internal API to allow user-defined sources.
- Prevent binary structure differences when compiling threaded vs.
non-threaded and debug vs. non-debug (thanks reinoud!).
- Define the global GUI variables (agKbdDelay, agText*, etc.) in ag_gui.
agConfig is no longer auto-loaded in AG_InitCore(), so libraries such
as ag_gui have an opportunity to create variable bindings before
loading.
- In AG_ObjectFind(), recognize pathnames terminating in "/".
- CORE: Implement AG_ObjectGetName() variant to AG_ObjectCopyName().
- CORE: Implement AG_ObjectLoadFromDB(), AG_ObjectSaveToDB().
- CORE: Implement AG_GetStringP() variant to AG_GetString().
- CORE: Implement AG_ObjectGetInheritHier(),
AG_ObjectGetInheritHierString().
- AU: Introduce AU(3) audio interface.
- MATH: When compiling for SSE, ignore the configure-specified
precision and force M_Vector[34], M_Matrix44 and M_Color into
single-precision.
- MATH: Implement M_Polyhedron(3); document M_PointSet(3) interface.
- MATH: Implement SSE versions of additional M_Matrix(3)/M_Vector(3)
operations.
_______________________________________________
Agar mailing list
[email protected]
http://libagar.org/lists.html