Bladeren bron

Add hypocycloid

Johann ELSASS 2 jaren geleden
bovenliggende
commit
5121b62dff

+ 102 - 0
lazpaint/dialog/filter/uhypocycloid.lfm

@@ -0,0 +1,102 @@
+object FHypocycloid: TFHypocycloid
+  Left = 989
+  Height = 90
+  Top = 156
+  Width = 203
+  AutoSize = True
+  BorderIcons = [biSystemMenu]
+  BorderStyle = bsDialog
+  Caption = 'Hypocycloid'
+  ChildSizing.LeftRightSpacing = 8
+  ChildSizing.TopBottomSpacing = 8
+  ChildSizing.HorizontalSpacing = 8
+  ChildSizing.VerticalSpacing = 8
+  ChildSizing.Layout = cclLeftToRightThenTopToBottom
+  ChildSizing.ControlsPerLine = 1
+  ClientHeight = 90
+  ClientWidth = 203
+  OnCreate = FormCreate
+  OnHide = FormHide
+  OnShow = FormShow
+  Position = poScreenCenter
+  LCLVersion = '2.2.6.0'
+  object Panel1: TPanel
+    Left = 8
+    Height = 21
+    Top = 8
+    Width = 130
+    BevelOuter = bvNone
+    ChildSizing.HorizontalSpacing = 8
+    ChildSizing.Layout = cclLeftToRightThenTopToBottom
+    ChildSizing.ControlsPerLine = 2
+    ClientHeight = 21
+    ClientWidth = 130
+    TabOrder = 0
+    object Label_Amount: TLabel
+      Left = 0
+      Height = 21
+      Top = 0
+      Width = 42
+      Caption = 'Cusps:'
+      Layout = tlCenter
+      ParentColor = False
+    end
+    object SpinEdit_CuspCount: TSpinEdit
+      Left = 50
+      Height = 21
+      Top = 0
+      Width = 65
+      Constraints.MinWidth = 65
+      MaxValue = 20
+      MinValue = 1
+      OnChange = SpinEdit_CuspCountChange
+      TabOrder = 0
+      Value = 6
+    end
+  end
+  object Panel2: TPanel
+    Left = 8
+    Height = 20
+    Top = 37
+    Width = 130
+    BevelOuter = bvNone
+    ChildSizing.HorizontalSpacing = 8
+    ChildSizing.Layout = cclLeftToRightThenTopToBottom
+    ChildSizing.ControlsPerLine = 2
+    ClientHeight = 20
+    ClientWidth = 130
+    TabOrder = 1
+    object Button_OK: TButton
+      Left = 0
+      Height = 20
+      Top = 0
+      Width = 50
+      AutoSize = True
+      Caption = 'rsOK'
+      Default = True
+      Enabled = False
+      ModalResult = 1
+      OnClick = Button_OKClick
+      TabOrder = 0
+    end
+    object Button_Cancel: TButton
+      Left = 58
+      Height = 20
+      Top = 0
+      Width = 72
+      AutoSize = True
+      Cancel = True
+      Caption = 'rsCancel'
+      ModalResult = 2
+      OnClick = Button_CancelClick
+      TabOrder = 1
+    end
+  end
+  object TimerDisplay: TTimer
+    Enabled = False
+    Interval = 200
+    OnTimer = TimerDisplayTimer
+    Left = 152
+    Top = 24
+  end
+end

+ 6 - 0
lazpaint/dialog/filter/uhypocycloid.lrj

@@ -0,0 +1,6 @@
+{"version":1,"strings":[
+{"hash":178926244,"name":"tfhypocycloid.caption","sourcebytes":[72,121,112,111,99,121,99,108,111,105,100],"value":"Hypocycloid"},
+{"hash":78423914,"name":"tfhypocycloid.label_amount.caption","sourcebytes":[67,117,115,112,115,58],"value":"Cusps:"},
+{"hash":497723,"name":"tfhypocycloid.button_ok.caption","sourcebytes":[114,115,79,75],"value":"rsOK"},
+{"hash":127421996,"name":"tfhypocycloid.button_cancel.caption","sourcebytes":[114,115,67,97,110,99,101,108],"value":"rsCancel"}
+]}

+ 335 - 0
lazpaint/dialog/filter/uhypocycloid.pas

@@ -0,0 +1,335 @@
+unit uhypocycloid;
+
+{$mode ObjFPC}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, Spin,
+  LazPaintType, UStateType, UScripting, UResourceStrings, LCVectorOriginal, LCVectorPolyShapes;
+
+const
+  RenderName = 'hypocycloid';
+
+type
+
+  { TFHypocycloid }
+
+  TFHypocycloid = class(TForm)
+    Button_Cancel: TButton;
+    Button_OK: TButton;
+    Label_Amount: TLabel;
+    Panel1: TPanel;
+    Panel2: TPanel;
+    SpinEdit_CuspCount: TSpinEdit;
+    TimerDisplay: TTimer;
+    procedure Button_CancelClick(Sender: TObject);
+    procedure Button_OKClick(Sender: TObject);
+    procedure FormCreate(Sender: TObject);
+    procedure FormHide(Sender: TObject);
+    procedure FormShow(Sender: TObject);
+    procedure SpinEdit_CuspCountChange(Sender: TObject);
+    procedure TimerDisplayTimer(Sender: TObject);
+  private
+    FComposeShape: TComposedImageDifference;
+    FUpdateLayer: boolean;
+    FInitializing: boolean;
+    FInstance: TLazPaintCustomInstance;
+    FParameters: TVariableSet;
+    FPreviewDone: boolean;
+    procedure InitParams;
+    procedure NeedPreview;
+    procedure DisplayShape;
+    procedure UpdateOriginal(AOriginal: TVectorOriginal; ACuspCount: integer);
+    function IsCorrespondingOriginal: boolean;
+  end;
+
+function ShowHypocycloidDlg(AInstance: TLazPaintCustomInstance; AParameters: TVariableSet): TScriptResult;
+
+// create a hypocycloid shape
+function MakeHypocycloid(ASurfaceWidth, ASurfaceHeight: integer; ACuspCount: integer): TVectorShape;
+
+implementation
+
+uses LCScaleDPI, UMac, UImageAction, BGRABitmapTypes, UImageDiff, BGRATransform, Math;
+
+{$R *.lfm}
+
+function ShowHypocycloidDlg(AInstance: TLazPaintCustomInstance; AParameters: TVariableSet): TScriptResult;
+var
+  FHypocycloid: TFHypocycloid;
+  doFound, somethingDone: boolean;
+begin
+  FHypocycloid:= TFHypocycloid.create(nil);
+  FHypocycloid.FInstance := AInstance;
+  FHypocycloid.FParameters := AParameters;
+  try
+    TImageActions(AInstance.ImageAction).Deselect;
+
+    if Assigned(AParameters) and
+      AParameters.Booleans['Validate'] then
+    begin
+      AInstance.Image.DoBegin;
+      FHypocycloid.InitParams;
+      FHypocycloid.DisplayShape;
+      AInstance.Image.DoEnd(doFound, somethingDone);
+      result := srOk;
+    end else
+    begin
+      if FHypocycloid.showModal = mrOk then result := srOk
+      else result := srCancelledByUser;
+    end;
+  finally
+    FHypocycloid.free;
+  end;
+end;
+
+function MakeHypocycloid(ASurfaceWidth, ASurfaceHeight: integer; ACuspCount: integer): TVectorShape;
+
+  // center of the small circle
+  function HypocycloidCenterAt(phi, nR, r: Double): TPointF;
+  begin
+    result.x := (nR - r) * cos(phi);
+    result.y := (nR - r) * sin(phi);
+  end;
+
+  // hypocycloid position is on the small circle
+  function HypocycloidAt(phi, nR, r: Double): TPointF;
+  begin
+    result := HypocycloidCenterAt(phi, nR, R)
+    + PointF(  r * cos((nR - r) / r * phi),
+             - r * sin((nR - r) / r * phi) );
+  end;
+
+var
+  t: Double;
+  shape: TCurveShape;
+  center: TPointF;
+  nR: Double; // radius of bounding circle
+  r: Double; // radius of small circle
+  nbPoints, i: integer;
+
+begin
+  center := PointF(ASurfaceWidth / 2,
+                   ASurfaceHeight / 2);
+  nR := Math.Min(ASurfaceWidth, ASurfaceHeight) * 0.4;
+  r := nR / ACuspCount;
+
+  shape := TCurveShape.Create(nil);
+  shape.PenColor := CSSRed;
+  shape.PenWidth := 3;
+  shape.Closed := true;
+
+  nbPoints := ACuspCount * 8;
+  for i := 0 to nbPoints - 1 do
+  begin
+    t := i/nbPoints*2*Pi;
+    shape.AddPoint(HypocycloidAt(t, nR, r) + center);
+  end;
+
+  result := shape;
+end;
+
+{ TFHypocycloid }
+
+procedure TFHypocycloid.FormCreate(Sender: TObject);
+begin
+  ScaleControl(Self,OriginalDPI);
+
+  Button_OK.Caption := rsOK;
+  Button_Cancel.Caption := rsCancel;
+
+  CheckOKCancelBtns(Button_OK{,Button_Cancel});
+  CheckSpinEdit(SpinEdit_CuspCount);
+
+  FComposeShape := nil;
+  FPreviewDone := false;
+end;
+
+procedure TFHypocycloid.Button_OKClick(Sender: TObject);
+begin
+  TimerDisplay.Enabled := false;
+  if not FPreviewDone then DisplayShape;
+end;
+
+procedure TFHypocycloid.Button_CancelClick(Sender: TObject);
+begin
+  TimerDisplay.Enabled := false;
+  if Assigned(FComposeShape) then
+  begin
+    FInstance.Image.Undo;
+    FComposeShape := nil;
+  end;
+end;
+
+procedure TFHypocycloid.FormHide(Sender: TObject);
+begin
+  if Assigned(FComposeShape) then
+  begin
+    If ModalResult <> mrOk then
+       FInstance.Image.Undo;
+    FComposeShape := nil;
+  end;
+end;
+
+procedure TFHypocycloid.FormShow(Sender: TObject);
+begin
+  InitParams;
+  NeedPreview;
+end;
+
+procedure TFHypocycloid.SpinEdit_CuspCountChange(Sender: TObject);
+begin
+  NeedPreview;
+end;
+
+procedure TFHypocycloid.TimerDisplayTimer(Sender: TObject);
+begin
+  TimerDisplay.Enabled:= false;
+  DisplayShape;
+end;
+
+procedure TFHypocycloid.InitParams;
+var
+  isOriginal: Boolean;
+  layerIndex, cuspCount, errPos: Integer;
+  cuspCountStr: RawByteString;
+begin
+  FInitializing := true;
+
+  // default parameters
+  cuspCount := FInstance.Config.DefaultCuspCount;
+
+  // parameters from current layer
+  layerIndex := FInstance.Image.CurrentLayerIndex;
+  if IsCorrespondingOriginal then
+  begin
+    cuspCountStr := FInstance.Image.GetLayerRegistry(layerIndex, 'cusp-count');
+    val(cuspCountStr, cuspCount, errPos);
+    if errPos = 0 then
+      SpinEdit_CuspCount.Value := cuspCount;
+    FUpdateLayer:= true;
+  end
+  else
+    FUpdateLayer:= false;
+
+  // supplied parameters to script function
+  if Assigned(FParameters) and
+    FParameters.IsDefined('CuspCount') then
+    cuspCount := FParameters.Integers['CuspCount'];
+
+  SpinEdit_CuspCount.Value := cuspCount;
+
+  FInitializing := false;
+end;
+
+procedure TFHypocycloid.NeedPreview;
+begin
+  TimerDisplay.Enabled := false;
+  TimerDisplay.Enabled := true;
+  FPreviewDone := false;
+  Button_OK.Enabled := false;
+end;
+
+procedure TFHypocycloid.DisplayShape;
+var
+  original, prevOriginal: TVectorOriginal;
+  curIndex, cuspCount: Integer;
+begin
+  FPreviewDone := true;
+
+  // cancel the preview
+  if Assigned(FComposeShape) then
+  begin
+    FInstance.Image.Undo;
+    FComposeShape := nil;
+  end;
+
+  // chosen parameters
+  cuspCount := SpinEdit_CuspCount.Value;
+
+  // make a new preview
+  FComposeShape := FInstance.Image.DoBegin;
+  try
+    // if there is already a corresponding layer
+    if FUpdateLayer then
+    begin
+      curIndex := FInstance.Image.CurrentLayerIndex;
+      prevOriginal := FInstance.Image.LayerOriginal[curIndex] as TVectorOriginal;
+
+      // record changes made inside the original
+      FInstance.Image.CurrentState.DiscardOriginalDiff:= false;
+      UpdateOriginal(prevOriginal, cuspCount);
+      FInstance.Image.CurrentState.DiscardOriginalDiff:= true;
+    end else
+    begin
+      // create a new layer
+      original := TVectorOriginal.Create;
+      UpdateOriginal(original, cuspCount);
+
+      // if current layer is empty, replace it
+      if FInstance.Image.CurrentLayerEmpty then
+      begin
+        curIndex := FInstance.Image.CurrentLayerIndex;
+        FInstance.Image.AddUndo(
+          TReplaceLayerByCustomOriginalDifference.Create(FInstance.Image.CurrentState,
+            FInstance.Image.CurrentLayerIndex, true, original));
+        FInstance.Image.ImageMayChangeCompletely;
+        FInstance.Image.LayerName[curIndex] := Caption;
+      end
+      else
+      begin
+        // otherwise add the new layer
+        FInstance.Image.AddNewLayer(original, Caption, boTransparent, AffineMatrixIdentity);
+        curIndex := FInstance.Image.CurrentLayerIndex;
+      end;
+
+      FInstance.Image.SetLayerRegistry(curIndex, 'render-name', RenderName);
+    end;
+
+    // update the parameters saved in the layer
+    FInstance.Image.SetLayerRegistry(curIndex, 'cusp-count', IntToStr(cuspCount));
+
+    Button_OK.Enabled := true;
+  finally
+    FInstance.Image.DoEnd(FComposeShape);
+  end;
+end;
+
+procedure TFHypocycloid.UpdateOriginal(AOriginal: TVectorOriginal; ACuspCount: integer);
+var
+  shape, prevShape: TCurveShape;
+  i: Integer;
+begin
+  // create prototype shape
+  shape := MakeHypocycloid(FInstance.Image.Width, FInstance.Image.Height,
+                           ACuspCount) as TCurveShape;
+
+  // find the existing hypocycloid
+  for i := 0 to AOriginal.ShapeCount-1 do
+    if AOriginal.Shape[i] is TCurveShape then
+    begin
+      prevShape := AOriginal.Shape[i] as TCurveShape;
+      prevShape.Clear;
+      prevShape.AddPointRange(shape.GetPointRange);
+      FreeAndNil(shape);
+      break;
+    end;
+
+  // if the shape wasn't found, add the prototype
+  if Assigned(shape) then
+    AOriginal.AddShape(shape);
+end;
+
+function TFHypocycloid.IsCorrespondingOriginal: boolean;
+var
+  curIndex: Integer;
+begin
+  curIndex := FInstance.Image.CurrentLayerIndex;
+  result :=
+    (FInstance.Image.LayerOriginalClass[curIndex] = TVectorOriginal) and
+    (FInstance.Image.GetLayerRegistry(curIndex, 'render-name') = RenderName)
+end;
+
+end.
+

+ 8 - 1
lazpaint/lazpaint.lpi

@@ -435,7 +435,7 @@
         <PackageName Value="LCL"/>
       </Item5>
     </RequiredPackages>
-    <Units Count="107">
+    <Units Count="108">
       <Unit0>
         <Filename Value="lazpaint.lpr"/>
         <IsPartOfProject Value="True"/>
@@ -1062,6 +1062,13 @@
         <Filename Value="getfilesindir.inc"/>
         <IsPartOfProject Value="True"/>
       </Unit106>
+      <Unit107>
+        <Filename Value="dialog\filter\uhypocycloid.pas"/>
+        <IsPartOfProject Value="True"/>
+        <ComponentName Value="FHypocycloid"/>
+        <HasResources Value="True"/>
+        <ResourceBaseClass Value="Form"/>
+      </Unit107>
     </Units>
   </ProjectOptions>
   <CompilerOptions>

+ 1 - 1
lazpaint/lazpaint.lpr

@@ -40,7 +40,7 @@ uses
   URainType, UFormRain, UPaletteToolbar, uselectionhighlight,
   UImagePreview, UPreviewDialog, UQuestion, UTiff, UImageView,
   UDarkTheme, URaw, UProcessAuto, UPython, UImageBackup, ULayerStackInterface,
-  UChooseColorInterface, UIconCache;
+  UChooseColorInterface, UIconCache, uhypocycloid;
 
 //sometimes LResources disappear in the uses clause
 

+ 12 - 0
lazpaint/lazpaintdialogs.inc

@@ -583,4 +583,16 @@ begin
   self.ShowTopmost(top);
 end;
 
+function TLazPaintInstance.ShowHypocycloidDlg(AInstance: TLazPaintCustomInstance; AParameters: TVariableSet): TScriptResult;
+var oldSelectionNormal: boolean;
+    top: TTopMostInfo;
+begin
+  top := self.HideTopmost;
+  oldSelectionNormal := ShowSelectionNormal;
+  ShowSelectionNormal := true;
+  result := uhypocycloid.ShowHypocycloidDlg(AInstance, AParameters);
+  ShowSelectionNormal := oldSelectionNormal;
+  self.ShowTopmost(top);
+end;
+
 

+ 2 - 1
lazpaint/lazpaintinstance.pas

@@ -260,6 +260,7 @@ type
     function ShowFunctionFilterDlg(AFilterConnector: TObject): TScriptResult; override;
     function ShowSharpenDlg(AFilterConnector: TObject): TScriptResult; override;
     function ShowPosterizeDlg(AParameters: TVariableSet): TScriptResult; override;
+    function ShowHypocycloidDlg(AInstance: TLazPaintCustomInstance; AParameters: TVariableSet): TScriptResult; override;
     procedure ShowPrintDlg; override;
     function HideTopmost: TTopMostInfo; override;
     procedure ShowTopmost(AInfo: TTopMostInfo); override;
@@ -297,7 +298,7 @@ uses LCLType, Types, Dialogs, FileUtil, StdCtrls, LCLIntf, BGRAUTF8, UTranslatio
 
      URadialBlur, UMotionBlur, UEmboss, UTwirl, UWaveDisplacement,
      unewimage, uresample, UPixelate, unoisefilter, ufilters,
