Need sounding board for GUI library

Boyd gaboonviper at gmx.net
Sun Dec 15 03:41:54 PST 2013


Hey everyone,

I'm looking for help with a GUI library I'm working on. Right now 
I have a pretty good basis, but it's mostly catering to my own 
whims. I'm looking for someone to help me figure out which of my 
design choices are a good idea, and which need some revising. 
This is currently the biggest obstacle that prevents me from 
making it public.

The other obstacle I could use some help with, is deployment. I 
don't have a lot of experience with open source projects, but I 
want to get this one out there and I want to do it right.

If you're willing to help out, let me know.

Cheers,
Boyd.


PS. Here is a description of the project.

The goal of this library, like any GUI library, is to make GUI's 
a lot easier to build. Here are some of the characteristics of 
the library:

- It's non-native. If I'm going to support native components it 
will be far into the future, because in my experience, native 
components tend to be much too limiting.

- It's platform independent. That said, I currently only support 
win32, but it's written in a platform independent way and should 
easily be portable to other platforms. Once the first version is 
out of the way, this will be a top priority.

- Its main goal is to make custom widgets easy to create. Even 
without supplying any widgets this library should be useful. That 
said I do plan to eventually add many widgets to it, but the 
first version will only have a few.

- Multi-touch support. This is built into the very core of the 
library. Every widget you create can use it.

- Grid layout techniques. The library contains ways to layout 
your components, so that you won't need to calculate positions or 
sizes in the majority of cases.

Here is some sample code, to show you what it looks like.

public class TestApplication: TUiApplication
{
     /// Initialize the application
     public override void Initialize()
     {
         auto title = new TTextGraphic(
             "An uninteresting application",
             TFont("Verdana", 30),
             TColor.Rgb(1,1,1),
             TColor.Rgb(0,0,0),
             TAnchor.Center
         );

         auto image = new TImageGraphic(
             LocalFileStore.GetFile(`C:\Images\GrandPiano.png`)
         );

         auto exitButton = new TButtonWidget("Quit");
         exitButton.PressEvent.Bind(&this.Quit);

         auto main = new TVerticalLayout(
             [
                 title,
                 image,
                 exitButton
             ],
             [
                 new TGridLayoutRow(TSizeUnit.Auto),
                 new TGridLayoutRow(TSizeUnit.Remainder(1)),
                 new TGridLayoutRow(TSizeUnit.Auto)
             ]
         );

         Ui.ShowWidgetFullScreen(
             Ui.GetScreens()[0],
             main
         );
     }

     /// Clean up the application
     public override void Finalize(){ }

     /// Whether or not the application will quit.
     /// Use this, for example, to ask the user whether to save 
changes
     public override bool AllowQuit() { return true; }
}

int main(string[] argv)
{
     Run(new TestApplication());
}


More information about the Digitalmars-d mailing list