[Mono-dev] Qt anyone?

BGB cr88192 at hotmail.com
Fri Feb 6 20:40:56 EST 2009


----- Original Message ----- 
From: "Robert Jordan" <robertj at gmx.net>
To: <mono-devel-list at lists.ximian.com>
Sent: Saturday, February 07, 2009 1:33 AM
Subject: Re: [Mono-dev] Qt anyone?


> Daniel Morgan wrote:
>> On a different subject, I wonder if someone would dare replace the
>> glib and other dependencies in mono with qt.  Then create clr
>> bindings to qt.  With these bindings, you could re-write mono using
>> the clr bindings to qt.  Now, that would be interesting.
>
> Can you elaborate on why glib should be replaced?
>

I can think of why it should be replaced, but seriously not with Qt...


> For systems that don't support glib or where glib is undesirable,
> mono's eglib could be used instead, which is really tiny, BTW.
>

oh, I had not known of this one...
maybe then I could get mono to build...


> A large part of mono applications is already relying on glib
> (as part of gtk/gtk#/gnome), so adding just another heavy dependency
> is not an option IMO. Not to speak about having to deal with 2
> message queues, C++, license issues (Novell won't be able to
> re-release the runtime under a non GPL based license anymore).
>

IMO: groan...

as I see it, eliminating dependencies is the best.


(sorry if all this is uninteresting or already exists, I have not 
investigated all this...).

IMO, I would much rather people abstracted over the whole GUI issue, 
providing a generic API which would plug into whatever underlying GUI was 
available and it was told to use (and could multiplex the GUIs, unify 
message queues, ...).

this could then be compared with AWT or similar, where AWT can go through 
Win32/GDI, GTK, Cocoa, or custom, ... (I could compare it to Swing, but I 
had largely stopped using Java well before there was Swing, and so have not 
really investigated how it works...).


the main difference though is that it would be preferable if the framework 
had a separate "frontend" and "backend", so that it would be possible to 
swap out the internal machinery and direct the same frontend API to 
different GUI frameworks at runtime (much like how the Linux VFS can manage 
multiple filesystem types).

the purpose of this could be, for example, an app does most of its GUI as a 
custom OpenGL-based GUI (for example, I typically do this in my apps), but 
then may choose to pop up a dialog (such as, for example, a load/save 
dialog) using the native GUI.

or maybe, the app is just GL based and wants to use its own GUI, not being 
plagued with having to be expected to target its output to GTK or similar... 
(or, for that matter, the API can provide its own GL-based backend, since it 
is usually not so difficult to make one piece of GL-based code cooperate 
with another, so long as the app is left with control over the drawing 
state, and the framework is not too agressive with how it uses GL).

an example of this usecase could be, for example, allowing the app to direct 
the GUI rendering to a render-to-texture context, and directing any input 
back in through the "surface", allowing the GUI to exist self-contained 
within a surface in a 3D world (meaning, the framework does not directly 
access the mouse or keyboard, rather events are fed-in through the backend). 
the framework can then be context-based, allowing for any number of separate 
"GUI-spaces" to exist.

a render-to-pixel-buffer backend could also be useful (no GL dependencies 
allowed here), potentially for cases where neither an existing GUI framework 
or GL are available or desirable.


I guess this does leave a slight complexity as to where fonts are stored and 
managed, so potentially some generic fonts could be managed by the frontend, 
but the backend manages drawing them, as well as other backend specific 
fonts. frontend would manage keeping track of widgets and a unified message 
gueue, but the backends would be responsible for drawing the widgets and 
possibly also for events. ...


in the simple case though, the API could provide utility code to allow much 
more easily setting up and managing the GUI, and directing the output to GTK 
or Win32/GDI or similar (although, I would request the API not be structured 
much like GTK, as personally I find the general approach of GTK trying to 
make the app be a "slave" to itself to be a little offensive...).

in my custom frameworks, I often end up with an "update yourself" call, as 
well as a "draw yourself" call (maybe N/A or NO-OP for a GTK or GDI based 
backend, likely these calls would be directed at the backend context rather 
than the frontend context?...). the app could then be responsible for making 
sure that these functions are called regularly (potentially per-context).


all of this would allow both the flexibility of a customizable GUI, without 
forcing devs to go back to drawing all their own widgets, ... when the 
existing frameworks don't exactly work with what they want to do...

this would be sort of like on the XBox/360, where the GUI can be used at the 
same time as the running game, and often the games will apparently integrate 
parts of the 360's GUI into their own interfaces (although, granted, I have 
not looked into the 360 enough to know exactly how there framework is 
structured...).

likewise an app could "hijack" an existing backend, allowing them to 
customize behaviors or add customized widgets (for example, for a GL 
backend, it could add shaders to the existing buttons, or draw an alternate 
slider and buttons made out of animated fire or whatever... while still 
keeping the existing behavior methods and other widgets intact), while 
otherwise not effecting the frontend's API or behavior (apart from those 
effects manifested from the customizations).


my personal GUI framework is nowhere near so ambitious, namely in that it is 
GL-only (and for other uses, I explicitly fall back to the GDI), and is 
written in C, so it would be more like what I am imagining for in a 
backend...

using the frontend would be far more conventional, apart from the addition 
that none of the calls are "global", but will typically be directed to a 
specific context (when the app sets itself up though, it could request a 
default GUI context from the framework if needed, then go about creating any 
windows or dialogs within this context, and creating and widgets in said 
windows or dialogs...).


oh well, probably most people would not be so compelled by such an idea, but 
it is worth a try I guess...



> Robert
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
> 



More information about the Mono-devel-list mailing list