This file: CHANGES. Describes day to day progress of the XmHTML development. October 7 Dithering to a fixed palette is now fully possible. There are four different methods available (closest match without error correction, ordered with and without error correction and closest match with error correction). You can specify a palette using the XmNimagePalette resource or let XmHTML create one for you. October 6 Working on implementing support for the XmNimageMapToPalette and XmNimagePalette resources, which allow you to define a palette for XmHTML to use. Besides the obvious advantages this can offer, another advantage is a rather large speedup when switching pages: since a palette contains a fixed number of colors, XmHTML can allocate all colors on startup and doesn't have to free them until it is destroyed. This obliterates the need to release allocated colors each time a new page is loaded. October 3 Replaced the current quantizer with a compacter and faster one. Previously XmHTML carried two quantizers: one for global use and one specifically for PNG images. Fixed a bug in the colormap reading code of GIF images. October 2 Fixed a small bug in form handling: optionmenu's didn't get reset when the reset button was pressed. September 28 Added support for Fast Loadable Graphics. This is a format especially designed for XmHTML and optimized for *very* fast loading of images. The FLG format is actually nothing more than a compacted version of the XmImageInfo structure, and as such it supports plain transparency, alpha channel and animations (with all GIF disposal methods). Data can be stored either compressed or uncompressed. Uncompressed FLG's are the fastest possible way to load an image into XmHTML, but they can take up a huge amount of space. A funny thing I noticed though is that, quite often, an uncompressed FLG takes up less space than the same image saved as a GIF image... Animation support: the global colormap of an animation is now only allocated once for the entire animation instead of being allocated for each frame separatly. This has two significant advantages: memory usage is reduced and less time is spent in allocating colors. XmHTML will now also use the global colormap if the local colormap of an animation frame is equal to the global colormap. September 26 Some changes to reduce memory usage: - Changed the type of the color component fields of the XmImageInfo structure from signed int to unsigned short (can save up to 1.5kb per image). Modified all internal color allocation routines as well; - the size of the clipmasks is now computed correctly: storage occupied by clipmask data has been reduced by a factor 8; - alpha channel processing of PNG images been modified to use a colormap instead of full RGBA quartets: the 24bit RGB data is converted to an 8bit paletted image and the alpha channel is stored separatly. This reduces the memory occupied by these images with at least a factor two; September 22 A lot of improvements in the font allocation/caching routines: - a separate font cache for each display is now maintained. The previous scheme didn't look at which display it was running while the font cache was shared between every XmHTML instance. Displaying multiple instances of a XmHTML widget on different displays should now be possible; - made the font caching scheme a lot more efficient and removed the limit on the maximum number of loadable fonts (it now uses a binary tree lookup instead of a lineair search through a table with fixed size; - fonts are now freed when the widget is destroyed (that is, the actual font data is only freed if the widget being destroyed is the last widget using a display-bound font cache); - modified the internal data structures so font properties are now stored with each font instead of calculating them each time the layout needs to be recalculated; One very major performance enhancement is the introduction of a smart font mapping scheme which maps unknown font names to known ones. I am particularly pleased with this scheme, it allows XmHTML to map fonts it does not know in the beginning to known ones later one. Assuming the helvetica font is present in your font path and arial isn't, the following happens: when XmHTML encounters a tag, it will not know to which font it should be mapped and it will use the default font (whatever that is). However, when at a later stage a is encountered, XmHTML will see that this Arial font can be mapped to the Helvetica font (which it does known), and as a result, any future reference to the Arial font will be mapped to the Helvetica font. XmHTML is smart enough to take any combination of weight, slant and size into account when making these decisions. Performance tests with the new font caching and mapping schemes show some very satisfactory results: the cache hit ratio is steadily increasing, approaching 90 or more percent after about 10 documents with different fonts have been loaded. The average number of search actions seems to remain steady around 7 in this case. The font cache contained 55 fonts (including 10 font mappings) in various families, sizes and styles. As a side note: this new ``font technology'' allows users to define their own font mapping by providing a document with a list of simple font mappings. See html/font_map.html for a sample document. Before I forget: I made the builtin cursor allocation display-independant as well. September 21 First success at flowing text around images with the ALIGN="LEFT" or ALIGN="RIGHT" attribute set. September 20 Small parser bugfix: mime type of a new document wasn't properly saved. Added a ``View Document Source'' menu item to example_2 and fixed a bug in jumping to locations in different files. September 18 Fixed a few important bugs: - imagemap list wasn't properly reset when a document was reformatted. Could lead to a SIGSEGV in some cases; - list of anchor data wasn't properly reset in some cases; XmHTML now properly honors the XmNstringDirection resource: when set to XmSTRING_DIRECTION_R_TO_L, text is properly inversed. Paragraphs contents are ordered from bottom to top. Needs a bit more work though: list markers are always left-aligned at the first line of a paragraph instead of right aligned at the bottom. Modified the linebreaking algorithm to handle line/paragraph breaks properly when the paragraphs contain non-text objects (HTML form components and images). Table support: changed the text layout algorithms to work independantly of XmHTML's dimensions. They now use a (dynamically adjustable) bounding box. September 16 When the title of a document is requested, leading and trailing spaces are now removed. Added the HeadDocType mask bit to the XmHTMLGetHeadAttributes() convenience function. When set, the value of the tag will be returned. Improved path resolution and mime detection routines in example_2.c September 10-12 Some prelimenary work on XmHTMLTextGetFormatted() September 4 Fixed a few important memory leaks. One of those caused the stored anchor data never to be freed. Reverted a few bad fixes. September 1 XmHTMLTextSetString fix, text was always rendered twice. Moved all resources into a stringtable. This actually seems to introduce a rather noticable speedup in document loading. Haven't got the slightest clue why this happens. August 29-31 Numerous bugfixes & memory leak fixups. A GRAND applause to Ricky Ralston for having the courage to run XmHTML through purify. Thanks Ricky!! Started with daily snapshot distribution. August 28 Released XmHTML/Alpha Version 1.0.21, last Alpha release. The next release will be the first publically available Beta. August 26 Rewrote and extended
 support greatly. Plain text, form
	components and images can now be mixed freely.

	Some minor changes in anchor rendering: anchors are now only extended to
	the right when there is room for it, they no longer cover adjacent text
	when activated.

	Added the XmNimageRGBConversion resource which allows one to select
	the conversion method XmHTML should use when converting 24bit to 8bit
	images.