-     USharpen, uposterize, UPhongFilter, UFilterFunction,
+     USharpen, uposterize, uhypocycloid, UPhongFilter, UFilterFunction,
      uprint, USaveOption, UFormRain,
      {$IFDEF DARWIN}BGRAGraphics,{$ENDIF}
 

File diff suppressed because it is too large
+ 559 - 556
lazpaint/lazpaintmainform.lfm


+ 335 - 334
lazpaint/lazpaintmainform.lrj

@@ -1,334 +1,335 @@
-{"version":1,"strings":[
-{"hash":150371188,"name":"tfmain.caption","sourcebytes":[76,97,122,80,97,105,110,116],"value":"LazPaint"},
-{"hash":44380332,"name":"tfmain.image_currenttool.hint","sourcebytes":[83,101,108,101,99,116,101,100,32,116,111,111,108],"value":"Selected tool"},
-{"hash":30191261,"name":"tfmain.label_currentzoom.hint","sourcebytes":[67,117,114,114,101,110,116,32,122,111,111,109],"value":"Current zoom"},
-{"hash":37,"name":"tfmain.label_currentzoom.caption","sourcebytes":[37],"value":"%"},
-{"hash":176868709,"name":"tfmain.label_currentdiff.hint","sourcebytes":[67,111,108,111,114,32,100,105,102,102,101,114,101,110,99,101],"value":"Color difference"},
-{"hash":213797,"name":"tfmain.label_currentdiff.caption","sourcebytes":[49,48,48,37],"value":"100%"},
-{"hash":6159272,"name":"tfmain.label_penwidth.caption","sourcebytes":[87,105,100,116,104],"value":"Width"},
-{"hash":8236392,"name":"tfmain.spinedit_penwidth.hint","sourcebytes":[80,101,110,32,119,105,100,116,104],"value":"Pen width"},
-{"hash":5015701,"name":"tfmain.label_eraser.caption","sourcebytes":[69,114,97,115,101],"value":"Erase"},
-{"hash":219565076,"name":"tfmain.tool_erasealpha.hint","sourcebytes":[77,97,107,101,32,116,114,97,110,115,112,97,114,101,110,116],"value":"Make transparent"},
-{"hash":94755518,"name":"tfmain.tool_eraseblur.hint","sourcebytes":[83,111,102,116,101,110],"value":"Soften"},
-{"hash":50199278,"name":"tfmain.tool_eraselighten.hint","sourcebytes":[76,105,103,104,116,101,110],"value":"Lighten"},
-{"hash":78156222,"name":"tfmain.tool_erasedarken.hint","sourcebytes":[68,97,114,107,101,110],"value":"Darken"},
-{"hash":166237934,"name":"tfmain.tool_erasesharpen.hint","sourcebytes":[83,104,97,114,112,101,110],"value":"Sharpen"},
-{"hash":250503177,"name":"tfmain.spinedit_eraser.hint","sourcebytes":[69,114,97,115,101,114,32,111,112,97,99,105,116,121],"value":"Eraser opacity"},
-{"hash":46678005,"name":"tfmain.label_tolerance.caption","sourcebytes":[84,111,108,101,114,97,110,99,101],"value":"Tolerance"},
-{"hash":24460908,"name":"tfmain.tool_progressivefloodfill.hint","sourcebytes":[80,114,111,103,114,101,115,115,105,118,101,32,102,108,111,111,100,102,105,108,108],"value":"Progressive floodfill"},
-{"hash":24460908,"name":"tfmain.tool_progressivefloodfill.caption","sourcebytes":[80,114,111,103,114,101,115,115,105,118,101,32,102,108,111,111,100,102,105,108,108],"value":"Progressive floodfill"},
-{"hash":115147346,"name":"tfmain.tool_drawshapeborder.hint","sourcebytes":[68,114,97,119,32,98,111,114,100,101,114],"value":"Draw border"},
-{"hash":243087429,"name":"tfmain.tool_fillshape.hint","sourcebytes":[70,105,108,108,32,115,104,97,112,101],"value":"Fill shape"},
-{"hash":181333059,"name":"tfmain.label_coordinates.hint","sourcebytes":[67,111,111,114,100,105,110,97,116,101,115],"value":"Coordinates"},
-{"hash":218886153,"name":"tfmain.label_coordinates.caption","sourcebytes":[57,57,57,57,120,57,57,57,57],"value":"9999x9999"},
-{"hash":42364240,"name":"tfmain.tool_capflat.hint","sourcebytes":[70,108,97,116,32,99,97,112],"value":"Flat cap"},
-{"hash":205926624,"name":"tfmain.tool_capround.hint","sourcebytes":[82,111,117,110,100,32,99,97,112],"value":"Round cap"},
-{"hash":142786864,"name":"tfmain.tool_capsquare.hint","sourcebytes":[83,113,117,97,114,101,32,99,97,112],"value":"Square cap"},
-{"hash":224157463,"name":"tfmain.spinedit_arrowsizex.hint","sourcebytes":[72,111,114,105,122,111,110,116,97,108,32,115,105,122,101,32,111,102,32,116,104,101,32,97,114,114,111,119],"value":"Horizontal size of the arrow"},
-{"hash":47574855,"name":"tfmain.spinedit_arrowsizey.hint","sourcebytes":[86,101,114,116,105,99,97,108,32,115,105,122,101,32,111,102,32,116,104,101,32,97,114,114,111,119],"value":"Vertical size of the arrow"},
-{"hash":65090695,"name":"tfmain.combobox_arrowstart.hint","sourcebytes":[83,116,97,114,116,105,110,103,32,97,114,114,111,119],"value":"Starting arrow"},
-{"hash":229386535,"name":"tfmain.combobox_arrowend.hint","sourcebytes":[69,110,100,105,110,103,32,97,114,114,111,119],"value":"Ending arrow"},
-{"hash":199465278,"name":"tfmain.tool_joinbevel.hint","sourcebytes":[66,101,118,101,108,32,106,111,105,110],"value":"Bevel join"},
-{"hash":73704254,"name":"tfmain.tool_joinround.hint","sourcebytes":[82,111,117,110,100,32,106,111,105,110],"value":"Round join"},
-{"hash":205804894,"name":"tfmain.tool_joinmiter.hint","sourcebytes":[77,105,116,101,114,32,106,111,105,110],"value":"Miter join"},
-{"hash":8055525,"name":"tfmain.combobox_penstyle.hint","sourcebytes":[80,101,110,32,115,116,121,108,101],"value":"Pen style"},
-{"hash":321780,"name":"tfmain.label_grid.caption","sourcebytes":[71,114,105,100],"value":"Grid"},
-{"hash":120,"name":"tfmain.label_gridx.caption","sourcebytes":[120],"value":"x"},
-{"hash":65314814,"name":"tfmain.tool_gridmovewithoutdeformation.hint","sourcebytes":[77,111,118,101,32,103,114,105,100,32,119,105,116,104,111,117,116,32,100,101,102,111,114,109,97,116,105,111,110],"value":"Move grid without deformation"},
-{"hash":4901317,"name":"tfmain.label_curve.caption","sourcebytes":[67,117,114,118,101],"value":"Curve"},
-{"hash":200334437,"name":"tfmain.tool_curvemodeangle.hint","sourcebytes":[68,114,97,119,32,97,110,32,97,110,103,108,101],"value":"Draw an angle"},
-{"hash":131219621,"name":"tfmain.tool_curvemodecurve.hint","sourcebytes":[68,114,97,119,32,97,32,99,117,114,118,101],"value":"Draw a curve"},
-{"hash":218543091,"name":"tfmain.tool_curvemodeauto.hint","sourcebytes":[65,117,116,111,100,101,116,101,99,116,32,97,110,103,108,101,115],"value":"Autodetect angles"},
-{"hash":125049492,"name":"tfmain.tool_curvemovepoint.hint","sourcebytes":[77,111,118,101,32,112,111,105,110,116],"value":"Move point"},
-{"hash":371956,"name":"tfmain.label_text.caption","sourcebytes":[84,101,120,116],"value":"Text"},
-{"hash":71566590,"name":"tfmain.tool_textfont.hint","sourcebytes":[67,104,111,111,115,101,32,102,111,110,116,46,46,46],"value":"Choose font..."},
-{"hash":180162887,"name":"tfmain.tool_textphong.hint","sourcebytes":[84,101,120,116,32,112,104,111,110,103,32,115,104,97,100,105,110,103],"value":"Text phong shading"},
-{"hash":235120932,"name":"tfmain.tool_textalignleft.hint","sourcebytes":[65,108,105,103,110,32,108,101,102,116],"value":"Align left"},
-{"hash":77355714,"name":"tfmain.tool_textaligncenter.hint","sourcebytes":[67,101,110,116,101,114],"value":"Center"},
-{"hash":3199508,"name":"tfmain.tool_textalignright.hint","sourcebytes":[65,108,105,103,110,32,114,105,103,104,116],"value":"Align right"},
-{"hash":258464709,"name":"tfmain.spinedit_textsize.hint","sourcebytes":[84,101,120,116,32,115,105,122,101],"value":"Text size"},
-{"hash":5892197,"name":"tfmain.label_shape.caption","sourcebytes":[83,104,97,112,101],"value":"Shape"},
-{"hash":76974786,"name":"tfmain.label_phongborder.caption","sourcebytes":[66,111,114,100,101,114],"value":"Border"},
-{"hash":178787989,"name":"tfmain.tool_phongshaperectangle.hint","sourcebytes":[82,101,99,116,97,110,103,108,101],"value":"Rectangle"},
-{"hash":4807381,"name":"tfmain.tool_phongshaperoundrect.hint","sourcebytes":[82,111,117,110,100,101,100,32,114,101,99,116,97,110,103,108,101],"value":"Rounded rectangle"},
-{"hash":94825605,"name":"tfmain.tool_phongshapesphere.hint","sourcebytes":[83,112,104,101,114,101],"value":"Sphere"},
-{"hash":304709,"name":"tfmain.tool_phongshapecone.hint","sourcebytes":[67,111,110,101],"value":"Cone"},
-{"hash":187648901,"name":"tfmain.tool_phongshapeverticalcone.hint","sourcebytes":[86,101,114,116,105,99,97,108,32,99,111,110,101],"value":"Vertical cone"},
-{"hash":115522882,"name":"tfmain.tool_phongshapehorizontalcylinder.hint","sourcebytes":[72,111,114,105,122,111,110,116,97,108,32,99,121,108,105,110,100,101,114],"value":"Horizontal cylinder"},
-{"hash":31811010,"name":"tfmain.tool_phongshapeverticalcylinder.hint","sourcebytes":[86,101,114,116,105,99,97,108,32,99,121,108,105,110,100,101,114],"value":"Vertical cylinder"},
-{"hash":202312101,"name":"tfmain.spinedit_phongbordersize.hint","sourcebytes":[66,111,114,100,101,114,32,115,105,122,101],"value":"Border size"},
-{"hash":61914917,"name":"tfmain.label_altitude.caption","sourcebytes":[65,108,116,105,116,117,100,101],"value":"Altitude"},
-{"hash":221694037,"name":"tfmain.spinedit_shapealtitude.hint","sourcebytes":[83,104,97,112,101,32,97,108,116,105,116,117,100,101],"value":"Shape altitude"},
-{"hash":6159272,"name":"tfmain.label_outlinewidth.caption","sourcebytes":[87,105,100,116,104],"value":"Width"},
-{"hash":57137717,"name":"tfmain.tool_textoutline.hint","sourcebytes":[84,101,120,116,32,111,117,116,108,105,110,101],"value":"Text outline"},
-{"hash":68821400,"name":"tfmain.spinedit_textoutlinewidth.hint","sourcebytes":[84,101,120,116,32,111,117,116,108,105,110,101,32,119,105,100,116,104],"value":"Text outline width"},
-{"hash":30209135,"name":"tfmain.perspective_twoplanes.hint","sourcebytes":[68,114,97,119,32,111,112,112,111,115,105,116,101,32,112,108,97,110,101,32,116,111,111],"value":"Draw opposite plane too"},
-{"hash":65297493,"name":"tfmain.perspective_repeat.hint","sourcebytes":[82,101,112,101,97,116,32,105,109,97,103,101],"value":"Repeat image"},
-{"hash":4824216,"name":"tfmain.label_brush.caption","sourcebytes":[66,114,117,115,104],"value":"Brush"},
-{"hash":174563351,"name":"tfmain.label_spacing.caption","sourcebytes":[83,112,97,99,105,110,103],"value":"Spacing"},
-{"hash":70662787,"name":"tfmain.spinedit_brushspacing.hint","sourcebytes":[83,112,97,99,105,110,103,32,98,101,116,119,101,101,110,32,112,97,116,116,101,114,110,115],"value":"Spacing between patterns"},
-{"hash":5802751,"name":"tfmain.label_ratio.caption","sourcebytes":[82,97,116,105,111],"value":"Ratio"},
-{"hash":67807111,"name":"tfmain.tool_aliasing.hint","sourcebytes":[68,105,115,97,98,108,101,32,97,110,116,105,97,108,105,97,115,105,110,103],"value":"Disable antialiasing"},
-{"hash":120839925,"name":"tfmain.tool_closeshape.hint","sourcebytes":[67,108,111,115,101,32,115,104,97,112,101],"value":"Close shape"},
-{"hash":130332167,"name":"tfmain.tool_textshadow.hint","sourcebytes":[84,101,120,116,32,115,104,97,100,111,119],"value":"Text shadow"},
-{"hash":299970,"name":"tfmain.label_textblur.caption","sourcebytes":[66,108,117,114],"value":"Blur"},
-{"hash":114259058,"name":"tfmain.spinedit_textblur.hint","sourcebytes":[83,104,97,100,111,119,32,98,108,117,114],"value":"Shadow blur"},
-{"hash":89971140,"name":"tfmain.label_shadowoffset.caption","sourcebytes":[79,102,102,115,101,116],"value":"Offset"},
-{"hash":236421172,"name":"tfmain.spinedit_textshadowx.hint","sourcebytes":[72,111,114,105,122,111,110,116,97,108,32,115,104,97,100,111,119,32,111,102,102,115,101,116],"value":"Horizontal shadow offset"},
-{"hash":105381300,"name":"tfmain.spinedit_textshadowy.hint","sourcebytes":[86,101,114,116,105,99,97,108,32,115,104,97,100,111,119,32,111,102,102,115,101,116],"value":"Vertical shadow offset"},
-{"hash":22206,"name":"tfmain.label_pen.caption","sourcebytes":[80,101,110],"value":"Pen"},
-{"hash":264792562,"name":"tfmain.image_swapcolors.hint","sourcebytes":[83,119,105,116,99,104,32,99,111,108,111,114],"value":"Switch color"},
-{"hash":296859,"name":"tfmain.label_back.caption","sourcebytes":[66,97,99,107],"value":"Back"},
-{"hash":76172398,"name":"tfmain.button_donate.caption","sourcebytes":[68,111,110,97,116,101,46,46,46],"value":"Donate..."},
-{"hash":300580,"name":"tfmain.tool_textbold.hint","sourcebytes":[66,111,108,100],"value":"Bold"},
-{"hash":84574963,"name":"tfmain.tool_textitalic.hint","sourcebytes":[73,116,97,108,105,99],"value":"Italic"},
-{"hash":180974597,"name":"tfmain.tool_textunderline.hint","sourcebytes":[85,110,100,101,114,108,105,110,101],"value":"Underline"},
-{"hash":151125108,"name":"tfmain.tool_textstrikeout.hint","sourcebytes":[83,116,114,105,107,101,111,117,116],"value":"Strikeout"},
-{"hash":39152780,"name":"tfmain.tool_textbidirectional.hint","sourcebytes":[66,105,100,105,114,101,99,116,105,111,110,97,108],"value":"Bidirectional"},
-{"hash":63280628,"name":"tfmain.tool_textltr.hint","sourcebytes":[76,101,102,116,32,116,111,32,114,105,103,104,116],"value":"Left to right"},
-{"hash":65854964,"name":"tfmain.tool_textrtl.hint","sourcebytes":[82,105,103,104,116,32,116,111,32,108,101,102,116],"value":"Right to left"},
-{"hash":266351424,"name":"tfmain.tool_textaligntop.hint","sourcebytes":[65,108,105,103,110,32,116,111,112],"value":"Align top"},
-{"hash":116886537,"name":"tfmain.tool_textalignmiddle.hint","sourcebytes":[67,101,110,116,101,114,32,118,101,114,116,105,99,97,108,108,121],"value":"Center vertically"},
-{"hash":34882909,"name":"tfmain.tool_textalignbottom.hint","sourcebytes":[65,108,105,103,110,32,98,111,116,116,111,109],"value":"Align bottom"},
-{"hash":88908046,"name":"tfmain.filenew.caption","sourcebytes":[78,101,119,46,46,46],"value":"New..."},
-{"hash":111833829,"name":"tfmain.filenew.hint","sourcebytes":[67,114,101,97,116,101,32,97,32,110,101,119,32,102,105,108,101],"value":"Create a new file"},
-{"hash":107745630,"name":"tfmain.fileopen.caption","sourcebytes":[79,112,101,110,46,46,46],"value":"Open..."},
-{"hash":218146437,"name":"tfmain.fileopen.hint","sourcebytes":[79,112,101,110,32,101,120,105,115,116,105,110,103,32,102,105,108,101],"value":"Open existing file"},
-{"hash":23459486,"name":"tfmain.viewzoomin.hint","sourcebytes":[90,111,111,109,32,105,110],"value":"Zoom in"},
-{"hash":106918100,"name":"tfmain.viewzoomout.hint","sourcebytes":[90,111,111,109,32,111,117,116],"value":"Zoom out"},
-{"hash":251132352,"name":"tfmain.imagehorizontalflip.caption","sourcebytes":[72,111,114,105,122,111,110,116,97,108,32,102,108,105,112],"value":"Horizontal flip"},
-{"hash":107134297,"name":"tfmain.imagehorizontalflip.hint","sourcebytes":[70,108,105,112,32,105,109,97,103,101,32,104,111,114,105,122,111,110,116,97,108,108,121],"value":"Flip image horizontally"},
-{"hash":187662016,"name":"tfmain.imageverticalflip.caption","sourcebytes":[86,101,114,116,105,99,97,108,32,102,108,105,112],"value":"Vertical flip"},
-{"hash":128483817,"name":"tfmain.imageverticalflip.hint","sourcebytes":[70,108,105,112,32,105,109,97,103,101,32,118,101,114,116,105,99,97,108,108,121],"value":"Flip image vertically"},
-{"hash":72010382,"name":"tfmain.imageresample.caption","sourcebytes":[82,101,115,97,109,112,108,101,46,46,46],"value":"Resample..."},
-{"hash":200831861,"name":"tfmain.imageresample.hint","sourcebytes":[82,101,115,97,109,112,108,101,32,105,109,97,103,101],"value":"Resample image"},
-{"hash":192766339,"name":"tfmain.imagesmartzoom3.caption","sourcebytes":[83,109,97,114,116,32,122,111,111,109,32,120,51],"value":"Smart zoom x3"},
-{"hash":23626005,"name":"tfmain.viewzoomoriginal.caption","sourcebytes":[79,114,105,103,105,110,97,108,32,115,105,122,101],"value":"Original size"},
-{"hash":259531189,"name":"tfmain.viewzoomoriginal.hint","sourcebytes":[90,111,111,109,32,116,111,32,111,114,105,103,105,110,97,108,32,112,105,120,101,108,32,115,105,122,101],"value":"Zoom to original pixel size"},
-{"hash":378031,"name":"tfmain.editundo.caption","sourcebytes":[85,110,100,111],"value":"Undo"},
-{"hash":130699086,"name":"tfmain.editundo.hint","sourcebytes":[85,110,100,111,32,108,97,115,116,32,109,111,100,105,102,105,99,97,116,105,111,110],"value":"Undo last modification"},
-{"hash":363439,"name":"tfmain.editredo.hint","sourcebytes":[82,101,100,111],"value":"Redo"},
-{"hash":106916628,"name":"tfmain.viewzoomfit.caption","sourcebytes":[90,111,111,109,32,102,105,116],"value":"Zoom fit"},
-{"hash":131274455,"name":"tfmain.viewzoomfit.hint","sourcebytes":[90,111,111,109,32,116,111,32,102,105,116,32,105,110,32,116,104,101,32,119,105,110,100,111,119],"value":"Zoom to fit in the window"},
-{"hash":211562244,"name":"tfmain.editdeselect.hint","sourcebytes":[68,101,115,101,108,101,99,116],"value":"Deselect"},
-{"hash":237622494,"name":"tfmain.editinvertselection.hint","sourcebytes":[73,110,118,101,114,116,32,115,101,108,101,99,116,105,111,110],"value":"Invert selection"},
-{"hash":17148597,"name":"tfmain.toolselectrect.hint","sourcebytes":[83,101,108,101,99,116,32,114,101,99,116,97,110,103,108,101],"value":"Select rectangle"},
-{"hash":135963749,"name":"tfmain.toolselectellipse.hint","sourcebytes":[83,101,108,101,99,116,32,101,108,108,105,112,115,101],"value":"Select ellipse"},
-{"hash":193486782,"name":"tfmain.toolselectpoly.hint","sourcebytes":[83,101,108,101,99,116,32,112,111,108,121,103,111,110],"value":"Select polygon"},
-{"hash":66511461,"name":"tfmain.toolselectspline.hint","sourcebytes":[83,101,108,101,99,116,32,99,117,114,118,101],"value":"Select curve"},
-{"hash":75354974,"name":"tfmain.toolmoveselection.hint","sourcebytes":[77,111,118,101,32,115,101,108,101,99,116,105,111,110],"value":"Move selection"},
-{"hash":128109646,"name":"tfmain.toolselectpen.caption","sourcebytes":[83,101,108,101,99,116,105,111,110,32,112,101,110],"value":"Selection pen"},
-{"hash":228577870,"name":"tfmain.toolselectpen.hint","sourcebytes":[68,114,97,119,32,115,101,108,101,99,116,105,111,110,32,119,105,116,104,32,112,101,110],"value":"Draw selection with pen"},
-{"hash":304761,"name":"tfmain.editcopy.caption","sourcebytes":[67,111,112,121],"value":"Copy"},
-{"hash":79811454,"name":"tfmain.editcopy.hint","sourcebytes":[67,111,112,121,32,115,101,108,101,99,116,105,111,110],"value":"Copy selection"},
-{"hash":5671589,"name":"tfmain.editpaste.hint","sourcebytes":[80,97,115,116,101],"value":"Paste"},
-{"hash":19140,"name":"tfmain.editcut.caption","sourcebytes":[67,117,116],"value":"Cut"},
-{"hash":142399070,"name":"tfmain.editcut.hint","sourcebytes":[67,117,116,32,115,101,108,101,99,116,105,111,110],"value":"Cut selection"},
-{"hash":78392485,"name":"tfmain.editdeleteselection.caption","sourcebytes":[68,101,108,101,116,101],"value":"Delete"},
-{"hash":236551166,"name":"tfmain.editdeleteselection.hint","sourcebytes":[68,101,108,101,116,101,32,115,101,108,101,99,116,105,111,110],"value":"Delete selection"},
-{"hash":169361790,"name":"tfmain.toolrotateselection.hint","sourcebytes":[82,111,116,97,116,101,32,115,101,108,101,99,116,105,111,110],"value":"Rotate selection"},
-{"hash":195296268,"name":"tfmain.editselectall.caption","sourcebytes":[83,101,108,101,99,116,32,97,108,108],"value":"Select all"},
-{"hash":195296268,"name":"tfmain.editselectall.hint","sourcebytes":[83,101,108,101,99,116,32,97,108,108],"value":"Select all"},
-{"hash":191244600,"name":"tfmain.viewtoolbox.caption","sourcebytes":[84,111,111,108,98,111,120],"value":"Toolbox"},
-{"hash":78001811,"name":"tfmain.viewcolors.caption","sourcebytes":[67,111,108,111,114,115],"value":"Colors"},
-{"hash":88162814,"name":"tfmain.imagecrop.caption","sourcebytes":[67,114,111,112,32,116,111,32,115,101,108,101,99,116,105,111,110],"value":"Crop to selection"},
-{"hash":128112628,"name":"tfmain.editselectionfit.caption","sourcebytes":[83,101,108,101,99,116,105,111,110,32,102,105,116],"value":"Selection fit"},
-{"hash":73053668,"name":"tfmain.imageclearalpha.caption","sourcebytes":[67,108,101,97,114,32,97,108,112,104,97,32,99,104,97,110,110,101,108,32,97,110,100,32,115,101,116,32,98,97,99,107,103,114,111,117,110,100],"value":"Clear alpha channel and set background"},
-{"hash":32413959,"name":"tfmain.imagefillbackground.caption","sourcebytes":[70,105,108,108,32,98,97,99,107,103,114,111,117,110,100,32,119,105,116,104,32,97,110,116,105,97,108,105,97,115,105,110,103],"value":"Fill background with antialiasing"},
-{"hash":40698606,"name":"tfmain.imagechangecanvassize.caption","sourcebytes":[67,97,110,118,97,115,32,115,105,122,101,46,46,46],"value":"Canvas size..."},
-{"hash":174425639,"name":"tfmain.imagerotatecw.caption","sourcebytes":[82,111,116,97,116,101,32,57,48,194,176,32,67,87],"value":"Rotate 90\u00B0 CW"},
-{"hash":106458407,"name":"tfmain.imagerotateccw.caption","sourcebytes":[82,111,116,97,116,101,32,57,48,194,176,32,67,67,87],"value":"Rotate 90\u00B0 CCW"},
-{"hash":44176496,"name":"tfmain.imagerotate180.caption","sourcebytes":[82,111,116,97,116,101,32,49,56,48,194,176],"value":"Rotate 180\u00B0"},
-{"hash":219032926,"name":"tfmain.colorintensity.caption","sourcebytes":[73,110,116,101,110,115,105,116,121,46,46,46],"value":"Intensity..."},
-{"hash":102010462,"name":"tfmain.colorlightness.caption","sourcebytes":[66,114,105,103,104,116,110,101,115,115,32,47,32,67,111,110,116,114,97,115,116,46,46,46],"value":"Brightness / Contrast..."},
-{"hash":247427790,"name":"tfmain.colorshiftcolors.caption","sourcebytes":[83,104,105,102,116,32,99,111,108,111,114,115,46,46,46],"value":"Shift colors..."},
-{"hash":156902510,"name":"tfmain.colorcolorize.caption","sourcebytes":[67,111,108,111,114,105,122,101,46,46,46],"value":"Colorize..."},
-{"hash":78427662,"name":"tfmain.helpindex.caption","sourcebytes":[73,110,100,101,120,46,46,46],"value":"Index..."},
-{"hash":158102910,"name":"tfmain.helpabout.caption","sourcebytes":[65,98,111,117,116,46,46,46],"value":"About..."},
-{"hash":112740814,"name":"tfmain.imagerepeat.caption","sourcebytes":[82,101,112,101,97,116,46,46,46],"value":"Repeat..."},
-{"hash":257089940,"name":"tfmain.toolmagicwand.caption","sourcebytes":[77,97,103,105,99,32,119,97,110,100],"value":"Magic wand"},
-{"hash":45494836,"name":"tfmain.toolmagicwand.hint","sourcebytes":[77,97,103,105,99,32,119,97,110,100,32,115,101,108,101,99,116],"value":"Magic wand select"},
-{"hash":77818803,"name":"tfmain.renderclouds.caption","sourcebytes":[67,108,111,117,100,115],"value":"Clouds"},
-{"hash":240690499,"name":"tfmain.rendercustomwater.caption","sourcebytes":[87,97,116,101,114,32,119,105,116,104,32,99,117,115,116,111,109,32,99,111,108,111,114,115],"value":"Water with custom colors"},
-{"hash":85578645,"name":"tfmain.renderperlinnoise.caption","sourcebytes":[80,101,114,108,105,110,32,110,111,105,115,101],"value":"Perlin noise"},
-{"hash":261781,"name":"tfmain.rendercyclicperlinnoise.caption","sourcebytes":[67,121,99,108,105,99,32,80,101,114,108,105,110,32,110,111,105,115,101],"value":"Cyclic Perlin noise"},
-{"hash":386644,"name":"tfmain.renderwood.caption","sourcebytes":[87,111,111,100],"value":"Wood"},
-{"hash":120105643,"name":"tfmain.renderplastik.caption","sourcebytes":[80,108,97,115,116,105,107],"value":"Plastik"},
-{"hash":239140882,"name":"tfmain.rendermetalfloor.caption","sourcebytes":[77,101,116,97,108,32,102,108,111,111,114],"value":"Metal floor"},
-{"hash":112836501,"name":"tfmain.rendercamouflage.caption","sourcebytes":[67,97,109,111,117,102,108,97,103,101],"value":"Camouflage"},
-{"hash":158477108,"name":"tfmain.rendersnowprint.caption","sourcebytes":[83,110,111,119,32,112,114,105,110,116],"value":"Snow print"},
-{"hash":5944901,"name":"tfmain.renderstone.caption","sourcebytes":[83,116,111,110,101],"value":"Stone"},
-{"hash":103012869,"name":"tfmain.renderroundstone.caption","sourcebytes":[82,111,117,110,100,32,115,116,111,110,101],"value":"Round stone"},
-{"hash":87591205,"name":"tfmain.rendermarble.caption","sourcebytes":[77,97,114,98,108,101],"value":"Marble"},
-{"hash":6130370,"name":"tfmain.renderwater.caption","sourcebytes":[87,97,116,101,114],"value":"Water"},
-{"hash":187599764,"name":"tfmain.renderwoodvertical.caption","sourcebytes":[86,101,114,116,105,99,97,108,32,119,111,111,100],"value":"Vertical wood"},
-{"hash":137342309,"name":"tfmain.embeddedvalidate.caption","sourcebytes":[86,97,108,105,100,97,116,101],"value":"Validate"},
-{"hash":75331571,"name":"tfmain.embeddedvalidate.hint","sourcebytes":[86,97,108,105,100,97,116,101,32,109,111,100,105,102,105,99,97,116,105,111,110,115],"value":"Validate modifications"},
-{"hash":77089212,"name":"tfmain.embeddedcancel.caption","sourcebytes":[67,97,110,99,101,108],"value":"Cancel"},
-{"hash":93963171,"name":"tfmain.embeddedcancel.hint","sourcebytes":[67,97,110,99,101,108,32,109,111,100,105,102,105,99,97,116,105,111,110,115],"value":"Cancel modifications"},
-{"hash":321780,"name":"tfmain.viewgrid.caption","sourcebytes":[71,114,105,100],"value":"Grid"},
-{"hash":176417125,"name":"tfmain.editpasteasnew.caption","sourcebytes":[80,97,115,116,101,32,97,115,32,110,101,119,32,105,109,97,103,101],"value":"Paste as new image"},
-{"hash":221621454,"name":"tfmain.editselection.caption","sourcebytes":[69,100,105,116,32,115,101,108,101,99,116,105,111,110,46,46,46],"value":"Edit selection..."},
-{"hash":86572179,"name":"tfmain.viewlayerstack.caption","sourcebytes":[76,97,121,101,114,115],"value":"Layers"},
-{"hash":124848643,"name":"tfmain.viewlayerstackbutton.caption","sourcebytes":[83,104,111,119,32,108,97,121,101,114,115],"value":"Show layers"},
-{"hash":214344631,"name":"tfmain.viewlayerstackbutton.hint","sourcebytes":[83,104,111,119,32,111,114,32,104,105,100,101,32,108,97,121,101,114,32,115,116,97,99,107,32,119,105,110,100,111,119],"value":"Show or hide layer stack window"},
-{"hash":161226738,"name":"tfmain.imagecroplayer.caption","sourcebytes":[67,114,111,112,32,116,111,32,115,101,108,101,99,116,105,111,110,32,97,110,100,32,99,117,114,114,101,110,116,32,108,97,121,101,114],"value":"Crop to selection and current layer"},
-{"hash":97075273,"name":"tfmain.layerhorizontalflip.hint","sourcebytes":[70,108,105,112,32,108,97,121,101,114,32,104,111,114,105,122,111,110,116,97,108,108,121],"value":"Flip layer horizontally"},
-{"hash":110750825,"name":"tfmain.layerverticalflip.hint","sourcebytes":[70,108,105,112,32,108,97,121,101,114,32,118,101,114,116,105,99,97,108,108,121],"value":"Flip layer vertically"},
-{"hash":248838978,"name":"tfmain.layeraddnew.hint","sourcebytes":[65,100,100,32,110,101,119,32,108,97,121,101,114],"value":"Add new layer"},
-{"hash":50252034,"name":"tfmain.layerremovecurrent.hint","sourcebytes":[82,101,109,111,118,101,32,108,97,121,101,114],"value":"Remove layer"},
-{"hash":26157074,"name":"tfmain.layerduplicate.hint","sourcebytes":[68,117,112,108,105,99,97,116,101,32,115,101,108,101,99,116,101,100,32,108,97,121,101,114],"value":"Duplicate selected layer"},
-{"hash":20150450,"name":"tfmain.layermergeover.hint","sourcebytes":[77,101,114,103,101,32,108,97,121,101,114,32,111,118,101,114],"value":"Merge layer over"},
-{"hash":224054046,"name":"tfmain.layerfromfile.hint","sourcebytes":[73,109,112,111,114,116,32,108,97,121,101,114,32,102,114,111,109,32,102,105,108,101,46,46,46],"value":"Import layer from file..."},
-{"hash":125290754,"name":"tfmain.layermove.hint","sourcebytes":[77,111,118,101,32,108,97,121,101,114],"value":"Move layer"},
-{"hash":50603874,"name":"tfmain.layerrotate.hint","sourcebytes":[82,111,116,97,116,101,32,108,97,121,101,114],"value":"Rotate layer"},
-{"hash":222858453,"name":"tfmain.imageflatten.caption","sourcebytes":[70,108,97,116,116,101,110,32,105,109,97,103,101],"value":"Flatten image"},
-{"hash":93074804,"name":"tfmain.filereload.caption","sourcebytes":[82,101,108,111,97,100],"value":"Reload"},
-{"hash":366789,"name":"tfmain.filesave.caption","sourcebytes":[83,97,118,101],"value":"Save"},
-{"hash":60022005,"name":"tfmain.filesave.hint","sourcebytes":[83,97,118,101,32,99,117,114,114,101,110,116,32,102,105,108,101],"value":"Save current file"},
-{"hash":124639694,"name":"tfmain.filesaveas.caption","sourcebytes":[83,97,118,101,32,97,115,46,46,46],"value":"Save as..."},
-{"hash":159035875,"name":"tfmain.filesaveas.hint","sourcebytes":[83,97,118,101,32,102,105,108,101,32,97,115],"value":"Save file as"},
-{"hash":363524,"name":"tfmain.filequit.hint","sourcebytes":[81,117,105,116],"value":"Quit"},
-{"hash":169186686,"name":"tfmain.filesaveselectionas.caption","sourcebytes":[83,97,118,101,32,115,101,108,101,99,116,105,111,110,32,97,115,46,46,46],"value":"Save selection as..."},
-{"hash":223186382,"name":"tfmain.fileloadselection.caption","sourcebytes":[76,111,97,100,32,115,101,108,101,99,116,105,111,110,46,46,46],"value":"Load selection..."},
-{"hash":59477454,"name":"tfmain.fileimport3d.caption","sourcebytes":[73,109,112,111,114,116,32,51,68,32,111,98,106,101,99,116,46,46,46],"value":"Import 3D object..."},
-{"hash":164375502,"name":"tfmain.colorcurves.caption","sourcebytes":[67,117,114,118,101,115,46,46,46],"value":"Curves..."},
-{"hash":243723214,"name":"tfmain.colorposterize.caption","sourcebytes":[80,111,115,116,101,114,105,122,101,46,46,46],"value":"Posterize..."},
-{"hash":151352958,"name":"tfmain.fileprint.caption","sourcebytes":[80,114,105,110,116,46,46,46],"value":"Print..."},
-{"hash":225719252,"name":"tfmain.viewimagelist.caption","sourcebytes":[73,109,97,103,101,32,108,105,115,116],"value":"Image list"},
-{"hash":66110750,"name":"tfmain.filesaveasinsamefolder.caption","sourcebytes":[83,97,118,101,32,105,110,32,115,97,109,101,32,102,111,108,100,101,114,46,46,46],"value":"Save in same folder..."},
-{"hash":178213234,"name":"tfmain.editpasteasnewlayer.caption","sourcebytes":[80,97,115,116,101,32,97,115,32,110,101,119,32,108,97,121,101,114],"value":"Paste as new layer"},
-{"hash":158677870,"name":"tfmain.filterblurbox.caption","sourcebytes":[66,111,120,32,98,108,117,114,46,46,46],"value":"Box blur..."},
-{"hash":234157934,"name":"tfmain.filterblurfast.caption","sourcebytes":[70,97,115,116,32,98,108,117,114,46,46,46],"value":"Fast blur..."},
-{"hash":61344174,"name":"tfmain.filterblurradial.caption","sourcebytes":[71,97,117,115,115,105,97,110,32,98,108,117,114,46,46,46],"value":"Gaussian blur..."},
-{"hash":262805710,"name":"tfmain.filterblurcorona.caption","sourcebytes":[67,111,114,111,110,97,32,98,108,117,114,46,46,46],"value":"Corona blur..."},
-{"hash":227339886,"name":"tfmain.filterblurdisk.caption","sourcebytes":[68,105,115,107,32,98,108,117,114,46,46,46],"value":"Disk blur..."},
-{"hash":77369838,"name":"tfmain.filterblurprecise.caption","sourcebytes":[80,114,101,99,105,115,101,32,98,108,117,114,46,46,46],"value":"Precise blur..."},
-{"hash":260847150,"name":"tfmain.filterblurmotion.caption","sourcebytes":[77,111,116,105,111,110,32,98,108,117,114,46,46,46],"value":"Motion blur..."},
-{"hash":93793486,"name":"tfmain.filterblurcustom.caption","sourcebytes":[67,117,115,116,111,109,32,98,108,117,114,46,46,46],"value":"Custom blur..."},
-{"hash":158314382,"name":"tfmain.filtersharpen.caption","sourcebytes":[83,104,97,114,112,101,110,46,46,46],"value":"Sharpen..."},
-{"hash":94660264,"name":"tfmain.filtersmooth.caption","sourcebytes":[83,109,111,111,116,104],"value":"Smooth"},
-{"hash":87797630,"name":"tfmain.filtermedian.caption","sourcebytes":[77,101,100,105,97,110],"value":"Median"},
-{"hash":157953342,"name":"tfmain.filteremboss.caption","sourcebytes":[69,109,98,111,115,115,46,46,46],"value":"Emboss..."},
-{"hash":154699365,"name":"tfmain.filternormalize.caption","sourcebytes":[78,111,114,109,97,108,105,122,101],"value":"Normalize"},
-{"hash":198751621,"name":"tfmain.filternegative.caption","sourcebytes":[78,101,103,97,116,105,118,101],"value":"Negative"},
-{"hash":151640741,"name":"tfmain.filtergrayscale.caption","sourcebytes":[71,114,97,121,115,99,97,108,101],"value":"Grayscale"},
-{"hash":174438018,"name":"tfmain.filtercontour.caption","sourcebytes":[67,111,110,116,111,117,114],"value":"Contour"},
-{"hash":94825605,"name":"tfmain.filtersphere.caption","sourcebytes":[83,112,104,101,114,101],"value":"Sphere"},
-{"hash":3165810,"name":"tfmain.filtercylinder.caption","sourcebytes":[67,121,108,105,110,100,101,114],"value":"Cylinder"},
-{"hash":258000517,"name":"tfmain.filterlinearnegative.caption","sourcebytes":[76,105,110,101,97,114,32,110,101,103,97,116,105,118,101],"value":"Linear negative"},
-{"hash":126661353,"name":"tfmain.filterplane.caption","sourcebytes":[80,108,97,110,101,32,40,115,108,111,119,41],"value":"Plane (slow)"},
-{"hash":235468478,"name":"tfmain.filtertwirl.caption","sourcebytes":[84,119,105,114,108,46,46,46],"value":"Twirl..."},
-{"hash":48074702,"name":"tfmain.filterpixelate.caption","sourcebytes":[80,105,120,101,108,97,116,101,46,46,46],"value":"Pixelate..."},
-{"hash":193464901,"name":"tfmain.filtercleartype.caption","sourcebytes":[67,108,101,97,114,84,121,112,101],"value":"ClearType"},
-{"hash":37795461,"name":"tfmain.filtercleartypeinverse.caption","sourcebytes":[73,110,118,101,114,115,101,32,67,108,101,97,114,84,121,112,101],"value":"Inverse ClearType"},
-{"hash":14654542,"name":"tfmain.filterphong.caption","sourcebytes":[83,104,97,100,101,100,32,109,97,112,46,46,46],"value":"Shaded map..."},
-{"hash":31581342,"name":"tfmain.filterfunction.caption","sourcebytes":[65,112,112,108,121,32,102,117,110,99,116,105,111,110,46,46,46],"value":"Apply function..."},
-{"hash":144289715,"name":"tfmain.filtercomplementarycolor.caption","sourcebytes":[67,111,109,112,108,101,109,101,110,116,97,114,121,32,99,111,108,111,114,115],"value":"Complementary colors"},
-{"hash":54233774,"name":"tfmain.filternoise.caption","sourcebytes":[78,111,105,115,101,32,102,105,108,116,101,114,46,46,46],"value":"Noise filter..."},
-{"hash":142610782,"name":"tfmain.filterrain.caption","sourcebytes":[82,97,105,110,46,46,46],"value":"Rain..."},
-{"hash":197181954,"name":"tfmain.viewstatusbar.caption","sourcebytes":[83,116,97,116,117,115,32,98,97,114],"value":"Status bar"},
-{"hash":109235189,"name":"tfmain.viewpalette.caption","sourcebytes":[80,97,108,101,116,116,101],"value":"Palette"},
-{"hash":167619026,"name":"tfmain.fileuseimagebrowser.caption","sourcebytes":[85,115,101,32,105,109,97,103,101,32,98,114,111,119,115,101,114],"value":"Use image browser"},
-{"hash":64004190,"name":"tfmain.filechooseentry.caption","sourcebytes":[67,104,111,111,115,101,32,101,110,116,114,121,46,46,46],"value":"Choose entry..."},
-{"hash":143653317,"name":"tfmain.filechooseentry.hint","sourcebytes":[67,104,111,111,115,101,32,101,110,116,114,121,32,119,105,116,104,105,110,32,102,105,108,101],"value":"Choose entry within file"},
-{"hash":116001155,"name":"tfmain.forgetdialoganswers.caption","sourcebytes":[70,111,114,103,101,116,32,100,105,97,108,111,103,32,98,111,120,32,97,110,115,119,101,114,115],"value":"Forget dialog box answers"},
-{"hash":224505747,"name":"tfmain.forgetdialoganswers.hint","sourcebytes":[70,111,114,103,101,116,32,97,110,115,119,101,114,115,32,103,105,118,101,110,32,116,111,32,100,105,97,108,111,103,32,98,111,120,101,115],"value":"Forget answers given to dialog boxes"},
-{"hash":198751621,"name":"tfmain.imagenegative.caption","sourcebytes":[78,101,103,97,116,105,118,101],"value":"Negative"},
-{"hash":258000517,"name":"tfmain.imagelinearnegative.caption","sourcebytes":[76,105,110,101,97,114,32,110,101,103,97,116,105,118,101],"value":"Linear negative"},
-{"hash":179963859,"name":"tfmain.imageswapredblue.caption","sourcebytes":[83,119,97,112,32,114,101,100,32,97,110,100,32,98,108,117,101,32,99,104,97,110,110,101,108,115],"value":"Swap red and blue channels"},
-{"hash":259299730,"name":"tfmain.layerzoom.hint","sourcebytes":[90,111,111,109,32,108,97,121,101,114],"value":"Zoom layer"},
-{"hash":153208601,"name":"tfmain.selectionhorizontalflip.hint","sourcebytes":[70,108,105,112,32,115,101,108,101,99,116,105,111,110,32,104,111,114,105,122,111,110,116,97,108,108,121],"value":"Flip selection horizontally"},
-{"hash":166020249,"name":"tfmain.selectionverticalflip.hint","sourcebytes":[70,108,105,112,32,115,101,108,101,99,116,105,111,110,32,118,101,114,116,105,99,97,108,108,121],"value":"Flip selection vertically"},
-{"hash":244531892,"name":"tfmain.fileremembersaveformat.hint","sourcebytes":[82,101,109,101,109,98,101,114,32,115,97,118,101,32,102,111,114,109,97,116],"value":"Remember save format"},
-{"hash":232678978,"name":"tfmain.layerrasterize.hint","sourcebytes":[82,97,115,116,101,114,105,122,101,32,108,97,121,101,114],"value":"Rasterize layer"},
-{"hash":97266030,"name":"tfmain.viewworkspacecolor.caption","sourcebytes":[83,101,116,32,119,111,114,107,115,112,97,99,101,32,99,111,108,111,114,46,46,46],"value":"Set workspace color..."},
-{"hash":226378933,"name":"tfmain.viewdarktheme.caption","sourcebytes":[68,97,114,107,32,116,104,101,109,101],"value":"Dark theme"},
-{"hash":17857150,"name":"tfmain.filterwavedisplacement.caption","sourcebytes":[87,97,118,101,32,100,105,115,112,108,97,99,101,109,101,110,116,46,46,46],"value":"Wave displacement..."},
-{"hash":321604,"name":"tfmain.toolhand.caption","sourcebytes":[72,97,110,100],"value":"Hand"},
-{"hash":171743509,"name":"tfmain.toolhand.hint","sourcebytes":[77,111,118,101,32,97,110,100,32,115,99,114,111,108,108,32,112,105,99,116,117,114,101],"value":"Move and scroll picture"},
-{"hash":107455380,"name":"tfmain.toolhotspot.caption","sourcebytes":[72,111,116,32,115,112,111,116],"value":"Hot spot"},
-{"hash":14124562,"name":"tfmain.toolhotspot.hint","sourcebytes":[67,104,111,111,115,101,32,104,111,116,32,115,112,111,116,32,111,102,32,97,32,99,117,114,115,111,114],"value":"Choose hot spot of a cursor"},
-{"hash":63551362,"name":"tfmain.toolcolorpicker.hint","sourcebytes":[67,111,108,111,114,32,112,105,99,107,101,114],"value":"Color picker"},
-{"hash":22206,"name":"tfmain.toolpen.caption","sourcebytes":[80,101,110],"value":"Pen"},
-{"hash":119723774,"name":"tfmain.toolpen.hint","sourcebytes":[83,105,109,112,108,101,32,112,101,110],"value":"Simple pen"},
-{"hash":4824216,"name":"tfmain.toolbrush.hint","sourcebytes":[66,114,117,115,104],"value":"Brush"},
-{"hash":80251330,"name":"tfmain.tooleraser.hint","sourcebytes":[69,114,97,115,101,114],"value":"Eraser"},
-{"hash":106595100,"name":"tfmain.toolfloodfill.hint","sourcebytes":[70,108,111,111,100,102,105,108,108],"value":"Floodfill"},
-{"hash":74651452,"name":"tfmain.toolclone.hint","sourcebytes":[67,108,111,110,101,32,116,111,111,108],"value":"Clone tool"},
-{"hash":108876645,"name":"tfmain.tooleditshape.hint","sourcebytes":[69,100,105,116,32,115,104,97,112,101],"value":"Edit shape"},
-{"hash":178787989,"name":"tfmain.toolrect.hint","sourcebytes":[82,101,99,116,97,110,103,108,101],"value":"Rectangle"},
-{"hash":204670933,"name":"tfmain.toolellipse.hint","sourcebytes":[69,108,108,105,112,115,101],"value":"Ellipse"},
-{"hash":123993614,"name":"tfmain.toolpolygon.caption","sourcebytes":[80,111,108,121,103,111,110],"value":"Polygon"},
-{"hash":53188549,"name":"tfmain.toolpolygon.hint","sourcebytes":[80,111,108,121,103,111,110,32,111,114,32,112,111,108,121,108,105,110,101],"value":"Polygon or polyline"},
-{"hash":4901317,"name":"tfmain.toolspline.caption","sourcebytes":[67,117,114,118,101],"value":"Curve"},
-{"hash":4901317,"name":"tfmain.toolspline.hint","sourcebytes":[67,117,114,118,101],"value":"Curve"},
-{"hash":142278836,"name":"tfmain.toolgradient.caption","sourcebytes":[71,114,97,100,105,101,110,116],"value":"Gradient"},
-{"hash":215410292,"name":"tfmain.toolgradient.hint","sourcebytes":[82,101,110,100,101,114,32,103,114,97,100,105,101,110,116],"value":"Render gradient"},
-{"hash":65508053,"name":"tfmain.toolphong.hint","sourcebytes":[83,104,97,100,101,100,32,115,104,97,112,101],"value":"Shaded shape"},
-{"hash":371956,"name":"tfmain.tooltext.hint","sourcebytes":[84,101,120,116],"value":"Text"},
-{"hash":158470974,"name":"tfmain.tooldeformation.caption","sourcebytes":[68,101,102,111,114,109,97,116,105,111,110],"value":"Deformation"},
-{"hash":76663236,"name":"tfmain.tooldeformation.hint","sourcebytes":[68,101,102,111,114,109,97,116,105,111,110,32,103,114,105,100],"value":"Deformation grid"},
-{"hash":205239287,"name":"tfmain.tooltexturemapping.hint","sourcebytes":[84,101,120,116,117,114,101,32,109,97,112,112,105,110,103],"value":"Texture mapping"},
-{"hash":43972261,"name":"tfmain.toollayermapping.hint","sourcebytes":[76,97,121,101,114,32,112,101,114,115,112,101,99,116,105,118,101],"value":"Layer perspective"},
-{"hash":98487735,"name":"tfmain.toolchangedocking.hint","sourcebytes":[67,104,97,110,103,101,32,100,111,99,107,105,110,103],"value":"Change docking"},
-{"hash":200728952,"name":"tfmain.brushcreategeometric.hint","sourcebytes":[67,114,101,97,116,101,32,103,101,111,109,101,116,114,105,99,32,98,114,117,115,104],"value":"Create geometric brush"},
-{"hash":217170606,"name":"tfmain.brushloadfromfile.hint","sourcebytes":[76,111,97,100,32,98,114,117,115,104,32,102,114,111,109,32,102,105,108,101,46,46,46],"value":"Load brush from file..."},
-{"hash":15128104,"name":"tfmain.brushremovecurrent.hint","sourcebytes":[82,101,109,111,118,101,32,99,117,114,114,101,110,116,32,98,114,117,115,104],"value":"Remove current brush"},
-{"hash":74217360,"name":"tfmain.editmoveup.hint","sourcebytes":[77,111,118,101,32,117,112],"value":"Move up"},
-{"hash":141109012,"name":"tfmain.editmovetofront.hint","sourcebytes":[66,114,105,110,103,32,116,111,32,102,114,111,110,116],"value":"Bring to front"},
-{"hash":209126078,"name":"tfmain.editmovedown.hint","sourcebytes":[77,111,118,101,32,100,111,119,110],"value":"Move down"},
-{"hash":9093403,"name":"tfmain.editmovetoback.hint","sourcebytes":[83,101,110,100,32,116,111,32,98,97,99,107],"value":"Send to back"},
-{"hash":141965220,"name":"tfmain.editshapealignleft.hint","sourcebytes":[65,108,105,103,110,32,115,104,97,112,101,32,108,101,102,116],"value":"Align shape left"},
-{"hash":244832953,"name":"tfmain.editshapecenterhorizontally.hint","sourcebytes":[67,101,110,116,101,114,32,115,104,97,112,101,32,104,111,114,105,122,111,110,116,97,108,108,121],"value":"Center shape horizontally"},
-{"hash":122239604,"name":"tfmain.editshapealignright.hint","sourcebytes":[65,108,105,103,110,32,115,104,97,112,101,32,114,105,103,104,116],"value":"Align shape right"},
-{"hash":43235424,"name":"tfmain.editshapealigntop.hint","sourcebytes":[65,108,105,103,110,32,115,104,97,112,101,32,116,111,32,116,104,101,32,116,111,112],"value":"Align shape to the top"},
-{"hash":8451721,"name":"tfmain.editshapecentervertically.hint","sourcebytes":[67,101,110,116,101,114,32,115,104,97,112,101,32,118,101,114,116,105,99,97,108,108,121],"value":"Center shape vertically"},
-{"hash":174494829,"name":"tfmain.editshapealignbottom.hint","sourcebytes":[65,108,105,103,110,32,115,104,97,112,101,32,116,111,32,116,104,101,32,98,111,116,116,111,109],"value":"Align shape to the bottom"},
-{"hash":52527029,"name":"tfmain.editshapetocurve.hint","sourcebytes":[67,111,110,118,101,114,116,32,115,104,97,112,101,32,116,111,32,99,117,114,118,101],"value":"Convert shape to curve"},
-{"hash":46607102,"name":"tfmain.filerunscript.caption","sourcebytes":[82,117,110,32,115,99,114,105,112,116,46,46,46],"value":"Run script..."},
-{"hash":104868661,"name":"tfmain.toolpolyline.hint","sourcebytes":[80,111,108,121,108,105,110,101],"value":"Polyline"},
-{"hash":51121525,"name":"tfmain.toolopenedcurve.hint","sourcebytes":[79,112,101,110,101,100,32,99,117,114,118,101],"value":"Opened curve"},
-{"hash":124337662,"name":"tfmain.fileexport.caption","sourcebytes":[69,120,112,111,114,116,46,46,46],"value":"Export..."},
-{"hash":124337662,"name":"tfmain.layerexport.hint","sourcebytes":[69,120,112,111,114,116,46,46,46],"value":"Export..."},
-{"hash":164762421,"name":"tfmain.filequicksave.caption","sourcebytes":[81,117,105,99,107,32,115,97,118,101],"value":"Quick save"},
-{"hash":215358547,"name":"tfmain.filequicksave.hint","sourcebytes":[83,97,118,101,32,99,117,114,114,101,110,116,32,102,105,108,101,32,119,105,116,104,111,117,116,32,100,105,97,108,111,103,115],"value":"Save current file without dialogs"},
-{"hash":66536946,"name":"tfmain.colordialog1.title","sourcebytes":[67,104,111,111,115,101,32,99,111,108,111,114],"value":"Choose color"},
-{"hash":315429,"name":"tfmain.menufile.caption","sourcebytes":[70,105,108,101],"value":"File"},
-{"hash":167619026,"name":"tfmain.itemuseimagebrowser.caption","sourcebytes":[85,115,101,32,105,109,97,103,101,32,98,114,111,119,115,101,114],"value":"Use image browser"},
-{"hash":65502867,"name":"tfmain.menurecentfiles.caption","sourcebytes":[82,101,99,101,110,116,32,102,105,108,101,115],"value":"Recent files"},
-{"hash":139375349,"name":"tfmain.menulanguage.caption","sourcebytes":[76,97,110,103,117,97,103,101],"value":"Language"},
-{"hash":76172398,"name":"tfmain.itemdonate.caption","sourcebytes":[68,111,110,97,116,101,46,46,46],"value":"Donate..."},
-{"hash":310020,"name":"tfmain.menuedit.caption","sourcebytes":[69,100,105,116],"value":"Edit"},
-{"hash":94120868,"name":"tfmain.menuselect.caption","sourcebytes":[83,101,108,101,99,116],"value":"Select"},
-{"hash":380871,"name":"tfmain.menuview.caption","sourcebytes":[86,105,101,119],"value":"View"},
-{"hash":267499032,"name":"tfmain.itemviewdocktoolbox.caption","sourcebytes":[68,111,99,107,32,116,111,111,108,98,111,120],"value":"Dock toolbox"},
-{"hash":46565539,"name":"tfmain.itemdocklayersandcolors.caption","sourcebytes":[68,111,99,107,32,108,97,121,101,114,115,32,97,110,100,32,99,111,108,111,114,115],"value":"Dock layers and colors"},
-{"hash":60708750,"name":"tfmain.itemfullscreen.caption","sourcebytes":[70,117,108,108,115,99,114,101,101,110],"value":"Fullscreen"},
-{"hash":5257173,"name":"tfmain.menuimage.caption","sourcebytes":[73,109,97,103,101],"value":"Image"},
-{"hash":167030057,"name":"tfmain.menuremovetransparency.caption","sourcebytes":[82,101,109,111,118,101,32,116,114,97,110,115,112,97,114,101,110,99,121],"value":"Remove transparency"},
-{"hash":78001811,"name":"tfmain.menucolors.caption","sourcebytes":[67,111,108,111,114,115],"value":"Colors"},
-{"hash":5989939,"name":"tfmain.menutool.caption","sourcebytes":[84,111,111,108,115],"value":"Tools"},
-{"hash":80755394,"name":"tfmain.menufilter.caption","sourcebytes":[70,105,108,116,101,114],"value":"Filter"},
-{"hash":129960242,"name":"tfmain.menuradialblur.caption","sourcebytes":[82,97,100,105,97,108,32,98,108,117,114],"value":"Radial blur"},
-{"hash":93080258,"name":"tfmain.menurender.caption","sourcebytes":[82,101,110,100,101,114],"value":"Render"},
-{"hash":94015604,"name":"tfmain.menuscript.caption","sourcebytes":[83,99,114,105,112,116],"value":"Script"},
-{"hash":322608,"name":"tfmain.menuhelp.caption","sourcebytes":[72,101,108,112],"value":"Help"},
-{"hash":130864334,"name":"tfmain.loadselectiondialog.title","sourcebytes":[76,111,97,100,32,115,101,108,101,99,116,105,111,110],"value":"Load selection"},
-{"hash":695557,"name":"tfmain.openpicturedialog1.title","sourcebytes":[79,112,101,110,32,101,120,105,115,116,105,110,103,32,105,109,97,103,101],"value":"Open existing image"},
-{"hash":262765813,"name":"tfmain.opentexturedialog.title","sourcebytes":[79,112,101,110,32,116,101,120,116,117,114,101],"value":"Open texture"},
-{"hash":30161076,"name":"tfmain.open3dobjectdialog.title","sourcebytes":[73,109,112,111,114,116,32,51,68,32,111,98,106,101,99,116],"value":"Import 3D object"},
-{"hash":186570926,"name":"tfmain.savepicturedialog1.title","sourcebytes":[83,97,118,101,32,102,105,108,101,32,97,115,46,46,46],"value":"Save file as..."},
-{"hash":169186686,"name":"tfmain.saveselectiondialog.title","sourcebytes":[83,97,118,101,32,115,101,108,101,99,116,105,111,110,32,97,115,46,46,46],"value":"Save selection as..."},
-{"hash":7141976,"name":"tfmain.openbrushdialog.title","sourcebytes":[79,112,101,110,32,98,114,117,115,104],"value":"Open brush"},
-{"hash":231995746,"name":"tfmain.menufiletoolbar.caption","sourcebytes":[83,104,111,119,32,102,105,108,101,32,116,111,111,108,98,97,114],"value":"Show file toolbar"},
-{"hash":55148898,"name":"tfmain.menuzoomtoolbar.caption","sourcebytes":[83,104,111,119,32,122,111,111,109,32,116,111,111,108,98,97,114],"value":"Show zoom toolbar"},
-{"hash":185663746,"name":"tfmain.menucopypastetoolbar.caption","sourcebytes":[83,104,111,119,32,99,111,112,121,47,112,97,115,116,101,32,116,111,111,108,98,97,114],"value":"Show copy/paste toolbar"},
-{"hash":61428515,"name":"tfmain.menucoordinatestoolbar.caption","sourcebytes":[83,104,111,119,32,99,111,111,114,100,105,110,97,116,101,115],"value":"Show coordinates"},
-{"hash":112373618,"name":"tfmain.menuundoredotoolbar.caption","sourcebytes":[83,104,111,119,32,117,110,100,111,47,114,101,100,111,32,116,111,111,108,98,97,114],"value":"Show undo/redo toolbar"},
-{"hash":66953941,"name":"tfmain.menushowpalette.caption","sourcebytes":[83,104,111,119,32,112,97,108,101,116,116,101],"value":"Show palette"},
-{"hash":165109892,"name":"tfmain.menudocktoolboxleft.caption","sourcebytes":[68,111,99,107,32,108,101,102,116],"value":"Dock left"},
-{"hash":226248804,"name":"tfmain.menudocktoolboxright.caption","sourcebytes":[68,111,99,107,32,114,105,103,104,116],"value":"Dock right"},
-{"hash":96777627,"name":"tfmain.menuundocktoolbox.caption","sourcebytes":[85,110,100,111,99,107],"value":"Undock"},
-{"hash":44513182,"name":"tfmain.exportpicturedialog.title","sourcebytes":[69,120,112,111,114,116,32,97,115,46,46,46],"value":"Export as..."}
-]}
+{"version":1,"strings":[
+{"hash":150371188,"name":"tfmain.caption","sourcebytes":[76,97,122,80,97,105,110,116],"value":"LazPaint"},
+{"hash":44380332,"name":"tfmain.image_currenttool.hint","sourcebytes":[83,101,108,101,99,116,101,100,32,116,111,111,108],"value":"Selected tool"},
+{"hash":30191261,"name":"tfmain.label_currentzoom.hint","sourcebytes":[67,117,114,114,101,110,116,32,122,111,111,109],"value":"Current zoom"},
+{"hash":37,"name":"tfmain.label_currentzoom.caption","sourcebytes":[37],"value":"%"},
+{"hash":176868709,"name":"tfmain.label_currentdiff.hint","sourcebytes":[67,111,108,111,114,32,100,105,102,102,101,114,101,110,99,101],"value":"Color difference"},
+{"hash":213797,"name":"tfmain.label_currentdiff.caption","sourcebytes":[49,48,48,37],"value":"100%"},
+{"hash":6159272,"name":"tfmain.label_penwidth.caption","sourcebytes":[87,105,100,116,104],"value":"Width"},
+{"hash":8236392,"name":"tfmain.spinedit_penwidth.hint","sourcebytes":[80,101,110,32,119,105,100,116,104],"value":"Pen width"},
+{"hash":5015701,"name":"tfmain.label_eraser.caption","sourcebytes":[69,114,97,115,101],"value":"Erase"},
+{"hash":219565076,"name":"tfmain.tool_erasealpha.hint","sourcebytes":[77,97,107,101,32,116,114,97,110,115,112,97,114,101,110,116],"value":"Make transparent"},
+{"hash":94755518,"name":"tfmain.tool_eraseblur.hint","sourcebytes":[83,111,102,116,101,110],"value":"Soften"},
+{"hash":50199278,"name":"tfmain.tool_eraselighten.hint","sourcebytes":[76,105,103,104,116,101,110],"value":"Lighten"},
+{"hash":78156222,"name":"tfmain.tool_erasedarken.hint","sourcebytes":[68,97,114,107,101,110],"value":"Darken"},
+{"hash":166237934,"name":"tfmain.tool_erasesharpen.hint","sourcebytes":[83,104,97,114,112,101,110],"value":"Sharpen"},
+{"hash":250503177,"name":"tfmain.spinedit_eraser.hint","sourcebytes":[69,114,97,115,101,114,32,111,112,97,99,105,116,121],"value":"Eraser opacity"},
+{"hash":46678005,"name":"tfmain.label_tolerance.caption","sourcebytes":[84,111,108,101,114,97,110,99,101],"value":"Tolerance"},
+{"hash":24460908,"name":"tfmain.tool_progressivefloodfill.hint","sourcebytes":[80,114,111,103,114,101,115,115,105,118,101,32,102,108,111,111,100,102,105,108,108],"value":"Progressive floodfill"},
+{"hash":24460908,"name":"tfmain.tool_progressivefloodfill.caption","sourcebytes":[80,114,111,103,114,101,115,115,105,118,101,32,102,108,111,111,100,102,105,108,108],"value":"Progressive floodfill"},
+{"hash":115147346,"name":"tfmain.tool_drawshapeborder.hint","sourcebytes":[68,114,97,119,32,98,111,114,100,101,114],"value":"Draw border"},
+{"hash":243087429,"name":"tfmain.tool_fillshape.hint","sourcebytes":[70,105,108,108,32,115,104,97,112,101],"value":"Fill shape"},
+{"hash":181333059,"name":"tfmain.label_coordinates.hint","sourcebytes":[67,111,111,114,100,105,110,97,116,101,115],"value":"Coordinates"},
+{"hash":218886153,"name":"tfmain.label_coordinates.caption","sourcebytes":[57,57,57,57,120,57,57,57,57],"value":"9999x9999"},
+{"hash":42364240,"name":"tfmain.tool_capflat.hint","sourcebytes":[70,108,97,116,32,99,97,112],"value":"Flat cap"},
+{"hash":205926624,"name":"tfmain.tool_capround.hint","sourcebytes":[82,111,117,110,100,32,99,97,112],"value":"Round cap"},
+{"hash":142786864,"name":"tfmain.tool_capsquare.hint","sourcebytes":[83,113,117,97,114,101,32,99,97,112],"value":"Square cap"},
+{"hash":224157463,"name":"tfmain.spinedit_arrowsizex.hint","sourcebytes":[72,111,114,105,122,111,110,116,97,108,32,115,105,122,101,32,111,102,32,116,104,101,32,97,114,114,111,119],"value":"Horizontal size of the arrow"},
+{"hash":47574855,"name":"tfmain.spinedit_arrowsizey.hint","sourcebytes":[86,101,114,116,105,99,97,108,32,115,105,122,101,32,111,102,32,116,104,101,32,97,114,114,111,119],"value":"Vertical size of the arrow"},
+{"hash":65090695,"name":"tfmain.combobox_arrowstart.hint","sourcebytes":[83,116,97,114,116,105,110,103,32,97,114,114,111,119],"value":"Starting arrow"},
+{"hash":229386535,"name":"tfmain.combobox_arrowend.hint","sourcebytes":[69,110,100,105,110,103,32,97,114,114,111,119],"value":"Ending arrow"},
+{"hash":199465278,"name":"tfmain.tool_joinbevel.hint","sourcebytes":[66,101,118,101,108,32,106,111,105,110],"value":"Bevel join"},
+{"hash":73704254,"name":"tfmain.tool_joinround.hint","sourcebytes":[82,111,117,110,100,32,106,111,105,110],"value":"Round join"},
+{"hash":205804894,"name":"tfmain.tool_joinmiter.hint","sourcebytes":[77,105,116,101,114,32,106,111,105,110],"value":"Miter join"},
+{"hash":8055525,"name":"tfmain.combobox_penstyle.hint","sourcebytes":[80,101,110,32,115,116,121,108,101],"value":"Pen style"},
+{"hash":321780,"name":"tfmain.label_grid.caption","sourcebytes":[71,114,105,100],"value":"Grid"},
+{"hash":120,"name":"tfmain.label_gridx.caption","sourcebytes":[120],"value":"x"},
+{"hash":65314814,"name":"tfmain.tool_gridmovewithoutdeformation.hint","sourcebytes":[77,111,118,101,32,103,114,105,100,32,119,105,116,104,111,117,116,32,100,101,102,111,114,109,97,116,105,111,110],"value":"Move grid without deformation"},
+{"hash":4901317,"name":"tfmain.label_curve.caption","sourcebytes":[67,117,114,118,101],"value":"Curve"},
+{"hash":200334437,"name":"tfmain.tool_curvemodeangle.hint","sourcebytes":[68,114,97,119,32,97,110,32,97,110,103,108,101],"value":"Draw an angle"},
+{"hash":131219621,"name":"tfmain.tool_curvemodecurve.hint","sourcebytes":[68,114,97,119,32,97,32,99,117,114,118,101],"value":"Draw a curve"},
+{"hash":218543091,"name":"tfmain.tool_curvemodeauto.hint","sourcebytes":[65,117,116,111,100,101,116,101,99,116,32,97,110,103,108,101,115],"value":"Autodetect angles"},
+{"hash":125049492,"name":"tfmain.tool_curvemovepoint.hint","sourcebytes":[77,111,118,101,32,112,111,105,110,116],"value":"Move point"},
+{"hash":371956,"name":"tfmain.label_text.caption","sourcebytes":[84,101,120,116],"value":"Text"},
+{"hash":71566590,"name":"tfmain.tool_textfont.hint","sourcebytes":[67,104,111,111,115,101,32,102,111,110,116,46,46,46],"value":"Choose font..."},
+{"hash":180162887,"name":"tfmain.tool_textphong.hint","sourcebytes":[84,101,120,116,32,112,104,111,110,103,32,115,104,97,100,105,110,103],"value":"Text phong shading"},
+{"hash":235120932,"name":"tfmain.tool_textalignleft.hint","sourcebytes":[65,108,105,103,110,32,108,101,102,116],"value":"Align left"},
+{"hash":77355714,"name":"tfmain.tool_textaligncenter.hint","sourcebytes":[67,101,110,116,101,114],"value":"Center"},
+{"hash":3199508,"name":"tfmain.tool_textalignright.hint","sourcebytes":[65,108,105,103,110,32,114,105,103,104,116],"value":"Align right"},
+{"hash":258464709,"name":"tfmain.spinedit_textsize.hint","sourcebytes":[84,101,120,116,32,115,105,122,101],"value":"Text size"},
+{"hash":5892197,"name":"tfmain.label_shape.caption","sourcebytes":[83,104,97,112,101],"value":"Shape"},
+{"hash":76974786,"name":"tfmain.label_phongborder.caption","sourcebytes":[66,111,114,100,101,114],"value":"Border"},
+{"hash":178787989,"name":"tfmain.tool_phongshaperectangle.hint","sourcebytes":[82,101,99,116,97,110,103,108,101],"value":"Rectangle"},
+{"hash":4807381,"name":"tfmain.tool_phongshaperoundrect.hint","sourcebytes":[82,111,117,110,100,101,100,32,114,101,99,116,97,110,103,108,101],"value":"Rounded rectangle"},
+{"hash":94825605,"name":"tfmain.tool_phongshapesphere.hint","sourcebytes":[83,112,104,101,114,101],"value":"Sphere"},
+{"hash":304709,"name":"tfmain.tool_phongshapecone.hint","sourcebytes":[67,111,110,101],"value":"Cone"},
+{"hash":187648901,"name":"tfmain.tool_phongshapeverticalcone.hint","sourcebytes":[86,101,114,116,105,99,97,108,32,99,111,110,101],"value":"Vertical cone"},
+{"hash":115522882,"name":"tfmain.tool_phongshapehorizontalcylinder.hint","sourcebytes":[72,111,114,105,122,111,110,116,97,108,32,99,121,108,105,110,100,101,114],"value":"Horizontal cylinder"},
+{"hash":31811010,"name":"tfmain.tool_phongshapeverticalcylinder.hint","sourcebytes":[86,101,114,116,105,99,97,108,32,99,121,108,105,110,100,101,114],"value":"Vertical cylinder"},
+{"hash":202312101,"name":"tfmain.spinedit_phongbordersize.hint","sourcebytes":[66,111,114,100,101,114,32,115,105,122,101],"value":"Border size"},
+{"hash":61914917,"name":"tfmain.label_altitude.caption","sourcebytes":[65,108,116,105,116,117,100,101],"value":"Altitude"},
+{"hash":221694037,"name":"tfmain.spinedit_shapealtitude.hint","sourcebytes":[83,104,97,112,101,32,97,108,116,105,116,117,100,101],"value":"Shape altitude"},
+{"hash":6159272,"name":"tfmain.label_outlinewidth.caption","sourcebytes":[87,105,100,116,104],"value":"Width"},
+{"hash":57137717,"name":"tfmain.tool_textoutline.hint","sourcebytes":[84,101,120,116,32,111,117,116,108,105,110,101],"value":"Text outline"},
+{"hash":68821400,"name":"tfmain.spinedit_textoutlinewidth.hint","sourcebytes":[84,101,120,116,32,111,117,116,108,105,110,101,32,119,105,100,116,104],"value":"Text outline width"},
+{"hash":30209135,"name":"tfmain.perspective_twoplanes.hint","sourcebytes":[68,114,97,119,32,111,112,112,111,115,105,116,101,32,112,108,97,110,101,32,116,111,111],"value":"Draw opposite plane too"},
+{"hash":65297493,"name":"tfmain.perspective_repeat.hint","sourcebytes":[82,101,112,101,97,116,32,105,109,97,103,101],"value":"Repeat image"},
+{"hash":4824216,"name":"tfmain.label_brush.caption","sourcebytes":[66,114,117,115,104],"value":"Brush"},
+{"hash":174563351,"name":"tfmain.label_spacing.caption","sourcebytes":[83,112,97,99,105,110,103],"value":"Spacing"},
+{"hash":70662787,"name":"tfmain.spinedit_brushspacing.hint","sourcebytes":[83,112,97,99,105,110,103,32,98,101,116,119,101,101,110,32,112,97,116,116,101,114,110,115],"value":"Spacing between patterns"},
+{"hash":5802751,"name":"tfmain.label_ratio.caption","sourcebytes":[82,97,116,105,111],"value":"Ratio"},
+{"hash":67807111,"name":"tfmain.tool_aliasing.hint","sourcebytes":[68,105,115,97,98,108,101,32,97,110,116,105,97,108,105,97,115,105,110,103],"value":"Disable antialiasing"},
+{"hash":120839925,"name":"tfmain.tool_closeshape.hint","sourcebytes":[67,108,111,115,101,32,115,104,97,112,101],"value":"Close shape"},
+{"hash":130332167,"name":"tfmain.tool_textshadow.hint","sourcebytes":[84,101,120,116,32,115,104,97,100,111,119],"value":"Text shadow"},
+{"hash":299970,"name":"tfmain.label_textblur.caption","sourcebytes":[66,108,117,114],"value":"Blur"},
+{"hash":114259058,"name":"tfmain.spinedit_textblur.hint","sourcebytes":[83,104,97,100,111,119,32,98,108,117,114],"value":"Shadow blur"},
+{"hash":89971140,"name":"tfmain.label_shadowoffset.caption","sourcebytes":[79,102,102,115,101,116],"value":"Offset"},
+{"hash":236421172,"name":"tfmain.spinedit_textshadowx.hint","sourcebytes":[72,111,114,105,122,111,110,116,97,108,32,115,104,97,100,111,119,32,111,102,102,115,101,116],"value":"Horizontal shadow offset"},
+{"hash":105381300,"name":"tfmain.spinedit_textshadowy.hint","sourcebytes":[86,101,114,116,105,99,97,108,32,115,104,97,100,111,119,32,111,102,102,115,101,116],"value":"Vertical shadow offset"},
+{"hash":22206,"name":"tfmain.label_pen.caption","sourcebytes":[80,101,110],"value":"Pen"},
+{"hash":264792562,"name":"tfmain.image_swapcolors.hint","sourcebytes":[83,119,105,116,99,104,32,99,111,108,111,114],"value":"Switch color"},
+{"hash":296859,"name":"tfmain.label_back.caption","sourcebytes":[66,97,99,107],"value":"Back"},
+{"hash":76172398,"name":"tfmain.button_donate.caption","sourcebytes":[68,111,110,97,116,101,46,46,46],"value":"Donate..."},
+{"hash":300580,"name":"tfmain.tool_textbold.hint","sourcebytes":[66,111,108,100],"value":"Bold"},
+{"hash":84574963,"name":"tfmain.tool_textitalic.hint","sourcebytes":[73,116,97,108,105,99],"value":"Italic"},
+{"hash":180974597,"name":"tfmain.tool_textunderline.hint","sourcebytes":[85,110,100,101,114,108,105,110,101],"value":"Underline"},
+{"hash":151125108,"name":"tfmain.tool_textstrikeout.hint","sourcebytes":[83,116,114,105,107,101,111,117,116],"value":"Strikeout"},
+{"hash":39152780,"name":"tfmain.tool_textbidirectional.hint","sourcebytes":[66,105,100,105,114,101,99,116,105,111,110,97,108],"value":"Bidirectional"},
+{"hash":63280628,"name":"tfmain.tool_textltr.hint","sourcebytes":[76,101,102,116,32,116,111,32,114,105,103,104,116],"value":"Left to right"},
+{"hash":65854964,"name":"tfmain.tool_textrtl.hint","sourcebytes":[82,105,103,104,116,32,116,111,32,108,101,102,116],"value":"Right to left"},
+{"hash":266351424,"name":"tfmain.tool_textaligntop.hint","sourcebytes":[65,108,105,103,110,32,116,111,112],"value":"Align top"},
+{"hash":116886537,"name":"tfmain.tool_textalignmiddle.hint","sourcebytes":[67,101,110,116,101,114,32,118,101,114,116,105,99,97,108,108,121],"value":"Center vertically"},
+{"hash":34882909,"name":"tfmain.tool_textalignbottom.hint","sourcebytes":[65,108,105,103,110,32,98,111,116,116,111,109],"value":"Align bottom"},
+{"hash":88908046,"name":"tfmain.filenew.caption","sourcebytes":[78,101,119,46,46,46],"value":"New..."},
+{"hash":111833829,"name":"tfmain.filenew.hint","sourcebytes":[67,114,101,97,116,101,32,97,32,110,101,119,32,102,105,108,101],"value":"Create a new file"},
+{"hash":107745630,"name":"tfmain.fileopen.caption","sourcebytes":[79,112,101,110,46,46,46],"value":"Open..."},
+{"hash":218146437,"name":"tfmain.fileopen.hint","sourcebytes":[79,112,101,110,32,101,120,105,115,116,105,110,103,32,102,105,108,101],"value":"Open existing file"},
+{"hash":23459486,"name":"tfmain.viewzoomin.hint","sourcebytes":[90,111,111,109,32,105,110],"value":"Zoom in"},
+{"hash":106918100,"name":"tfmain.viewzoomout.hint","sourcebytes":[90,111,111,109,32,111,117,116],"value":"Zoom out"},
+{"hash":251132352,"name":"tfmain.imagehorizontalflip.caption","sourcebytes":[72,111,114,105,122,111,110,116,97,108,32,102,108,105,112],"value":"Horizontal flip"},
+{"hash":107134297,"name":"tfmain.imagehorizontalflip.hint","sourcebytes":[70,108,105,112,32,105,109,97,103,101,32,104,111,114,105,122,111,110,116,97,108,108,121],"value":"Flip image horizontally"},
+{"hash":187662016,"name":"tfmain.imageverticalflip.caption","sourcebytes":[86,101,114,116,105,99,97,108,32,102,108,105,112],"value":"Vertical flip"},
+{"hash":128483817,"name":"tfmain.imageverticalflip.hint","sourcebytes":[70,108,105,112,32,105,109,97,103,101,32,118,101,114,116,105,99,97,108,108,121],"value":"Flip image vertically"},
+{"hash":72010382,"name":"tfmain.imageresample.caption","sourcebytes":[82,101,115,97,109,112,108,101,46,46,46],"value":"Resample..."},
+{"hash":200831861,"name":"tfmain.imageresample.hint","sourcebytes":[82,101,115,97,109,112,108,101,32,105,109,97,103,101],"value":"Resample image"},
+{"hash":192766339,"name":"tfmain.imagesmartzoom3.caption","sourcebytes":[83,109,97,114,116,32,122,111,111,109,32,120,51],"value":"Smart zoom x3"},
+{"hash":23626005,"name":"tfmain.viewzoomoriginal.caption","sourcebytes":[79,114,105,103,105,110,97,108,32,115,105,122,101],"value":"Original size"},
+{"hash":259531189,"name":"tfmain.viewzoomoriginal.hint","sourcebytes":[90,111,111,109,32,116,111,32,111,114,105,103,105,110,97,108,32,112,105,120,101,108,32,115,105,122,101],"value":"Zoom to original pixel size"},
+{"hash":378031,"name":"tfmain.editundo.caption","sourcebytes":[85,110,100,111],"value":"Undo"},
+{"hash":130699086,"name":"tfmain.editundo.hint","sourcebytes":[85,110,100,111,32,108,97,115,116,32,109,111,100,105,102,105,99,97,116,105,111,110],"value":"Undo last modification"},
+{"hash":363439,"name":"tfmain.editredo.hint","sourcebytes":[82,101,100,111],"value":"Redo"},
+{"hash":106916628,"name":"tfmain.viewzoomfit.caption","sourcebytes":[90,111,111,109,32,102,105,116],"value":"Zoom fit"},
+{"hash":131274455,"name":"tfmain.viewzoomfit.hint","sourcebytes":[90,111,111,109,32,116,111,32,102,105,116,32,105,110,32,116,104,101,32,119,105,110,100,111,119],"value":"Zoom to fit in the window"},
+{"hash":211562244,"name":"tfmain.editdeselect.hint","sourcebytes":[68,101,115,101,108,101,99,116],"value":"Deselect"},
+{"hash":237622494,"name":"tfmain.editinvertselection.hint","sourcebytes":[73,110,118,101,114,116,32,115,101,108,101,99,116,105,111,110],"value":"Invert selection"},
+{"hash":17148597,"name":"tfmain.toolselectrect.hint","sourcebytes":[83,101,108,101,99,116,32,114,101,99,116,97,110,103,108,101],"value":"Select rectangle"},
+{"hash":135963749,"name":"tfmain.toolselectellipse.hint","sourcebytes":[83,101,108,101,99,116,32,101,108,108,105,112,115,101],"value":"Select ellipse"},
+{"hash":193486782,"name":"tfmain.toolselectpoly.hint","sourcebytes":[83,101,108,101,99,116,32,112,111,108,121,103,111,110],"value":"Select polygon"},
+{"hash":66511461,"name":"tfmain.toolselectspline.hint","sourcebytes":[83,101,108,101,99,116,32,99,117,114,118,101],"value":"Select curve"},
+{"hash":75354974,"name":"tfmain.toolmoveselection.hint","sourcebytes":[77,111,118,101,32,115,101,108,101,99,116,105,111,110],"value":"Move selection"},
+{"hash":128109646,"name":"tfmain.toolselectpen.caption","sourcebytes":[83,101,108,101,99,116,105,111,110,32,112,101,110],"value":"Selection pen"},
+{"hash":228577870,"name":"tfmain.toolselectpen.hint","sourcebytes":[68,114,97,119,32,115,101,108,101,99,116,105,111,110,32,119,105,116,104,32,112,101,110],"value":"Draw selection with pen"},
+{"hash":304761,"name":"tfmain.editcopy.caption","sourcebytes":[67,111,112,121],"value":"Copy"},
+{"hash":79811454,"name":"tfmain.editcopy.hint","sourcebytes":[67,111,112,121,32,115,101,108,101,99,116,105,111,110],"value":"Copy selection"},
+{"hash":5671589,"name":"tfmain.editpaste.hint","sourcebytes":[80,97,115,116,101],"value":"Paste"},
+{"hash":19140,"name":"tfmain.editcut.caption","sourcebytes":[67,117,116],"value":"Cut"},
+{"hash":142399070,"name":"tfmain.editcut.hint","sourcebytes":[67,117,116,32,115,101,108,101,99,116,105,111,110],"value":"Cut selection"},
+{"hash":78392485,"name":"tfmain.editdeleteselection.caption","sourcebytes":[68,101,108,101,116,101],"value":"Delete"},
+{"hash":236551166,"name":"tfmain.editdeleteselection.hint","sourcebytes":[68,101,108,101,116,101,32,115,101,108,101,99,116,105,111,110],"value":"Delete selection"},
+{"hash":169361790,"name":"tfmain.toolrotateselection.hint","sourcebytes":[82,111,116,97,116,101,32,115,101,108,101,99,116,105,111,110],"value":"Rotate selection"},
+{"hash":195296268,"name":"tfmain.editselectall.caption","sourcebytes":[83,101,108,101,99,116,32,97,108,108],"value":"Select all"},
+{"hash":195296268,"name":"tfmain.editselectall.hint","sourcebytes":[83,101,108,101,99,116,32,97,108,108],"value":"Select all"},
+{"hash":191244600,"name":"tfmain.viewtoolbox.caption","sourcebytes":[84,111,111,108,98,111,120],"value":"Toolbox"},
+{"hash":78001811,"name":"tfmain.viewcolors.caption","sourcebytes":[67,111,108,111,114,115],"value":"Colors"},
+{"hash":88162814,"name":"tfmain.imagecrop.caption","sourcebytes":[67,114,111,112,32,116,111,32,115,101,108,101,99,116,105,111,110],"value":"Crop to selection"},
+{"hash":128112628,"name":"tfmain.editselectionfit.caption","sourcebytes":[83,101,108,101,99,116,105,111,110,32,102,105,116],"value":"Selection fit"},
+{"hash":73053668,"name":"tfmain.imageclearalpha.caption","sourcebytes":[67,108,101,97,114,32,97,108,112,104,97,32,99,104,97,110,110,101,108,32,97,110,100,32,115,101,116,32,98,97,99,107,103,114,111,117,110,100],"value":"Clear alpha channel and set background"},
+{"hash":32413959,"name":"tfmain.imagefillbackground.caption","sourcebytes":[70,105,108,108,32,98,97,99,107,103,114,111,117,110,100,32,119,105,116,104,32,97,110,116,105,97,108,105,97,115,105,110,103],"value":"Fill background with antialiasing"},
+{"hash":40698606,"name":"tfmain.imagechangecanvassize.caption","sourcebytes":[67,97,110,118,97,115,32,115,105,122,101,46,46,46],"value":"Canvas size..."},
+{"hash":174425639,"name":"tfmain.imagerotatecw.caption","sourcebytes":[82,111,116,97,116,101,32,57,48,194,176,32,67,87],"value":"Rotate 90\u00B0 CW"},
+{"hash":106458407,"name":"tfmain.imagerotateccw.caption","sourcebytes":[82,111,116,97,116,101,32,57,48,194,176,32,67,67,87],"value":"Rotate 90\u00B0 CCW"},
+{"hash":44176496,"name":"tfmain.imagerotate180.caption","sourcebytes":[82,111,116,97,116,101,32,49,56,48,194,176],"value":"Rotate 180\u00B0"},
+{"hash":219032926,"name":"tfmain.colorintensity.caption","sourcebytes":[73,110,116,101,110,115,105,116,121,46,46,46],"value":"Intensity..."},
+{"hash":102010462,"name":"tfmain.colorlightness.caption","sourcebytes":[66,114,105,103,104,116,110,101,115,115,32,47,32,67,111,110,116,114,97,115,116,46,46,46],"value":"Brightness / Contrast..."},
+{"hash":247427790,"name":"tfmain.colorshiftcolors.caption","sourcebytes":[83,104,105,102,116,32,99,111,108,111,114,115,46,46,46],"value":"Shift colors..."},
+{"hash":156902510,"name":"tfmain.colorcolorize.caption","sourcebytes":[67,111,108,111,114,105,122,101,46,46,46],"value":"Colorize..."},
+{"hash":78427662,"name":"tfmain.helpindex.caption","sourcebytes":[73,110,100,101,120,46,46,46],"value":"Index..."},
+{"hash":158102910,"name":"tfmain.helpabout.caption","sourcebytes":[65,98,111,117,116,46,46,46],"value":"About..."},
+{"hash":112740814,"name":"tfmain.imagerepeat.caption","sourcebytes":[82,101,112,101,97,116,46,46,46],"value":"Repeat..."},
+{"hash":257089940,"name":"tfmain.toolmagicwand.caption","sourcebytes":[77,97,103,105,99,32,119,97,110,100],"value":"Magic wand"},
+{"hash":45494836,"name":"tfmain.toolmagicwand.hint","sourcebytes":[77,97,103,105,99,32,119,97,110,100,32,115,101,108,101,99,116],"value":"Magic wand select"},
+{"hash":77818803,"name":"tfmain.renderclouds.caption","sourcebytes":[67,108,111,117,100,115],"value":"Clouds"},
+{"hash":240690499,"name":"tfmain.rendercustomwater.caption","sourcebytes":[87,97,116,101,114,32,119,105,116,104,32,99,117,115,116,111,109,32,99,111,108,111,114,115],"value":"Water with custom colors"},
+{"hash":85578645,"name":"tfmain.renderperlinnoise.caption","sourcebytes":[80,101,114,108,105,110,32,110,111,105,115,101],"value":"Perlin noise"},
+{"hash":261781,"name":"tfmain.rendercyclicperlinnoise.caption","sourcebytes":[67,121,99,108,105,99,32,80,101,114,108,105,110,32,110,111,105,115,101],"value":"Cyclic Perlin noise"},
+{"hash":386644,"name":"tfmain.renderwood.caption","sourcebytes":[87,111,111,100],"value":"Wood"},
+{"hash":120105643,"name":"tfmain.renderplastik.caption","sourcebytes":[80,108,97,115,116,105,107],"value":"Plastik"},
+{"hash":239140882,"name":"tfmain.rendermetalfloor.caption","sourcebytes":[77,101,116,97,108,32,102,108,111,111,114],"value":"Metal floor"},
+{"hash":112836501,"name":"tfmain.rendercamouflage.caption","sourcebytes":[67,97,109,111,117,102,108,97,103,101],"value":"Camouflage"},
+{"hash":158477108,"name":"tfmain.rendersnowprint.caption","sourcebytes":[83,110,111,119,32,112,114,105,110,116],"value":"Snow print"},
+{"hash":5944901,"name":"tfmain.renderstone.caption","sourcebytes":[83,116,111,110,101],"value":"Stone"},
+{"hash":103012869,"name":"tfmain.renderroundstone.caption","sourcebytes":[82,111,117,110,100,32,115,116,111,110,101],"value":"Round stone"},
+{"hash":87591205,"name":"tfmain.rendermarble.caption","sourcebytes":[77,97,114,98,108,101],"value":"Marble"},
+{"hash":6130370,"name":"tfmain.renderwater.caption","sourcebytes":[87,97,116,101,114],"value":"Water"},
+{"hash":187599764,"name":"tfmain.renderwoodvertical.caption","sourcebytes":[86,101,114,116,105,99,97,108,32,119,111,111,100],"value":"Vertical wood"},
+{"hash":137342309,"name":"tfmain.embeddedvalidate.caption","sourcebytes":[86,97,108,105,100,97,116,101],"value":"Validate"},
+{"hash":75331571,"name":"tfmain.embeddedvalidate.hint","sourcebytes":[86,97,108,105,100,97,116,101,32,109,111,100,105,102,105,99,97,116,105,111,110,115],"value":"Validate modifications"},
+{"hash":77089212,"name":"tfmain.embeddedcancel.caption","sourcebytes":[67,97,110,99,101,108],"value":"Cancel"},
+{"hash":93963171,"name":"tfmain.embeddedcancel.hint","sourcebytes":[67,97,110,99,101,108,32,109,111,100,105,102,105,99,97,116,105,111,110,115],"value":"Cancel modifications"},
+{"hash":321780,"name":"tfmain.viewgrid.caption","sourcebytes":[71,114,105,100],"value":"Grid"},
+{"hash":176417125,"name":"tfmain.editpasteasnew.caption","sourcebytes":[80,97,115,116,101,32,97,115,32,110,101,119,32,105,109,97,103,101],"value":"Paste as new image"},
+{"hash":221621454,"name":"tfmain.editselection.caption","sourcebytes":[69,100,105,116,32,115,101,108,101,99,116,105,111,110,46,46,46],"value":"Edit selection..."},
+{"hash":86572179,"name":"tfmain.viewlayerstack.caption","sourcebytes":[76,97,121,101,114,115],"value":"Layers"},
+{"hash":124848643,"name":"tfmain.viewlayerstackbutton.caption","sourcebytes":[83,104,111,119,32,108,97,121,101,114,115],"value":"Show layers"},
+{"hash":214344631,"name":"tfmain.viewlayerstackbutton.hint","sourcebytes":[83,104,111,119,32,111,114,32,104,105,100,101,32,108,97,121,101,114,32,115,116,97,99,107,32,119,105,110,100,111,119],"value":"Show or hide layer stack window"},
+{"hash":161226738,"name":"tfmain.imagecroplayer.caption","sourcebytes":[67,114,111,112,32,116,111,32,115,101,108,101,99,116,105,111,110,32,97,110,100,32,99,117,114,114,101,110,116,32,108,97,121,101,114],"value":"Crop to selection and current layer"},
+{"hash":97075273,"name":"tfmain.layerhorizontalflip.hint","sourcebytes":[70,108,105,112,32,108,97,121,101,114,32,104,111,114,105,122,111,110,116,97,108,108,121],"value":"Flip layer horizontally"},
+{"hash":110750825,"name":"tfmain.layerverticalflip.hint","sourcebytes":[70,108,105,112,32,108,97,121,101,114,32,118,101,114,116,105,99,97,108,108,121],"value":"Flip layer vertically"},
+{"hash":248838978,"name":"tfmain.layeraddnew.hint","sourcebytes":[65,100,100,32,110,101,119,32,108,97,121,101,114],"value":"Add new layer"},
+{"hash":50252034,"name":"tfmain.layerremovecurrent.hint","sourcebytes":[82,101,109,111,118,101,32,108,97,121,101,114],"value":"Remove layer"},
+{"hash":26157074,"name":"tfmain.layerduplicate.hint","sourcebytes":[68,117,112,108,105,99,97,116,101,32,115,101,108,101,99,116,101,100,32,108,97,121,101,114],"value":"Duplicate selected layer"},
+{"hash":20150450,"name":"tfmain.layermergeover.hint","sourcebytes":[77,101,114,103,101,32,108,97,121,101,114,32,111,118,101,114],"value":"Merge layer over"},
+{"hash":224054046,"name":"tfmain.layerfromfile.hint","sourcebytes":[73,109,112,111,114,116,32,108,97,121,101,114,32,102,114,111,109,32,102,105,108,101,46,46,46],"value":"Import layer from file..."},
+{"hash":125290754,"name":"tfmain.layermove.hint","sourcebytes":[77,111,118,101,32,108,97,121,101,114],"value":"Move layer"},
+{"hash":50603874,"name":"tfmain.layerrotate.hint","sourcebytes":[82,111,116,97,116,101,32,108,97,121,101,114],"value":"Rotate layer"},
+{"hash":222858453,"name":"tfmain.imageflatten.caption","sourcebytes":[70,108,97,116,116,101,110,32,105,109,97,103,101],"value":"Flatten image"},
+{"hash":93074804,"name":"tfmain.filereload.caption","sourcebytes":[82,101,108,111,97,100],"value":"Reload"},
+{"hash":366789,"name":"tfmain.filesave.caption","sourcebytes":[83,97,118,101],"value":"Save"},
+{"hash":60022005,"name":"tfmain.filesave.hint","sourcebytes":[83,97,118,101,32,99,117,114,114,101,110,116,32,102,105,108,101],"value":"Save current file"},
+{"hash":124639694,"name":"tfmain.filesaveas.caption","sourcebytes":[83,97,118,101,32,97,115,46,46,46],"value":"Save as..."},
+{"hash":159035875,"name":"tfmain.filesaveas.hint","sourcebytes":[83,97,118,101,32,102,105,108,101,32,97,115],"value":"Save file as"},
+{"hash":363524,"name":"tfmain.filequit.hint","sourcebytes":[81,117,105,116],"value":"Quit"},
+{"hash":169186686,"name":"tfmain.filesaveselectionas.caption","sourcebytes":[83,97,118,101,32,115,101,108,101,99,116,105,111,110,32,97,115,46,46,46],"value":"Save selection as..."},
+{"hash":223186382,"name":"tfmain.fileloadselection.caption","sourcebytes":[76,111,97,100,32,115,101,108,101,99,116,105,111,110,46,46,46],"value":"Load selection..."},
+{"hash":59477454,"name":"tfmain.fileimport3d.caption","sourcebytes":[73,109,112,111,114,116,32,51,68,32,111,98,106,101,99,116,46,46,46],"value":"Import 3D object..."},
+{"hash":164375502,"name":"tfmain.colorcurves.caption","sourcebytes":[67,117,114,118,101,115,46,46,46],"value":"Curves..."},
+{"hash":243723214,"name":"tfmain.colorposterize.caption","sourcebytes":[80,111,115,116,101,114,105,122,101,46,46,46],"value":"Posterize..."},
+{"hash":151352958,"name":"tfmain.fileprint.caption","sourcebytes":[80,114,105,110,116,46,46,46],"value":"Print..."},
+{"hash":225719252,"name":"tfmain.viewimagelist.caption","sourcebytes":[73,109,97,103,101,32,108,105,115,116],"value":"Image list"},
+{"hash":66110750,"name":"tfmain.filesaveasinsamefolder.caption","sourcebytes":[83,97,118,101,32,105,110,32,115,97,109,101,32,102,111,108,100,101,114,46,46,46],"value":"Save in same folder..."},
+{"hash":178213234,"name":"tfmain.editpasteasnewlayer.caption","sourcebytes":[80,97,115,116,101,32,97,115,32,110,101,119,32,108,97,121,101,114],"value":"Paste as new layer"},
+{"hash":158677870,"name":"tfmain.filterblurbox.caption","sourcebytes":[66,111,120,32,98,108,117,114,46,46,46],"value":"Box blur..."},
+{"hash":234157934,"name":"tfmain.filterblurfast.caption","sourcebytes":[70,97,115,116,32,98,108,117,114,46,46,46],"value":"Fast blur..."},
+{"hash":61344174,"name":"tfmain.filterblurradial.caption","sourcebytes":[71,97,117,115,115,105,97,110,32,98,108,117,114,46,46,46],"value":"Gaussian blur..."},
+{"hash":262805710,"name":"tfmain.filterblurcorona.caption","sourcebytes":[67,111,114,111,110,97,32,98,108,117,114,46,46,46],"value":"Corona blur..."},
+{"hash":227339886,"name":"tfmain.filterblurdisk.caption","sourcebytes":[68,105,115,107,32,98,108,117,114,46,46,46],"value":"Disk blur..."},
+{"hash":77369838,"name":"tfmain.filterblurprecise.caption","sourcebytes":[80,114,101,99,105,115,101,32,98,108,117,114,46,46,46],"value":"Precise blur..."},
+{"hash":260847150,"name":"tfmain.filterblurmotion.caption","sourcebytes":[77,111,116,105,111,110,32,98,108,117,114,46,46,46],"value":"Motion blur..."},
+{"hash":93793486,"name":"tfmain.filterblurcustom.caption","sourcebytes":[67,117,115,116,111,109,32,98,108,117,114,46,46,46],"value":"Custom blur..."},
+{"hash":158314382,"name":"tfmain.filtersharpen.caption","sourcebytes":[83,104,97,114,112,101,110,46,46,46],"value":"Sharpen..."},
+{"hash":94660264,"name":"tfmain.filtersmooth.caption","sourcebytes":[83,109,111,111,116,104],"value":"Smooth"},
+{"hash":87797630,"name":"tfmain.filtermedian.caption","sourcebytes":[77,101,100,105,97,110],"value":"Median"},
+{"hash":157953342,"name":"tfmain.filteremboss.caption","sourcebytes":[69,109,98,111,115,115,46,46,46],"value":"Emboss..."},
+{"hash":154699365,"name":"tfmain.filternormalize.caption","sourcebytes":[78,111,114,109,97,108,105,122,101],"value":"Normalize"},
+{"hash":198751621,"name":"tfmain.filternegative.caption","sourcebytes":[78,101,103,97,116,105,118,101],"value":"Negative"},
+{"hash":151640741,"name":"tfmain.filtergrayscale.caption","sourcebytes":[71,114,97,121,115,99,97,108,101],"value":"Grayscale"},
+{"hash":174438018,"name":"tfmain.filtercontour.caption","sourcebytes":[67,111,110,116,111,117,114],"value":"Contour"},
+{"hash":94825605,"name":"tfmain.filtersphere.caption","sourcebytes":[83,112,104,101,114,101],"value":"Sphere"},
+{"hash":3165810,"name":"tfmain.filtercylinder.caption","sourcebytes":[67,121,108,105,110,100,101,114],"value":"Cylinder"},
+{"hash":258000517,"name":"tfmain.filterlinearnegative.caption","sourcebytes":[76,105,110,101,97,114,32,110,101,103,97,116,105,118,101],"value":"Linear negative"},
+{"hash":126661353,"name":"tfmain.filterplane.caption","sourcebytes":[80,108,97,110,101,32,40,115,108,111,119,41],"value":"Plane (slow)"},
+{"hash":235468478,"name":"tfmain.filtertwirl.caption","sourcebytes":[84,119,105,114,108,46,46,46],"value":"Twirl..."},
+{"hash":48074702,"name":"tfmain.filterpixelate.caption","sourcebytes":[80,105,120,101,108,97,116,101,46,46,46],"value":"Pixelate..."},
+{"hash":193464901,"name":"tfmain.filtercleartype.caption","sourcebytes":[67,108,101,97,114,84,121,112,101],"value":"ClearType"},
+{"hash":37795461,"name":"tfmain.filtercleartypeinverse.caption","sourcebytes":[73,110,118,101,114,115,101,32,67,108,101,97,114,84,121,112,101],"value":"Inverse ClearType"},
+{"hash":14654542,"name":"tfmain.filterphong.caption","sourcebytes":[83,104,97,100,101,100,32,109,97,112,46,46,46],"value":"Shaded map..."},
+{"hash":31581342,"name":"tfmain.filterfunction.caption","sourcebytes":[65,112,112,108,121,32,102,117,110,99,116,105,111,110,46,46,46],"value":"Apply function..."},
+{"hash":144289715,"name":"tfmain.filtercomplementarycolor.caption","sourcebytes":[67,111,109,112,108,101,109,101,110,116,97,114,121,32,99,111,108,111,114,115],"value":"Complementary colors"},
+{"hash":54233774,"name":"tfmain.filternoise.caption","sourcebytes":[78,111,105,115,101,32,102,105,108,116,101,114,46,46,46],"value":"Noise filter..."},
+{"hash":142610782,"name":"tfmain.filterrain.caption","sourcebytes":[82,97,105,110,46,46,46],"value":"Rain..."},
+{"hash":197181954,"name":"tfmain.viewstatusbar.caption","sourcebytes":[83,116,97,116,117,115,32,98,97,114],"value":"Status bar"},
+{"hash":109235189,"name":"tfmain.viewpalette.caption","sourcebytes":[80,97,108,101,116,116,101],"value":"Palette"},
+{"hash":167619026,"name":"tfmain.fileuseimagebrowser.caption","sourcebytes":[85,115,101,32,105,109,97,103,101,32,98,114,111,119,115,101,114],"value":"Use image browser"},
+{"hash":64004190,"name":"tfmain.filechooseentry.caption","sourcebytes":[67,104,111,111,115,101,32,101,110,116,114,121,46,46,46],"value":"Choose entry..."},
+{"hash":143653317,"name":"tfmain.filechooseentry.hint","sourcebytes":[67,104,111,111,115,101,32,101,110,116,114,121,32,119,105,116,104,105,110,32,102,105,108,101],"value":"Choose entry within file"},
+{"hash":116001155,"name":"tfmain.forgetdialoganswers.caption","sourcebytes":[70,111,114,103,101,116,32,100,105,97,108,111,103,32,98,111,120,32,97,110,115,119,101,114,115],"value":"Forget dialog box answers"},
+{"hash":224505747,"name":"tfmain.forgetdialoganswers.hint","sourcebytes":[70,111,114,103,101,116,32,97,110,115,119,101,114,115,32,103,105,118,101,110,32,116,111,32,100,105,97,108,111,103,32,98,111,120,101,115],"value":"Forget answers given to dialog boxes"},
+{"hash":198751621,"name":"tfmain.imagenegative.caption","sourcebytes":[78,101,103,97,116,105,118,101],"value":"Negative"},
+{"hash":258000517,"name":"tfmain.imagelinearnegative.caption","sourcebytes":[76,105,110,101,97,114,32,110,101,103,97,116,105,118,101],"value":"Linear negative"},
+{"hash":179963859,"name":"tfmain.imageswapredblue.caption","sourcebytes":[83,119,97,112,32,114,101,100,32,97,110,100,32,98,108,117,101,32,99,104,97,110,110,101,108,115],"value":"Swap red and blue channels"},
+{"hash":259299730,"name":"tfmain.layerzoom.hint","sourcebytes":[90,111,111,109,32,108,97,121,101,114],"value":"Zoom layer"},
+{"hash":153208601,"name":"tfmain.selectionhorizontalflip.hint","sourcebytes":[70,108,105,112,32,115,101,108,101,99,116,105,111,110,32,104,111,114,105,122,111,110,116,97,108,108,121],"value":"Flip selection horizontally"},
+{"hash":166020249,"name":"tfmain.selectionverticalflip.hint","sourcebytes":[70,108,105,112,32,115,101,108,101,99,116,105,111,110,32,118,101,114,116,105,99,97,108,108,121],"value":"Flip selection vertically"},
+{"hash":244531892,"name":"tfmain.fileremembersaveformat.hint","sourcebytes":[82,101,109,101,109,98,101,114,32,115,97,118,101,32,102,111,114,109,97,116],"value":"Remember save format"},
+{"hash":232678978,"name":"tfmain.layerrasterize.hint","sourcebytes":[82,97,115,116,101,114,105,122,101,32,108,97,121,101,114],"value":"Rasterize layer"},
+{"hash":97266030,"name":"tfmain.viewworkspacecolor.caption","sourcebytes":[83,101,116,32,119,111,114,107,115,112,97,99,101,32,99,111,108,111,114,46,46,46],"value":"Set workspace color..."},
+{"hash":226378933,"name":"tfmain.viewdarktheme.caption","sourcebytes":[68,97,114,107,32,116,104,101,109,101],"value":"Dark theme"},
+{"hash":17857150,"name":"tfmain.filterwavedisplacement.caption","sourcebytes":[87,97,118,101,32,100,105,115,112,108,97,99,101,109,101,110,116,46,46,46],"value":"Wave displacement..."},
+{"hash":321604,"name":"tfmain.toolhand.caption","sourcebytes":[72,97,110,100],"value":"Hand"},
+{"hash":171743509,"name":"tfmain.toolhand.hint","sourcebytes":[77,111,118,101,32,97,110,100,32,115,99,114,111,108,108,32,112,105,99,116,117,114,101],"value":"Move and scroll picture"},
+{"hash":107455380,"name":"tfmain.toolhotspot.caption","sourcebytes":[72,111,116,32,115,112,111,116],"value":"Hot spot"},
+{"hash":14124562,"name":"tfmain.toolhotspot.hint","sourcebytes":[67,104,111,111,115,101,32,104,111,116,32,115,112,111,116,32,111,102,32,97,32,99,117,114,115,111,114],"value":"Choose hot spot of a cursor"},
+{"hash":63551362,"name":"tfmain.toolcolorpicker.hint","sourcebytes":[67,111,108,111,114,32,112,105,99,107,101,114],"value":"Color picker"},
+{"hash":22206,"name":"tfmain.toolpen.caption","sourcebytes":[80,101,110],"value":"Pen"},
+{"hash":119723774,"name":"tfmain.toolpen.hint","sourcebytes":[83,105,109,112,108,101,32,112,101,110],"value":"Simple pen"},
+{"hash":4824216,"name":"tfmain.toolbrush.hint","sourcebytes":[66,114,117,115,104],"value":"Brush"},
+{"hash":80251330,"name":"tfmain.tooleraser.hint","sourcebytes":[69,114,97,115,101,114],"value":"Eraser"},
+{"hash":106595100,"name":"tfmain.toolfloodfill.hint","sourcebytes":[70,108,111,111,100,102,105,108,108],"value":"Floodfill"},
+{"hash":74651452,"name":"tfmain.toolclone.hint","sourcebytes":[67,108,111,110,101,32,116,111,111,108],"value":"Clone tool"},
+{"hash":108876645,"name":"tfmain.tooleditshape.hint","sourcebytes":[69,100,105,116,32,115,104,97,112,101],"value":"Edit shape"},
+{"hash":178787989,"name":"tfmain.toolrect.hint","sourcebytes":[82,101,99,116,97,110,103,108,101],"value":"Rectangle"},
+{"hash":204670933,"name":"tfmain.toolellipse.hint","sourcebytes":[69,108,108,105,112,115,101],"value":"Ellipse"},
+{"hash":123993614,"name":"tfmain.toolpolygon.caption","sourcebytes":[80,111,108,121,103,111,110],"value":"Polygon"},
+{"hash":53188549,"name":"tfmain.toolpolygon.hint","sourcebytes":[80,111,108,121,103,111,110,32,111,114,32,112,111,108,121,108,105,110,101],"value":"Polygon or polyline"},
+{"hash":4901317,"name":"tfmain.toolspline.caption","sourcebytes":[67,117,114,118,101],"value":"Curve"},
+{"hash":4901317,"name":"tfmain.toolspline.hint","sourcebytes":[67,117,114,118,101],"value":"Curve"},
+{"hash":142278836,"name":"tfmain.toolgradient.caption","sourcebytes":[71,114,97,100,105,101,110,116],"value":"Gradient"},
+{"hash":215410292,"name":"tfmain.toolgradient.hint","sourcebytes":[82,101,110,100,101,114,32,103,114,97,100,105,101,110,116],"value":"Render gradient"},
+{"hash":65508053,"name":"tfmain.toolphong.hint","sourcebytes":[83,104,97,100,101,100,32,115,104,97,112,101],"value":"Shaded shape"},
+{"hash":371956,"name":"tfmain.tooltext.hint","sourcebytes":[84,101,120,116],"value":"Text"},
+{"hash":158470974,"name":"tfmain.tooldeformation.caption","sourcebytes":[68,101,102,111,114,109,97,116,105,111,110],"value":"Deformation"},
+{"hash":76663236,"name":"tfmain.tooldeformation.hint","sourcebytes":[68,101,102,111,114,109,97,116,105,111,110,32,103,114,105,100],"value":"Deformation grid"},
+{"hash":205239287,"name":"tfmain.tooltexturemapping.hint","sourcebytes":[84,101,120,116,117,114,101,32,109,97,112,112,105,110,103],"value":"Texture mapping"},
+{"hash":43972261,"name":"tfmain.toollayermapping.hint","sourcebytes":[76,97,121,101,114,32,112,101,114,115,112,101,99,116,105,118,101],"value":"Layer perspective"},
+{"hash":98487735,"name":"tfmain.toolchangedocking.hint","sourcebytes":[67,104,97,110,103,101,32,100,111,99,107,105,110,103],"value":"Change docking"},
+{"hash":200728952,"name":"tfmain.brushcreategeometric.hint","sourcebytes":[67,114,101,97,116,101,32,103,101,111,109,101,116,114,105,99,32,98,114,117,115,104],"value":"Create geometric brush"},
+{"hash":217170606,"name":"tfmain.brushloadfromfile.hint","sourcebytes":[76,111,97,100,32,98,114,117,115,104,32,102,114,111,109,32,102,105,108,101,46,46,46],"value":"Load brush from file..."},
+{"hash":15128104,"name":"tfmain.brushremovecurrent.hint","sourcebytes":[82,101,109,111,118,101,32,99,117,114,114,101,110,116,32,98,114,117,115,104],"value":"Remove current brush"},
+{"hash":74217360,"name":"tfmain.editmoveup.hint","sourcebytes":[77,111,118,101,32,117,112],"value":"Move up"},
+{"hash":141109012,"name":"tfmain.editmovetofront.hint","sourcebytes":[66,114,105,110,103,32,116,111,32,102,114,111,110,116],"value":"Bring to front"},
+{"hash":209126078,"name":"tfmain.editmovedown.hint","sourcebytes":[77,111,118,101,32,100,111,119,110],"value":"Move down"},
+{"hash":9093403,"name":"tfmain.editmovetoback.hint","sourcebytes":[83,101,110,100,32,116,111,32,98,97,99,107],"value":"Send to back"},
+{"hash":141965220,"name":"tfmain.editshapealignleft.hint","sourcebytes":[65,108,105,103,110,32,115,104,97,112,101,32,108,101,102,116],"value":"Align shape left"},
+{"hash":244832953,"name":"tfmain.editshapecenterhorizontally.hint","sourcebytes":[67,101,110,116,101,114,32,115,104,97,112,101,32,104,111,114,105,122,111,110,116,97,108,108,121],"value":"Center shape horizontally"},
+{"hash":122239604,"name":"tfmain.editshapealignright.hint","sourcebytes":[65,108,105,103,110,32,115,104,97,112,101,32,114,105,103,104,116],"value":"Align shape right"},
+{"hash":43235424,"name":"tfmain.editshapealigntop.hint","sourcebytes":[65,108,105,103,110,32,115,104,97,112,101,32,116,111,32,116,104,101,32,116,111,112],"value":"Align shape to the top"},
+{"hash":8451721,"name":"tfmain.editshapecentervertically.hint","sourcebytes":[67,101,110,116,101,114,32,115,104,97,112,101,32,118,101,114,116,105,99,97,108,108,121],"value":"Center shape vertically"},
+{"hash":174494829,"name":"tfmain.editshapealignbottom.hint","sourcebytes":[65,108,105,103,110,32,115,104,97,112,101,32,116,111,32,116,104,101,32,98,111,116,116,111,109],"value":"Align shape to the bottom"},
+{"hash":52527029,"name":"tfmain.editshapetocurve.hint","sourcebytes":[67,111,110,118,101,114,116,32,115,104,97,112,101,32,116,111,32,99,117,114,118,101],"value":"Convert shape to curve"},
+{"hash":46607102,"name":"tfmain.filerunscript.caption","sourcebytes":[82,117,110,32,115,99,114,105,112,116,46,46,46],"value":"Run script..."},
+{"hash":104868661,"name":"tfmain.toolpolyline.hint","sourcebytes":[80,111,108,121,108,105,110,101],"value":"Polyline"},
+{"hash":51121525,"name":"tfmain.toolopenedcurve.hint","sourcebytes":[79,112,101,110,101,100,32,99,117,114,118,101],"value":"Opened curve"},
+{"hash":124337662,"name":"tfmain.fileexport.caption","sourcebytes":[69,120,112,111,114,116,46,46,46],"value":"Export..."},
+{"hash":124337662,"name":"tfmain.layerexport.hint","sourcebytes":[69,120,112,111,114,116,46,46,46],"value":"Export..."},
+{"hash":164762421,"name":"tfmain.filequicksave.caption","sourcebytes":[81,117,105,99,107,32,115,97,118,101],"value":"Quick save"},
+{"hash":215358547,"name":"tfmain.filequicksave.hint","sourcebytes":[83,97,118,101,32,99,117,114,114,101,110,116,32,102,105,108,101,32,119,105,116,104,111,117,116,32,100,105,97,108,111,103,115],"value":"Save current file without dialogs"},
+{"hash":53140398,"name":"tfmain.renderhypocycloid.caption","sourcebytes":[72,121,112,111,99,121,99,108,111,105,100,46,46,46],"value":"Hypocycloid..."},
+{"hash":66536946,"name":"tfmain.colordialog1.title","sourcebytes":[67,104,111,111,115,101,32,99,111,108,111,114],"value":"Choose color"},
+{"hash":315429,"name":"tfmain.menufile.caption","sourcebytes":[70,105,108,101],"value":"File"},
+{"hash":167619026,"name":"tfmain.itemuseimagebrowser.caption","sourcebytes":[85,115,101,32,105,109,97,103,101,32,98,114,111,119,115,101,114],"value":"Use image browser"},
+{"hash":65502867,"name":"tfmain.menurecentfiles.caption","sourcebytes":[82,101,99,101,110,116,32,102,105,108,101,115],"value":"Recent files"},
+{"hash":139375349,"name":"tfmain.menulanguage.caption","sourcebytes":[76,97,110,103,117,97,103,101],"value":"Language"},
+{"hash":76172398,"name":"tfmain.itemdonate.caption","sourcebytes":[68,111,110,97,116,101,46,46,46],"value":"Donate..."},
+{"hash":310020,"name":"tfmain.menuedit.caption","sourcebytes":[69,100,105,116],"value":"Edit"},
+{"hash":94120868,"name":"tfmain.menuselect.caption","sourcebytes":[83,101,108,101,99,116],"value":"Select"},
+{"hash":380871,"name":"tfmain.menuview.caption","sourcebytes":[86,105,101,119],"value":"View"},
+{"hash":267499032,"name":"tfmain.itemviewdocktoolbox.caption","sourcebytes":[68,111,99,107,32,116,111,111,108,98,111,120],"value":"Dock toolbox"},
+{"hash":46565539,"name":"tfmain.itemdocklayersandcolors.caption","sourcebytes":[68,111,99,107,32,108,97,121,101,114,115,32,97,110,100,32,99,111,108,111,114,115],"value":"Dock layers and colors"},
+{"hash":60708750,"name":"tfmain.itemfullscreen.caption","sourcebytes":[70,117,108,108,115,99,114,101,101,110],"value":"Fullscreen"},
+{"hash":5257173,"name":"tfmain.menuimage.caption","sourcebytes":[73,109,97,103,101],"value":"Image"},
+{"hash":167030057,"name":"tfmain.menuremovetransparency.caption","sourcebytes":[82,101,109,111,118,101,32,116,114,97,110,115,112,97,114,101,110,99,121],"value":"Remove transparency"},
+{"hash":78001811,"name":"tfmain.menucolors.caption","sourcebytes":[67,111,108,111,114,115],"value":"Colors"},
+{"hash":5989939,"name":"tfmain.menutool.caption","sourcebytes":[84,111,111,108,115],"value":"Tools"},
+{"hash":80755394,"name":"tfmain.menufilter.caption","sourcebytes":[70,105,108,116,101,114],"value":"Filter"},
+{"hash":129960242,"name":"tfmain.menuradialblur.caption","sourcebytes":[82,97,100,105,97,108,32,98,108,117,114],"value":"Radial blur"},
+{"hash":93080258,"name":"tfmain.menurender.caption","sourcebytes":[82,101,110,100,101,114],"value":"Render"},
+{"hash":94015604,"name":"tfmain.menuscript.caption","sourcebytes":[83,99,114,105,112,116],"value":"Script"},
+{"hash":322608,"name":"tfmain.menuhelp.caption","sourcebytes":[72,101,108,112],"value":"Help"},
+{"hash":130864334,"name":"tfmain.loadselectiondialog.title","sourcebytes":[76,111,97,100,32,115,101,108,101,99,116,105,111,110],"value":"Load selection"},
+{"hash":695557,"name":"tfmain.openpicturedialog1.title","sourcebytes":[79,112,101,110,32,101,120,105,115,116,105,110,103,32,105,109,97,103,101],"value":"Open existing image"},
+{"hash":262765813,"name":"tfmain.opentexturedialog.title","sourcebytes":[79,112,101,110,32,116,101,120,116,117,114,101],"value":"Open texture"},
+{"hash":30161076,"name":"tfmain.open3dobjectdialog.title","sourcebytes":[73,109,112,111,114,116,32,51,68,32,111,98,106,101,99,116],"value":"Import 3D object"},
+{"hash":186570926,"name":"tfmain.savepicturedialog1.title","sourcebytes":[83,97,118,101,32,102,105,108,101,32,97,115,46,46,46],"value":"Save file as..."},
+{"hash":169186686,"name":"tfmain.saveselectiondialog.title","sourcebytes":[83,97,118,101,32,115,101,108,101,99,116,105,111,110,32,97,115,46,46,46],"value":"Save selection as..."},
+{"hash":7141976,"name":"tfmain.openbrushdialog.title","sourcebytes":[79,112,101,110,32,98,114,117,115,104],"value":"Open brush"},
+{"hash":231995746,"name":"tfmain.menufiletoolbar.caption","sourcebytes":[83,104,111,119,32,102,105,108,101,32,116,111,111,108,98,97,114],"value":"Show file toolbar"},
+{"hash":55148898,"name":"tfmain.menuzoomtoolbar.caption","sourcebytes":[83,104,111,119,32,122,111,111,109,32,116,111,111,108,98,97,114],"value":"Show zoom toolbar"},
+{"hash":185663746,"name":"tfmain.menucopypastetoolbar.caption","sourcebytes":[83,104,111,119,32,99,111,112,121,47,112,97,115,116,101,32,116,111,111,108,98,97,114],"value":"Show copy/paste toolbar"},
+{"hash":61428515,"name":"tfmain.menucoordinatestoolbar.caption","sourcebytes":[83,104,111,119,32,99,111,111,114,100,105,110,97,116,101,115],"value":"Show coordinates"},
+{"hash":112373618,"name":"tfmain.menuundoredotoolbar.caption","sourcebytes":[83,104,111,119,32,117,110,100,111,47,114,101,100,111,32,116,111,111,108,98,97,114],"value":"Show undo/redo toolbar"},
+{"hash":66953941,"name":"tfmain.menushowpalette.caption","sourcebytes":[83,104,111,119,32,112,97,108,101,116,116,101],"value":"Show palette"},
+{"hash":165109892,"name":"tfmain.menudocktoolboxleft.caption","sourcebytes":[68,111,99,107,32,108,101,102,116],"value":"Dock left"},
+{"hash":226248804,"name":"tfmain.menudocktoolboxright.caption","sourcebytes":[68,111,99,107,32,114,105,103,104,116],"value":"Dock right"},
+{"hash":96777627,"name":"tfmain.menuundocktoolbox.caption","sourcebytes":[85,110,100,111,99,107],"value":"Undock"},
+{"hash":44513182,"name":"tfmain.exportpicturedialog.title","sourcebytes":[69,120,112,111,114,116,32,97,115,46,46,46],"value":"Export as..."}
+]}

