Updated the .mpackage to include Vadi's suggested changes. All aliases were tested, and I found no errors; if you do encounter errors, please get the message for me.
As far as I can tell, Vyzor is capable of everything Geyser can do, excepting shortcut classes added by users (gauges, VBox/HBox, ...). Vyzor CAN do those things, but there are no handy-dandy built-in classes (yet).
The primary difference between Vyzor and Geyser has to do with how Vyzor handles Frames (which Geyser and Mudlet call Labels). Vyzor adds another layer of abstraction between Mudlet and the user, especially in how a Frame (Label) is filled with content. Where Geyser wraps the various Mudlet GUI functions, and exposes them to the user through an OO interface, Vyzor is instead built on an object-oriented abstraction of Qt's Stylesheet properties.
Instead of calling something like...
-- Geyser
someLabel:setBackgroundImage(someImage)
... you would create (and potentially reuse) various Component objects in Vyzor.
-- Vyzor
someImage = Vyzor.Image( "someUrl" )
someBackground = Vyzor.Background(someImage)
someFrame:Add(someBackground)
It is more verbose, yes, but it's not simply a more roundabout way to call setBackgroundImage. In fact, Vyzor uses very little of the Mudlet API; it uses setLabelStyleSheet to fill content. By providing an interface for Qt's Stylesheets, we have access to far more power than Mudlet's native API can provide. For example...
-- Maybe we want a tiled background...
tiledBackground = Vyzor.Background( someImage, nil, Vyzor.Repeat.RepeatXY )
-- Or maybe a single image, centered.
centerBackground = Vyzor.Background( someImage, Vyzor.Alignment.Center )
Perhaps you've develop an awesome GUI that you want to share with your friends, but everyone's using differently sized monitors. I have 1920x1200, but one of my friends is on a netbook, and someone else is using an old school 800x600 CRT beast. With the normal Mudlet API, it'd be prohibitively difficult to make a GUI that would work for all of them. With Geyser, it becomes easier.
With Vyzor, however, everything can be sized relative to the size of the client. Images, too. Qt is able to stretch border images, meaning you don't have to make a number of copies of the same image with different sizes.
stretchImage = Vyzor.Border( nil, nil, someImage )
Vyzor creates and maintains four Border Frames, which will always be the size of the spaces surrounding the main console (this size can also be changed in Vyzor.Options.Borders). So, if we have a fancy logo we want in the upper left corner of the screen, and we want it to always be 10% of the Mudlet window, we might do this...
-- This means we have a border above the console whose height is 10% of the screen.
Vyzor.Options.Borders.Top = 0.1
logoImage = Vyzor.Image( "filepath" )
-- This creates an image that will be stretched as necessary.
logoBorder = Vyzor.Border( nil, nil, logoImage )
-- Here we create a Frame to hold our content.
-- Arguments: name, x, y, width, height.
-- We've said we want it to be positioned in the upper left corner of its PARENT.
-- We've said we want it to be 10% of the parent's width, and 100% of the parent's height.
logoFrame = Vyzor.Frame( "logo", 0, 0, 0.1, 1 )
-- Add some content; in this case, our Border Component.
logoFrame:Add( logoBorder )
-- Now, we add it Vyzor's Top Border Frame.
Vyzor.HUD.Frames["VyzorTop"]:Add( logoFrame )
-- And to make it appear...
Vyzor.Draw()
It is my belief that Vyzor has the power to do more than Geyser, though Geyser is, in some ways, easier to use. In truth, Geyser and naked Mudlet Labels have access to setLabelStylesheet. But having it all packaged and exposed, with an object-oriented interface, makes it easier. If not for anyone else but me.