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

Reply via email to