+ 1 - 0
lazpaint/lazpaintmainform.pas

@@ -25,6 +25,7 @@ type
   { TFMain }
 
   TFMain = class(TForm)
+    RenderHypocycloid: TAction;
     FileQuickSave: TAction;
     SVGRasterImageList1: TBGRAImageList;
     Panel_TextMore: TPanel;

+ 7 - 3
lazpaint/lazpainttype.pas

@@ -73,7 +73,8 @@ type
                     pfEmboss, pfPhong, pfContour, pfGrayscale, pfNegative, pfLinearNegative, pfComplementaryColor, pfNormalize,
                     pfSphere, pfTwirl, pfWaveDisplacement, pfCylinder, pfPlane,
                     pfPerlinNoise,pfCyclicPerlinNoise,pfClouds,pfCustomWater,pfWater,pfRain,pfWood,pfWoodVertical,pfPlastik,pfMetalFloor,pfCamouflage,
-                    pfSnowPrint,pfStone,pfRoundStone,pfMarble);
+                    pfSnowPrint,pfStone,pfRoundStone,pfMarble,
+                    pfHypocycloid);
 
 const
   PictureFilterStr : array[TPictureFilter] of string =
@@ -83,7 +84,8 @@ const
                     'Emboss', 'Phong', 'Contour', 'Grayscale', 'Negative', 'LinearNegative', 'ComplementaryColor', 'Normalize',
                     'Sphere', 'Twirl', 'WaveDisplacement', 'Cylinder', 'Plane',
                     'PerlinNoise','CyclicPerlinNoise','Clouds','CustomWater','Water','Rain','Wood','WoodVertical','Plastik','MetalFloor','Camouflage',
