Difference between revisions of "LCL Interface Redesign Idea"
From Lazarus wiki
Jump to navigationJump to searchLine 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