FluidAE: the next step
- Posted by ryanj Oct 16, 2013
- 2587 views
Thanks for the feedback on the first release alpha release of FluidAE 3.
After some discussion and thinking about some of my original goals, I would like to explain some things that I plan to add by the time FluidAE 3.0 Final is released. Any thoughts or ideas about this would be appreciated.
General
Multi-process Communication
I would like to add an easy-to-use api for multiple processes to communicate, whether on a single core, multiple cores, or even separate computers. Also, I'm considering a way for dlls to be loaded on demand, which can communicate (suggested by Kat), just like separate processes. This will basically make FluidAE a multi-tasking multi-application environment, with various configurations. It could be as simple as one EXE file, or as elaborate as multiple components that get launched as processes, or dlls, or connected to over the network. Multiple applications (include files, processes, or dlls) could work together on a single instance of a GUI, saving resources.
Cross-platform Support
Currently, only Windows is supported, but, I plan to add support for linux. I'm not sure if it will be x-windows, XCB, or GTK.
GUI Module
Common Dialogs
I will add a collection of common dialogs that any application can easily use. These will help reuse code for common things like: splash screen, color selection, “About FluidAE” to (display version info), the Debug Console, a basic question/information dialog, find/replace, etc. These can also be useful as templates for designing your own dialogs. I will also make a wrapper for the File Open/Save system dialog.
Themes, System Preferences
Eventually, there will be a theme system to customize the look of widget classes and change colors and fonts. There will be a standardized way of loading icons used for things like mouse pointers, buttons and list items. System preferences such as system colors, font size, and date/time format will be accessible, too. By the way, did you notice the custom mouse pointers that FluidAE uses?
Canvas Widget Class
I decided to change the name of “document” widget class to “canvas” because it seems to be a more accurate description. A “canvas” lets you draw a background and a foreground (using a sequence of simple drawing commands), and define handles that the application can use to respond to keyboard/mouse events. Handles can be any shape you want, not just rectangular areas. They are identified by drawing each handle's shape on an invisible bitmap. Each handle has a unique color assigned to it. Whichever pixel color is at the mouse coordinates identifies which handle the mouse is over. By responding to Handle events, the application has complete control over how the canvas looks and behaves, so it can be used for all sorts of things, like: Word processor, vector drawing program, CAD, image, chart, calendar, etc. This is what I'm currently working on.
Additional Modules
Document Module
The GUI is a “module” in FluidAE. I'm going to add a Document module, which will provide a standardized way of editing the data of a document (whatever type that may be: formatted text, CAD drawing, vector drawing, MIDI file, etc.) using a set of commands, which the application defines. These commands can then be called from the application (usually triggered by GUI widget events, such as clicking on buttons in a toolbar, or on menu items). The commands would modify the document's data in a controlled way, so that the application doesn't have to deal with the internal document sequences directly. There would be an integrated undo/redo engine, too. The application could then have a collection of customizable toolbars with buttons, menus, etc. that let the user execute commands with a click of the mouse. Or, when canvas handles send events to the application (dragging something on the canvas, or pressing keys) it can execute commands to modify the document (insert text at the cursor location, or move a node on a spline curve object, for example).
Printer Module
I want to add the ability to print documents to a printer, using the operating system's print API. I don't know how to do that yet, but it needs to be done.
As you can see, when FluidAE 3.0 is finalized, it will be more than a widget toolkit. It will have pretty much all the tools you need to make the entire GUI for a serious application in a way that is modular, well-structured, and easy to develop. Rather than simple hacked-together utilities, you could make full-featured applications, with customizable toolbars and properties panels. Imaging being able to make things like this in Euphoria: diagram editor, image gallery, database front-end, email client, irc client, word processor, PCB editor, or a MIDI file editor. It is my dream that FluidAE will let you at least make the GUI for things like that.