GUI libraries

Rikki Cattermole alphaglosined at gmail.com
Fri Nov 29 19:25:33 PST 2013


On Friday, 29 November 2013 at 23:46:02 UTC, Xavier Bigand wrote:
> Le 29/11/2013 04:48, Rikki Cattermole a écrit :
>> On Thursday, 28 November 2013 at 12:13:42 UTC, Chris wrote:
>>> On Thursday, 28 November 2013 at 12:05:09 UTC, Jacob Carlborg 
>>> wrote:
>>>> On 2013-11-28 11:12, Chris wrote:
>>>>
>>>>> +1 GtkD & Glade (UI builder) are very good 
>>>>> (http://gtkd.org/).
>>>>> Hopefully
>>>>> one day we will have our own pure D GUI toolkit.
>>>>
>>>> DWT is a pure D GUI toolkit.
>>>
>>> What I meant was no bindings to native widgets or other 
>>> toolkits. DWT
>>> (like SWT) uses the native widgets and needs an interface. I 
>>> was
>>> thinking of a toolkit where everything is provided by D and 
>>> done in D
>>> without any reference to native frameworks (Cocoa etc.).
>>
>> DOOGLE[1] currently only depends on libfreetype2, (with 
>> Windows as only
>> target) Windows API and OpenGL. I would remove libfreetype2 
>> but.. its
>> basically standard for font rasterization cross platform wise.
>> I have designed it to have its interface abstracted away from 
>> the
>> implementation fully.
>>
>> Its current state is well listed on my blog[2] it may not look 
>> much now
>> and not ready for production use, but definitely should be 
>> said.
>>
>> [1] https://github.com/rikkimax/doogle
>> [2]
>> http://alphaglosined.blogspot.com/2013/11/web-services-and-opengl-oh-my.html
>>
>
> You may want take a look to DQuick :
> https://github.com/D-Quick/DQuick
>
> It's run on top of openGL too, the main difference is that you 
> describe the UI in dedicated script files. Scripts provide 
> allow to provide fully dynamical UIs.
>
> An UI file (original lua script format for the moment) :
>
> GraphicItem
> {	
>     id = "main",
>
> 	Image {
> 		id = "kerningImageButton",
> 		
> 		source = "images/border-image.png",
> 		width = 300,
> 		height = 50,
>
> 		MouseArea {
> 			id = "kerningButton",
> 			width = function()
> 				return kerningImageButton.width
> 			end,
> 			height = function()
> 				return kerningImageButton.height
> 			end,
> 		},
> 	},
>
> 	ScrollView {
> 		id = "scrollView",
> 	
> 		y = function()
> 			return kerningImageButton.height
> 		end,
> 		width = function()
> 			return main.width
> 		end,
> 		height = function()
> 			return main.height - scrollView.y
> 		end,
> 		
> 		clip = true,
>
> 		Text {
> 			id = "text",
> 		
> 			wrapMode = Text.WrapMode.WordWrap,
> 		
> 			width = function()
> 				return scrollView.width
> 			end,
> 			height = function()
> 				return scrollView.height
> 			end,
>
> 			text = textFr,
> 			family = function()
> 				if (kerningButton.pressed) then
> 					return "AngsanaUPC"
> 				end
> 				return "Arial"
> 			end,
> 			fontSize = 24,
> 			fontStyle = function()
> 				if (kerningButton.pressed) then
> 					return Text.FontStyle.Italic
> 				end
> 				return Text.FontStyle.Regular
> 			end,
> 		},
> 	},
> }

I know, I've kept an eye on all other GUI toolkits since I 
started work. I'm currently sticking to just plain old class 
objects to build it primarily because of a) efficiency and b) 
extra dependencies.
Eventually there will be a meta based system to configure it. But 
that'll come when I'll start on an IDE.


More information about the Digitalmars-d mailing list