That's a good question, especially since I'm sure many people would be prone to ask 
"Why another GUI?"

When I started PicoGUI last March I knew about Microwindows. (isn't NanoGUI part of 
Microwindows now?) Microwindows is great at what it does: it provides a familiar API 
and flexible graphics engine with a small footprint, suitable for many embedded 
devices. At the time I started PicoGUI it was only for the Kiwi project, so I had 
slightly different goals. I wanted the entire GUI to be keyboard-based (because Kiwi 
has no touchscreen) and basically just a way to run a word processor and a game or 
two. The low specs on Kiwi's 'ez328 CPU ruled out Microwindows, but as my goals for 
PicoGUI changed and matured I realized there were several things about current GUIs 
that were unsuitable for constrained computing environments:

--- Widgets vs Graphics

In X-style GUIs like XFree86 and Nano-X, the server focuses on providing graphical 
operations to the client. The client can use a shared library to create and manipulate 
widgets, but everything is converted to pure graphical primitives for the server. I 
wanted PicoGUI to focus on providing widgets. As you might have seen from that 
'architectural diagram' on the website, PicoGUI provides widgets in the server, and 
virtually everything centers around the widgets. This simplifies the API a bit, but 
the most significant thing for me is it makes the client library _much_ more simple as 
it only has to bother with networking code and a few support functions. This means 
that PicoGUI will run well even on platforms that don't support shared libraries, such 
as uClinux. Because of the client library's relative simplicity, it is also possible 
to completely rewrite the client interface in another language. You could write a 
PicoGUI client in 100% pure Java for instance.  Since so much information can be 
stored on the server-side, it might be possible for extremely limited computers like 
the PIC microcontrollers (where memory is measured in tens of bytes) to act as PicoGUI 
clients.

This method makes the whole thing smaller and faster, and provides for better 
integration with themes. There are two fairly large downsides to it though. Because 
widgets are in the server, clients can't create a true widget themselves.  Clients can 
still create widgets, but they can't use the same programming interface that internal 
widgets use. To create their own widget, they must use graphical operations, which 
brings me to the next downside. Because the GUI is so widget-centric, the graphical 
core of the PicoGUI server is accessed through a widget, the canvas widget.  This is 
probably as it should be, but because the graphical capabilities of PicoGUI were 
designed with the built-in widgets in mind, they are a bit limiting.

The graphical capabilities of PicoGUI are improving though. I just started making some 
major changes to the server that will fix this by adding support for rendering to 
offscreen bitmaps, more methods of combining primitives with existing data 
(XOR,OR,AND,INVERT,MULTIPLY,ADD,SUBTRACT, and a few more) Another major difference 
between PicoGUI's graphics and other GUIs is that primitives are (optionally) stored 
instead of rendered immediately. This allows the server to redraw the app without 
client-side intervention in most cases, and as soon as I finish a few of these 
server-side improvements it will
even be able to scale, translate, and otherwise munge the graphics with little to no 
client intervention.

--- Compatibility

A large 'selling point' for many GUIs is compatibility with existing apps. Because I 
wanted to try something new with PicoGUI, I almost completely disregarded this. 
However, because of Smartdata's port of Waba to PicoGUI this is changing.

--- Window management

PicoGUI has support for modal dialog boxes and menus, but in general it does not 
support overlapping windows. Instead, applications live in resizable and 
repositionable 'panels' (yep, panels are just another widget) that allow multitasking 
but conserve screen space. If desired, panels can be turned off at compile time so the 
apps can place themselves statically on the screen, or one app can be run at a time 
without resizing. The lack of overlapping windows greatly simplifies PicoGUI's 
graphics library.

In fact, PicoGUI's entire layout system all the way from positioning apps to laying 
out words in a paragraph is built by slicing rectangles in two to form smaller 
rectangles. The entire screen can be represented by a tree of these layout elements-- 
divnodes-- some of which have an attatched list of rendering instructions. Widgets 
simply stake a claim to part of the divtree and insert their own nodes.

---

Well, I must be in documentation mode :)
That will come after i finish these video library changes. (maybe this weekend? no 
guarantees though, as I will be busy with a few other things)

Hope that answered your questions! (If not, feel free to ask more)

It's definitely unconventional, but it seems to be working well so far. 

On Thu, 19 April 2001, John Utz wrote:

> could you tell me what you perceive the differences are between picogui,
> microwindows and nanogui?
> 
> if you dona have any opinion, that's fine too, but if you do have one i
> would really like to learn about it.
> 
> tnx!
> 
> johnu
> 
> 
> _______________________________________________
> vhl-tools-devel mailing list
> [EMAIL PROTECTED]
> http://lists.sourceforge.net/lists/listinfo/vhl-tools-devel

--
perl -e'socket S,2,1,tcp;connect S,pack(H16,"0200029a80692d32").\0x8;print 
grep!/=/,<S>'


_______________________________________________
Pgui-devel mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/pgui-devel

Reply via email to