My graphic design skills are poor, a fact all the more frustrating because I have a good enough eye to recognize when something looks bad, but not the aptitude to improve it.
Unlike less restrained people, I haven't inflicted the unreadable crimes of Word Art on my fellow humans since I was a teenager (though as previous work on implementing gradients for the MovieClip drawing API shows, when you have an excuse, playing with garish gradients is still fun!). But along with other design-incompetents, I'm fascinated by adventurous graphics and patterns.
As well as many stability fixes, Gnash 0.8.9 brought improvements in sound playback, gradient rendering, RTMP remoting support, and implementation of important parts of the BitmapData class.
For the next version, provisionally 0.8.10, there are already some exciting new improvements in the development repository: the Qt4 GUI supports clipboard setting and mouse wheel input, the BitmapData implementation is optimized and extended, and the XML class is finally fully implemented.
For the age of the internet, Flash has an extraordinarily long history, stretching for almost 15 years since its introduction in 1996. It's had to adapt continually during this time, developing from a simple animation format with limited user interaction to add network connections, video, camera and microphone access, remoting and two separate versions of an extensive scripting language.
Gnash has recently been benefiting from some performance enhancements.
Sandro Santilli started profiling ActionScript execution and noticed some serious bottlenecks in the way Gnash handles property identifiers.
The release of Gnash 0.8.8 brings various improvements to rendering, ActionScript execution, compatibility, and flexibility.
But the most significant change is more of a removal than an addition: Gnash no longer has any AVM2 code. AVM2, the ActionScript Virtual Machine introduced in the Flash player 9, is increasingly used in new Flash movies.
It was becoming clear that the original implementation (started in about 2006) of the newer ActionScript Virtual Machine was fundamentally flawed. So fundamentally that it was obstructing code for the old virtual machine without any benefit to Gnash at all.
This week I implemented the LocalConnection ActionScript class in Gnash. It is too late for Gnash 0.8.7, which should be released imminently. But the six months of testing before the next release are certainly a good thing where this code is concerned.
LocalConnection allows the player to communicate with other players or instances using shared memory. It is even used for communication between AS2 and AS3 loaded in the same SWF, since they can't otherwise talk to each other.
Since SWF6 it has been possible to generate gradient fills dynamically using ActionScript. Version 0.8.7 of Gnash will have support for these gradients.
The attached screenshot shows them working in Gnash, or see the original code and SWF.
SWF8 added more options to gradient fills. Gnash 0.8.7 does not support these, but it would be possible to add some or all of that support. If you are interested in having this functionality, please contact me!
Gnash 0.8.7 comes with memory optimized XML parsing and much improved compatibility.
The XML and XMLNode classes in ActionScript 2 enable parsing and handling of XML trees. Mostly they are used for configuration data or bits of dynamically loaded content. But sometimes - one example is openstreetmap.org's "potlatch" editor - the XML can have thousands of nodes.
Even a simple XML tree with so many nodes has significant memory requirements. We have to store not only the node type, node value and, if appropriate, the node content and attributes, but also links to parent and child nodes.
Our next release of Gnash, 0.8.7, is due in February, and it comes with plenty of changes. This is the first of a couple of posts explaining what I've been working on since the last release and where you can expect improvements.
The inflexible design we inherited from GameSWF is gradually improving to the point where Gnash almost has a stable API for some of its central classes. You still can't rely on it staying the same, but the better design that's emerging (and the fact that Gnash has a design at all now) means that any changes should be limited.
It's quite unusual to find any use of __resolve in real Flash movies. That's why it hasn't been supported in Gnash up to now. But after investigating why Gnash didn't play the Flickr widget, it turned out the widget relies on __resolve to implement certain functions of the Flickr API.