
MGUI Release history

************** Release 1.4.0

* First distributed release (only Windows)


************** Release 1.4.1

* Porting done to DJGPP 2.0 with GRX 2.0
* Porting started to Linux GRX 2.0/svgalib
* Added support to SVGA BGI 5.5 (up to 64K colors)
* Operative environment switch macros changed. The old values WINDOWS,
  BORLANDC are set but could not be supported in future releases:

  - DJGGP       ->      DJGPP_MGUI
  - WINDOWS     ->      WIN_MGUI, WINDOWS
  - BORLANDC    ->      BC_MGUI, BORLANDC
  - UNIX        ->      X11_MGUI

* Fixed a bug in reading some 24 planes bitmaps.
* Fixed a bug in opening the subpulldown of the first pulldown item.


*************** Release 1.4.2

* Window resize feature implemented (with Alt-Drag) in BGI/GRX.
* Fixed a bug in the pixmap data allocation function (X-Window only)


*************** Release 1.4.3

* Fixed another bug in reading some bitmaps (all platforms).


*************** Release 1.4.4

* Macro name changes (due to a mistake):
	WS_HATCHED_IN	-> WS_ETCHED_IN
	WS_HATCHED_OUT	-> WS_ETCHED_OUT
  Old names are also present for backwards compatibility
* Added function: MObjectGetSensitivity()


*************** Release 1.4.5

* Fixed a bug in the Text Cut & Paste feature (BGI & GRX only)
* Environment variable GRXFONT is now defaulted to MGUIDIR (GRX only)
* Added in 'mgui/sys' the static font files for GRX


**************** Release 1.5.0

* First registerable release
* Added push buttons for closing and maximizing/restoring windows (BGI/GRX)
* Added function MObjectGetFont()
* Added function:
	MPullDownSetItemAccel()
  It overrides the old:
	MPullDownSetItemAcc()
  which does not set the acceleration text. A macro is present in mgui.h for
  backwards compatibility.
* Fixed some bugs in function:
	MEditChangeText()
  Now correctly redraws the Object and resets the scrollbars (Multi Line Edit).
* File Selection Dialog no longer changes the program's current directory
  (DOS and Windows).
* Menu bar and title bar should no longer move down when resizing.
* Added macro MGUI_RELEASE in file 'mgui.h' (value 150 for 1.5.0).
* Fixed some bugs in the Cut, Copy and Paste features using
  <Ctrl+X>, <Ctrl+C> and <Ctrl+V> keystrokes.
* Added the system call 'signal(SIGINT, SIG_IGN);' in the GRX implementation to
  prevent program termination due to a <Ctrl+C> (DJGPP and Linux console).



**************** Release 1.5.1

* Changes in the mouse event report
  Macros for the 'button' member:
  - Button1	-> Left   Button
  - Button2	-> Middle Button (3-buttons mouse)
		-> Right  Button (2-buttons mouse) in X-Window
  - Button3	-> Right  Button
  BitMasks for mouse buttons and key modifiers in the 'state' member:
  - ShiftMask
  - ControlMask
  - AltMask
  - Button1Mask
  - Button2Mask
  - Button3Mask

* SCROLLBAR mouse action changes:
  - A page scrolling is achived by pressing the left mouse button outside the
    slider.
  - Dragging the slider with the left mouse button no longer centers the slider
    to the mouse cursor position.
  - By pressing the right or the middle mouse button, the slider is centered to
    the mouse cursor position.


**************** Release 1.5.2

* Fixed a bug in function MEditGetSubString()
* MFileSelection() no longer operates floppy disk seek in Win32 version
* Edit cursor should no longer overwrite the '_' character.
* Changes in Windows static fonts:
  - SMALL_FONT	from 'Courier New' height 15 to 'Courier New' height 16
  - LARGE_FONT	from 'Courier New' height 22 bold to 'Courier' height 20
* Added function:
	void MEditSetAutoIndent(OBJECT *edit, int on_off);
  It sets/resets the auto-indent option for the multi-line EDIT
* Modal windows are now realized, by default, centered on the window
  that loses the input focus. (All platforms)
* Modal windows are realized 'transient for' the window that loses
  the input focus, rather than the last created one. (X-Window only)
* Macro MGUI_RELEASE is moved in file 'mguidefs.h' and is now in hex (0x152).


**************** Release 1.5.3

* Default line spacing changes from 1 to 0 in the EDIT Object.
* Edit cursor blinking no longer causes mouse pointer to blink (Windows with
  no hardware cursor support)
