> Denis,
> 
> I will attempt the big design flaws I have found so far while wrangling with 
> the current Gtk3 widget implementation.
> There are three main layers underpinning cross platform LCL widgetset.
> 
> 1) We obviously have the LCL itself that mimics the VCL and creates a cross 
> platform component and control library with the same classes and hierarchy 
> across multiple platforms. This piece works well enough.
> 
> 2) We have underlying native toolkits written in C or C++, or some other 
> language, whose functionality is exposed to Free Pascal by a flat C style API 
> of imported functions, enumerations, constants, and records. This piece works 
> well enough also.
> 
> 3) We have a series of pascal WS (widgetset) classes used in conjunction with 
> the "RegisterWSComponent(TSomeControl, TWSSomeControl);" that is responsible 
> for binding the 1 and 2 layers. The WS classes are responsible for creating 
> the actual underlying native toolkit widget or control from layers 2 and 
> bridging access to specific properties and methods to layer 1. Okay, this 
> works. I would have designed a set of interfaces to bridge this piece 
> instead, but we have these WS classes. I'll deal with it.
> 
> Now here is the first big problem with the Gtk3 widgetset as implemented. 
> Somehow someone decided it would be a neat idea to add a 4th piece just for 
> Gtk3. This piece attempts to wedge itself between 2 and 3 by recreating the 
> already existing flat C style API from piece 3 as a big series of pascal 
> objects that redeclare the Gtk3 API as a series of objects (see TGtk3Widget 
> in the file gtk3widgets.pas). Now we have a 4th layer just for Gtk3 that not 
> only adds more complexity, but also introduces peculiar behaviors altering 
> what someone writing a Gtk3 native widget port needs to know while following 
> through with creating a control or component.
> 
> For an example of the problem this additional with Gtk3 4th layer introduces, 
> consider my attempts to take some Gtk2 widgets I have written and also 
> support them in Gtk3 with its extra layer. I recently updated my gtk vte 
> (virtual terminal emulator control, code here and video here) that currently 
> works under Gtk2. While writing the Gtk2 version I referenced the flat C API 
> from here and had little to no problems getting it working. With the Gtk2 
> widgetset implementation in Lazarus I was able to just use the Gtk2 documents 
> online to see what functions existed related to working with Gtk2 widgets and 
> it worked. This is what I expect when working with a native widgetset, that 
> is I read the documentation provided by the actual widget to toolkit maker 
> (reading documentation at gnome.og).
> 
> Now with the current Gtk3 widget implementation tries to introduce a whole 
> other extra layer that works differently than the actual Gtk3 documentation 
> provides. Not only are the Gtk/Gdk functions I need hidden elsewhere, but 
> they work differently in most cases, as decided by whomever is maintaining 
> the base Gtk3 widgetset for Lazarus. I DO NOT want to spend my time trying to 
> figure out where someone has hidden a Gtk3 widget API inside some class from 
> which I am supposed to figure out to inherit in the hopes that the Gtk3 
> widgetset maker got right. This whole declaration of the flat Gtk3 C style 
> API and putting them into another set of pascal classes that are then 
> references by WS classes and then referenced by LCL controls and components 
> is just BAD BAD BAD.
> 
> It should be KISS. Just make the control handle an actual reference to the 
> underlying system toolkit handle, and please DO NOT attempt to recreate 
> another object hierarchy (in addition to the WS classes) of each possible 
> widget or object type present on a platform or toolkit combination. Stay with 
> a straight flat C style API and let me read the actual developers 
> documentation instead of forcing me to figure and find errors you created in 
> wiring a whole new API re-duplicating their APIs above and beyond and behind 
> the LCL.
> 
> For reference, in addition the vte example I posted above, I have also been 
> wrangling with webkitgtk for Gtk3 also OpenGL under Gtk3 with the same 
> problems.

Hi Anthony

While I understand your concerns and they seem clear & perfectly valid, but I 
cannot help or influence Lazarus/FPC devs in any way.
If they accept this layer as ok, it's they who support Lazarus & they decide at 
the very end which way GTK3 would go.

I guess it's Mattias Gaertner whom you should talk to. It's the one who 
volunteered to develop & support GTK3 stuff right now.
It would be nice to have Mattias join this discussion.

-- Regards,
Denis Golovan
-- 
_______________________________________________
lazarus mailing list
lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus

Reply via email to