-
Notifications
You must be signed in to change notification settings - Fork 1
/
RELEASE-1.5.0
184 lines (180 loc) · 11 KB
/
RELEASE-1.5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
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.
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.
- 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 provides
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.