August 25
	Changed the proto's for XmHTMLImageReplace() and XmHTMLImageUpdate():
	they now return a status indicating whether or not the document needs
	a recomputation of document layout if an image is replaced or updated.

	Fixed a bug in the default image processing: when images are delayed, the
	delayed icon wouldn't show up. I forgot to properly propagate the image
	dimensions.

August 21, evening
	Fully restored PNG alpha channeling support, there was a silly bug in
	doing the 24 to 8 bit conversion. Alpha channeling is now also supported
	for delayed images and any combination of background setting, set either
	via the loaded document or the SetValues method.
	See XmHTML PNG Demo for some screenshots.

	Transparent background images are now also supported.

August 21, morning
	Fixed a bug in delayed image loading that caused a fatal crash when
	the delayed image was freed.

	Progressive and normal image loading now share the same XImage creation
	and update routines. Also fixed clipmask creation for progressively
	loaded images.

	Rewrote most part of the handling of PNG images with an alpha channel.

	Several bugfixes and changes to example_2 and it's caching routines.

August 20
	HTML form support: vertical scrolling of a document with a HTML form in
	it should now be correct whether or not a horizontal scrollbar is present.
	Also fixed a bug in the SetValues method which caused XmHTML to ignore the
	already present form widgets.

	Modified the debug routines, output can now be sent to a file.

	Eliminated some dead/duplicate code in the painter and widget methods.

August 19
	HTML form support:

	-	The traversal stuff for tabbing between all HTML form components
		almost works. Still need to figure out the proper XmTextField
		translations so the tab key can be used instead of the enter key;
	-	added support for the HTML