2010-03-20 (Adam)
 * Slight optimisation to painting - we no longer draw the background color, Qt does it for us.
   Also, only render the parts of the buffer that have changed.

2010-03-13 (Adam)
 * Add a bezier curve smoothing algorithm. Strokes with the FitToCurve flag set are
   rendered with an approximate bezier curve. Gives much smoother looking strokes.

2010-02-21 (Adam)
 * Optimise the painting of strokes. Cache logic added to IsfQtDrawing and only
   strokes that have been added are painted. Also, no longer do a full bounding rect
   recalculation when a stroke is added.

2009-10-03 (Adam)
 * Remove unused HIMETRIC conversion methods.

2009-09-11 (Adam)
 * Improve doxygen comments of InkCanvas.

2009-09-10 (Valerio)
 * Do not add twice single-dot strokes in InkCanvas.
 * Removed a leftover debug message.
 * Fixed the Drawing copy constructor, which was copying even empty lists.
 * Fixed Bit Packing compression and the Delta-Delta transform, now the lib
   works perfectly again.
 * Fixed argument parsing in test_decode.

2009-09-10 (Adam)
 * Don't extract private members in Doxygen output.

2009-09-09 (Valerio)
 * Added Fortified GIF read-write support. New optional dependency, giflib.
 * Added Base64-encoded input/output data support.
 * Updated the documentation files.
 * Added Doxygen documentation infrastructure. There still are a lot of errors.
 * Created proper Doxygen documentation for all classes.
 * Moved the resource files into the /data/ directory.
 * Added a proper copy constructor for Drawing.

2009-09-09 (Adam)
 * Add draw-eraser.svgz to comply with Oxygen licensing requirements.

2009-09-08 (Adam)
 * Make copyright headers standard across all files.
 * Replace the eraser cursor with draw-eraser.png take from Oxygen 16x16 icon set.

2009-08-30 (Valerio)
 * Rewritten the algorithm detection methods.
 * Changed the names of some internal data classes, and improved their namespaces.
 * Added a maximum drawing size check, to avoid errors from resulting in 80k by 70k pixel wide
   drawings.
 * Moved all algorithms into src/data/algorithms.
 * Renamed the Gorilla algorithm to "Bit Packing".
 * Separated the delta-delta transformation methods into their own files.
 * Added an algorithm to do bit-packing of bytes.
 * Fixed bug in DataSource, the last bit of data was never read.
 * Added parsing the GUID table tag and saving the GUIDs into Drawing.
 * Added parsing of custom tags and decoding their contents.

2009-08-29 (Valerio)
 * Fixed skipping unknown custom tags contents.
 * Changed more method names to adhere to Qt's method naming style.

2009-08-29 (Adam)
 * Start qt-ifying the function names ie, "penSize()" instead of "getPenSize()".
 * Add methods to return pen size, colour and brush type from InkCanvas.
 * Always write at least one transformation to the stream: if no custom transforms, write the default one.
 * No longer take ownership of Isf::Drawing instances set with setDrawing().
 * By default InkCanvas' initial Isf::Drawing instance that is created is no longer allocated
   with new. This frees us from the concern of "when do we delete this initial reference?".
 * Rename Isf::InkEdit to Isf::InkCanvas. A better suited name.
 * When building bundled isf-qt, link statically and do not install any library components.
   Non-bundled builds a shared library and installs all components.

2009-08-28 (Adam)
 * Fix writing of transformation data: write in the correct order and scale the transform values
   appropriately before writing.
 * Write TIDX properly when transformations change between strokes.
 * Properly apply scaling when calculating the bounding rectangle.
 * Do not use Compress.decode(*) calls as function parameters. The order of parameter
   evaluation is platform-dependent and hence cannot be relied on.
 * Properly apply stroke transforms when drawing; scale pen size appropriately.

2009-08-24 (Adam)
 * Fix Drawing::getStrokeAtPoint to properly return point strokes.
 * Prevent strokes from having a bounding rectangle of size 1x1 (otherwise the eraser never hit them)
 * Tweak the collision distance to give a 25% margin of error (in practice this works well).

2009-08-23 (Adam)
 * Add Drawing::getStrokeAtPoint method. Uses Heron's Formula and triangle heights to determine
   if the cursor is positioned above a stroke. Seems to work quite well and appears to be fast.
 * Basic eraser support working. Individual strokes can be erased.
 * InkEdit now shows a custom cursor - a point drawn with the current stroke colour and width.
 * Drawing now calculates its bounding rectangle as necessary. Calls to finalizeChanges are not
   necessary anymore.
 * Remove cropping. Found a better method whereby InkEdit will draw the rendered ISF using the
   offset provided by the bounding rectangle of Isf::Drawing.
 * Supply the FitToCurve flag for all strokes. Windows will render them using Bezier smoothing, making
   them appear nicer.
 * Upgrade the TestInkEdit application. Supports multiple stroke colours and pen widths.
 * Remove InkEdit::getImageBytes and replace with InkEdit::getBytes. InkEdit doesn't write to GIF.
 * Support changing the colour of the InkEdit canvas.
 * Add a convenience method, InkEdit::save(), that will write the ISF drawing to a given QIODevice.
   Optionally will write the drawing in base64.

