Difference between revisions of "LCL Interface Redesign Idea"

From Lazarus wiki
m (This is current Idea for the structure of the interface and how it relates to handles)
m (This is current Idea for the structure of the interface and how it relates to handles)
Line 7: Line 7:
 
* Introduce .Handle again, now as WSclass call
 
* Introduce .Handle again, now as WSclass call
 
* Merge the branches
 
* Merge the branches
 +
 +
The change to .Handle will not break existing code.
  
 
TWSxxWinControl.CreateHandle Returns a TLCLHandle
 
TWSxxWinControl.CreateHandle Returns a TLCLHandle

Revision as of 01:32, 4 April 2007

This is current Idea for the structure of the interface and how it relates to handles

Overview:

  • Fork a branch of lazarus/
  • Replace TWinControl.Handle with TWinControl.LCLHandle (there should exist no Handle yet)
  • Try to get the LCL compiled and maybe the IDE so it doesn't use the (inefficient) .Handle anymore
  • Introduce .Handle again, now as WSclass call
  • Merge the branches

The change to .Handle will not break existing code.

TWSxxWinControl.CreateHandle Returns a TLCLHandle

TLCLHandle = IInterface; // interfaces as com objects

TxxPrivate = class(TPrivate, TLCLHandle);

TGtkPrivateButton = class(TGtkBin, TLCLHandle);

All TWSxx. methods should be moved to the private class. for instance:

 class procedure TWSGtkWinControl.SetText(const AWinControl; const AText: String);
 var
   PrivWinControl: TGtkPrivateWinControl;
 begin
   PrivWinControl := TGtkPrivateWinControl(AWinControl.LCLHandle);
   PrivWinControl.SetText(AText);
 end;

Other possibilities

{$IFDEF X11} TGtkPrivateWidget = class(TGtkPrivate, ILCLHandle, IX11);

then

 (AWinControl as IX11).XID

is possible