-                    'SnowPrint','Stone','RoundStone','Marble');
+                    'SnowPrint','Stone','RoundStone','Marble',
+                    'Hypocycloid');
 
   IsColoredFilter: array[TPictureFilter] of boolean =
                    (false,
@@ -92,7 +94,8 @@ const
                     false, true, false, false, false, false, false, false,
                     false, false, false, false, false,
                     false,false,true,true,true,true,true,true,true,true,true,
-                    true,true,true,true);
+                    true,true,true,true,
+                    true);
 
 const
   MinZoomForGrid = 4;
@@ -290,6 +293,7 @@ type
     function ShowFunctionFilterDlg(AFilterConnector: TObject): TScriptResult; virtual; abstract;
     function ShowSharpenDlg(AFilterConnector: TObject): TScriptResult; virtual; abstract;
     function ShowPosterizeDlg(AParameters: TVariableSet): TScriptResult; virtual; abstract;
+    function ShowHypocycloidDlg(AInstance: TLazPaintCustomInstance; AParameters: TVariableSet): TScriptResult; virtual; abstract;
     procedure ShowPrintDlg; virtual; abstract;
     function OpenImage (FileName: string; AddToRecent: Boolean= True): boolean; virtual; abstract;
     procedure AddToImageList(const FileNames: array of String); virtual; abstract;

