News archive
SVGGraph 2.15.1
This new version of SVGGraph is mainly a bugfix release, though I have included a first look at a new feature that I have been thinking about for a while.
First, the bug that is fixed in this version is one that could cause the text on the X axis to be incorrect when using associative data. It took me three attempts to fix it properly, with the first and second attempts causing other things to subtly stop working. The bug manifested itself as either gaps on the axis where there was no text, or text labels in the wrong order.
The new stuff in this version is all about cross-hairs, as demonstrated in the example above. There are a load of options for displaying cross-hairs on the grid-based graphs, with optional coordinates. At the moment they are not supported by the 3D graphs or the radar graphs but the flat bar, line and scatter graphs do support them.
TagCanvas 2.3
It has been a long time since I last released a new version of TagCanvas. That must mean that there are a shedload of updates and improvements in this version, right? Well, no. There are two new functions, an extra option added to some old functions and a simple bug fixed.
The new functions are SetSpeed
and Delete
.
SetSpeed
actually sets the speed and direction of the cloud
movement using the same array of [x, y]
values used for the
initial
option. The example cloud above has some buttons and a
slider underneath that demonstrate what it can do. (Unless you are using
Internet Explorer, where the range input will just be an ugly, useless bar.
The TagCanvas SetSpeed
function works fine in IE; the
<input type=range>
slider and input events do not.)
The Delete
function is really only useful when dynamically adding
TagCanvas clouds to a page and removing them again. It cleans up the instance
of the TagCanvas class that refers to the canvas element, allowing its ID to be
reused for another cloud. It doesn't remove the canvas element itself though,
so you will have to do that yourself.
JPEG Saver 4.12
This new version of JPEG Saver adds a feature that people have been asking me about for years and another feature that nobody has ever asked me about, as far as I can remember. There are also a few bugs fixed in this version, but since I discovered them myself I don't think they are earth-shattering.
The first new feature should be obvious to long-time users as soon as you open up the configuration dialog. The “All” and “None” buttons that were there for enabling and disabling all the transitions are gone, replaced by a slider labelled “Speed”. The slider provides some control over how fast the transitions are, with five options for multiplying the default speed: ×1/2; ×2/3; ×1 (the default speed); ×1.5; and ×2. You can see the effect of these options on all the transitions in the preview window on the dialog. All of the transitions are affected equally by the slider setting - there is still no way to slow down or speed up individual transitions.
The functions of the removed “All” and “None” buttons have moved to the three-state checkbox next to the “Transitions” label above the list. The thick black dot in the checkbox means some of the transitions are enabled; clicking it will disable them all and clear the checkbox. This type of checkbox has been around for years, but I'm still not used to using it.
SVGGraph 2.15
The new version 2.15 of SVGGraph contains three new graph types and some substantial internal changes to the existing grid-based graphs. These changes are there to support drawing a second Y-axis on the right hand side of the bar, line and scatter graphs.
The new graph types are all variations on the pie graph. The donut graph is a pie graph with a hole in the middle where you can put an optional label. There is an option for how large the hole is, but apart from that it behaves like a normal pie graph. In case you are wondering, I spelled it “donut” instead of “doughnut” because of the shorter spelling, making the class and filename shorter too.
The polar area graph is a pie graph where the angle of each slice remains constant, with the value represented by the area of the slice instead. One advantage of this type of graph over a standard pie graph is that zero values are visible as gaps in the graph. The example above shows that my dough recipe has no badger in it, which could be quite reassuring.
JPEG Saver 4.11.2
Here's another minor update to JPEG Saver, fixing a couple of bugs that were reported to me and some other things that I noticed while testing and using it myself.
The most glaring bug fixed in this version is one that would rotate images incorrectly, due to my misunderstanding some of the EXIF specification. The details of how the image should be rotated to appear the right way up on the screen are stored as a field in the image's EXIF data. If JPEG Saver came across an image without an orientation field in the main block of EXIF data, it would look in the next EXIF block for the field (if there was a second block). The second block is for details about the thumbnail image that is sometimes embedded in the main image, and JPEG Saver was taking the orientation from here and rotating the main image the way that the thumbnail image should be rotated instead of leaving it unrotated. Don't ask me why the thumbnail should have a different orientation from the main image, but it can happen and now JPEG Saver should be able to cope with it.
The first bug has been around for a long time, but the second was fairly new. When JPEG Saver happened to choose the same image to display twice in a row, it was not restarting the timer to load the next image. This was because the image loading code found that the image to be loaded was already in memory so didn't bother to load it again, and also didn't bother telling the main thread that the image was loaded. This meant that the main thread sat waiting for a message that never arrived and the images stopped changing.