- Wed Oct 27 23:44:00 2004
Initial development release

- Fri Oct 29 13:57:56 2004
Some makefile changes for linux svgalib target.

- Mon Nov  1 17:39:15 2004
Changed DEGFX draw function to return void and added hide pointer function.

- Tue Nov  2 10:41:31 2004
Some improvements in the docs.

- Tue Jan  3 22:03:41 2006
Added basic Sinclair QL port and small code fixed submitted by Peter Graf.

- Sat Jan  7 14:06:22 2006
Put in Peter Graf's most recent QDOS driver.

Put in bitfields.

Updated MX_VECTOR and separated from DETK.

Put Sinclair QL in DEGFX targets documentation.

- Sun Jan  8 17:42:52 2006
Small optimization in fasthline.

- Sun Jan  8 20:53:56 2006
Change to font draw API (no background color) means faster gui objects in
almost all cases.

- Tue Jan 10 09:32:58 2006
Separated color encoding from main lib.  Now we can have internal color 
encodings other than argb8888.  This may be useful in speeding up the
Sinclair QL port.  Added a rgb332 encoding as a proof of concept.  The
drivers still might need to be able to check to see what encoding is used to
work properly so argb8888 should be used unless there is good reason not to.

- Tue Jan 10 14:47:16 2006
Fixed bugs in antialiased text draw introduced by previous update.

- Tue Jan 10 23:25:18 2006
Improved color blending on the rgb888 encoding.

- Fri Jan 13 21:36:25 2006
Removed QL port until it matures more.

Fixed some const problems and other things mentioned by Peter Graf.

Split mx_win into mx_basicwin part.

- Fri Jan 13 23:21:21 2006
Added some QDOS resolutions to the DEGFX platform for DEPUI.

- Sat Jan 21 13:24:17 2006
Separated MX_TREE and MX_STRING from DETK.  Still have to split more modules
into separate subdirectories.

Updated MX_ATOM with code for real delete-locking.

Changed some macro names and internal names for more consistent naming.  Prefix
mx__ used for internal functions and variables.

Changed construction of root object to make better structure for client/server.

Changed theme calls of start/stop to make more sense.  When changing themes, 
stop is now called before trying start.  If this fails the old theme is 
restated.  If this fails too the default theme is started.

Made linux/svgalib independent from vgagl, only need to link to vga lib now.

Made fallback code for linux/svgalib if mode isnt recognized to convert
pixel-by-pixel.  This will be slow but at least it will work.

Made debug root window show estimated stack size.

- Sat Jan 21 14:57:42 2006
Fixed prototypes of some DEGFX font drawing functions.

- Sat Jan 21 15:31:16 2006
Added empty driver to allow compiling only platform independent code so that
the portable code can be easily check by a new compiler.

Small improvements to code to compile under Visual C++ Toolkit checked using
the DEGFX empty driver.  Still need to get the SDK to try to compile DEPUI with
this compiler.

- Sat Jan 21 15:41:34 2006
Switched zipping program to InfoZip.

- Sat Jan 21 15:55:07 2006
Fix release script to put correct ZIP file for download.  oops.

- Sun Jan 22 12:47:16 2006
Made all filenames lowercase for easier porting to case sensitive platforms.

- Sun Jan 22 14:21:48 2006
Added makefile target to change filenames to lower case.

- Mon Jan 23 13:24:50 2006
Changed some internal names for more consistent naming.  All library names 
start with either MX or mx except macros for true and false.

- Thu Jan 26 12:25:20 2006
Several places a MX_LOCK was replaced by a MX_REFERENCE.  This probably results
in the exact same code but the source is a little more elegant.

Changed focus handling to only give focus to the object currently handling an
event.  This solves a range of potential problems of a focus target bieng 
deleted while handling focus and simplifies focus handling messaging.  We no 
longer need MX_FOCUS_WANT of MX_FOCUS_GOT messages.

