- 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. ÿ