2009-08-23 (Adam)
 * Bug fixes in isf-qt: properly assign stroke attributes when changing colour on InkEdit.
 * Fix a crash that would occur if stroke attributes or transform were null.
 * Initial version of isf-qt InkEdit committed. Works reasonably well. Not integrated in KMess yet.
 * Added a cropping property to Isf::Drawing. When true, Drawing::getImage returns a cropped image
   and getSize returns the cropped size. When false, does the opposite. Necessary for InkEdit to
   properly support adding strokes to loaded Ink data.
 * Add a test application for new InkEdit. Can create, save and load Ink data in both raw ISF and
   ISF-base64 format.
 * Fix a bug in tagswriter which cause corrupt ISF data if there were no metric blocks.

2009-08-20 (Valerio)
 * Implemented writing metric blocks into ISF streams.
 * Fixed transformation/attributeSet/metrics index writing, now the index tags are written only
   when necessary.
 * Removed all user-side required conversions between HiMetric units and pixels. The library
   now only offers data expressed in pixels.
 * Fixed a bug in writeHiMetricSize() which prevented ISF streams from being parsed by older
   Microsoft.Ink libraries, like the one of Windows Messenger.

2009-08-20 (Adam)
 * Fix install path of FindIsfQt.cmake.
 * Don't attempt to install FindIsfQt.cmake if the library is build bundled.

2009-08-19 (Valerio)
 * Added DataSource::reset() method to start reading data back from the start.
 * Added to DataSource some ways to detect errors.
 * Rewritten the multi-byte encoding tests.
 * Switched away from QTransform to QMatrix for transformations.
 * Fixed the write order of transformation values.
 * Fixed stroke saving. The library should now be able to generate new ink.
 * Renamed Isf::Parser::isfToDrawing() and Isf::Parser::drawingToIsf()
   to Isf::Stream::reader() and Isf::Stream::writer() to enhance readability.
 * Renamed the Isf::PointInfo structure to Isf::AttributeSet, because the old name made no sense.
 * Added manipulation methods for strokes, transformations and attribute sets.
 * Fixed compiler warning. Thanks to Émeric Dupont.
 * Fixed colors in written streams.
 * Fixed the Scale&Translate transformation once again.
 * Isf::Drawings are now created on the heap instead of on the stack, to avoid unwanted object
   deletions.
 * Added optional parameter to Isf::Drawing::getPixmap() to choose the background color of
   the created image.
 * Added a method to compute some useful values before rendering new and changed drawings.
 * Added a couple stream writer improvements.

2009-08-14 (Valerio)
 * Added Drawing::clean() method to reset a drawing without creating a new one.

2009-08-13 (Valerio)
 * Added DataSource method to append bit arrays to the data.
 * Implemented Huffman encoding. Still missing is the algo to select the best encoding index.

2009-08-07 (Valerio)
 * Added an AUTHORS file with credits.
 * Implemented Gorilla compression.
 * Added stroke writing in the stream writer.
 * Moved all of Drawing's object lists to pointer lists, to ease comparing their items.

2009-08-06 (Valerio)
 * Added Metrics recognization and saving.
 * Made sense into the property tags: they're now all in the PacketProperty enum.
 * Added MultiByteCoding utility methods to find out the encoded size of a value.
 * Changed the installed include files directory to PREFIX/include/isf-qt .
 * Added a NOTES file with possibly useful stuff.
 * Added metrics measurement units, found on MSDN.
 * Added a couple more checks on data.
 * Moved include isfdrawing.h to isfqtdrawing.h .
 * Fixed CMake installing bug and added C++ style includes, <IsfQt> and <IsfQtDrawing>.
 * Fixed name of the drawing-to-isf converting method.
 * Fixed crash when given an invalid drawing address.

