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