summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraeme Geldenhuys <graeme@mastermaths.co.za>2012-03-15 18:28:11 +0200
committerGraeme Geldenhuys <graeme@mastermaths.co.za>2012-03-15 18:28:11 +0200
commitb92eb552900ac23aaa6495a19a9356cf00c5acca (patch)
tree1f2e4bd5ec1f5df4eefa77ad335032523a989688
parentb7ea7fb64069fbdd7e93e9c0218bafc6bc65f9ce (diff)
downloadfpGUI-b92eb552900ac23aaa6495a19a9356cf00c5acca.tar.xz
Factory method to create the Canvas instance used for every Window.
It is now possible for a developer to create a descendant TfpgCanvas class, and override the DefaultCanvasClass variable to rather use this new class for all Windows. A nice way to extend the Canvas capability for your own applications - without modify the fpGUI library code.
-rw-r--r--src/corelib/fpg_main.pas11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/corelib/fpg_main.pas b/src/corelib/fpg_main.pas
index 46091fa6..76595ea0 100644
--- a/src/corelib/fpg_main.pas
+++ b/src/corelib/fpg_main.pas
@@ -136,6 +136,7 @@ type
procedure SetParent(const AValue: TfpgWindow); reintroduce;
function GetParent: TfpgWindow; reintroduce;
function GetCanvas: TfpgCanvas; reintroduce;
+ function CreateCanvas: TfpgCanvasBase; virtual;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@@ -362,6 +363,8 @@ var
fpgCaret: TfpgCaret; { TODO -ograemeg : move this into fpgApplication }
fpgImages: TfpgImages; { TODO -ograemeg : move this into fpgApplication }
+ DefaultCanvasClass: TfpgCanvasBaseClass = nil;
+
// Application & Clipboard singletons
function fpgApplication: TfpgApplication;
function fpgClipboard: TfpgClipboard;
@@ -1902,6 +1905,11 @@ end;
{ TfpgWindow }
+function TfpgWindow.CreateCanvas: TfpgCanvasBase;
+begin
+ Result := DefaultCanvasClass.Create(self);
+end;
+
constructor TfpgWindow.Create(AOwner: TComponent);
begin
inherited Create(AOwner); // initialize the platform internals
@@ -1923,7 +1931,7 @@ begin
else
FWindowType := wtWindow;
- FCanvas := TfpgCanvas.Create(self);
+ FCanvas := CreateCanvas;
end;
destructor TfpgWindow.Destroy;
@@ -2654,6 +2662,7 @@ initialization
iCallTrace := -1;
InitializeDebugOutput;
fpgInitMsgQueue;
+ DefaultCanvasClass := TfpgCanvas;
finalization
uClipboard.Free;