* Fixed a bug in file printing within a Windows 16 bit application running
  under Win 95.
* Printing is now possible under the Borland Win32 version
* First Win 95 version (Visual C 4.0)


**************** Release 1.6.0

* Word selection via a double click on the EDIT Object now only includes
  digits, alpha and '_'.
* EDIT Object now accepts characters in the range 1-254 via the
  <Alt + 3-digits> input sequence. For example <Alt+0+2+7>
  (decimal 27) inserts the Escape character code in the EDIT.
* Second and third mouse button press acts as a shortcut for the Paste function
  in the EDIT Object
* Menu item acceleration text is now left-aligned
* Centering Modal windows no longer puts them outside the screen (when
  possible)
* Bug Fix in MObjectSetBackgroundRGB() and MObjectSetForegroundRGB()
* Bug Fix in the EDIT Object resize method
* Bug Fix in the cursor drawing method for the EDIT Object
* Bug Fix in MShellConfigure() method (DOS BGI and DJGPP only)
* Bug Fix in text drawing alignment (DOS GRX and DJGPP only)
* Bug Fix in Pulldown positioning (Win32 only)
* Added functions MEditSetTabSize() and MEditSetClipWindow()
* Long and case sensitive filename support in the file selection dialog box
  in the DJGPP version
* MCreatePixmapFromFile() returns an empty Pixmap Object rather than a NULL
  if it fails to load the specified file.
* Added function MPixmapSetImageFile()


**************** Release 1.6.1

* RS232 experimental support removed
* The space bar now activates the selected button
* Directory separator macro changes:
	SLASH	->	DIR_SEP
* mguidefs.h no longer includes windows.h when compiling under Windows.
  This dramatically boosts the compiling process for Win32 target.
  Compiling mguitest on a 133 MHz AMD 486 PC with Borland C 4.52 now requires:
  - 56,741 lines compiled in 16 sec
    in previous release:
  - 4,913,000 lines compiled in 213 sec


**************** Release 1.6.2

* Fixed a bug in the EDIT text drawing when text is changed within the validate
  callback
* Fixed a bug in the MENU item activation callback calling:
  the second argument (the calling item) is now correct even if the
  callback is called due to the accelerator key pressing.
* MSListGetElement() and MSListGetSelected() now return (LIST_ACT *) rather
  than (char *)
* Added function MSListAddElement()



**************** Release 1.6.3

* Mouse events catched with the EventNotify callback now correctly report
  x and y members as relative to the Object, when it's a SHELL.
* Added function MSListSetSelectionCallback() which sets a
  callback invoked when:
	- a mouse button press occurs in the list
	- the focused item changes due to a Arrow/Page/Home/End
	  key press.
	- the Ins key toggles the selection status of an item
	  in the MultiSelection List
	- deleting an item from the list the focused item
	  changes (position or content)
	- the focused item is changed via MSListChangeElement()
	  and MSListChangeItem().
   The structure reported as second argument by the callback is 
   type (LIST_SEL *), which includes all fields in LIST_ACT and adds the
   field 'pe'. This field points to the Event that causes the callback
   calling. When the callback is called due to item deletion or
   modification, the 'pe' field is NULL. Both KeyEvent and MouseEvent
   include the 'state' field which contains a bit mask of the modifier
   keys state: (AltMask, ShiftMask, ControlMask).
   For MouseEvent only, the 'state' field includes mouse button mask
   (Button1Mask, Button2Mask and Button3Mask). The 'pos' field is -1
   when the list becomes empty.
* Added function MGetKeyboardState() which returns a bitmask
  containing the possible OR-ed values: AltMask, ShiftMask, ControlMask.
* Fixed a bug occurring when children are added to an Unmapped parent.
* Fixed a bug occurring when children are deleted from an Unmapped parent.
* Unsensitive buttons and menu items now look like in Windows 95
* Push Buttons now accept a null shadow.


**************** Release 1.7.0

* Porting to Watcom DOS 4G started.
* Fixed a bug in MCharWidth() (DOS BGI only)
* Optimized the AutoSize/Resize/Position methods of the FORM Object
* Optimized the Default Object Color setting
* Added automatic menu titles and items mnemonics. For example:
	<Alt+F> opens the 'File' pulldown
	<o>	selects the 'Open' item


**************** Release 1.7.1

