Need sounding board for GUI library

Zz Zz at nospam.com
Sun Dec 15 06:40:08 PST 2013


Hi Boyd,

Here something that might be interesting for you the gui is 
rendered using the C++ version of AntiGrain Geometry (with C# 
wrappers).

http://www.creativedocs.net/devs/gui
http://www.creativedocs.net/devs/agg
http://www.creativedocs.net/screenshots/

Zz

On Sunday, 15 December 2013 at 14:19:10 UTC, Boyd wrote:
> On Sunday, 15 December 2013 at 12:59:27 UTC, MrSmith wrote:
>> Hi Boyd.
>>
>> Have you uploaded your code somewhere so anyone can take a 
>> look at it?
> I Have not yet uploaded it, though I would like to. Where would 
> be a good place to put it?
>
>> Let me ask you some questions.
>> 1. How have you done event propagation? Sinking and boobling 
>> or something else? Can you cancel event propagation?
> The event propagation method I use is event capturing. First 
> the event goes to the outer most widget which determines 
> whether to send it to child widgets.
>
>> 2. How do you create platform dependent windows. Using WinAPI, 
>> SFML, GLFW(+), SDL(+), GLUT?
> Platform dependent widgets are not supported at this time. I 
> may add native widgets in the future, but right now it seems 
> more trouble than it's worth.
>
>> 3. How are you rendering widgets? Using OpenGL(+), DirectX, 
>> SDL, SFML, GDI? If it is OpenGL than what version of it?
> I currently use GDI. It should not be that hard to change this, 
> though.
>
>> 4. How your widgets are rendered? Do you have separate 
>> GuiRenderer which knows how to render basic GUI elements(+) or 
>> all widgets are directly calling OpenGL code?
> I have created a Canvas class that does all the drawing. This 
> ensures platform independences.
>
> You can also use graphic objects to do the drawing instead; the 
> TImageGraphic object draws an image, TTextGraphic draws text, 
> etc..
>
>> 5. Do you have any styling of your widgets, external config, 
>> CSS etc? If any how it is done? Can you set any image or 
>> color, gradient to any widget?
> I have plans for stylable widgets, but I don't have a concrete 
> design for this yet. I have some ideas though, and I intend for 
> it to be immensely flexible. Basically a stylable widget would 
> be a widget without a style at all. The widget would only 
> define a list of placeholder blocks that the theme would need 
> to fill.
>
> For example: The TButtonWidget could define the placeholders 
> Normal, Hover, Down, DownHover. The theme would then determine 
> the exact content of these placeholders. Gradients, images, 
> text, borders, layout, you name it.
>
>> 6. How is your resource management implemented? Do you have 
>> any dedicated texture, font manager?
> No I don't, although the theme system will do some resource 
> management. Would you consider this as an important feature 
> outside of themes?
>
>> 7. Do you have animation support (plans to do it)?
> No concrete plans, but eventually I do want to support it.
>
>> 8. How is your widget events and properties implemented? 
>> Signals, variants, reactive programming etc?
> At first simply changing properties will have to do. I do 
> intend to support something similar to signals.
>
>> 8. Do you have model and view separation? Controllers, 
>> presenters?
> I'm not sure what you mean. A GUI library by its very nature is 
> pure view.
>
>> 9. How is your layouts implemented? Do you have layout 
>> interface? What methods it has? When they are called?
> There are to ways to do layout. You can inherit from a layout 
> component, in which case you would need to implement a few 
> functions. For example the gridlayout requires the 
> implementation of the following functions:
>
> /// iterates through the rows of the grid
> void ForeachRow(TCanvas canvas, void delegate(TGridLayoutRow) 
> exec);
> /// iterates through the columns of the grid
> void ForeachColumn(TCanvas canvas, void 
> delegate(TGridLayoutRow) exec);
> /// returns the content of the specified grid cell
> TGraphic GetCell(int x, int y);
>
> The other method is to create a TGridWidget using the 
> constructor:
>
> this(TGridLayoutRow[] columns, TGridLayoutRow[] rows, 
> TGraphic[][] cells)
>
>> 10. Can you access property by its name like 
>> widget.getProperty("width");
> No. In what situation would you consider using this?
>
> Also Widgets don't have any positional information in them, or 
> style information. This is one of main issues I have with the 
> existing GUI libraries.
>
>> 11. Do you know that in D is common to use camelCase for 
>> method names?
> As I said earlier I built this library to cater to my every 
> whim, so I probably need to change my coding style slightly.
>
>> 12. What other gui's are you looking at while making your own?
> There are many gui libraries that have influenced my design, 
> but I don't plan to immitate any of them. Most influence come 
> from the old Borland delphi design, which is still used in many 
> of the current ones among which is QT, WxWidgets, other ideas 
> are from ExtJs and html/css. It is a fairly unique design 
> though, which is why I worry about whether it will be usable by 
> other programmers.
>
>
>
> Thanks for the questions, I look forward to hear what you think 
> of my answers. Feel free to criticise.
>
> Cheers,
> Boyd



More information about the Digitalmars-d mailing list