소스 검색

Merge pull request #522 from bgrabitmap/dev-lazpaint

Dev lazpaint v7.2.1
circular17 3 년 전
부모
커밋
4db0e86487

+ 13 - 12
.gitignore

@@ -1,38 +1,39 @@
 *.bak
 *.bak
 *.dbg
 *.dbg
-lazpaint/release/bin/*.exe
 *.lps
 *.lps
 backup/*
 backup/*
 lib
 lib
 debug
 debug
 __pycache__
 __pycache__
+.DS_Store
 *.res
 *.res
 *.lrt
 *.lrt
 lazpaint/backup/
 lazpaint/backup/
-vectoredit/vectoredit
-vectoredit/backup/
+lazpaint/dialog/backup/
+lazpaint/dialog/color/backup
+lazpaint/dialog/filter/backup/
+lazpaint/image/backup/
 lazpaint/test_embedded/backup/
 lazpaint/test_embedded/backup/
 lazpaint/test_embedded/project1
 lazpaint/test_embedded/project1
-lazpaint/dialog/filter/backup/
 lazpaint/release/bin/lazpaint
 lazpaint/release/bin/lazpaint
+lazpaint/tablet/backup/
 lazpaint/tools/backup/
 lazpaint/tools/backup/
-lazpaint/image/backup/
-lazpaint/dialog/backup/
-.DS_Store
+lazpaint/units/
+lazpaint/release/bin/*.exe
 lazpaint/release/bin/lazpaint.app
 lazpaint/release/bin/lazpaint.app
 lazpaint/release/macOS/*.dmg
 lazpaint/release/macOS/*.dmg
 lazpaint/release/windows/lazpaint32
 lazpaint/release/windows/lazpaint32
 lazpaint/release/windows/lazpaint64
 lazpaint/release/windows/lazpaint64
 lazpaint/release/bin/i18n/lazpaint32.*
 lazpaint/release/bin/i18n/lazpaint32.*
 lazpaint/release/bin/i18n/lazpaint_x64.*
 lazpaint/release/bin/i18n/lazpaint_x64.*
-/lazpaint/dialog/color/backup
 resources/createresource/backup/
 resources/createresource/backup/
-lazpaint/units/
+vectoredit/vectoredit
+vectoredit/backup/
 /bgracontrols
 /bgracontrols
 /bgrabitmap
 /bgrabitmap
-
 *.deb
 *.deb
 lazpaint/release/debian/lazpaint*_no_install.tar.gz
 lazpaint/release/debian/lazpaint*_no_install.tar.gz
+lazpaint/release/windows/lazpaint*_no_install.zip
 /web/public/*
 /web/public/*
-
-lazpaint/tablet/backup/
+lazpaint/release/bin/i18n/lazpaint64.pot
+lazpaint/release/windows/libavif/

+ 1 - 1
lazpaint.logic

@@ -9,4 +9,4 @@ bundle release/macOS/LazPaint.app
 copy ../resources/icon/lazpaint.icns release/macOS/LazPaint.app/Contents/Resources/lazpaint.icns
 copy ../resources/icon/lazpaint.icns release/macOS/LazPaint.app/Contents/Resources/lazpaint.icns
 text ../web/config.toml "  version = ""$(Version)"""
 text ../web/config.toml "  version = ""$(Version)"""
 echo ">> DON'T FORGET TO UPDATE WEBSITE"
 echo ">> DON'T FORGET TO UPDATE WEBSITE"
-echo ">> DON'T FORGET TO ADD VERSION IN release/debian/changelog <<"
+echo ">> DON'T FORGET TO ADD VERSION IN lazpaint/release/debian/debian/changelog <<"

+ 2 - 2
lazpaint/dialog/uabout.pas

@@ -49,13 +49,13 @@ type
     { public declarations }
     { public declarations }
   end;
   end;
 
 
-procedure ShowAboutDlg(AInstance: TLazPaintCustomInstance; {%H-}AText: string);
+procedure ShowAboutDlg(AInstance: TLazPaintCustomInstance);
 
 
 implementation
 implementation
 
 
 uses LCLIntf, BGRABitmap, BGRABitmapTypes;
 uses LCLIntf, BGRABitmap, BGRABitmapTypes;
 
 
-procedure ShowAboutDlg(AInstance: TLazPaintCustomInstance; {%H-}AText: string);
+procedure ShowAboutDlg(AInstance: TLazPaintCustomInstance);
 var
 var
   About: TFAbout;
   About: TFAbout;
 begin
 begin

+ 28 - 2
lazpaint/image/uimageaction.pas

@@ -8,7 +8,7 @@ interface
 uses
 uses
   Classes, SysUtils, FPimage, LazPaintType, BGRABitmap, UImage, UTool,
   Classes, SysUtils, FPimage, LazPaintType, BGRABitmap, UImage, UTool,
   UScripting, ULayerAction, UImageType, BGRABitmapTypes, BGRALayerOriginal,
   UScripting, ULayerAction, UImageType, BGRABitmapTypes, BGRALayerOriginal,
-  BGRASVGOriginal;
+  BGRASVGOriginal, BGRALayers;
 
 
 type
 type
 
 
@@ -59,9 +59,11 @@ type
     function DoEnd: boolean;
     function DoEnd: boolean;
     procedure SetCurrentBitmap(bmp: TBGRABitmap; AUndoable: boolean;
     procedure SetCurrentBitmap(bmp: TBGRABitmap; AUndoable: boolean;
       ACaption: string = ''; AOpacity: byte = 255);
       ACaption: string = ''; AOpacity: byte = 255);
+    procedure SetCurrentBitmap(bmp: TBGRACustomLayeredBitmap; AUndoable: boolean);
     procedure CropToSelectionAndLayer;
     procedure CropToSelectionAndLayer;
     procedure CropToSelection;
     procedure CropToSelection;
     procedure Flatten;
     procedure Flatten;
+    procedure TakeScreenshot(ARect: TRect);
     procedure HorizontalFlip(AOption: TFlipOption);
     procedure HorizontalFlip(AOption: TFlipOption);
     procedure VerticalFlip(AOption: TFlipOption);
     procedure VerticalFlip(AOption: TFlipOption);
     procedure RotateCW;
     procedure RotateCW;
@@ -109,7 +111,7 @@ implementation
 uses Controls, Dialogs, UResourceStrings, UObject3D,
 uses Controls, Dialogs, UResourceStrings, UObject3D,
      ULoadImage, UGraph, UClipboard, Types, BGRAGradientOriginal,
      ULoadImage, UGraph, UClipboard, Types, BGRAGradientOriginal,
      BGRATransform, ULoading, math, LCVectorClipboard, LCVectorOriginal, LCVectorRectShapes,
      BGRATransform, ULoading, math, LCVectorClipboard, LCVectorOriginal, LCVectorRectShapes,
-     BGRALayers, BGRAUTF8, UFileSystem, Forms, UTranslation;
+     BGRAUTF8, UFileSystem, Forms, UTranslation;
 
 
 { TImageActions }
 { TImageActions }
 
 
@@ -1113,6 +1115,19 @@ begin
   image.Flatten;
   image.Flatten;
 end;
 end;
 
 
+procedure TImageActions.TakeScreenshot(ARect: TRect);
+var
+  bmp: TBGRABitmap;
+begin
+  bmp := TBGRABitmap.Create;
+  try
+    bmp.TakeScreenshot(ARect);
+    SetCurrentBitmap(bmp, false, 'Screenshot');
+  except on ex:Exception do
+    FInstance.ShowError('TakeScreenshot',ex.Message);
+  end;
+end;
+
 procedure TImageActions.SetCurrentBitmap(bmp: TBGRABitmap; AUndoable : boolean;
 procedure TImageActions.SetCurrentBitmap(bmp: TBGRABitmap; AUndoable : boolean;
   ACaption: string; AOpacity: byte);
   ACaption: string; AOpacity: byte);
 begin
 begin
@@ -1124,6 +1139,17 @@ begin
   end;
   end;
 end;
 end;
 
 
+procedure TImageActions.SetCurrentBitmap(bmp: TBGRACustomLayeredBitmap;
+  AUndoable: boolean);
+begin
+  ToolManager.ToolCloseDontReopen;
+  try
+    image.Assign(bmp,True,AUndoable);
+  finally
+    ToolManager.ToolOpen;
+  end;
+end;
+
 function TImageActions.TryAddLayerFromFile(AFilenameUTF8: string; ALoadedImage: TBGRABitmap = nil): ArrayOfLayerId;
 function TImageActions.TryAddLayerFromFile(AFilenameUTF8: string; ALoadedImage: TBGRABitmap = nil): ArrayOfLayerId;
 
 
   function ComputeStretchMatrix(ASourceWidth, ASourceHeight: single): TAffineMatrix;
   function ComputeStretchMatrix(ASourceWidth, ASourceHeight: single): TAffineMatrix;

+ 3 - 2
lazpaint/lazpaint.lpi

@@ -28,6 +28,7 @@
       <MinorVersionNr Value="2"/>
       <MinorVersionNr Value="2"/>
       <CharSet Value="04B0"/>
       <CharSet Value="04B0"/>
       <StringTable CompanyName="http://sourceforge.net/projects/lazpaint/" FileDescription="LazPaint" InternalName="lazpaint" OriginalFilename="lazpaint.exe" ProductName="LazPaint"/>
       <StringTable CompanyName="http://sourceforge.net/projects/lazpaint/" FileDescription="LazPaint" InternalName="lazpaint" OriginalFilename="lazpaint.exe" ProductName="LazPaint"/>
+      <RevisionNr Value="1"/>
     </VersionInfo>
     </VersionInfo>
     <BuildModes Count="10">
     <BuildModes Count="10">
       <Item1 Name="Debug" Default="True"/>
       <Item1 Name="Debug" Default="True"/>
@@ -412,7 +413,7 @@
     <RequiredPackages Count="5">
     <RequiredPackages Count="5">
       <Item1>
       <Item1>
         <PackageName Value="BGRABitmapPack"/>
         <PackageName Value="BGRABitmapPack"/>
-        <MinVersion Major="11" Minor="5" Valid="True"/>
+        <MinVersion Major="11" Minor="5" Release="2" Valid="True"/>
       </Item1>
       </Item1>
       <Item2>
       <Item2>
         <PackageName Value="bgracontrols"/>
         <PackageName Value="bgracontrols"/>
@@ -420,7 +421,7 @@
       </Item2>
       </Item2>
       <Item3>
       <Item3>
         <PackageName Value="lazpaintcontrols"/>
         <PackageName Value="lazpaintcontrols"/>
-        <MinVersion Minor="2" Valid="True"/>
+        <MinVersion Minor="2" Release="1" Valid="True"/>
       </Item3>
       </Item3>
       <Item4>
       <Item4>
         <PackageName Value="Printer4Lazarus"/>
         <PackageName Value="Printer4Lazarus"/>

+ 0 - 6
lazpaint/lazpaint.lpr

@@ -213,12 +213,6 @@ begin
   LazpaintApplication.UseConfig(ActualConfig);
   LazpaintApplication.UseConfig(ActualConfig);
   FillLanguageList(LazpaintApplication.Config);
   FillLanguageList(LazpaintApplication.Config);
 
 
-  {$IFDEF WINDOWS}
-    LazpaintApplication.AboutText := ReadFileToString(SysToUTF8(ExtractFilePath(Application.ExeName))+'readme.txt');
-  {$ELSE}
-    LazpaintApplication.AboutText := ReadFileToString('readme.txt');
-  {$ENDIF}
-
   if not LazpaintApplication.ProcessCommandLine then
   if not LazpaintApplication.ProcessCommandLine then
   begin
   begin
     LazpaintApplication.Show;
     LazpaintApplication.Show;

+ 1 - 1
lazpaint/lazpaintembeddedpack.lpk

@@ -26,7 +26,7 @@
         </Debugging>
         </Debugging>
       </Linking>
       </Linking>
     </CompilerOptions>
     </CompilerOptions>
-    <Version Major="7" Minor="2"/>
+    <Version Major="7" Minor="2" Release="1"/>
     <Files Count="94">
     <Files Count="94">
       <Item1>
       <Item1>
         <Filename Value="lazpaintinstance.pas"/>
         <Filename Value="lazpaintinstance.pas"/>

+ 77 - 10
lazpaint/lazpaintinstance.pas

@@ -204,7 +204,20 @@ type
     procedure RestoreMainWindowPosition; override;
     procedure RestoreMainWindowPosition; override;
     procedure UseConfig(ini: TInifile); override;
     procedure UseConfig(ini: TInifile); override;
     procedure AssignBitmap(bmp: TBGRABitmap); override;
     procedure AssignBitmap(bmp: TBGRABitmap); override;
-    procedure EditBitmap(var bmp: TBGRABitmap; ConfigStream: TStream = nil; ATitle: String = ''; AOnRun: TLazPaintInstanceEvent = nil; AOnExit: TLazPaintInstanceEvent = nil; ABlackAndWhite: boolean = false); override;
+    procedure AssignBitmap(bmp: TBGRALayeredBitmap); override;
+    function InternalEditBitmap(var bmp: TObject; ConfigStream: TStream = nil;
+      ATitle: String = ''; AOnRun: TLazPaintInstanceEvent = nil;
+      AOnExit: TLazPaintInstanceEvent = nil;
+      ABlackAndWhite: boolean = false): boolean;
+    function EditBitmap(var bmp: TBGRABitmap; ConfigStream: TStream = nil;
+      ATitle: String = ''; AOnRun: TLazPaintInstanceEvent = nil;
+      AOnExit: TLazPaintInstanceEvent = nil;
+      ABlackAndWhite: boolean = false): boolean; override;
+    function EditBitmap(var bmp: TBGRALayeredBitmap;
+      ConfigStream: TStream = nil; ATitle: String = '';
+      AOnRun: TLazPaintInstanceEvent = nil;
+      AOnExit: TLazPaintInstanceEvent = nil;
+      ABlackAndWhite : boolean = false): boolean; override;
     procedure EditSelection; override;
     procedure EditSelection; override;
     function EditTexture(ASource: TBGRABitmap): TBGRABitmap; override;
     function EditTexture(ASource: TBGRABitmap): TBGRABitmap; override;
     function ProcessCommandLine: boolean; override;
     function ProcessCommandLine: boolean; override;
@@ -518,6 +531,7 @@ end;
 procedure TLazPaintInstance.UseConfig(ini: TInifile);
 procedure TLazPaintInstance.UseConfig(ini: TInifile);
 begin
 begin
   FreeAndNil(FConfig);
   FreeAndNil(FConfig);
+  BlackAndWhite := ini.ReadBool('General','BlackAndWhite',BlackAndWhite);
   FConfig := TLazPaintConfig.Create(ini,LazPaintVersionStr);
   FConfig := TLazPaintConfig.Create(ini,LazPaintVersionStr);
   ToolManager.LoadFromConfig;
   ToolManager.LoadFromConfig;
   FGridVisible := Config.DefaultGridVisible;
   FGridVisible := Config.DefaultGridVisible;
@@ -1228,16 +1242,25 @@ end;
 procedure TLazPaintInstance.AssignBitmap(bmp: TBGRABitmap);
 procedure TLazPaintInstance.AssignBitmap(bmp: TBGRABitmap);
 begin
 begin
   if Assigned(FImageAction) then
   if Assigned(FImageAction) then
-    FImageAction.SetCurrentBitmap(bmp.Duplicate as TBGRABitmap, False);
+    FImageAction.SetCurrentBitmap(bmp.Duplicate, False);
 end;
 end;
 
 
-procedure TLazPaintInstance.EditBitmap(var bmp: TBGRABitmap; ConfigStream: TStream; ATitle: String; AOnRun: TLazPaintInstanceEvent; AOnExit: TLazPaintInstanceEvent; ABlackAndWhite: boolean);
+procedure TLazPaintInstance.AssignBitmap(bmp: TBGRALayeredBitmap);
+begin
+  if Assigned(FImageAction) then
+    FImageAction.SetCurrentBitmap(bmp.Duplicate, False);
+end;
+
+function TLazPaintInstance.InternalEditBitmap(var bmp: TObject;
+  ConfigStream: TStream; ATitle: String; AOnRun: TLazPaintInstanceEvent;
+  AOnExit: TLazPaintInstanceEvent; ABlackAndWhite: boolean): boolean;
 var
 var
   subLaz: TLazPaintInstance;
   subLaz: TLazPaintInstance;
   ini : TIniFile;
   ini : TIniFile;
   topmostInfo: TTopMostInfo;
   topmostInfo: TTopMostInfo;
-
+  embeddedImageToBeFreed: boolean;
 begin
 begin
+  result := false;
   try
   try
     subLaz := TLazPaintInstance.Create(True);
     subLaz := TLazPaintInstance.Create(True);
   except
   except
@@ -1251,6 +1274,7 @@ begin
   if ATitle <> '' then subLaz.Title := ATitle;
   if ATitle <> '' then subLaz.Title := ATitle;
   if FMain <> nil then FMain.Enabled := false;
   if FMain <> nil then FMain.Enabled := false;
   topmostInfo:= HideTopmost;
   topmostInfo:= HideTopmost;
+  embeddedImageToBeFreed := false;
   try
   try
     if ConfigStream <> nil then
     if ConfigStream <> nil then
     begin
     begin
@@ -1260,9 +1284,20 @@ begin
       subLaz.UseConfig(ini);
       subLaz.UseConfig(ini);
     end;
     end;
     subLaz.FormsNeeded;
     subLaz.FormsNeeded;
-    if bmp <> nil then subLaz.AssignBitmap(bmp);
-    subLaz.AboutText := AboutText;
-    subLaz.EmbeddedImageBackup := bmp;
+    if bmp <> nil then
+    begin
+      if bmp is TBGRABitmap then
+      begin
+        subLaz.AssignBitmap(TBGRABitmap(bmp));
+        subLaz.EmbeddedImageBackup := TBGRABitmap(bmp);
+      end else
+      if bmp is TBGRALayeredBitmap then
+      begin
+        subLaz.AssignBitmap(TBGRALayeredBitmap(bmp));
+        subLaz.EmbeddedImageBackup := TBGRALayeredBitmap(bmp).ComputeFlatImage;
+        embeddedImageToBeFreed := true;
+      end;
+    end;
     subLaz.FMain.BorderIcons := subLaz.FMain.BorderIcons - [biMinimize];
     subLaz.FMain.BorderIcons := subLaz.FMain.BorderIcons - [biMinimize];
     if AOnRun <> nil then
     if AOnRun <> nil then
       AOnRun(subLaz);
       AOnRun(subLaz);
@@ -1271,8 +1306,17 @@ begin
       AOnExit(subLaz);
       AOnExit(subLaz);
     if subLaz.EmbeddedResult = mrOk then
     if subLaz.EmbeddedResult = mrOk then
     begin
     begin
-      FreeAndNil(bmp);
-      bmp := subLaz.Image.RenderedImage.Duplicate as TBGRABitmap;
+      if bmp is TBGRALayeredBitmap then
+      begin
+        FreeAndNil(bmp);
+        bmp := subLaz.Image.CurrentState.GetLayeredBitmapCopy;
+      end
+      else if bmp is TBGRABitmap then
+      begin
+        FreeAndNil(bmp);
+        bmp := subLaz.Image.RenderedImage.Duplicate;
+      end;
+      result := true;
     end;
     end;
     if ConfigStream <> nil then
     if ConfigStream <> nil then
     begin
     begin
@@ -1289,9 +1333,32 @@ begin
     FMain.Enabled := true;
     FMain.Enabled := true;
     FMain.BringToFront;
     FMain.BringToFront;
   end;
   end;
+  if embeddedImageToBeFreed then
+    subLaz.EmbeddedImageBackup.Free
+    else subLaz.EmbeddedImageBackup := nil;
   subLaz.Free;
   subLaz.Free;
 end;
 end;
 
 
+function TLazPaintInstance.EditBitmap(var bmp: TBGRABitmap;
+  ConfigStream: TStream; ATitle: String; AOnRun: TLazPaintInstanceEvent;
+  AOnExit: TLazPaintInstanceEvent; ABlackAndWhite: boolean): boolean;
+var bmpObj: TObject;
+begin
+  bmpObj := bmp;
+  result := InternalEditBitmap(bmpObj, ConfigStream, ATitle, AOnRun, AOnExit, ABlackAndWhite);
+  bmp := bmpObj as TBGRABitmap;
+end;
+
+function TLazPaintInstance.EditBitmap(var bmp: TBGRALayeredBitmap;
+  ConfigStream: TStream; ATitle: String; AOnRun: TLazPaintInstanceEvent;
+  AOnExit: TLazPaintInstanceEvent; ABlackAndWhite: boolean): boolean;
+var bmpObj: TObject;
+begin
+  bmpObj := bmp;
+  result := InternalEditBitmap(bmpObj, ConfigStream, ATitle, AOnRun, AOnExit, ABlackAndWhite);
+  bmp := bmpObj as TBGRALayeredBitmap;
+end;
+
 procedure TLazPaintInstance.EditSelection;
 procedure TLazPaintInstance.EditSelection;
 begin
 begin
   try
   try
@@ -1969,7 +2036,7 @@ procedure TLazPaintInstance.ShowAboutDlg;
 var tmi: TTopMostInfo;
 var tmi: TTopMostInfo;
 begin
 begin
   tmi := HideTopmost;
   tmi := HideTopmost;
-  uabout.ShowAboutDlg(self,AboutText);
+  uabout.ShowAboutDlg(self);
   ShowTopmost(tmi);
   ShowTopmost(tmi);
 end;
 end;
 
 

+ 1 - 0
lazpaint/lazpaintmainform.pas

@@ -1132,6 +1132,7 @@ begin
 
 
   {$IFDEF DARWIN}
   {$IFDEF DARWIN}
   ImageHorizontalFlip.ShortCut := ShortCut(VK_H, [ssMeta, ssCtrl]);
   ImageHorizontalFlip.ShortCut := ShortCut(VK_H, [ssMeta, ssCtrl]);
+  FileQuickSave.ShortCut:= ShortCut(VK_Q, [ssMeta, ssAlt]);
   {$ENDIF}
   {$ENDIF}
 
 
   if not LazPaintInstance.Embedded then
   if not LazPaintInstance.Embedded then

+ 13 - 4
lazpaint/lazpainttype.pas

@@ -11,7 +11,7 @@ uses
   {$IFDEF LINUX}, InterfaceBase{$ENDIF};
   {$IFDEF LINUX}, InterfaceBase{$ENDIF};
 
 
 const
 const
-  LazPaintVersion = 7020000;
+  LazPaintVersion = 7020100;
 
 
   function LazPaintVersionStr: string;
   function LazPaintVersionStr: string;
 
 
@@ -218,7 +218,7 @@ type
 
 
     function GetMainFormBounds: TRect; virtual; abstract;
     function GetMainFormBounds: TRect; virtual; abstract;
   public
   public
-    Title,AboutText: string;
+    Title: string;
     EmbeddedResult: TModalResult;
     EmbeddedResult: TModalResult;
     EmbeddedImageBackup: TBGRABitmap;
     EmbeddedImageBackup: TBGRABitmap;
 
 
@@ -235,8 +235,17 @@ type
     procedure RestoreMainWindowPosition; virtual; abstract;
     procedure RestoreMainWindowPosition; virtual; abstract;
     procedure Donate; virtual; abstract;
     procedure Donate; virtual; abstract;
     procedure UseConfig(ini: TInifile); virtual; abstract;
     procedure UseConfig(ini: TInifile); virtual; abstract;
-    procedure AssignBitmap(bmp: TBGRABitmap); virtual; abstract;
-    procedure EditBitmap(var bmp: TBGRABitmap; ConfigStream: TStream = nil; ATitle: String = ''; AOnRun: TLazPaintInstanceEvent = nil; AOnExit: TLazPaintInstanceEvent = nil; ABlackAndWhite : boolean = false); virtual; abstract;
+    procedure AssignBitmap(bmp: TBGRABitmap); virtual; abstract; overload;
+    procedure AssignBitmap(bmp: TBGRALayeredBitmap); virtual; abstract; overload;
+    function EditBitmap(var bmp: TBGRABitmap; ConfigStream: TStream = nil;
+      ATitle: String = ''; AOnRun: TLazPaintInstanceEvent = nil;
+      AOnExit: TLazPaintInstanceEvent = nil;
+      ABlackAndWhite : boolean = false): boolean; virtual; abstract;
+    function EditBitmap(var bmp: TBGRALayeredBitmap;
+      ConfigStream: TStream = nil; ATitle: String = '';
+      AOnRun: TLazPaintInstanceEvent = nil;
+      AOnExit: TLazPaintInstanceEvent = nil;
+      ABlackAndWhite : boolean = false): boolean; virtual; abstract;
     function EditTexture(ASource: TBGRABitmap): TBGRABitmap; virtual; abstract;
     function EditTexture(ASource: TBGRABitmap): TBGRABitmap; virtual; abstract;
     procedure EditSelection; virtual; abstract;
     procedure EditSelection; virtual; abstract;
     function ProcessCommandLine: boolean; virtual; abstract;
     function ProcessCommandLine: boolean; virtual; abstract;

+ 15 - 15
lazpaint/release/bin/i18n/lazpaint.de.po

@@ -662,11 +662,11 @@ msgstr "Farben tauschen..."
 
 
 #: tfmain.combobox_arrowend.hint
 #: tfmain.combobox_arrowend.hint
 msgid "Ending arrow"
 msgid "Ending arrow"
-msgstr ""
+msgstr "Endpfeil"
 
 
 #: tfmain.combobox_arrowstart.hint
 #: tfmain.combobox_arrowstart.hint
 msgid "Starting arrow"
 msgid "Starting arrow"
-msgstr ""
+msgstr "Startpfeil"
 
 
 #: tfmain.combobox_penstyle.hint
 #: tfmain.combobox_penstyle.hint
 msgid "Pen style"
 msgid "Pen style"
@@ -861,11 +861,11 @@ msgstr "Drucken..."
 
 
 #: tfmain.filequicksave.caption
 #: tfmain.filequicksave.caption
 msgid "Quick save"
 msgid "Quick save"
-msgstr ""
+msgstr "Schnellspeichern"
 
 
 #: tfmain.filequicksave.hint
 #: tfmain.filequicksave.hint
 msgid "Save current file without dialogs"
 msgid "Save current file without dialogs"
-msgstr ""
+msgstr "Aktuelle Datei ohne Dialog speichern"
 
 
 #: tfmain.filequit.hint
 #: tfmain.filequit.hint
 msgctxt "TFMAIN.FILEQUIT.HINT"
 msgctxt "TFMAIN.FILEQUIT.HINT"
@@ -1952,7 +1952,7 @@ msgstr "Progressive Füllung"
 
 
 #: tfmain.tool_textalignbottom.hint
 #: tfmain.tool_textalignbottom.hint
 msgid "Align bottom"
 msgid "Align bottom"
-msgstr ""
+msgstr "Unten ausrichten"
 
 
 #: tfmain.tool_textaligncenter.hint
 #: tfmain.tool_textaligncenter.hint
 msgid "Center"
 msgid "Center"
@@ -1964,7 +1964,7 @@ msgstr "Links angleichen"
 
 
 #: tfmain.tool_textalignmiddle.hint
 #: tfmain.tool_textalignmiddle.hint
 msgid "Center vertically"
 msgid "Center vertically"
-msgstr ""
+msgstr "Vertikal zentrieren"
 
 
 #: tfmain.tool_textalignright.hint
 #: tfmain.tool_textalignright.hint
 msgid "Align right"
 msgid "Align right"
@@ -1972,15 +1972,15 @@ msgstr "Rechts angleichen"
 
 
 #: tfmain.tool_textaligntop.hint
 #: tfmain.tool_textaligntop.hint
 msgid "Align top"
 msgid "Align top"
-msgstr ""
+msgstr "Oben ausrichten"
 
 
 #: tfmain.tool_textbidirectional.hint
 #: tfmain.tool_textbidirectional.hint
 msgid "Bidirectional"
 msgid "Bidirectional"
-msgstr ""
+msgstr "Bidirektional"
 
 
 #: tfmain.tool_textbold.hint
 #: tfmain.tool_textbold.hint
 msgid "Bold"
 msgid "Bold"
-msgstr ""
+msgstr "Fett gedruckt"
 
 
 #: tfmain.tool_textfont.hint
 #: tfmain.tool_textfont.hint
 msgctxt "TFMAIN.TOOL_TEXTFONT.HINT"
 msgctxt "TFMAIN.TOOL_TEXTFONT.HINT"
@@ -1989,11 +1989,11 @@ msgstr "Schriftart auswählen..."
 
 
 #: tfmain.tool_textitalic.hint
 #: tfmain.tool_textitalic.hint
 msgid "Italic"
 msgid "Italic"
-msgstr ""
+msgstr "Kursive"
 
 
 #: tfmain.tool_textltr.hint
 #: tfmain.tool_textltr.hint
 msgid "Left to right"
 msgid "Left to right"
-msgstr ""
+msgstr "Links nach rechts"
 
 
 #: tfmain.tool_textoutline.hint
 #: tfmain.tool_textoutline.hint
 msgctxt "TFMAIN.TOOL_TEXTOUTLINE.HINT"
 msgctxt "TFMAIN.TOOL_TEXTOUTLINE.HINT"
@@ -2007,7 +2007,7 @@ msgstr "Text Phong-Schattierung"
 
 
 #: tfmain.tool_textrtl.hint
 #: tfmain.tool_textrtl.hint
 msgid "Right to left"
 msgid "Right to left"
-msgstr ""
+msgstr "Rechts nach links"
 
 
 #: tfmain.tool_textshadow.hint
 #: tfmain.tool_textshadow.hint
 msgctxt "TFMAIN.TOOL_TEXTSHADOW.HINT"
 msgctxt "TFMAIN.TOOL_TEXTSHADOW.HINT"
@@ -2016,11 +2016,11 @@ msgstr "Textschatten"
 
 
 #: tfmain.tool_textstrikeout.hint
 #: tfmain.tool_textstrikeout.hint
 msgid "Strikeout"
 msgid "Strikeout"
-msgstr ""
+msgstr "Durchgestrichen"
 
 
 #: tfmain.tool_textunderline.hint
 #: tfmain.tool_textunderline.hint
 msgid "Underline"
 msgid "Underline"
-msgstr ""
+msgstr "Unterstreichen"
 
 
 #: tfmain.viewcolors.caption
 #: tfmain.viewcolors.caption
 msgctxt "TFMAIN.VIEWCOLORS.CAPTION"
 msgctxt "TFMAIN.VIEWCOLORS.CAPTION"
@@ -3629,7 +3629,7 @@ msgstr "RGB"
 
 
 #: uresourcestrings.rsrightclickfinishshape
 #: uresourcestrings.rsrightclickfinishshape
 msgid "Use RIGHT click to finish shape"
 msgid "Use RIGHT click to finish shape"
-msgstr ""
+msgstr "Verwenden Sie die RECHTE Maustaste, um die Form zu beenden"
 
 
 #: uresourcestrings.rsrightclickforsource
 #: uresourcestrings.rsrightclickforsource
 msgid "Use RIGHT click to define source"
 msgid "Use RIGHT click to define source"

BIN
lazpaint/release/bin/i18n/lazpaint.es.mo


+ 20 - 42
lazpaint/release/bin/i18n/lazpaint.es.po

@@ -1,15 +1,15 @@
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
-"Content-Type: text/plain; charset=UTF-8\n"
 "Project-Id-Version: \n"
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
 "POT-Creation-Date: \n"
 "PO-Revision-Date: \n"
 "PO-Revision-Date: \n"
 "Last-Translator: \n"
 "Last-Translator: \n"
 "Language-Team: \n"
 "Language-Team: \n"
+"Language: es\n"
 "MIME-Version: 1.0\n"
 "MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.2.3\n"
-"Language: es\n"
+"X-Generator: Poedit 3.1.1\n"
 
 
 #: tablet.getprocfailed
 #: tablet.getprocfailed
 #, object-pascal-format
 #, object-pascal-format
@@ -385,7 +385,6 @@ msgid "Corrected hue and lightness"
 msgstr "Corregido matiz e iluminación"
 msgstr "Corregido matiz e iluminación"
 
 
 #: tffilterfunction.label_aequals.caption
 #: tffilterfunction.label_aequals.caption
-#, fuzzy
 msgctxt "tffilterfunction.label_aequals.caption"
 msgctxt "tffilterfunction.label_aequals.caption"
 msgid "."
 msgid "."
 msgstr "."
 msgstr "."
@@ -396,7 +395,6 @@ msgid "."
 msgstr "."
 msgstr "."
 
 
 #: tffilterfunction.label_bequals.caption
 #: tffilterfunction.label_bequals.caption
-#, fuzzy
 msgctxt "tffilterfunction.label_bequals.caption"
 msgctxt "tffilterfunction.label_bequals.caption"
 msgid "."
 msgid "."
 msgstr "."
 msgstr "."
@@ -417,7 +415,6 @@ msgid "."
 msgstr "."
 msgstr "."
 
 
 #: tffilterfunction.label_lequals.caption
 #: tffilterfunction.label_lequals.caption
-#, fuzzy
 msgctxt "tffilterfunction.label_lequals.caption"
 msgctxt "tffilterfunction.label_lequals.caption"
 msgid "."
 msgid "."
 msgstr "."
 msgstr "."
@@ -613,7 +610,6 @@ msgid "Remove current brush"
 msgstr "Quitar pincel actual"
 msgstr "Quitar pincel actual"
 
 
 #: tfmain.button_donate.caption
 #: tfmain.button_donate.caption
-#, fuzzy
 msgctxt "tfmain.button_donate.caption"
 msgctxt "tfmain.button_donate.caption"
 msgid "Donate..."
 msgid "Donate..."
 msgstr "Donar..."
 msgstr "Donar..."
@@ -852,11 +848,11 @@ msgstr "Imprimir..."
 
 
 #: tfmain.filequicksave.caption
 #: tfmain.filequicksave.caption
 msgid "Quick save"
 msgid "Quick save"
-msgstr ""
+msgstr "Guardado rápido"
 
 
 #: tfmain.filequicksave.hint
 #: tfmain.filequicksave.hint
 msgid "Save current file without dialogs"
 msgid "Save current file without dialogs"
-msgstr ""
+msgstr "Guardar archivo actual sin diálogos"
 
 
 #: tfmain.filequit.hint
 #: tfmain.filequit.hint
 msgctxt "TFMAIN.FILEQUIT.HINT"
 msgctxt "TFMAIN.FILEQUIT.HINT"
@@ -1116,16 +1112,12 @@ msgid "Rotate 180°"
 msgstr "Rotar 180º"
 msgstr "Rotar 180º"
 
 
 #: tfmain.imagerotateccw.caption
 #: tfmain.imagerotateccw.caption
-#, fuzzy
-#| msgid "Rotate 90° CCR"
 msgid "Rotate 90° CCW"
 msgid "Rotate 90° CCW"
-msgstr "Rotar 90º CCR"
+msgstr "Rotar 90º Sentido Antihorario"
 
 
 #: tfmain.imagerotatecw.caption
 #: tfmain.imagerotatecw.caption
-#, fuzzy
-#| msgid "Rotate 90° CR"
 msgid "Rotate 90° CW"
 msgid "Rotate 90° CW"
-msgstr "Rotar 90º CR"
+msgstr "Rotar 90º Sentido Horario"
 
 
 #: tfmain.imagesmartzoom3.caption
 #: tfmain.imagesmartzoom3.caption
 msgid "Smart zoom x3"
 msgid "Smart zoom x3"
@@ -1300,7 +1292,6 @@ msgid "Duplicate selected layer"
 msgstr "Duplicar capa seleccionada"
 msgstr "Duplicar capa seleccionada"
 
 
 #: tfmain.layerexport.hint
 #: tfmain.layerexport.hint
-#, fuzzy
 msgctxt "tfmain.layerexport.hint"
 msgctxt "tfmain.layerexport.hint"
 msgid "Export..."
 msgid "Export..."
 msgstr "Exportar..."
 msgstr "Exportar..."
@@ -1426,7 +1417,6 @@ msgid "Render"
 msgstr "Renderizar"
 msgstr "Renderizar"
 
 
 #: tfmain.menuscript.caption
 #: tfmain.menuscript.caption
-#, fuzzy
 msgctxt "tfmain.menuscript.caption"
 msgctxt "tfmain.menuscript.caption"
 msgid "Script"
 msgid "Script"
 msgstr "Guión"
 msgstr "Guión"
@@ -1790,7 +1780,6 @@ msgid "Curve"
 msgstr "Curva"
 msgstr "Curva"
 
 
 #: tfmain.toolspline.hint
 #: tfmain.toolspline.hint
-#, fuzzy
 msgctxt "tfmain.toolspline.hint"
 msgctxt "tfmain.toolspline.hint"
 msgid "Curve"
 msgid "Curve"
 msgstr "Curva"
 msgstr "Curva"
@@ -1945,7 +1934,7 @@ msgstr "Relleno de flujo progresivo"
 
 
 #: tfmain.tool_textalignbottom.hint
 #: tfmain.tool_textalignbottom.hint
 msgid "Align bottom"
 msgid "Align bottom"
-msgstr ""
+msgstr "Alinear abajo"
 
 
 #: tfmain.tool_textaligncenter.hint
 #: tfmain.tool_textaligncenter.hint
 msgid "Center"
 msgid "Center"
@@ -1957,7 +1946,7 @@ msgstr "Alinear a la izquierda"
 
 
 #: tfmain.tool_textalignmiddle.hint
 #: tfmain.tool_textalignmiddle.hint
 msgid "Center vertically"
 msgid "Center vertically"
-msgstr ""
+msgstr "Centrar Verticalmente"
 
 
 #: tfmain.tool_textalignright.hint
 #: tfmain.tool_textalignright.hint
 msgid "Align right"
 msgid "Align right"
@@ -1965,15 +1954,15 @@ msgstr "Alinear a la derecha"
 
 
 #: tfmain.tool_textaligntop.hint
 #: tfmain.tool_textaligntop.hint
 msgid "Align top"
 msgid "Align top"
-msgstr ""
+msgstr "Alinear arriba"
 
 
 #: tfmain.tool_textbidirectional.hint
 #: tfmain.tool_textbidirectional.hint
 msgid "Bidirectional"
 msgid "Bidirectional"
-msgstr ""
+msgstr "Bidireccional"
 
 
 #: tfmain.tool_textbold.hint
 #: tfmain.tool_textbold.hint
 msgid "Bold"
 msgid "Bold"
-msgstr ""
+msgstr "Negrita"
 
 
 #: tfmain.tool_textfont.hint
 #: tfmain.tool_textfont.hint
 msgctxt "TFMAIN.TOOL_TEXTFONT.HINT"
 msgctxt "TFMAIN.TOOL_TEXTFONT.HINT"
@@ -1982,11 +1971,11 @@ msgstr "Elegir fuente..."
 
 
 #: tfmain.tool_textitalic.hint
 #: tfmain.tool_textitalic.hint
 msgid "Italic"
 msgid "Italic"
-msgstr ""
+msgstr "Italica"
 
 
 #: tfmain.tool_textltr.hint
 #: tfmain.tool_textltr.hint
 msgid "Left to right"
 msgid "Left to right"
-msgstr ""
+msgstr "Izquierda a derecha"
 
 
 #: tfmain.tool_textoutline.hint
 #: tfmain.tool_textoutline.hint
 msgctxt "TFMAIN.TOOL_TEXTOUTLINE.HINT"
 msgctxt "TFMAIN.TOOL_TEXTOUTLINE.HINT"
@@ -2000,7 +1989,7 @@ msgstr "Texto sombreado Phong"
 
 
 #: tfmain.tool_textrtl.hint
 #: tfmain.tool_textrtl.hint
 msgid "Right to left"
 msgid "Right to left"
-msgstr ""
+msgstr "Derecha a izquierda"
 
 
 #: tfmain.tool_textshadow.hint
 #: tfmain.tool_textshadow.hint
 msgctxt "TFMAIN.TOOL_TEXTSHADOW.HINT"
 msgctxt "TFMAIN.TOOL_TEXTSHADOW.HINT"
@@ -2009,11 +1998,11 @@ msgstr "Sombra de Texto"
 
 
 #: tfmain.tool_textstrikeout.hint
 #: tfmain.tool_textstrikeout.hint
 msgid "Strikeout"
 msgid "Strikeout"
-msgstr ""
+msgstr "Tachado"
 
 
 #: tfmain.tool_textunderline.hint
 #: tfmain.tool_textunderline.hint
 msgid "Underline"
 msgid "Underline"
-msgstr ""
+msgstr "Subrayado"
 
 
 #: tfmain.viewcolors.caption
 #: tfmain.viewcolors.caption
 msgctxt "TFMAIN.VIEWCOLORS.CAPTION"
 msgctxt "TFMAIN.VIEWCOLORS.CAPTION"
@@ -2831,7 +2820,6 @@ msgid "Autodetect"
 msgstr "Automático"
 msgstr "Automático"
 
 
 #: uresourcestrings.rsback
 #: uresourcestrings.rsback
-#, fuzzy
 msgctxt "uresourcestrings.rsback"
 msgctxt "uresourcestrings.rsback"
 msgid "Back"
 msgid "Back"
 msgstr "Fondo"
 msgstr "Fondo"
@@ -3006,7 +2994,6 @@ msgid "Dither layer using palette"
 msgstr "Entramado de capa usando paleta"
 msgstr "Entramado de capa usando paleta"
 
 
 #: uresourcestrings.rsdonate
 #: uresourcestrings.rsdonate
-#, fuzzy
 msgctxt "uresourcestrings.rsdonate"
 msgctxt "uresourcestrings.rsdonate"
 msgid "Donate..."
 msgid "Donate..."
 msgstr "Donar..."
 msgstr "Donar..."
@@ -3149,7 +3136,6 @@ msgid "Fixed"
 msgstr "Fijo"
 msgstr "Fijo"
 
 
 #: uresourcestrings.rsflattenimage
 #: uresourcestrings.rsflattenimage
-#, fuzzy
 msgctxt "uresourcestrings.rsflattenimage"
 msgctxt "uresourcestrings.rsflattenimage"
 msgid "Flatten image"
 msgid "Flatten image"
 msgstr "Aplanar imágen"
 msgstr "Aplanar imágen"
@@ -3237,7 +3223,6 @@ msgid "Icon size"
 msgstr "Tamaño de ícono"
 msgstr "Tamaño de ícono"
 
 
 #: uresourcestrings.rsimage
 #: uresourcestrings.rsimage
-#, fuzzy
 msgctxt "uresourcestrings.rsimage"
 msgctxt "uresourcestrings.rsimage"
 msgid "Image"
 msgid "Image"
 msgstr "Imágen"
 msgstr "Imágen"
@@ -3547,7 +3532,6 @@ msgid "Palette options"
 msgstr "Opciones de paleta"
 msgstr "Opciones de paleta"
 
 
 #: uresourcestrings.rspen
 #: uresourcestrings.rspen
-#, fuzzy
 msgctxt "uresourcestrings.rspen"
 msgctxt "uresourcestrings.rspen"
 msgid "Pen"
 msgid "Pen"
 msgstr "Pluma"
 msgstr "Pluma"
@@ -3611,7 +3595,6 @@ msgid "Remove color from palette"
 msgstr "Quitar color de la paleta"
 msgstr "Quitar color de la paleta"
 
 
 #: uresourcestrings.rsrender
 #: uresourcestrings.rsrender
-#, fuzzy
 msgctxt "uresourcestrings.rsrender"
 msgctxt "uresourcestrings.rsrender"
 msgid "Render"
 msgid "Render"
 msgstr "Renderizar"
 msgstr "Renderizar"
@@ -3677,7 +3660,6 @@ msgid "Script"
 msgstr "Guión"
 msgstr "Guión"
 
 
 #: uresourcestrings.rsselectblendoperation
 #: uresourcestrings.rsselectblendoperation
-#, fuzzy
 msgctxt "uresourcestrings.rsselectblendoperation"
 msgctxt "uresourcestrings.rsselectblendoperation"
 msgid "Select blend operation"
 msgid "Select blend operation"
 msgstr "Seleccionar operación de mezcla"
 msgstr "Seleccionar operación de mezcla"
@@ -3721,7 +3703,6 @@ msgid "Stroke"
 msgstr "Trazo"
 msgstr "Trazo"
 
 
 #: uresourcestrings.rstextoutline
 #: uresourcestrings.rstextoutline
-#, fuzzy
 msgctxt "uresourcestrings.rstextoutline"
 msgctxt "uresourcestrings.rstextoutline"
 msgid "Text outline"
 msgid "Text outline"
 msgstr "Contorno de texto"
 msgstr "Contorno de texto"
@@ -3813,7 +3794,7 @@ msgstr "Tamaño vertical"
 
 
 #: uresourcestrings.rsvisible
 #: uresourcestrings.rsvisible
 msgid "Visibile"
 msgid "Visibile"
-msgstr ""
+msgstr "Visible"
 
 
 #: uresourcestrings.rsyellow
 #: uresourcestrings.rsyellow
 msgid "Yellow"
 msgid "Yellow"
@@ -3824,14 +3805,11 @@ msgid "Yes"
 msgstr "Sí"
 msgstr "Sí"
 
 
 #: uresourcestrings.rszoomlayerstackin
 #: uresourcestrings.rszoomlayerstackin
-#, fuzzy
 msgctxt "uresourcestrings.rszoomlayerstackin"
 msgctxt "uresourcestrings.rszoomlayerstackin"
 msgid "Zoom layer stack in"
 msgid "Zoom layer stack in"
-msgstr "Hacer zoom en capa"
+msgstr "Hacer zoom en capas"
 
 
 #: uresourcestrings.rszoomlayerstackout
 #: uresourcestrings.rszoomlayerstackout
-#, fuzzy
 msgctxt "uresourcestrings.rszoomlayerstackout"
 msgctxt "uresourcestrings.rszoomlayerstackout"
 msgid "Zoom layer stack out"
 msgid "Zoom layer stack out"
-msgstr "Deshacer zoom en capa"
-
+msgstr "Deshacer zoom en capas"

+ 106 - 127
lazpaint/release/bin/i18n/lazpaint.nl.po

@@ -1,38 +1,18 @@
+# Imanuel Habekotté <.ima_@habekotte_.gmail_com>, 2022.
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
-"Project-Id-Version: Lazpaint 7.0.4\n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: 2019-08-20 12:23+0200\n"
-"Last-Translator: fred\n"
-"Language-Team: LazPaint\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: nl\n"
-"X-Generator: Poedit 2.2.3\n"
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-07-21 16:07+0200\n"
-"PO-Revision-Date: 2014-07-21 16:18+0200\n"
-"Last-Translator: BigChimp <[email protected]>\n"
-"Language-Team: LazPaint\n"
-"Language: nl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Virtaal 0.7.0\n"
 "Project-Id-Version: LazPaint\n"
 "Project-Id-Version: LazPaint\n"
+"Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2014-03-28 11:18+0200\n"
-"Last-Translator: BigChimp <nowhere@example.com>\n"
+"PO-Revision-Date: 2022-08-16 14:48+0200\n"
+"Last-Translator: Imanuel Habekotté <.ima_@habekotte_.gmail_com>\n"
 "Language-Team: LazPaint\n"
 "Language-Team: LazPaint\n"
 "Language: nl\n"
 "Language: nl\n"
 "MIME-Version: 1.0\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Virtaal 0.7.0\n"
+"X-Generator: Virtaal 0.7.1\n"
 "X-Poedit-Language: Dutch\n"
 "X-Poedit-Language: Dutch\n"
 
 
 #: tablet.getprocfailed
 #: tablet.getprocfailed
@@ -191,7 +171,9 @@ msgstr "Basale SVG"
 
 
 #: tfblendop.label_svgover.hint
 #: tfblendop.label_svgover.hint
 msgid "Basic blend operations that are available in virtually all image editors"
 msgid "Basic blend operations that are available in virtually all image editors"
-msgstr "Basale mengoperaties die beschikbaar zijn in bijna alle beeldbewerkingssoftware"
+msgstr ""
+"Basale mengoperaties die beschikbaar zijn in bijna alle "
+"beeldbewerkingssoftware"
 
 
 #: tfbrowseimages.caption
 #: tfbrowseimages.caption
 msgid "Browse images"
 msgid "Browse images"
@@ -337,11 +319,11 @@ msgstr "Annuleren"
 
 
 #: tfcustomblur.button_editmask.caption
 #: tfcustomblur.button_editmask.caption
 msgid "Edit mask..."
 msgid "Edit mask..."
-msgstr "Bewerkingsmasker..."
+msgstr "Masker bewerken..."
 
 
 #: tfcustomblur.button_loadmask.caption
 #: tfcustomblur.button_loadmask.caption
 msgid "Load mask..."
 msgid "Load mask..."
-msgstr "Laad masker..."
+msgstr "Masker laden..."
 
 
 #: tfcustomblur.button_ok.caption
 #: tfcustomblur.button_ok.caption
 msgctxt "TFCUSTOMBLUR.BUTTON_OK.CAPTION"
 msgctxt "TFCUSTOMBLUR.BUTTON_OK.CAPTION"
@@ -355,7 +337,7 @@ msgstr "Aangepaste vervaging"
 
 
 #: tfcustomblur.openpicturedialog1.title
 #: tfcustomblur.openpicturedialog1.title
 msgid "Open grayscale file"
 msgid "Open grayscale file"
-msgstr "Open grijstinten-bestand"
+msgstr "Zwart-witte afbeelding laden..."
 
 
 #: tfemboss.button_cancel.caption
 #: tfemboss.button_cancel.caption
 msgctxt "TFEMBOSS.BUTTON_CANCEL.CAPTION"
 msgctxt "TFEMBOSS.BUTTON_CANCEL.CAPTION"
@@ -471,7 +453,7 @@ msgstr "HSL"
 
 
 #: tffilterfunction.tabsheet_lab.caption
 #: tffilterfunction.tabsheet_lab.caption
 msgid "Lab"
 msgid "Lab"
-msgstr ""
+msgstr "Lab"
 
 
 #: tffilterfunction.tabsheet_rgb.caption
 #: tffilterfunction.tabsheet_rgb.caption
 msgctxt "tffilterfunction.tabsheet_rgb.caption"
 msgctxt "tffilterfunction.tabsheet_rgb.caption"
@@ -630,14 +612,13 @@ msgstr "Maak een geometrische kwast"
 #: tfmain.brushloadfromfile.hint
 #: tfmain.brushloadfromfile.hint
 msgctxt "tfmain.brushloadfromfile.hint"
 msgctxt "tfmain.brushloadfromfile.hint"
 msgid "Load brush from file..."
 msgid "Load brush from file..."
-msgstr "Laad kwast van bestand..."
+msgstr "Kwast van bestand laden..."
 
 
 #: tfmain.brushremovecurrent.hint
 #: tfmain.brushremovecurrent.hint
 msgid "Remove current brush"
 msgid "Remove current brush"
 msgstr "Verwijder huidige kwast"
 msgstr "Verwijder huidige kwast"
 
 
 #: tfmain.button_donate.caption
 #: tfmain.button_donate.caption
-#, fuzzy
 msgctxt "tfmain.button_donate.caption"
 msgctxt "tfmain.button_donate.caption"
 msgid "Donate..."
 msgid "Donate..."
 msgstr "Doneren..."
 msgstr "Doneren..."
@@ -678,11 +659,11 @@ msgstr "Kleuren verschuiven..."
 
 
 #: tfmain.combobox_arrowend.hint
 #: tfmain.combobox_arrowend.hint
 msgid "Ending arrow"
 msgid "Ending arrow"
-msgstr ""
+msgstr "Eindgedeelte pijl"
 
 
 #: tfmain.combobox_arrowstart.hint
 #: tfmain.combobox_arrowstart.hint
 msgid "Starting arrow"
 msgid "Starting arrow"
-msgstr ""
+msgstr "Begingedeelte pijl"
 
 
 #: tfmain.combobox_penstyle.hint
 #: tfmain.combobox_penstyle.hint
 msgid "Pen style"
 msgid "Pen style"
@@ -793,11 +774,11 @@ msgstr "Vorm uitlijnen naar boven"
 
 
 #: tfmain.editshapecenterhorizontally.hint
 #: tfmain.editshapecenterhorizontally.hint
 msgid "Center shape horizontally"
 msgid "Center shape horizontally"
-msgstr "Vorm horizontaal midden"
+msgstr "Vorm horizontaal centreren"
 
 
 #: tfmain.editshapecentervertically.hint
 #: tfmain.editshapecentervertically.hint
 msgid "Center shape vertically"
 msgid "Center shape vertically"
-msgstr "Vorm verticaall midden"
+msgstr "Vorm verticaal centreren"
 
 
 #: tfmain.editshapetocurve.hint
 #: tfmain.editshapetocurve.hint
 msgid "Convert shape to curve"
 msgid "Convert shape to curve"
@@ -830,7 +811,7 @@ msgstr "Wijzigingen valideren"
 
 
 #: tfmain.exportpicturedialog.title
 #: tfmain.exportpicturedialog.title
 msgid "Export as..."
 msgid "Export as..."
-msgstr "Export als..."
+msgstr "Exporteren als..."
 
 
 #: tfmain.filechooseentry.caption
 #: tfmain.filechooseentry.caption
 msgid "Choose entry..."
 msgid "Choose entry..."
@@ -843,7 +824,7 @@ msgstr "Kies invoer in bestand"
 #: tfmain.fileexport.caption
 #: tfmain.fileexport.caption
 msgctxt "tfmain.fileexport.caption"
 msgctxt "tfmain.fileexport.caption"
 msgid "Export..."
 msgid "Export..."
-msgstr "Export..."
+msgstr "Exporteren..."
 
 
 #: tfmain.fileimport3d.caption
 #: tfmain.fileimport3d.caption
 msgid "Import 3D object..."
 msgid "Import 3D object..."
@@ -876,11 +857,11 @@ msgstr "Print..."
 
 
 #: tfmain.filequicksave.caption
 #: tfmain.filequicksave.caption
 msgid "Quick save"
 msgid "Quick save"
-msgstr ""
+msgstr "Snel opslaan"
 
 
 #: tfmain.filequicksave.hint
 #: tfmain.filequicksave.hint
 msgid "Save current file without dialogs"
 msgid "Save current file without dialogs"
-msgstr ""
+msgstr "Huidig bestand opslaan zonder dialoogvenster"
 
 
 #: tfmain.filequit.hint
 #: tfmain.filequit.hint
 msgctxt "TFMAIN.FILEQUIT.HINT"
 msgctxt "TFMAIN.FILEQUIT.HINT"
@@ -919,7 +900,7 @@ msgstr "Bestand opslaan als"
 
 
 #: tfmain.filesaveasinsamefolder.caption
 #: tfmain.filesaveasinsamefolder.caption
 msgid "Save in same folder..."
 msgid "Save in same folder..."
-msgstr "Sla op in zelfde folder..."
+msgstr "Opslaan in dezelfde map..."
 
 
 #: tfmain.filesaveselectionas.caption
 #: tfmain.filesaveselectionas.caption
 msgctxt "TFMAIN.FILESAVESELECTIONAS.CAPTION"
 msgctxt "TFMAIN.FILESAVESELECTIONAS.CAPTION"
@@ -933,12 +914,12 @@ msgstr "Gebruik afbeeldingsbrowser"
 
 
 #: tfmain.filterblurbox.caption
 #: tfmain.filterblurbox.caption
 msgid "Box blur..."
 msgid "Box blur..."
-msgstr "Box vervagen..."
+msgstr "Vierkant-vervaging..."
 
 
 #: tfmain.filterblurcorona.caption
 #: tfmain.filterblurcorona.caption
 msgctxt "tfmain.filterblurcorona.caption"
 msgctxt "tfmain.filterblurcorona.caption"
 msgid "Corona blur..."
 msgid "Corona blur..."
-msgstr "Corona vervaging..."
+msgstr "Corona-vervaging..."
 
 
 #: tfmain.filterblurcustom.caption
 #: tfmain.filterblurcustom.caption
 msgctxt "tfmain.filterblurcustom.caption"
 msgctxt "tfmain.filterblurcustom.caption"
@@ -948,7 +929,7 @@ msgstr "Aangepaste vervaging..."
 #: tfmain.filterblurdisk.caption
 #: tfmain.filterblurdisk.caption
 msgctxt "tfmain.filterblurdisk.caption"
 msgctxt "tfmain.filterblurdisk.caption"
 msgid "Disk blur..."
 msgid "Disk blur..."
-msgstr "Schijf vervaging..."
+msgstr "Schijf-vervaging..."
 
 
 #: tfmain.filterblurfast.caption
 #: tfmain.filterblurfast.caption
 msgctxt "tfmain.filterblurfast.caption"
 msgctxt "tfmain.filterblurfast.caption"
@@ -968,7 +949,7 @@ msgstr "Precieze vervaging..."
 #: tfmain.filterblurradial.caption
 #: tfmain.filterblurradial.caption
 msgctxt "tfmain.filterblurradial.caption"
 msgctxt "tfmain.filterblurradial.caption"
 msgid "Gaussian blur..."
 msgid "Gaussian blur..."
-msgstr "Gaussian vervaging..."
+msgstr "Gaussische vervaging..."
 
 
 #: tfmain.filtercleartype.caption
 #: tfmain.filtercleartype.caption
 msgid "ClearType"
 msgid "ClearType"
@@ -1000,7 +981,7 @@ msgstr "Functie toepassen..."
 
 
 #: tfmain.filtergrayscale.caption
 #: tfmain.filtergrayscale.caption
 msgid "Grayscale"
 msgid "Grayscale"
-msgstr "Grijstinten"
+msgstr "Zwart-wit"
 
 
 #: tfmain.filterlinearnegative.caption
 #: tfmain.filterlinearnegative.caption
 msgctxt "tfmain.filterlinearnegative.caption"
 msgctxt "tfmain.filterlinearnegative.caption"
@@ -1320,10 +1301,9 @@ msgid "Duplicate selected layer"
 msgstr "Geselecteerde laag dupliceren"
 msgstr "Geselecteerde laag dupliceren"
 
 
 #: tfmain.layerexport.hint
 #: tfmain.layerexport.hint
-#, fuzzy
 msgctxt "tfmain.layerexport.hint"
 msgctxt "tfmain.layerexport.hint"
 msgid "Export..."
 msgid "Export..."
-msgstr "Export..."
+msgstr "Exporteren..."
 
 
 #: tfmain.layerfromfile.hint
 #: tfmain.layerfromfile.hint
 msgctxt "tfmain.layerfromfile.hint"
 msgctxt "tfmain.layerfromfile.hint"
@@ -1446,7 +1426,6 @@ msgid "Render"
 msgstr "Renderen"
 msgstr "Renderen"
 
 
 #: tfmain.menuscript.caption
 #: tfmain.menuscript.caption
-#, fuzzy
 msgctxt "tfmain.menuscript.caption"
 msgctxt "tfmain.menuscript.caption"
 msgid "Script"
 msgid "Script"
 msgstr "Script"
 msgstr "Script"
@@ -1878,11 +1857,11 @@ msgstr "Maak transparant"
 #: tfmain.tool_eraseblur.hint
 #: tfmain.tool_eraseblur.hint
 msgctxt "tfmain.tool_eraseblur.hint"
 msgctxt "tfmain.tool_eraseblur.hint"
 msgid "Soften"
 msgid "Soften"
-msgstr "Soften"
+msgstr "Verzachten"
 
 
 #: tfmain.tool_erasedarken.hint
 #: tfmain.tool_erasedarken.hint
 msgid "Darken"
 msgid "Darken"
-msgstr "Donkerder"
+msgstr "Donkerder maken"
 
 
 #: tfmain.tool_eraselighten.hint
 #: tfmain.tool_eraselighten.hint
 msgid "Lighten"
 msgid "Lighten"
@@ -1964,7 +1943,7 @@ msgstr "Progressieve vloedvulling"
 
 
 #: tfmain.tool_textalignbottom.hint
 #: tfmain.tool_textalignbottom.hint
 msgid "Align bottom"
 msgid "Align bottom"
-msgstr ""
+msgstr "Onder uitlijnen"
 
 
 #: tfmain.tool_textaligncenter.hint
 #: tfmain.tool_textaligncenter.hint
 msgid "Center"
 msgid "Center"
@@ -1976,7 +1955,7 @@ msgstr "Links uitlijnen"
 
 
 #: tfmain.tool_textalignmiddle.hint
 #: tfmain.tool_textalignmiddle.hint
 msgid "Center vertically"
 msgid "Center vertically"
-msgstr ""
+msgstr "Verticaal centreren"
 
 
 #: tfmain.tool_textalignright.hint
 #: tfmain.tool_textalignright.hint
 msgid "Align right"
 msgid "Align right"
@@ -1984,15 +1963,15 @@ msgstr "Rechts uitlijnen"
 
 
 #: tfmain.tool_textaligntop.hint
 #: tfmain.tool_textaligntop.hint
 msgid "Align top"
 msgid "Align top"
-msgstr ""
+msgstr "Boven uitlijnen"
 
 
 #: tfmain.tool_textbidirectional.hint
 #: tfmain.tool_textbidirectional.hint
 msgid "Bidirectional"
 msgid "Bidirectional"
-msgstr ""
+msgstr "Bidirectioneel"
 
 
 #: tfmain.tool_textbold.hint
 #: tfmain.tool_textbold.hint
 msgid "Bold"
 msgid "Bold"
-msgstr ""
+msgstr "Vet"
 
 
 #: tfmain.tool_textfont.hint
 #: tfmain.tool_textfont.hint
 msgctxt "TFMAIN.TOOL_TEXTFONT.HINT"
 msgctxt "TFMAIN.TOOL_TEXTFONT.HINT"
@@ -2001,11 +1980,11 @@ msgstr "Lettertype kiezen..."
 
 
 #: tfmain.tool_textitalic.hint
 #: tfmain.tool_textitalic.hint
 msgid "Italic"
 msgid "Italic"
-msgstr ""
+msgstr "Schuin"
 
 
 #: tfmain.tool_textltr.hint
 #: tfmain.tool_textltr.hint
 msgid "Left to right"
 msgid "Left to right"
-msgstr ""
+msgstr "Links-naar-rechts"
 
 
 #: tfmain.tool_textoutline.hint
 #: tfmain.tool_textoutline.hint
 msgctxt "TFMAIN.TOOL_TEXTOUTLINE.HINT"
 msgctxt "TFMAIN.TOOL_TEXTOUTLINE.HINT"
@@ -2019,7 +1998,7 @@ msgstr "Tekst phong shading"
 
 
 #: tfmain.tool_textrtl.hint
 #: tfmain.tool_textrtl.hint
 msgid "Right to left"
 msgid "Right to left"
-msgstr ""
+msgstr "Rechts-naar-links"
 
 
 #: tfmain.tool_textshadow.hint
 #: tfmain.tool_textshadow.hint
 msgctxt "TFMAIN.TOOL_TEXTSHADOW.HINT"
 msgctxt "TFMAIN.TOOL_TEXTSHADOW.HINT"
@@ -2028,11 +2007,11 @@ msgstr "Tekstschaduw"
 
 
 #: tfmain.tool_textstrikeout.hint
 #: tfmain.tool_textstrikeout.hint
 msgid "Strikeout"
 msgid "Strikeout"
-msgstr ""
+msgstr "Doorgestreept"
 
 
 #: tfmain.tool_textunderline.hint
 #: tfmain.tool_textunderline.hint
 msgid "Underline"
 msgid "Underline"
-msgstr ""
+msgstr "Onderstreept"
 
 
 #: tfmain.viewcolors.caption
 #: tfmain.viewcolors.caption
 msgctxt "TFMAIN.VIEWCOLORS.CAPTION"
 msgctxt "TFMAIN.VIEWCOLORS.CAPTION"
@@ -2167,11 +2146,11 @@ msgstr "Nieuwe afbeelding"
 
 
 #: tfnewimage.combobox_bitdepth.text
 #: tfnewimage.combobox_bitdepth.text
 msgid "32"
 msgid "32"
-msgstr ""
+msgstr "32"
 
 
 #: tfnewimage.label_bitdepth.caption
 #: tfnewimage.label_bitdepth.caption
 msgid "Bit depth :"
 msgid "Bit depth :"
-msgstr "Bit diepte:"
+msgstr "Kleurendiepte :"
 
 
 #: tfnewimage.label_height.caption
 #: tfnewimage.label_height.caption
 msgctxt "tfnewimage.label_height.caption"
 msgctxt "tfnewimage.label_height.caption"
@@ -2180,11 +2159,11 @@ msgstr "Hoogte :"
 
 
 #: tfnewimage.label_height1.caption
 #: tfnewimage.label_height1.caption
 msgid "Ratio :"
 msgid "Ratio :"
-msgstr "Verhouding:"
+msgstr "Verhouding :"
 
 
 #: tfnewimage.label_memoryrequired.caption
 #: tfnewimage.label_memoryrequired.caption
 msgid "Memory required :"
 msgid "Memory required :"
-msgstr "Geheugen vereist:"
+msgstr "Geheugen vereist :"
 
 
 #: tfnewimage.label_width.caption
 #: tfnewimage.label_width.caption
 msgctxt "tfnewimage.label_width.caption"
 msgctxt "tfnewimage.label_width.caption"
@@ -2211,7 +2190,7 @@ msgstr "Dekking:"
 
 
 #: tfnoisefilter.radio_grayscalenoise.caption
 #: tfnoisefilter.radio_grayscalenoise.caption
 msgid "Grayscale noise"
 msgid "Grayscale noise"
-msgstr "Grijstint ruis"
+msgstr "Zwart-witte ruis"
 
 
 #: tfnoisefilter.radio_rgbnoise.caption
 #: tfnoisefilter.radio_rgbnoise.caption
 msgid "RGB noise"
 msgid "RGB noise"
@@ -2224,7 +2203,7 @@ msgstr "Annuleren"
 
 
 #: tfobject3d.button_loadtex.caption
 #: tfobject3d.button_loadtex.caption
 msgid "Texture..."
 msgid "Texture..."
-msgstr "Tekstuur..."
+msgstr "Textuur..."
 
 
 #: tfobject3d.button_notex.caption
 #: tfobject3d.button_notex.caption
 msgid "No tex."
 msgid "No tex."
@@ -2237,7 +2216,7 @@ msgstr "OK"
 
 
 #: tfobject3d.caption
 #: tfobject3d.caption
 msgid "3D object"
 msgid "3D object"
-msgstr "3d object"
+msgstr "3D object"
 
 
 #: tfobject3d.checkbox_antialiasing.caption
 #: tfobject3d.checkbox_antialiasing.caption
 msgid "Antialiasing"
 msgid "Antialiasing"
@@ -2282,7 +2261,7 @@ msgstr "Belichting normalen :"
 
 
 #: tfobject3d.label_lights.caption
 #: tfobject3d.label_lights.caption
 msgid "Lights :"
 msgid "Lights :"
-msgstr "Lichten:"
+msgstr "Lichtbronnen :"
 
 
 #: tfobject3d.label_materials.caption
 #: tfobject3d.label_materials.caption
 msgctxt "tfobject3d.label_materials.caption"
 msgctxt "tfobject3d.label_materials.caption"
@@ -2311,7 +2290,7 @@ msgstr "Zoomen"
 
 
 #: tfobject3d.lights.caption
 #: tfobject3d.lights.caption
 msgid "Lights"
 msgid "Lights"
-msgstr "Lichten"
+msgstr "Lichtbronnen"
 
 
 #: tfobject3d.materials.caption
 #: tfobject3d.materials.caption
 msgid "Materials"
 msgid "Materials"
@@ -2360,7 +2339,7 @@ msgstr "Kleur"
 
 
 #: tfphongfilter.groupbox_color1.caption
 #: tfphongfilter.groupbox_color1.caption
 msgid "Altitude map"
 msgid "Altitude map"
-msgstr "Hoogte map"
+msgstr "Hoogtekaart"
 
 
 #: tfphongfilter.label_altitude.caption
 #: tfphongfilter.label_altitude.caption
 msgid "Global altitude :"
 msgid "Global altitude :"
@@ -2455,7 +2434,7 @@ msgstr "OK"
 #: tfposterize.caption
 #: tfposterize.caption
 msgctxt "tfposterize.caption"
 msgctxt "tfposterize.caption"
 msgid "Posterize"
 msgid "Posterize"
-msgstr "Posterize"
+msgstr "Posterizeren"
 
 
 #: tfposterize.checkbox_bylightness.caption
 #: tfposterize.checkbox_bylightness.caption
 msgid "By lightness"
 msgid "By lightness"
@@ -2577,7 +2556,7 @@ msgstr "Radiale vervaging"
 #: tfradialblur.label_radius.caption
 #: tfradialblur.label_radius.caption
 msgctxt "tfradialblur.label_radius.caption"
 msgctxt "tfradialblur.label_radius.caption"
 msgid "Radius :"
 msgid "Radius :"
-msgstr "Radius :"
+msgstr "Straal :"
 
 
 #: tfrain.button_cancel.caption
 #: tfrain.button_cancel.caption
 msgctxt "tfrain.button_cancel.caption"
 msgctxt "tfrain.button_cancel.caption"
@@ -2657,7 +2636,7 @@ msgstr "Dithering"
 
 
 #: tfsaveoption.checkbox_lossless.caption
 #: tfsaveoption.checkbox_lossless.caption
 msgid "Lossless"
 msgid "Lossless"
-msgstr ""
+msgstr "Zonder verlies"
 
 
 #: tfsaveoption.label1.caption
 #: tfsaveoption.label1.caption
 msgid "Quality:"
 msgid "Quality:"
@@ -2784,7 +2763,7 @@ msgstr "Hoek :"
 #: tftwirl.label_radius.caption
 #: tftwirl.label_radius.caption
 msgctxt "tftwirl.label_radius.caption"
 msgctxt "tftwirl.label_radius.caption"
 msgid "Radius :"
 msgid "Radius :"
-msgstr "Radius :"
+msgstr "Straal :"
 
 
 #: tfwavedisplacement.button_cancel.caption
 #: tfwavedisplacement.button_cancel.caption
 msgctxt "tfwavedisplacement.button_cancel.caption"
 msgctxt "tfwavedisplacement.button_cancel.caption"
@@ -2849,7 +2828,6 @@ msgid "Autodetect"
 msgstr "Automatische detectie"
 msgstr "Automatische detectie"
 
 
 #: uresourcestrings.rsback
 #: uresourcestrings.rsback
-#, fuzzy
 msgctxt "uresourcestrings.rsback"
 msgctxt "uresourcestrings.rsback"
 msgid "Back"
 msgid "Back"
 msgstr "Terug"
 msgstr "Terug"
@@ -2868,7 +2846,7 @@ msgstr "Bitmap"
 
 
 #: uresourcestrings.rsblack
 #: uresourcestrings.rsblack
 msgid "Black"
 msgid "Black"
-msgstr ""
+msgstr "Zwart"
 
 
 #: uresourcestrings.rsblendopnotusedforbackground
 #: uresourcestrings.rsblendopnotusedforbackground
 msgid "The blend operation is applied only if there is a layer underneath"
 msgid "The blend operation is applied only if there is a layer underneath"
@@ -2914,7 +2892,7 @@ msgstr "CD"
 
 
 #: uresourcestrings.rschannels
 #: uresourcestrings.rschannels
 msgid "Channels"
 msgid "Channels"
-msgstr ""
+msgstr "Kanalen"
 
 
 #: uresourcestrings.rsclearpalette
 #: uresourcestrings.rsclearpalette
 msgid "Clear palette"
 msgid "Clear palette"
@@ -2930,11 +2908,13 @@ msgstr "CMD"
 
 
 #: uresourcestrings.rscolordescription
 #: uresourcestrings.rscolordescription
 msgid "Color description: click to type in a color with the keyboard using color names or CSS notation."
 msgid "Color description: click to type in a color with the keyboard using color names or CSS notation."
-msgstr "Kleurbeschrijving: klik om een kleur in te typen met het toetsenbord middels kleurnamen of CSS notatie."
+msgstr ""
+"Kleurbeschrijving: klik om een kleur in te typen met het toetsenbord middels "
+"kleurnamen of CSS notatie."
 
 
 #: uresourcestrings.rscoloroverlay
 #: uresourcestrings.rscoloroverlay
 msgid "Color overlay"
 msgid "Color overlay"
-msgstr ""
+msgstr "Kleur overlay"
 
 
 #: uresourcestrings.rscolors
 #: uresourcestrings.rscolors
 msgctxt "uresourcestrings.rscolors"
 msgctxt "uresourcestrings.rscolors"
@@ -2951,7 +2931,8 @@ msgstr "Weet u zeker dat u deze %1-bestanden uit de container wilt verwijderen?"
 
 
 #: uresourcestrings.rsconfirmmovemultipletotrash
 #: uresourcestrings.rsconfirmmovemultipletotrash
 msgid "Are you sure you want to move these %1 files to the trash?"
 msgid "Are you sure you want to move these %1 files to the trash?"
-msgstr "Weet je zeker dat je deze %1-bestanden naar de prullenbak wilt verplaatsen?"
+msgstr ""
+"Weet je zeker dat je deze %1-bestanden naar de prullenbak wilt verplaatsen?"
 
 
 #: uresourcestrings.rsconfirmmovetotrash
 #: uresourcestrings.rsconfirmmovetotrash
 msgid "Are you sure you want to move this file to the trash?"
 msgid "Are you sure you want to move this file to the trash?"
@@ -2989,7 +2970,7 @@ msgstr "CTRL"
 
 
 #: uresourcestrings.rscurrentlayernotsplit
 #: uresourcestrings.rscurrentlayernotsplit
 msgid "Current layer is not split"
 msgid "Current layer is not split"
-msgstr ""
+msgstr "Huidige laag is niet gesplitst"
 
 
 #: uresourcestrings.rscurvemodehint
 #: uresourcestrings.rscurvemodehint
 msgid "Press S or X to set the curve mode of the last point"
 msgid "Press S or X to set the curve mode of the last point"
@@ -2997,7 +2978,7 @@ msgstr "Druk S of X om de krommingsmodus van het laatste punt in te stellen"
 
 
 #: uresourcestrings.rscyan
 #: uresourcestrings.rscyan
 msgid "Cyan"
 msgid "Cyan"
-msgstr ""
+msgstr "Cyaan"
 
 
 #: uresourcestrings.rsdefaultpalette
 #: uresourcestrings.rsdefaultpalette
 msgid "Default palette"
 msgid "Default palette"
@@ -3021,7 +3002,6 @@ msgid "Dither layer using palette"
 msgstr "Ditherlaag met palet"
 msgstr "Ditherlaag met palet"
 
 
 #: uresourcestrings.rsdonate
 #: uresourcestrings.rsdonate
-#, fuzzy
 msgctxt "uresourcestrings.rsdonate"
 msgctxt "uresourcestrings.rsdonate"
 msgid "Donate..."
 msgid "Donate..."
 msgstr "Doneren..."
 msgstr "Doneren..."
@@ -3032,7 +3012,7 @@ msgstr "Downloaden"
 
 
 #: uresourcestrings.rsdropshadow
 #: uresourcestrings.rsdropshadow
 msgid "Drop shadow"
 msgid "Drop shadow"
-msgstr ""
+msgstr "Slagschaduw"
 
 
 #: uresourcestrings.rsduplicateimage
 #: uresourcestrings.rsduplicateimage
 msgid "Duplicate image"
 msgid "Duplicate image"
@@ -3064,7 +3044,8 @@ msgstr "Einde zonder begin"
 
 
 #: uresourcestrings.rsenterfolderorcontainername
 #: uresourcestrings.rsenterfolderorcontainername
 msgid "Enter name for new folder or container (using RES or LRS extension):"
 msgid "Enter name for new folder or container (using RES or LRS extension):"
-msgstr "Voer naam in voor een nieuwe map of container (met extensie RES of LRS):"
+msgstr ""
+"Voer naam in voor een nieuwe map of container (met extensie RES of LRS):"
 
 
 #: uresourcestrings.rsenterlayername
 #: uresourcestrings.rsenterlayername
 msgid "Enter layer name:"
 msgid "Enter layer name:"
@@ -3159,14 +3140,13 @@ msgid "Fixed"
 msgstr "Vast"
 msgstr "Vast"
 
 
 #: uresourcestrings.rsflattenimage
 #: uresourcestrings.rsflattenimage
-#, fuzzy
 msgctxt "uresourcestrings.rsflattenimage"
 msgctxt "uresourcestrings.rsflattenimage"
 msgid "Flatten image"
 msgid "Flatten image"
 msgstr "Alle lagen samenvoegen"
 msgstr "Alle lagen samenvoegen"
 
 
 #: uresourcestrings.rsfolder
 #: uresourcestrings.rsfolder
 msgid "Folder"
 msgid "Folder"
-msgstr "Folder"
+msgstr "Map"
 
 
 #: uresourcestrings.rsfolderorcontaineralreadyexists
 #: uresourcestrings.rsfolderorcontaineralreadyexists
 msgid "Folder or container already exists."
 msgid "Folder or container already exists."
@@ -3178,7 +3158,7 @@ msgstr "De volgende fouten zijn opgetreden:"
 
 
 #: uresourcestrings.rsfractaltree
 #: uresourcestrings.rsfractaltree
 msgid "Fractal tree"
 msgid "Fractal tree"
-msgstr ""
+msgstr "Boomfiguur"
 
 
 #: uresourcestrings.rsframes
 #: uresourcestrings.rsframes
 msgid "Frames"
 msgid "Frames"
@@ -3246,7 +3226,6 @@ msgid "Icon size"
 msgstr "Ikoon grootte"
 msgstr "Ikoon grootte"
 
 
 #: uresourcestrings.rsimage
 #: uresourcestrings.rsimage
-#, fuzzy
 msgctxt "uresourcestrings.rsimage"
 msgctxt "uresourcestrings.rsimage"
 msgid "Image"
 msgid "Image"
 msgstr "Afbeelding"
 msgstr "Afbeelding"
@@ -3266,11 +3245,11 @@ msgstr "Informatie"
 
 
 #: uresourcestrings.rsinnerlight
 #: uresourcestrings.rsinnerlight
 msgid "Inner light"
 msgid "Inner light"
-msgstr ""
+msgstr "Inwendig licht"
 
 
 #: uresourcestrings.rsinnershadow
 #: uresourcestrings.rsinnershadow
 msgid "Inner shadow"
 msgid "Inner shadow"
-msgstr ""
+msgstr "Inwendig schaduw"
 
 
 #: uresourcestrings.rsintensity
 #: uresourcestrings.rsintensity
 msgctxt "uresourcestrings.rsintensity"
 msgctxt "uresourcestrings.rsintensity"
@@ -3283,7 +3262,7 @@ msgstr "Interne fout"
 
 
 #: uresourcestrings.rsinvalidangle
 #: uresourcestrings.rsinvalidangle
 msgid "Invalid angle"
 msgid "Invalid angle"
-msgstr ""
+msgstr "Ongeldige hoek"
 
 
 #: uresourcestrings.rsinvalidname
 #: uresourcestrings.rsinvalidname
 msgid "Invalid name"
 msgid "Invalid name"
@@ -3327,7 +3306,7 @@ msgstr "De nieuwste online beschikbare LazPaint versie is"
 
 
 #: uresourcestrings.rslava
 #: uresourcestrings.rslava
 msgid "Lava"
 msgid "Lava"
-msgstr ""
+msgstr "Lava"
 
 
 #: uresourcestrings.rslayer
 #: uresourcestrings.rslayer
 msgctxt "uresourcestrings.rslayer"
 msgctxt "uresourcestrings.rslayer"
@@ -3336,7 +3315,7 @@ msgstr "Laag"
 
 
 #: uresourcestrings.rslayeralreadysplit
 #: uresourcestrings.rslayeralreadysplit
 msgid "Layer already split"
 msgid "Layer already split"
-msgstr ""
+msgstr "Laag is al gesplitst"
 
 
 #: uresourcestrings.rslayeredimage
 #: uresourcestrings.rslayeredimage
 msgid "Layered image"
 msgid "Layered image"
@@ -3344,7 +3323,7 @@ msgstr "Gelaagde afbeelding"
 
 
 #: uresourcestrings.rslayereffect
 #: uresourcestrings.rslayereffect
 msgid "Layer effect"
 msgid "Layer effect"
-msgstr ""
+msgstr "Laageffect"
 
 
 #: uresourcestrings.rslayers
 #: uresourcestrings.rslayers
 msgctxt "uresourcestrings.rslayers"
 msgctxt "uresourcestrings.rslayers"
@@ -3399,11 +3378,11 @@ msgstr "Aantal herhalingen"
 
 
 #: uresourcestrings.rsmagenta
 #: uresourcestrings.rsmagenta
 msgid "Magenta"
 msgid "Magenta"
-msgstr ""
+msgstr "Magenta"
 
 
 #: uresourcestrings.rsmakemonochromatic
 #: uresourcestrings.rsmakemonochromatic
 msgid "Make monochromatic"
 msgid "Make monochromatic"
-msgstr ""
+msgstr "Omzetten in zwart-wit"
 
 
 #: uresourcestrings.rsmakencolorspalettefrombitmap
 #: uresourcestrings.rsmakencolorspalettefrombitmap
 msgid "Make %1-colors palette from image"
 msgid "Make %1-colors palette from image"
@@ -3411,15 +3390,15 @@ msgstr "Maak %1-kleurenpalet van afbeelding"
 
 
 #: uresourcestrings.rsmask
 #: uresourcestrings.rsmask
 msgid "Mask"
 msgid "Mask"
-msgstr ""
+msgstr "Maskeren"
 
 
 #: uresourcestrings.rsmaskfromalphachannel
 #: uresourcestrings.rsmaskfromalphachannel
 msgid "Mask from alpha channel"
 msgid "Mask from alpha channel"
-msgstr ""
+msgstr "Middels alphakanaal maskeren"
 
 
 #: uresourcestrings.rsmerge
 #: uresourcestrings.rsmerge
 msgid "Merge"
 msgid "Merge"
-msgstr ""
+msgstr "Mengen"
 
 
 #: uresourcestrings.rsmergeselection
 #: uresourcestrings.rsmergeselection
 msgid "Do you want to merge selection?"
 msgid "Do you want to merge selection?"
@@ -3431,7 +3410,9 @@ msgstr "Mitchell"
 
 
 #: uresourcestrings.rsmorethanonefile
 #: uresourcestrings.rsmorethanonefile
 msgid "You are trying to open more than one file. How would you like these files to be opened?"
 msgid "You are trying to open more than one file. How would you like these files to be opened?"
-msgstr "U probeert meer dan een bestand te openen. Hoe wilt u dat deze bestanden worden geopend?"
+msgstr ""
+"U probeert meer dan een bestand te openen. Hoe wilt u dat deze bestanden "
+"worden geopend?"
 
 
 #: uresourcestrings.rsmovingorrotatingselection
 #: uresourcestrings.rsmovingorrotatingselection
 msgid "Moving or rotating selection"
 msgid "Moving or rotating selection"
@@ -3456,7 +3437,7 @@ msgstr "Nieuwe afbeelding"
 
 
 #: uresourcestrings.rsnewmask
 #: uresourcestrings.rsnewmask
 msgid "New mask"
 msgid "New mask"
-msgstr ""
+msgstr "Nieuwe maskerlaag"
 
 
 #: uresourcestrings.rsno
 #: uresourcestrings.rsno
 msgid "No"
 msgid "No"
@@ -3484,7 +3465,7 @@ msgstr "Normaal"
 
 
 #: uresourcestrings.rsnotchromaticchannel
 #: uresourcestrings.rsnotchromaticchannel
 msgid "This is not a chromatic channel"
 msgid "This is not a chromatic channel"
-msgstr ""
+msgstr "Huidig kanaal is niet chromatisch"
 
 
 #: uresourcestrings.rsnothingtobedeformed
 #: uresourcestrings.rsnothingtobedeformed
 msgid "There is nothing to be deformed"
 msgid "There is nothing to be deformed"
@@ -3496,7 +3477,9 @@ msgstr "Er is niets om op te halen"
 
 
 #: uresourcestrings.rsnotreasonableformat
 #: uresourcestrings.rsnotreasonableformat
 msgid "It is not reasonable to save such a big image in this file format."
 msgid "It is not reasonable to save such a big image in this file format."
-msgstr "Het is onredelijk om zo'n grote afbeelding in dit bestandsformaat op te slaan."
+msgstr ""
+"Het is onredelijk om zo'n grote afbeelding in dit bestandsformaat op te "
+"slaan."
 
 
 #: uresourcestrings.rsnumber
 #: uresourcestrings.rsnumber
 msgid "№"
 msgid "№"
@@ -3504,7 +3487,7 @@ msgstr "№"
 
 
 #: uresourcestrings.rsokay
 #: uresourcestrings.rsokay
 msgid "Okay"
 msgid "Okay"
-msgstr "Okay"
+msgstr "OK"
 
 
 #: uresourcestrings.rsopacity
 #: uresourcestrings.rsopacity
 msgid "Opacity"
 msgid "Opacity"
@@ -3547,7 +3530,6 @@ msgid "Palette options"
 msgstr "Palet opties"
 msgstr "Palet opties"
 
 
 #: uresourcestrings.rspen
 #: uresourcestrings.rspen
-#, fuzzy
 msgctxt "uresourcestrings.rspen"
 msgctxt "uresourcestrings.rspen"
 msgid "Pen"
 msgid "Pen"
 msgstr "Pen"
 msgstr "Pen"
@@ -3611,7 +3593,6 @@ msgid "Remove color from palette"
 msgstr "Verwijder kleur van palet"
 msgstr "Verwijder kleur van palet"
 
 
 #: uresourcestrings.rsrender
 #: uresourcestrings.rsrender
-#, fuzzy
 msgctxt "uresourcestrings.rsrender"
 msgctxt "uresourcestrings.rsrender"
 msgid "Render"
 msgid "Render"
 msgstr "Renderen"
 msgstr "Renderen"
@@ -3640,7 +3621,7 @@ msgstr "RGB"
 
 
 #: uresourcestrings.rsrightclickfinishshape
 #: uresourcestrings.rsrightclickfinishshape
 msgid "Use RIGHT click to finish shape"
 msgid "Use RIGHT click to finish shape"
-msgstr ""
+msgstr "Gebruik RECHTS klikken om de vorm te finaliseren"
 
 
 #: uresourcestrings.rsrightclickforsource
 #: uresourcestrings.rsrightclickforsource
 msgid "Use RIGHT click to define source"
 msgid "Use RIGHT click to define source"
@@ -3675,7 +3656,6 @@ msgid "Script"
 msgstr "Script"
 msgstr "Script"
 
 
 #: uresourcestrings.rsselectblendoperation
 #: uresourcestrings.rsselectblendoperation
-#, fuzzy
 msgctxt "uresourcestrings.rsselectblendoperation"
 msgctxt "uresourcestrings.rsselectblendoperation"
 msgid "Select blend operation"
 msgid "Select blend operation"
 msgstr "Kies mengoperatie"
 msgstr "Kies mengoperatie"
@@ -3700,15 +3680,15 @@ msgstr "Spline"
 
 
 #: uresourcestrings.rssplitcmyk
 #: uresourcestrings.rssplitcmyk
 msgid "Split CMYK"
 msgid "Split CMYK"
-msgstr ""
+msgstr "Splits CMYK"
 
 
 #: uresourcestrings.rssplithsl
 #: uresourcestrings.rssplithsl
 msgid "Split HSL"
 msgid "Split HSL"
-msgstr ""
+msgstr "Splits HSL"
 
 
 #: uresourcestrings.rssplitrgb
 #: uresourcestrings.rssplitrgb
 msgid "Split RGB"
 msgid "Split RGB"
-msgstr ""
+msgstr "Splits RGB"
 
 
 #: uresourcestrings.rsstoragedevice
 #: uresourcestrings.rsstoragedevice
 msgid "Device"
 msgid "Device"
@@ -3716,13 +3696,12 @@ msgstr "Apparaat"
 
 
 #: uresourcestrings.rsstroke
 #: uresourcestrings.rsstroke
 msgid "Stroke"
 msgid "Stroke"
-msgstr ""
+msgstr "Penkleur"
 
 
 #: uresourcestrings.rstextoutline
 #: uresourcestrings.rstextoutline
-#, fuzzy
 msgctxt "uresourcestrings.rstextoutline"
 msgctxt "uresourcestrings.rstextoutline"
 msgid "Text outline"
 msgid "Text outline"
-msgstr "Progressieve vloedvulling"
+msgstr "Tekstomlijning"
 
 
 #: uresourcestrings.rstexturemapping
 #: uresourcestrings.rstexturemapping
 msgctxt "uresourcestrings.rstexturemapping"
 msgctxt "uresourcestrings.rstexturemapping"
@@ -3731,11 +3710,14 @@ msgstr "Texture mapping"
 
 
 #: uresourcestrings.rstherearenocheckeditems
 #: uresourcestrings.rstherearenocheckeditems
 msgid "There are no checked items. Check some items or add some new ones."
 msgid "There are no checked items. Check some items or add some new ones."
-msgstr "Er zijn geen aangevinkte items. Controleer enkele items of voeg nieuwe toe."
+msgstr ""
+"Er zijn geen aangevinkte items. Controleer enkele items of voeg nieuwe toe."
 
 
 #: uresourcestrings.rsthereisnofilenamegivenforthisfileusesaveas
 #: uresourcestrings.rsthereisnofilenamegivenforthisfileusesaveas
 msgid "There is no file name given for this file. Use \"Save as...\" from the main menu."
 msgid "There is no file name given for this file. Use \"Save as...\" from the main menu."
-msgstr "Er is geen bestandsnaam gegeven voor dit bestand. Gebruik \"Opslaan als…\" in het hoofdmenu."
+msgstr ""
+"Er is geen bestandsnaam gegeven voor dit bestand. Gebruik \"Opslaan als…\" in "
+"het hoofdmenu."
 
 
 #: uresourcestrings.rstodo
 #: uresourcestrings.rstodo
 msgid "To do"
 msgid "To do"
@@ -3743,7 +3725,7 @@ msgstr "Te doen"
 
 
 #: uresourcestrings.rstodoimages
 #: uresourcestrings.rstodoimages
 msgid "Images left: %1"
 msgid "Images left: %1"
-msgstr "Resterende afbeeldingen:% 1"
+msgstr "Resterende afbeeldingen: %1"
 
 
 #: uresourcestrings.rstooloninvisiblelayer
 #: uresourcestrings.rstooloninvisiblelayer
 msgid "Tool cannot be used on an invisible layer"
 msgid "Tool cannot be used on an invisible layer"
@@ -3763,7 +3745,7 @@ msgstr "Te veel vormen in laag"
 
 
 #: uresourcestrings.rstotalimages
 #: uresourcestrings.rstotalimages
 msgid "Total images: %1"
 msgid "Total images: %1"
-msgstr "Totaal aantal afbeeldingen:% 1"
+msgstr "Totaal aantal afbeeldingen: %1"
 
 
 #: uresourcestrings.rstransferselectiontootherlayer
 #: uresourcestrings.rstransferselectiontootherlayer
 msgid "Transfer selection to other layer?"
 msgid "Transfer selection to other layer?"
@@ -3799,15 +3781,15 @@ msgstr "Onbekend origineel"
 
 
 #: uresourcestrings.rsvectoriallayer
 #: uresourcestrings.rsvectoriallayer
 msgid "Vectorial layer"
 msgid "Vectorial layer"
-msgstr "Vector laag"
+msgstr "Vectorlaag"
 
 
 #: uresourcestrings.rsversion
 #: uresourcestrings.rsversion
 msgid "Version"
 msgid "Version"
-msgstr ""
+msgstr "Versie"
 
 
 #: uresourcestrings.rsverticalsize
 #: uresourcestrings.rsverticalsize
 msgid "Vertical size"
 msgid "Vertical size"
-msgstr ""
+msgstr "Verticale afmeting"
 
 
 #: uresourcestrings.rsvisible
 #: uresourcestrings.rsvisible
 msgid "Visibile"
 msgid "Visibile"
@@ -3815,21 +3797,18 @@ msgstr "Zichtbaar"
 
 
 #: uresourcestrings.rsyellow
 #: uresourcestrings.rsyellow
 msgid "Yellow"
 msgid "Yellow"
-msgstr ""
+msgstr "Geel"
 
 
 #: uresourcestrings.rsyes
 #: uresourcestrings.rsyes
 msgid "Yes"
 msgid "Yes"
 msgstr "Ja"
 msgstr "Ja"
 
 
 #: uresourcestrings.rszoomlayerstackin
 #: uresourcestrings.rszoomlayerstackin
-#, fuzzy
 msgctxt "uresourcestrings.rszoomlayerstackin"
 msgctxt "uresourcestrings.rszoomlayerstackin"
 msgid "Zoom layer stack in"
 msgid "Zoom layer stack in"
 msgstr "Inzoomen in lagenoverzicht"
 msgstr "Inzoomen in lagenoverzicht"
 
 
 #: uresourcestrings.rszoomlayerstackout
 #: uresourcestrings.rszoomlayerstackout
-#, fuzzy
 msgctxt "uresourcestrings.rszoomlayerstackout"
 msgctxt "uresourcestrings.rszoomlayerstackout"
 msgid "Zoom layer stack out"
 msgid "Zoom layer stack out"
 msgstr "Uitzoomen uit lagenoverzicht"
 msgstr "Uitzoomen uit lagenoverzicht"
-

+ 78 - 80
lazpaint/release/bin/i18n/lazpaint.pt_BR.po

@@ -113,12 +113,12 @@ msgstr "Categoria de operação de mesclagem"
 #: tfblendop.label_blendopvalue.caption
 #: tfblendop.label_blendopvalue.caption
 msgctxt "tfblendop.label_blendopvalue.caption"
 msgctxt "tfblendop.label_blendopvalue.caption"
 msgid "."
 msgid "."
-msgstr ""
+msgstr "."
 
 
 #: tfblendop.label_kritaover.caption
 #: tfblendop.label_kritaover.caption
 msgctxt "TFBLENDOP.LABEL_KRITAOVER.CAPTION"
 msgctxt "TFBLENDOP.LABEL_KRITAOVER.CAPTION"
 msgid "Krita"
 msgid "Krita"
-msgstr ""
+msgstr "Krita"
 
 
 #: tfblendop.label_kritaover.hint
 #: tfblendop.label_kritaover.hint
 msgid "Blend operations that are available in Krita"
 msgid "Blend operations that are available in Krita"
@@ -180,7 +180,7 @@ msgstr "Use este diretório na inicialização"
 #: tfbrowseimages.label_status.caption
 #: tfbrowseimages.label_status.caption
 msgctxt "tfbrowseimages.label_status.caption"
 msgctxt "tfbrowseimages.label_status.caption"
 msgid "."
 msgid "."
-msgstr ""
+msgstr "."
 
 
 #: tfbrowseimages.toolbutton_createfolderorcontainer.hint
 #: tfbrowseimages.toolbutton_createfolderorcontainer.hint
 msgid "Create folder or container"
 msgid "Create folder or container"
@@ -387,52 +387,52 @@ msgstr "Corrigida a tonalidade e luminosidade"
 #: tffilterfunction.label_aequals.caption
 #: tffilterfunction.label_aequals.caption
 msgctxt "tffilterfunction.label_aequals.caption"
 msgctxt "tffilterfunction.label_aequals.caption"
 msgid "."
 msgid "."
-msgstr ""
+msgstr "."
 
 
 #: tffilterfunction.label_alphaequals.caption
 #: tffilterfunction.label_alphaequals.caption
 msgctxt "tffilterfunction.label_alphaequals.caption"
 msgctxt "tffilterfunction.label_alphaequals.caption"
 msgid "."
 msgid "."
-msgstr ""
+msgstr "."
 
 
 #: tffilterfunction.label_bequals.caption
 #: tffilterfunction.label_bequals.caption
 msgctxt "tffilterfunction.label_bequals.caption"
 msgctxt "tffilterfunction.label_bequals.caption"
 msgid "."
 msgid "."
-msgstr ""
+msgstr "."
 
 
 #: tffilterfunction.label_blueequals.caption
 #: tffilterfunction.label_blueequals.caption
 msgctxt "tffilterfunction.label_blueequals.caption"
 msgctxt "tffilterfunction.label_blueequals.caption"
 msgid "."
 msgid "."
-msgstr ""
+msgstr "."
 
 
 #: tffilterfunction.label_greenequals.caption
 #: tffilterfunction.label_greenequals.caption
 msgctxt "tffilterfunction.label_greenequals.caption"
 msgctxt "tffilterfunction.label_greenequals.caption"
 msgid "."
 msgid "."
-msgstr ""
+msgstr "."
 
 
 #: tffilterfunction.label_hueequals.caption
 #: tffilterfunction.label_hueequals.caption
 msgctxt "tffilterfunction.label_hueequals.caption"
 msgctxt "tffilterfunction.label_hueequals.caption"
 msgid "."
 msgid "."
-msgstr ""
+msgstr "."
 
 
 #: tffilterfunction.label_lequals.caption
 #: tffilterfunction.label_lequals.caption
 msgctxt "tffilterfunction.label_lequals.caption"
 msgctxt "tffilterfunction.label_lequals.caption"
 msgid "."
 msgid "."
-msgstr ""
+msgstr "."
 
 
 #: tffilterfunction.label_lightnessequals.caption
 #: tffilterfunction.label_lightnessequals.caption
 msgctxt "tffilterfunction.label_lightnessequals.caption"
 msgctxt "tffilterfunction.label_lightnessequals.caption"
 msgid "."
 msgid "."
-msgstr ""
+msgstr "."
 
 
 #: tffilterfunction.label_redequals.caption
 #: tffilterfunction.label_redequals.caption
 msgctxt "tffilterfunction.label_redequals.caption"
 msgctxt "tffilterfunction.label_redequals.caption"
 msgid "."
 msgid "."
-msgstr ""
+msgstr "."
 
 
 #: tffilterfunction.label_saturationequals.caption
 #: tffilterfunction.label_saturationequals.caption
 msgctxt "tffilterfunction.label_saturationequals.caption"
 msgctxt "tffilterfunction.label_saturationequals.caption"
 msgid "."
 msgid "."
-msgstr ""
+msgstr "."
 
 
 #: tffilterfunction.label_variables.caption
 #: tffilterfunction.label_variables.caption
 msgid "Variables :"
 msgid "Variables :"
@@ -444,7 +444,7 @@ msgstr "HSL"
 
 
 #: tffilterfunction.tabsheet_lab.caption
 #: tffilterfunction.tabsheet_lab.caption
 msgid "Lab"
 msgid "Lab"
-msgstr ""
+msgstr "Lab"
 
 
 #: tffilterfunction.tabsheet_rgb.caption
 #: tffilterfunction.tabsheet_rgb.caption
 msgctxt "tffilterfunction.tabsheet_rgb.caption"
 msgctxt "tffilterfunction.tabsheet_rgb.caption"
@@ -504,22 +504,22 @@ msgstr "Desmarque arquivos inexistentes"
 #: tfimagelist.stringgrid1.columns[0].title.caption
 #: tfimagelist.stringgrid1.columns[0].title.caption
 msgctxt "tfimagelist.stringgrid1.columns[0].title.caption"
 msgctxt "tfimagelist.stringgrid1.columns[0].title.caption"
 msgid "-"
 msgid "-"
-msgstr ""
+msgstr "-"
 
 
 #: tfimagelist.stringgrid1.columns[1].title.caption
 #: tfimagelist.stringgrid1.columns[1].title.caption
 msgctxt "tfimagelist.stringgrid1.columns[1].title.caption"
 msgctxt "tfimagelist.stringgrid1.columns[1].title.caption"
 msgid "-"
 msgid "-"
-msgstr ""
+msgstr "-"
 
 
 #: tfimagelist.stringgrid1.columns[2].title.caption
 #: tfimagelist.stringgrid1.columns[2].title.caption
 msgctxt "tfimagelist.stringgrid1.columns[2].title.caption"
 msgctxt "tfimagelist.stringgrid1.columns[2].title.caption"
 msgid "-"
 msgid "-"
-msgstr ""
+msgstr "-"
 
 
 #: tfimagelist.stringgrid1.columns[3].title.caption
 #: tfimagelist.stringgrid1.columns[3].title.caption
 msgctxt "tfimagelist.stringgrid1.columns[3].title.caption"
 msgctxt "tfimagelist.stringgrid1.columns[3].title.caption"
 msgid "-"
 msgid "-"
-msgstr ""
+msgstr "-"
 
 
 #: tfimagelist.tbaddfiles.hint
 #: tfimagelist.tbaddfiles.hint
 msgid "Add images to list"
 msgid "Add images to list"
@@ -651,11 +651,11 @@ msgstr "Mudar as cores..."
 
 
 #: tfmain.combobox_arrowend.hint
 #: tfmain.combobox_arrowend.hint
 msgid "Ending arrow"
 msgid "Ending arrow"
-msgstr ""
+msgstr "Seta final"
 
 
 #: tfmain.combobox_arrowstart.hint
 #: tfmain.combobox_arrowstart.hint
 msgid "Starting arrow"
 msgid "Starting arrow"
-msgstr ""
+msgstr "Seta inicial"
 
 
 #: tfmain.combobox_penstyle.hint
 #: tfmain.combobox_penstyle.hint
 msgid "Pen style"
 msgid "Pen style"
@@ -850,11 +850,11 @@ msgstr "Imprimir..."
 
 
 #: tfmain.filequicksave.caption
 #: tfmain.filequicksave.caption
 msgid "Quick save"
 msgid "Quick save"
-msgstr ""
+msgstr "Salvamento rapido"
 
 
 #: tfmain.filequicksave.hint
 #: tfmain.filequicksave.hint
 msgid "Save current file without dialogs"
 msgid "Save current file without dialogs"
-msgstr ""
+msgstr "Salvar arquivo atual sem diálogos"
 
 
 #: tfmain.filequit.hint
 #: tfmain.filequit.hint
 msgctxt "TFMAIN.FILEQUIT.HINT"
 msgctxt "TFMAIN.FILEQUIT.HINT"
@@ -1204,7 +1204,7 @@ msgstr "Diferença de cor"
 #: tfmain.label_currentzoom.caption
 #: tfmain.label_currentzoom.caption
 msgctxt "TFMAIN.LABEL_CURRENTZOOM.CAPTION"
 msgctxt "TFMAIN.LABEL_CURRENTZOOM.CAPTION"
 msgid "%"
 msgid "%"
-msgstr ""
+msgstr "%"
 
 
 #: tfmain.label_currentzoom.hint
 #: tfmain.label_currentzoom.hint
 msgid "Current zoom"
 msgid "Current zoom"
@@ -1228,7 +1228,7 @@ msgstr "Grade"
 #: tfmain.label_gridx.caption
 #: tfmain.label_gridx.caption
 msgctxt "TFMAIN.LABEL_GRIDX.CAPTION"
 msgctxt "TFMAIN.LABEL_GRIDX.CAPTION"
 msgid "x"
 msgid "x"
-msgstr ""
+msgstr "x"
 
 
 #: tfmain.label_outlinewidth.caption
 #: tfmain.label_outlinewidth.caption
 msgctxt "TFMAIN.LABEL_OUTLINEWIDTH.CAPTION"
 msgctxt "TFMAIN.LABEL_OUTLINEWIDTH.CAPTION"
@@ -1939,7 +1939,7 @@ msgstr "Preenchimento progressivo"
 
 
 #: tfmain.tool_textalignbottom.hint
 #: tfmain.tool_textalignbottom.hint
 msgid "Align bottom"
 msgid "Align bottom"
-msgstr ""
+msgstr "Alinhar ao fundo"
 
 
 #: tfmain.tool_textaligncenter.hint
 #: tfmain.tool_textaligncenter.hint
 msgid "Center"
 msgid "Center"
@@ -1951,7 +1951,7 @@ msgstr "Alinhar à esquerda"
 
 
 #: tfmain.tool_textalignmiddle.hint
 #: tfmain.tool_textalignmiddle.hint
 msgid "Center vertically"
 msgid "Center vertically"
-msgstr ""
+msgstr "Centralizar verticalmente"
 
 
 #: tfmain.tool_textalignright.hint
 #: tfmain.tool_textalignright.hint
 msgid "Align right"
 msgid "Align right"
@@ -1959,15 +1959,15 @@ msgstr "Alinhar à direita"
 
 
 #: tfmain.tool_textaligntop.hint
 #: tfmain.tool_textaligntop.hint
 msgid "Align top"
 msgid "Align top"
-msgstr ""
+msgstr "Alinhar ao topo"
 
 
 #: tfmain.tool_textbidirectional.hint
 #: tfmain.tool_textbidirectional.hint
 msgid "Bidirectional"
 msgid "Bidirectional"
-msgstr ""
+msgstr "Bidirecional"
 
 
 #: tfmain.tool_textbold.hint
 #: tfmain.tool_textbold.hint
 msgid "Bold"
 msgid "Bold"
-msgstr ""
+msgstr "Negrito"
 
 
 #: tfmain.tool_textfont.hint
 #: tfmain.tool_textfont.hint
 msgctxt "TFMAIN.TOOL_TEXTFONT.HINT"
 msgctxt "TFMAIN.TOOL_TEXTFONT.HINT"
@@ -1976,11 +1976,11 @@ msgstr "Escolher tipo de letra..."
 
 
 #: tfmain.tool_textitalic.hint
 #: tfmain.tool_textitalic.hint
 msgid "Italic"
 msgid "Italic"
-msgstr ""
+msgstr "Itálico"
 
 
 #: tfmain.tool_textltr.hint
 #: tfmain.tool_textltr.hint
 msgid "Left to right"
 msgid "Left to right"
-msgstr ""
+msgstr "Esquerda para direita"
 
 
 #: tfmain.tool_textoutline.hint
 #: tfmain.tool_textoutline.hint
 msgctxt "TFMAIN.TOOL_TEXTOUTLINE.HINT"
 msgctxt "TFMAIN.TOOL_TEXTOUTLINE.HINT"
@@ -1994,7 +1994,7 @@ msgstr "Texto Phong de sombreamento"
 
 
 #: tfmain.tool_textrtl.hint
 #: tfmain.tool_textrtl.hint
 msgid "Right to left"
 msgid "Right to left"
-msgstr ""
+msgstr "Direita para esquerda"
 
 
 #: tfmain.tool_textshadow.hint
 #: tfmain.tool_textshadow.hint
 msgctxt "TFMAIN.TOOL_TEXTSHADOW.HINT"
 msgctxt "TFMAIN.TOOL_TEXTSHADOW.HINT"
@@ -2003,11 +2003,11 @@ msgstr "Sombra do texto"
 
 
 #: tfmain.tool_textstrikeout.hint
 #: tfmain.tool_textstrikeout.hint
 msgid "Strikeout"
 msgid "Strikeout"
-msgstr ""
+msgstr "Tachado"
 
 
 #: tfmain.tool_textunderline.hint
 #: tfmain.tool_textunderline.hint
 msgid "Underline"
 msgid "Underline"
-msgstr ""
+msgstr "Sublinhado"
 
 
 #: tfmain.viewcolors.caption
 #: tfmain.viewcolors.caption
 msgctxt "TFMAIN.VIEWCOLORS.CAPTION"
 msgctxt "TFMAIN.VIEWCOLORS.CAPTION"
@@ -2146,7 +2146,7 @@ msgstr "Nova imagem"
 
 
 #: tfnewimage.combobox_bitdepth.text
 #: tfnewimage.combobox_bitdepth.text
 msgid "32"
 msgid "32"
-msgstr ""
+msgstr "32"
 
 
 #: tfnewimage.label_bitdepth.caption
 #: tfnewimage.label_bitdepth.caption
 msgid "Bit depth :"
 msgid "Bit depth :"
@@ -2353,15 +2353,15 @@ msgstr "Posição de luz :"
 
 
 #: tfphongfilter.radio_mapalpha.caption
 #: tfphongfilter.radio_mapalpha.caption
 msgid "Alpha"
 msgid "Alpha"
-msgstr ""
+msgstr "Alpha"
 
 
 #: tfphongfilter.radio_mapblue.caption
 #: tfphongfilter.radio_mapblue.caption
 msgid "B"
 msgid "B"
-msgstr ""
+msgstr "B"
 
 
 #: tfphongfilter.radio_mapgreen.caption
 #: tfphongfilter.radio_mapgreen.caption
 msgid "G"
 msgid "G"
-msgstr ""
+msgstr "G"
 
 
 #: tfphongfilter.radio_maplightness.caption
 #: tfphongfilter.radio_maplightness.caption
 msgctxt "TFPHONGFILTER.RADIO_MAPLIGHTNESS.CAPTION"
 msgctxt "TFPHONGFILTER.RADIO_MAPLIGHTNESS.CAPTION"
@@ -2374,7 +2374,7 @@ msgstr "Luminosidade linear"
 
 
 #: tfphongfilter.radio_mapred.caption
 #: tfphongfilter.radio_mapred.caption
 msgid "R"
 msgid "R"
-msgstr ""
+msgstr "R"
 
 
 #: tfphongfilter.radio_mapsaturation.caption
 #: tfphongfilter.radio_mapsaturation.caption
 msgctxt "TFPHONGFILTER.RADIO_MAPSATURATION.CAPTION"
 msgctxt "TFPHONGFILTER.RADIO_MAPSATURATION.CAPTION"
@@ -2455,7 +2455,7 @@ msgstr "Prévia"
 #: tfpreviewdialog.lstatus.caption
 #: tfpreviewdialog.lstatus.caption
 msgctxt "tfpreviewdialog.lstatus.caption"
 msgctxt "tfpreviewdialog.lstatus.caption"
 msgid "."
 msgid "."
-msgstr ""
+msgstr "."
 
 
 #: tfprint.button_configureprinter.caption
 #: tfprint.button_configureprinter.caption
 msgid "Configure..."
 msgid "Configure..."
@@ -2494,12 +2494,12 @@ msgstr "Botão:"
 #: tfprint.label_dpix.caption
 #: tfprint.label_dpix.caption
 msgctxt "TFPRINT.LABEL_DPIX.CAPTION"
 msgctxt "TFPRINT.LABEL_DPIX.CAPTION"
 msgid "."
 msgid "."
-msgstr ""
+msgstr "."
 
 
 #: tfprint.label_dpiy.caption
 #: tfprint.label_dpiy.caption
 msgctxt "TFPRINT.LABEL_DPIY.CAPTION"
 msgctxt "TFPRINT.LABEL_DPIY.CAPTION"
 msgid "."
 msgid "."
-msgstr ""
+msgstr "."
 
 
 #: tfprint.label_height.caption
 #: tfprint.label_height.caption
 msgid "Height:"
 msgid "Height:"
@@ -2540,7 +2540,7 @@ msgstr "Lembre-se desta escolha"
 #: tfquestion.label_message.caption
 #: tfquestion.label_message.caption
 msgctxt "tfquestion.label_message.caption"
 msgctxt "tfquestion.label_message.caption"
 msgid "."
 msgid "."
-msgstr ""
+msgstr "."
 
 
 #: tfradialblur.button_cancel.caption
 #: tfradialblur.button_cancel.caption
 msgctxt "TFRADIALBLUR.BUTTON_CANCEL.CAPTION"
 msgctxt "TFRADIALBLUR.BUTTON_CANCEL.CAPTION"
@@ -2643,7 +2643,7 @@ msgstr "Pontilhamento"
 
 
 #: tfsaveoption.checkbox_lossless.caption
 #: tfsaveoption.checkbox_lossless.caption
 msgid "Lossless"
 msgid "Lossless"
-msgstr ""
+msgstr "Sem perdas"
 
 
 #: tfsaveoption.label1.caption
 #: tfsaveoption.label1.caption
 msgid "Quality:"
 msgid "Quality:"
@@ -2651,15 +2651,15 @@ msgstr "Qualidade:"
 
 
 #: tfsaveoption.label_0.caption
 #: tfsaveoption.label_0.caption
 msgid "0"
 msgid "0"
-msgstr ""
+msgstr "0"
 
 
 #: tfsaveoption.label_1.caption
 #: tfsaveoption.label_1.caption
 msgid "100"
 msgid "100"
-msgstr ""
+msgstr "100"
 
 
 #: tfsaveoption.label_50.caption
 #: tfsaveoption.label_50.caption
 msgid "50"
 msgid "50"
-msgstr ""
+msgstr "50"
 
 
 #: tfsaveoption.label_colordepth.caption
 #: tfsaveoption.label_colordepth.caption
 msgid "Color depth:"
 msgid "Color depth:"
@@ -2857,7 +2857,7 @@ msgstr "Bitmap"
 
 
 #: uresourcestrings.rsblack
 #: uresourcestrings.rsblack
 msgid "Black"
 msgid "Black"
-msgstr ""
+msgstr "Preto"
 
 
 #: uresourcestrings.rsblendopnotusedforbackground
 #: uresourcestrings.rsblendopnotusedforbackground
 msgid "The blend operation is applied only if there is a layer underneath"
 msgid "The blend operation is applied only if there is a layer underneath"
@@ -2903,7 +2903,7 @@ msgstr "CD"
 
 
 #: uresourcestrings.rschannels
 #: uresourcestrings.rschannels
 msgid "Channels"
 msgid "Channels"
-msgstr ""
+msgstr "Canais"
 
 
 #: uresourcestrings.rsclearpalette
 #: uresourcestrings.rsclearpalette
 msgid "Clear palette"
 msgid "Clear palette"
@@ -2923,7 +2923,7 @@ msgstr "Descrição cor: clique para digitar uma cor com o teclado usando nomes
 
 
 #: uresourcestrings.rscoloroverlay
 #: uresourcestrings.rscoloroverlay
 msgid "Color overlay"
 msgid "Color overlay"
-msgstr ""
+msgstr "Sobreposição de cores"
 
 
 #: uresourcestrings.rscolors
 #: uresourcestrings.rscolors
 msgctxt "uresourcestrings.rscolors"
 msgctxt "uresourcestrings.rscolors"
@@ -2978,7 +2978,7 @@ msgstr "CTRL"
 
 
 #: uresourcestrings.rscurrentlayernotsplit
 #: uresourcestrings.rscurrentlayernotsplit
 msgid "Current layer is not split"
 msgid "Current layer is not split"
-msgstr ""
+msgstr "A camada atual não está dividida"
 
 
 #: uresourcestrings.rscurvemodehint
 #: uresourcestrings.rscurvemodehint
 msgid "Press S or X to set the curve mode of the last point"
 msgid "Press S or X to set the curve mode of the last point"
@@ -2986,7 +2986,7 @@ msgstr "Pressione S ou X para definir o modo de curva do último ponto"
 
 
 #: uresourcestrings.rscyan
 #: uresourcestrings.rscyan
 msgid "Cyan"
 msgid "Cyan"
-msgstr ""
+msgstr "Ciano"
 
 
 #: uresourcestrings.rsdefaultpalette
 #: uresourcestrings.rsdefaultpalette
 msgid "Default palette"
 msgid "Default palette"
@@ -3021,7 +3021,7 @@ msgstr "Baixar"
 
 
 #: uresourcestrings.rsdropshadow
 #: uresourcestrings.rsdropshadow
 msgid "Drop shadow"
 msgid "Drop shadow"
-msgstr ""
+msgstr "Sombra projetada"
 
 
 #: uresourcestrings.rsduplicateimage
 #: uresourcestrings.rsduplicateimage
 msgid "Duplicate image"
 msgid "Duplicate image"
@@ -3167,7 +3167,7 @@ msgstr "Ocorreram os seguintes erros:"
 
 
 #: uresourcestrings.rsfractaltree
 #: uresourcestrings.rsfractaltree
 msgid "Fractal tree"
 msgid "Fractal tree"
-msgstr ""
+msgstr "Árvore fractal"
 
 
 #: uresourcestrings.rsframes
 #: uresourcestrings.rsframes
 msgid "Frames"
 msgid "Frames"
@@ -3255,11 +3255,11 @@ msgstr "informações"
 
 
 #: uresourcestrings.rsinnerlight
 #: uresourcestrings.rsinnerlight
 msgid "Inner light"
 msgid "Inner light"
-msgstr ""
+msgstr "Luz interior"
 
 
 #: uresourcestrings.rsinnershadow
 #: uresourcestrings.rsinnershadow
 msgid "Inner shadow"
 msgid "Inner shadow"
-msgstr ""
+msgstr "Sombra interior"
 
 
 #: uresourcestrings.rsintensity
 #: uresourcestrings.rsintensity
 msgctxt "uresourcestrings.rsintensity"
 msgctxt "uresourcestrings.rsintensity"
@@ -3272,7 +3272,7 @@ msgstr "Erro interno"
 
 
 #: uresourcestrings.rsinvalidangle
 #: uresourcestrings.rsinvalidangle
 msgid "Invalid angle"
 msgid "Invalid angle"
-msgstr ""
+msgstr "Ângulo inválido"
 
 
 #: uresourcestrings.rsinvalidname
 #: uresourcestrings.rsinvalidname
 msgid "Invalid name"
 msgid "Invalid name"
@@ -3316,7 +3316,7 @@ msgstr "A última versão do LazPaint disponível on-line é"
 
 
 #: uresourcestrings.rslava
 #: uresourcestrings.rslava
 msgid "Lava"
 msgid "Lava"
-msgstr ""
+msgstr "Lava"
 
 
 #: uresourcestrings.rslayer
 #: uresourcestrings.rslayer
 msgctxt "uresourcestrings.rslayer"
 msgctxt "uresourcestrings.rslayer"
@@ -3325,7 +3325,7 @@ msgstr "Camada"
 
 
 #: uresourcestrings.rslayeralreadysplit
 #: uresourcestrings.rslayeralreadysplit
 msgid "Layer already split"
 msgid "Layer already split"
-msgstr ""
+msgstr "Camada já dividida"
 
 
 #: uresourcestrings.rslayeredimage
 #: uresourcestrings.rslayeredimage
 msgid "Layered image"
 msgid "Layered image"
@@ -3333,7 +3333,7 @@ msgstr "Imagem em camadas"
 
 
 #: uresourcestrings.rslayereffect
 #: uresourcestrings.rslayereffect
 msgid "Layer effect"
 msgid "Layer effect"
-msgstr ""
+msgstr "Efeito de camada"
 
 
 #: uresourcestrings.rslayers
 #: uresourcestrings.rslayers
 msgctxt "uresourcestrings.rslayers"
 msgctxt "uresourcestrings.rslayers"
@@ -3388,11 +3388,11 @@ msgstr "Contagem de ciclo"
 
 
 #: uresourcestrings.rsmagenta
 #: uresourcestrings.rsmagenta
 msgid "Magenta"
 msgid "Magenta"
-msgstr ""
+msgstr "Magenta"
 
 
 #: uresourcestrings.rsmakemonochromatic
 #: uresourcestrings.rsmakemonochromatic
 msgid "Make monochromatic"
 msgid "Make monochromatic"
-msgstr ""
+msgstr "Tornar monocromático"
 
 
 #: uresourcestrings.rsmakencolorspalettefrombitmap
 #: uresourcestrings.rsmakencolorspalettefrombitmap
 msgid "Make %1-colors palette from image"
 msgid "Make %1-colors palette from image"
@@ -3400,15 +3400,15 @@ msgstr "Faça paleta de %1 cores da imagem"
 
 
 #: uresourcestrings.rsmask
 #: uresourcestrings.rsmask
 msgid "Mask"
 msgid "Mask"
-msgstr ""
+msgstr "Máscara"
 
 
 #: uresourcestrings.rsmaskfromalphachannel
 #: uresourcestrings.rsmaskfromalphachannel
 msgid "Mask from alpha channel"
 msgid "Mask from alpha channel"
-msgstr ""
+msgstr "Máscara do canal alfa"
 
 
 #: uresourcestrings.rsmerge
 #: uresourcestrings.rsmerge
 msgid "Merge"
 msgid "Merge"
-msgstr ""
+msgstr "Mesclar"
 
 
 #: uresourcestrings.rsmergeselection
 #: uresourcestrings.rsmergeselection
 msgid "Do you want to merge selection?"
 msgid "Do you want to merge selection?"
@@ -3445,7 +3445,7 @@ msgstr "Nova imagem"
 
 
 #: uresourcestrings.rsnewmask
 #: uresourcestrings.rsnewmask
 msgid "New mask"
 msgid "New mask"
-msgstr ""
+msgstr "Nova máscara"
 
 
 #: uresourcestrings.rsno
 #: uresourcestrings.rsno
 msgid "No"
 msgid "No"
@@ -3473,7 +3473,7 @@ msgstr "Normal"
 
 
 #: uresourcestrings.rsnotchromaticchannel
 #: uresourcestrings.rsnotchromaticchannel
 msgid "This is not a chromatic channel"
 msgid "This is not a chromatic channel"
-msgstr ""
+msgstr "Este não é um canal cromático"
 
 
 #: uresourcestrings.rsnothingtobedeformed
 #: uresourcestrings.rsnothingtobedeformed
 msgid "There is nothing to be deformed"
 msgid "There is nothing to be deformed"
@@ -3542,9 +3542,10 @@ msgid "Pen"
 msgstr "Caneta"
 msgstr "Caneta"
 
 
 #: uresourcestrings.rspercent
 #: uresourcestrings.rspercent
+#, fuzzy
 msgctxt "uresourcestrings.rspercent"
 msgctxt "uresourcestrings.rspercent"
 msgid "%"
 msgid "%"
-msgstr ""
+msgstr "%"
 
 
 #: uresourcestrings.rsportait
 #: uresourcestrings.rsportait
 msgid "Portrait"
 msgid "Portrait"
@@ -3560,7 +3561,7 @@ msgstr "Nome predefinido"
 
 
 #: uresourcestrings.rspx
 #: uresourcestrings.rspx
 msgid "px"
 msgid "px"
-msgstr ""
+msgstr "px"
 
 
 #: uresourcestrings.rspythonunexpectedversion
 #: uresourcestrings.rspythonunexpectedversion
 msgid "Expected Python version %1 but %2 found."
 msgid "Expected Python version %1 but %2 found."
@@ -3630,7 +3631,7 @@ msgstr "RGB"
 
 
 #: uresourcestrings.rsrightclickfinishshape
 #: uresourcestrings.rsrightclickfinishshape
 msgid "Use RIGHT click to finish shape"
 msgid "Use RIGHT click to finish shape"
-msgstr ""
+msgstr "Use o botão DIREITO para finalizar a forma"
 
 
 #: uresourcestrings.rsrightclickforsource
 #: uresourcestrings.rsrightclickforsource
 msgid "Use RIGHT click to define source"
 msgid "Use RIGHT click to define source"
@@ -3690,15 +3691,15 @@ msgstr "Ranhura"
 
 
 #: uresourcestrings.rssplitcmyk
 #: uresourcestrings.rssplitcmyk
 msgid "Split CMYK"
 msgid "Split CMYK"
-msgstr ""
+msgstr "Dividir CMYK"
 
 
 #: uresourcestrings.rssplithsl
 #: uresourcestrings.rssplithsl
 msgid "Split HSL"
 msgid "Split HSL"
-msgstr ""
+msgstr "Dividir HSL"
 
 
 #: uresourcestrings.rssplitrgb
 #: uresourcestrings.rssplitrgb
 msgid "Split RGB"
 msgid "Split RGB"
-msgstr ""
+msgstr "Dividir RGB"
 
 
 #: uresourcestrings.rsstoragedevice
 #: uresourcestrings.rsstoragedevice
 msgid "Device"
 msgid "Device"
@@ -3706,10 +3707,9 @@ msgstr "Dispositivo"
 
 
 #: uresourcestrings.rsstroke
 #: uresourcestrings.rsstroke
 msgid "Stroke"
 msgid "Stroke"
-msgstr ""
+msgstr "Traçado"
 
 
 #: uresourcestrings.rstextoutline
 #: uresourcestrings.rstextoutline
-#, fuzzy
 msgctxt "uresourcestrings.rstextoutline"
 msgctxt "uresourcestrings.rstextoutline"
 msgid "Text outline"
 msgid "Text outline"
 msgstr "Contorno de texto"
 msgstr "Contorno de texto"
@@ -3793,11 +3793,11 @@ msgstr "Camada de vetor"
 
 
 #: uresourcestrings.rsversion
 #: uresourcestrings.rsversion
 msgid "Version"
 msgid "Version"
-msgstr ""
+msgstr "Versão"
 
 
 #: uresourcestrings.rsverticalsize
 #: uresourcestrings.rsverticalsize
 msgid "Vertical size"
 msgid "Vertical size"
-msgstr ""
+msgstr "Tamanho vertical"
 
 
 #: uresourcestrings.rsvisible
 #: uresourcestrings.rsvisible
 msgid "Visibile"
 msgid "Visibile"
@@ -3805,20 +3805,18 @@ msgstr "Visível"
 
 
 #: uresourcestrings.rsyellow
 #: uresourcestrings.rsyellow
 msgid "Yellow"
 msgid "Yellow"
-msgstr ""
+msgstr "Amarelo"
 
 
 #: uresourcestrings.rsyes
 #: uresourcestrings.rsyes
 msgid "Yes"
 msgid "Yes"
 msgstr "Sim"
 msgstr "Sim"
 
 
 #: uresourcestrings.rszoomlayerstackin
 #: uresourcestrings.rszoomlayerstackin
-#, fuzzy
 msgctxt "uresourcestrings.rszoomlayerstackin"
 msgctxt "uresourcestrings.rszoomlayerstackin"
 msgid "Zoom layer stack in"
 msgid "Zoom layer stack in"
 msgstr "Aumentar Zoom na camada"
 msgstr "Aumentar Zoom na camada"
 
 
 #: uresourcestrings.rszoomlayerstackout
 #: uresourcestrings.rszoomlayerstackout
-#, fuzzy
 msgctxt "uresourcestrings.rszoomlayerstackout"
 msgctxt "uresourcestrings.rszoomlayerstackout"
 msgid "Zoom layer stack out"
 msgid "Zoom layer stack out"
 msgstr "Diminuir Zoom na Camada"
 msgstr "Diminuir Zoom na Camada"

+ 33 - 33
lazpaint/release/bin/i18n/lazpaint.zh_CN.po

@@ -447,7 +447,7 @@ msgstr "HSL"
 
 
 #: tffilterfunction.tabsheet_lab.caption
 #: tffilterfunction.tabsheet_lab.caption
 msgid "Lab"
 msgid "Lab"
-msgstr ""
+msgstr "Lab"
 
 
 #: tffilterfunction.tabsheet_rgb.caption
 #: tffilterfunction.tabsheet_rgb.caption
 msgctxt "tffilterfunction.tabsheet_rgb.caption"
 msgctxt "tffilterfunction.tabsheet_rgb.caption"
@@ -654,11 +654,11 @@ msgstr "转移颜色..."
 
 
 #: tfmain.combobox_arrowend.hint
 #: tfmain.combobox_arrowend.hint
 msgid "Ending arrow"
 msgid "Ending arrow"
-msgstr ""
+msgstr "结束箭头"
 
 
 #: tfmain.combobox_arrowstart.hint
 #: tfmain.combobox_arrowstart.hint
 msgid "Starting arrow"
 msgid "Starting arrow"
-msgstr ""
+msgstr "开始箭头"
 
 
 #: tfmain.combobox_penstyle.hint
 #: tfmain.combobox_penstyle.hint
 msgid "Pen style"
 msgid "Pen style"
@@ -852,7 +852,7 @@ msgstr "打印..."
 
 
 #: tfmain.filequicksave.caption
 #: tfmain.filequicksave.caption
 msgid "Quick save"
 msgid "Quick save"
-msgstr ""
+msgstr "快速保存"
 
 
 #: tfmain.filequicksave.hint
 #: tfmain.filequicksave.hint
 msgid "Save current file without dialogs"
 msgid "Save current file without dialogs"
@@ -1940,7 +1940,7 @@ msgstr "渐进式填充"
 
 
 #: tfmain.tool_textalignbottom.hint
 #: tfmain.tool_textalignbottom.hint
 msgid "Align bottom"
 msgid "Align bottom"
-msgstr ""
+msgstr "对齐底部"
 
 
 #: tfmain.tool_textaligncenter.hint
 #: tfmain.tool_textaligncenter.hint
 msgid "Center"
 msgid "Center"
@@ -1952,7 +1952,7 @@ msgstr "向左对齐"
 
 
 #: tfmain.tool_textalignmiddle.hint
 #: tfmain.tool_textalignmiddle.hint
 msgid "Center vertically"
 msgid "Center vertically"
-msgstr ""
+msgstr "垂直居中"
 
 
 #: tfmain.tool_textalignright.hint
 #: tfmain.tool_textalignright.hint
 msgid "Align right"
 msgid "Align right"
@@ -1960,15 +1960,15 @@ msgstr "向右对齐"
 
 
 #: tfmain.tool_textaligntop.hint
 #: tfmain.tool_textaligntop.hint
 msgid "Align top"
 msgid "Align top"
-msgstr ""
+msgstr "对齐顶部"
 
 
 #: tfmain.tool_textbidirectional.hint
 #: tfmain.tool_textbidirectional.hint
 msgid "Bidirectional"
 msgid "Bidirectional"
-msgstr ""
+msgstr "双向"
 
 
 #: tfmain.tool_textbold.hint
 #: tfmain.tool_textbold.hint
 msgid "Bold"
 msgid "Bold"
-msgstr ""
+msgstr "粗体"
 
 
 #: tfmain.tool_textfont.hint
 #: tfmain.tool_textfont.hint
 msgctxt "TFMAIN.TOOL_TEXTFONT.HINT"
 msgctxt "TFMAIN.TOOL_TEXTFONT.HINT"
@@ -1977,11 +1977,11 @@ msgstr "选择字体..."
 
 
 #: tfmain.tool_textitalic.hint
 #: tfmain.tool_textitalic.hint
 msgid "Italic"
 msgid "Italic"
-msgstr ""
+msgstr "斜体"
 
 
 #: tfmain.tool_textltr.hint
 #: tfmain.tool_textltr.hint
 msgid "Left to right"
 msgid "Left to right"
-msgstr ""
+msgstr "左到右"
 
 
 #: tfmain.tool_textoutline.hint
 #: tfmain.tool_textoutline.hint
 msgctxt "TFMAIN.TOOL_TEXTOUTLINE.HINT"
 msgctxt "TFMAIN.TOOL_TEXTOUTLINE.HINT"
@@ -1995,7 +1995,7 @@ msgstr "文本高光渲染"
 
 
 #: tfmain.tool_textrtl.hint
 #: tfmain.tool_textrtl.hint
 msgid "Right to left"
 msgid "Right to left"
-msgstr ""
+msgstr "右到左"
 
 
 #: tfmain.tool_textshadow.hint
 #: tfmain.tool_textshadow.hint
 msgctxt "TFMAIN.TOOL_TEXTSHADOW.HINT"
 msgctxt "TFMAIN.TOOL_TEXTSHADOW.HINT"
@@ -2004,11 +2004,11 @@ msgstr "文本阴影"
 
 
 #: tfmain.tool_textstrikeout.hint
 #: tfmain.tool_textstrikeout.hint
 msgid "Strikeout"
 msgid "Strikeout"
-msgstr ""
+msgstr "删除线"
 
 
 #: tfmain.tool_textunderline.hint
 #: tfmain.tool_textunderline.hint
 msgid "Underline"
 msgid "Underline"
-msgstr ""
+msgstr "下划线"
 
 
 #: tfmain.viewcolors.caption
 #: tfmain.viewcolors.caption
 msgctxt "TFMAIN.VIEWCOLORS.CAPTION"
 msgctxt "TFMAIN.VIEWCOLORS.CAPTION"
@@ -2634,7 +2634,7 @@ msgstr "抖动"
 
 
 #: tfsaveoption.checkbox_lossless.caption
 #: tfsaveoption.checkbox_lossless.caption
 msgid "Lossless"
 msgid "Lossless"
-msgstr ""
+msgstr "无损"
 
 
 #: tfsaveoption.label1.caption
 #: tfsaveoption.label1.caption
 msgid "Quality:"
 msgid "Quality:"
@@ -2846,7 +2846,7 @@ msgstr "位图"
 
 
 #: uresourcestrings.rsblack
 #: uresourcestrings.rsblack
 msgid "Black"
 msgid "Black"
-msgstr ""
+msgstr "黑色的"
 
 
 #: uresourcestrings.rsblendopnotusedforbackground
 #: uresourcestrings.rsblendopnotusedforbackground
 msgid "The blend operation is applied only if there is a layer underneath"
 msgid "The blend operation is applied only if there is a layer underneath"
@@ -2892,7 +2892,7 @@ msgstr "光盘"
 
 
 #: uresourcestrings.rschannels
 #: uresourcestrings.rschannels
 msgid "Channels"
 msgid "Channels"
-msgstr ""
+msgstr "渠道"
 
 
 #: uresourcestrings.rsclearpalette
 #: uresourcestrings.rsclearpalette
 msgid "Clear palette"
 msgid "Clear palette"
@@ -2913,7 +2913,7 @@ msgstr "颜色说明:单击以键入颜色名称或 CSS 表示。"
 
 
 #: uresourcestrings.rscoloroverlay
 #: uresourcestrings.rscoloroverlay
 msgid "Color overlay"
 msgid "Color overlay"
-msgstr ""
+msgstr "颜色叠加"
 
 
 #: uresourcestrings.rscolors
 #: uresourcestrings.rscolors
 msgctxt "uresourcestrings.rscolors"
 msgctxt "uresourcestrings.rscolors"
@@ -2969,7 +2969,7 @@ msgstr "CTRL"
 
 
 #: uresourcestrings.rscurrentlayernotsplit
 #: uresourcestrings.rscurrentlayernotsplit
 msgid "Current layer is not split"
 msgid "Current layer is not split"
-msgstr ""
+msgstr "当前层未拆分"
 
 
 #: uresourcestrings.rscurvemodehint
 #: uresourcestrings.rscurvemodehint
 msgid "Press S or X to set the curve mode of the last point"
 msgid "Press S or X to set the curve mode of the last point"
@@ -2977,7 +2977,7 @@ msgstr "按 ENTER 设置曲线最后一个点"
 
 
 #: uresourcestrings.rscyan
 #: uresourcestrings.rscyan
 msgid "Cyan"
 msgid "Cyan"
-msgstr ""
+msgstr "青色"
 
 
 #: uresourcestrings.rsdefaultpalette
 #: uresourcestrings.rsdefaultpalette
 msgid "Default palette"
 msgid "Default palette"
@@ -3012,7 +3012,7 @@ msgstr "下载"
 
 
 #: uresourcestrings.rsdropshadow
 #: uresourcestrings.rsdropshadow
 msgid "Drop shadow"
 msgid "Drop shadow"
-msgstr ""
+msgstr "阴影"
 
 
 #: uresourcestrings.rsduplicateimage
 #: uresourcestrings.rsduplicateimage
 msgid "Duplicate image"
 msgid "Duplicate image"
@@ -3163,7 +3163,7 @@ msgstr "发生以下错误:"
 
 
 #: uresourcestrings.rsfractaltree
 #: uresourcestrings.rsfractaltree
 msgid "Fractal tree"
 msgid "Fractal tree"
-msgstr ""
+msgstr "分形树"
 
 
 #: uresourcestrings.rsframes
 #: uresourcestrings.rsframes
 msgid "Frames"
 msgid "Frames"
@@ -3314,7 +3314,7 @@ msgstr "最新 LazPaint 版本是"
 
 
 #: uresourcestrings.rslava
 #: uresourcestrings.rslava
 msgid "Lava"
 msgid "Lava"
-msgstr ""
+msgstr "岩浆"
 
 
 #: uresourcestrings.rslayer
 #: uresourcestrings.rslayer
 msgctxt "uresourcestrings.rslayer"
 msgctxt "uresourcestrings.rslayer"
@@ -3331,7 +3331,7 @@ msgstr "分层图像"
 
 
 #: uresourcestrings.rslayereffect
 #: uresourcestrings.rslayereffect
 msgid "Layer effect"
 msgid "Layer effect"
-msgstr ""
+msgstr "图层效果"
 
 
 #: uresourcestrings.rslayers
 #: uresourcestrings.rslayers
 msgctxt "uresourcestrings.rslayers"
 msgctxt "uresourcestrings.rslayers"
@@ -3388,11 +3388,11 @@ msgstr "循环数量"
 
 
 #: uresourcestrings.rsmagenta
 #: uresourcestrings.rsmagenta
 msgid "Magenta"
 msgid "Magenta"
-msgstr ""
+msgstr "品红"
 
 
 #: uresourcestrings.rsmakemonochromatic
 #: uresourcestrings.rsmakemonochromatic
 msgid "Make monochromatic"
 msgid "Make monochromatic"
-msgstr ""
+msgstr "制作单色"
 
 
 #: uresourcestrings.rsmakencolorspalettefrombitmap
 #: uresourcestrings.rsmakencolorspalettefrombitmap
 msgid "Make %1-colors palette from image"
 msgid "Make %1-colors palette from image"
@@ -3400,7 +3400,7 @@ msgstr "从图像生成 %1 颜色调色板"
 
 
 #: uresourcestrings.rsmask
 #: uresourcestrings.rsmask
 msgid "Mask"
 msgid "Mask"
-msgstr ""
+msgstr "图层蒙版"
 
 
 #: uresourcestrings.rsmaskfromalphachannel
 #: uresourcestrings.rsmaskfromalphachannel
 msgid "Mask from alpha channel"
 msgid "Mask from alpha channel"
@@ -3408,7 +3408,7 @@ msgstr ""
 
 
 #: uresourcestrings.rsmerge
 #: uresourcestrings.rsmerge
 msgid "Merge"
 msgid "Merge"
-msgstr ""
+msgstr "合并"
 
 
 #: uresourcestrings.rsmergeselection
 #: uresourcestrings.rsmergeselection
 msgid "Do you want to merge selection?"
 msgid "Do you want to merge selection?"
@@ -3447,7 +3447,7 @@ msgstr "新图像"
 
 
 #: uresourcestrings.rsnewmask
 #: uresourcestrings.rsnewmask
 msgid "New mask"
 msgid "New mask"
-msgstr ""
+msgstr "新图层蒙版"
 
 
 #: uresourcestrings.rsno
 #: uresourcestrings.rsno
 msgid "No"
 msgid "No"
@@ -3712,7 +3712,7 @@ msgstr "设备"
 
 
 #: uresourcestrings.rsstroke
 #: uresourcestrings.rsstroke
 msgid "Stroke"
 msgid "Stroke"
-msgstr ""
+msgstr "描边效果"
 
 
 #: uresourcestrings.rstextoutline
 #: uresourcestrings.rstextoutline
 #, fuzzy
 #, fuzzy
@@ -3799,7 +3799,7 @@ msgstr "矢量图层"
 
 
 #: uresourcestrings.rsversion
 #: uresourcestrings.rsversion
 msgid "Version"
 msgid "Version"
-msgstr ""
+msgstr "版本"
 
 
 #: uresourcestrings.rsverticalsize
 #: uresourcestrings.rsverticalsize
 msgid "Vertical size"
 msgid "Vertical size"
@@ -3807,11 +3807,11 @@ msgstr ""
 
 
 #: uresourcestrings.rsvisible
 #: uresourcestrings.rsvisible
 msgid "Visibile"
 msgid "Visibile"
-msgstr ""
+msgstr "可见的"
 
 
 #: uresourcestrings.rsyellow
 #: uresourcestrings.rsyellow
 msgid "Yellow"
 msgid "Yellow"
-msgstr ""
+msgstr "黄色"
 
 
 #: uresourcestrings.rsyes
 #: uresourcestrings.rsyes
 msgid "Yes"
 msgid "Yes"

+ 15 - 4
lazpaint/release/debian/debian/changelog

@@ -1,3 +1,14 @@
+lazpaint (7.2.1) stable; urgency=low
+
+  * MacOS: adapt quick save shortcut on MacOS
+  * translations: competed German, Portuguese, Chinese, Dutch, Spanish
+  * command line: added "screenshot" command
+  * command line: added "editor" command
+  * text tool: multi click to select word / paragraph
+  * script: fix in Python scripting (dialog.py)
+
+ -- circular <[email protected]>  Sat, 21 Aug 2022 18:50:00 +0100
+
 lazpaint (7.2) stable; urgency=low
 lazpaint (7.2) stable; urgency=low
 
 
   * MacOS: handle right-click on layerstack
   * MacOS: handle right-click on layerstack
@@ -5,7 +16,7 @@ lazpaint (7.2) stable; urgency=low
   * MacOS: avoid key binding conflict with CMD-H
   * MacOS: avoid key binding conflict with CMD-H
   * interface: handle cancel language or icon size change
   * interface: handle cancel language or icon size change
   * interface: restore main form after embedded editor
   * interface: restore main form after embedded editor
-  * interface: rester selection tool after delete
+  * interface: restore selection tool after delete
   * interface: fix shift-arrows in file list
   * interface: fix shift-arrows in file list
   * interface: handle right click on switch color button
   * interface: handle right click on switch color button
   * interface: remember docked toolbox visibility
   * interface: remember docked toolbox visibility
@@ -24,9 +35,9 @@ lazpaint (7.2) stable; urgency=low
   * language: translation of color description
   * language: translation of color description
   * language: completed Russian translation
   * language: completed Russian translation
   * file: prevent saving incorrect filename
   * file: prevent saving incorrect filename
-  * file: handle path in file textbook
+  * file: handle path in file textbox
   * file: generate new filename with number
   * file: generate new filename with number
-  * file: added quick save action (Ctlr-Q shortcut)
+  * file: added quick save action (Ctrl-Q shortcut)
   * file: overwrite prompt when saving palette
   * file: overwrite prompt when saving palette
   * file: experimental support for AVIF format
   * file: experimental support for AVIF format
   * file: show save prompt when drag'n'drop image to the program
   * file: show save prompt when drag'n'drop image to the program
@@ -41,7 +52,7 @@ lazpaint (7.2) stable; urgency=low
   * tools: improved hints timing
   * tools: improved hints timing
   * tools: disambiguation of shortcut keys (Y, K, F and R)
   * tools: disambiguation of shortcut keys (Y, K, F and R)
   * deformation grid tool: handle extreme deformation
   * deformation grid tool: handle extreme deformation
-  * déformation grid tool: ESCAPE to exit tool
+  * deformation grid tool: ESCAPE to exit tool
   * layer perspective tool: change cursor when hovering points
   * layer perspective tool: change cursor when hovering points
   * layer tools: delete current layer with DELETE key
   * layer tools: delete current layer with DELETE key
   * rectangle tool: fixed bug when changing join type
   * rectangle tool: fixed bug when changing join type

+ 1 - 1
lazpaint/release/debian/debian/control

@@ -5,7 +5,7 @@ Maintainer: circular <[email protected]>
 Homepage: https://wiki.freepascal.org/LazPaint
 Homepage: https://wiki.freepascal.org/LazPaint
 Package: lazpaint
 Package: lazpaint
 Architecture: any
 Architecture: any
-Version: 7.2
+Version: 7.2.1
 Depends: ${shlibs:Depends}
 Depends: ${shlibs:Depends}
 Conflicts: lazpaint-gtk2, lazpaint-gtk3, lazpaint-qt4, lazpaint-qt5
 Conflicts: lazpaint-gtk2, lazpaint-gtk3, lazpaint-qt4, lazpaint-qt5
 Description: Image editor with raster and vector layers
 Description: Image editor with raster and vector layers

+ 2 - 2
lazpaint/release/macOS/LazPaint.app/Contents/Info.plist

@@ -19,9 +19,9 @@
     <key>CFBundleSignature</key>
     <key>CFBundleSignature</key>
     <string>lazp</string>
     <string>lazp</string>
     <key>CFBundleShortVersionString</key>
     <key>CFBundleShortVersionString</key>
-    <string>7.2</string>
+    <string>7.2.1</string>
     <key>CFBundleVersion</key>
     <key>CFBundleVersion</key>
-    <string>7.2</string>
+    <string>7.2.1</string>
     <key>CSResourcesFileMapped</key>
     <key>CSResourcesFileMapped</key>
     <true/>
     <true/>
     <key>CFBundleDocumentTypes</key>
     <key>CFBundleDocumentTypes</key>

+ 1 - 1
lazpaint/release/macOS/makedmg.sh

@@ -8,7 +8,7 @@ if ! [ ${OSTYPE:0:6} = "darwin" ]; then
 fi
 fi
 
 
 appname=LazPaint
 appname=LazPaint
-appversion=7.2
+appversion=7.2.1
 pkgversion=0
 pkgversion=0
 appnamenospaces=lazpaint
 appnamenospaces=lazpaint
 appbundle="$appname.app"
 appbundle="$appname.app"

+ 1 - 1
lazpaint/release/windows/lazpaint.iss

@@ -1,7 +1,7 @@
 #define MyAppName "LazPaint"
 #define MyAppName "LazPaint"
 #define MyAppOutputName "lazpaint"
 #define MyAppOutputName "lazpaint"
 #define MyInstallerSuffix "_setup_win32_win64"
 #define MyInstallerSuffix "_setup_win32_win64"
-#define MyAppVersion "7.2"
+#define MyAppVersion "7.2.1"
 #define MyAppPublisher "Circular, Fabien Wang, Lainz and others"
 #define MyAppPublisher "Circular, Fabien Wang, Lainz and others"
 #define MyAppURL "http://sourceforge.net/projects/lazpaint/"
 #define MyAppURL "http://sourceforge.net/projects/lazpaint/"
 #define MyAppExeName "lazpaint.exe"
 #define MyAppExeName "lazpaint.exe"

BIN
lazpaint/release/windows/libavif.zip


+ 1 - 1
lazpaint/tools/utoolvectorial.pas

@@ -2093,7 +2093,7 @@ begin
     begin
     begin
       shapePt := AffineMatrixInverse(VectorTransform(true))*FLastPos;
       shapePt := AffineMatrixInverse(VectorTransform(true))*FLastPos;
       If Editor.GridActive then shapePt := Editor.SnapToGrid(shapePt, false);
       If Editor.GridActive then shapePt := Editor.SnapToGrid(shapePt, false);
-      FShape.MouseDown(rightBtn, ShiftState, shapePt.X,shapePt.Y, cur, handled);
+      FShape.MouseDown(rightBtn, Editor.ConsecutiveClickCount, ShiftState, shapePt.X,shapePt.Y, cur, handled);
     end;
     end;
     UpdateCursor(cur);
     UpdateCursor(cur);
     if handled then exit
     if handled then exit

+ 159 - 5
lazpaint/ucommandline.pas

@@ -5,13 +5,13 @@ unit UCommandline;
 
 
 interface
 interface
 
 
-uses classes, LazpaintType, uresourcestrings;
+uses classes, LazpaintType, uresourcestrings, LCLStrConsts;
 
 
 {$IFDEF WINDOWS}
 {$IFDEF WINDOWS}
   {$DEFINE SHOW_MANUAL_IN_WINDOW}
   {$DEFINE SHOW_MANUAL_IN_WINDOW}
 {$ENDIF}
 {$ENDIF}
 
 
-const Manual: array[0..64] of string = (
+const Manual: array[0..79] of string = (
 'NAME',
 'NAME',
 '       LazPaint - Image editor',
 '       LazPaint - Image editor',
 '',
 '',
@@ -38,6 +38,17 @@ const Manual: array[0..64] of string = (
 '       -script FILENAME',
 '       -script FILENAME',
 '              runs the specified Python script. It must have  a  ".py"  exten‐',
 '              runs the specified Python script. It must have  a  ".py"  exten‐',
 '              sion.',
 '              sion.',
+'',
+'       -editor default|CONFIGFILE|OPTION1,OPTION2...',
+'              shows the image editor with validate and cancel buttons.  If the',
+'              validate button is used,  the rest of the commands are executed.',
+'              Otherwise the program stops.',
+'',
+'              Examples:',
+'              -editor default',
+'              -editor /Users/me/lazpaintCustom.cfg',
+'              -editor [Window]ColorWindowVisible=0,LayerWindowVisible=0',
+'',
 '       -quit',
 '       -quit',
 '              quits the program even if no output file was  provided.  Can  be',
 '              quits the program even if no output file was  provided.  Can  be',
 '              useful when only running scripts.',
 '              useful when only running scripts.',
@@ -45,6 +56,10 @@ const Manual: array[0..64] of string = (
 '       -new WIDTH,HEIGHT',
 '       -new WIDTH,HEIGHT',
 '              creates an empty image of size WIDTH x HEIGHT.',
 '              creates an empty image of size WIDTH x HEIGHT.',
 '',
 '',
+'       -screenshot SCREEN|X1,Y1,X2,Y2',
+'              takes a screenshot of the screen of index SCREEN  (0 for primary',
+'              monitor) or of specified coordinates.',
+'',
 '       -resample WIDTH,HEIGHT',
 '       -resample WIDTH,HEIGHT',
 '              resamples the image to the size WIDTH x HEIGHT.',
 '              resamples the image to the size WIDTH x HEIGHT.',
 '',
 '',
@@ -84,9 +99,10 @@ function ParamStrUTF8(AIndex: integer): string;
 implementation
 implementation
 
 
 uses
 uses
-  SysUtils, BGRAUTF8, LazFileUtils, BGRABitmap, BGRABitmapTypes, Dialogs, uparse,
-  UImage, UImageAction, ULayerAction, UScripting, UPython, Forms, StdCtrls, Controls,
-  UFileSystem, BGRAIconCursor;
+  SysUtils, BGRAUTF8, LazFileUtils, BGRABitmap, BGRABitmapTypes, BGRALayers, Dialogs, uparse,
+  UImage, UImageAction, ULayerAction, UScripting, UPython, Forms, Controls,
+  UFileSystem, BGRAIconCursor, UGraph
+  {$IFDEF SHOW_MANUAL_IN_WINDOW},StdCtrls{$ENDIF};
 
 
 function ParamStrUTF8(AIndex: integer): string;
 function ParamStrUTF8(AIndex: integer): string;
 begin
 begin
@@ -217,6 +233,140 @@ var
     result := true;
     result := true;
   end;
   end;
 
 
+  function DoScreenshot: boolean;
+  var r: TRect;
+    screenIndex,errPos: integer;
+    invalid: boolean;
+  begin
+    funcParams := SimpleParseFuncParam(CommandStr);
+    if length(funcParams)=1 then
+    begin
+      val(funcParams[0],screenIndex,errPos);
+      if errPos <> 0 then
+      begin
+        instance.ShowError('Screenshot', '"Screenshot" ' + rsExpect1Parameter+CommandStr);
+        errorEncountered := true;
+        exit(false);
+      end;
+      if (screenIndex < 0) or (screenIndex >= Screen.MonitorCount) then
+      begin
+        instance.ShowError('Screenshot', '"Screenshot" ' +
+                                         lclstrconsts.rsListIndexExceedsBounds.Replace('%d', inttostr(screenIndex)));
+        errorEncountered := true;
+        exit(false);
+      end;
+      r := Screen.Monitors[screenIndex].BoundsRect;
+      r := rect(r.Left*CanvasScale, r.Top*CanvasScale,
+                r.Right*CanvasScale, r.Bottom*CanvasScale);
+    end else
+    if length(funcParams)=4 then
+    begin
+      r := rect(0,0,0,0);
+      invalid := false;
+      val(funcParams[0],r.Left,errPos);
+      if errPos <> 0 then invalid := true;
+      val(funcParams[1],r.Top,errPos);
+      if errPos <> 0 then invalid := true;
+      val(funcParams[2],r.Right,errPos);
+      if errPos <> 0 then invalid := true;
+      val(funcParams[3],r.Bottom,errPos);
+      if errPos <> 0 then invalid := true;
+      if invalid then
+      begin
+        instance.ShowError('Screenshot', '"Screenshot" ' + StringReplace(rsExpectNParameters,'N','4',[])+CommandStr);
+        errorEncountered := true;
+        exit(false);
+      end;
+      if (errPos <> 0) or (r.Width <= 0) or (r.Height <= 0) then
+      begin
+        instance.ShowError('New',rsInvalidSizeForNew+IntToStr(r.Width)+'x'+IntToStr(r.Height));
+        errorEncountered := true;
+        exit(false);
+      end;
+    end else
+    begin
+      instance.ShowError('Screenshot', '"Screenshot" ' + StringReplace(rsExpectNParameters,'N','4',[])+CommandStr);
+      errorEncountered := true;
+      exit(false);
+    end;
+    AImageActions.TakeScreenshot(r);
+    result := true;
+  end;
+
+  function MakeConfigFromFuncParam: string;
+  var
+    cfg: TStringList;
+    curSection, newSection, p, param: string;
+  begin
+    cfg := TStringList.Create;
+    curSection := '[General]';
+    cfg.Add(curSection);
+    try
+      for p in funcParams do
+      begin
+        param := p;
+        if param.StartsWith('[') then
+        begin
+          if param.IndexOf(']') <> -1 then
+          begin
+            newSection := param.Substring(0, param.IndexOf(']')+1);
+            param := param.Substring(length(newSection));
+          end else
+          begin
+            newSection := param;
+            param := '';
+          end;
+          if newSection <> curSection then
+          begin
+            curSection := newSection;
+            cfg.Add(curSection);
+          end;
+        end;
+        if param<>'' then
+        begin
+          if param.IndexOf('=') = -1 then
+            raise Exception.Create(SParExpected.Replace('%s', '"="'));
+          cfg.Add(param);
+        end;
+      end;
+    finally
+      result := cfg.Text;
+      cfg.Free;
+    end;
+  end;
+
+  function DoEditor: boolean;
+  var
+    iniStream: TStream;
+    bmp: TBGRALayeredBitmap;
+  begin
+    result := false;
+    funcParams := SimpleParseFuncParam(CommandStr);
+    if (length(funcParams) = 1) and
+       ((ExtractFileExt(funcParams[0])='.ini') or (ExtractFileExt(funcParams[0])='.cfg')) then
+      iniStream := FileManager.CreateFileStream(funcParams[0], fmOpenRead)
+    else if (length(funcParams) = 1) and (funcParams[0] = 'default') then
+      iniStream := TMemoryStream.Create
+    else
+      iniStream := TStringStream.Create(MakeConfigFromFuncParam);
+
+    bmp := instance.Image.CurrentState.GetLayeredBitmapCopy;
+    try
+      if instance.EditBitmap(bmp, iniStream) then
+      begin
+        instance.Image.CurrentState.Assign(bmp, true);
+        result := true;
+      end
+      else
+      begin
+        bmp.Free;
+        quitQuery := true;
+      end;
+    finally
+      FileManager.CancelStreamAndFree(iniStream);
+    end;
+  end;
+
   function NextAsFuncParam: boolean;
   function NextAsFuncParam: boolean;
   begin
   begin
     inc(i);
     inc(i);
@@ -374,6 +524,10 @@ begin
         if lowerCmd = 'resample' then begin if not NextAsFuncParam or not DoResample then exit end else
         if lowerCmd = 'resample' then begin if not NextAsFuncParam or not DoResample then exit end else
         if copy(lowerCmd,1,4)='new(' then begin if not DoNew then exit end else
         if copy(lowerCmd,1,4)='new(' then begin if not DoNew then exit end else
         if lowerCmd = 'new' then begin if not NextAsFuncParam or not DoNew then exit end else
         if lowerCmd = 'new' then begin if not NextAsFuncParam or not DoNew then exit end else
+        if lowerCmd.StartsWith('screenshot(') then begin if not DoScreenShot then exit end else
+        if lowerCmd = 'screenshot' then begin if not NextAsFuncParam or not DoScreenShot then exit end else
+        if lowerCmd.StartsWith('editor(') then begin if not DoEditor then exit end else
+        if lowerCmd = 'editor' then begin if not NextAsFuncParam or not DoEditor then exit end else
         if lowerCmd = 'script' then
         if lowerCmd = 'script' then
         begin
         begin
           enableScript := true;
           enableScript := true;

+ 4 - 1
lazpaint/uparse.pas

@@ -18,7 +18,7 @@ function SimpleParseFuncParam(str: string): arrayOfString;
 implementation
 implementation
 
 
 function SimpleParseFuncParam(str: string): arrayOfString;
 function SimpleParseFuncParam(str: string): arrayOfString;
-var idxOpen,start,cur: integer;
+var idxOpen,start,cur,bracketDepth: integer;
 begin
 begin
     result := nil;
     result := nil;
     idxOpen := pos('(',str);
     idxOpen := pos('(',str);
@@ -27,8 +27,11 @@ begin
     else
     else
       start := idxOpen+1;
       start := idxOpen+1;
     cur := start;
     cur := start;
+    bracketDepth := 0;
     while cur <= length(str) do
     while cur <= length(str) do
     begin
     begin
+       if str[cur] = '(' then inc(bracketDepth) else
+       if (str[cur] = ')') and (bracketDepth > 0) then dec(bracketDepth) else
        if str[cur] in[',',')'] then
        if str[cur] in[',',')'] then
        begin
        begin
          setlength(result,length(result)+1);
          setlength(result,length(result)+1);

+ 1 - 1
lazpaintcontrols/lazpaintcontrols.lpk

@@ -20,7 +20,7 @@
         </Debugging>
         </Debugging>
       </Linking>
       </Linking>
     </CompilerOptions>
     </CompilerOptions>
-    <Version Minor="2"/>
+    <Version Minor="2" Release="1"/>
     <Files Count="13">
     <Files Count="13">
       <Item1>
       <Item1>
         <Filename Value="lctoolbars.pas"/>
         <Filename Value="lctoolbars.pas"/>

+ 4 - 3
lazpaintcontrols/lcvectororiginal.pas

@@ -281,7 +281,7 @@ type
     procedure LoadFromStorage(AStorage: TBGRACustomOriginalStorage); virtual;
     procedure LoadFromStorage(AStorage: TBGRACustomOriginalStorage); virtual;
     procedure SaveToStorage(AStorage: TBGRACustomOriginalStorage); virtual;
     procedure SaveToStorage(AStorage: TBGRACustomOriginalStorage); virtual;
     procedure MouseMove({%H-}Shift: TShiftState; {%H-}X, {%H-}Y: single; var {%H-}ACursor: TOriginalEditorCursor; var {%H-}AHandled: boolean); virtual;
     procedure MouseMove({%H-}Shift: TShiftState; {%H-}X, {%H-}Y: single; var {%H-}ACursor: TOriginalEditorCursor; var {%H-}AHandled: boolean); virtual;
-    procedure MouseDown({%H-}RightButton: boolean; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: single; var {%H-}ACursor: TOriginalEditorCursor; var {%H-}AHandled: boolean); virtual;
+    procedure MouseDown({%H-}RightButton: boolean; {%H-}ClickCount: integer; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: single; var {%H-}ACursor: TOriginalEditorCursor; var {%H-}AHandled: boolean); virtual;
     procedure MouseUp({%H-}RightButton: boolean; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: single; var {%H-}ACursor: TOriginalEditorCursor; var {%H-}AHandled: boolean); virtual;
     procedure MouseUp({%H-}RightButton: boolean; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: single; var {%H-}ACursor: TOriginalEditorCursor; var {%H-}AHandled: boolean); virtual;
     procedure KeyDown({%H-}Shift: TShiftState; {%H-}Key: TSpecialKey; var {%H-}AHandled: boolean); virtual;
     procedure KeyDown({%H-}Shift: TShiftState; {%H-}Key: TSpecialKey; var {%H-}AHandled: boolean); virtual;
     procedure KeyUp({%H-}Shift: TShiftState; {%H-}Key: TSpecialKey; var {%H-}AHandled: boolean); virtual;
     procedure KeyUp({%H-}Shift: TShiftState; {%H-}Key: TSpecialKey; var {%H-}AHandled: boolean); virtual;
@@ -1409,7 +1409,8 @@ begin
   begin
   begin
     ptF := ViewCoordToOriginal(PointF(ViewX,ViewY));
     ptF := ViewCoordToOriginal(PointF(ViewX,ViewY));
     if GridActive then ptF := SnapToGrid(ptF, False);
     if GridActive then ptF := SnapToGrid(ptF, False);
-    with ptF do FOriginal.SelectedShape.MouseDown(RightButton, Shift, X,Y, ACursor, AHandled);
+    with ptF do FOriginal.SelectedShape.MouseDown(RightButton,
+      ConsecutiveClickCount, Shift, X,Y, ACursor, AHandled);
   end;
   end;
 end;
 end;
 
 
@@ -2469,7 +2470,7 @@ begin
   //nothing
   //nothing
 end;
 end;
 
 
-procedure TVectorShape.MouseDown(RightButton: boolean; Shift: TShiftState; X,
+procedure TVectorShape.MouseDown(RightButton: boolean; ClickCount: integer; Shift: TShiftState; X,
   Y: single; var ACursor: TOriginalEditorCursor; var AHandled: boolean);
   Y: single; var ACursor: TOriginalEditorCursor; var AHandled: boolean);
 begin
 begin
   //nothing
   //nothing

+ 2 - 2
lazpaintcontrols/lcvectorpolyshapes.pas

@@ -117,7 +117,7 @@ type
     procedure InsertPoint(AIndex: integer; APoint: TPointF);
     procedure InsertPoint(AIndex: integer; APoint: TPointF);
     function GetPointBounds(AMatrix: TAffineMatrix): TRectF;
     function GetPointBounds(AMatrix: TAffineMatrix): TRectF;
     procedure MouseMove({%H-}Shift: TShiftState; X, Y: single; var {%H-}ACursor: TOriginalEditorCursor; var AHandled: boolean); override;
     procedure MouseMove({%H-}Shift: TShiftState; X, Y: single; var {%H-}ACursor: TOriginalEditorCursor; var AHandled: boolean); override;
-    procedure MouseDown(RightButton: boolean; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: single; var {%H-}ACursor: TOriginalEditorCursor; var AHandled: boolean); override;
+    procedure MouseDown(RightButton: boolean; {%H-}ClickCount: integer; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: single; var {%H-}ACursor: TOriginalEditorCursor; var AHandled: boolean); override;
     procedure KeyDown({%H-}Shift: TShiftState; Key: TSpecialKey; var AHandled: boolean); override;
     procedure KeyDown({%H-}Shift: TShiftState; Key: TSpecialKey; var AHandled: boolean); override;
     procedure KeyUp(Shift: TShiftState; Key: TSpecialKey; var AHandled: boolean); override;
     procedure KeyUp(Shift: TShiftState; Key: TSpecialKey; var AHandled: boolean); override;
     procedure QuickDefine(constref APoint1,APoint2: TPointF); override;
     procedure QuickDefine(constref APoint1,APoint2: TPointF); override;
@@ -979,7 +979,7 @@ begin
 end;
 end;
 
 
 procedure TCustomPolypointShape.MouseDown(RightButton: boolean;
 procedure TCustomPolypointShape.MouseDown(RightButton: boolean;
-  Shift: TShiftState; X, Y: single; var ACursor: TOriginalEditorCursor; var
+  ClickCount: integer; Shift: TShiftState; X, Y: single; var ACursor: TOriginalEditorCursor; var
   AHandled: boolean);
   AHandled: boolean);
 begin
 begin
   FMousePos := PointF(X,Y);
   FMousePos := PointF(X,Y);

+ 3 - 3
lazpaintcontrols/lcvectorrectshapes.pas

@@ -184,7 +184,7 @@ type
     function AppendToSVG(AContent: TSVGContent; ADefs: TSVGDefine): TSVGElement; override;
     function AppendToSVG(AContent: TSVGContent; ADefs: TSVGDefine): TSVGElement; override;
     function GetAlignBounds(const ALayoutRect: TRect; const AMatrix: TAffineMatrix): TRectF; override;
     function GetAlignBounds(const ALayoutRect: TRect; const AMatrix: TAffineMatrix): TRectF; override;
     procedure ConfigureCustomEditor(AEditor: TBGRAOriginalEditor); override;
     procedure ConfigureCustomEditor(AEditor: TBGRAOriginalEditor); override;
-    procedure MouseDown(RightButton: boolean; Shift: TShiftState; X, Y: single; var ACursor: TOriginalEditorCursor; var AHandled: boolean); override;
+    procedure MouseDown(RightButton: boolean; {%H-}ClickCount: integer; Shift: TShiftState; X, Y: single; var ACursor: TOriginalEditorCursor; var AHandled: boolean); override;
     procedure LoadFromStorage(AStorage: TBGRACustomOriginalStorage); override;
     procedure LoadFromStorage(AStorage: TBGRACustomOriginalStorage); override;
     procedure SaveToStorage(AStorage: TBGRACustomOriginalStorage); override;
     procedure SaveToStorage(AStorage: TBGRACustomOriginalStorage); override;
     procedure Render(ADest: TBGRABitmap; AMatrix: TAffineMatrix; ADraft: boolean); overload; override;
     procedure Render(ADest: TBGRABitmap; AMatrix: TAffineMatrix; ADraft: boolean); overload; override;
@@ -1676,10 +1676,10 @@ begin
     TVectorOriginalEditor(AEditor).AddLabel(idxLight, rsLightPosition, taCenter, tlTop);
     TVectorOriginalEditor(AEditor).AddLabel(idxLight, rsLightPosition, taCenter, tlTop);
 end;
 end;
 
 
-procedure TPhongShape.MouseDown(RightButton: boolean; Shift: TShiftState; X,
+procedure TPhongShape.MouseDown(RightButton: boolean; ClickCount: integer; Shift: TShiftState; X,
   Y: single; var ACursor: TOriginalEditorCursor; var AHandled: boolean);
   Y: single; var ACursor: TOriginalEditorCursor; var AHandled: boolean);
 begin
 begin
-  inherited MouseDown(RightButton, Shift, X, Y, ACursor, AHandled);
+  inherited MouseDown(RightButton, ClickCount, Shift, X, Y, ACursor, AHandled);
   if not AHandled then
   if not AHandled then
   begin
   begin
     if RightButton then
     if RightButton then

+ 96 - 9
lazpaintcontrols/lcvectortextshapes.pas

@@ -149,6 +149,8 @@ type
     procedure DeleteTextAfter(ACount: integer);
     procedure DeleteTextAfter(ACount: integer);
     procedure InsertText(ATextUTF8: string);
     procedure InsertText(ATextUTF8: string);
     procedure SelectWithMouse(X,Y: single; AExtend: boolean);
     procedure SelectWithMouse(X,Y: single; AExtend: boolean);
+    procedure SelectWordWithMouse(X,Y: single);
+    procedure SelectParagraphWithMouse(X,Y: single);
     function HasOutline: boolean;
     function HasOutline: boolean;
     procedure InsertUnicodeValue;
     procedure InsertUnicodeValue;
     procedure FillChange(ASender: TObject; var ADiff: TCustomVectorialFillDiff); override;
     procedure FillChange(ASender: TObject; var ADiff: TCustomVectorialFillDiff); override;
@@ -178,7 +180,7 @@ type
     function GetIsSlow(const {%H-}AMatrix: TAffineMatrix): boolean; override;
     function GetIsSlow(const {%H-}AMatrix: TAffineMatrix): boolean; override;
     function GetGenericCost: integer; override;
     function GetGenericCost: integer; override;
     procedure MouseMove({%H-}Shift: TShiftState; {%H-}X, {%H-}Y: single; var {%H-}ACursor: TOriginalEditorCursor; var {%H-}AHandled: boolean); override;
     procedure MouseMove({%H-}Shift: TShiftState; {%H-}X, {%H-}Y: single; var {%H-}ACursor: TOriginalEditorCursor; var {%H-}AHandled: boolean); override;
-    procedure MouseDown({%H-}RightButton: boolean; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: single; var {%H-}ACursor: TOriginalEditorCursor; var {%H-}AHandled: boolean); override;
+    procedure MouseDown({%H-}RightButton: boolean; {%H-}ClickCount: integer; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: single; var {%H-}ACursor: TOriginalEditorCursor; var {%H-}AHandled: boolean); override;
     procedure MouseUp({%H-}RightButton: boolean; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: single; var {%H-}ACursor: TOriginalEditorCursor; var {%H-}AHandled: boolean); override;
     procedure MouseUp({%H-}RightButton: boolean; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: single; var {%H-}ACursor: TOriginalEditorCursor; var {%H-}AHandled: boolean); override;
     procedure KeyDown({%H-}Shift: TShiftState; {%H-}Key: TSpecialKey; var {%H-}AHandled: boolean); override;
     procedure KeyDown({%H-}Shift: TShiftState; {%H-}Key: TSpecialKey; var {%H-}AHandled: boolean); override;
     procedure KeyPress({%H-}UTF8Key: string; var {%H-}AHandled: boolean); override;
     procedure KeyPress({%H-}UTF8Key: string; var {%H-}AHandled: boolean); override;
@@ -188,6 +190,7 @@ type
     function CutSelection: boolean;
     function CutSelection: boolean;
     function PasteSelection: boolean;
     function PasteSelection: boolean;
     function DeleteSelection: boolean;
     function DeleteSelection: boolean;
+    procedure SelectAll;
     function GetAlignBounds(const {%H-}ALayoutRect: TRect; const AMatrix: TAffineMatrix): TRectF; override;
     function GetAlignBounds(const {%H-}ALayoutRect: TRect; const AMatrix: TAffineMatrix): TRectF; override;
     procedure Transform(const AMatrix: TAffineMatrix); override;
     procedure Transform(const AMatrix: TAffineMatrix); override;
     function AllowShearTransform: boolean; override;
     function AllowShearTransform: boolean; override;
@@ -999,6 +1002,14 @@ begin
     result := false;
     result := false;
 end;
 end;
 
 
+procedure TTextShape.SelectAll;
+begin
+  BeginEditingUpdate;
+  FSelStart:= 0;
+  FSelEnd:= GetTextLayout.CharCount;
+  EndEditingUpdate;
+end;
+
 function TTextShape.GetAlignBounds(const ALayoutRect: TRect;
 function TTextShape.GetAlignBounds(const ALayoutRect: TRect;
   const AMatrix: TAffineMatrix): TRectF;
   const AMatrix: TAffineMatrix): TRectF;
 var
 var
@@ -1048,6 +1059,79 @@ begin
   end;
   end;
 end;
 end;
 
 
+procedure TTextShape.SelectWordWithMouse(X, Y: single);
+const letterClasses = [ubcLeftToRight, ubcEuropeanNumber, ubcRightToLeft, ubcArabicLetter, ubcArabicNumber];
+var
+  tl: TBidiTextLayout;
+  function IsInWord(AIndex: integer): boolean;
+  var c: TUTF8Char;
+  begin
+    c := tl.UTF8Char[AIndex];
+    result := GetBidiClassUTF8(@c[1]) in letterClasses;
+  end;
+
+var
+  newPos, paraIndex, startIndex, endIndex: Integer;
+  zoom: Single;
+  untransformed: TAffineMatrix;
+  inWord: boolean;
+begin
+  if UserMode <> vsuEditText then exit;
+  tl := GetTextLayout;
+  zoom := GetTextRenderZoom;
+  untransformed := GetUntransformedMatrix;
+  if not IsAffineMatrixInversible(untransformed) then exit;
+  newPos := tl.GetCharIndexAt(AffineMatrixScale(zoom,zoom)*AffineMatrixInverse(untransformed)*PointF(X,Y), false);
+  if newPos<>-1 then
+  begin
+    paraIndex := tl.GetParagraphAt(newPos);
+    if (newPos < tl.ParagraphStartIndex[paraIndex]) or
+       (newPos >= tl.ParagraphEndIndex[paraIndex]) then exit;
+    startIndex := newPos;
+    endIndex := newPos+1;
+    inWord := IsInWord(newPos);
+    while (startIndex > tl.ParagraphStartIndex[paraIndex])
+      and (IsInWord(startIndex-1) = inWord) do dec(startIndex);
+    while (endIndex < tl.ParagraphEndIndex[paraIndex])
+      and (IsInWord(endIndex) = inWord) do inc(endIndex);
+    if (FSelStart <> startIndex) or
+       (FSelEnd <> endIndex) then
+    begin
+      BeginEditingUpdate;
+      FSelStart := startIndex;
+      FSelEnd:= endIndex;
+      EndEditingUpdate;
+    end;
+  end;
+end;
+
+procedure TTextShape.SelectParagraphWithMouse(X, Y: single);
+var
+  newPos, paraIndex: Integer;
+  tl: TBidiTextLayout;
+  zoom: Single;
+  untransformed: TAffineMatrix;
+begin
+  if UserMode <> vsuEditText then exit;
+  tl := GetTextLayout;
+  zoom := GetTextRenderZoom;
+  untransformed := GetUntransformedMatrix;
+  if not IsAffineMatrixInversible(untransformed) then exit;
+  newPos := tl.GetCharIndexAt(AffineMatrixScale(zoom,zoom)*AffineMatrixInverse(untransformed)*PointF(X,Y), false);
+  if newPos<>-1 then
+  begin
+    paraIndex := tl.GetParagraphAt(newPos);
+    if (FSelStart <> tl.ParagraphStartIndex[paraIndex]) or
+       (FSelEnd <> tl.ParagraphEndIndex[paraIndex]) then
+    begin
+      BeginEditingUpdate;
+      FSelStart := tl.ParagraphStartIndex[paraIndex];
+      FSelEnd:= tl.ParagraphEndIndex[paraIndex];
+      EndEditingUpdate;
+    end;
+  end;
+end;
+
 function TTextShape.HasOutline: boolean;
 function TTextShape.HasOutline: boolean;
 begin
 begin
   result := not OutlineFill.IsFullyTransparent and (OutlineWidth > 0);
   result := not OutlineFill.IsFullyTransparent and (OutlineWidth > 0);
@@ -2126,14 +2210,20 @@ begin
   end;
   end;
 end;
 end;
 
 
-procedure TTextShape.MouseDown(RightButton: boolean; Shift: TShiftState; X,
+procedure TTextShape.MouseDown(RightButton: boolean; ClickCount: integer; Shift: TShiftState; X,
   Y: single; var ACursor: TOriginalEditorCursor; var AHandled: boolean);
   Y: single; var ACursor: TOriginalEditorCursor; var AHandled: boolean);
 begin
 begin
-  inherited MouseDown(RightButton, Shift, X, Y, ACursor, AHandled);
+  inherited MouseDown(RightButton, ClickCount, Shift, X, Y, ACursor, AHandled);
   if not AHandled and not RightButton and PointInShape(PointF(X,Y)) then
   if not AHandled and not RightButton and PointInShape(PointF(X,Y)) then
   begin
   begin
-    FMouseSelecting:= true;
-    SelectWithMouse(X,Y, ssShift in Shift);
+    case ClickCount mod 3 of
+    1: begin
+         FMouseSelecting:= true;
+         SelectWithMouse(X,Y, ssShift in Shift);
+       end;
+    2: SelectWordWithMouse(X, Y);
+    0 {3}: SelectParagraphWithMouse(X, Y)
+    end;
     AHandled:= true;
     AHandled:= true;
   end;
   end;
   if (ACursor = oecDefault) and PointInShape(PointF(X,Y)) then ACursor := oecText;
   if (ACursor = oecDefault) and PointInShape(PointF(X,Y)) then ACursor := oecText;
@@ -2286,10 +2376,7 @@ begin
   end else
   end else
   if (Key = skA) and (ssCtrl in Shift) then
   if (Key = skA) and (ssCtrl in Shift) then
   begin
   begin
-    BeginEditingUpdate;
-    FSelStart:= 0;
-    FSelEnd:= GetTextLayout.CharCount;
-    EndEditingUpdate;
+    SelectAll;
     AHandled := true;
     AHandled := true;
   end;
   end;
 end;
 end;

+ 1 - 1
resources/scripts/lazpaint/dialog.py

@@ -21,7 +21,7 @@ def translate_text(text) -> str:
   return command.send('TranslateText?', Text=text)
   return command.send('TranslateText?', Text=text)
 
 
 def translate_dict(texts) -> dict:
 def translate_dict(texts) -> dict:
-  return dict(zip(texts, dialog.translate_text(texts)))
+  return dict(zip(texts, translate_text(texts)))
 
 
 def get_language() -> str:
 def get_language() -> str:
   return command.send('TranslateGetLanguage?')
   return command.send('TranslateGetLanguage?')

+ 1 - 1
web/config.toml

@@ -5,7 +5,7 @@ disableKinds = ["taxonomyTerm"]
 
 
 [params]
 [params]
   repo = "https://github.com/bgrabitmap/lazpaint/releases/download/"
   repo = "https://github.com/bgrabitmap/lazpaint/releases/download/"
-  version = "7.2"
+  version = "7.2.1"
 
 
 [languages]
 [languages]
   [languages.de]
   [languages.de]