+ 14 - 0
lazpaint/release/bin/i18n/lazpaint.fr.po

@@ -446,6 +446,15 @@ msgstr "Gradient d'opacité"
 msgid "Number of sides:"
 msgstr "Nombre de côtés :"
 
+#: tfhypocycloid.caption
+msgctxt "tfhypocycloid.caption"
+msgid "Hypocycloid"
+msgstr "Hypocycloïde"
+
+#: tfhypocycloid.label_amount.caption
+msgid "Cusps:"
+msgstr "Arches:"
+
 #: tfimagelist.caption
 msgid "Image List"
 msgstr "Liste d'images"
@@ -1478,6 +1487,11 @@ msgctxt "tfmain.rendercyclicperlinnoise.caption"
 msgid "Cyclic Perlin noise"
 msgstr "Bruit de Perlin cyclique"
 
+#: tfmain.renderhypocycloid.caption
+msgctxt "tfmain.renderhypocycloid.caption"
+msgid "Hypocycloid..."
+msgstr "Hypocycloïde..."
+
 #: tfmain.rendermarble.caption
 msgid "Marble"
 msgstr "Marbre"

+ 13 - 0
lazpaint/uconfig.pas

@@ -301,6 +301,9 @@ type
     function DefaultRainQuantity: double;
     procedure SetDefaultRainQuantity(value: double);
 
