|
@@ -21,10 +21,15 @@ type
|
|
procedure ChooseTool(ATool: TPaintToolType);
|
|
procedure ChooseTool(ATool: TPaintToolType);
|
|
procedure RegisterScripts(ARegister: Boolean);
|
|
procedure RegisterScripts(ARegister: Boolean);
|
|
function GenericScriptFunction(AVars: TVariableSet): TScriptResult;
|
|
function GenericScriptFunction(AVars: TVariableSet): TScriptResult;
|
|
|
|
+ function ScriptLayerFromFile(AVars: TVariableSet): TScriptResult;
|
|
|
|
+ function ScriptLayerSelectId(AVars: TVariableSet): TScriptResult;
|
|
|
|
+ function ScriptLayerAddNew(AVars: TVariableSet): TScriptResult;
|
|
|
|
+ function ScriptLayerDuplicate(AVars: TVariableSet): TScriptResult;
|
|
function ScriptPutImage(AVars: TVariableSet): TScriptResult;
|
|
function ScriptPutImage(AVars: TVariableSet): TScriptResult;
|
|
function ScriptLayerFill(AVars: TVariableSet): TScriptResult;
|
|
function ScriptLayerFill(AVars: TVariableSet): TScriptResult;
|
|
function ScriptGetFrameIndex(AVars: TVariableSet): TScriptResult;
|
|
function ScriptGetFrameIndex(AVars: TVariableSet): TScriptResult;
|
|
procedure ReleaseSelection;
|
|
procedure ReleaseSelection;
|
|
|
|
+ function ScriptSelectLayerIndex(AVars: TVariableSet): TScriptResult;
|
|
public
|
|
public
|
|
constructor Create(AInstance: TLazPaintCustomInstance);
|
|
constructor Create(AInstance: TLazPaintCustomInstance);
|
|
destructor Destroy; override;
|
|
destructor Destroy; override;
|
|
@@ -55,13 +60,13 @@ type
|
|
procedure PasteAsNewLayer;
|
|
procedure PasteAsNewLayer;
|
|
procedure SelectAll;
|
|
procedure SelectAll;
|
|
procedure SelectionFit;
|
|
procedure SelectionFit;
|
|
- procedure NewLayer; overload;
|
|
|
|
|
|
+ function NewLayer: boolean; overload;
|
|
function NewLayer(ALayer: TBGRABitmap; AName: string; ABlendOp: TBlendOperation): boolean; overload;
|
|
function NewLayer(ALayer: TBGRABitmap; AName: string; ABlendOp: TBlendOperation): boolean; overload;
|
|
function NewLayer(ALayer: TBGRALayerCustomOriginal; AName: string; ABlendOp: TBlendOperation; AMatrix: TAffineMatrix): boolean; overload;
|
|
function NewLayer(ALayer: TBGRALayerCustomOriginal; AName: string; ABlendOp: TBlendOperation; AMatrix: TAffineMatrix): boolean; overload;
|
|
- procedure DuplicateLayer;
|
|
|
|
|
|
+ function DuplicateLayer: boolean;
|
|
procedure RasterizeLayer;
|
|
procedure RasterizeLayer;
|
|
procedure MergeLayerOver;
|
|
procedure MergeLayerOver;
|
|
- procedure RemoveLayer;
|
|
|
|
|
|
+ function RemoveLayer: boolean;
|
|
procedure EditSelection(ACallback: TModifyImageCallback);
|
|
procedure EditSelection(ACallback: TModifyImageCallback);
|
|
procedure Import3DObject(AFilenameUTF8: string);
|
|
procedure Import3DObject(AFilenameUTF8: string);
|
|
function GetPixel(X,Y: Integer): TBGRAPixel;
|
|
function GetPixel(X,Y: Integer): TBGRAPixel;
|
|
@@ -140,11 +145,16 @@ begin
|
|
Scripting.RegisterScriptFunction('IsSelectionMaskEmpty',@GenericScriptFunction,ARegister);
|
|
Scripting.RegisterScriptFunction('IsSelectionMaskEmpty',@GenericScriptFunction,ARegister);
|
|
Scripting.RegisterScriptFunction('LayerHorizontalFlip',@GenericScriptFunction,ARegister);
|
|
Scripting.RegisterScriptFunction('LayerHorizontalFlip',@GenericScriptFunction,ARegister);
|
|
Scripting.RegisterScriptFunction('LayerVerticalFlip',@GenericScriptFunction,ARegister);
|
|
Scripting.RegisterScriptFunction('LayerVerticalFlip',@GenericScriptFunction,ARegister);
|
|
- Scripting.RegisterScriptFunction('LayerAddNew',@GenericScriptFunction,ARegister);
|
|
|
|
- Scripting.RegisterScriptFunction('LayerDuplicate',@GenericScriptFunction,ARegister);
|
|
|
|
|
|
+ Scripting.RegisterScriptFunction('LayerGetId',@GenericScriptFunction,ARegister);
|
|
|
|
+ Scripting.RegisterScriptFunction('LayerSelectId',@ScriptLayerSelectId,ARegister);
|
|
|
|
+ Scripting.RegisterScriptFunction('LayerAddNew',@ScriptLayerAddNew,ARegister);
|
|
|
|
+ Scripting.RegisterScriptFunction('LayerFromFile',@ScriptLayerFromFile,ARegister);
|
|
|
|
+ Scripting.RegisterScriptFunction('LayerDuplicate',@ScriptLayerDuplicate,ARegister);
|
|
Scripting.RegisterScriptFunction('LayerRasterize',@GenericScriptFunction,ARegister);
|
|
Scripting.RegisterScriptFunction('LayerRasterize',@GenericScriptFunction,ARegister);
|
|
Scripting.RegisterScriptFunction('LayerMergeOver',@GenericScriptFunction,ARegister);
|
|
Scripting.RegisterScriptFunction('LayerMergeOver',@GenericScriptFunction,ARegister);
|
|
Scripting.RegisterScriptFunction('LayerRemoveCurrent',@GenericScriptFunction,ARegister);
|
|
Scripting.RegisterScriptFunction('LayerRemoveCurrent',@GenericScriptFunction,ARegister);
|
|
|
|
+ Scripting.RegisterScriptFunction('GetLayerIndex',@GenericScriptFunction,ARegister);
|
|
|
|
+ Scripting.RegisterScriptFunction('SelectLayerIndex',@ScriptSelectLayerIndex,ARegister);
|
|
Scripting.RegisterScriptFunction('GetLayerCount',@GenericScriptFunction,ARegister);
|
|
Scripting.RegisterScriptFunction('GetLayerCount',@GenericScriptFunction,ARegister);
|
|
Scripting.RegisterScriptFunction('GetFrameIndex',@ScriptGetFrameIndex,ARegister);
|
|
Scripting.RegisterScriptFunction('GetFrameIndex',@ScriptGetFrameIndex,ARegister);
|
|
Scripting.RegisterScriptFunction('GetFrameCount',@GenericScriptFunction,ARegister);
|
|
Scripting.RegisterScriptFunction('GetFrameCount',@GenericScriptFunction,ARegister);
|
|
@@ -203,11 +213,11 @@ begin
|
|
if f = 'IsSelectionMaskEmpty' then AVars.Booleans['Result'] := Image.SelectionMaskEmpty else
|
|
if f = 'IsSelectionMaskEmpty' then AVars.Booleans['Result'] := Image.SelectionMaskEmpty else
|
|
if f = 'LayerHorizontalFlip' then HorizontalFlip(foCurrentLayer) else
|
|
if f = 'LayerHorizontalFlip' then HorizontalFlip(foCurrentLayer) else
|
|
if f = 'LayerVerticalFlip' then VerticalFlip(foCurrentLayer) else
|
|
if f = 'LayerVerticalFlip' then VerticalFlip(foCurrentLayer) else
|
|
- if f = 'LayerAddNew' then NewLayer else
|
|
|
|
- if f = 'LayerDuplicate' then DuplicateLayer else
|
|
|
|
|
|
+ if f = 'LayerGetId' then AVars.Integers['Result'] := Image.LayerId[Image.CurrentLayerIndex] else
|
|
if f = 'LayerRasterize' then RasterizeLayer else
|
|
if f = 'LayerRasterize' then RasterizeLayer else
|
|
if f = 'LayerMergeOver' then MergeLayerOver else
|
|
if f = 'LayerMergeOver' then MergeLayerOver else
|
|
- if f = 'LayerRemoveCurrent' then RemoveLayer else
|
|
|
|
|
|
+ if f = 'LayerRemoveCurrent' then begin if not RemoveLayer then result := srException end else
|
|
|
|
+ if f = 'GetLayerIndex' then AVars.Integers['Result']:= Image.CurrentLayerIndex+1 else
|
|
if f = 'GetLayerCount' then AVars.Integers['Result']:= Image.NbLayers else
|
|
if f = 'GetLayerCount' then AVars.Integers['Result']:= Image.NbLayers else
|
|
if f = 'GetFrameCount' then AVars.Integers['Result']:= Image.FrameCount else
|
|
if f = 'GetFrameCount' then AVars.Integers['Result']:= Image.FrameCount else
|
|
if f = 'GetPixel' then AVars.Pixels['Result']:= GetPixel(AVars.Integers['X'],AVars.Integers['Y']) else
|
|
if f = 'GetPixel' then AVars.Pixels['Result']:= GetPixel(AVars.Integers['X'],AVars.Integers['Y']) else
|
|
@@ -216,6 +226,45 @@ begin
|
|
result := srFunctionNotDefined;
|
|
result := srFunctionNotDefined;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+function TImageActions.ScriptLayerFromFile(AVars: TVariableSet): TScriptResult;
|
|
|
|
+begin
|
|
|
|
+ if not AVars.IsDefined('FileName') then exit(srInvalidParameters) else
|
|
|
|
+ if not TryAddLayerFromFile(AVars.Strings['FileName']) then exit(srException) else
|
|
|
|
+ begin
|
|
|
|
+ AVars.Integers['Result'] := Image.LayerId[Image.CurrentLayerIndex];
|
|
|
|
+ exit(srOk);
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+function TImageActions.ScriptLayerSelectId(AVars: TVariableSet): TScriptResult;
|
|
|
|
+var
|
|
|
|
+ idx: Integer;
|
|
|
|
+begin
|
|
|
|
+ idx := Image.GetLayerIndexById(AVars.Integers['Id']);
|
|
|
|
+ if idx = -1 then exit(srInvalidParameters)
|
|
|
|
+ else if not Image.SetCurrentLayerByIndex(idx) then exit(srException)
|
|
|
|
+ else exit(srOk);
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+function TImageActions.ScriptLayerAddNew(AVars: TVariableSet): TScriptResult;
|
|
|
|
+begin
|
|
|
|
+ if not NewLayer then result := srException
|
|
|
|
+ else
|
|
|
|
+ begin
|
|
|
|
+ AVars.Integers['Result'] := Image.LayerId[Image.CurrentLayerIndex];
|
|
|
|
+ result := srOk;
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+function TImageActions.ScriptLayerDuplicate(AVars: TVariableSet): TScriptResult;
|
|
|
|
+begin
|
|
|
|
+ if not DuplicateLayer then result := srException else
|
|
|
|
+ begin
|
|
|
|
+ AVars.Integers['Result'] := Image.LayerId[Image.CurrentLayerIndex];
|
|
|
|
+ result := srOk;
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
function TImageActions.ScriptPutImage(AVars: TVariableSet): TScriptResult;
|
|
function TImageActions.ScriptPutImage(AVars: TVariableSet): TScriptResult;
|
|
var
|
|
var
|
|
x, y, width, height, opacity, yb, dataPos, xb: integer;
|
|
x, y, width, height, opacity, yb, dataPos, xb: integer;
|
|
@@ -1057,6 +1106,16 @@ begin
|
|
layeraction.Free;
|
|
layeraction.Free;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+function TImageActions.ScriptSelectLayerIndex(AVars: TVariableSet): TScriptResult;
|
|
|
|
+var
|
|
|
|
+ index: Int64;
|
|
|
|
+begin
|
|
|
|
+ index := AVars.Integers['Index'];
|
|
|
|
+ if (AVars.Integers['Index'] < 1) or (AVars.Integers['Index'] > Image.NbLayers) then exit(srInvalidParameters);
|
|
|
|
+ if not Image.SetCurrentLayerByIndex(index-1) then result := srException
|
|
|
|
+ else result := srOk;
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TImageActions.Paste;
|
|
procedure TImageActions.Paste;
|
|
var partial: TBGRABitmap;
|
|
var partial: TBGRABitmap;
|
|
layeraction: TLayerAction;
|
|
layeraction: TLayerAction;
|
|
@@ -1188,7 +1247,7 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TImageActions.NewLayer;
|
|
|
|
|
|
+function TImageActions.NewLayer: boolean;
|
|
{var top: TTopMostInfo;
|
|
{var top: TTopMostInfo;
|
|
res: integer;}
|
|
res: integer;}
|
|
begin
|
|
begin
|
|
@@ -1207,7 +1266,9 @@ begin
|
|
Image.AddNewLayer;
|
|
Image.AddNewLayer;
|
|
ToolManager.ToolOpen;
|
|
ToolManager.ToolOpen;
|
|
FInstance.ScrollLayerStackOnItem(Image.CurrentLayerIndex);
|
|
FInstance.ScrollLayerStackOnItem(Image.CurrentLayerIndex);
|
|
- end;
|
|
|
|
|
|
+ result := true;
|
|
|
|
+ end else
|
|
|
|
+ result := false;
|
|
end;
|
|
end;
|
|
|
|
|
|
function TImageActions.NewLayer(ALayer: TBGRABitmap; AName: string;
|
|
function TImageActions.NewLayer(ALayer: TBGRABitmap; AName: string;
|
|
@@ -1250,13 +1311,15 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TImageActions.DuplicateLayer;
|
|
|
|
|
|
+function TImageActions.DuplicateLayer: boolean;
|
|
begin
|
|
begin
|
|
if image.NbLayers < MaxLayersToAdd then
|
|
if image.NbLayers < MaxLayersToAdd then
|
|
begin
|
|
begin
|
|
Image.DuplicateLayer;
|
|
Image.DuplicateLayer;
|
|
FInstance.ScrollLayerStackOnItem(Image.CurrentLayerIndex);
|
|
FInstance.ScrollLayerStackOnItem(Image.CurrentLayerIndex);
|
|
- end;
|
|
|
|
|
|
+ result := true;
|
|
|
|
+ end else
|
|
|
|
+ result := false;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TImageActions.RasterizeLayer;
|
|
procedure TImageActions.RasterizeLayer;
|
|
@@ -1279,7 +1342,7 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-procedure TImageActions.RemoveLayer;
|
|
|
|
|
|
+function TImageActions.RemoveLayer: boolean;
|
|
var idx: integer;
|
|
var idx: integer;
|
|
begin
|
|
begin
|
|
if (Image.CurrentLayerIndex <> -1) and (Image.NbLayers > 1) then
|
|
if (Image.CurrentLayerIndex <> -1) and (Image.NbLayers > 1) then
|
|
@@ -1291,7 +1354,8 @@ begin
|
|
Image.RemoveLayer;
|
|
Image.RemoveLayer;
|
|
ToolManager.ToolOpen;
|
|
ToolManager.ToolOpen;
|
|
FInstance.ScrollLayerStackOnItem(idx);
|
|
FInstance.ScrollLayerStackOnItem(idx);
|
|
- end;
|
|
|
|
|
|
+ result := true;
|
|
|
|
+ end else result := false;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TImageActions.EditSelection(ACallback: TModifyImageCallback);
|
|
procedure TImageActions.EditSelection(ACallback: TModifyImageCallback);
|