2009-08-05 (Valerio)
 * Extended Adam's last fix to the other main drawing properties.
 * Added maximum stroke pen size value.
 * Added stroke and drawing bounding box values.
 * Added adjusting the drawing's bounding box to include thick strokes.
 * Enabled transformations.
 * Fixed transform data order, it was inverted for scale+translate transforms.
 * Fixed destination QPixmap's size, it's now fit for the drawing.
 * Completed CMake rules, now the library can be installed on the system and
   other projects can find it.
 * Improved debugging rules, now debug mode is controlled (again) from CMake
   and verbose output is configurable.
 * Fixed the documentation to reflect the name change "libisf" to "isf-qt",
   and updated it.
 * Added updated KDevelop3/4 project files.
 * Changed the library structure:
   - separated the public interface includes into the /include/ dir
   - moved all internally used inclusions and data structures into
     /src/isfqt-internal.h
   - reorganized the internal files structure
   - renamed class Tags to TagsParser as there will be a TagWriter (made up name)
   - Renamed the IsfData class to DataSource as it is at a lower level than ISF.
   - Moved the ISF parser into a class Parser, found in include/isfqt.h and src/isfqt.cpp
 * Added a dummy drawing-to-ISF method in class Parser.
 * Added multibyte encoding methods taking a DataSource.
 * Added float encoding method and fixed uint encoding method.
 * Fixed seeking bug in DataSource::append() methods.
 * Added DataSource::prepend() methods.
 * Started working on the ISF stream writer.

2009-08-05 (Adam)
 * Correct an issue with incorrect colours for strokes.

2009-08-04 (Adam)
 * Re-save test ISF data with official Microsoft Ink classes.
 * Add functions to convert between HiMetric units and pixels.
 * Antialiasing whilst drawing ISF to QPixmap.
 * Fix the drawing of ISF data to QPixmap: draw the lines correctly between points.

2009-08-04 (Valerio)
 * Fixed endianness problems when retrieving datastream bits with IsfData.
 * Added a new parameter to IsfData::atEnd() to check if the buffer was all used,
   including the current byte's bits.
 * Changed IsfData::seekByteBack() with seekRelative(), which makes more sense.
 * Added IsfData::skipToNextByte() to discard the current byte's bits and move on
   to the next byte.
 * Added Isf::Drawing method getPixmap() to convert a drawing to a QPixmap. Quite raw
   at the moment, but still.
 * Moved actual tag parsing into Isf::Drawing::parseTag().
 * Added a whole lot of tags to Isf::Tags. Now the parser is able to recognize the most
   useful tags (and mostly make use of their data).
 * Added a GUID mapping from the ISF specs, I doubt it'll ever be used though.
 * Added float decoding method to multibytecoding.cpp.
 * Added new test ISF files - more complex - and sorted all test ISF files by complexity.
 * Added new test application "test_decode", which displays a parsed ISF file.
 * Added pressure data recognization.
 * Added stroke description blocks recognization.
 * Fixed stroke payload parsing appearing when not needed (and wasting bytes).
 * Added a set of data structures to hold metrics and to better contain stroke attributes.
 * Reorganized the code of the Tags namespace, it's now a class with all static members;
   this simplifies quite a bit the passing of data between that and IsfDrawing.
 * Fixed bug in the GUID Table tag parser.
 * Added more compiler flags (and warnings) to ease debugging.
 * Added the infrastructure to link metrics and transforms data to the strokes.
 * Finally linked the drawing attributes and stroke info to the strokes' data:
   libisf-qt is now correctly decoding all tests (except test 6).
 * Fixed all compiler warnings and improved the debugging output.
 * Fixed point rendering didn't work when points are made by a line from a point
   to the same point.
 * Fixed broken main parser loop, continued forever.

2009-07-30 (Valerio)
 * Added IsfData class to read and write bit-by-bit an array of bytes.
 * Changed all the code to use it instead of plain QByteArrays.
 * Completed huffman decompression support.
 * Added algorithm data to help writing gorilla decompression.
 * Added tests for the IsfData class.
 * Added tag recognization.
 * Fixed some IsfData bugs.
 * Changed default CMake build type to debugfull.
 * Completed Gorilla decompression support.
 * Started tag parsing work, made basic analysis methods.
 * Made the ParserError enum (now IsfError) the library's error enumeration system.
 * Continued a bit the tag parsing work, added a couple tags and another testfile.

2009-07-08 (Adam)
 * Make decode(UInt|Int) take a reference as a position parameter. This
   reference is then incremented as the integer is decoded.
 * Re-work tests for IsfDrawing.
 * Create IsfDrawing::fromIsfData() static method to create a new IsfDrawing
   instance from a QByteArray containing ISF data.
 * Begin state matchine for ISF parser.
 * Add appropriate unit tests for ISF parser.
 * Added TODO file for libisf to keep track of things.

2009-06-30 (Adam)
 * Parse ISF version number properly; add unit tests for it.
 * Fix CMakeLists.txt to build with debug info by default
 * Moved format/types.(cpp|h) into the multibytecoding.(cpp|h) classes.
   Also moved these into libisf/ and deleted format/ directory.
 * Added Isf::encodeInt to encode a signed integer into multibyte format
 * Added test cases for the encode/decode functions.
 * Re-add libisf.h
 * Fix wrong e-mail addresses in copyright info.
 * Created a unit test framework for libisf-qt; run using make test
 * Created IsfDrawing class which will represent an ISF drawing.
 * Added some rudimentary unit tests for IsfDrawing