+    function DefaultCuspCount: integer;
+    procedure SetDefaultCuspCount(value: integer);
+
     //twirl config
     function DefaultTwirlRadius: double;
     procedure SetDefaultTwirlRadius(value: double);
@@ -1271,6 +1274,16 @@ begin
   iniOptions.WriteFloat('Filter','RainQuantity',value);
 end;
 
+function TLazPaintConfig.DefaultCuspCount: integer;
+begin
+  result := iniOptions.ReadInteger('Filter','CuspCount',6);
+end;
+
+procedure TLazPaintConfig.SetDefaultCuspCount(value: integer);
+begin
+  iniOptions.WriteInteger('Filter','CuspCount',value);
+end;
+
 function TLazPaintConfig.DefaultTwirlRadius: double;
 begin
   result := iniOptions.ReadFloat('Filter','TwirlRadius',100);

+ 3 - 0
lazpaint/ufilters.pas

@@ -126,6 +126,9 @@ begin
     if AInstance.Image.SelectionLayerIsEmpty then
       applyOfsBefore := true;
 
+  if filter = pfHypocycloid then
+    exit(AInstance.ShowHypocycloidDlg(AInstance, AParameters));
+
   try
     FilterConnector := TFilterConnector.Create(AInstance, AParameters, applyOfsBefore);
     layer := FilterConnector.ActiveLayer;