* Some functions and type name regarding pixamp are changed to eliminate
  confusion between the PIXMAP as an Object and the PIXMAP as an image:

   MPIXMAP			-> MIMAGE
   MInstallPixmap()		-> MInstallImage()
   MUninstallPixmap()		-> MUninstallImage()
   MDrawPixmap()		-> MDrawImage()
   MReadPixmapFile()		-> MReadBMPFile()
   MFreePixmap()		-> MFreeImage()
   MCreatePixmapPButton()	-> MCreateImagePButton()
   MPButtonSetPixmap()		-> MPButtonSetImage()
   MCreatePixmapRButton()	-> MCreateImageRButton()
   MRButtonSetPixmap()		-> MRButtonSetImage()
   MCreatePixmapTButton()	-> MCreateImageTButton()
   MTButtonSetPixmap()		-> MTButtonSetImage()

  Macros are however activated in mgui.h (under #ifdef OLD_MGUI) for
  backwards compatibility.

* Added support for 24 bit TIFF files in Linux (requires libtiff by Sam Leffler
  downloadable from sunsite)
* New functions:
   MIMAGE MAllocImage(int img_w, int img_h, int nplanes);
   	Allocates memory for an image 'img_w'*'img_h' with 'nplanes'
   	valid 'nplanes' values: 1, 4, 8, 24 (2, 16, 256, 16M colors).
   MIMAGE MReadTIFFFile(char *fname);
   	Reads a tiff image file as a 24 planes image.
   void MImageGetInfo(MIMAGE pm, int *pw, int *ph, int *pnplanes);
   	Returns image width, height and number of planes.
   void MImageGetPixelRGB(MIMAGE pm, int x, int y, int *pr, int *pg, int *pb);
   	Returns R-G-B values for the pixel at position x,y in the image.
   void MImageSetPixelRGB(MIMAGE pm, int x, int y, int r, int g, int b);
   	Sets R-G-B values for the pixel at position x,y in the image.
   	Inefficient for 1/4/8 planes images.


**************** Release 1.7.2

* Fixed a bug in computing the bytes/row in 2 and 16 color Bitmaps.
* TIFF support now includes: black & white, 256 gray scale, colormapped
  16 and 256 colors (with 16 bit palette)
* TIFF support is extended to DJGPP and Win32.
* New functions:
   void MImageGetCMapEntry(MIMAGE pmi, int i, int *pr, int *pg, int *pb);
   	Returns the R-G-B values for the colormap entry 'i'.
   	For 1/4/8 planes images only.
   void MImageSetCMapEntry(MIMAGE pmi, int i, int r, int g, int b);
   	Sets the R-G-B values for the colormap entry 'i'.
   	For 1/4/8 planes images only.
   int  MImageGetPixelIndex(MIMAGE pmi, int x, int y);
   	Returns the index in the colormap corresponding to the image pixel
   	at position x,y.
   	For 1/4/8 planes images only.
   void MImageSetPixelIndex(MIMAGE pmi, int x, int y, int i);
   	Sets the image pixel at position x,y the index 'i' in the colormap.
   	For 1/4/8 planes images only.


**************** Release 1.7.3

* Support for GIF images added for all platforms (no additional lib required).
* Support for JPEG images added for Linux, DJGPP and Win32.
  The JPEG support requires the free library libjpeg 6a by IJG
  (downloadable from sunsite)
* New functions:
   MIMAGE MReadJPEGFile(char *fname);
   MIMAGE MReadGIFFile(char *fname);
* File Selection Dialog now supports multiple file filtering specification
  (example: "*.bmp,*.gif;*.tif *.jpg"). Valid separators are characters: ',' ';'
  and ' '
* If the filter argument in the call to MFileSelection() is a NULL pointer
  or a null string, then the last user selected filter is used.
* The mnemonic character in a menu item or a menu title can now be forced
  by placing '&' before the desired character in the item or title text.
  For example, "E&xit" will activate the 'x' character as mnemonic.
* Character insertion in the EDIT Object via <Alt + 3-digits> input sequence
  now works also under Linux.
* Changes made to mgui.h for C++ compatibility
* Fixed a bug in getting extended ASCII characters (Unix only).
* Numeric Keypad characters now are correctly handled (Unix only).


**************** Release 1.8.0

* Added support for mouse cursor assigning to Objects
    MTCursor MCreateCursor(MIMAGE bits, int xs, int ys);
	bits is the image (colormapped) describing the cursor.
	black will be used as color for index 0 and white
	for index 1. All pixels in the image with color index
	other than 0 and 1 will not be part of the cursor.
	mask is a 1 plane image used to mask the image bits.
	BEWARE: currently does'nt work in Windows.
    void MObjectSetCursor(MOBJECT obj, MTCursor cursor);
* Added support for popup or label help when the mouse enters the Object
  window
    void MObjectSetPopupHelp(MOBJECT obj, char *str, int delay, int duration);
          The text in the string 'str' will appear in a popup window
        when the mouse pointer enters the Object 'obj'.
          'delay' specifies the time in millisecond to wait before opening
        the popup window when the cursor stops into the Object. Valid range
        is 0 - 32000. Default (delay < 0) is 500.
          'duration' specifies the maximun time the popup stays open (in msec).
        Valid range is 1000 - 32000. Default (delay < 1000) is 5000.
    void MObjectSetLabelHelp(MOBJECT obj, char *str, MOBJECT label);
        The text in the string 'str' will appear in the Object 'label'
        when the mouse pointer enters the Object 'obj'.
    void MObjectChangePopupHelpText(MOBJECT obj, char *str);
    void MObjectChangeLabelHelpText(MOBJECT obj, char *str);
    MIMAGE MPixmapGetImage(MOBJECT pixmap)
* Added support for popup menu handling.
  New functions:
    MOBJECT MCreatePopupPullDown(MTFont font);
    	Creates a pulldown menu not linked to a menu bar. Items or subpulldowns
    	can be added with MPullDownAddItem() and MCreateSubPullDown().
    	Item accelerators are not permitted.
    void MPopupPullDown(MOBJECT pm, int x, int y);
    	Pops up a pulldown menu created with MCreatePopupPullDown() or
    	a pulldown already linked to a menu bar at screen position (x,y).

* The E_MOTION, E_WINDOW_ENTER, E_WINDOW_LEAVE events are now despatched
  even if the destination Object hasn't grabbed the mouse.
  E_WINDOW_ENTER and E_WINDOW_EXIT are not despatched to the SHELL
  Object in Windows.
* Mouse position report is now in the range 0 - (ObjectWidth-1)
  previuosly: 1 - ObjectWidth
* Now it's possible to set multiple user callbacks to get notification
  of Object events.
  The functions:
     MObjectSetEventNotifyCallback()
     MObjectSetDestroyCallback()
  are replaced by
     MObjectAddEventNotifyCallback()
     MObjectAddDestroyCallback()
  Macros are however activated in mgui.h (under #ifdef OLD_MGUI) for
  backwards compatibility.
  New functions to remove the above callbacks:
  void MObjectRemoveEventNotifyCallback(MOBJECT obj, OBJ_EVENT_CB cb, void *ad);
  void MObjectRemoveDestroyCallback(MOBJECT obj, MGUI_CB cb, void *ad);
* Fixed a bug in scrolling areas under Windows (when the scrolling window is
  partially obscured by another window)
* Fixed a bug in navigating with the mouse in menu items when pulldown and
  subpulldown are open in locations other than the natural ones
* Fixed a bug in Timeout setting. Values greater than 36 minutes now work.
* Fixed a bug in restoring the window area obscured by a popup window.
  Present only in console versions (BGI, DJGPP, SVGALIB)


**************** Release 1.8.1

* Corrected event masks for codes higher than 'E_PARENT_UNMAP'
* Fixed a bug occurring when a new window is open within a timeout callback
  if the mouse is grabbed (for example by an open menu).
* Fixed a bug occurring when a new window is open within a timeout callback
  if another window is being moved (BGI, DJGPP and Linux SVGAlib versions).
* A new event (E_GRAB_LOSE) is added to notify the Object owning the mouse
  (and keyboard) grab, that it is about to lose it, due to a new window
  opening.
  This event is notified to the InputCallback for a DRAWAREA Object.
* The '\r' character is now filtered by the EDIT Object when followed by
  '\n'. This makes it possible to correctly handle DOS text in EDIT
  Objects under Unix.


**************** Release 1.8.2

* MObjectShell(obj) now returns NULL if the ancestor of obj is not a SHELL.
  This happens if the object (or a parent of it in the hierarchy) has been
  deleted from the hierarchy (with MDeleteObject()) or it has been created
  with a NULL parent.

* MObjectResize() now only forces needed resize.


**************** Release 1.8.3

* New macros for static fonts:
	- FIXED_SMALL	(replaces SMALL_FONT)
	- FIXED_MEDIUM	(replaces MEDIUM_FONT)
	- FIXED_LARGE	(replaces LARGE_FONT)
	- TIMES_SMALL	(replaces TIMES_N_FONT)
	- TIMES_MEDIUM	(replaces TIMES_L_FONT)
	- TIMES_LARGE	(new)
	- HELV_SMALL	(replaces HELV_N_FONT)
	- HELV_MEDIUM	(replaces HELV_L_FONT)
	- HELV_LARGE	(new)

* Automatic font size selection with regard to the screen resolution.


**************** Release 1.9.0

* Object and system resources handling (Windows and X11 only)
* New functions:

  - char *MGetStringOption(char *name, char *opt_name);
  - char *MGetTextOption(char *name);
  - int MGetIntOption(char *name, char *opt_name, int *ret);
  - int MGetFontOption(char *name, MTFont *ret);
  - int MGetBGColorOption(char *name, int *pr, int *pg, int *pb);
  - int MGetFGColorOption(char *name, int *pr, int *pg, int *pb);
  - int MGetShadowOption(char *name, int *shadow, int *i_t, int *o_t);

  - void MSetTextOption(char *name, char *text);
  - void MSetIntOption(char *name, char *rname, int val);
  - void MSetFGColorOption(char *name, int r, int g, int b);
  - void MSetBGColorOption(char *name, int r, int g, int b);
  - void MSetShadowOption(char *name, int shadow, int in_t, int out_t);
  - void MSetFontOption(char *name, MTFont font);
  - void MSaveOptions(void);
  - void MObjectEnableOptions(MOBJECT obj, char *name, CARD32 mask);
  - void MObjectSaveOptions(MOBJECT obj);


**************** Release 1.9.1

* Run time Object options setting with store in the application resource
  file
* New functions:

  - void MEnableCustomizing(void);
  - void MObjectGetShadow(MOBJECT obj, int *shadow, int *i_t, int *o_t);


**************** Release 1.9.2

* Object and system resources handling now works for DOS too.
* MFileSelection() now uses the dir parameter to set the starting directory
  (with optional drive for DOS & Windows).
* <Control+Tab> & <Shift+Tab> now work in GRX version of MGUI.


**************** Release 1.9.3

* Fixed a bug in the SCROLLBAR drawing when the slider size grows.
* Fixed a bug in functions:
	- MImageGetCMapEntry()
	- MImageSetPixelIndex()
	- MImageSetPixelRGB()
	- MImageGetPixelRGB()
* New function (useful for password entry):
	MOBJECT MCreateHiddenEdit(MOBJECT, char *, int, MTFont, char);
* arcs in MDrawArc() and MDrawFilledArc() are now expressed in tenth of
  degrees (range 0-3600).
* New function for deactivating the activated radio button:
	void MRButtonDeactivate(OBJECT *o)


**************** Release 1.9.4

* Fixed a bug in the MFileSelection() multiple filter. Now files are
  inserted in the list only once.
* Fixed a bug occurring when drawing in xor mode (GRX only)
* Desktop background and active window title font/color can now be
  specified in the resource files (DOS versions only)
  
  
**************** Release 1.9.5

* Porting to Watcom Windows, Win32 and DOS/4GW done.
* Fixed a bug occurring when the OPTIONEDIT popup list is closed via
  the ESC key press.
* The Return and Enter keys now generates same effects in all objects.
* Iconifying a window under Windows no longer resizes it to null.
  This is related to a bug in MGUI Designer for Windows, fixed in release
  2.1.1, occurring when a project session with iconified shell windows
  was saved.
* MEditGetSelection(MOBJECT ed, int *start, int *end) now correctly
  returns *start < *end.
* Fixed a bug in retrieving resources (DOS only).
* Fixed a bug in MFormAddKeyCallback() when applied to a SHELL (DOS only).

  
**************** Release 1.9.6

* Automatic Push buttons mnemonic support.
  By setting the '&' character in the button text, the next character is
  automatically used as an accelerator (using <Ctrl+char>).
  For example, if you set the text "&Quit" as the button text, then
  the string "Quit" is displayed and <Ctrl+Q> is set as accelerator.
  Otherwise, if you set the accelerator key via MPButtonSetAccelerator()
  using <Alt+letter> or <Ctrl+letter> (A_? or C_?) or the letter itself
  (case unsensitive), then the proper character in the button text (if any)
  will be displayed underlined.
