|
@@ -21,6 +21,7 @@ unit Fresnel.DOM;
|
|
|
|
|
|
{$mode ObjFPC}{$H+}
|
|
|
{$WARN 6060 off} // Case statement does not handle all possible cases
|
|
|
+{$Interfaces CORBA}
|
|
|
{$ModeSwitch AdvancedRecords}
|
|
|
|
|
|
interface
|
|
@@ -262,6 +263,19 @@ type
|
|
|
end;
|
|
|
IFLFont = IFresnelFont;
|
|
|
|
|
|
+ IFresnelRenderer = Interface ['{06738575-BE7F-4EA5-A4D0-3E26A5441BFD}']
|
|
|
+ procedure FillRect(const aColor: TFPColor; const aRect: TFresnelRect);
|
|
|
+ procedure Line(const aColor: TFPColor; const x1, y1, x2, y2: TFresnelLength);
|
|
|
+ procedure TextOut(const aLeft, aTop: TFresnelLength; const aFont: IFresnelFont; const aColor: TFPColor; const aText: string);
|
|
|
+ procedure DrawImage(const aLeft, aTop, aWidth, aHeight: TFresnelLength; const aImage: TFPCustomImage);
|
|
|
+ end;
|
|
|
+
|
|
|
+ IFresnelRenderable = Interface ['{1364DA87-CA22-48A4-B1B2-A8A2C3047FD8}']
|
|
|
+ Procedure BeforeRender;
|
|
|
+ Procedure AfterRender;
|
|
|
+ Procedure Render(aRenderer : IFresnelRenderer);
|
|
|
+ end;
|
|
|
+
|
|
|
{ TFresnelFontDesc - font descriptor }
|
|
|
|
|
|
TFresnelFontDesc = record
|
|
@@ -285,7 +299,7 @@ type
|
|
|
|
|
|
{ TFresnelElement }
|
|
|
|
|
|
- TFresnelElement = class(TFresnelComponent, ICSSNode, IFPObserver)
|
|
|
+ TFresnelElement = class(TFresnelComponent, ICSSNode, IFPObserver, IFresnelRenderable)
|
|
|
private
|
|
|
function GetCSSPseudoClass(Pseudo: TFresnelCSSPseudoClass): boolean;
|
|
|
function GetNodeCount: integer;
|
|
@@ -297,6 +311,8 @@ type
|
|
|
procedure SetCSSRenderedAttribute(Attr: TFresnelCSSAttribute; const AValue: string
|
|
|
);
|
|
|
private
|
|
|
+ FAfterRender: TNotifyEvent;
|
|
|
+ FBeforeRender: TNotifyEvent;
|
|
|
FDOMIndex: integer;
|
|
|
FFont: IFresnelFont;
|
|
|
FLayoutNode: TFresnelLayoutNode;
|
|
@@ -395,6 +411,11 @@ type
|
|
|
protected
|
|
|
procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
|
|
|
procedure SetParentComponent(Value: TComponent); override;
|
|
|
+ procedure DoRender(aRenderer : IFresnelRenderer); virtual;
|
|
|
+ { IFResnelRenderable }
|
|
|
+ Procedure BeforeRender;
|
|
|
+ Procedure AfterRender;
|
|
|
+ Procedure Render(aRenderer : IFresnelRenderer);
|
|
|
public
|
|
|
constructor Create(AOwner: TComponent); override;
|
|
|
destructor Destroy; override;
|
|
@@ -488,6 +509,8 @@ type
|
|
|
Property OnFocus : TFresnelFocusEventHandler Index evtFocus Read GetFocusEventHandler Write SetFocusEventHandler;
|
|
|
Property OnEnter : TFresnelFocusEventHandler Index evtFocusIn Read GetFocusEventHandler Write SetFocusEventHandler;
|
|
|
Property OnLeave : TFresnelFocusEventHandler Index evtFocusOut Read GetFocusEventHandler Write SetFocusEventHandler;
|
|
|
+ Property BeforeRendering : TNotifyEvent Read FBeforeRender Write FBeforeRender;
|
|
|
+ Property AfterRendered : TNotifyEvent Read FAfterRender Write FAfterRender;
|
|
|
end;
|
|
|
TFLElement = TFresnelElement;
|
|
|
TFresnelElementClass = class of TFresnelElement;
|
|
@@ -2907,6 +2930,28 @@ begin
|
|
|
raise EFresnel.CreateFmt('TFresnelElement.SetParentComponent Self=%s NewParentComponent=%s',[Self.ToString,Value.ToString]);
|
|
|
end;
|
|
|
|
|
|
+procedure TFresnelElement.DoRender(aRenderer: IFresnelRenderer);
|
|
|
+begin
|
|
|
+ //
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TFresnelElement.BeforeRender;
|
|
|
+begin
|
|
|
+ If Assigned(FBeforeRender) then
|
|
|
+ FBeforeRender(Self);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TFresnelElement.AfterRender;
|
|
|
+begin
|
|
|
+ If Assigned(FAfterRender) then
|
|
|
+ FAfterRender(Self);
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TFresnelElement.Render(aRenderer: IFresnelRenderer);
|
|
|
+begin
|
|
|
+ DoRender(aRenderer);
|
|
|
+end;
|
|
|
+
|
|
|
procedure TFresnelElement.GetChildren(Proc: TGetChildProc; Root: TComponent);
|
|
|
var
|
|
|
i: Integer;
|