+ 1 - 1
lazpaint/umenu.pas

@@ -484,7 +484,7 @@ begin
   AddMenus('MenuRadialBlur',  'FilterBlurBox,FilterBlurFast,FilterBlurRadial,FilterBlurCorona,FilterBlurDisk');
   AddMenus('MenuColors', 'ColorCurves,ColorPosterize,ColorColorize,ColorShiftColors,FilterComplementaryColor,ColorIntensity,-,ColorLightness,FilterNegative,FilterLinearNegative,FilterNormalize,FilterGrayscale');
   AddMenus('MenuTool',   'ToolHand,ToolHotSpot,ToolColorPicker,-,ToolPen,ToolBrush,ToolEraser,ToolFloodFill,ToolClone,-,ToolEditShape,ToolRect,ToolEllipse,ToolPolyline,ToolOpenedCurve,ToolPolygon,ToolSpline,ToolGradient,ToolPhong,ToolText,-,ToolDeformation,ToolTextureMapping');
-  AddMenus('MenuRender', 'RenderPerlinNoise,RenderCyclicPerlinNoise,-,RenderWater,RenderCustomWater,RenderSnowPrint,RenderWood,RenderWoodVertical,RenderMetalFloor,RenderPlastik,RenderStone,RenderRoundStone,RenderMarble,RenderCamouflage,-,RenderClouds,FilterRain');
+  AddMenus('MenuRender', 'RenderPerlinNoise,RenderCyclicPerlinNoise,-,RenderWater,RenderCustomWater,RenderSnowPrint,RenderWood,RenderWoodVertical,RenderMetalFloor,RenderPlastik,RenderStone,RenderRoundStone,RenderMarble,RenderCamouflage,-,RenderClouds,FilterRain,RenderHypocycloid');
   AddMenus('MenuScript', 'FileRunScript,-,InstalledScripts');
   AddMenus('MenuHelp',   'HelpIndex,-,HelpAbout');
   for i := 0 to high(FMainMenus) do

Some files were not shown because too many files changed in this diff