<div dir="ltr">Marc,<div><br></div><div>I can completely understand how it evolved, and early on the features of both the Free Pascal language, and the way the LCL library were to be adapted to multiple platforms became more clear. Thanks for your hard work.</div><div><br></div><div>I've thought about the way the LCL is structured to handle many platforms for quite some time now, and if it were remade I'd strongly prefer it if every platform and native control were implemented through a set of well defined platform agnostic interfaces. Then each platform would adhere to that interface in order to implement it in classes such as TGtk2Canvas, TGtk2Window, and TGtk2WindowManager. Of course this would never happen, as it would mean a complete rewrite of everything, but perhaps someday someone might want to remake a new non Delphi compatible library from scratch for FPC and carry forward with this idea.</div><div><br></div><div>For example:</div><div><br></div><div>ICanvas = interface</div><div>  function MoveTo(X, Y: Integer): Boolean;</div><div>  function LineTo(X, Y: Integer): Boolean;</div><div><div>  ...</div></div><div>end;</div><div><br></div><div>IWindow = interface<br></div><div>  function Show: Boolean;</div><div>  function Hide: Boolean;</div><div>  function GetBounds(out Rect: TRect): Boolean;</div><div>  function SetBounds(const Rect: TRect): Boolean;</div><div>  function GetText(out S: string): Boolean;</div><div>  function SetText(out S: string): Boolean;</div><div>  ...</div><div>end;<br></div><div><br></div><div>IWindowManager = interface</div><div>  function WindowCreate(const Params: TWindowParams; out W: IWindow): Boolean;</div><div>  function WindowDestroy(W: IWindow): Boolean;</div><div>  function BringToFront(Window: IWindow): Boolean;<br></div><div>  function SendToBack(Window: IWindow): Boolean;</div><div>  function GetCursorPos(out P: TPoint): Boolean;</div><div>  function SetCursorPos(const P: TPoint): Boolean;</div><div>  ...</div><div>end;</div><div><br></div></div>