Buttons now get the focus when clicked.  When a button has the focus and
space or return is pressed the the selection state is toggeled.  Windows get 
the focus when they or a child object gets a mouse button press.  

The themes should really draw objects differently depending on whether they 
have the focus or not but none of them do right now.  Possibly a generic 
method of drawing a yellow outline around the focused object might work in
many cases.

When a child window gets an unused ESC key, the window destroys itself.  This
is useful for temporary windows like gfx mode and file selectors.  The root
window has a close button in the upper right to force a close.

Active window handling also simplified.  The active window is simply the
window containing the focus object.  We can avoid the MX_ACTIVE messages and
related API functions by redrawing the active window borders during focus
handling.

Should there be a focus object per window instead of per system?

It appears that the svgalib function vga_setrgbcolor is very primitive and is
probably the reason that some linux users see only black screens.  I dont know 
enough about svgalib internals to fix this. :(

- Sun Jan 29 23:10:28 2006
Added rgb555 color encoding to DEGFX.  Now there are encodings for 8, 16 and 32 
bits.  You could probably make a generic color depth header by building off 
masks and shifts for red, green, ble components.

Changed the linux/svgalib to better choose the mode and also to convert 
pixel-by-pixel as I am having trouble with the reliability of the old code to
choose a good mode.  There still may be problems.

Added a argument to the platform textsize function to return the length of the
last line drawn.  This should (hopefully) be useful for drawing a cursor on a 
text object in the right place.

Modified the WIN32GDI platform of DEGFX to recognise non-printing keys.  What
exactly windows in putting as the scan code I am not sure.  Possibly we need
some kind of unified handling on non-printing keys built into each platform. 
The easiest way is probably with a lookup table in each platform.

Simplified the API by removing the armable and selectable functions.  They were 
originally intended to limit the events passed to objects but they hardly 
influence the actual number of events and were unnecessary.

Removed uses of MXASSERT macro since it did the exact same thing as the 
standard assert macro and isnt standard.

- Tue Jan 31 01:00:02 2006
Completely separated the font choice from the theme.

Small change to focus handling so that active window remains active even when
focus object gets deleted.  This happens when navigating a file selector.

Change filename selector example to choose/change the gui default font.

Removed bytechar monochrome bitmaps since the code was almost exactly the same
as for that for bytechar antialiased fonts.

Fixed antialiased font drawing to correctly handle transparency in the text
color.  Bit fonts already did this correctly.

Should there be a default font for all objects of a window?

- Thu Feb  2 02:04:35 2006
Added an DEPUI empty platform useful for porting to different compilers or
platforms.  It is included by the module define MX_PLATFORM_EMPTY.

By default a window is created as a child window of the window handling the
event.  So the mx_win_child function no longer needed since it is the most
usual conditions.

Removed the MX_ARM event as well as the the armed flag for MX_OBJ since the
object getting the MX_POINTER_PRESS always gets armed.  Also since there is 
only one pointer there can only really be one armed object per system.

Changed the platform font interface to make it possible to have the line 
breaks in block text within DEPUI and not within DEGFX.  This will help making
drawing a cursor and selected text more portable across platforms.  

Made a very basic framework for MX_EDITTEXT object.

- Mon Feb  6 14:53:02 2006
Continued conversion of MX_TEXTUAL object to use MX_TEXTCHUNK. Chunks can have 
their own font and alignment.  If the chunk uses the default font then the font
from the MX_TEXTUAL object is used.

Big fixes for the (still useless) MX_EDITTEXT object.

More changes in platform interface an an effort to make MX_EDITTEXT portable.

Because of the platform changes the Allegro platform wont work and is 
temporarily removed.

Removed the DEGFX mono theme.

Added example pui6.c to test MX_EDITTEXT and file selection.

- Mon Feb  6 17:36:50 2006
Improvements in MX_EDITTEXT.  Still some problems with jumping cursor position
when using mx_text_set.

- Thu Feb  9 00:00:21 2006
Added scroll bars to pui6.c.  There are still problems with giving the edit
area the focus when the scroller is clicked.

Small change of drawing cursor for DEGFX platform.

Added simple home/end/up/down keys to MX_EDITTEXT.  

Some changes to simplify the MX_FILESEL and to use a proper MX_EDITTEXT to
input the filename.

- Thu Feb  9 16:30:55 2006
Made DEGFX DJGPP VESA driver use the protected mode bank switch interface if 
it is available for a small speed increase.

Fixed some portability problems pointed out by Peter Graf.

- Thu Feb  9 20:57:47 2006
Moved cursor into the MX_TEXTUAL.

- Sat Feb 11 02:00:51 2006
Changed the way the available fonts are saved in the core from a vector to a
list (actually a tree) of references.  This fixed a memory leak introduced when
the platform font API was changed.  As long as users create a reference to a 
font the new method guarantees (I hope) that fonts wont get prematurely 
freed.

- Sat Feb 11 02:30:09 2006
Fixed potential use of unitialized memory when allocating a gui font.

Made guifont list use double linked list which is more memory efficient than a
tree.  

Split platform header from depui.h so that we can work towards making DEGFX 
and DEPUI compilable as normal libraries too.

- Sat Feb 25 16:55:46 2006
Changed module defines to all have MXMODULE_ prefix instead of library
dependant prefixes.  Although the new method reduces the available namespace
it makes it possible to include a module without having to know what library
provides the module.

Split DETK into a generic data structures library (DEDS) and a gui-specific 
toolkit library (DETK).  

Modified DEPUI, DEGFX, DETK and DEDS to compile as a normal library.  Also
made makefile for individual libraries.

Removed the need for mx_gfxmain and mx_puimain.  User can just use a standard
C main function which is more user friendly.  The windows platform just calls 
the users main function.

Becaue the library uses extra memory in struct for debugging the main program
and the lib MUST BOTH be built with the same debug flags.  So probably its
best to have a specialized debug flag for each library. :(  Modified source
not to relay on DEBUG or NDEBUG flags (other than asserts).

Changed some filenames to make it possible to flatten the dir tree with 
minimal changes to the makefiles.  This may be useful to shorten pathnames
for platforms with very limited path lengths.

- Fri Mar  3 21:01:29 2006
Added MX_PLATFORM_TURBOC to DEPUI which uses Borland BGI to draw on the 
screen.  

Converted MX_STRING to use int length instead of long.  This greatly reduces
the number of warnings for 16 bit platforms.

All programs now compile on 16 bit platforms with minimal warnings.

- Sat Mar  4 02:36:19 2006
Added MX_PLATFORM_MGRX to DEPUI which uses MGRX to draw on the screen.  Use
"make mgrx" to make the examples.

- Sat Mar  4 12:40:03 2006
Made pattern match use semicolon separated patterns so multiple patterns
can be matched at once like: "*.c;*.h".  Also improved underlying filename
pattern matching using code from Alessandro Cantaore.
http://xoomer.virgilio.it/acantato/dev/wildcard/wildmatch.html

Removed debugging mx_delete accidentally left in corepui.c. oops.

- Mon Mar 27 16:20:24 2006
Allegro platform functioning again but only with 1 theme.

Open Watcom 1.3 (WIN32) platform working again.

Bugfix for sliders which sometimes scrolled 1 pixel too far.

MX_VECTOR is now 100% typesafe!  I doubt that there is a typesafe vector class 
for C anywhere else.  However I did have to remove the nice vect.vector.size 
access to the vector size and capacity.  This is because assigning to unions 
when one of the union elements is const gives some problems with the standard.
The macros mx_vector_size() etc can be used to get the vector size and capacity.

Added MXDOC documentation for many functions and modules.

Modified MX_LIST to use DEDS mx_dllist_*() macros for handling LX_LISTELEM 
elements.

Slight change to handling of MX_GFXMODE_OK event to make handling more 
consistent with other MX_*_OK events.

Updated to GPL license Version 2.

Added Doxygen documentation for entire codebase.  This is useful for code
exploration.

- Thu Mar 30 21:51:36 2006
***API BREAK***
Changed events to return unsigned int instead of void*.  This will help when
trying to separate the gui into client-server.  It also allows events to return
true/false or even flags which is elegant in some cases.

***API BREAK***
Changed event API to include a length for data.  This is useful and probably
necessary for client-server applications to limit the amount of data in an 
event and to make it possible for objects to have different address spaces.
Check with Peter Graf if this is really necessary.

Changed the event stack (mx) to be const.  This requires some ugly casts-away
of const in event sending code but makes users code safer.  User should never 
change the current event info anyway.

Changed the exponse event sending code to only make a new event stack top once
even when multiple expose events are called.  This greatly reduces stack use
when redrawing.

- Mon May  1 21:17:10 2006
Changed MX_TEXTUAL chunking mechanism to use DEDS DLLIST macros for safer and 
more compact source code.

Removed alignment flags from text chunks since this cant be implemented 
properly outside of the text chunker code.  Modified most of the theme code
although some small changed still need to be made.

Changed internal theme drawing API for text chunks so that alignment etc. is 
moved into the chunker or the theme itself.

Changed some macros that disappear when debugging is off (eg. MXINVARIANT) to 
have name MXDEBUG_*.  All macros with this name should be guaranteed to have no 
runtime cost when debugging is off (MXDEBUG is undefined).

Put one textchunk into the MX_TEXTUAL object since each MX_TEXTUAL will use at
least one chunk.  This reduces the number of allocations.

Changed the way windows are brought to the top by removing the MX_TOP event.

Some small changes to window code so that later the window/button/textual and
maybe object and event code can go into different modules.  This will make the 
documentation for the core pui functions easier to understand by removing them
from the monolithic corepui.c file although this is still far from complete.

Make a root window class which helps make it possible to move window into a
separate module.

Included DOXYGEN and MXDOC documentation into zipfile.  I am working on 
MXDOC 2.0 so the format of the MXDOC pages may change in the near future.

- Sat May  6 00:47:20 2006
Lots of comment changes for MXDOC 2.0.  The new comment style is more flexible 
and less visually intrusive.

Fixed cursor drawing for focus in DEPUI/DEGFX default theme.

- Sun May  7 14:02:38 2006
Fixed inconsistent function declaration mx_gfxmode_info().

Fixed minor startup redraw problems mentioned by Peter Graf.

- Mon May  8 00:26:05 2006
Fixed MX_THEME_* defines which were broken.  The MX_FONT_* defines likely need
fixing too.

- Thu May 11 00:25:27 2006
Changed MX_THEME_* module defines to MXMODULE_THEME_* for naming consistency.

Changed MX_FONT* module defines to MXMODULE_FONT_* for naming consistency.

Got the MXMODULE_DRIVER_* module defines to work again.

Getting the module defines to work probably broke the attempt to make DEPUI
compile also as a library.  It seems very hard to get these things to work 
well at the same time.

Button no longer take the focus and default window handler no longer moves
the focus when handling a click.

Changed focus handling so that there is one focus object per window and only
the focus object of the active window gets keyboard events.  Removed the 
mx_focus() function because it was possible to abuse because it was object
controlled instead of system controlled.  Added a mx_wantfocus() function
for objects to say if they want the focus or not and objects are only given
the focus if they are clicked and want the focus.  Because objects are given
the focus instead of asking for it the MX_FOCUS_GOT event is sent to inform
them.

- Wed Jan 17 13:04:49 2007
Added GNU Global to documentation script.

Changed MX_TEXTUAL chunking mechanism to be more efficient so rechunking not
required when changing the cursor position. This makes cursor positioning 
much more efficient.

Moved cursor handling from MX_TEXTUAL to MX_EDITTEXT which is really where it
belongs.

Modified documentation to use MXDOC version 2.0

Changed class derivation structure to avoid different functions for objects 
and derived objects.  All object access is through macro wrappers which do 
the necessary type conversion.  This really cleans up the user code by 
requiring fewer API points to use.

Improved MXDOC documentation.

Some improvements to MX_EDITTEXT especially to tab handling but still LOTS
of work to do.

- Thu Jan 18 14:33:19 2007
Fixed some compiler problems on Open Watcom found by Peter Graf.

Made MX_EDITTEXT area scroll when the cursor is moved outside the visible
boundaries.

Made cursor jump to place when pointer clicked on MX_EDITTEXT area.

Added a mx_focus_default function that allows an object to get the focus on
window activation as long as no other object already has the focus.
- Sun Feb  4 15:16:22 2007
Compiling DEPUI/DEGFX/DETK/DEDS as a library is possible again now.  Just 
include "depui/depui.h" instead of "depui.depui.c".  When compiling as a 
library (i.e. not as as source code library) all 'optional' modules resulting 
from MX_*_ALL are defined to make sure all elements are included in the 
library.

Fixed some problems with updating MX_EDITTEXT on screen when adding text. 
Still problems with scrolling MX_EDITEXT area with cursor but its better now.

Slightly improved file selector handling of incorrect or incomplete paths or
patterns.

DEPUI compiles with TinyC compiler and Digital Mars compiler!

Removed the title text from MX_SCROLL and MX_LIST objects to simplify the
scrolling code.  It started to get complex and buggy and I wanted to simplify
the objects.

Moved MX_FOCUS_* events out of the MX__INTERACTIVE region as these arent
strictly related to user interaction.

Replaced MX_POINTER_WANT event with a flag mx_pointer_want().  This unifies,
simplifies and speeds up mouse interation a little bit.

Fixed top-level textual alignment in MX_TEXTUAL and derived classes.
Probably MX_TEXTCHUNK should be come a complete object which would certainly
make the theme API a bit more consistent.  Maybe a new MX_LABEL type?

Default themes for Allegro and MGRX now use an internal buffer for the screen
drawing. This removed screen flicker and may speed up the drawing as the only
screen drawing is a blit and all other drawing is to a memory bitmap.

Moved most of the pui6.c code into an texteditor object MX_TEXTEDITOR.

Made file selector also return paths that dont match to an existing file.
This is necessary for a reasonable save file function.

Made active window switch when a child window is made modal.  This pulls the
focus to the modal child window when it is made.  This behavior may change
in the future as I really dont like it when the focus gets pulled away from 
the user.

Made MX_ALERT window to show alerts/warnings/errors.

Made it possible to make windows unresizeable with mx_win_noresize() and
uncloseable (!) with mx_win_noclose() and unmoveable with mx_win_nomove().

Made it possible to hide the window title with mx_win_notitle().

Small improvements to desktop theme handling. (exit button gets correct size
when the theme is changed)

MX_FONTSEL now changes the default font if it receives no response to the
MX_FONTSEL_OK event.  This makes it consistent with the theme and gfxmode
selectors.

Renamed graphics mode selector MX_GFXSEL for naming consistency.

Removed theme selection from MX_GFXSEL and made MX_THEMESEL theme selector.

Some small changes to themes to make themes more visually compact.

Removed the mx_textual_width() and mx_textual_height() functions because
mx_defaultrect should almost always be used anyway.  Otherwise the theme
code cant properly wrap those calls.

Made rounded theme show which list element has the pointer.

Added some MX_LOCKS and runtime asserts in class code which need MXDEBUG 
defined.

Made a system level manu and a desktop example file.  The menu is a list
and it correctly creates scrollbars if the menu is long enough to go off
screen.


