Changes in CGUI
A C Graphical User Interface [add on to Allegro] by Christer Sandberg
Email: christer.sandberg@mdh.se
Homepage: http://www.idt.mdh.se/~csg/cgui/
The CGUI Changes File
Changes from 1.6.8 to 1.6.9:
-
Fixed bug #1065843 "Mouse not hidden when drawing"
-
Fixed bug #1079309 "Mouse trapped when resize width of list column"
-
Fixed bug #1052423 "Name conflict"
-
Fixed bug #1079009 "Text cursor lost"
-
Fixed bug #1065532 "Cursor are not where showed in editboxes"
-
Fixed bug #1065832 "Browse bar in listbox not correct"
-
Fixed bug #1076180 "Bug in list-row drop callback"
-
Fixed bug #1060523 "Browse* don't update correct"
Changes from 1.6.7 to 1.6.8:
-
Added Portuguese translation of texts contributed by Márcio A. Pacheco
-
Added Cygwin build.
-
Fixed bug #1035113 "Mouse clicks stop working"
-
Added feature request #991417 "Add option to Request"
-
Fixed bug #715464 "Wrong call-back order"
-
Fixed bug #991048 "Folder not removed"
-
Fixed bug #985756 "Wrong tab order in tab-windows"
-
Fixed bug #985758 "Crash when using JoinTabChain"
-
Fixed bug #985759 "Blinking cursor in unfocused edit-box"
-
Fixed bug #985791 "Crashes sometimes when calling InsertPoint"
Changes from 1.6.6 to 1.6.7:
-
Fixed bug #975912 "There is no target for building dat2c"
-
Fixed bug #975263 "Bug in textbox view"
-
Fixed bug #975911 "Fonts not accessable prior to init"
-
Fixed bug #975914 "Wrong colors on icons"
Changes from 1.6.5 to 1.6.6:
-
Bug 958894 "Tab windows has an ugly stripe" is fixed (bug in setpos.c, so it might have affecte also other objects).
-
A build problem that might have shown on some Windows configurations.
Changes from 1.6.4 to 1.6.5:
-
Feature request #957949 "Improved requester": Added an alternative requester function `Request' allowing for
a format string and a variable argument list.
-
Exporting function msprintf that returns the formatted text in a dynamic allocated buffer (got it for free
from the above).
-
Feature request #957952 "Add center option": ALIGNCENTRE added.
-
Bug # 957705 "Memory bugs" fixed
-
Bug #863853 "Incorrect date<;->;string conversions" fixed
-
Parameter 'n' (the number of items) to `AddList' is ignored in case of linked list, see docs for details.
-
Feature #916094 "List tree view" is added
-
Bug #915651 "Warning messages from mktext" is fixed
-
Bug #907676 "Array overflow" is fixed
-
Bug #903292 is fixed.
Changes from 1.6.3 to 1.6.4:
-
More bugs concerning mouse: If a Requser was started before ProcessEvents were called the
mouse got lost (freezed)
-
Correction of the error handling in the date format functions.
-
Changes from 1.6.2 to 1.6.3:
-
Bug (introduced in 1.6.2): The mouse is blocked if calling Req(),
FileSelect() Invite() or ProcessEvents() from a mouse call-back after the
initial ProcessEvents().
Changes from 1.6.1 to 1.6.2:
-
Added Frensh translation of dialog texts.
-
Changed mouse event processing to totally polled in order to hope that
solves the problem with random lost (or "freezed") mouse cursor.
-
Changed o to $(OBJ_SUFFIX) in MKTEXT_OBJS in makefile.all
-
Exported parse in tools/t_parser.h (file was empty)
-
The border of the progress bar showed garbage colors. Changed
#define FRAMEW HEADERFRAME #define FRAMEW 1 in file obprogr.c
Changes from 1.6 to 1.6.1:
-
Fixed a potential bug in mouse state machine.
-
Fixed bug that made example 25 crash
-
Added a missed line about an API change in previous version, see below
-
Fixed bug in makefile (dat2c linked with lib)
-
Fixed bug that made dat2c not compile when Allegro ver < 4.03
-
Fixed bug in example 25
-
Corrected contributors name (Oscar Giner)
-
Corrected version comment (was "unofficial")
Changes from 1.5.1 to 1.6:
-
API change: 'LoadImage' is changed to 'CguiLoadImage' to avoid conflict
with some Windows header.
-
Oscar Giner added translations for Spanish langugage
-
Ferenc Havránek added translations for Hungarian langugage
-
More space added around the desription text of buttons.
-
Initialisation: Alternative functions to explictly initilise CGUI
with screenmode options (like loading settings from file, using current
settings, windowed mode etc.) has been added. This replaces the cryptical
0,0,0 codes to InitCgui. The latter can still used for fully
API compatibility with vesrion 1.5.
-
Rafal Szyja created an alternative set of icons for the icons in built-in dialogues
-
Using sound card when present (instead of the PC-speaker beep)
-
Rafal Szyja made a new example for joystick testing.
-
Rafal Szyja made a new example showing simple usage of a text viewer.
-
Docs bug fixed: CloseCgui removed (don't exist in the lib)
-
Docs bug fixed: Spelling of ALIGNRIGHT corrected.
-
Rafal Szyja corrected some miss spellings in the Polish translation.
Changes from 1.5 to 1.5.1:
- Bug: The docs are not built correctly (build of makedoc fails)
- Bug: Example 07slider: Garbage in the edit-field.
- Bug: to less colors in the palette display in the file previewer
or the file selector.
- Bug: The "requester" in the game1 looks very angry... a bug in the
graphics initialisation.
- `Palette' is not correctly spellt.
- Rafal Szyja finished translation of Polish texts.
- The current data file listing was not updated after "Use palette", in the file browser.
- Docs: wrong home-page address.
- Docs: Added link to logo.
- Docs: Forgot to run the fixver script (version was marked as "beta").
Changes from 1.4 to 1.5:
- New feature: Build procedures for Linux, and MSVC has been added, as
well as dynamic and debug alternatives for the ports.
- New feature: Several steps have been taken to simplify the make
procedure of CGUI.
- The path to Allegro is no longer necessary since the makedoc
utility is included in the distro of CGUI 1.5
- The text file containing the label-texts and the headers refering
to that, is now included in the distribution as source files, so
the mktext utility does not need to be built when building libcgui.
(This shouldn't make any difference for normal users, but the
distro will thereby be more fault tolerant. For developers of
the CGUI lib these files needs to be built).
- Applications using CGUI 1.4 needed to link with libaldat.a which is not
installed by the Allegro 'make install'. That needed to be handled
separately. In CGUI 1.5 datlib is a part of the CGUI lib itself.
- Applications using CGUI 1.4 needed to link with datedit.o in
allegro/tools. This file is a part of the lib itself in CGUI version 1.5.
- Applications using CGUI 1.4 needed to have the file cgui.dat present
in the directory of the executable. This file is a part of
lib itself in version 1.5.
- "Tool-tip" texts, has been added. See the docs for details.
- Rafal Szyja made the CGUI logo.
- Rafal Szyja added Polish translation of the the built in dialog texts.
- The text in a textbox can now be updated using `UpdateTextBoxText'.
- Improved dialogue for screen mode selection. A
button "Apply" has been added and the mode will not change until that
one has been pressed. Also a possibility to select graphics driver
has been added.
- When an object is sensible for both clicks and
drag-and-drop (using the same mouse button), the mouse-handler
distinguished the two states using a delay.
Now the mouse movement is used instead of the delay, which is a
better solution.
- `Home' and `End' keys has been added for browsing in lists.
- Files imorted to a dat-file will be stored using its
relative path rather that absolute.
- Bug in the filebrowser: Importing a wav-file didn't work (or rather:
importing an object which have an extension that can be imported to a
unique data file type has this problem)
- Bug in the filebrowser: Importing a wav-file gave memeory error.
- Bug in the browsing object: when a list-box is created with explicit
coordinates, the handle of the browsing object will be only 3 pixels
high.
- Bug in DeInitCgui. It didn't really complete the de-initialization
until the program exited. This could look like the keyboard was
locked, since CGUI's keyboard handler was still there stealing all
presses, and doing nothing with them.
- Bug in the event system. The bug showed up sometimes when a program
was about to terminate. More precise, if there were delayed events
and the program terminated by a call to 'StopProcessEvents' the
program hang in an infinite loop, just before final exit.
- Bug in edit-box object fixed.
- Bug that occasionally crashed the program (stack overflow due to
infinite recursion, may even crash the system) when trying to
refresh an empty list.
- Bug in the canvas object. The games* examples crashed often when
exit, and also the 21canvas examples (and if a window containing a
canvas was moved, there would occure undefined contents of the
canvas' bitmap).
- The example 10lists was not correctly built.
- The example 20anim didn't show correct colours if running in 8bpp.
- The re-try sequence when InitCgui fails to set the graphics mode has
been changed. Now not always assuming that a less bpp is more hopeful.
If 15 bpp mode does not work it tries 16 bpp and if 24 fails it
tries 32.
- When a new object was created under the mouse cursor, then the mouse
had to be moved (or clicked) to notify the objet that there was a a
mouse over it. In some cases this might have looked like "dropped
events").
Changes from 1.3.1 to 1.4
Changes in the API:
SetFocusOn(int id); has been added. It replaces `FocusOn',
`SetVisibleWindow', `SetSubFocus' and `SetTabFocus'
which all had the same semantic (to set focus on the specified object).
The replaced functions are still present for compatibility.
JoinTabChain(int id); has been added. It replaces `SimpleJoinTabChain'
and `NodeJoinTabChain'.The replaced functions are still
present for compatibility.
AddTextBox(int x, int y, const char *string, int width, int
nrows, int options); replaces `MkTextObject' (which
still exists for compatibility). The 5:th patameter has changed meaning.
For `MkTextObject' it meant "extra space between rows",
For `AddTextBox' it means the height of the box. There
are more option flags, and also the facilities of the box has been increased.
`FileSelect()' has been added as well as `FileManager()',
see docs for details.
`AddWatch()' has been added, see docs for details.
`AddSlider()' has been added, see docs for details.
`AddProgressBar()' has been added as well as `MkProgressWindow()',
see docs for details.
`GetMarkedRows()' has been added. It replaces `GetQueuedSelections()',
See docs for details. The replaced function is still present for compatibility.
- A number of features has been added (see the listing above, see the docs and see also the examples).
- The text-generating function has got improved error handling:
- A new parameter of `LoadText' has been added.
It is a pointer to int. The memory location pointed to will be set to 0
if the named section was not found in which case the return value of `LoadTexts'
will be NULL and a warning message will be displayed for
the user. If the section was found the value will be set to the number
of texts that was contained in the section (which may of course also be
0 for meaningless empty sections).
- The text-compiling program `mktext' generates an
additional macro (the identifier is the section name prefixed with `SIZE_')
that is defined to the number of texts in that section of the source.
This macro can be used to check if the number of texts found by
`LoadTexts' (see above) is correct.
- (bugfix) The text-strings (concerning the `mktext' tool) may
now also contain the leading language and section markers (i.e. `<;' and `[')
- (potential error) `mktext' changed to use cgui's
memory allocation functions (the allocations were not asserted).
- (bugfix) The `FocusOn' function for `EditBoxes'
forgot to move the focus from the object currently beeing in focus (the
edit-box example got crazy and generated an infinte number of windows)
- The list in Drop-Down-boxes may now contain images.
- A bug in "KillEvent" has been fixed. May have been harmful in edit-boxes
(related to cursor-blinking - a dircet selection from focused edit-box
to other object may possibly have generated memory error).
- The "focusing"-system has been partially re-written, including setting
windows in focus.
- Indication of focused push-buttons extended to make it possible to see that
an iconed object is in focus.
- The "text-box" has been extended with a number of useful facilities, se
the docs for details.
- Fixed bug: calling InitCgui a second time crashed if there were icons
in use.
Changes from 1.3 to 1.3.1
- Fixed docs: In version 1.3 the docs are broken (makeinfo fails, only
html-docs is available)
- The docs is corrected (const-parameters and return values was documented
without the const-qualifier).
- Two more functions has been "constified".
Changes from 1.2 to 1.3
New features:
- The spinbuttons now adapt thier height to be half the default height
of other objects.
- A function for "clipping" to avoid redundant areas to be blitted when
using canvas-objects for animations. The function SetBlitLimit has
now been added. Calling it before the canvas blits to screen will
use the specified limits, after the blit the limits will be reset.
The "game*" examples shows the usage.
- Adding a parameter to Req() that specifies a window header.
- A global variable to make it possible to turn off the usage of
vsync() in cgui. The name is `cgui_use_vsync'. It is initally set
to true.
- All objects (not only edit-boxes) is now automatically "tabbed", in
version 1.2 they must be "tabbed" explicitly by a call to
SimpleJoinTabChain(). Customizing the tab-order by use of
SimpleJoinTabChain() is still possible.
- When "tabbing" to an editbox it is no longer necessary to press
enter-key to focus it (i.e. make the cursor blinking and beeing
ready for input). In version 1.2 the tabbing just marked the box as
selected.
- A flag `cgui_mouse_draw_in_interrupt' is introduced. Initially it is
set to 0. If you set it the mouse will be drawn in the callback
(interrupt). By default the drawing is done as in version 1.2, i.e.
the callback puts a message into the event queue, which when
processed will draw the cursor. The purpose with setting
cgui_mouse_draw_in_interrupt is to have a more alert cursor. Testing
the examples on a slow machine (P133) don't show any need for it.
Drawing the mouse-cursor in the interrupt doesn't work well
together with canvases for the moment.
- The function InitFont is removed as well as the clobal variabel
CGUI_font.In their place there are the two functions void
SetCguiFont(FONT *f) and FONT *GetCguiFont(void). (It was quite
stupid with a global variable, which required a function call after
change).
- InitCgui no longer changes the palette if the graphics is already
initialized. If the palette needs to be changed Allegros functions
must be used. A new function named SetCguiColors(int exact) can be
used to let cgui search in the current palette and select the colours
that is as close as possible to cgui's needings. If `exact' is
non-zero the colours of the pallette entries that was selected will
be adjusted to be exact those needed for cgui. If `exact' is 0 these
colours may not be affected.
If the graphics has not been initialized before InitCgui is called,
and InitCgui set the colour to 8 bits, then it will set the colours
for the palette indecies of the cgui colours (`cgui_*') to what it
need.
- The makefile can now optionally link using a statically linked
Allegro lib. See readme.txt of CGUI 1.3 for details.
Bug fixes:
- Objects sometimes remained in the "pressed view" dispite that the
mouse-button is up and the cursor is not even over. This "hanging"
could be reset by a new click. The problem was that there was no
object-refresh for a state transition directly from
mouse-button-down-and-over to init (the normal transition is to
either mouse-button-down-off or mouse-button-up-and-over).
- Sometimes (randomly) it seemed as events were dropped. Keypresses
and/or mouse-events sometimes seemd to be missed when running
applications on a slow P1-box, but the problem couldn't be surely
repeated on a 400MHz P2 computer. There were two errors: The
mouse-data buffer (a filtered single-buffer was used) that interfaced
the interrupt-handler and the state-machine was sometimes overrun.
The concept has been changed in 1.3 and a 1024 positions buffer has
been introduced. The second problem was that the event-processor's
transfering of pending events to the event queue occationally
interfered with the interrupt-handlers' marking of new pending
events.
- The second time the ESC-key was pressed in the example "game1" it
was not recognized. Reason: Incompleate de-init.
- The program crashes when moving the mouse over the menu that pops up
when right-clicking in an edit-box (this is probably a general
problem with "scratch-menus"). Reason: improper initialization.
- When a huge number of digits is entered into an integer valued
edit-box it crashes. This is due to a limitation in gcc (djgpp): all
numeric strings with a number of digits more than 62 crashes when
scanning to integer type. The input limit for numbers is now set to
less than 62 characters (it was 100 before).
Changes from 1.1 to 1.2
- Corrected a bug (present also on the DJGPP platform) that crashed the
program when moving the cursor to the left or bottom edge of the
screen.
- Corrected a bug that crashed the program when the cursor goes from
"ready to re-size" to "outside object". Analogue problem when
dragging. (No problem under DJGPP)
- Corrected a bug that crashed the program when DeActivate or Activate
was called with a node-id as parameter.(No problem under DJGPP).
- Corrected a bug that crashed the program when calling SetListColumns.
(No problem under DJGPP).
- Corrected a bug that crashed the program when using drag-and-drop and
dragging something over areas illegal to drop on and then returning
to a "droppable" place. (No problem under DJGPP).
- Corrected a bug that crashed the program when re-sizing the height of
a list to less than 0. (No problem under DJGPP).
- Corrected a bug that crashed the program if the mouse was dragged
repeatedly over a number of menu-items when another window is in
focus and on top of the window with the menus. (No problem under
DJGPP).
- Corrected an bug that randomly hanged the mouse cursor. (No problem
under DJGPP).
- Corrected a bug that made it possible to re-size a simple object to
be of a height less than 0 (after that it was not possible to stretch
it again).
- "constified" a number of parameters to various functions in CGUI.
- Some changes in the examples (some memory voilations which led to
crash on the windows platform, and some changes to conform to the
changes in CGUI).
Changes from 1.0 to 1.1
- Adaption made to support allegro 3.9.37: Variables
_keyboard_installed and _color_depth become undefined since the
externals in allegro.h moved to alintern.h. Variables was used to
restore the inital state of Allegro if Allegro was initalized before
cgui. Solved by skipping the keyboard check and making a dirty look
in the vtable struct. No changes in functionality.
- The allegro config-file in the examples directory changed language
from se to en, and some irrelvant test-stuff has been removed from it.
1.0
- Initial official version.