ソースを参照

Merge branch 'dev-lazpaint' of https://github.com/bgrabitmap/lazpaint into dev-lazpaint

Johann 6 年 前
コミット
b9144f7fd6
75 ファイル変更17194 行追加1858 行削除
  1. 3 0
      .gitignore
  2. 2 2
      README.md
  3. 13 0
      commit.sh
  4. 2 1
      lazpaint.logic
  5. 33 19
      lazpaint/dialog/ubrowseimages.pas
  6. 1 0
      lazpaint/dialog/umultiimage.pas
  7. 16 2
      lazpaint/dialog/upreviewdialog.pas
  8. 2 2
      lazpaint/dialog/usaveoption.pas
  9. 76 42
      lazpaint/image/uimage.pas
  10. 90 17
      lazpaint/image/uimageaction.pas
  11. 205 22
      lazpaint/image/uimagediff.pas
  12. 26 1
      lazpaint/image/uimagestate.pas
  13. 12 9
      lazpaint/image/ustatetype.pas
  14. 18 10
      lazpaint/lazpaint.lpi
  15. 25 0
      lazpaint/lazpaint.lpr
  16. 1 1
      lazpaint/lazpaintembeddedpack.lpk
  17. 4 4
      lazpaint/lazpaintinstance.pas
  18. 1 1
      lazpaint/lazpaintmainform.lfm
  19. 89 21
      lazpaint/lazpaintmainform.pas
  20. 4 11
      lazpaint/lazpainttype.pas
  21. 3 4
      lazpaint/maintoolbar.inc
  22. 1207 12
      lazpaint/release/bin/i18n/lazpaint.ar.po
  23. 1208 12
      lazpaint/release/bin/i18n/lazpaint.cs.po
  24. 160 140
      lazpaint/release/bin/i18n/lazpaint.de.po
  25. 1211 12
      lazpaint/release/bin/i18n/lazpaint.es.po
  26. 1203 8
      lazpaint/release/bin/i18n/lazpaint.fi.po
  27. 1227 12
      lazpaint/release/bin/i18n/lazpaint.fr.po
  28. 1208 8
      lazpaint/release/bin/i18n/lazpaint.ja.po
  29. 1208 12
      lazpaint/release/bin/i18n/lazpaint.lv.po
  30. 1210 12
      lazpaint/release/bin/i18n/lazpaint.nl.po
  31. 1330 94
      lazpaint/release/bin/i18n/lazpaint.po
  32. 0 707
      lazpaint/release/bin/i18n/lazpaint.pot
  33. 1211 12
      lazpaint/release/bin/i18n/lazpaint.pt_BR.po
  34. 1202 12
      lazpaint/release/bin/i18n/lazpaint.ru.po
  35. 1203 8
      lazpaint/release/bin/i18n/lazpaint.sv.po
  36. 38 0
      lazpaint/release/changelog
  37. 38 0
      lazpaint/release/debian/linux32/DEBIAN/changelog
  38. 1 1
      lazpaint/release/debian/linux32/DEBIAN/control
  39. 38 0
      lazpaint/release/debian/linux64/DEBIAN/changelog
  40. 1 1
      lazpaint/release/debian/linux64/DEBIAN/control
  41. 47 0
      lazpaint/release/macOS/LazPaint.app/Contents/Info.plist
  42. 0 0
      lazpaint/release/macOS/LazPaint.app/Contents/MacOS/delete.me
  43. 1 0
      lazpaint/release/macOS/LazPaint.app/Contents/PkgInfo
  44. BIN
      lazpaint/release/macOS/LazPaint.app/Contents/Resources/lazpaint.icns
  45. BIN
      lazpaint/release/macOS/background.png
  46. 10 0
      lazpaint/release/macOS/instructions.txt
  47. 30 29
      lazpaint/release/macOS/makedmg.sh
  48. 1 1
      lazpaint/release/stable/latest.txt
  49. 9 9
      lazpaint/release/stable/pad_file.xml
  50. BIN
      lazpaint/release/stable/pad_icon.gif
  51. BIN
      lazpaint/release/stable/pad_screenshot.png
  52. 1 1
      lazpaint/release/windows/lazpaint.iss
  53. 62 57
      lazpaint/tools/utool.pas
  54. 33 21
      lazpaint/tools/utoolbasic.pas
  55. 55 8
      lazpaint/tools/utooldeformationgrid.pas
  56. 81 30
      lazpaint/tools/utoollayer.pas
  57. 58 9
      lazpaint/tools/utoolpolygon.pas
  58. 54 16
      lazpaint/tools/utoolselect.pas
  59. 474 253
      lazpaint/tools/utoolvectorial.pas
  60. 15 12
      lazpaint/uchoosecolor.pas
  61. 104 74
      lazpaint/uclipboard.pas
  62. 143 17
      lazpaint/ufilesystem.pas
  63. 131 25
      lazpaint/uimagepreview.pas
  64. 8 1
      lazpaint/uimageview.pas
  65. 9 8
      lazpaint/ulayerstack.pas
  66. 1 1
      lazpaint/umenu.pas
  67. 9 4
      lazpaint/uresourcestrings.pas
  68. 22 0
      lazpaint/uscripting.pas
  69. 7 3
      lazpaint/utiff.pas
  70. 17 7
      lazpaintcontrols/lcvectorclipboard.pas
  71. 12 1
      lazpaintcontrols/lcvectorialfill.pas
  72. 61 7
      lazpaintcontrols/lcvectororiginal.pas
  73. 37 9
      lazpaintcontrols/lcvectorpolyshapes.pas
  74. 159 22
      lazpaintcontrols/lcvectorrectshapes.pas
  75. 13 1
      lazpaintcontrols/lcvectortextshapes.pas

+ 3 - 0
.gitignore

@@ -32,3 +32,6 @@ lazpaint/tools/backup/
 lazpaint/image/backup/
 
 lazpaint/dialog/backup/
+.DS_Store
+lazpaint/release/bin/lazpaint.app
+lazpaint/release/macOS/*.dmg

+ 2 - 2
README.md

@@ -2,9 +2,9 @@
 Image editor, like PaintBrush or Paint.Net, written in Lazarus (Free Pascal). Uses BGRABitmap library.
 
 # Download
-[Download LazPaint 6.4.1](https://github.com/bgrabitmap/lazpaint/releases/tag/v6.4.1) for Windows, Mac and Linux.
+[Download LazPaint](https://github.com/bgrabitmap/lazpaint/releases) for Windows, Mac and Linux.
 
-[Download LazPaint 6.4.1 Portable](https://framakey.org/Portables/LazPaintPortable) for Windows.
+[Download LazPaint Portable](https://framakey.org/Portables/LazPaintPortable) for Windows.
 
 # Official Sites
 [LazPaint Wiki](http://wiki.freepascal.org/LazPaint)

+ 13 - 0
commit.sh

@@ -0,0 +1,13 @@
+#!/bin/bash
+git checkout HEAD~ -- lazpaint/release/bin/i18n/*.po
+git add .
+git status
+echo "Type commit description (or press Enter to cancel):"
+read commitdesc
+if test -z "$commitdesc"
+then
+  git reset --
+else
+  git commit -m "$commitdesc"
+fi
+cd ..

+ 2 - 1
lazpaint.logic

@@ -9,4 +9,5 @@ echo "Don't forget to UPDATE changelog file"
 copy release/changelog release/debian/linux32/DEBIAN/changelog
 copy release/changelog release/debian/linux64/DEBIAN/changelog
 text release/macOS/makedmg.sh "appversion=$(Version)"
-
+bundle release/macOS/LazPaint.app
+copy ../resources/icon/lazpaint.icns release/macOS/LazPaint.app/Contents/Resources/lazpaint.icns

+ 33 - 19
lazpaint/dialog/ubrowseimages.pas

@@ -67,6 +67,9 @@ type
     procedure ToolButton_ViewBigIconClick(Sender: TObject);
     procedure Tool_SelectDriveClick(Sender: TObject);
     function OnDeleteConfirmation({%H-}AForm:TForm; const AFiles: array of string; AContained: boolean): boolean;
+  private
+    function GetCurrentDirectory: string;
+    procedure SetCurrentDirectory(AValue: string);
   private
     FLazPaintInstance: TLazPaintCustomInstance;
     FDefaultExtension: string;
@@ -124,6 +127,7 @@ type
     procedure DeleteSelectedFiles;
     procedure SelectFile(AName: string);
     procedure PreviewValidate({%H-}ASender: TObject);
+    property CurrentDirectory: string read GetCurrentDirectory write SetCurrentDirectory;
   public
     { public declarations }
     ShowRememberStartupDirectory: boolean;
@@ -295,8 +299,7 @@ begin
   BGRAPaintNet.RegisterPaintNetFormat;
   BGRAOpenRaster.RegisterOpenRasterFormat;
 
-  FFileSystems := FileManager.GetFileSystems;
-  if length(FFileSystems)>0 then
+  if FileManager.CanGetFileSystems then
   begin
     Tool_SelectDrive.Visible := true;
   end else
@@ -335,8 +338,8 @@ begin
   if not IsSaveDialog then FFilename:= FPreviewFilename;
   Timer1.Enabled := false;
   vsList.Anchors := [akLeft,akTop,akRight,akBottom];
-  FLastDirectory := DirectoryEdit1.Text;
-  DirectoryEdit1.Text := '';
+  FLastDirectory := CurrentDirectory;
+  CurrentDirectory := '';
   UpdatePreview('');
 end;
 
@@ -403,9 +406,9 @@ begin
   end;
   if FLastBigIcon then ViewBigIcons;
   if (FLastDirectory = '') or not FileManager.IsDirectory(FLastDirectory) then
-    DirectoryEdit1.Text := DefaultPicturesDirectory
+    CurrentDirectory := DefaultPicturesDirectory
   else
-    DirectoryEdit1.Text := FLastDirectory;
+    CurrentDirectory := FLastDirectory;
   Timer1.Enabled := true;
   vsList.Anchors := [akLeft,akTop];
   ShellListView1.SetFocus;
@@ -449,8 +452,8 @@ procedure TFBrowseImages.ListBox_RecentDirsClick(Sender: TObject);
 begin
   if ListBox_RecentDirs.ItemIndex <> -1 then
   begin
-    if ChompPathDelim(DirectoryEdit1.Text) <> ChompPathDelim(ListBox_RecentDirs.Items[ListBox_RecentDirs.ItemIndex]) then
-      DirectoryEdit1.Text := AppendPathDelim(ListBox_RecentDirs.Items[ListBox_RecentDirs.ItemIndex]);
+    if ChompPathDelim(CurrentDirectory) <> ChompPathDelim(ListBox_RecentDirs.Items[ListBox_RecentDirs.ItemIndex]) then
+      CurrentDirectory := AppendPathDelim(ListBox_RecentDirs.Items[ListBox_RecentDirs.ItemIndex]);
   end;
 end;
 
@@ -604,13 +607,13 @@ var
   newName: String;
   newFullname: string;
 begin
-  if pos(PathDelim, DirectoryEdit1.Text) = 0 then exit;
+  if pos(PathDelim, CurrentDirectory) = 0 then exit;
   newName := InputBox(FCreateFolderOrContainerCaption, rsEnterFolderOrContainerName, '');
   if newName = '' then exit;
   if (pos(':',newName) <> 0) or (pos('\',newName) <> 0) then
     MessageDlg(rsInvalidName, mtError, [mbOK], 0) else
   begin
-    newFullname := ChompPathDelim(DirectoryEdit1.Text)+PathDelim+newName;
+    newFullname := ChompPathDelim(CurrentDirectory)+PathDelim+newName;
     if FileManager.IsDirectory(newFullname) then
       MessageDlg(rsFolderOrContainerAlreadyExists, mtInformation, [mbOK], 0)
     else
@@ -667,7 +670,7 @@ end;
 
 procedure TFBrowseImages.Tool_SelectDriveClick(Sender: TObject);
 begin
-  DirectoryEdit1.Text := ':';
+  CurrentDirectory := ':';
 end;
 
 function TFBrowseImages.OnDeleteConfirmation(AForm: TForm;
@@ -688,6 +691,17 @@ begin
     result := true;
 end;
 
+function TFBrowseImages.GetCurrentDirectory: string;
+begin
+  result := DirectoryEdit1.Text;
+end;
+
+procedure TFBrowseImages.SetCurrentDirectory(AValue: string);
+begin
+  DirectoryEdit1.Text := AValue;
+  ResetDirectory(False);
+end;
+
 procedure TFBrowseImages.UpdateToolButtonOpen;
 var chosenFilename: string;
 begin
@@ -838,7 +852,7 @@ var I: integer;
 begin
   ListBox_RecentDirs.ItemIndex := -1;
   for I := 0 to ListBox_RecentDirs.Count-1 do
-    if ChompPathDelim(ListBox_RecentDirs.Items[i]) = ChompPathDelim(DirectoryEdit1.Text) then
+    if ChompPathDelim(ListBox_RecentDirs.Items[i]) = ChompPathDelim(CurrentDirectory) then
     begin
       ListBox_RecentDirs.ItemIndex:= I;
       break;
@@ -936,7 +950,7 @@ begin
     fullName := ShellListView1.ItemFullName[ShellListView1.SelectedIndex];
     if ShellListView1.ItemIsFolder[ShellListView1.SelectedIndex] then
     begin
-      DirectoryEdit1.Text := fullName;
+      CurrentDirectory := fullName;
       InFilenameChange := true;
       Edit_Filename.text := '';
       InFilenameChange := false;
@@ -977,10 +991,10 @@ begin
       ModalResult:= mrOk;
     end;
   end else
-    if IsSaveDialog and (Trim(Edit_Filename.Text)<>'') and (DirectoryEdit1.Text <> ':') and
-      FileManager.IsDirectory(trim(DirectoryEdit1.Text)) then
+    if IsSaveDialog and (Trim(Edit_Filename.Text)<>'') and (CurrentDirectory <> ':') and
+      FileManager.IsDirectory(trim(CurrentDirectory)) then
     begin
-      FFilename:= IncludeTrailingPathDelimiter(trim(DirectoryEdit1.Text))+Edit_Filename.Text;
+      FFilename:= IncludeTrailingPathDelimiter(trim(CurrentDirectory))+Edit_Filename.Text;
       if (ExtractFileExt(FFilename)='') then
       begin
         if (ComboBox_FileExtension.ItemIndex > 0) then
@@ -1004,15 +1018,15 @@ procedure TFBrowseImages.GoDirUp;
 var dir: string;
   itemToSelect: string;
 begin
-  dir := DirectoryEdit1.Text;
+  dir := CurrentDirectory;
   FileManager.RemoveLastPathElement(dir, itemToSelect);
   if dir = '' then
   begin
     FFileSystems:= FileManager.GetFileSystems;
-    if length(FFileSystems)>0 then DirectoryEdit1.Text := ':';
+    if length(FFileSystems)>0 then CurrentDirectory := ':';
     itemToSelect := '';
   end else
-    DirectoryEdit1.Text := dir;
+    CurrentDirectory := dir;
   ShellListView1.SetFocus;
   UpdatePreview('');
   InFilenameChange := true;

+ 1 - 0
lazpaint/dialog/umultiimage.pas

@@ -111,6 +111,7 @@ begin
       result.bmp := images[selectedIndex].bmp.Duplicate(AFormat = ifCur,True) as TBGRABitmap;
       result.bpp := images[selectedIndex].bpp;
       result.frameIndex := images[selectedIndex].frameIndex;
+      result.isDuplicate:= images[selectedIndex].isDuplicate;
     end;
   end;
 end;

+ 16 - 2
lazpaint/dialog/upreviewdialog.pas

@@ -20,9 +20,11 @@ type
     procedure FormDestroy(Sender: TObject);
   private
     FPreview: TImagePreview;
+    function GetDuplicateSourceIndex: integer;
     function GetEntryCount: integer;
     function GetFilename: string;
     function GetLazPaintInstance: TLazPaintCustomInstance;
+    procedure SetDuplicateSourceIndex(AValue: integer);
     procedure SetFilename(AValue: string);
     procedure PreviewValidate(Sender: TObject);
     procedure PreviewEscape(Sender: TObject);
@@ -32,21 +34,23 @@ type
     property Filename: string read GetFilename write SetFilename;
     property LazPaintInstance: TLazPaintCustomInstance read GetLazPaintInstance write SetLazPaintInstance;
     property EntryCount: integer read GetEntryCount;
+    property DuplicateSourceIndex: integer read GetDuplicateSourceIndex write SetDuplicateSourceIndex;
   end;
 
 var
   FPreviewDialog: TFPreviewDialog;
 
 function ShowPreviewDialog(AInstance: TLazPaintCustomInstance; AFilename: string; ATitle: string = '';
-  ASkipIfSingleImage: boolean = false): TImageEntry;
+  ASkipIfSingleImage: boolean = false; ADuplicateSourceIndex: integer = -1): TImageEntry;
 
 implementation
 
 function ShowPreviewDialog(AInstance: TLazPaintCustomInstance; AFilename: string; ATitle: string;
-  ASkipIfSingleImage: boolean): TImageEntry;
+  ASkipIfSingleImage: boolean; ADuplicateSourceIndex: integer): TImageEntry;
 var f: TFPreviewDialog;
 begin
   f := TFPreviewDialog.Create(nil);
+  f.DuplicateSourceIndex := ADuplicateSourceIndex;
   f.LazPaintInstance := AInstance;
   if ATitle <> '' then f.Caption := ATitle;
   f.Filename:= AFilename;
@@ -90,11 +94,21 @@ begin
     result := 0;
 end;
 
+function TFPreviewDialog.GetDuplicateSourceIndex: integer;
+begin
+  result := FPreview.DuplicateEntrySourceIndex;
+end;
+
 function TFPreviewDialog.GetLazPaintInstance: TLazPaintCustomInstance;
 begin
   result := FPreview.LazPaintInstance;
 end;
 
+procedure TFPreviewDialog.SetDuplicateSourceIndex(AValue: integer);
+begin
+  FPreview.DuplicateEntrySourceIndex:= AValue;
+end;
+
 procedure TFPreviewDialog.SetFilename(AValue: string);
 begin
   FPreview.Filename := AValue;

+ 2 - 2
lazpaint/dialog/usaveoption.pas

@@ -845,9 +845,9 @@ begin
   UpdateFileSize;
   DrawHourglass(BGRAPreview.Bitmap);
   BGRAPreview.Repaint;
-  {$IFDEF LINUX}
+  { $IFDEF LINUX}
   Application.ProcessMessages;
-  {$ENDIF}
+  { $ENDIF}
   BGRAPreview.DiscardBitmap;
 end;
 

+ 76 - 42
lazpaint/image/uimage.pas

@@ -182,12 +182,14 @@ type
     procedure MergeLayerOver;
     procedure MoveLayer(AFromIndex,AToIndex: integer);
     procedure RemoveLayer;
+    procedure ClearLayer;
 
     procedure HorizontalFlip(ALayerIndex: integer); overload;
     procedure VerticalFlip(ALayerIndex: integer); overload;
 
     // whole image
-    procedure Assign(const AValue: TBGRABitmap; AOwned: boolean; AUndoable: boolean); overload;
+    procedure Assign(const AValue: TBGRABitmap; AOwned: boolean; AUndoable: boolean;
+                     ACaption: string = ''; AOpacity: byte = 255); overload;
     procedure Assign(const AValue: TBGRALayeredBitmap; AOwned: boolean; AUndoable: boolean); overload;
     procedure Assign(const AValue: TLayeredBitmapAndSelection; AOwned: boolean; AUndoable: boolean); overload;
 
@@ -315,26 +317,41 @@ end;
 
 function TLazPaintImage.MakeCroppedLayer: TBGRABitmap;
 var r: TRect;
+  cropped: TBGRABitmap;
+  ofs: TPoint;
 begin
+  ofs := Point(0,0);
   result := DuplicateBitmap(FCurrentState.SelectionLayer);
   if (result <> nil) and (SelectionMask <> nil) then result.ApplyMask(SelectionMask);
   if (result <> nil) and result.Empty then FreeAndNil(result);
   if result = nil then
   begin
+    ofs := LayerOffset[CurrentLayerIndex];
     result := DuplicateBitmap(GetSelectedImageLayer);
-    if (result <> nil) and (SelectionMask <> nil) then result.ApplyMask(SelectionMask);
+    if (result <> nil) and (SelectionMask <> nil) then
+      result.ApplyMask(SelectionMask, rect(0,0,result.Width,result.Height),
+                       Point(ofs.X,ofs.Y));
   end;
   if result <> nil then
   begin
     if SelectionMask = nil then
       r := result.GetImageBounds
     else
+    begin
       r := SelectionMaskBounds;
+      OffsetRect(r, -ofs.x, -ofs.y);
+    end;
     if IsRectEmpty(r) then
       FreeAndNil(result)
     else
+    begin
       if (r.left <> 0) or (r.top <> 0) or (r.right <> result.Width) or (r.bottom <> result.Height) then
-        BGRAReplace(result, result.GetPart(r));
+      begin
+        cropped := TBGRABitmap.Create(r.Width,r.Height);
+        cropped.PutImage(-r.Left, -r.Top, result, dmSet);
+        BGRAReplace(result, cropped);
+      end;
+    end;
   end;
 end;
 
@@ -465,6 +482,11 @@ end;
 
 procedure TLazPaintImage.UpdateMultiImage(AOutputFilename: string = '');
 begin
+  if not FileManager.FileExists(currentFilenameUTF8) then
+  begin
+    ShowMessage(rsFileNotFound + LineEnding + LineEnding + currentFilenameUTF8);
+    exit;
+  end;
   if IsIconCursor then
     UpdateIconFileUTF8(currentFilenameUTF8, AOutputFilename)
   else if IsTiff then
@@ -557,7 +579,10 @@ begin
     else
     begin
       newFrameIndex := FrameIndex;
-      tiff.Delete(newFrameIndex);
+      if newFrameIndex >= tiff.Count then
+        newFrameIndex := tiff.Count
+      else
+        tiff.Delete(newFrameIndex);
       tiff.Move(addedTiff,0,newFrameIndex);
     end;
 
@@ -956,11 +981,6 @@ begin
         ImageMayChange(ADiff.ChangingBounds)
       else
         ImageMayChangeCompletely;
-  idkChangeLayer:
-      if ADiff.ChangingBoundsDefined then
-        LayerMayChange(CurrentLayerReadOnly, ADiff.ChangingBounds)
-      else
-        LayerMayChangeCompletely(CurrentLayerReadOnly);
   idkChangeSelection:
       if ADiff.ChangingBoundsDefined then
         SelectionMaskMayChange(ADiff.ChangingBounds)
@@ -1669,48 +1689,40 @@ begin
   if Assigned(Zoom) then result := Zoom.Factor else result := 1;
 end;
 
-procedure TLazPaintImage.Assign(const AValue: TBGRABitmap; AOwned: boolean; AUndoable: boolean);
+procedure TLazPaintImage.Assign(const AValue: TBGRABitmap; AOwned: boolean; AUndoable: boolean;
+  ACaption: string; AOpacity: byte);
 var layeredBmp: TBGRALayeredBitmap;
   mask: TBGRABitmap;
 begin
   if not CheckNoAction then exit;
   CursorHotSpot := AValue.HotSpot;
-  if not AUndoable then
-  begin
-    FCurrentState.Assign(AValue, AOwned);
-    FCurrentState.RemoveSelection;
-    LayeredBitmapReplaced;
-    ImageMayChangeCompletely;
-    SelectionMaskMayChangeCompletely;
-    ClearUndo;
-  end else
+  layeredBmp := TBGRALayeredBitmap.Create(AValue.Width,AValue.Height);
+  if AOwned then
   begin
-    layeredBmp := TBGRALayeredBitmap.Create(AValue.Width,AValue.Height);
-    if AOwned then
+    layeredBmp.AddOwnedLayer(AValue);
+    if Assigned(AValue.XorMask) then
     begin
-      layeredBmp.AddOwnedLayer(AValue);
-      if Assigned(AValue.XorMask) then
-      begin
-        mask := AValue.XorMask.Duplicate as TBGRABitmap;
-        mask.AlphaFill(255);
-        mask.ReplaceColor(BGRABlack,BGRAPixelTransparent);
-        layeredBmp.LayerName[layeredBmp.AddOwnedLayer(mask,boXor)] := 'Xor';
-        AValue.DiscardXorMask;
-      end;
-    end
-    else
+      mask := AValue.XorMask.Duplicate as TBGRABitmap;
+      mask.AlphaFill(255);
+      mask.ReplaceColor(BGRABlack,BGRAPixelTransparent);
+      layeredBmp.LayerName[layeredBmp.AddOwnedLayer(mask,boXor)] := 'Xor';
+      AValue.DiscardXorMask;
+    end;
+  end
+  else
+  begin
+    layeredBmp.AddLayer(AValue);
+    if Assigned(AValue.XorMask) then
     begin
-      layeredBmp.AddLayer(AValue);
-      if Assigned(AValue.XorMask) then
-      begin
-        mask := AValue.XorMask.Duplicate as TBGRABitmap;
-        mask.AlphaFill(255);
-        mask.ReplaceColor(BGRABlack,BGRAPixelTransparent);
-        layeredBmp.LayerName[layeredBmp.AddOwnedLayer(mask,boXor)] := 'Xor';
-      end;
+      mask := AValue.XorMask.Duplicate as TBGRABitmap;
+      mask.AlphaFill(255);
+      mask.ReplaceColor(BGRABlack,BGRAPixelTransparent);
+      layeredBmp.LayerName[layeredBmp.AddOwnedLayer(mask,boXor)] := 'Xor';
     end;
-    Assign(layeredBmp,True,AUndoable);
   end;
+  layeredBmp.LayerName[0] := ACaption;
+  layeredBmp.LayerOpacity[0] := AOpacity;
+  Assign(layeredBmp,True,AUndoable);
 end;
 
 procedure TLazPaintImage.Assign(const AValue: TBGRALayeredBitmap;
@@ -1852,10 +1864,22 @@ begin
 end;
 
 procedure TLazPaintImage.MergeLayerOver;
+var
+  remove: TCustomImageDifference;
+  nextId: LongInt;
 begin
+  if CurrentLayerIndex = 0 then exit;
   if not CheckNoAction then exit;
   try
-    AddUndo(FCurrentState.MergerLayerOver(CurrentLayerIndex));
+    if LayerBitmap[CurrentLayerIndex].Empty then
+    begin
+      nextId := LayerId[CurrentLayerIndex-1];
+      remove := FCurrentState.RemoveLayer;
+      if remove is TRemoveLayerStateDifference then
+        TRemoveLayerStateDifference(remove).nextActiveLayerId:= nextId;
+      AddUndo(remove);
+    end else
+      AddUndo(FCurrentState.MergerLayerOver(CurrentLayerIndex));
   except on ex: exception do NotifyException('MergeLayerOver',ex);
   end;
   ImageMayChangeCompletely;
@@ -1901,6 +1925,16 @@ begin
   ImageMayChangeCompletely;
 end;
 
+procedure TLazPaintImage.ClearLayer;
+begin
+  if not CheckNoAction then exit;
+  try
+    AddUndo(FCurrentState.ClearLayer);
+  except on ex: exception do NotifyException('ClearLayer',ex);
+  end;
+  ImageMayChangeCompletely;
+end;
+
 procedure TLazPaintImage.SaveOriginalToStream(AStream: TStream);
 begin
   FCurrentState.LayeredBitmap.SaveOriginalToStream(

+ 90 - 17
lazpaint/image/uimageaction.pas

@@ -30,7 +30,8 @@ type
     function SmartZoom3: boolean;
     procedure Undo;
     procedure Redo;
-    procedure SetCurrentBitmap(bmp: TBGRABitmap; AUndoable: boolean);
+    procedure SetCurrentBitmap(bmp: TBGRABitmap; AUndoable: boolean;
+      ACaption: string = ''; AOpacity: byte = 255);
     procedure CropToSelectionAndLayer;
     procedure CropToSelection;
     procedure HorizontalFlip(AOption: TFlipOption);
@@ -274,8 +275,8 @@ end;
 procedure TImageActions.Undo;
 begin
   try
-    if CurrentTool in[ptTextureMapping,ptLayerMapping,ptMoveSelection,ptRotateSelection] then
-      ChooseTool(ptHand);
+    if CurrentTool in[ptMoveSelection,ptRotateSelection] then ChooseTool(ptHand);
+    if ToolManager.ToolProvideCommand(tcFinish) then ToolManager.ToolCommand(tcFinish);
     if image.CanUndo then
     begin
       ToolManager.ToolCloseDontReopen;
@@ -388,7 +389,7 @@ begin
           end;
           FInstance.ShowTopmost(top);
         end;
-        SetCurrentBitmap(partial,true);
+        SetCurrentBitmap(partial,true,image.LayerName[image.CurrentLayerIndex],image.LayerOpacity[image.CurrentLayerIndex]);
       end
       else
         partial.Free;
@@ -401,15 +402,14 @@ end;
 
 procedure TImageActions.CropToSelection;
 var cropped: TLayeredBitmapAndSelection;
-    r: TRect;
+    r, subBounds: TRect;
     i,selectedLayer: integer;
+    ofs: TPoint;
+    tempLayer, flattened: TBGRABitmap;
+    selectionIsRect: Boolean;
+    top: TTopMostInfo;
 begin
   if not image.CheckNoAction then exit;
-  if image.NbLayers = 1 then
-  begin
-    CropToSelectionAndLayer;
-    exit;
-  end;
   try
     if image.SelectionMaskEmpty then
     begin
@@ -421,15 +421,68 @@ begin
       r := image.SelectionMaskBounds;
       if (r.left = 0) and (r.Top = 0) and (r.right = image.width) and (r.Bottom =image.height) then exit;
       cropped := image.MakeLayeredBitmapAndSelectionCopy;
+      BGRAReplace(cropped.selection,cropped.selection.GetPart(r));
+      selectionIsRect := cropped.selection.Equals(BGRAWhite);
+      if cropped.selectionLayer <> nil then BGRAReplace(cropped.selectionLayer,cropped.selectionLayer.GetPart(r));
       selectedLayer := image.CurrentLayerIndex;
       for i := 0 to cropped.layeredBitmap.NbLayers-1 do
       begin
-        cropped.layeredBitmap.LayerBitmap[i].ApplyMask(cropped.selection);
-        cropped.layeredBitmap.SetLayerBitmap(i, cropped.layeredBitmap.LayerBitmap[i].GetPart(r) as TBGRABitmap, true);
+        tempLayer := TBGRABitmap.Create(r.Width,r.Height);
+        if selectionIsRect and (cropped.layeredBitmap.LayerOriginalGuid[i]<>GUID_NULL) and
+          cropped.layeredBitmap.LayerOriginalKnown[i] then
+        begin
+          ofs := cropped.layeredBitmap.LayerOffset[i];
+          cropped.layeredBitmap.LayerOriginalMatrix[i] :=
+             AffineMatrixTranslation(-r.Left, -r.Top)*
+             cropped.layeredBitmap.LayerOriginalMatrix[i];
+          cropped.layeredBitmap.RenderLayerFromOriginal(i);
+        end else
+        begin
+          ofs := cropped.layeredBitmap.LayerOffset[i];
+          tempLayer.PutImage(ofs.x-r.Left,ofs.y-r.Top, cropped.layeredBitmap.LayerBitmap[i], dmSet);
+          tempLayer.ApplyMask(cropped.selection);
+          cropped.layeredBitmap.SetLayerBitmap(i, tempLayer, true);
+          cropped.layeredBitmap.LayerOffset[i] := Point(0,0);
+        end;
+      end;
+      if cropped.selectionLayer = nil then
+      begin
+        FreeAndNil(cropped.selection);
+        if (CurrentTool in [ptMoveSelection,ptRotateSelection]) then
+          ChooseTool(ptHand);
       end;
       cropped.layeredBitmap.SetSize(r.right-r.left,r.Bottom-r.top);
-      BGRAReplace(cropped.selection,cropped.selection.GetPart(r));
-      if cropped.selectionLayer <> nil then BGRAReplace(cropped.selectionLayer,cropped.selectionLayer.GetPart(r));
+      cropped.layeredBitmap.RemoveUnusedOriginals;
+      flattened := cropped.layeredBitmap.ComputeFlatImage;
+      subBounds := flattened.GetImageBounds;
+      flattened.Free;
+      if cropped.selectionLayer<>nil then
+        subBounds := RectUnion(subBounds, cropped.selectionLayer.GetImageBounds);
+      if (subBounds.Left > 0) or (subBounds.Top > 0) or
+        (subBounds.Right < cropped.layeredBitmap.Width) or (subBounds.Bottom < cropped.layeredBitmap.Height) then
+      begin
+        top := FInstance.HideTopmost;
+        case MessageDlg(rsCrop,rsKeepEmptySpace,mtConfirmation,mbYesNo,0) of
+        mrNo: begin
+            for i := 0 to cropped.layeredBitmap.NbLayers-1 do
+            begin
+              if cropped.layeredBitmap.LayerOriginalGuid[i]=GUID_NULL then
+              begin
+                ofs := cropped.layeredBitmap.LayerOffset[i];
+                cropped.layeredBitmap.LayerOffset[i] := Point(ofs.x-subBounds.Left,ofs.y-subBounds.Top);
+              end else
+              begin
+                cropped.layeredBitmap.LayerOriginalMatrix[i] :=
+                  AffineMatrixTranslation(-subBounds.Left,-subBounds.Top)*
+                  cropped.layeredBitmap.LayerOriginalMatrix[i];
+                cropped.layeredBitmap.RenderLayerFromOriginal(i);
+              end;
+            end;
+            cropped.layeredBitmap.SetSize(subBounds.Width, subBounds.Height);
+          end;
+        end;
+        FInstance.ShowTopmost(top);
+      end;
       image.Assign(cropped,true,true);
       image.SetCurrentLayerByIndex(selectedLayer);
     end;
@@ -439,11 +492,12 @@ begin
   end;
 end;
 
-procedure TImageActions.SetCurrentBitmap(bmp: TBGRABitmap; AUndoable : boolean);
+procedure TImageActions.SetCurrentBitmap(bmp: TBGRABitmap; AUndoable : boolean;
+  ACaption: string; AOpacity: byte);
 begin
   ToolManager.ToolCloseDontReopen;
   try
-    image.Assign(bmp,True,AUndoable);
+    image.Assign(bmp,True,AUndoable, ACaption,AOpacity);
   finally
     ToolManager.ToolOpen;
   end;
@@ -962,7 +1016,11 @@ begin
   end;}
   if image.NbLayers < MaxLayersToAdd then
   begin
+    if CurrentTool in[ptMoveLayer,ptRotateLayer,ptZoomLayer,ptLayerMapping,ptTextureMapping,ptDeformation] then
+      ChooseTool(ptHand);
+    ToolManager.ToolCloseDontReopen;
     Image.AddNewLayer;
+    ToolManager.ToolOpen;
     FInstance.ScrollLayerStackOnItem(Image.CurrentLayerIndex);
   end;
 end;
@@ -972,7 +1030,11 @@ function TImageActions.NewLayer(ALayer: TBGRABitmap; AName: string;
 begin
   if image.NbLayers < MaxLayersToAdd then
   begin
+    if CurrentTool in[ptMoveLayer,ptRotateLayer,ptZoomLayer,ptLayerMapping,ptTextureMapping,ptDeformation] then
+      ChooseTool(ptHand);
+    ToolManager.ToolCloseDontReopen;
     Image.AddNewLayer(ALayer, AName, ABlendOp);
+    ToolManager.ToolOpen;
     FInstance.ScrollLayerStackOnItem(Image.CurrentLayerIndex);
     result := true;
   end else
@@ -988,7 +1050,11 @@ function TImageActions.NewLayer(ALayer: TBGRALayerCustomOriginal;
 begin
   if image.NbLayers < MaxLayersToAdd then
   begin
+    if CurrentTool in[ptMoveLayer,ptRotateLayer,ptZoomLayer,ptLayerMapping,ptTextureMapping,ptDeformation] then
+      ChooseTool(ptHand);
+    ToolManager.ToolCloseDontReopen;
     Image.AddNewLayer(ALayer, AName, ABlendOp, AMatrix);
+    ToolManager.ToolOpen;
     FInstance.ScrollLayerStackOnItem(Image.CurrentLayerIndex);
     result := true;
   end else
@@ -1010,9 +1076,11 @@ end;
 
 procedure TImageActions.RasterizeLayer;
 begin
-  if CurrentTool in[ptMoveLayer,ptRotateLayer,ptZoomLayer,ptLayerMapping] then
+  if CurrentTool in[ptMoveLayer,ptRotateLayer,ptZoomLayer,ptLayerMapping,ptTextureMapping,ptDeformation] then
     ChooseTool(ptHand);
+  ToolManager.ToolCloseDontReopen;
   Image.RasterizeLayer;
+  ToolManager.ToolOpen;
   FInstance.ScrollLayerStackOnItem(Image.CurrentLayerIndex);
 end;
 
@@ -1020,6 +1088,7 @@ procedure TImageActions.MergeLayerOver;
 begin
   if (Image.CurrentLayerIndex <> -1) and (image.NbLayers > 1) then
   begin
+    ChooseTool(ptHand);
     Image.MergeLayerOver;
     FInstance.ScrollLayerStackOnItem(Image.CurrentLayerIndex);
   end;
@@ -1031,7 +1100,11 @@ begin
   if (Image.CurrentLayerIndex <> -1) and (Image.NbLayers > 1) then
   begin
     idx := Image.CurrentLayerIndex;
+    if CurrentTool in[ptMoveLayer,ptRotateLayer,ptZoomLayer,ptLayerMapping,ptTextureMapping,ptDeformation] then
+      ChooseTool(ptHand);
+    ToolManager.ToolCloseDontReopen;
     Image.RemoveLayer;
+    ToolManager.ToolOpen;
     FInstance.ScrollLayerStackOnItem(idx);
   end;
 end;

+ 205 - 22
lazpaint/image/uimagediff.pas

@@ -105,8 +105,11 @@ type
   private
     previousOpacity,nextOpacity: byte;
     layerId: integer;
+    layerBounds: TRect;
   protected
     function GetImageDifferenceKind: TImageDifferenceKind; override;
+    function GetChangingBounds: TRect; override;
+    function GetChangingBoundsDefined: boolean; override;
     function GetIsIdentity: boolean; override;
   public
     constructor Create(ADestination: TState; ALayerId: integer; ANewOpacity: byte);
@@ -202,8 +205,11 @@ type
   private
     previousVisible,nextVisible: boolean;
     layerId: integer;
+    layerBounds: TRect;
   protected
     function GetImageDifferenceKind: TImageDifferenceKind; override;
+    function GetChangingBounds: TRect; override;
+    function GetChangingBoundsDefined: boolean; override;
     function GetIsIdentity: boolean; override;
   public
     constructor Create(ADestination: TState; ALayerId: integer; ANewVisible: boolean);
@@ -217,8 +223,11 @@ type
   private
     previousBlendOp,nextBlendOp: TBlendOperation;
     layerId: integer;
+    layerBounds: TRect;
   protected
     function GetImageDifferenceKind: TImageDifferenceKind; override;
+    function GetChangingBounds: TRect; override;
+    function GetChangingBoundsDefined: boolean; override;
     function GetIsIdentity: boolean; override;
   public
     constructor Create(ADestination: TState; ALayerId: integer; ANewBlendOp: TBlendOperation);
@@ -272,8 +281,8 @@ type
 
   TRemoveLayerStateDifference = class(TCustomImageDifference)
   protected
-    content: TStoredLayer;
-    nextActiveLayerId: integer;
+    FContent: TStoredLayer;
+    FNextActiveLayerId: integer;
     function GetImageDifferenceKind: TImageDifferenceKind; override;
   public
     function UsedMemory: int64; override;
@@ -282,6 +291,7 @@ type
     procedure UnapplyTo(AState: TState); override;
     constructor Create(AState: TState);
     destructor Destroy; override;
+    property nextActiveLayerId: integer read FNextActiveLayerId write FNextActiveLayerId;
   end;
 
   { TReplaceLayerByOriginalDifference }
@@ -482,6 +492,8 @@ type
     layerOverIndex: integer;
     layerOverCompressedBackup: TStoredLayer;
     layerUnderCompressedBackup: TStoredLayer;
+    mergeVectorial: boolean;
+    mergeVectorialGuid: TGuid;
     constructor Create(ADestination: TState; ALayerOverIndex: integer);
     function UsedMemory: int64; override;
     function TryCompress: boolean; override;
@@ -703,7 +715,9 @@ begin
   img := AState as TImageState;
   idxOrig := img.LayeredBitmap.IndexOfOriginal(FOriginalGuid);
   if idxOrig<>-1 then
-    FDiff.Apply(img.LayeredBitmap.Original[idxOrig]);
+    FDiff.Apply(img.LayeredBitmap.Original[idxOrig])
+  else
+    raise exception.Create('Cannot find original');
 end;
 
 procedure TVectorOriginalEmbeddedDifference.UnapplyTo(AState: TState);
@@ -715,7 +729,9 @@ begin
   img := AState as TImageState;
   idxOrig := img.LayeredBitmap.IndexOfOriginal(FOriginalGuid);
   if idxOrig<>-1 then
-    FDiff.Unapply(img.LayeredBitmap.Original[idxOrig]);
+    FDiff.Unapply(img.LayeredBitmap.Original[idxOrig])
+  else
+    raise exception.Create('Cannot find original');
 end;
 
 { TDiscardOriginalDifference }
@@ -928,17 +944,40 @@ begin
     shape.BackFill.Transform(imgState.LayeredBitmap.LayerOriginalMatrix[ALayerIndex]);
     orig.AddShape(shape);
   end else
+  if imgState.LayeredBitmap.LayerOriginalClass[ALayerIndex]=TBGRALayerImageOriginal then
+  begin
+    temp := (imgState.LayeredBitmap.LayerOriginal[ALayerIndex] as TBGRALayerImageOriginal).GetImageCopy;
+    if temp <> nil then
+    begin
+      if not temp.Empty then
+      begin
+        shape := TRectShape.Create(orig);
+        shape.QuickDefine(PointF(-0.5,-0.5),PointF(temp.Width-0.5,temp.Height-0.5));
+        shape.PenStyle := ClearPenStyle;
+        if temp.Equals(temp.GetPixel(0,0)) then
+          shape.BackFill.SetSolid(temp.GetPixel(0,0))
+          else shape.BackFill.SetTexture(temp,AffineMatrixIdentity,255,trNone);
+        shape.Transform(imgState.LayeredBitmap.LayerOriginalMatrix[ALayerIndex]);
+        with imgState.LayeredBitmap.LayerOffset[ALayerIndex] do
+          shape.Transform(AffineMatrixTranslation(-X-FSourceBounds.Left,-Y-FSourceBounds.Top));
+        orig.AddShape(shape);
+      end;
+      temp.FreeReference;
+    end;
+  end else
   begin
     source := imgState.LayeredBitmap.LayerBitmap[ALayerIndex];
     if not source.Empty then
     begin
+      temp := source.GetPart(FSourceBounds) as TBGRABitmap;
       shape := TRectShape.Create(orig);
       shape.QuickDefine(PointF(-0.5,-0.5),PointF(FSourceBounds.Width-0.5,FSourceBounds.Height-0.5));
       shape.PenStyle := ClearPenStyle;
-      temp := source.GetPart(FSourceBounds) as TBGRABitmap;
-      shape.BackFill.SetTexture(temp,AffineMatrixIdentity,255,trNone);
-      temp.FreeReference;
+      if temp.Equals(temp.GetPixel(0,0)) then
+        shape.BackFill.SetSolid(temp.GetPixel(0,0))
+        else shape.BackFill.SetTexture(temp,AffineMatrixIdentity,255,trNone);
       orig.AddShape(shape);
+      temp.FreeReference;
     end;
   end;
   result := orig;
@@ -1142,6 +1181,7 @@ begin
     imgState.LayeredBitmap.LayerOriginalRenderStatus[layerIdx] := orsNone;
     imgState.LayeredBitmap.RenderLayerFromOriginal(layerIdx);
   end;
+  imgState.LayeredBitmap.RemoveUnusedOriginals;
 end;
 
 procedure TReplaceLayerByOriginalDifference.UnapplyTo(AState: TState);
@@ -1636,7 +1676,17 @@ end;
 
 function TSetLayerBlendOpStateDifference.GetImageDifferenceKind: TImageDifferenceKind;
 begin
-  Result:= idkChangeLayer;
+  Result:= idkChangeImage;
+end;
+
+function TSetLayerBlendOpStateDifference.GetChangingBounds: TRect;
+begin
+  Result:= layerBounds;
+end;
+
+function TSetLayerBlendOpStateDifference.GetChangingBoundsDefined: boolean;
+begin
+  Result:= true;
 end;
 
 function TSetLayerBlendOpStateDifference.GetIsIdentity: boolean;
@@ -1657,6 +1707,8 @@ begin
   if idx =-1 then
     raise exception.Create('Layer not found');
   previousBlendOp:= imgDest.BlendOperation[idx];
+  layerBounds := imgDest.LayerBitmap[idx].GetImageBounds;
+  with imgDest.LayerOffset[idx] do layerBounds.Offset(x,y);
   ApplyTo(imgDest);
 end;
 
@@ -1684,7 +1736,17 @@ end;
 
 function TSetLayerVisibleStateDifference.GetImageDifferenceKind: TImageDifferenceKind;
 begin
-  Result:= idkChangeLayer;
+  Result:= idkChangeImage;
+end;
+
+function TSetLayerVisibleStateDifference.GetChangingBounds: TRect;
+begin
+  Result:= layerBounds;
+end;
+
+function TSetLayerVisibleStateDifference.GetChangingBoundsDefined: boolean;
+begin
+  Result:= true;
 end;
 
 function TSetLayerVisibleStateDifference.GetIsIdentity: boolean;
@@ -1705,6 +1767,8 @@ begin
   if idx =-1 then
     raise exception.Create('Layer not found');
   previousVisible:= imgDest.LayerVisible[idx];
+  layerBounds := imgDest.LayerBitmap[idx].GetImageBounds;
+  with imgDest.LayerOffset[idx] do layerBounds.Offset(x,y);
   ApplyTo(imgDest);
 end;
 
@@ -1732,7 +1796,17 @@ end;
 
 function TSetLayerOpacityStateDifference.GetImageDifferenceKind: TImageDifferenceKind;
 begin
-  Result:= idkChangeLayer;
+  Result:= idkChangeImage;
+end;
+
+function TSetLayerOpacityStateDifference.GetChangingBounds: TRect;
+begin
+  Result:= layerBounds;
+end;
+
+function TSetLayerOpacityStateDifference.GetChangingBoundsDefined: boolean;
+begin
+  Result:= true;
 end;
 
 function TSetLayerOpacityStateDifference.GetIsIdentity: boolean;
@@ -1753,6 +1827,8 @@ begin
   if idx =-1 then
     raise exception.Create('Layer not found');
   previousOpacity:= imgDest.LayerOpacity[idx];
+  layerBounds := imgDest.LayerBitmap[idx].GetImageBounds;
+  with imgDest.LayerOffset[idx] do layerBounds.Offset(x,y);
   ApplyTo(imgDest);
 end;
 
@@ -2022,15 +2098,15 @@ end;
 
 function TRemoveLayerStateDifference.UsedMemory: int64;
 begin
-  if Assigned(content) then
-    result := content.UsedMemory
+  if Assigned(FContent) then
+    result := FContent.UsedMemory
   else
     result := 0;
 end;
 
 function TRemoveLayerStateDifference.TryCompress: boolean;
 begin
-  Result:= content.Compress;
+  Result:= FContent.Compress;
 end;
 
 procedure TRemoveLayerStateDifference.ApplyTo(AState: TState);
@@ -2039,10 +2115,10 @@ begin
   inherited ApplyTo(AState);
   with AState as TImageState do
   begin
-    idx := LayeredBitmap.GetLayerIndexFromId(content.LayerId);
+    idx := LayeredBitmap.GetLayerIndexFromId(FContent.LayerId);
     LayeredBitmap.RemoveLayer(idx);
     LayeredBitmap.RemoveUnusedOriginals;
-    SelectedImageLayerIndex := LayeredBitmap.GetLayerIndexFromId(self.nextActiveLayerId);
+    SelectedImageLayerIndex := LayeredBitmap.GetLayerIndexFromId(self.FNextActiveLayerId);
   end;
 end;
 
@@ -2051,8 +2127,8 @@ begin
   inherited UnapplyTo(AState);
   with AState as TImageState do
   begin
-    content.Restore(LayeredBitmap);
-    SelectedImageLayerIndex := content.LayerIndex;
+    FContent.Restore(LayeredBitmap);
+    SelectedImageLayerIndex := FContent.LayerIndex;
   end;
 end;
 
@@ -2069,15 +2145,15 @@ begin
   idx := imgState.SelectedImageLayerIndex;
   if idx = -1 then
     raise exception.Create('No layer selected');
-  self.content := TStoredLayer.Create(imgState.LayeredBitmap, idx);
+  self.FContent := TStoredLayer.Create(imgState.LayeredBitmap, idx);
   if idx+1 < imgState.NbLayers then
     nextIdx := idx+1 else nextIdx := idx-1;
-  self.nextActiveLayerId := imgState.LayeredBitmap.LayerUniqueId[nextIdx];
+  self.FNextActiveLayerId := imgState.LayeredBitmap.LayerUniqueId[nextIdx];
 end;
 
 destructor TRemoveLayerStateDifference.Destroy;
 begin
-  self.content.Free;
+  self.FContent.Free;
   inherited Destroy;
 end;
 
@@ -2092,6 +2168,7 @@ constructor TMergeLayerOverStateDifference.Create(ADestination: TState;
   ALayerOverIndex: integer);
 var
   imgDest: TImageState;
+  totalCost: Integer;
 begin
   inherited Create(ADestination);
   imgDest := ADestination as TImageState;
@@ -2100,12 +2177,30 @@ begin
   if ALayerOverIndex = 0 then
     raise exception.Create('First layer cannot be merged over');
 
+  mergeVectorial := false;
+  mergeVectorialGuid := GUID_NULL;
   layerOverIndex := ALayerOverIndex;
   with imgDest.LayeredBitmap do
   begin
     previousActiveLayerId:= LayerUniqueId[imgDest.SelectedImageLayerIndex];
     layerOverCompressedBackup := TStoredLayer.Create(imgDest.LayeredBitmap, ALayerOverIndex, true);
     layerUnderCompressedBackup := TStoredLayer.Create(imgDest.LayeredBitmap, ALayerOverIndex-1, true);
+    if ((LayerOriginalClass[ALayerOverIndex] = TVectorOriginal) or
+       (LayerOriginalClass[ALayerOverIndex-1] = TVectorOriginal) or
+       (LayerOriginalClass[ALayerOverIndex] = TBGRALayerGradientOriginal) or
+       (LayerOriginalClass[ALayerOverIndex-1] = TBGRALayerGradientOriginal)) and
+       (BlendOperation[ALayerOverIndex] = boTransparent) and
+       (BlendOperation[ALayerOverIndex-1] = boTransparent) then
+    begin
+      totalCost := 0;
+      if LayerOriginalClass[ALayerOverIndex] = TVectorOriginal then
+        inc(totalCost, TVectorOriginal(LayerOriginal[ALayerOverIndex]).GetShapesCost)
+      else inc(totalCost, 10);
+      if LayerOriginalClass[ALayerOverIndex-1] = TVectorOriginal then
+        inc(totalCost, TVectorOriginal(LayerOriginal[ALayerOverIndex-1]).GetShapesCost)
+      else inc(totalCost, 10);
+      if totalCost <= MediumShapeCost then mergeVectorial := true;
+    end;
   end;
 
   //select layer under and merge
@@ -2127,6 +2222,80 @@ end;
 procedure TMergeLayerOverStateDifference.ApplyTo(AState: TState);
 var
   merged: TBGRABitmap;
+  mergedOriginal: TVectorOriginal;
+
+  procedure AppendToMergedOriginal(ALayeredBitmap: TBGRALayeredBitmap; ALayerIndex: integer);
+  var
+    vectOrig: TVectorOriginal;
+    m: TAffineMatrix;
+    i: Integer;
+    s: TVectorShape;
+    temp: TBGRABitmap;
+    b: TRect;
+    c: TBGRALayerOriginalAny;
+  begin
+    c := ALayeredBitmap.LayerOriginalClass[ALayerIndex];
+    m := ALayeredBitmap.LayerOriginalMatrix[ALayerIndex];
+    if c = TVectorOriginal then
+    begin
+      vectOrig := ALayeredBitmap.LayerOriginal[ALayerIndex] as TVectorOriginal;
+      for i := 0 to vectOrig.ShapeCount-1 do
+      begin
+        s := vectOrig.Shape[i].Duplicate;
+        s.Transform(m);
+        mergedOriginal.AddShape(s);
+      end;
+    end else
+    if c = TBGRALayerGradientOriginal then
+    begin
+      s := TRectShape.Create(mergedOriginal);
+      s.PenStyle := ClearPenStyle;
+      s.BackFill.SetGradient(ALayeredBitmap.LayerOriginal[ALayerIndex] as TBGRALayerGradientOriginal, false);
+      s.BackFill.Transform(m);
+      s.QuickDefine(PointF(-0.5,-0.5), PointF(ALayeredBitmap.width-0.5,ALayeredBitmap.Height-0.5));
+      mergedOriginal.AddShape(s);
+    end else
+    if c = TBGRALayerImageOriginal then
+    begin
+      temp := (ALayeredBitmap.LayerOriginal[ALayerIndex] as TBGRALayerImageOriginal).GetImageCopy;
+      if Assigned(temp) then
+      begin
+        if not temp.Empty then
+        begin
+          s := TRectShape.Create(mergedOriginal);
+          s.PenStyle := ClearPenStyle;
+          if temp.Equals(temp.GetPixel(0,0)) then
+            s.BackFill.SetSolid(temp.GetPixel(0,0))
+            else s.BackFill.SetTexture(temp, AffineMatrixIdentity, 255, trNone);
+          s.QuickDefine(PointF(-0.5,-0.5), PointF(temp.width-0.5,temp.Height-0.5));
+          s.Transform(m);
+          mergedOriginal.AddShape(s);
+        end;
+        temp.FreeReference;
+      end;
+    end else
+    begin
+      if Assigned(ALayeredBitmap.LayerBitmap[ALayerIndex]) then
+      begin
+        b := ALayeredBitmap.LayerBitmap[ALayerIndex].GetImageBounds;
+        if not b.IsEmpty then
+        begin
+          temp := ALayeredBitmap.LayerBitmap[ALayerIndex].GetPart(b) as TBGRABitmap;
+          s := TRectShape.Create(mergedOriginal);
+          s.PenStyle := ClearPenStyle;
+          if temp.Equals(temp.GetPixel(0,0)) then
+            s.BackFill.SetSolid(temp.GetPixel(0,0))
+            else s.BackFill.SetTexture(temp, AffineMatrixIdentity, 255, trNone);
+          s.QuickDefine(PointF(-0.5,-0.5), PointF(temp.width-0.5,temp.Height-0.5));
+          with ALayeredBitmap.LayerOffset[ALayerIndex] do
+            s.Transform(AffineMatrixTranslation(b.Left+X,b.Top+Y));
+          mergedOriginal.AddShape(s);
+          temp.FreeReference;
+        end;
+      end;
+    end;
+  end;
+
 begin
   inherited ApplyTo(AState);
   with AState as TImageState do
@@ -2134,6 +2303,18 @@ begin
     if layerOverIndex >= NbLayers then exit;
 
      SelectedImageLayerIndex := layerOverIndex-1;
+     if mergeVectorial then
+     begin
+       mergedOriginal := TVectorOriginal.Create;
+       mergedOriginal.Guid := mergeVectorialGuid;
+       AppendToMergedOriginal(LayeredBitmap, layerOverIndex-1);
+       AppendToMergedOriginal(LayeredBitmap, layerOverIndex);
+       LayeredBitmap.AddOriginal(mergedOriginal);
+       mergeVectorialGuid := mergedOriginal.Guid;
+       LayeredBitmap.LayerOriginalGuid[layerOverIndex-1] := mergedOriginal.Guid;
+       LayeredBitmap.LayerOriginalMatrix[layerOverIndex-1] := AffineMatrixIdentity;
+       LayeredBitmap.RenderLayerFromOriginal(layerOverIndex-1);
+     end else
      if (LayerBitmap[layerOverIndex-1].Width <> Width) or
         (LayerBitmap[layerOverIndex-1].Height <> Height) or
         (LayerOffset[layerOverIndex-1].X <> 0) or
@@ -2240,7 +2421,7 @@ begin
         if duplicateOriginal then
         begin
           stream:= TMemoryStream.Create;
-          SaveOriginalToStream(sourceLayerIndex, stream);
+          SaveOriginalToStream(LayerOriginalGuid[sourceLayerIndex], stream);
           stream.Position:= 0;
           AddOriginalFromStream(stream, duplicateGuid, true);
           stream.Free;
@@ -2282,7 +2463,7 @@ begin
   begin
     self.sourceLayerId := LayeredBitmap.LayerUniqueId[SelectedImageLayerIndex];
     self.duplicateId := LayeredBitmap.ProduceLayerUniqueId;
-    self.duplicateOriginal := useOriginal and (LayeredBitmap.OriginalClass[SelectedImageLayerIndex]=TVectorOriginal);
+    self.duplicateOriginal := useOriginal and (LayeredBitmap.LayerOriginalClass[SelectedImageLayerIndex]=TVectorOriginal);
     if self.duplicateOriginal then
       CreateGUID(duplicateGuid);
   end;
@@ -2509,6 +2690,7 @@ begin
   begin
     idx := lState.LayeredBitmap.GetLayerIndexFromId(layerId);
     if idx = -1 then raise exception.Create('Layer not found');
+    lState.LayeredBitmap.Unfreeze(idx);
     if ChangeImageLayer and (lState.LayeredBitmap.LayerOriginalGuid[idx] <> GUID_NULL) then raise exception.Create('Does not apply to originals');
     if ChangeImageLayer then
     begin
@@ -2533,6 +2715,7 @@ begin
   begin
     idx := lState.LayeredBitmap.GetLayerIndexFromId(layerId);
     if idx = -1 then raise exception.Create('Layer not found');
+    lState.LayeredBitmap.Unfreeze(idx);
     if ChangeImageLayer and (lState.LayeredBitmap.LayerOriginalGuid[idx] <> GUID_NULL) then raise exception.Create('Does not apply to originals');
     if ChangeImageLayer then
     begin

+ 26 - 1
lazpaint/image/uimagestate.pas

@@ -124,6 +124,7 @@ type
     function SwapRedBlue: TCustomImageDifference;
     function LinearNegative: TCustomImageDifference;
     function Negative: TCustomImageDifference;
+    function ClearLayer: TCustomImageDifference;
     function ComputeLayerOffsetDifference(AOffsetX, AOffsetY: integer): TCustomImageDifference;
     function ComputeSelectionTransformDifference: TCustomImageDifference;
     function ComputeLayerMatrixDifference(AIndex: integer; APrevMatrix, ANewMatrix: TAffineMatrix): TCustomImageDifference;
@@ -172,7 +173,7 @@ type
 implementation
 
 uses BGRAStreamLayers, UImageDiff, BGRALzpCommon, UFileSystem, BGRATransform,
-  UResourceStrings;
+  UResourceStrings, LCVectorOriginal;
 
 { TImageState }
 
@@ -745,9 +746,21 @@ begin
 end;
 
 procedure TImageState.SaveToStreamAs(AStream: TStream; AFormat: TBGRAImageFormat);
+var
+  i: Integer;
+  curGuid: TGuid;
 begin
   if LayeredBitmap <> nil then
+  begin
+    if AFormat = ifLazPaint then
+    begin
+      curGuid := LayeredBitmap.LayerOriginalGuid[GetCurrentLayerIndex];
+      for i := 0 to LayeredBitmap.OriginalCount-1 do
+        if LayeredBitmap.OriginalGuid[i] <> curGuid then
+          LayeredBitmap.UnloadOriginal(i);
+    end;
     LayeredBitmap.SaveToStreamAs(AStream, SuggestImageExtension(AFormat));
+  end;
 end;
 
 procedure TImageState.SaveOriginalToStream(AStream: TStream);
@@ -1027,6 +1040,18 @@ begin
   result := AssignWithUndo(newImg, true, SelectedImageLayerIndex);
 end;
 
+function TImageState.ClearLayer: TCustomImageDifference;
+begin
+  if (LayeredBitmap = nil) or SelectedImageLayer.Empty then
+    result := nil
+  else
+  begin
+    result := TReplaceLayerByCustomOriginalDifference.Create(self,
+                   SelectedImageLayerIndex, true,
+                   TVectorOriginal.Create);
+  end;
+end;
+
 function TImageState.RotateCW: TCustomImageDifference;
 begin
   if LayeredBitmap = nil then

+ 12 - 9
lazpaint/image/ustatetype.pas

@@ -32,7 +32,7 @@ type
   end;
 
   TImageDifferenceKind = (idkChangeImageAndSelection, idkChangeStack, idkChangeSelection,
-                           idkChangeImage, idkChangeLayer);
+                           idkChangeImage);
 
   { TCustomImageDifference }
 
@@ -205,6 +205,7 @@ type
     FOriginalRenderStatus: TOriginalRenderStatus;
     FOriginalMatrix: TAffineMatrix;
     FOriginalDraft: boolean;
+    FOriginalGuid: TGuid;
   public
     constructor Create(ALayeredImage: TBGRALayeredBitmap; AIndex: integer);
     constructor Create(ALayeredImage: TBGRALayeredBitmap; AIndex: integer;
@@ -416,16 +417,12 @@ begin
   for i := 0 to FDiffs.Count-1 do
     case FDiffs[i].GetImageDifferenceKind of
       idkChangeImageAndSelection: result := idkChangeImageAndSelection;
-      idkChangeSelection: if result in[idkChangeImage,idkChangeLayer,idkChangeImageAndSelection] then
+      idkChangeSelection: if result in[idkChangeImage,idkChangeImageAndSelection] then
                             result := idkChangeImageAndSelection
                           else result := idkChangeSelection;
       idkChangeImage: if result in[idkChangeImageAndSelection,idkChangeSelection] then
                             result := idkChangeImageAndSelection
                           else result := idkChangeImage;
-      idkChangeLayer: if result in[idkChangeImageAndSelection,idkChangeSelection] then
-                            result := idkChangeImageAndSelection
-                      else if result = idkChangeStack then
-                        result := idkChangeLayer;
     end;
 end;
 
@@ -1069,7 +1066,8 @@ begin
       inherited Create(ALayeredImage.LayerBitmap[AIndex]);
 
     FOriginalData := TMemoryStream.Create;
-    ALayeredImage.SaveOriginalToStream(ALayeredImage.LayerOriginalGuid[AIndex], FOriginalData);
+    FOriginalGuid := ALayeredImage.LayerOriginalGuid[AIndex];
+    ALayeredImage.SaveOriginalToStream(FOriginalGuid, FOriginalData);
     FOriginalMatrix := ALayeredImage.LayerOriginalMatrix[AIndex];
     FOriginalDraft := ALayeredImage.LayerOriginalRenderStatus[AIndex] in[orsDraft,orsPartialDraft];
   end else
@@ -1092,7 +1090,9 @@ begin
   if Assigned(FOriginalData) then
   begin
     FOriginalData.Position:= 0;
-    idxOrig := ALayeredImage.AddOriginalFromStream(FOriginalData, true);
+    idxOrig := ALayeredImage.IndexOfOriginal(FOriginalGuid);
+    if idxOrig = -1 then
+      idxOrig := ALayeredImage.AddOriginalFromStream(FOriginalData, FOriginalGuid, true);
 
     if not FOriginalBitmapStored then
     begin
@@ -1101,6 +1101,7 @@ begin
     end else
     begin
       tempIdx := ALayeredImage.AddOwnedLayer(GetBitmap);
+      ALayeredImage.LayerOffset[tempIdx] := FInfo.Offset;
       ALayeredImage.LayerOriginalGuid[tempIdx] := ALayeredImage.OriginalGuid[idxOrig];
       ALayeredImage.LayerOriginalMatrix[tempIdx] := FOriginalMatrix;
       ALayeredImage.LayerOriginalRenderStatus[tempIdx] := FOriginalRenderStatus;
@@ -1119,7 +1120,9 @@ begin
   if Assigned(FOriginalData) then
   begin
     FOriginalData.Position:= 0;
-    idxOrig := ALayeredImage.AddOriginalFromStream(FOriginalData, true);
+    idxOrig := ALayeredImage.IndexOfOriginal(FOriginalGuid);
+    if idxOrig = -1 then
+      idxOrig := ALayeredImage.AddOriginalFromStream(FOriginalData, FOriginalGuid, true);
     if not FOriginalBitmapStored then
     begin
       ALayeredImage.LayerOriginalGuid[FIndex] := ALayeredImage.OriginalGuid[idxOrig];

+ 18 - 10
lazpaint/lazpaint.lpi

@@ -11,17 +11,19 @@
       <UseXPManifest Value="True"/>
       <XPManifest>
         <DpiAware Value="True"/>
+        <TextName Value="LazPaint"/>
+        <TextDesc Value="Paint program made with Lazarus"/>
       </XPManifest>
       <Icon Value="0"/>
     </General>
     <i18n>
-      <EnableI18N Value="True"/>
+      <EnableI18N Value="True" LFM="False"/>
       <OutDir Value="release\bin\i18n"/>
     </i18n>
     <VersionInfo>
       <UseVersionInfo Value="True"/>
       <MajorVersionNr Value="7"/>
-      <RevisionNr Value="5"/>
+      <RevisionNr Value="7"/>
       <CharSet Value="04B0"/>
       <StringTable CompanyName="http://sourceforge.net/projects/lazpaint/" ProductName="LazPaint" InternalName="lazpaint" OriginalFilename="lazpaint.exe"/>
     </VersionInfo>
@@ -36,7 +38,7 @@
           </Target>
           <SearchPaths>
             <IncludeFiles Value="$(ProjOutDir)"/>
-            <OtherUnitFiles Value="buttons;tablet;dialog;dialog\color;dialog\filter;tools;image"/>
+            <OtherUnitFiles Value="tablet;tools;dialog;dialog\color;dialog\filter;image"/>
             <UnitOutputDirectory Value="release\lib\$(TargetCPU)-$(TargetOS)"/>
           </SearchPaths>
           <Parsing>
@@ -74,7 +76,7 @@
           </Target>
           <SearchPaths>
             <IncludeFiles Value="$(ProjOutDir)"/>
-            <OtherUnitFiles Value="buttons;tablet"/>
+            <OtherUnitFiles Value="tablet;tools;dialog;dialog\color;dialog\filter;image"/>
             <UnitOutputDirectory Value="release\lib\$(TargetCPU)-$(TargetOS)"/>
           </SearchPaths>
           <Parsing>
@@ -114,7 +116,7 @@
           </Target>
           <SearchPaths>
             <IncludeFiles Value="$(ProjOutDir)"/>
-            <OtherUnitFiles Value="buttons;tablet"/>
+            <OtherUnitFiles Value="tablet;tools;dialog;dialog\color;dialog\filter;image"/>
             <UnitOutputDirectory Value="release\lib\$(TargetCPU)-$(TargetOS)"/>
           </SearchPaths>
           <Parsing>
@@ -157,7 +159,7 @@
           </Target>
           <SearchPaths>
             <IncludeFiles Value="$(ProjOutDir)"/>
-            <OtherUnitFiles Value="buttons;tablet"/>
+            <OtherUnitFiles Value="tablet;tools;dialog;dialog\color;dialog\filter;image"/>
             <UnitOutputDirectory Value="release\lib\$(TargetCPU)-$(TargetOS)"/>
           </SearchPaths>
           <Parsing>
@@ -197,7 +199,7 @@
           <PathDelim Value="\"/>
           <SearchPaths>
             <IncludeFiles Value="$(ProjOutDir)"/>
-            <OtherUnitFiles Value="tablet"/>
+            <OtherUnitFiles Value="tablet;tools;dialog;dialog\color;dialog\filter;image"/>
             <UnitOutputDirectory Value="debug\$(TargetCPU)-$(TargetOS)"/>
           </SearchPaths>
           <CodeGeneration>
@@ -223,6 +225,9 @@
               </Win32>
             </Options>
           </Linking>
+          <Other>
+            <CustomOptions Value="-dDEBUG"/>
+          </Other>
         </CompilerOptions>
       </Item6>
       <Item7 Name="Release Linux32">
@@ -234,7 +239,7 @@
           </Target>
           <SearchPaths>
             <IncludeFiles Value="$(ProjOutDir)"/>
-            <OtherUnitFiles Value="buttons;tablet"/>
+            <OtherUnitFiles Value="tablet;tools;dialog;dialog\color;dialog\filter;image"/>
             <UnitOutputDirectory Value="release\lib\$(TargetCPU)-$(TargetOS)"/>
           </SearchPaths>
           <Parsing>
@@ -274,7 +279,7 @@
           </Target>
           <SearchPaths>
             <IncludeFiles Value="$(ProjOutDir)"/>
-            <OtherUnitFiles Value="buttons;tablet"/>
+            <OtherUnitFiles Value="tablet;tools;dialog;dialog\color;dialog\filter;image"/>
             <UnitOutputDirectory Value="release\lib\$(TargetCPU)-$(TargetOS)"/>
           </SearchPaths>
           <Parsing>
@@ -325,7 +330,7 @@
       </Item1>
       <Item2>
         <PackageName Value="BGRABitmapPack"/>
-        <MinVersion Major="10" Minor="6" Release="2" Valid="True"/>
+        <MinVersion Major="10" Minor="6" Release="3" Valid="True"/>
       </Item2>
       <Item3>
         <PackageName Value="lazpaintcontrols"/>
@@ -954,6 +959,9 @@
         </Win32>
       </Options>
     </Linking>
+    <Other>
+      <CustomOptions Value="-dDEBUG"/>
+    </Other>
   </CompilerOptions>
   <Debugging>
     <Exceptions Count="10">

+ 25 - 0
lazpaint/lazpaint.lpr

@@ -93,7 +93,30 @@ end;
 
 {$R *.res}
 
+{$IFDEF DARWIN}{$IFDEF DEBUG}
+var
+  OldOutput: TextFile;
+
+  procedure InitOutput;
+  begin
+    OldOutput := Output;
+    AssignFile(Output, '/dev/ttys000');
+    Append(Output);
+    Writeln;
+    Writeln('Debug started');
+  end;
+
+  procedure DoneOutput;
+  begin
+    Writeln('Debug ended');
+    CloseFile(Output);
+    Output := OldOutput;
+  end;
+{$ENDIF}{$ENDIF}
+
 begin
+  {$IFDEF DARWIN}{$IFDEF DEBUG}InitOutput;{$ENDIF}{$ENDIF}
+
   ActualConfig := GetActualConfig;
   TranslateLazPaint(ActualConfig);
 
@@ -121,5 +144,7 @@ begin
   RestartQuery := LazpaintApplication.RestartQuery;
   LazpaintApplication.Free;
   if RestartQuery then RestartApplication;
+
+  {$IFDEF DARWIN}{$IFDEF DEBUG}DoneOutput;{$ENDIF}{$ENDIF}
 end.
 

+ 1 - 1
lazpaint/lazpaintembeddedpack.lpk

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

+ 4 - 4
lazpaint/lazpaintinstance.pas

@@ -17,7 +17,7 @@ uses
   ULoading, UImage, UTool, uconfig, IniFiles, uresourcestrings, uscripting;
 
 const
-  MaxToolPopupShowCount = 2;
+  MaxToolPopupShowCount = 3;
 
 type
   TImageListList = specialize TFPGObjectList<TImageList>;
@@ -113,7 +113,7 @@ type
     procedure Init(AEmbedded: boolean);
     procedure SetBlackAndWhite(AValue: boolean); override;
     procedure OnStackChanged({%H-}sender: TLazPaintImage; AScrollIntoView: boolean);
-    procedure OnToolPopup({%H-}sender: TToolManager; AMessage: TToolPopupMessage);
+    procedure OnToolPopup({%H-}sender: TToolManager; AMessage: TToolPopupMessage; AKey: Word);
 
     function GetImageListWindowHeight: integer; override;
     function GetImageListWindowWidth: integer; override;
@@ -484,7 +484,7 @@ begin
     FLayerStack.InvalidateStack(AScrollIntoView);
 end;
 
-procedure TLazPaintInstance.OnToolPopup(sender: TToolManager; AMessage: TToolPopupMessage);
+procedure TLazPaintInstance.OnToolPopup(sender: TToolManager; AMessage: TToolPopupMessage; AKey: Word);
 var messageStr: string;
     idx: integer;
 begin
@@ -496,7 +496,7 @@ begin
     else
       exit;
   end;
-  messageStr := ToolPopupMessageToStr(AMessage);
+  messageStr := ToolPopupMessageToStr(AMessage, AKey);
   if messageStr <> '' then
     MessagePopup(messageStr,4000);
 end;

+ 1 - 1
lazpaint/lazpaintmainform.lfm

@@ -7920,7 +7920,7 @@ object FMain: TFMain
       Caption = 'Shift colors...'
       ImageIndex = 69
       OnExecute = ScriptExecute
-      ShortCut = 24576
+      ShortCut = 24648
     end
     object ColorColorize: TAction
       Category = 'Colors'

+ 89 - 21
lazpaint/lazpaintmainform.pas

@@ -539,8 +539,7 @@ type
     procedure SpinEdit_TextureOpacityChange(Sender: TObject; AByUser: boolean);
     procedure SpinEdit_TextBlurChange(Sender: TObject; AByUser: boolean);
     procedure GridNb_SpinEditChange(Sender: TObject; AByUser: boolean);
-    procedure Image_CurrentTextureMouseDown(Sender: TObject;
-      {%H-}Button: TMouseButton; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: Integer);
+    procedure Image_CurrentTextureClick(Sender: TObject);
     procedure PaintBox_PenPreviewPaint(Sender: TObject);
     procedure PaintBox_PictureMouseDown(Sender: TObject; Button: TMouseButton;
       Shift: TShiftState; X, Y: Integer);
@@ -715,7 +714,7 @@ type
     initialized: boolean;
     shouldArrangeOnResize: boolean;
     btnLeftDown, btnRightDown, btnMiddleDown: boolean;
-    spacePressed: boolean;
+    spacePressed, altPressed, snapPressed, shiftPressed: boolean;
     FormMouseMovePos: TPoint;
     InFormMouseMove: boolean;
     InFormPaint: boolean;
@@ -796,6 +795,7 @@ type
     procedure LabelAutosize(ALabel: TLabel);
     procedure AskMergeSelection(ACaption: string);
     procedure ReleaseMouseButtons(Shift: TShiftState);
+    procedure UpdateSpecialKeys({%H-}Shift: TShiftState);
     procedure UpdateCurveModeToolbar;
     function ShowOpenTextureDialog: boolean;
     procedure ShowNoPicture;
@@ -836,8 +836,9 @@ type
 
     procedure PaintPictureNow;
     procedure InvalidatePicture;
-    function TryOpenFileUTF8(filenameUTF8: string; AddToRecent: Boolean=True; ALoadedImage: PImageEntry = nil;
-      ASkipDialogIfSingleImage: boolean = false): Boolean;
+    function TryOpenFileUTF8(filenameUTF8: string; AddToRecent: Boolean=True;
+      ALoadedImage: PImageEntry = nil; ASkipDialogIfSingleImage: boolean = false;
+      AAllowDuplicate: boolean = false): Boolean;
     function PictureCanvasOfs: TPoint;
     procedure UpdateLineCapBar;
     procedure UpdateColorToolbar(AUpdateColorDiff: boolean);
@@ -910,6 +911,10 @@ begin
   btnRightDown := false;
   btnMiddleDown:= false;
   FTablet := TLazTablet.Create(self);
+  spacePressed:= false;
+  altPressed:= false;
+  snapPressed:= false;
+  shiftPressed:= false;
 
   //recursive calls
   InFormMouseMove:= false;
@@ -1141,7 +1146,7 @@ procedure TFMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
 begin
   if not Assigned(FImageView) then exit;
   ReleaseMouseButtons(Shift);
-  if not (Button in[mbLeft,mbRight,mbMiddle]) then exit;
+  if not (Button in[mbLeft,mbRight,mbMiddle]) or not FImageView.PictureCoordsDefined then exit;
   CanCompressOrUpdateStack := false;
   Image.OnImageChanged.DelayedStackUpdate := True;
 
@@ -1153,9 +1158,11 @@ begin
   if Button = mbMiddle then
   begin
     btnMiddleDown:= true;
-    if not ToolManager.ToolSleeping then ToolManager.ToolSleep;
+    if not ToolManager.ToolSleeping and not (ssAlt in Shift) then ToolManager.ToolSleep;
   end;
-  if ToolManager.ToolDown(FImageView.FormToBitmap(X,Y),btnRightDown,CurrentPressure) then
+  if ToolManager.ToolDown(FImageView.FormToBitmap(X,Y),
+      btnRightDown{$IFDEF DARWIN} or (ssCtrl in Shift){$ENDIF},
+      CurrentPressure) then
       PaintPictureNow;
   UpdateToolbar;
 end;
@@ -1171,6 +1178,7 @@ begin
   if not Assigned(FImageView) then exit;
 
   ReleaseMouseButtons(Shift);
+  UpdateSpecialKeys(Shift);
   HidePenPreview;
   if LazPaintInstance.TopMostHasFocus then
   begin
@@ -1185,7 +1193,13 @@ begin
   FormMouseMovePos := Point(X,Y);
   if InFormMouseMove then exit;
   InFormMouseMove := True;
-  //Application.ProcessMessages; //empty message stack
+  if not FImageView.PictureCoordsDefined then
+    Application.ProcessMessages; //empty message stack
+  if not FImageView.PictureCoordsDefined then
+  begin
+    InFormMouseMove:= false;
+    exit;
+  end;
 
   BmpPos := FImageView.FormToBitmap(FormMouseMovePos);
   FCoordinatesCaption := IntToStr(round(BmpPos.X))+','+IntToStr(round(BmpPos.Y));
@@ -1201,7 +1215,6 @@ begin
   if ToolManager.ToolMove(BmpPos,CurrentPressure) then
   begin
     FImageView.UpdatePicture(PictureCanvasOfs, FLayout.WorkArea, self);
-    ToolManager.ToolMoveAfter(FImageView.FormToBitmap(FormMouseMovePos)); //new BmpPos after repaint
   end else
     updateForVSCursor := true;
   UpdateToolbar;
@@ -1229,7 +1242,9 @@ begin
   if (btnLeftDown and (Button = mbLeft)) or (btnRightDown and (Button=mbRight))
     or (btnMiddleDown and (Button = mbMiddle)) then
   begin
-    redraw := ToolManager.ToolMove(FImageView.FormToBitmap(X,Y),CurrentPressure);
+    if FImageView.PictureCoordsDefined then
+      redraw := ToolManager.ToolMove(FImageView.FormToBitmap(X,Y),CurrentPressure)
+      else redraw := false;
     if ToolManager.ToolUp then redraw := true;
     btnLeftDown := false;
     btnRightDown := false;
@@ -1283,7 +1298,8 @@ begin
     if AVars.IsReferenceDefined(vFileName) then
     begin
       FLazPaintInstance.ShowTopmost(topInfo);
-      if TryOpenFileUTF8(AVars.GetString(vFilename), true, nil) then
+      if TryOpenFileUTF8(AVars.GetString(vFilename), true, nil,
+           false, AVars.Booleans['AllowDuplicate']) then
         result := srOk
       else
         result := srException;
@@ -1638,6 +1654,9 @@ procedure TFMain.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
   );
 begin
   try
+    if Key = VK_MENU then altPressed:= true
+    else if (Key = VK_SNAP) or (Key = VK_SNAP2) then snapPressed:= true
+    else if Key = VK_SHIFT then shiftPressed:= true;
     if Zoom.EditingZoom then exit;
     if not ((CurrentTool = ptText) and TextSpinEditFocused and (Key = VK_BACK)) and ToolManager.ToolKeyDown(Key) then
     begin
@@ -1680,7 +1699,7 @@ end;
 
 procedure TFMain.EditUndoUpdate(Sender: TObject);
 begin
-  EditUndo.Enabled := image.CanUndo;
+  EditUndo.Enabled := image.CanUndo or ToolManager.ToolProvideCommand(tcFinish);
 end;
 
 procedure TFMain.EmbeddedCancelExecute(Sender: TObject);
@@ -2023,6 +2042,9 @@ end;
 
 procedure TFMain.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
 begin
+  if Key = VK_MENU then altPressed:= false
+  else if (Key = VK_SNAP) or (Key = VK_SNAP2) then snapPressed:= false
+  else if Key = VK_SHIFT then shiftPressed:= false;
   if ToolManager.ToolKeyUp(Key) then
   begin
     DelayedPaintPicture := True;
@@ -2345,7 +2367,7 @@ end;
 procedure TFMain.FormMouseWheel(Sender: TObject; Shift: TShiftState;
   WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
 begin
-  if not Assigned(FImageView) then exit;
+  if not Assigned(FImageView) or not FImageView.PictureCoordsDefined then exit;
   Zoom.SetPosition(FImageView.FormToBitmap(MousePos.X,MousePos.Y), MousePos);
   if WheelDelta > 0 then Zoom.ZoomIn(ssCtrl in Shift) else
   if WheelDelta < 0 then Zoom.ZoomOut(ssCtrl in Shift);
@@ -2507,7 +2529,8 @@ end;
 
 procedure TFMain.ToolNoTextureUpdate(Sender: TObject);
 begin
-  ToolNoTexture.Enabled := ToolManager.GetTexture <> nil;
+  ToolNoTexture.Enabled := (ToolManager.GetTexture <> nil)
+    and (CurrentTool <> ptTextureMapping);
 end;
 
 procedure TFMain.ViewColorsExecute(Sender: TObject);
@@ -3002,6 +3025,7 @@ var
 begin
   openParams := TVariableSet.Create('FileOpen');
   openParams.AddString('FileName',Image.currentFilenameUTF8);
+  openParams.AddBoolean('AllowDuplicate',true);
   Scripting.CallScriptFunction(openParams);
   openParams.Free;
 end;
@@ -3132,9 +3156,13 @@ begin
 end;
 
 procedure TFMain.ForgetDialogAnswersExecute(Sender: TObject);
+var
+  m: TToolPopupMessage;
 begin
   Config.SetDefaultTransformSelectionAnswer(0);
   Config.SetDefaultRetrieveSelectionAnswer(0);
+  for m := low(TToolPopupMessage) to high(TToolPopupMessage) do
+    Config.SetToolPopupMessageShownCount(ord(m), 0);
 end;
 
 procedure TFMain.FormClose(Sender: TObject; var CloseAction: TCloseAction);
@@ -3307,6 +3335,28 @@ begin
   end;
 end;
 
+procedure TFMain.UpdateSpecialKeys(Shift: TShiftState);
+  procedure UpdateKey(AShift: TShiftStateEnum; ACode: Word; var APressed: boolean);
+  begin
+    if (AShift in Shift) and not APressed then
+    begin
+      if ToolManager.ToolKeyDown(ACode) then PaintPictureNow;
+      APressed:= true;
+    end else
+    if not (AShift in Shift) and APressed then
+    begin
+      if ToolManager.ToolKeyUp(ACode) then PaintPictureNow;
+      APressed:= false;
+    end;
+  end;
+begin
+  {$IFDEF DARWIN}
+  UpdateKey(ssSnap, VK_SNAP, snapPressed);
+  UpdateKey(ssAlt, VK_MENU, altPressed);
+  UpdateKey(ssShift, VK_SHIFT, shiftPressed);
+  {$ENDIF}
+end;
+
 function TFMain.ShowOpenTextureDialog: boolean;
 var newTex: TBGRABitmap;
   texFilename: string;
@@ -3500,10 +3550,12 @@ begin
 end;
 
 function TFMain.TryOpenFileUTF8(filenameUTF8: string; AddToRecent: Boolean;
-     ALoadedImage: PImageEntry; ASkipDialogIfSingleImage: boolean): Boolean;
+     ALoadedImage: PImageEntry; ASkipDialogIfSingleImage: boolean;
+     AAllowDuplicate: boolean): Boolean;
 var
   newPicture: TImageEntry;
   format: TBGRAImageFormat;
+  dupIndex: Integer;
 
   procedure StartImport;
   begin
@@ -3584,14 +3636,30 @@ begin
     else
     if format in[ifIco,ifTiff] then
     begin
-      newPicture := ShowPreviewDialog(LazPaintInstance, FilenameUTF8, 'TIFF', ASkipDialogIfSingleImage);
-      ImportNewPicture;
+      if (format = ifTiff) and AAllowDuplicate and (Image.FrameIndex <> -1) then dupIndex := Image.FrameIndex else dupIndex := -1;
+      newPicture := ShowPreviewDialog(LazPaintInstance, FilenameUTF8, 'TIFF',
+        ASkipDialogIfSingleImage, dupIndex);
+      if newPicture.isDuplicate then
+      begin
+        newPicture.FreeAndNil;
+        Image.FrameIndex:= newPicture.frameIndex;
+        Image.OnImageChanged.NotifyObservers;
+      end
+      else ImportNewPicture;
     end
     else
     if format = ifGif then
     begin
-      newPicture := ShowPreviewDialog(LazPaintInstance, FilenameUTF8, rsAnimatedGIF, ASkipDialogIfSingleImage);
-      ImportNewPicture;
+      if AAllowDuplicate and (Image.FrameIndex <> -1) then dupIndex := Image.FrameIndex else dupIndex := -1;
+      newPicture := ShowPreviewDialog(LazPaintInstance, FilenameUTF8, rsAnimatedGIF,
+        ASkipDialogIfSingleImage, dupIndex);
+      if newPicture.isDuplicate then
+      begin
+        newPicture.FreeAndNil;
+        Image.FrameIndex:= newPicture.frameIndex;
+        Image.OnImageChanged.NotifyObservers;
+      end
+      else ImportNewPicture;
     end else
     begin
       StartImport;
@@ -3814,7 +3882,7 @@ end;
 procedure TFMain.InvalidatePicture;
 begin
   if Assigned(FImageView) and Assigned(FLayout) then
-    FImageView.InvalidatePicture(False, FLayout.WorkArea, Point(0,0), self);
+    FImageView.InvalidatePicture(True, FLayout.WorkArea, Point(0,0), self);
 end;
 
 function TFMain.GetUseImageBrowser: boolean;

+ 4 - 11
lazpaint/lazpainttype.pas

@@ -10,7 +10,7 @@ uses
   {$IFDEF LINUX}, InterfaceBase{$ENDIF};
 
 const
-  LazPaintVersion = 7000500;
+  LazPaintVersion = 7000700;
 
   function LazPaintVersionStr: string;
 
@@ -19,22 +19,14 @@ const
   Improvements accepted:
   ----------------------
   Mac:
-  - Combobox ownerdrawn (brush, arrow)
-  - update image preview when saving
-  - filename fix
-  - ctrl shortcut to change
+  - combobox dropdown rect without scrollbar
   Scripting
   Color picker
   - From final image
   - With radius
   Translation of curve modes (in dropdown)
   Lasso
-  Raccourcis clavier pour utiliser le bouton droit
   Utiliser les touches de direction
-  Indiquer l'outil actif
-  Rotation des objets des outils
-  Afficher les coordonnees des points (snap de la valeur en haut?)
-  Ajout barre d'outils pour les coordonnees de la selection 
   Mettre a jour le curseur quand on change d'outil (notamment avec Espace)
 
   Possible improvements:
@@ -49,7 +41,6 @@ const
   - load/save RAW
 
   Filters:
-  - filtre de vagues concentriques
   - filtre de vagues en translation
   - filtre pontillisme
   - G'MIC filters
@@ -127,6 +118,7 @@ type
       bmp: TBGRABitmap;
       bpp: integer;
       frameIndex: integer;
+      isDuplicate: boolean;
       class function Empty: TImageEntry; static;
       class function NewFrameIndex: integer; static;
       procedure FreeAndNil;
@@ -536,6 +528,7 @@ begin
   result.bmp := nil;
   result.bpp := 0;
   result.frameIndex := 0;
+  result.isDuplicate:= false;
 end;
 
 class function TImageEntry.NewFrameIndex: integer;

+ 3 - 4
lazpaint/maintoolbar.inc

@@ -5,12 +5,13 @@ begin
   if FToolbarElementsInitDone then exit;
   FToolbarElementsInitDone:= true;
 
+  Panel_ToolbarBackground.PopupMenu := PopupToolbar;
   Perspective_Repeat.OnClick := @Perspective_RepeatClick;
   Perspective_TwoPlanes.OnClick := @Perspective_TwoPlanesClick;
   Shape_PenColor.OnMouseDown := @Shape_PenColorMouseDown;
   Shape_BackColor.OnMouseDown := @Shape_BackColorMouseDown;
   Image_SwapColors.OnMouseDown := @Image_SwapColorsMouseDown;
-  Image_CurrentTexture.OnMouseDown := @Image_CurrentTextureMouseDown;
+  Image_CurrentTexture.OnClick := @Image_CurrentTextureClick;
   Tool_DrawShapeBorder.OnClick := @Tool_DrawShapeBorderClick;
   Tool_Aliasing.OnClick := @Tool_AliasingClick;
   Tool_FillShape.OnClick := @Tool_FillShapeClick;
@@ -546,7 +547,6 @@ begin
       Image_CurrentTool.Picture.Clear;
     previousToolImg := img;
   end;
-  Panel_Texture.Enabled := (CurrentTool <> ptTextureMapping);
 end;
 
 procedure TFMain.NoTextureIcon;
@@ -815,8 +815,7 @@ begin
   end;
 end;
 
-procedure TFMain.Image_CurrentTextureMouseDown(Sender: TObject;
-  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+procedure TFMain.Image_CurrentTextureClick(Sender: TObject);
 begin
   LazPaintInstance.EditTexture;
   UpdateEditPicture;

+ 1207 - 12
lazpaint/release/bin/i18n/lazpaint.ar.po

@@ -1558,9 +1558,9 @@ msgstr "الكل"
 msgid "All supported filetypes"
 msgstr "كل الملفات المدعمة"
 
-#: uresourcestrings.rsaltshiftscalemode
-msgid "Hold ALT or SHIFT to scale"
-msgstr "إضغط ALT او SHIFT للتحريف"
+#: uresourcestrings.rsholdkeysscalemode
+msgid "Hold %1 or %2 to scale"
+msgstr "إضغط %1 او %2 للتحريف"
 
 #: uresourcestrings.rsanimatedgif
 msgid "Animated GIF"
@@ -1675,9 +1675,9 @@ msgstr "جيب التمام"
 msgid "Crop"
 msgstr "محصول"
 
-#: uresourcestrings.rsctrlrestrictrotation
-msgid "Hold CTRL to restrict rotation angle"
-msgstr "إضغط CTRL لتقييد زاوية الدوران"
+#: uresourcestrings.rsholdkeyrestrictrotation
+msgid "Hold %1 to restrict rotation angle"
+msgstr "إضغط %1 لتقييد زاوية الدوران"
 
 #: uresourcestrings.rscurvemodehint
 msgid "Press S or X to set the curve mode of the last point"
@@ -1840,13 +1840,13 @@ msgstr ""
 msgid "Half-cosine"
 msgstr "نصف - جيب التمام"
 
-#: uresourcestrings.rsholdctrlsnaptopixel
-msgid "Hold CTRL to snap to pixels"
-msgstr "إضغط CTRL لالتقاط إلى بكسل"
+#: uresourcestrings.rsholdkeysnaptopixel
+msgid "Hold %1 to snap to pixels"
+msgstr "إضغط %1 لالتقاط إلى بكسل"
 
-#: uresourcestrings.rsholdshiftforsquare
-msgid "Hold SHIFT to draw a square or a circle"
-msgstr "إضغط على SHIFT لرسم مربع او دائرة"
+#: uresourcestrings.rsholdkeyforsquare
+msgid "Hold %1 to draw a square or a circle"
+msgstr "إضغط على %1 لرسم مربع او دائرة"
 
 #: uresourcestrings.rshotspot
 msgctxt "uresourcestrings.rshotspot"
@@ -2309,3 +2309,1198 @@ msgstr ""
 msgid "Yes"
 msgstr "نعم"
 
+#: tablet.getprocfailed
+msgid "Procedure %s failed to load properly."
+msgstr ""
+
+#: tablet.openfailed
+msgid "Tablet context failed to open."
+msgstr ""
+
+#: tfabout.button_donate.caption
+msgctxt "tfabout.button_donate.caption"
+msgid "Donate..."
+msgstr "تبرع..."
+
+#: tfabout.caption
+msgctxt "tfabout.caption"
+msgid "About"
+msgstr "عنا"
+
+#: tfabout.labelurl.caption
+msgid "http://sourceforge.net/projects/lazpaint/"
+msgstr "http://sourceforge.net/projects/lazpaint/"
+
+#: tfabout.label_authors.caption
+msgctxt "tfabout.label_authors.caption"
+msgid "Authors:"
+msgstr "مؤلفون:"
+
+#: tfabout.label_authorsvalue.caption
+msgctxt "tfabout.label_authorsvalue.caption"
+msgid "Circular helped by FabienWang, Lainz and others"
+msgstr "Circular, FabienWang, Lainz"
+
+#: tfabout.label_homepage.caption
+msgctxt "tfabout.label_homepage.caption"
+msgid "Homepage:"
+msgstr "الصفحة الرئيسة"
+
+#: tfabout.label_libraries.caption
+msgctxt "tfabout.label_libraries.caption"
+msgid "Libraries used:"
+msgstr "المكتبات المستعملة"
+
+#: tfabout.label_licence.caption
+msgctxt "tfabout.label_licence.caption"
+msgid "Licence:"
+msgstr "الرخصة"
+
+#: tfabout.label_opensource.caption
+msgctxt "tfabout.label_opensource.caption"
+msgid "Open source (GPLv3)"
+msgstr "مفتوح المصدر (جي بي ال 3) "
+
+#: tfadjustcurves.button_cancel.caption
+msgctxt "tfadjustcurves.button_cancel.caption"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfadjustcurves.button_ok.caption
+msgctxt "tfadjustcurves.button_ok.caption"
+msgid "OK"
+msgstr "موافق"
+
+#: tfadjustcurves.caption
+msgid "Adjust curves"
+msgstr "ضبط المنحنيات"
+
+#: tfadjustcurves.toolbutton_newcurve.hint
+msgid "Discard current curve and start a new one"
+msgstr "تجاهل المنحنى الحالي و البدء من جديدة"
+
+#: tfadjustcurves.toolbutton_posterize.hint
+msgctxt "tfadjustcurves.toolbutton_posterize.hint"
+msgid "Posterize"
+msgstr "قسلمة"
+
+#: tfadjustcurves.toolbutton_removepoint.hint
+msgid "Remove selected point (Del)"
+msgstr "حذف النقطة المحددة (Del)"
+
+#: tfblendop.button_cancel.caption
+msgctxt "tfblendop.button_cancel.caption"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfblendop.button_ok.caption
+msgctxt "tfblendop.button_ok.caption"
+msgid "OK"
+msgstr "موافق"
+
+#: tfblendop.caption
+msgid "Blend operation"
+msgstr "عملية المزج"
+
+#: tfblendop.label_blendopcategory.caption
+msgctxt "tfblendop.label_blendopcategory.caption"
+msgid "Category of blend operation"
+msgstr "فئة عملية المزج"
+
+#: tfblendop.label_blendopvalue.caption
+msgctxt "tfblendop.label_blendopvalue.caption"
+msgid "."
+msgstr "."
+
+#: tfblendop.label_kritaover.caption
+msgctxt "tfblendop.label_kritaover.caption"
+msgid "Krita"
+msgstr "Krita"
+
+#: tfblendop.label_kritaover.hint
+msgid "Blend operations that are available in Krita"
+msgstr "مزيج من عمليات Krita"
+
+#: tfblendop.label_otherover.caption
+msgctxt "tfblendop.label_otherover.caption"
+msgid "Other"
+msgstr "آخر"
+
+#: tfblendop.label_otherover.hint
+msgid "Blend operations of LazPaint and Paint.NET"
+msgstr "مزيج من عمليات LazPaint وPaint.NET"
+
+#: tfblendop.label_patternover.caption
+msgctxt "tfblendop.label_patternover.caption"
+msgid "Pattern over"
+msgstr "نمط علوي"
+
+#: tfblendop.label_patternover.hint
+msgid "Preview blend operation with the specified image on top"
+msgstr " معاينة عملية المزيج  مع الصورة المحددة في الأعلى"
+
+#: tfblendop.label_patternunder.caption
+msgctxt "tfblendop.label_patternunder.caption"
+msgid "Pattern under"
+msgstr "نمط سفلي"
+
+#: tfblendop.label_patternunder.hint
+msgid "Preview blend operation with the specified image underneath"
+msgstr "معاينة عملية المزيج  مع الصورة المحددة في الأسفل"
+
+#: tfblendop.label_previewwith.caption
+msgctxt "tfblendop.label_previewwith.caption"
+msgid "Preview with"
+msgstr "معاينة مع"
+
+#: tfblendop.label_selectedblendop.caption
+msgid "Selected blend operation :"
+msgstr "عملية المزج المحددة :"
+
+#: tfblendop.label_svgover.caption
+msgctxt "tfblendop.label_svgover.caption"
+msgid "Basic SVG"
+msgstr "اساس SVG"
+
+#: tfblendop.label_svgover.hint
+msgid "Basic blend operations that are available in virtually all image editors"
+msgstr "  عمليات المزج الأساسية المتاحة تقريبا في جميع برامج تحرير الصور"
+
+#: tfbrowseimages.caption
+msgid "Browse images"
+msgstr "تصفح الصور"
+
+#: tfbrowseimages.checkbox_usedirectoryonstartup.caption
+msgid "Use this directory on startup"
+msgstr ""
+
+#: tfbrowseimages.label_status.caption
+msgctxt "tfbrowseimages.label_status.caption"
+msgid "."
+msgstr "."
+
+#: tfbrowseimages.toolbutton_createfolderorcontainer.hint
+msgid "Create folder or container"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_goup.hint
+msgid "Go one directory up"
+msgstr "الصعود بمجلد"
+
+#: tfbrowseimages.toolbutton_openselectedfiles.hint
+msgid "Open selected files"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_viewbigicon.hint
+msgctxt "tfbrowseimages.toolbutton_viewbigicon.hint"
+msgid "Show big icons"
+msgstr "عرض إيقونات كبيرة"
+
+#: tfbrowseimages.toolbutton_viewdetails.hint
+msgctxt "tfbrowseimages.toolbutton_viewdetails.hint"
+msgid "Show details and preview"
+msgstr "عرض التفاصيل و المعاينة"
+
+#: tfbrowseimages.tool_selectdrive.hint
+msgid "Select drive"
+msgstr ""
+
+#: tfcanvassize.button_cancel.caption
+msgctxt "TFCANVASSIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfcanvassize.button_ok.caption
+msgctxt "TFCANVASSIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "موافق"
+
+#: tfcanvassize.caption
+msgctxt "tfcanvassize.caption"
+msgid "Canvas size"
+msgstr "حجم الصورة"
+
+#: tfcanvassize.checkbox_flipmode.caption
+msgid "Flip mode"
+msgstr "نمط الإستدارة "
+
+#: tfcanvassize.label_anchor.caption
+msgctxt "tfcanvassize.label_anchor.caption"
+msgid "Anchor :"
+msgstr "مرسي :"
+
+#: tfcanvassize.label_height.caption
+msgctxt "tfcanvassize.label_height.caption"
+msgid "Height :"
+msgstr "الطول :"
+
+#: tfcanvassize.label_width.caption
+msgctxt "tfcanvassize.label_width.caption"
+msgid "Width :"
+msgstr "عرض"
+
+#: tfcolorintensity.button_cancel.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfcolorintensity.button_ok.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "موافق"
+
+#: tfcolorintensity.caption
+msgctxt "tfcolorintensity.caption"
+msgid "Intensity"
+msgstr "حدة"
+
+#: tfcolorintensity.label_multiply.caption
+msgctxt "tfcolorintensity.label_multiply.caption"
+msgid "Multiply"
+msgstr "تضاعف"
+
+#: tfcolorintensity.label_shift.caption
+msgctxt "tfcolorintensity.label_shift.caption"
+msgid "Shift"
+msgstr "إزاحة"
+
+#: tfcolorize.button_cancel.caption
+msgctxt "TFCOLORIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfcolorize.button_ok.caption
+msgctxt "TFCOLORIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "موافق"
+
+#: tfcolorize.caption
+msgctxt "tfcolorize.caption"
+msgid "Colorize"
+msgstr "تلوين"
+
+#: tfcolorize.checkbox_gsba.caption
+msgctxt "tfcolorize.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "تصحيح درجة اللون و الخفة"
+
+#: tfcolorize.label_colorness.caption
+msgctxt "tfcolorize.label_colorness.caption"
+msgid "Colorness"
+msgstr "الألوان"
+
+#: tfcolorize.label_hue.caption
+msgctxt "tfcolorize.label_hue.caption"
+msgid "Hue"
+msgstr "تدرج"
+
+#: tfcolorize.label_preset.caption
+msgid "Preset"
+msgstr "مسبقا"
+
+#: tfcustomblur.button_cancel.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfcustomblur.button_editmask.caption
+msgid "Edit mask..."
+msgstr "تحرير القناع"
+
+#: tfcustomblur.button_loadmask.caption
+msgid "Load mask..."
+msgstr "تحميل قناع"
+
+#: tfcustomblur.button_ok.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "موافق"
+
+#: tfcustomblur.caption
+msgctxt "tfcustomblur.caption"
+msgid "Custom blur"
+msgstr "ضبابية مخصصة"
+
+#: tfcustomblur.openpicturedialog1.title
+msgid "Open grayscale file"
+msgstr "فتح ملف تدرج الرمادي"
+
+#: tfemboss.button_cancel.caption
+msgctxt "TFEMBOSS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfemboss.button_ok.caption
+msgctxt "TFEMBOSS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "موافق"
+
+#: tfemboss.caption
+msgctxt "tfemboss.caption"
+msgid "Emboss"
+msgstr "زخرف"
+
+#: tfemboss.checkbox_preservecolors.caption
+msgid "Preserve colors"
+msgstr ""
+
+#: tfemboss.checkbox_transparent.caption
+msgid "Transparent"
+msgstr ""
+
+#: tfemboss.label_direction.caption
+msgctxt "tfemboss.label_direction.caption"
+msgid "Direction :"
+msgstr "إشراف"
+
+#: tffilterfunction.button_cancel.caption
+msgctxt "tffilterfunction.button_cancel.caption"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tffilterfunction.button_ok.caption
+msgctxt "tffilterfunction.button_ok.caption"
+msgid "OK"
+msgstr "موافق"
+
+#: tffilterfunction.caption
+msgid "Apply function"
+msgstr "تطبيق الوضيفة"
+
+#: tffilterfunction.checkbox_gsba.caption
+msgctxt "tffilterfunction.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "تصحيح درجة اللون و الخفة"
+
+#: tffilterfunction.label_alphaequals.caption
+msgctxt "tffilterfunction.label_alphaequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_blueequals.caption
+msgctxt "tffilterfunction.label_blueequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_greenequals.caption
+msgctxt "tffilterfunction.label_greenequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_hueequals.caption
+msgctxt "tffilterfunction.label_hueequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_lightnessequals.caption
+msgctxt "tffilterfunction.label_lightnessequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_redequals.caption
+msgctxt "tffilterfunction.label_redequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_saturationequals.caption
+msgctxt "tffilterfunction.label_saturationequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_variables.caption
+msgid "Variables :"
+msgstr "."
+
+#: tffilterfunction.tabsheet_hsl.caption
+msgid "HSL"
+msgstr "HSL"
+
+#: tffilterfunction.tabsheet_rgb.caption
+msgctxt "tffilterfunction.tabsheet_rgb.caption"
+msgid "RGB"
+msgstr "RGB"
+
+#: tfgeometricbrush.button_cancel.caption
+msgctxt "tfgeometricbrush.button_cancel.caption"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfgeometricbrush.button_ok.caption
+msgctxt "tfgeometricbrush.button_ok.caption"
+msgid "OK"
+msgstr "موافق"
+
+#: tfgeometricbrush.caption
+msgid "Geometric brush"
+msgstr ""
+
+#: tfgeometricbrush.checkbox_isgradient.caption
+msgid "Opacity gradient"
+msgstr ""
+
+#: tfgeometricbrush.label1.caption
+msgid "Number of sides:"
+msgstr ""
+
+#: tfimagelist.caption
+msgid "Image List"
+msgstr "قائمة الصور"
+
+#: tfimagelist.pmautouncheckonopen.caption
+msgid "Autouncheck files after being open"
+msgstr "تعيين آلي للملفات عند فتحها"
+
+#: tfimagelist.pmautouncheckonsave.caption
+msgid "Autouncheck files after being edited and saved"
+msgstr "تعيين آلي للملفات عند التحرير و الحفظ"
+
+#: tfimagelist.pmremoveall.caption
+msgid "Empty image list"
+msgstr "قائمة الصور فارغة"
+
+#: tfimagelist.pmremovenonexisting.caption
+msgid "Remove nonexisting images"
+msgstr "حذف الصور الغير موجودة"
+
+#: tfimagelist.pmremoveunchecked.caption
+msgid "Remove unchecked images"
+msgstr "حذف الصور الغير معينة"
+
+#: tfimagelist.pmunchecknonexisting.caption
+msgid "Uncheck nonexisting files"
+msgstr "إزالة تعيين الملفات الغير موجودة"
+
+#: tfimagelist.stringgrid1.columns[0].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[0].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[1].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[1].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[2].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[2].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[3].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[3].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.tbaddfiles.hint
+msgid "Add images to list"
+msgstr "إضافة الصورة الى القائمة"
+
+#: tfimagelist.tbautouncheck.hint
+msgid "Enable/disable autounchecking for processed files"
+msgstr "تفعيل/تعطيل التعيين الآلي للملفات المعالجة "
+
+#: tfimagelist.tbautozoomfit.hint
+msgid "Enable/disable autofitting images in the LazPaint window"
+msgstr "تفعيل/تعطيل التناسب الآلي في نافذة LazPaint"
+
+#: tfimagelist.tbcheckall.hint
+msgid "Check all files for processing"
+msgstr "تعيين كل الملفات للمعالجة"
+
+#: tfimagelist.tbminiwindow.hint
+msgid "Switch to miniwindow"
+msgstr "التبديل إلى النافذة الصغيرة "
+
+#: tfimagelist.tbmovedown.hint
+msgid "Move selected items down"
+msgstr "تحريك العناصر المحددة للأسفل"
+
+#: tfimagelist.tbmoveup.hint
+msgid "Move selected items up"
+msgstr "تحريك العناصر المحددة للاعلى"
+
+#: tfimagelist.tbnormalwindows.hint
+msgid "Switch to normal window"
+msgstr "التبديل الى النافذة العادية"
+
+#: tfimagelist.tbopenimage.hint
+msgid "Open current image"
+msgstr "فتح الصورة الحالية"
+
+#: tfimagelist.tbopennext.hint
+msgctxt "tfimagelist.tbopennext.hint"
+msgid "Open next image (Alt-Right)"
+msgstr " فتح الصورة التالية (Alt-Right)"
+
+#: tfimagelist.tbopennextsw.hint
+msgctxt "tfimagelist.tbopennextsw.hint"
+msgid "Open next image"
+msgstr "فتح الصورة التالية"
+
+#: tfimagelist.tbopenprev.hint
+msgctxt "tfimagelist.tbopenprev.hint"
+msgid "Open previous image (Alt-Left)"
+msgstr "فتح الصورة السابقة (Alt-Left)"
+
+#: tfimagelist.tbopenprevsw.hint
+msgctxt "tfimagelist.tbopenprevsw.hint"
+msgid "Open previous image"
+msgstr "فتح الصورة السابقة"
+
+#: tfimagelist.tbremoveitem.hint
+msgid "Remove selected images from list"
+msgstr "حذف الصور المحددة من القائمة"
+
+#: tfimagelist.tbuncheckall.hint
+msgid "Uncheck all files for processing"
+msgstr "عدم تعيين كل الملفات للمعالجة"
+
+#: tfloading.caption
+msgctxt "tfloading.caption"
+msgid "Loading..."
+msgstr "تحميل ..."
+
+#: tfmotionblur.button_cancel.caption
+msgctxt "TFMOTIONBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfmotionblur.button_ok.caption
+msgctxt "TFMOTIONBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "موافق"
+
+#: tfmotionblur.caption
+msgctxt "tfmotionblur.caption"
+msgid "Motion blur"
+msgstr "ضبابية الحركة"
+
+#: tfmotionblur.checkbox_oriented.caption
+msgid "Oriented"
+msgstr "منحى"
+
+#: tfmotionblur.label_distance.caption
+msgctxt "tfmotionblur.label_distance.caption"
+msgid "Distance :"
+msgstr "المدى :"
+
+#: tfmultiimage.button_cancel.caption
+msgctxt "tfmultiimage.button_cancel.caption"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfmultiimage.button_ok.caption
+msgctxt "tfmultiimage.button_ok.caption"
+msgid "OK"
+msgstr "موافق"
+
+#: tfmultiimage.caption
+msgid "Choose image"
+msgstr "إنتقاء الصورة"
+
+#: tfnewimage.button_cancel.caption
+msgctxt "TFNEWIMAGE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfnewimage.button_ok.caption
+msgctxt "TFNEWIMAGE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "موافق"
+
+#: tfnewimage.caption
+msgctxt "tfnewimage.caption"
+msgid "New image"
+msgstr "صورة جديدة"
+
+#: tfnewimage.combobox_bitdepth.text
+msgid "32"
+msgstr ""
+
+#: tfnewimage.label_bitdepth.caption
+msgid "Bit depth :"
+msgstr ""
+
+#: tfnewimage.label_height.caption
+msgctxt "tfnewimage.label_height.caption"
+msgid "Height :"
+msgstr "الطول :"
+
+#: tfnewimage.label_height1.caption
+msgid "Ratio :"
+msgstr ""
+
+#: tfnewimage.label_memoryrequired.caption
+msgid "Memory required :"
+msgstr ""
+
+#: tfnewimage.label_width.caption
+msgctxt "tfnewimage.label_width.caption"
+msgid "Width :"
+msgstr "العرض :"
+
+#: tfnoisefilter.button_cancel.caption
+msgctxt "tfnoisefilter.button_cancel.caption"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfnoisefilter.button_ok.caption
+msgctxt "tfnoisefilter.button_ok.caption"
+msgid "OK"
+msgstr "موافق"
+
+#: tfnoisefilter.caption
+msgid "Noise filter"
+msgstr "مرشح الضجيج"
+
+#: tfnoisefilter.label_opacity.caption
+msgid "Opacity:"
+msgstr "العتمة :"
+
+#: tfnoisefilter.radio_grayscalenoise.caption
+msgid "Grayscale noise"
+msgstr "ضجيج تدرج رمادي"
+
+#: tfnoisefilter.radio_rgbnoise.caption
+msgid "RGB noise"
+msgstr "ضجيج لوني RGB"
+
+#: tfobject3d.button_cancel.caption
+msgctxt "tfobject3d.button_cancel.caption"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfobject3d.button_loadtex.caption
+msgid "Texture..."
+msgstr "نسيج..."
+
+#: tfobject3d.button_notex.caption
+msgid "No tex."
+msgstr ""
+
+#: tfobject3d.button_ok.caption
+msgctxt "tfobject3d.button_ok.caption"
+msgid "OK"
+msgstr "موافق"
+
+#: tfobject3d.caption
+msgid "3D object"
+msgstr "جسم ثلاثي الابعاد"
+
+#: tfobject3d.checkbox_antialiasing.caption
+msgid "Antialiasing"
+msgstr "ضد الإسترداف"
+
+#: tfobject3d.checkbox_biface.caption
+msgid "2-sided faces"
+msgstr "وجه بجهتين"
+
+#: tfobject3d.checkbox_textureinterp.caption
+msgid "Texture interpolation"
+msgstr "نسيج متولد"
+
+#: tfobject3d.groupbox_selectedlight.caption
+msgid "Selected light"
+msgstr ""
+
+#: tfobject3d.groupbox_selectedmaterial.caption
+msgctxt "tfobject3d.groupbox_selectedmaterial.caption"
+msgid "Selected material"
+msgstr "المادة المحددة"
+
+#: tfobject3d.label_color.caption
+msgctxt "tfobject3d.label_color.caption"
+msgid "Color :"
+msgstr "اللون :"
+
+#: tfobject3d.label_color1.caption
+msgctxt "tfobject3d.label_color1.caption"
+msgid "Color :"
+msgstr "اللون :"
+
+#: tfobject3d.label_height.caption
+msgctxt "tfobject3d.label_height.caption"
+msgid "Height :"
+msgstr "الطول :"
+
+#: tfobject3d.label_lightingnormals.caption
+msgctxt "tfobject3d.label_lightingnormals.caption"
+msgid "Lighting normals :"
+msgstr "إضاءة طبيعية"
+
+#: tfobject3d.label_lights.caption
+msgid "Lights :"
+msgstr ""
+
+#: tfobject3d.label_materials.caption
+msgctxt "tfobject3d.label_materials.caption"
+msgid "Materials :"
+msgstr "المواد :"
+
+#: tfobject3d.label_opacity.caption
+msgctxt "tfobject3d.label_opacity.caption"
+msgid "Opacity :"
+msgstr "العتمة :"
+
+#: tfobject3d.label_specularindex.caption
+msgctxt "tfobject3d.label_specularindex.caption"
+msgid "Spec. index :"
+msgstr "فهرس :"
+
+#: tfobject3d.label_width.caption
+msgctxt "tfobject3d.label_width.caption"
+msgid "Width :"
+msgstr "عرض"
+
+#: tfobject3d.label_zoom.caption
+msgctxt "tfobject3d.label_zoom.caption"
+msgid "Zoom"
+msgstr "زوم"
+
+#: tfobject3d.lights.caption
+msgid "Lights"
+msgstr ""
+
+#: tfobject3d.materials.caption
+msgid "Materials"
+msgstr "المواد :"
+
+#: tfobject3d.opentexturedialog.title
+msgctxt "tfobject3d.opentexturedialog.title"
+msgid "Open texture"
+msgstr "فتح نسيج"
+
+#: tfobject3d.rendering.caption
+msgid "Rendering"
+msgstr "تصيير"
+
+#: tfobject3d.tooladddirectional.hint
+msgid "Add a directional light"
+msgstr ""
+
+#: tfobject3d.toolpointlight.hint
+msgid "Add a point light"
+msgstr ""
+
+#: tfobject3d.toolremoveselectedlight.hint
+msgid "Remove selected light"
+msgstr ""
+
+#: tfphongfilter.button_cancel.caption
+msgctxt "tfphongfilter.button_cancel.caption"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfphongfilter.button_ok.caption
+msgctxt "tfphongfilter.button_ok.caption"
+msgid "OK"
+msgstr "موافق"
+
+#: tfphongfilter.caption
+msgctxt "tfphongfilter.caption"
+msgid "Shaded map"
+msgstr "خارطة التظليل"
+
+#: tfphongfilter.groupbox_color.caption
+msgctxt "tfphongfilter.groupbox_color.caption"
+msgid "Color"
+msgstr "لون"
+
+#: tfphongfilter.groupbox_color1.caption
+msgid "Altitude map"
+msgstr "خارطة الإرتفاع"
+
+#: tfphongfilter.label_altitude.caption
+msgid "Global altitude :"
+msgstr "الإرتفاع الشامل"
+
+#: tfphongfilter.label_lightposition.caption
+msgid "Light position :"
+msgstr "موقع الضوء"
+
+#: tfphongfilter.radio_mapalpha.caption
+msgid "Alpha"
+msgstr "ألفا"
+
+#: tfphongfilter.radio_mapblue.caption
+msgid "B"
+msgstr "B"
+
+#: tfphongfilter.radio_mapgreen.caption
+msgid "G"
+msgstr "G"
+
+#: tfphongfilter.radio_maplightness.caption
+msgctxt "tfphongfilter.radio_maplightness.caption"
+msgid "Lightness"
+msgstr "إضاءة"
+
+#: tfphongfilter.radio_maplinearlightness.caption
+msgid "Linear lightness"
+msgstr "الخفة الخطية"
+
+#: tfphongfilter.radio_mapred.caption
+msgid "R"
+msgstr "R"
+
+#: tfphongfilter.radio_mapsaturation.caption
+msgctxt "tfphongfilter.radio_mapsaturation.caption"
+msgid "Saturation"
+msgstr "التشبيع"
+
+#: tfphongfilter.radio_usebackcolor.caption
+msgid "Back color"
+msgstr "لون الخلفية"
+
+#: tfphongfilter.radio_usekeep.caption
+msgid "Keep"
+msgstr "احتفظ"
+
+#: tfphongfilter.radio_usepencolor.caption
+msgid "Pen color"
+msgstr "لون القلم"
+
+#: tfphongfilter.radio_usetexture.caption
+msgctxt "tfphongfilter.radio_usetexture.caption"
+msgid "Current texture"
+msgstr "النسيج الحالي"
+
+#: tfpixelate.button_cancel.caption
+msgctxt "TFPIXELATE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfpixelate.button_ok.caption
+msgctxt "TFPIXELATE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "موافق"
+
+#: tfpixelate.caption
+msgctxt "tfpixelate.caption"
+msgid "Pixelate"
+msgstr "تأخير البكس"
+
+#: tfpixelate.label_pixelsize.caption
+msgctxt "tfpixelate.label_pixelsize.caption"
+msgid "Pixel size :"
+msgstr "حجم البيكسل :"
+
+#: tfpixelate.label_quality.caption
+msgctxt "tfpixelate.label_quality.caption"
+msgid "Quality :"
+msgstr "الجودة :"
+
+#: tfposterize.button_cancel.caption
+msgctxt "tfposterize.button_cancel.caption"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfposterize.button_ok.caption
+msgctxt "tfposterize.button_ok.caption"
+msgid "OK"
+msgstr "موافق"
+
+#: tfposterize.caption
+msgctxt "tfposterize.caption"
+msgid "Posterize"
+msgstr "قسلمة"
+
+#: tfposterize.checkbox_bylightness.caption
+msgid "By lightness"
+msgstr "حسب الضوء"
+
+#: tfposterize.label_levels.caption
+msgid "Levels :"
+msgstr "المستوى :"
+
+#: tfpreviewdialog.caption
+msgid "Preview"
+msgstr ""
+
+#: tfpreviewdialog.lstatus.caption
+msgctxt "tfpreviewdialog.lstatus.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.button_configureprinter.caption
+msgid "Configure..."
+msgstr "تكوين..."
+
+#: tfprint.button_print.caption
+msgid "Print!"
+msgstr "طباعة!"
+
+#: tfprint.button_zoomfit.caption
+msgctxt "tfprint.button_zoomfit.caption"
+msgid "Zoom fit"
+msgstr "زووم مناسب"
+
+#: tfprint.caption
+msgid "Print"
+msgstr "طباعة"
+
+#: tfprint.checkbox_ratio.caption
+msgctxt "tfprint.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "إبقاء نسبة الجانب"
+
+#: tfprint.groupbox_imagesize.caption
+msgid "Image size"
+msgstr "حجم الصورة"
+
+#: tfprint.groupbox_margins.caption
+msgid "Margins"
+msgstr "هوامش"
+
+#: tfprint.label_bottom.caption
+msgid "Bottom:"
+msgstr "أسفل"
+
+#: tfprint.label_dpix.caption
+msgctxt "tfprint.label_dpix.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.label_dpiy.caption
+msgctxt "tfprint.label_dpiy.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.label_height.caption
+msgid "Height:"
+msgstr "إرتفاع:"
+
+#: tfprint.label_left.caption
+msgid "Left:"
+msgstr "اليسار:"
+
+#: tfprint.label_orientation.caption
+msgid "Orientation:"
+msgstr "توجه:"
+
+#: tfprint.label_printerandpaper.caption
+msgid "Printer and paper:"
+msgstr "طابعات و اوراق"
+
+#: tfprint.label_right.caption
+msgid "Right:"
+msgstr "اليمين:"
+
+#: tfprint.label_top.caption
+msgid "Top:"
+msgstr "الأعلى"
+
+#: tfprint.label_width.caption
+msgid "Width:"
+msgstr "العرض:"
+
+#: tfquestion.caption
+msgid "Question"
+msgstr ""
+
+#: tfquestion.checkbox_rememberchoice.caption
+msgid "Remember this choice"
+msgstr ""
+
+#: tfquestion.label_message.caption
+msgctxt "tfquestion.label_message.caption"
+msgid "."
+msgstr "."
+
+#: tfradialblur.button_cancel.caption
+msgctxt "TFRADIALBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfradialblur.button_ok.caption
+msgctxt "TFRADIALBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "موافق"
+
+#: tfradialblur.caption
+msgctxt "tfradialblur.caption"
+msgid "Radial blur"
+msgstr "ضباب شعاعي"
+
+#: tfradialblur.label_radius.caption
+msgctxt "tfradialblur.label_radius.caption"
+msgid "Radius :"
+msgstr "نصف القطر :"
+
+#: tfrain.button_cancel.caption
+msgctxt "tfrain.button_cancel.caption"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfrain.button_ok.caption
+msgctxt "tfrain.button_ok.caption"
+msgid "OK"
+msgstr "موافق"
+
+#: tfrain.caption
+msgid "Rain"
+msgstr ""
+
+#: tfrain.label_quantity.caption
+msgid "Quantity:"
+msgstr ""
+
+#: tfrain.label_wind.caption
+msgid "Wind :"
+msgstr ""
+
+#: tfresample.button_cancel.caption
+msgctxt "TFRESAMPLE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfresample.button_ok.caption
+msgctxt "TFRESAMPLE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "موافق"
+
+#: tfresample.caption
+msgctxt "tfresample.caption"
+msgid "Resample"
+msgstr "إعادة تشكيل"
+
+#: tfresample.checkbox_ratio.caption
+msgctxt "tfresample.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "إبقاء نسبة الجانب"
+
+#: tfresample.label_height.caption
+msgctxt "tfresample.label_height.caption"
+msgid "Height :"
+msgstr "الطول :"
+
+#: tfresample.label_quality.caption
+msgctxt "tfresample.label_quality.caption"
+msgid "Quality :"
+msgstr "الجودة :"
+
+#: tfresample.label_width.caption
+msgctxt "tfresample.label_width.caption"
+msgid "Width :"
+msgstr "عرض"
+
+#: tfsaveoption.button_cancel.caption
+msgctxt "tfsaveoption.button_cancel.caption"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfsaveoption.button_ok.caption
+msgctxt "tfsaveoption.button_ok.caption"
+msgid "OK"
+msgstr "موافق"
+
+#: tfsaveoption.caption
+msgctxt "tfsaveoption.caption"
+msgid "Save"
+msgstr "حفظ"
+
+#: tfsaveoption.checkbox_dithering.caption
+msgid "Dithering"
+msgstr ""
+
+#: tfsaveoption.label1.caption
+msgid "Quality:"
+msgstr ""
+
+#: tfsaveoption.label_0.caption
+msgid "0"
+msgstr ""
+
+#: tfsaveoption.label_1.caption
+msgid "100"
+msgstr ""
+
+#: tfsaveoption.label_50.caption
+msgid "50"
+msgstr ""
+
+#: tfsaveoption.label_colordepth.caption
+msgid "Color depth:"
+msgstr ""
+
+#: tfsaveoption.label_size.caption
+msgid "Size:"
+msgstr ""
+
+#: tfsaveoption.radiobutton_16colors.caption
+msgid "16 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_24bitsperpixel.caption
+msgid "24 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_256colors.caption
+msgid "256 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_2colors.caption
+msgid "2 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_32bitsperpixel.caption
+msgid "32 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_miomap.caption
+msgid "MioMap"
+msgstr ""
+
+#: tfsharpen.button_cancel.caption
+msgctxt "tfsharpen.button_cancel.caption"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfsharpen.button_ok.caption
+msgctxt "tfsharpen.button_ok.caption"
+msgid "OK"
+msgstr "موافق"
+
+#: tfsharpen.caption
+msgid "Sharpen/Smooth"
+msgstr ""
+
+#: tfsharpen.label_amount.caption
+msgctxt "tfsharpen.label_amount.caption"
+msgid "Amount :"
+msgstr "القدر :"
+
+#: tfshiftcolors.button_cancel.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: tfshiftcolors.button_ok.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "موافق"
+
+#: tfshiftcolors.caption
+msgctxt "tfshiftcolors.caption"
+msgid "Shift colors"
+msgstr "سحب الألوان  "
+
+#: tfshiftcolors.checkbox_gsba.caption
+msgctxt "tfshiftcolors.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "تصحيح درجة اللون و الخفة"
+
+#: tfshiftcolors.label1.caption
+msgctxt "TFSHIFTCOLORS.LABEL1.CAPTION"
+msgid "Hue"
+msgstr "تدرج"
+
+#: tfshiftcolors.label2.caption
+msgctxt "TFSHIFTCOLORS.LABEL2.CAPTION"
+msgid "Saturation"
+msgstr "التشبيع"
+
+#: tftoolbox.caption
+msgctxt "tftoolbox.caption"
+msgid "Tools"
+msgstr " الأدوات "
+

+ 1208 - 12
lazpaint/release/bin/i18n/lazpaint.cs.po

@@ -1555,9 +1555,9 @@ msgstr "všechny"
 msgid "All supported filetypes"
 msgstr "Všechny podporované formáty souborů"
 
-#: uresourcestrings.rsaltshiftscalemode
-msgid "Hold ALT or SHIFT to scale"
-msgstr "Držte ALT nebo SHIFT pro měřítko "
+#: uresourcestrings.rsholdkeysscalemode
+msgid "Hold %1 or %2 to scale"
+msgstr "Držte %1 nebo %2 pro měřítko "
 
 #: uresourcestrings.rsanimatedgif
 msgid "Animated GIF"
@@ -1672,9 +1672,9 @@ msgstr "Kosinus"
 msgid "Crop"
 msgstr "Oříznout"
 
-#: uresourcestrings.rsctrlrestrictrotation
-msgid "Hold CTRL to restrict rotation angle"
-msgstr "Přidržte CTRL pro omezení úhlu otočení"
+#: uresourcestrings.rsholdkeyrestrictrotation
+msgid "Hold %1 to restrict rotation angle"
+msgstr "Přidržte %1 pro omezení úhlu otočení"
 
 #: uresourcestrings.rscurvemodehint
 msgid "Press S or X to set the curve mode of the last point"
@@ -1837,13 +1837,13 @@ msgstr ""
 msgid "Half-cosine"
 msgstr "Poloviční-kosinus"
 
-#: uresourcestrings.rsholdctrlsnaptopixel
-msgid "Hold CTRL to snap to pixels"
-msgstr "Přidržte CTRL pro přichycení k bodům"
+#: uresourcestrings.rsholdkeysnaptopixel
+msgid "Hold %1 to snap to pixels"
+msgstr "Přidržte %1 pro přichycení k bodům"
 
-#: uresourcestrings.rsholdshiftforsquare
-msgid "Hold SHIFT to draw a square or a circle"
-msgstr "Přidržte SHIFT pro kreslení čtverce nebo kruhu"
+#: uresourcestrings.rsholdkeyforsquare
+msgid "Hold %1 to draw a square or a circle"
+msgstr "Přidržte %1 pro kreslení čtverce nebo kruhu"
 
 #: uresourcestrings.rshotspot
 msgctxt "uresourcestrings.rshotspot"
@@ -2306,3 +2306,1199 @@ msgstr ""
 msgid "Yes"
 msgstr "Ano"
 
+#: tablet.getprocfailed
+msgid "Procedure %s failed to load properly."
+msgstr ""
+
+#: tablet.openfailed
+msgid "Tablet context failed to open."
+msgstr ""
+
+#: tfabout.button_donate.caption
+msgctxt "tfabout.button_donate.caption"
+msgid "Donate..."
+msgstr "Přispět..."
+
+#: tfabout.caption
+msgctxt "tfabout.caption"
+msgid "About"
+msgstr "O programu"
+
+#: tfabout.labelurl.caption
+msgid "http://sourceforge.net/projects/lazpaint/"
+msgstr "http://sourceforge.net/projects/lazpaint/"
+
+#: tfabout.label_authors.caption
+msgctxt "tfabout.label_authors.caption"
+msgid "Authors:"
+msgstr "Autoři:"
+
+#: tfabout.label_authorsvalue.caption
+#| msgid "Circular help by FabienWang and Lainz"
+msgctxt "tfabout.label_authorsvalue.caption"
+msgid "Circular helped by FabienWang, Lainz and others"
+msgstr "Circular s pomocí FabienWang, Lainz a dalších"
+
+#: tfabout.label_homepage.caption
+msgctxt "tfabout.label_homepage.caption"
+msgid "Homepage:"
+msgstr "Domovská stránka:"
+
+#: tfabout.label_libraries.caption
+msgctxt "tfabout.label_libraries.caption"
+msgid "Libraries used:"
+msgstr "Použité knihovny:"
+
+#: tfabout.label_licence.caption
+msgctxt "tfabout.label_licence.caption"
+msgid "Licence:"
+msgstr "Licence:"
+
+#: tfabout.label_opensource.caption
+msgctxt "tfabout.label_opensource.caption"
+msgid "Open source (GPLv3)"
+msgstr "Otevřený kód (GPLv3)"
+
+#: tfadjustcurves.button_cancel.caption
+msgctxt "tfadjustcurves.button_cancel.caption"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfadjustcurves.button_ok.caption
+msgctxt "tfadjustcurves.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfadjustcurves.caption
+msgid "Adjust curves"
+msgstr "Nastavit křivky"
+
+#: tfadjustcurves.toolbutton_newcurve.hint
+msgid "Discard current curve and start a new one"
+msgstr "Zahodit aktuální křivku a začít novou"
+
+#: tfadjustcurves.toolbutton_posterize.hint
+msgctxt "tfadjustcurves.toolbutton_posterize.hint"
+msgid "Posterize"
+msgstr "Posterizace"
+
+#: tfadjustcurves.toolbutton_removepoint.hint
+msgid "Remove selected point (Del)"
+msgstr "Odebrat vybrané body (Del)"
+
+#: tfblendop.button_cancel.caption
+msgctxt "tfblendop.button_cancel.caption"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfblendop.button_ok.caption
+msgctxt "tfblendop.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfblendop.caption
+msgid "Blend operation"
+msgstr "Operace míchání"
+
+#: tfblendop.label_blendopcategory.caption
+msgctxt "tfblendop.label_blendopcategory.caption"
+msgid "Category of blend operation"
+msgstr "Kategorie operace mísení"
+
+#: tfblendop.label_blendopvalue.caption
+msgctxt "tfblendop.label_blendopvalue.caption"
+msgid "."
+msgstr "."
+
+#: tfblendop.label_kritaover.caption
+msgctxt "tfblendop.label_kritaover.caption"
+msgid "Krita"
+msgstr "Krita"
+
+#: tfblendop.label_kritaover.hint
+msgid "Blend operations that are available in Krita"
+msgstr "Operace mísení jsou dostupné v Krita"
+
+#: tfblendop.label_otherover.caption
+msgctxt "tfblendop.label_otherover.caption"
+msgid "Other"
+msgstr "Jiné"
+
+#: tfblendop.label_otherover.hint
+msgid "Blend operations of LazPaint and Paint.NET"
+msgstr "Operace mísení LazPaint a Paint.NET"
+
+#: tfblendop.label_patternover.caption
+msgctxt "tfblendop.label_patternover.caption"
+msgid "Pattern over"
+msgstr "Vzor přes"
+
+#: tfblendop.label_patternover.hint
+msgid "Preview blend operation with the specified image on top"
+msgstr "Náhled operace mísení se zadaným obrázkem nahoře"
+
+#: tfblendop.label_patternunder.caption
+msgctxt "tfblendop.label_patternunder.caption"
+msgid "Pattern under"
+msgstr "Vzor pod"
+
+#: tfblendop.label_patternunder.hint
+msgid "Preview blend operation with the specified image underneath"
+msgstr "Náhled operace mísení se zadaným obrázkem pod"
+
+#: tfblendop.label_previewwith.caption
+msgctxt "tfblendop.label_previewwith.caption"
+msgid "Preview with"
+msgstr "Náhled s"
+
+#: tfblendop.label_selectedblendop.caption
+msgid "Selected blend operation :"
+msgstr "Vybraná operace míchání :"
+
+#: tfblendop.label_svgover.caption
+msgctxt "tfblendop.label_svgover.caption"
+msgid "Basic SVG"
+msgstr "Základní SVG"
+
+#: tfblendop.label_svgover.hint
+msgid "Basic blend operations that are available in virtually all image editors"
+msgstr "Základní operace mísení, který je dostupná prakticky ve všech editorech obrázků"
+
+#: tfbrowseimages.caption
+msgid "Browse images"
+msgstr "Procházet obrázky"
+
+#: tfbrowseimages.checkbox_usedirectoryonstartup.caption
+msgid "Use this directory on startup"
+msgstr ""
+
+#: tfbrowseimages.label_status.caption
+msgctxt "tfbrowseimages.label_status.caption"
+msgid "."
+msgstr "."
+
+#: tfbrowseimages.toolbutton_createfolderorcontainer.hint
+msgid "Create folder or container"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_goup.hint
+msgid "Go one directory up"
+msgstr "Jít o adresář výše"
+
+#: tfbrowseimages.toolbutton_openselectedfiles.hint
+msgid "Open selected files"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_viewbigicon.hint
+msgctxt "tfbrowseimages.toolbutton_viewbigicon.hint"
+msgid "Show big icons"
+msgstr "Ukázat velké ikony"
+
+#: tfbrowseimages.toolbutton_viewdetails.hint
+msgctxt "tfbrowseimages.toolbutton_viewdetails.hint"
+msgid "Show details and preview"
+msgstr "Ukázat podrobnosti a náhled"
+
+#: tfbrowseimages.tool_selectdrive.hint
+msgid "Select drive"
+msgstr ""
+
+#: tfcanvassize.button_cancel.caption
+msgctxt "TFCANVASSIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfcanvassize.button_ok.caption
+msgctxt "TFCANVASSIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcanvassize.caption
+msgctxt "tfcanvassize.caption"
+msgid "Canvas size"
+msgstr "Velikost plátna"
+
+#: tfcanvassize.checkbox_flipmode.caption
+msgid "Flip mode"
+msgstr "Převrácený režim"
+
+#: tfcanvassize.label_anchor.caption
+msgctxt "tfcanvassize.label_anchor.caption"
+msgid "Anchor :"
+msgstr "Kotva :"
+
+#: tfcanvassize.label_height.caption
+msgctxt "tfcanvassize.label_height.caption"
+msgid "Height :"
+msgstr "Výška :"
+
+#: tfcanvassize.label_width.caption
+msgctxt "tfcanvassize.label_width.caption"
+msgid "Width :"
+msgstr "Šířka :"
+
+#: tfcolorintensity.button_cancel.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfcolorintensity.button_ok.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcolorintensity.caption
+msgctxt "tfcolorintensity.caption"
+msgid "Intensity"
+msgstr "Jas"
+
+#: tfcolorintensity.label_multiply.caption
+msgctxt "tfcolorintensity.label_multiply.caption"
+msgid "Multiply"
+msgstr "Násobek"
+
+#: tfcolorintensity.label_shift.caption
+msgctxt "tfcolorintensity.label_shift.caption"
+msgid "Shift"
+msgstr "Posun"
+
+#: tfcolorize.button_cancel.caption
+msgctxt "TFCOLORIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfcolorize.button_ok.caption
+msgctxt "TFCOLORIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcolorize.caption
+msgctxt "tfcolorize.caption"
+msgid "Colorize"
+msgstr "Obarvení"
+
+#: tfcolorize.checkbox_gsba.caption
+msgctxt "tfcolorize.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "Opravený odstín a světlost"
+
+#: tfcolorize.label_colorness.caption
+msgctxt "tfcolorize.label_colorness.caption"
+msgid "Colorness"
+msgstr "Barevný"
+
+#: tfcolorize.label_hue.caption
+msgctxt "tfcolorize.label_hue.caption"
+msgid "Hue"
+msgstr "Odstín"
+
+#: tfcolorize.label_preset.caption
+msgid "Preset"
+msgstr "Předvolba"
+
+#: tfcustomblur.button_cancel.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfcustomblur.button_editmask.caption
+msgid "Edit mask..."
+msgstr "Upravit masku..."
+
+#: tfcustomblur.button_loadmask.caption
+msgid "Load mask..."
+msgstr "Načíst masku..."
+
+#: tfcustomblur.button_ok.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcustomblur.caption
+msgctxt "tfcustomblur.caption"
+msgid "Custom blur"
+msgstr "Vlastní rozostření"
+
+#: tfcustomblur.openpicturedialog1.title
+msgid "Open grayscale file"
+msgstr "Otevřít černobílý obrázek"
+
+#: tfemboss.button_cancel.caption
+msgctxt "TFEMBOSS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfemboss.button_ok.caption
+msgctxt "TFEMBOSS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfemboss.caption
+msgctxt "tfemboss.caption"
+msgid "Emboss"
+msgstr "Vytlačit"
+
+#: tfemboss.checkbox_preservecolors.caption
+msgid "Preserve colors"
+msgstr ""
+
+#: tfemboss.checkbox_transparent.caption
+msgid "Transparent"
+msgstr ""
+
+#: tfemboss.label_direction.caption
+msgctxt "tfemboss.label_direction.caption"
+msgid "Direction :"
+msgstr "Směr :"
+
+#: tffilterfunction.button_cancel.caption
+msgctxt "tffilterfunction.button_cancel.caption"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tffilterfunction.button_ok.caption
+msgctxt "tffilterfunction.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tffilterfunction.caption
+msgid "Apply function"
+msgstr "Použít funkci"
+
+#: tffilterfunction.checkbox_gsba.caption
+msgctxt "tffilterfunction.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "Opravný odstín a světlost"
+
+#: tffilterfunction.label_alphaequals.caption
+msgctxt "tffilterfunction.label_alphaequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_blueequals.caption
+msgctxt "tffilterfunction.label_blueequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_greenequals.caption
+msgctxt "tffilterfunction.label_greenequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_hueequals.caption
+msgctxt "tffilterfunction.label_hueequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_lightnessequals.caption
+msgctxt "tffilterfunction.label_lightnessequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_redequals.caption
+msgctxt "tffilterfunction.label_redequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_saturationequals.caption
+msgctxt "tffilterfunction.label_saturationequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_variables.caption
+msgid "Variables :"
+msgstr "Proměnné :"
+
+#: tffilterfunction.tabsheet_hsl.caption
+msgid "HSL"
+msgstr "HSL"
+
+#: tffilterfunction.tabsheet_rgb.caption
+msgctxt "tffilterfunction.tabsheet_rgb.caption"
+msgid "RGB"
+msgstr "RGB"
+
+#: tfgeometricbrush.button_cancel.caption
+msgctxt "tfgeometricbrush.button_cancel.caption"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfgeometricbrush.button_ok.caption
+msgctxt "tfgeometricbrush.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfgeometricbrush.caption
+msgid "Geometric brush"
+msgstr ""
+
+#: tfgeometricbrush.checkbox_isgradient.caption
+msgid "Opacity gradient"
+msgstr ""
+
+#: tfgeometricbrush.label1.caption
+msgid "Number of sides:"
+msgstr ""
+
+#: tfimagelist.caption
+msgid "Image List"
+msgstr "Seznam obrázků"
+
+#: tfimagelist.pmautouncheckonopen.caption
+msgid "Autouncheck files after being open"
+msgstr "Samo odškrtnutí souborů po otevření"
+
+#: tfimagelist.pmautouncheckonsave.caption
+msgid "Autouncheck files after being edited and saved"
+msgstr "Samo odškrtnutí souborů po úpravě a uložení"
+
+#: tfimagelist.pmremoveall.caption
+msgid "Empty image list"
+msgstr "Prázdný seznam obrázků"
+
+#: tfimagelist.pmremovenonexisting.caption
+msgid "Remove nonexisting images"
+msgstr "Odebrat neexistující obrázky"
+
+#: tfimagelist.pmremoveunchecked.caption
+msgid "Remove unchecked images"
+msgstr "Odstranit nezaškrtnuté soubory"
+
+#: tfimagelist.pmunchecknonexisting.caption
+msgid "Uncheck nonexisting files"
+msgstr "Odškrtnout neexistující soubory"
+
+#: tfimagelist.stringgrid1.columns[0].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[0].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[1].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[1].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[2].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[2].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[3].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[3].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.tbaddfiles.hint
+msgid "Add images to list"
+msgstr "Přidat obrázek do seznamu"
+
+#: tfimagelist.tbautouncheck.hint
+msgid "Enable/disable autounchecking for processed files"
+msgstr "Povolení/zakázaní samo zaškrtnutí pro zpracované soubory"
+
+#: tfimagelist.tbautozoomfit.hint
+msgid "Enable/disable autofitting images in the LazPaint window"
+msgstr "Povolit/zakázat samopřiblížení obrázků v okně LazPaint"
+
+#: tfimagelist.tbcheckall.hint
+msgid "Check all files for processing"
+msgstr "Zaškrtněte všechny soubory ke zpracování"
+
+#: tfimagelist.tbminiwindow.hint
+msgid "Switch to miniwindow"
+msgstr "Přepnout na malé okno"
+
+#: tfimagelist.tbmovedown.hint
+msgid "Move selected items down"
+msgstr "Přesunout vybrané položky dolů"
+
+#: tfimagelist.tbmoveup.hint
+msgid "Move selected items up"
+msgstr "Přesunout vybrané položky nahoru"
+
+#: tfimagelist.tbnormalwindows.hint
+msgid "Switch to normal window"
+msgstr "Přepnout na normální okno"
+
+#: tfimagelist.tbopenimage.hint
+msgid "Open current image"
+msgstr "Otevřít aktuální obrázek"
+
+#: tfimagelist.tbopennext.hint
+msgctxt "tfimagelist.tbopennext.hint"
+msgid "Open next image (Alt-Right)"
+msgstr "Otevřít další soubor (Alt+Right)"
+
+#: tfimagelist.tbopennextsw.hint
+msgctxt "tfimagelist.tbopennextsw.hint"
+msgid "Open next image"
+msgstr "Otevřít další soubor"
+
+#: tfimagelist.tbopenprev.hint
+msgctxt "tfimagelist.tbopenprev.hint"
+msgid "Open previous image (Alt-Left)"
+msgstr "Otevřít předchozí obrázek (Alt-Left)"
+
+#: tfimagelist.tbopenprevsw.hint
+msgctxt "tfimagelist.tbopenprevsw.hint"
+msgid "Open previous image"
+msgstr "Otevřít předchozí obrázek"
+
+#: tfimagelist.tbremoveitem.hint
+msgid "Remove selected images from list"
+msgstr "Odebrat vybrané obrázky ze seznamu"
+
+#: tfimagelist.tbuncheckall.hint
+msgid "Uncheck all files for processing"
+msgstr "Odškrtnout všechny soubory pro zpracování"
+
+#: tfloading.caption
+msgctxt "tfloading.caption"
+msgid "Loading..."
+msgstr "Načítání..."
+
+#: tfmotionblur.button_cancel.caption
+msgctxt "TFMOTIONBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfmotionblur.button_ok.caption
+msgctxt "TFMOTIONBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfmotionblur.caption
+msgctxt "tfmotionblur.caption"
+msgid "Motion blur"
+msgstr "Pohybové rozostření"
+
+#: tfmotionblur.checkbox_oriented.caption
+msgid "Oriented"
+msgstr "Orientovaný"
+
+#: tfmotionblur.label_distance.caption
+msgctxt "tfmotionblur.label_distance.caption"
+msgid "Distance :"
+msgstr "Vzdálenost :"
+
+#: tfmultiimage.button_cancel.caption
+msgctxt "tfmultiimage.button_cancel.caption"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfmultiimage.button_ok.caption
+msgctxt "tfmultiimage.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfmultiimage.caption
+msgid "Choose image"
+msgstr "Vybrat obrázek"
+
+#: tfnewimage.button_cancel.caption
+msgctxt "TFNEWIMAGE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfnewimage.button_ok.caption
+msgctxt "TFNEWIMAGE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfnewimage.caption
+msgctxt "tfnewimage.caption"
+msgid "New image"
+msgstr "Nový obrázek"
+
+#: tfnewimage.combobox_bitdepth.text
+msgid "32"
+msgstr ""
+
+#: tfnewimage.label_bitdepth.caption
+msgid "Bit depth :"
+msgstr ""
+
+#: tfnewimage.label_height.caption
+msgctxt "tfnewimage.label_height.caption"
+msgid "Height :"
+msgstr "Výška :"
+
+#: tfnewimage.label_height1.caption
+msgid "Ratio :"
+msgstr ""
+
+#: tfnewimage.label_memoryrequired.caption
+msgid "Memory required :"
+msgstr ""
+
+#: tfnewimage.label_width.caption
+msgctxt "tfnewimage.label_width.caption"
+msgid "Width :"
+msgstr "Šířka :"
+
+#: tfnoisefilter.button_cancel.caption
+msgctxt "tfnoisefilter.button_cancel.caption"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfnoisefilter.button_ok.caption
+msgctxt "tfnoisefilter.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfnoisefilter.caption
+msgid "Noise filter"
+msgstr "Šumový filtr"
+
+#: tfnoisefilter.label_opacity.caption
+msgid "Opacity:"
+msgstr "Průhlednost:"
+
+#: tfnoisefilter.radio_grayscalenoise.caption
+msgid "Grayscale noise"
+msgstr "Šedý šum"
+
+#: tfnoisefilter.radio_rgbnoise.caption
+msgid "RGB noise"
+msgstr "RBG šum"
+
+#: tfobject3d.button_cancel.caption
+msgctxt "tfobject3d.button_cancel.caption"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfobject3d.button_loadtex.caption
+msgid "Texture..."
+msgstr "Textura..."
+
+#: tfobject3d.button_notex.caption
+msgid "No tex."
+msgstr "Ne tex."
+
+#: tfobject3d.button_ok.caption
+msgctxt "tfobject3d.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfobject3d.caption
+msgid "3D object"
+msgstr "3D objekt"
+
+#: tfobject3d.checkbox_antialiasing.caption
+msgid "Antialiasing"
+msgstr "Antialiasing"
+
+#: tfobject3d.checkbox_biface.caption
+msgid "2-sided faces"
+msgstr "2-stranné povrchy"
+
+#: tfobject3d.checkbox_textureinterp.caption
+msgid "Texture interpolation"
+msgstr "Interpolace textury"
+
+#: tfobject3d.groupbox_selectedlight.caption
+msgid "Selected light"
+msgstr ""
+
+#: tfobject3d.groupbox_selectedmaterial.caption
+msgctxt "tfobject3d.groupbox_selectedmaterial.caption"
+msgid "Selected material"
+msgstr "Vybraný materiál"
+
+#: tfobject3d.label_color.caption
+msgctxt "tfobject3d.label_color.caption"
+msgid "Color :"
+msgstr "Barva :"
+
+#: tfobject3d.label_color1.caption
+msgctxt "tfobject3d.label_color1.caption"
+msgid "Color :"
+msgstr "Barva :"
+
+#: tfobject3d.label_height.caption
+msgctxt "tfobject3d.label_height.caption"
+msgid "Height :"
+msgstr "Výška :"
+
+#: tfobject3d.label_lightingnormals.caption
+msgctxt "tfobject3d.label_lightingnormals.caption"
+msgid "Lighting normals :"
+msgstr "Světelné normály :"
+
+#: tfobject3d.label_lights.caption
+msgid "Lights :"
+msgstr ""
+
+#: tfobject3d.label_materials.caption
+msgctxt "tfobject3d.label_materials.caption"
+msgid "Materials :"
+msgstr "Materiály:"
+
+#: tfobject3d.label_opacity.caption
+msgctxt "tfobject3d.label_opacity.caption"
+msgid "Opacity :"
+msgstr "Průhlednost :"
+
+#: tfobject3d.label_specularindex.caption
+msgctxt "tfobject3d.label_specularindex.caption"
+msgid "Spec. index :"
+msgstr "Zrcadl. index :"
+
+#: tfobject3d.label_width.caption
+msgctxt "tfobject3d.label_width.caption"
+msgid "Width :"
+msgstr "Šířka :"
+
+#: tfobject3d.label_zoom.caption
+msgctxt "tfobject3d.label_zoom.caption"
+msgid "Zoom"
+msgstr "Měřítko"
+
+#: tfobject3d.lights.caption
+msgid "Lights"
+msgstr ""
+
+#: tfobject3d.materials.caption
+msgid "Materials"
+msgstr "Materiály"
+
+#: tfobject3d.opentexturedialog.title
+msgctxt "tfobject3d.opentexturedialog.title"
+msgid "Open texture"
+msgstr "Otevřít texturu"
+
+#: tfobject3d.rendering.caption
+msgid "Rendering"
+msgstr "Vykreslení"
+
+#: tfobject3d.tooladddirectional.hint
+msgid "Add a directional light"
+msgstr ""
+
+#: tfobject3d.toolpointlight.hint
+msgid "Add a point light"
+msgstr ""
+
+#: tfobject3d.toolremoveselectedlight.hint
+msgid "Remove selected light"
+msgstr ""
+
+#: tfphongfilter.button_cancel.caption
+msgctxt "tfphongfilter.button_cancel.caption"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfphongfilter.button_ok.caption
+msgctxt "tfphongfilter.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfphongfilter.caption
+msgctxt "tfphongfilter.caption"
+msgid "Shaded map"
+msgstr "Stínová mapa"
+
+#: tfphongfilter.groupbox_color.caption
+msgctxt "tfphongfilter.groupbox_color.caption"
+msgid "Color"
+msgstr "Barva"
+
+#: tfphongfilter.groupbox_color1.caption
+msgid "Altitude map"
+msgstr "Výšková mapa"
+
+#: tfphongfilter.label_altitude.caption
+msgid "Global altitude :"
+msgstr "Celková výška :"
+
+#: tfphongfilter.label_lightposition.caption
+msgid "Light position :"
+msgstr "Pozice světla :"
+
+#: tfphongfilter.radio_mapalpha.caption
+msgid "Alpha"
+msgstr "Alfa"
+
+#: tfphongfilter.radio_mapblue.caption
+msgid "B"
+msgstr "B"
+
+#: tfphongfilter.radio_mapgreen.caption
+msgid "G"
+msgstr "G"
+
+#: tfphongfilter.radio_maplightness.caption
+msgctxt "tfphongfilter.radio_maplightness.caption"
+msgid "Lightness"
+msgstr "Světlost"
+
+#: tfphongfilter.radio_maplinearlightness.caption
+msgid "Linear lightness"
+msgstr "Lineární světlost"
+
+#: tfphongfilter.radio_mapred.caption
+msgid "R"
+msgstr "R"
+
+#: tfphongfilter.radio_mapsaturation.caption
+msgctxt "tfphongfilter.radio_mapsaturation.caption"
+msgid "Saturation"
+msgstr "Barevnost"
+
+#: tfphongfilter.radio_usebackcolor.caption
+msgid "Back color"
+msgstr "Barva pozadí"
+
+#: tfphongfilter.radio_usekeep.caption
+msgid "Keep"
+msgstr "Ponechat"
+
+#: tfphongfilter.radio_usepencolor.caption
+msgid "Pen color"
+msgstr "Barva pera"
+
+#: tfphongfilter.radio_usetexture.caption
+msgctxt "tfphongfilter.radio_usetexture.caption"
+msgid "Current texture"
+msgstr "Aktuální textura"
+
+#: tfpixelate.button_cancel.caption
+msgctxt "TFPIXELATE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfpixelate.button_ok.caption
+msgctxt "TFPIXELATE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfpixelate.caption
+msgctxt "tfpixelate.caption"
+msgid "Pixelate"
+msgstr "Pixelizace"
+
+#: tfpixelate.label_pixelsize.caption
+msgctxt "tfpixelate.label_pixelsize.caption"
+msgid "Pixel size :"
+msgstr "Velikost bodu :"
+
+#: tfpixelate.label_quality.caption
+msgctxt "tfpixelate.label_quality.caption"
+msgid "Quality :"
+msgstr "Kvalita :"
+
+#: tfposterize.button_cancel.caption
+msgctxt "tfposterize.button_cancel.caption"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfposterize.button_ok.caption
+msgctxt "tfposterize.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfposterize.caption
+msgctxt "tfposterize.caption"
+msgid "Posterize"
+msgstr "Posterizace"
+
+#: tfposterize.checkbox_bylightness.caption
+msgid "By lightness"
+msgstr "Podle světlosti"
+
+#: tfposterize.label_levels.caption
+msgid "Levels :"
+msgstr "Úrovně:"
+
+#: tfpreviewdialog.caption
+msgid "Preview"
+msgstr ""
+
+#: tfpreviewdialog.lstatus.caption
+msgctxt "tfpreviewdialog.lstatus.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.button_configureprinter.caption
+msgid "Configure..."
+msgstr "Nastavit..."
+
+#: tfprint.button_print.caption
+msgid "Print!"
+msgstr "Tisk!"
+
+#: tfprint.button_zoomfit.caption
+msgctxt "tfprint.button_zoomfit.caption"
+msgid "Zoom fit"
+msgstr "Přizpůsobit zvětšení"
+
+#: tfprint.caption
+msgid "Print"
+msgstr "Tisk"
+
+#: tfprint.checkbox_ratio.caption
+msgctxt "tfprint.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "Udržovat poměr"
+
+#: tfprint.groupbox_imagesize.caption
+msgid "Image size"
+msgstr "Velikost obrázku"
+
+#: tfprint.groupbox_margins.caption
+msgid "Margins"
+msgstr "Okraje"
+
+#: tfprint.label_bottom.caption
+msgid "Bottom:"
+msgstr "Dole:"
+
+#: tfprint.label_dpix.caption
+msgctxt "tfprint.label_dpix.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.label_dpiy.caption
+msgctxt "tfprint.label_dpiy.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.label_height.caption
+msgid "Height:"
+msgstr "Výška:"
+
+#: tfprint.label_left.caption
+msgid "Left:"
+msgstr "Vlevo:"
+
+#: tfprint.label_orientation.caption
+msgid "Orientation:"
+msgstr "Otočení:"
+
+#: tfprint.label_printerandpaper.caption
+msgid "Printer and paper:"
+msgstr "Tiskárna a papír:"
+
+#: tfprint.label_right.caption
+msgid "Right:"
+msgstr "Vpravo:"
+
+#: tfprint.label_top.caption
+msgid "Top:"
+msgstr "Nahoře:"
+
+#: tfprint.label_width.caption
+msgid "Width:"
+msgstr "Šířka:"
+
+#: tfquestion.caption
+msgid "Question"
+msgstr ""
+
+#: tfquestion.checkbox_rememberchoice.caption
+msgid "Remember this choice"
+msgstr ""
+
+#: tfquestion.label_message.caption
+msgctxt "tfquestion.label_message.caption"
+msgid "."
+msgstr "."
+
+#: tfradialblur.button_cancel.caption
+msgctxt "TFRADIALBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfradialblur.button_ok.caption
+msgctxt "TFRADIALBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfradialblur.caption
+msgctxt "tfradialblur.caption"
+msgid "Radial blur"
+msgstr "Radiální rozmazání"
+
+#: tfradialblur.label_radius.caption
+msgctxt "tfradialblur.label_radius.caption"
+msgid "Radius :"
+msgstr "Poloměr :"
+
+#: tfrain.button_cancel.caption
+msgctxt "tfrain.button_cancel.caption"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfrain.button_ok.caption
+msgctxt "tfrain.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfrain.caption
+msgid "Rain"
+msgstr ""
+
+#: tfrain.label_quantity.caption
+msgid "Quantity:"
+msgstr ""
+
+#: tfrain.label_wind.caption
+msgid "Wind :"
+msgstr ""
+
+#: tfresample.button_cancel.caption
+msgctxt "TFRESAMPLE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfresample.button_ok.caption
+msgctxt "TFRESAMPLE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfresample.caption
+msgctxt "tfresample.caption"
+msgid "Resample"
+msgstr "Převzorkovat"
+
+#: tfresample.checkbox_ratio.caption
+msgctxt "tfresample.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "Udržovat poměr"
+
+#: tfresample.label_height.caption
+msgctxt "tfresample.label_height.caption"
+msgid "Height :"
+msgstr "Výška :"
+
+#: tfresample.label_quality.caption
+msgctxt "tfresample.label_quality.caption"
+msgid "Quality :"
+msgstr "Kvalita :"
+
+#: tfresample.label_width.caption
+msgctxt "tfresample.label_width.caption"
+msgid "Width :"
+msgstr "Šířka :"
+
+#: tfsaveoption.button_cancel.caption
+msgctxt "tfsaveoption.button_cancel.caption"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfsaveoption.button_ok.caption
+msgctxt "tfsaveoption.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfsaveoption.caption
+msgctxt "tfsaveoption.caption"
+msgid "Save"
+msgstr "Uložit"
+
+#: tfsaveoption.checkbox_dithering.caption
+msgid "Dithering"
+msgstr ""
+
+#: tfsaveoption.label1.caption
+msgid "Quality:"
+msgstr ""
+
+#: tfsaveoption.label_0.caption
+msgid "0"
+msgstr ""
+
+#: tfsaveoption.label_1.caption
+msgid "100"
+msgstr ""
+
+#: tfsaveoption.label_50.caption
+msgid "50"
+msgstr ""
+
+#: tfsaveoption.label_colordepth.caption
+msgid "Color depth:"
+msgstr ""
+
+#: tfsaveoption.label_size.caption
+msgid "Size:"
+msgstr ""
+
+#: tfsaveoption.radiobutton_16colors.caption
+msgid "16 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_24bitsperpixel.caption
+msgid "24 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_256colors.caption
+msgid "256 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_2colors.caption
+msgid "2 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_32bitsperpixel.caption
+msgid "32 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_miomap.caption
+msgid "MioMap"
+msgstr ""
+
+#: tfsharpen.button_cancel.caption
+msgctxt "tfsharpen.button_cancel.caption"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfsharpen.button_ok.caption
+msgctxt "tfsharpen.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfsharpen.caption
+msgid "Sharpen/Smooth"
+msgstr "Ostření/Vyhlazení"
+
+#: tfsharpen.label_amount.caption
+msgctxt "tfsharpen.label_amount.caption"
+msgid "Amount :"
+msgstr "Množství :"
+
+#: tfshiftcolors.button_cancel.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: tfshiftcolors.button_ok.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfshiftcolors.caption
+msgctxt "tfshiftcolors.caption"
+msgid "Shift colors"
+msgstr "Posunout barvy"
+
+#: tfshiftcolors.checkbox_gsba.caption
+msgctxt "tfshiftcolors.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "Opravený odstín a světlost"
+
+#: tfshiftcolors.label1.caption
+msgctxt "TFSHIFTCOLORS.LABEL1.CAPTION"
+msgid "Hue"
+msgstr "Odstín"
+
+#: tfshiftcolors.label2.caption
+msgctxt "TFSHIFTCOLORS.LABEL2.CAPTION"
+msgid "Saturation"
+msgstr "Barevnost"
+
+#: tftoolbox.caption
+msgctxt "tftoolbox.caption"
+msgid "Tools"
+msgstr "Nástroje"
+

ファイルの差分が大きいため隠しています
+ 160 - 140
lazpaint/release/bin/i18n/lazpaint.de.po


+ 1211 - 12
lazpaint/release/bin/i18n/lazpaint.es.po

@@ -1549,9 +1549,9 @@ msgstr "todo"
 msgid "All supported filetypes"
 msgstr "Todos los tipos soportados"
 
-#: uresourcestrings.rsaltshiftscalemode
-msgid "Hold ALT or SHIFT to scale"
-msgstr "Manten ALT o SHIFT para escalar"
+#: uresourcestrings.rsholdkeysscalemode
+msgid "Hold %1 or %2 to scale"
+msgstr "Manten %1 o %2 para escalar"
 
 #: uresourcestrings.rsanimatedgif
 msgid "Animated GIF"
@@ -1669,9 +1669,9 @@ msgstr "Coseno"
 msgid "Crop"
 msgstr "Cortar"
 
-#: uresourcestrings.rsctrlrestrictrotation
-msgid "Hold CTRL to restrict rotation angle"
-msgstr "Manten CTRL para restringir el ángulo de rotación"
+#: uresourcestrings.rsholdkeyrestrictrotation
+msgid "Hold %1 to restrict rotation angle"
+msgstr "Manten %1 para restringir el ángulo de rotación"
 
 #: uresourcestrings.rscurvemodehint
 msgid "Press S or X to set the curve mode of the last point"
@@ -1698,6 +1698,10 @@ msgstr "El directorio no esta vacío"
 msgid "Dither layer using palette"
 msgstr "Entramado de capa usando paleta"
 
+#: uresourcestrings.rsduplicateimage
+msgid "Duplicate image"
+msgstr "Duplicar imagen"
+
 #: uresourcestrings.rseditmask
 msgctxt "uresourcestrings.rseditmask"
 msgid "Edit mask"
@@ -1840,13 +1844,13 @@ msgctxt "uresourcestrings.rshalfcosine"
 msgid "Half-cosine"
 msgstr "Medio-coseno"
 
-#: uresourcestrings.rsholdctrlsnaptopixel
-msgid "Hold CTRL to snap to pixels"
-msgstr "Manten CTRL para ajustar a los pixeles"
+#: uresourcestrings.rsholdkeysnaptopixel
+msgid "Hold %1 to snap to pixels"
+msgstr "Manten %1 para ajustar a los pixeles"
 
-#: uresourcestrings.rsholdshiftforsquare
-msgid "Hold SHIFT to draw a square or a circle"
-msgstr "Manten SHIFT para dibujar un cuadrado o un circulo"
+#: uresourcestrings.rsholdkeyforsquare
+msgid "Hold %1 to draw a square or a circle"
+msgstr "Manten %1 para dibujar un cuadrado o un circulo"
 
 #: uresourcestrings.rshotspot
 msgctxt "uresourcestrings.rshotspot"
@@ -2320,3 +2324,1198 @@ msgstr "Capa vectorial"
 msgid "Yes"
 msgstr "Sí"
 
+#: tablet.getprocfailed
+msgid "Procedure %s failed to load properly."
+msgstr "Procedimiento %s falló al cargar."
+
+#: tablet.openfailed
+msgid "Tablet context failed to open."
+msgstr "Falló la apertura del contexto de Tableta."
+
+#: tfabout.button_donate.caption
+msgctxt "tfabout.button_donate.caption"
+msgid "Donate..."
+msgstr "Donar..."
+
+#: tfabout.caption
+msgctxt "tfabout.caption"
+msgid "About"
+msgstr "Acerca de"
+
+#: tfabout.labelurl.caption
+msgid "http://sourceforge.net/projects/lazpaint/"
+msgstr "http://sourceforge.net/projects/lazpaint/"
+
+#: tfabout.label_authors.caption
+msgctxt "tfabout.label_authors.caption"
+msgid "Authors:"
+msgstr "Autores:"
+
+#: tfabout.label_authorsvalue.caption
+msgctxt "tfabout.label_authorsvalue.caption"
+msgid "Circular helped by FabienWang, Lainz and others"
+msgstr "Circular ayudado por FabienWang, Lainz y otros"
+
+#: tfabout.label_homepage.caption
+msgctxt "tfabout.label_homepage.caption"
+msgid "Homepage:"
+msgstr "Sitio Web:"
+
+#: tfabout.label_libraries.caption
+msgctxt "tfabout.label_libraries.caption"
+msgid "Libraries used:"
+msgstr "Librerías usadas:"
+
+#: tfabout.label_licence.caption
+msgctxt "tfabout.label_licence.caption"
+msgid "Licence:"
+msgstr "Licencia:"
+
+#: tfabout.label_opensource.caption
+msgctxt "tfabout.label_opensource.caption"
+msgid "Open source (GPLv3)"
+msgstr "Código libre (GPLv3)"
+
+#: tfadjustcurves.button_cancel.caption
+msgctxt "tfadjustcurves.button_cancel.caption"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfadjustcurves.button_ok.caption
+msgctxt "tfadjustcurves.button_ok.caption"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfadjustcurves.caption
+msgid "Adjust curves"
+msgstr "Ajustar curvas"
+
+#: tfadjustcurves.toolbutton_newcurve.hint
+msgid "Discard current curve and start a new one"
+msgstr "Desechar esta curva y empezar una nueva"
+
+#: tfadjustcurves.toolbutton_posterize.hint
+msgctxt "tfadjustcurves.toolbutton_posterize.hint"
+msgid "Posterize"
+msgstr "Posterizar"
+
+#: tfadjustcurves.toolbutton_removepoint.hint
+msgid "Remove selected point (Del)"
+msgstr "Sacar punto seleccionado (Supr)"
+
+#: tfblendop.button_cancel.caption
+msgctxt "tfblendop.button_cancel.caption"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfblendop.button_ok.caption
+msgctxt "tfblendop.button_ok.caption"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfblendop.caption
+msgid "Blend operation"
+msgstr "Operación de mezcla"
+
+#: tfblendop.label_blendopcategory.caption
+msgctxt "tfblendop.label_blendopcategory.caption"
+msgid "Category of blend operation"
+msgstr "Categoría de operación de mezcla"
+
+#: tfblendop.label_blendopvalue.caption
+msgctxt "tfblendop.label_blendopvalue.caption"
+msgid "."
+msgstr "."
+
+#: tfblendop.label_kritaover.caption
+msgctxt "tfblendop.label_kritaover.caption"
+msgid "Krita"
+msgstr "Krita"
+
+#: tfblendop.label_kritaover.hint
+msgid "Blend operations that are available in Krita"
+msgstr "Operaciónes de mezcla disponibles en Krita"
+
+#: tfblendop.label_otherover.caption
+msgctxt "tfblendop.label_otherover.caption"
+msgid "Other"
+msgstr "Otra"
+
+#: tfblendop.label_otherover.hint
+msgid "Blend operations of LazPaint and Paint.NET"
+msgstr "Operaciónes de mezcla disponibles en LazPaint y Paint.NET"
+
+#: tfblendop.label_patternover.caption
+msgctxt "tfblendop.label_patternover.caption"
+msgid "Pattern over"
+msgstr "Patrón sobre"
+
+#: tfblendop.label_patternover.hint
+msgid "Preview blend operation with the specified image on top"
+msgstr "Previsualización de la operación de mezcla con la imagen seleccionada encima"
+
+#: tfblendop.label_patternunder.caption
+msgctxt "tfblendop.label_patternunder.caption"
+msgid "Pattern under"
+msgstr "Patrón debajo"
+
+#: tfblendop.label_patternunder.hint
+msgid "Preview blend operation with the specified image underneath"
+msgstr "Previsualización de la operación de mezcla con la imagen seleccionada debajo"
+
+#: tfblendop.label_previewwith.caption
+msgctxt "tfblendop.label_previewwith.caption"
+msgid "Preview with"
+msgstr "Previsualización con"
+
+#: tfblendop.label_selectedblendop.caption
+msgid "Selected blend operation :"
+msgstr "Operación seleccionada:"
+
+#: tfblendop.label_svgover.caption
+msgctxt "tfblendop.label_svgover.caption"
+msgid "Basic SVG"
+msgstr "SVG Básico"
+
+#: tfblendop.label_svgover.hint
+msgid "Basic blend operations that are available in virtually all image editors"
+msgstr "Operaciónes de mezcla disponibles en casi todos los programas"
+
+#: tfbrowseimages.caption
+msgid "Browse images"
+msgstr "Explorar imágenes"
+
+#: tfbrowseimages.checkbox_usedirectoryonstartup.caption
+msgid "Use this directory on startup"
+msgstr "Utilizar esta carpeta al encendido"
+
+#: tfbrowseimages.label_status.caption
+msgctxt "tfbrowseimages.label_status.caption"
+msgid "."
+msgstr "."
+
+#: tfbrowseimages.toolbutton_createfolderorcontainer.hint
+msgid "Create folder or container"
+msgstr "Crear carpeta o contenedor"
+
+#: tfbrowseimages.toolbutton_goup.hint
+msgid "Go one directory up"
+msgstr "Ir a la carpeta raíz"
+
+#: tfbrowseimages.toolbutton_openselectedfiles.hint
+msgid "Open selected files"
+msgstr "Abrir archivos seleccionados"
+
+#: tfbrowseimages.toolbutton_viewbigicon.hint
+msgctxt "tfbrowseimages.toolbutton_viewbigicon.hint"
+msgid "Show big icons"
+msgstr "Icono grandes"
+
+#: tfbrowseimages.toolbutton_viewdetails.hint
+msgctxt "tfbrowseimages.toolbutton_viewdetails.hint"
+msgid "Show details and preview"
+msgstr "Detalles y previsualización"
+
+#: tfbrowseimages.tool_selectdrive.hint
+msgid "Select drive"
+msgstr "Seleccionar unidad"
+
+#: tfcanvassize.button_cancel.caption
+msgctxt "TFCANVASSIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfcanvassize.button_ok.caption
+msgctxt "TFCANVASSIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfcanvassize.caption
+msgctxt "tfcanvassize.caption"
+msgid "Canvas size"
+msgstr "Tamaño de papel"
+
+#: tfcanvassize.checkbox_flipmode.caption
+msgid "Flip mode"
+msgstr "Modo de volteo"
+
+#: tfcanvassize.label_anchor.caption
+msgctxt "tfcanvassize.label_anchor.caption"
+msgid "Anchor :"
+msgstr "Anclaje:"
+
+#: tfcanvassize.label_height.caption
+msgctxt "tfcanvassize.label_height.caption"
+msgid "Height :"
+msgstr "Alto:"
+
+#: tfcanvassize.label_width.caption
+msgctxt "tfcanvassize.label_width.caption"
+msgid "Width :"
+msgstr "Ancho:"
+
+#: tfcolorintensity.button_cancel.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfcolorintensity.button_ok.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfcolorintensity.caption
+msgctxt "tfcolorintensity.caption"
+msgid "Intensity"
+msgstr "Intensidad"
+
+#: tfcolorintensity.label_multiply.caption
+msgctxt "tfcolorintensity.label_multiply.caption"
+msgid "Multiply"
+msgstr "Multiplicar"
+
+#: tfcolorintensity.label_shift.caption
+msgctxt "tfcolorintensity.label_shift.caption"
+msgid "Shift"
+msgstr "Cambiar"
+
+#: tfcolorize.button_cancel.caption
+msgctxt "TFCOLORIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfcolorize.button_ok.caption
+msgctxt "TFCOLORIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfcolorize.caption
+msgctxt "tfcolorize.caption"
+msgid "Colorize"
+msgstr "Colorizar"
+
+#: tfcolorize.checkbox_gsba.caption
+msgctxt "tfcolorize.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "Corregir matiz e iluminación"
+
+#: tfcolorize.label_colorness.caption
+msgctxt "tfcolorize.label_colorness.caption"
+msgid "Colorness"
+msgstr "Saturación"
+
+#: tfcolorize.label_hue.caption
+msgctxt "tfcolorize.label_hue.caption"
+msgid "Hue"
+msgstr "Matiz"
+
+#: tfcolorize.label_preset.caption
+msgid "Preset"
+msgstr "Preajuste"
+
+#: tfcustomblur.button_cancel.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfcustomblur.button_editmask.caption
+msgid "Edit mask..."
+msgstr "Editar máscara.."
+
+#: tfcustomblur.button_loadmask.caption
+msgid "Load mask..."
+msgstr "Abrir máscara.."
+
+#: tfcustomblur.button_ok.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfcustomblur.caption
+msgctxt "tfcustomblur.caption"
+msgid "Custom blur"
+msgstr "Desenfoque personalizado"
+
+#: tfcustomblur.openpicturedialog1.title
+msgid "Open grayscale file"
+msgstr "Abrir archivo de escala de grises"
+
+#: tfemboss.button_cancel.caption
+msgctxt "TFEMBOSS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfemboss.button_ok.caption
+msgctxt "TFEMBOSS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfemboss.caption
+msgctxt "tfemboss.caption"
+msgid "Emboss"
+msgstr "Realzar"
+
+#: tfemboss.checkbox_preservecolors.caption
+msgid "Preserve colors"
+msgstr "Preservar colores"
+
+#: tfemboss.checkbox_transparent.caption
+msgid "Transparent"
+msgstr "Transparente"
+
+#: tfemboss.label_direction.caption
+msgctxt "tfemboss.label_direction.caption"
+msgid "Direction :"
+msgstr "Dirección:"
+
+#: tffilterfunction.button_cancel.caption
+msgctxt "tffilterfunction.button_cancel.caption"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tffilterfunction.button_ok.caption
+msgctxt "tffilterfunction.button_ok.caption"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tffilterfunction.caption
+msgid "Apply function"
+msgstr "Aplicar función"
+
+#: tffilterfunction.checkbox_gsba.caption
+msgctxt "tffilterfunction.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "Corregido matiz e iluminación"
+
+#: tffilterfunction.label_alphaequals.caption
+msgctxt "tffilterfunction.label_alphaequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_blueequals.caption
+msgctxt "tffilterfunction.label_blueequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_greenequals.caption
+msgctxt "tffilterfunction.label_greenequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_hueequals.caption
+msgctxt "tffilterfunction.label_hueequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_lightnessequals.caption
+msgctxt "tffilterfunction.label_lightnessequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_redequals.caption
+msgctxt "tffilterfunction.label_redequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_saturationequals.caption
+msgctxt "tffilterfunction.label_saturationequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_variables.caption
+msgid "Variables :"
+msgstr "Variables:"
+
+#: tffilterfunction.tabsheet_hsl.caption
+msgid "HSL"
+msgstr "HSL"
+
+#: tffilterfunction.tabsheet_rgb.caption
+msgctxt "tffilterfunction.tabsheet_rgb.caption"
+msgid "RGB"
+msgstr "RGB"
+
+#: tfgeometricbrush.button_cancel.caption
+msgctxt "tfgeometricbrush.button_cancel.caption"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfgeometricbrush.button_ok.caption
+msgctxt "tfgeometricbrush.button_ok.caption"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfgeometricbrush.caption
+msgid "Geometric brush"
+msgstr "Pincel geométrico"
+
+#: tfgeometricbrush.checkbox_isgradient.caption
+msgid "Opacity gradient"
+msgstr "Opacidad de degradado"
+
+#: tfgeometricbrush.label1.caption
+msgid "Number of sides:"
+msgstr "Número de lados:"
+
+#: tfimagelist.caption
+msgid "Image List"
+msgstr "Lista de imágenes"
+
+#: tfimagelist.pmautouncheckonopen.caption
+msgid "Autouncheck files after being open"
+msgstr "Desactivar automáticamente la casilla del fichero cuando está abierto"
+
+#: tfimagelist.pmautouncheckonsave.caption
+msgid "Autouncheck files after being edited and saved"
+msgstr "Desactivar automáticamente la casilla del fichero cuando está modificado y guardado"
+
+#: tfimagelist.pmremoveall.caption
+msgid "Empty image list"
+msgstr "Llenar la lista de imágenes"
+
+#: tfimagelist.pmremovenonexisting.caption
+msgid "Remove nonexisting images"
+msgstr "Sacar imágenes que no existan"
+
+#: tfimagelist.pmremoveunchecked.caption
+msgid "Remove unchecked images"
+msgstr "Sacar imágenes con la casilla deactivada"
+
+#: tfimagelist.pmunchecknonexisting.caption
+msgid "Uncheck nonexisting files"
+msgstr "Deactivar las casillas de los ficheros que no existan"
+
+#: tfimagelist.stringgrid1.columns[0].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[0].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[1].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[1].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[2].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[2].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[3].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[3].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.tbaddfiles.hint
+msgid "Add images to list"
+msgstr "Añadir imágenes a la lista"
+
+#: tfimagelist.tbautouncheck.hint
+msgid "Enable/disable autounchecking for processed files"
+msgstr "Deactivar automáticamente o no las casillas de los ficheros"
+
+#: tfimagelist.tbautozoomfit.hint
+msgid "Enable/disable autofitting images in the LazPaint window"
+msgstr "Si se debe encajar la imagen en la ventana"
+
+#: tfimagelist.tbcheckall.hint
+msgid "Check all files for processing"
+msgstr "Activar todas las casillas para procesamiento"
+
+#: tfimagelist.tbminiwindow.hint
+msgid "Switch to miniwindow"
+msgstr "Cambiar a ventanita"
+
+#: tfimagelist.tbmovedown.hint
+msgid "Move selected items down"
+msgstr "Mover el elemento seleccionado abajo"
+
+#: tfimagelist.tbmoveup.hint
+msgid "Move selected items up"
+msgstr "Mover el elemento seleccionado encima"
+
+#: tfimagelist.tbnormalwindows.hint
+msgid "Switch to normal window"
+msgstr "Cambiar a ventana normal"
+
+#: tfimagelist.tbopenimage.hint
+msgid "Open current image"
+msgstr "Abrir la imagen seleccionada"
+
+#: tfimagelist.tbopennext.hint
+msgctxt "tfimagelist.tbopennext.hint"
+msgid "Open next image (Alt-Right)"
+msgstr "Abrir la imagen siguiente (Alt-Derecha)"
+
+#: tfimagelist.tbopennextsw.hint
+msgctxt "tfimagelist.tbopennextsw.hint"
+msgid "Open next image"
+msgstr "Abrir la imagen siguiente"
+
+#: tfimagelist.tbopenprev.hint
+msgctxt "tfimagelist.tbopenprev.hint"
+msgid "Open previous image (Alt-Left)"
+msgstr "Abrir la imagen anterior (Alt-Izquierda)"
+
+#: tfimagelist.tbopenprevsw.hint
+msgctxt "tfimagelist.tbopenprevsw.hint"
+msgid "Open previous image"
+msgstr "Abrir la imagen anterior"
+
+#: tfimagelist.tbremoveitem.hint
+msgid "Remove selected images from list"
+msgstr "Sacar imágenes selectadas de la lista"
+
+#: tfimagelist.tbuncheckall.hint
+msgid "Uncheck all files for processing"
+msgstr "Desactivar las casillas de todos los ficheros"
+
+#: tfloading.caption
+msgctxt "tfloading.caption"
+msgid "Loading..."
+msgstr "Cargando..."
+
+#: tfmotionblur.button_cancel.caption
+msgctxt "TFMOTIONBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfmotionblur.button_ok.caption
+msgctxt "TFMOTIONBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfmotionblur.caption
+msgctxt "tfmotionblur.caption"
+msgid "Motion blur"
+msgstr "Desenfoque de movimiento"
+
+#: tfmotionblur.checkbox_oriented.caption
+msgid "Oriented"
+msgstr "Orientado"
+
+#: tfmotionblur.label_distance.caption
+msgctxt "tfmotionblur.label_distance.caption"
+msgid "Distance :"
+msgstr "Distancia:"
+
+#: tfmultiimage.button_cancel.caption
+msgctxt "tfmultiimage.button_cancel.caption"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfmultiimage.button_ok.caption
+msgctxt "tfmultiimage.button_ok.caption"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfmultiimage.caption
+msgid "Choose image"
+msgstr "Eligir imagen"
+
+#: tfnewimage.button_cancel.caption
+msgctxt "TFNEWIMAGE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfnewimage.button_ok.caption
+msgctxt "TFNEWIMAGE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfnewimage.caption
+msgctxt "tfnewimage.caption"
+msgid "New image"
+msgstr "Nueva imágen"
+
+#: tfnewimage.combobox_bitdepth.text
+msgid "32"
+msgstr "32"
+
+#: tfnewimage.label_bitdepth.caption
+msgid "Bit depth :"
+msgstr "Profundidad de bit:"
+
+#: tfnewimage.label_height.caption
+msgctxt "tfnewimage.label_height.caption"
+msgid "Height :"
+msgstr "Alto:"
+
+#: tfnewimage.label_height1.caption
+msgid "Ratio :"
+msgstr "Proporción:"
+
+#: tfnewimage.label_memoryrequired.caption
+msgid "Memory required :"
+msgstr "Memoria requerida:"
+
+#: tfnewimage.label_width.caption
+msgctxt "tfnewimage.label_width.caption"
+msgid "Width :"
+msgstr "Ancho:"
+
+#: tfnoisefilter.button_cancel.caption
+msgctxt "tfnoisefilter.button_cancel.caption"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfnoisefilter.button_ok.caption
+msgctxt "tfnoisefilter.button_ok.caption"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfnoisefilter.caption
+msgid "Noise filter"
+msgstr "Ruido"
+
+#: tfnoisefilter.label_opacity.caption
+msgid "Opacity:"
+msgstr "Opacidad:"
+
+#: tfnoisefilter.radio_grayscalenoise.caption
+msgid "Grayscale noise"
+msgstr "Ruido con escala de grises"
+
+#: tfnoisefilter.radio_rgbnoise.caption
+msgid "RGB noise"
+msgstr "Ruido con colores"
+
+#: tfobject3d.button_cancel.caption
+msgctxt "tfobject3d.button_cancel.caption"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfobject3d.button_loadtex.caption
+msgid "Texture..."
+msgstr "Textura..."
+
+#: tfobject3d.button_notex.caption
+msgid "No tex."
+msgstr "No text."
+
+#: tfobject3d.button_ok.caption
+msgctxt "tfobject3d.button_ok.caption"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfobject3d.caption
+msgid "3D object"
+msgstr "Objeto 3D"
+
+#: tfobject3d.checkbox_antialiasing.caption
+msgid "Antialiasing"
+msgstr "Antiafilado"
+
+#: tfobject3d.checkbox_biface.caption
+msgid "2-sided faces"
+msgstr "2 caras"
+
+#: tfobject3d.checkbox_textureinterp.caption
+msgid "Texture interpolation"
+msgstr "Interpolación de textura"
+
+#: tfobject3d.groupbox_selectedlight.caption
+msgid "Selected light"
+msgstr "Luz seleccionada"
+
+#: tfobject3d.groupbox_selectedmaterial.caption
+msgctxt "tfobject3d.groupbox_selectedmaterial.caption"
+msgid "Selected material"
+msgstr "Material seleccionado"
+
+#: tfobject3d.label_color.caption
+msgctxt "tfobject3d.label_color.caption"
+msgid "Color :"
+msgstr "Color:"
+
+#: tfobject3d.label_color1.caption
+msgctxt "tfobject3d.label_color1.caption"
+msgid "Color :"
+msgstr "Color:"
+
+#: tfobject3d.label_height.caption
+msgctxt "tfobject3d.label_height.caption"
+msgid "Height :"
+msgstr "Alto:"
+
+#: tfobject3d.label_lightingnormals.caption
+msgctxt "tfobject3d.label_lightingnormals.caption"
+msgid "Lighting normals :"
+msgstr "Iluminaciónes normales:"
+
+#: tfobject3d.label_lights.caption
+msgid "Lights :"
+msgstr "Luces:"
+
+#: tfobject3d.label_materials.caption
+msgctxt "tfobject3d.label_materials.caption"
+msgid "Materials :"
+msgstr "Materiales:"
+
+#: tfobject3d.label_opacity.caption
+msgctxt "tfobject3d.label_opacity.caption"
+msgid "Opacity :"
+msgstr "Opacidad:"
+
+#: tfobject3d.label_specularindex.caption
+msgctxt "tfobject3d.label_specularindex.caption"
+msgid "Spec. index :"
+msgstr "Índice esp.:"
+
+#: tfobject3d.label_width.caption
+msgctxt "tfobject3d.label_width.caption"
+msgid "Width :"
+msgstr "Ancho:"
+
+#: tfobject3d.label_zoom.caption
+msgctxt "tfobject3d.label_zoom.caption"
+msgid "Zoom"
+msgstr "Zoom"
+
+#: tfobject3d.lights.caption
+msgid "Lights"
+msgstr "Luces"
+
+#: tfobject3d.materials.caption
+msgid "Materials"
+msgstr "Materiales"
+
+#: tfobject3d.opentexturedialog.title
+msgctxt "tfobject3d.opentexturedialog.title"
+msgid "Open texture"
+msgstr "Abrir textura"
+
+#: tfobject3d.rendering.caption
+msgid "Rendering"
+msgstr "Renderizado"
+
+#: tfobject3d.tooladddirectional.hint
+msgid "Add a directional light"
+msgstr "Agregar una luz direccional"
+
+#: tfobject3d.toolpointlight.hint
+msgid "Add a point light"
+msgstr "Agregar una luz puntual"
+
+#: tfobject3d.toolremoveselectedlight.hint
+msgid "Remove selected light"
+msgstr "Quitar luz seleccionada"
+
+#: tfphongfilter.button_cancel.caption
+msgctxt "tfphongfilter.button_cancel.caption"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfphongfilter.button_ok.caption
+msgctxt "tfphongfilter.button_ok.caption"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfphongfilter.caption
+msgctxt "tfphongfilter.caption"
+msgid "Shaded map"
+msgstr "Mapa sombreado"
+
+#: tfphongfilter.groupbox_color.caption
+msgctxt "tfphongfilter.groupbox_color.caption"
+msgid "Color"
+msgstr "Color"
+
+#: tfphongfilter.groupbox_color1.caption
+msgid "Altitude map"
+msgstr "Mapa de altitud"
+
+#: tfphongfilter.label_altitude.caption
+msgid "Global altitude :"
+msgstr "Altitud global:"
+
+#: tfphongfilter.label_lightposition.caption
+msgid "Light position :"
+msgstr "Posición de la luz:"
+
+#: tfphongfilter.radio_mapalpha.caption
+msgid "Alpha"
+msgstr "Alfa"
+
+#: tfphongfilter.radio_mapblue.caption
+msgid "B"
+msgstr "B"
+
+#: tfphongfilter.radio_mapgreen.caption
+msgid "G"
+msgstr "G"
+
+#: tfphongfilter.radio_maplightness.caption
+msgctxt "tfphongfilter.radio_maplightness.caption"
+msgid "Lightness"
+msgstr "Luminosidad"
+
+#: tfphongfilter.radio_maplinearlightness.caption
+msgid "Linear lightness"
+msgstr "Iluminación linear"
+
+#: tfphongfilter.radio_mapred.caption
+msgid "R"
+msgstr "R"
+
+#: tfphongfilter.radio_mapsaturation.caption
+msgctxt "tfphongfilter.radio_mapsaturation.caption"
+msgid "Saturation"
+msgstr "Saturación"
+
+#: tfphongfilter.radio_usebackcolor.caption
+msgid "Back color"
+msgstr "Color de fondo"
+
+#: tfphongfilter.radio_usekeep.caption
+msgid "Keep"
+msgstr "Mantener"
+
+#: tfphongfilter.radio_usepencolor.caption
+msgid "Pen color"
+msgstr "Color de pluma"
+
+#: tfphongfilter.radio_usetexture.caption
+msgctxt "tfphongfilter.radio_usetexture.caption"
+msgid "Current texture"
+msgstr "Textura actual"
+
+#: tfpixelate.button_cancel.caption
+msgctxt "TFPIXELATE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfpixelate.button_ok.caption
+msgctxt "TFPIXELATE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfpixelate.caption
+msgctxt "tfpixelate.caption"
+msgid "Pixelate"
+msgstr "Pixelar"
+
+#: tfpixelate.label_pixelsize.caption
+msgctxt "tfpixelate.label_pixelsize.caption"
+msgid "Pixel size :"
+msgstr "Tamaño de píxel:"
+
+#: tfpixelate.label_quality.caption
+msgctxt "tfpixelate.label_quality.caption"
+msgid "Quality :"
+msgstr "Calidad:"
+
+#: tfposterize.button_cancel.caption
+msgctxt "tfposterize.button_cancel.caption"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfposterize.button_ok.caption
+msgctxt "tfposterize.button_ok.caption"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfposterize.caption
+msgctxt "tfposterize.caption"
+msgid "Posterize"
+msgstr "Posterizar"
+
+#: tfposterize.checkbox_bylightness.caption
+msgid "By lightness"
+msgstr "Por claridad"
+
+#: tfposterize.label_levels.caption
+msgid "Levels :"
+msgstr "Niveles:"
+
+#: tfpreviewdialog.caption
+msgid "Preview"
+msgstr "Vista previa"
+
+#: tfpreviewdialog.lstatus.caption
+msgctxt "tfpreviewdialog.lstatus.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.button_configureprinter.caption
+msgid "Configure..."
+msgstr "Configurar..."
+
+#: tfprint.button_print.caption
+msgid "Print!"
+msgstr "¡Imprimir!"
+
+#: tfprint.button_zoomfit.caption
+msgctxt "tfprint.button_zoomfit.caption"
+msgid "Zoom fit"
+msgstr "Encajar zoom"
+
+#: tfprint.caption
+msgid "Print"
+msgstr "Imprimir"
+
+#: tfprint.checkbox_ratio.caption
+msgctxt "tfprint.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "Mantener aspecto"
+
+#: tfprint.groupbox_imagesize.caption
+msgid "Image size"
+msgstr "Tamaño de imagen"
+
+#: tfprint.groupbox_margins.caption
+msgid "Margins"
+msgstr "Margen"
+
+#: tfprint.label_bottom.caption
+msgid "Bottom:"
+msgstr "Inferior:"
+
+#: tfprint.label_dpix.caption
+msgctxt "tfprint.label_dpix.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.label_dpiy.caption
+msgctxt "tfprint.label_dpiy.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.label_height.caption
+msgid "Height:"
+msgstr "Alto:"
+
+#: tfprint.label_left.caption
+msgid "Left:"
+msgstr "Izquierda:"
+
+#: tfprint.label_orientation.caption
+msgid "Orientation:"
+msgstr "Orientación:"
+
+#: tfprint.label_printerandpaper.caption
+msgid "Printer and paper:"
+msgstr "Impresora y papel:"
+
+#: tfprint.label_right.caption
+msgid "Right:"
+msgstr "Derecha:"
+
+#: tfprint.label_top.caption
+msgid "Top:"
+msgstr "Superior:"
+
+#: tfprint.label_width.caption
+msgid "Width:"
+msgstr "Ancho:"
+
+#: tfquestion.caption
+msgid "Question"
+msgstr "Pregunta"
+
+#: tfquestion.checkbox_rememberchoice.caption
+msgid "Remember this choice"
+msgstr "Recordar esta opción"
+
+#: tfquestion.label_message.caption
+msgctxt "tfquestion.label_message.caption"
+msgid "."
+msgstr "."
+
+#: tfradialblur.button_cancel.caption
+msgctxt "TFRADIALBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfradialblur.button_ok.caption
+msgctxt "TFRADIALBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfradialblur.caption
+msgctxt "tfradialblur.caption"
+msgid "Radial blur"
+msgstr "Desenfoque radial"
+
+#: tfradialblur.label_radius.caption
+msgctxt "tfradialblur.label_radius.caption"
+msgid "Radius :"
+msgstr "Radio:"
+
+#: tfrain.button_cancel.caption
+msgctxt "tfrain.button_cancel.caption"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfrain.button_ok.caption
+msgctxt "tfrain.button_ok.caption"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfrain.caption
+msgid "Rain"
+msgstr "Lluvia"
+
+#: tfrain.label_quantity.caption
+msgid "Quantity:"
+msgstr "Cantidad:"
+
+#: tfrain.label_wind.caption
+msgid "Wind :"
+msgstr "Viento:"
+
+#: tfresample.button_cancel.caption
+msgctxt "TFRESAMPLE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfresample.button_ok.caption
+msgctxt "TFRESAMPLE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfresample.caption
+msgctxt "tfresample.caption"
+msgid "Resample"
+msgstr "Redimensionar"
+
+#: tfresample.checkbox_ratio.caption
+msgctxt "tfresample.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "Mantener aspecto"
+
+#: tfresample.label_height.caption
+msgctxt "tfresample.label_height.caption"
+msgid "Height :"
+msgstr "Alto:"
+
+#: tfresample.label_quality.caption
+msgctxt "tfresample.label_quality.caption"
+msgid "Quality :"
+msgstr "Calidad:"
+
+#: tfresample.label_width.caption
+msgctxt "tfresample.label_width.caption"
+msgid "Width :"
+msgstr "Ancho:"
+
+#: tfsaveoption.button_cancel.caption
+msgctxt "tfsaveoption.button_cancel.caption"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfsaveoption.button_ok.caption
+msgctxt "tfsaveoption.button_ok.caption"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfsaveoption.caption
+msgctxt "tfsaveoption.caption"
+msgid "Save"
+msgstr "Guardar"
+
+#: tfsaveoption.checkbox_dithering.caption
+msgid "Dithering"
+msgstr "Entramado"
+
+#: tfsaveoption.label1.caption
+msgid "Quality:"
+msgstr "Calidad:"
+
+#: tfsaveoption.label_0.caption
+msgid "0"
+msgstr "0"
+
+#: tfsaveoption.label_1.caption
+msgid "100"
+msgstr "100"
+
+#: tfsaveoption.label_50.caption
+msgid "50"
+msgstr "50"
+
+#: tfsaveoption.label_colordepth.caption
+msgid "Color depth:"
+msgstr "Profundidad de color:"
+
+#: tfsaveoption.label_size.caption
+msgid "Size:"
+msgstr "Tamaño:"
+
+#: tfsaveoption.radiobutton_16colors.caption
+msgid "16 colors"
+msgstr "16 colores"
+
+#: tfsaveoption.radiobutton_24bitsperpixel.caption
+msgid "24 bits"
+msgstr "24 bits"
+
+#: tfsaveoption.radiobutton_256colors.caption
+msgid "256 colors"
+msgstr "256 colores"
+
+#: tfsaveoption.radiobutton_2colors.caption
+msgid "2 colors"
+msgstr "2 colores"
+
+#: tfsaveoption.radiobutton_32bitsperpixel.caption
+msgid "32 bits"
+msgstr "32 bits"
+
+#: tfsaveoption.radiobutton_miomap.caption
+msgid "MioMap"
+msgstr "MioMap"
+
+#: tfsharpen.button_cancel.caption
+msgctxt "tfsharpen.button_cancel.caption"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfsharpen.button_ok.caption
+msgctxt "tfsharpen.button_ok.caption"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfsharpen.caption
+msgid "Sharpen/Smooth"
+msgstr "Nítido/Suave"
+
+#: tfsharpen.label_amount.caption
+msgctxt "tfsharpen.label_amount.caption"
+msgid "Amount :"
+msgstr "Cantidad:"
+
+#: tfshiftcolors.button_cancel.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfshiftcolors.button_ok.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Aceptar"
+
+#: tfshiftcolors.caption
+msgctxt "tfshiftcolors.caption"
+msgid "Shift colors"
+msgstr "Intercambiar colores"
+
+#: tfshiftcolors.checkbox_gsba.caption
+msgctxt "tfshiftcolors.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "Corregido matiz e iluminación"
+
+#: tfshiftcolors.label1.caption
+msgctxt "TFSHIFTCOLORS.LABEL1.CAPTION"
+msgid "Hue"
+msgstr "Matiz"
+
+#: tfshiftcolors.label2.caption
+msgctxt "TFSHIFTCOLORS.LABEL2.CAPTION"
+msgid "Saturation"
+msgstr "Saturación"
+
+#: tftoolbox.caption
+msgctxt "tftoolbox.caption"
+msgid "Tools"
+msgstr "Herramientas"
+

+ 1203 - 8
lazpaint/release/bin/i18n/lazpaint.fi.po

@@ -1546,8 +1546,8 @@ msgstr "kaikki"
 msgid "All supported filetypes"
 msgstr "Kaikki tuetut tiedostotyypit"
 
-#: uresourcestrings.rsaltshiftscalemode
-msgid "Hold ALT or SHIFT to scale"
+#: uresourcestrings.rsholdkeysscalemode
+msgid "Hold %1 or %A to scale"
 msgstr ""
 
 #: uresourcestrings.rsanimatedgif
@@ -1663,8 +1663,8 @@ msgstr ""
 msgid "Crop"
 msgstr ""
 
-#: uresourcestrings.rsctrlrestrictrotation
-msgid "Hold CTRL to restrict rotation angle"
+#: uresourcestrings.rsholdkeyrestrictrotation
+msgid "Hold %1 to restrict rotation angle"
 msgstr ""
 
 #: uresourcestrings.rscurvemodehint
@@ -1828,12 +1828,12 @@ msgstr "Vihreä"
 msgid "Half-cosine"
 msgstr ""
 
-#: uresourcestrings.rsholdctrlsnaptopixel
-msgid "Hold CTRL to snap to pixels"
+#: uresourcestrings.rsholdkeysnaptopixel
+msgid "Hold %1 to snap to pixels"
 msgstr ""
 
-#: uresourcestrings.rsholdshiftforsquare
-msgid "Hold SHIFT to draw a square or a circle"
+#: uresourcestrings.rsholdkeyforsquare
+msgid "Hold %1 to draw a square or a circle"
 msgstr ""
 
 #: uresourcestrings.rshotspot
@@ -2297,3 +2297,1198 @@ msgstr ""
 msgid "Yes"
 msgstr "Kyllä"
 
+#: tablet.getprocfailed
+msgid "Procedure %s failed to load properly."
+msgstr ""
+
+#: tablet.openfailed
+msgid "Tablet context failed to open."
+msgstr ""
+
+#: tfabout.button_donate.caption
+msgctxt "TFABOUT.BUTTON_DONATE.CAPTION"
+msgid "Donate..."
+msgstr ""
+
+#: tfabout.caption
+msgctxt "TFABOUT.CAPTION"
+msgid "About"
+msgstr "Tietoja"
+
+#: tfabout.labelurl.caption
+msgid "http://sourceforge.net/projects/lazpaint/"
+msgstr ""
+
+#: tfabout.label_authors.caption
+msgctxt "TFABOUT.LABEL_AUTHORS.CAPTION"
+msgid "Authors:"
+msgstr "Tekijät:"
+
+#: tfabout.label_authorsvalue.caption
+msgctxt "TFABOUT.LABEL_AUTHORSVALUE.CAPTION"
+msgid "Circular helped by FabienWang, Lainz and others"
+msgstr "Circular jota on avustaneet FabienWang, Lainz ja muut"
+
+#: tfabout.label_homepage.caption
+msgctxt "TFABOUT.LABEL_HOMEPAGE.CAPTION"
+msgid "Homepage:"
+msgstr "Kotisivu:"
+
+#: tfabout.label_libraries.caption
+msgctxt "TFABOUT.LABEL_LIBRARIES.CAPTION"
+msgid "Libraries used:"
+msgstr "Käytetyt kirjastot:"
+
+#: tfabout.label_licence.caption
+msgctxt "TFABOUT.LABEL_LICENCE.CAPTION"
+msgid "Licence:"
+msgstr "Lisenssi:"
+
+#: tfabout.label_opensource.caption
+msgctxt "TFABOUT.LABEL_OPENSOURCE.CAPTION"
+msgid "Open source (GPLv3)"
+msgstr "Avoin lähdekoodi (GPLv3)"
+
+#: tfadjustcurves.button_cancel.caption
+msgctxt "TFADJUSTCURVES.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfadjustcurves.button_ok.caption
+msgctxt "TFADJUSTCURVES.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfadjustcurves.caption
+msgid "Adjust curves"
+msgstr "Muokkaa käyriä"
+
+#: tfadjustcurves.toolbutton_newcurve.hint
+msgid "Discard current curve and start a new one"
+msgstr "Hylkää nykyinen käyrä ja aloita uusi"
+
+#: tfadjustcurves.toolbutton_posterize.hint
+msgctxt "tfadjustcurves.toolbutton_posterize.hint"
+msgid "Posterize"
+msgstr ""
+
+#: tfadjustcurves.toolbutton_removepoint.hint
+msgid "Remove selected point (Del)"
+msgstr "Poista valittu piste (Del)"
+
+#: tfblendop.button_cancel.caption
+msgctxt "TFBLENDOP.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfblendop.button_ok.caption
+msgctxt "TFBLENDOP.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfblendop.caption
+msgid "Blend operation"
+msgstr ""
+
+#: tfblendop.label_blendopcategory.caption
+msgctxt "TFBLENDOP.LABEL_BLENDOPCATEGORY.CAPTION"
+msgid "Category of blend operation"
+msgstr ""
+
+#: tfblendop.label_blendopvalue.caption
+msgctxt "tfblendop.label_blendopvalue.caption"
+msgid "."
+msgstr ""
+
+#: tfblendop.label_kritaover.caption
+msgctxt "TFBLENDOP.LABEL_KRITAOVER.CAPTION"
+msgid "Krita"
+msgstr ""
+
+#: tfblendop.label_kritaover.hint
+msgid "Blend operations that are available in Krita"
+msgstr ""
+
+#: tfblendop.label_otherover.caption
+msgctxt "TFBLENDOP.LABEL_OTHEROVER.CAPTION"
+msgid "Other"
+msgstr ""
+
+#: tfblendop.label_otherover.hint
+msgid "Blend operations of LazPaint and Paint.NET"
+msgstr ""
+
+#: tfblendop.label_patternover.caption
+msgctxt "TFBLENDOP.LABEL_PATTERNOVER.CAPTION"
+msgid "Pattern over"
+msgstr ""
+
+#: tfblendop.label_patternover.hint
+msgid "Preview blend operation with the specified image on top"
+msgstr ""
+
+#: tfblendop.label_patternunder.caption
+msgctxt "TFBLENDOP.LABEL_PATTERNUNDER.CAPTION"
+msgid "Pattern under"
+msgstr ""
+
+#: tfblendop.label_patternunder.hint
+msgid "Preview blend operation with the specified image underneath"
+msgstr ""
+
+#: tfblendop.label_previewwith.caption
+msgctxt "TFBLENDOP.LABEL_PREVIEWWITH.CAPTION"
+msgid "Preview with"
+msgstr ""
+
+#: tfblendop.label_selectedblendop.caption
+msgid "Selected blend operation :"
+msgstr ""
+
+#: tfblendop.label_svgover.caption
+msgctxt "TFBLENDOP.LABEL_SVGOVER.CAPTION"
+msgid "Basic SVG"
+msgstr ""
+
+#: tfblendop.label_svgover.hint
+msgid "Basic blend operations that are available in virtually all image editors"
+msgstr ""
+
+#: tfbrowseimages.caption
+msgid "Browse images"
+msgstr "Selaa kuvia"
+
+#: tfbrowseimages.checkbox_usedirectoryonstartup.caption
+msgid "Use this directory on startup"
+msgstr ""
+
+#: tfbrowseimages.label_status.caption
+msgctxt "tfbrowseimages.label_status.caption"
+msgid "."
+msgstr ""
+
+#: tfbrowseimages.toolbutton_createfolderorcontainer.hint
+msgid "Create folder or container"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_goup.hint
+msgid "Go one directory up"
+msgstr "Siirry yksi kansio ylöspäin"
+
+#: tfbrowseimages.toolbutton_openselectedfiles.hint
+msgid "Open selected files"
+msgstr "Avaa valitut tiedostot"
+
+#: tfbrowseimages.toolbutton_viewbigicon.hint
+msgctxt "TFBROWSEIMAGES.TOOLBUTTON_VIEWBIGICON.HINT"
+msgid "Show big icons"
+msgstr "Näytä isot kuvakkeet"
+
+#: tfbrowseimages.toolbutton_viewdetails.hint
+msgctxt "TFBROWSEIMAGES.TOOLBUTTON_VIEWDETAILS.HINT"
+msgid "Show details and preview"
+msgstr "Näytä tiedoston tiedot ja esikatselu"
+
+#: tfbrowseimages.tool_selectdrive.hint
+msgid "Select drive"
+msgstr "Valitse asema"
+
+#: tfcanvassize.button_cancel.caption
+msgctxt "TFCANVASSIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfcanvassize.button_ok.caption
+msgctxt "TFCANVASSIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfcanvassize.caption
+msgctxt "TFCANVASSIZE.CAPTION"
+msgid "Canvas size"
+msgstr "Kuva-alueen koko"
+
+#: tfcanvassize.checkbox_flipmode.caption
+msgid "Flip mode"
+msgstr ""
+
+#: tfcanvassize.label_anchor.caption
+msgctxt "TFCANVASSIZE.LABEL_ANCHOR.CAPTION"
+msgid "Anchor :"
+msgstr ""
+
+#: tfcanvassize.label_height.caption
+msgctxt "TFCANVASSIZE.LABEL_HEIGHT.CAPTION"
+msgid "Height :"
+msgstr "Korkeus :"
+
+#: tfcanvassize.label_width.caption
+msgctxt "TFCANVASSIZE.LABEL_WIDTH.CAPTION"
+msgid "Width :"
+msgstr "Leveys :"
+
+#: tfcolorintensity.button_cancel.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfcolorintensity.button_ok.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfcolorintensity.caption
+msgctxt "TFCOLORINTENSITY.CAPTION"
+msgid "Intensity"
+msgstr "Voimakkuus"
+
+#: tfcolorintensity.label_multiply.caption
+msgctxt "TFCOLORINTENSITY.LABEL_MULTIPLY.CAPTION"
+msgid "Multiply"
+msgstr ""
+
+#: tfcolorintensity.label_shift.caption
+msgctxt "TFCOLORINTENSITY.LABEL_SHIFT.CAPTION"
+msgid "Shift"
+msgstr ""
+
+#: tfcolorize.button_cancel.caption
+msgctxt "TFCOLORIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfcolorize.button_ok.caption
+msgctxt "TFCOLORIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfcolorize.caption
+msgctxt "TFCOLORIZE.CAPTION"
+msgid "Colorize"
+msgstr ""
+
+#: tfcolorize.checkbox_gsba.caption
+msgctxt "TFCOLORIZE.CHECKBOX_GSBA.CAPTION"
+msgid "Corrected hue and lightness"
+msgstr ""
+
+#: tfcolorize.label_colorness.caption
+msgctxt "TFCOLORIZE.LABEL_COLORNESS.CAPTION"
+msgid "Colorness"
+msgstr ""
+
+#: tfcolorize.label_hue.caption
+msgctxt "TFCOLORIZE.LABEL_HUE.CAPTION"
+msgid "Hue"
+msgstr "Värisävy"
+
+#: tfcolorize.label_preset.caption
+msgid "Preset"
+msgstr "Esiasetus"
+
+#: tfcustomblur.button_cancel.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfcustomblur.button_editmask.caption
+msgid "Edit mask..."
+msgstr "Muokkaa maskia"
+
+#: tfcustomblur.button_loadmask.caption
+msgid "Load mask..."
+msgstr "Lataa maski"
+
+#: tfcustomblur.button_ok.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfcustomblur.caption
+msgctxt "TFCUSTOMBLUR.CAPTION"
+msgid "Custom blur"
+msgstr "Maskin mukainen sumennus"
+
+#: tfcustomblur.openpicturedialog1.title
+msgid "Open grayscale file"
+msgstr "Avaa harmaasävytiedosto"
+
+#: tfemboss.button_cancel.caption
+msgctxt "TFEMBOSS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfemboss.button_ok.caption
+msgctxt "TFEMBOSS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfemboss.caption
+msgctxt "TFEMBOSS.CAPTION"
+msgid "Emboss"
+msgstr "Kohokuviointi"
+
+#: tfemboss.checkbox_preservecolors.caption
+msgid "Preserve colors"
+msgstr ""
+
+#: tfemboss.checkbox_transparent.caption
+msgid "Transparent"
+msgstr ""
+
+#: tfemboss.label_direction.caption
+msgctxt "TFEMBOSS.LABEL_DIRECTION.CAPTION"
+msgid "Direction :"
+msgstr "Suunta :"
+
+#: tffilterfunction.button_cancel.caption
+msgctxt "TFFILTERFUNCTION.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tffilterfunction.button_ok.caption
+msgctxt "TFFILTERFUNCTION.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tffilterfunction.caption
+msgid "Apply function"
+msgstr ""
+
+#: tffilterfunction.checkbox_gsba.caption
+msgctxt "TFFILTERFUNCTION.CHECKBOX_GSBA.CAPTION"
+msgid "Corrected hue and lightness"
+msgstr ""
+
+#: tffilterfunction.label_alphaequals.caption
+msgctxt "tffilterfunction.label_alphaequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_blueequals.caption
+msgctxt "tffilterfunction.label_blueequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_greenequals.caption
+msgctxt "tffilterfunction.label_greenequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_hueequals.caption
+msgctxt "tffilterfunction.label_hueequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_lightnessequals.caption
+msgctxt "tffilterfunction.label_lightnessequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_redequals.caption
+msgctxt "tffilterfunction.label_redequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_saturationequals.caption
+msgctxt "tffilterfunction.label_saturationequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_variables.caption
+msgid "Variables :"
+msgstr ""
+
+#: tffilterfunction.tabsheet_hsl.caption
+msgid "HSL"
+msgstr ""
+
+#: tffilterfunction.tabsheet_rgb.caption
+msgctxt "tffilterfunction.tabsheet_rgb.caption"
+msgid "RGB"
+msgstr ""
+
+#: tfgeometricbrush.button_cancel.caption
+msgctxt "TFGEOMETRICBRUSH.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfgeometricbrush.button_ok.caption
+msgctxt "TFGEOMETRICBRUSH.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfgeometricbrush.caption
+msgid "Geometric brush"
+msgstr "Sudin geometria"
+
+#: tfgeometricbrush.checkbox_isgradient.caption
+msgid "Opacity gradient"
+msgstr "Liukuva peittävyys"
+
+#: tfgeometricbrush.label1.caption
+msgid "Number of sides:"
+msgstr "Sivujen määrä:"
+
+#: tfimagelist.caption
+msgid "Image List"
+msgstr "Kuvaluettelo"
+
+#: tfimagelist.pmautouncheckonopen.caption
+msgid "Autouncheck files after being open"
+msgstr ""
+
+#: tfimagelist.pmautouncheckonsave.caption
+msgid "Autouncheck files after being edited and saved"
+msgstr ""
+
+#: tfimagelist.pmremoveall.caption
+msgid "Empty image list"
+msgstr "Tyhjä kuvaluettelo"
+
+#: tfimagelist.pmremovenonexisting.caption
+msgid "Remove nonexisting images"
+msgstr ""
+
+#: tfimagelist.pmremoveunchecked.caption
+msgid "Remove unchecked images"
+msgstr ""
+
+#: tfimagelist.pmunchecknonexisting.caption
+msgid "Uncheck nonexisting files"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[0].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[0].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[1].title.caption
+msgctxt "TFIMAGELIST.STRINGGRID1.COLUMNS[1].TITLE.CAPTION"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[2].title.caption
+msgctxt "TFIMAGELIST.STRINGGRID1.COLUMNS[2].TITLE.CAPTION"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[3].title.caption
+msgctxt "TFIMAGELIST.STRINGGRID1.COLUMNS[3].TITLE.CAPTION"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.tbaddfiles.hint
+msgid "Add images to list"
+msgstr "Lisää kuvat luetteloon"
+
+#: tfimagelist.tbautouncheck.hint
+msgid "Enable/disable autounchecking for processed files"
+msgstr ""
+
+#: tfimagelist.tbautozoomfit.hint
+msgid "Enable/disable autofitting images in the LazPaint window"
+msgstr ""
+
+#: tfimagelist.tbcheckall.hint
+msgid "Check all files for processing"
+msgstr ""
+
+#: tfimagelist.tbminiwindow.hint
+msgid "Switch to miniwindow"
+msgstr "Muuta ikkuna minikokoiseksi"
+
+#: tfimagelist.tbmovedown.hint
+msgid "Move selected items down"
+msgstr "Siirrä valitut alaspäin"
+
+#: tfimagelist.tbmoveup.hint
+msgid "Move selected items up"
+msgstr "Siirrä valitut ylöspäin"
+
+#: tfimagelist.tbnormalwindows.hint
+msgid "Switch to normal window"
+msgstr "Muuta ikkuna normaalikokoon"
+
+#: tfimagelist.tbopenimage.hint
+msgid "Open current image"
+msgstr "Avaa valittu kuva"
+
+#: tfimagelist.tbopennext.hint
+msgctxt "tfimagelist.tbopennext.hint"
+msgid "Open next image (Alt-Right)"
+msgstr "Avaa seuraava kuva (Alt-Right)"
+
+#: tfimagelist.tbopennextsw.hint
+msgctxt "TFIMAGELIST.TBOPENNEXTSW.HINT"
+msgid "Open next image"
+msgstr "Avaa kuvaluettelon seuraava kuva"
+
+#: tfimagelist.tbopenprev.hint
+msgctxt "tfimagelist.tbopenprev.hint"
+msgid "Open previous image (Alt-Left)"
+msgstr "Avaa edellinen kuva (Alt-Left)"
+
+#: tfimagelist.tbopenprevsw.hint
+msgctxt "TFIMAGELIST.TBOPENPREVSW.HINT"
+msgid "Open previous image"
+msgstr "Avaa kuvaluettelon edellinen kuva"
+
+#: tfimagelist.tbremoveitem.hint
+msgid "Remove selected images from list"
+msgstr "Poista valitut kuvat luettelosta"
+
+#: tfimagelist.tbuncheckall.hint
+msgid "Uncheck all files for processing"
+msgstr ""
+
+#: tfloading.caption
+msgctxt "tfloading.caption"
+msgid "Loading..."
+msgstr ""
+
+#: tfmotionblur.button_cancel.caption
+msgctxt "TFMOTIONBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfmotionblur.button_ok.caption
+msgctxt "TFMOTIONBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfmotionblur.caption
+msgctxt "TFMOTIONBLUR.CAPTION"
+msgid "Motion blur"
+msgstr "Liikesumennus"
+
+#: tfmotionblur.checkbox_oriented.caption
+msgid "Oriented"
+msgstr "Suunnattu"
+
+#: tfmotionblur.label_distance.caption
+msgctxt "TFMOTIONBLUR.LABEL_DISTANCE.CAPTION"
+msgid "Distance :"
+msgstr ""
+
+#: tfmultiimage.button_cancel.caption
+msgctxt "TFMULTIIMAGE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfmultiimage.button_ok.caption
+msgctxt "TFMULTIIMAGE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfmultiimage.caption
+msgid "Choose image"
+msgstr ""
+
+#: tfnewimage.button_cancel.caption
+msgctxt "TFNEWIMAGE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfnewimage.button_ok.caption
+msgctxt "TFNEWIMAGE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfnewimage.caption
+msgctxt "TFNEWIMAGE.CAPTION"
+msgid "New image"
+msgstr "Uusi kuva"
+
+#: tfnewimage.combobox_bitdepth.text
+msgid "32"
+msgstr ""
+
+#: tfnewimage.label_bitdepth.caption
+msgid "Bit depth :"
+msgstr ""
+
+#: tfnewimage.label_height.caption
+msgctxt "TFNEWIMAGE.LABEL_HEIGHT.CAPTION"
+msgid "Height :"
+msgstr "Korkeus :"
+
+#: tfnewimage.label_height1.caption
+msgid "Ratio :"
+msgstr ""
+
+#: tfnewimage.label_memoryrequired.caption
+msgid "Memory required :"
+msgstr ""
+
+#: tfnewimage.label_width.caption
+msgctxt "TFNEWIMAGE.LABEL_WIDTH.CAPTION"
+msgid "Width :"
+msgstr "Leveys :"
+
+#: tfnoisefilter.button_cancel.caption
+msgctxt "TFNOISEFILTER.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfnoisefilter.button_ok.caption
+msgctxt "TFNOISEFILTER.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfnoisefilter.caption
+msgid "Noise filter"
+msgstr "Kohinasuodatin"
+
+#: tfnoisefilter.label_opacity.caption
+msgid "Opacity:"
+msgstr "Läpikuultavuus:"
+
+#: tfnoisefilter.radio_grayscalenoise.caption
+msgid "Grayscale noise"
+msgstr "Harmaasävykohina"
+
+#: tfnoisefilter.radio_rgbnoise.caption
+msgid "RGB noise"
+msgstr "RGB-kohina"
+
+#: tfobject3d.button_cancel.caption
+msgctxt "TFOBJECT3D.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfobject3d.button_loadtex.caption
+msgid "Texture..."
+msgstr ""
+
+#: tfobject3d.button_notex.caption
+msgid "No tex."
+msgstr ""
+
+#: tfobject3d.button_ok.caption
+msgctxt "TFOBJECT3D.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfobject3d.caption
+msgid "3D object"
+msgstr ""
+
+#: tfobject3d.checkbox_antialiasing.caption
+msgid "Antialiasing"
+msgstr ""
+
+#: tfobject3d.checkbox_biface.caption
+msgid "2-sided faces"
+msgstr ""
+
+#: tfobject3d.checkbox_textureinterp.caption
+msgid "Texture interpolation"
+msgstr ""
+
+#: tfobject3d.groupbox_selectedlight.caption
+msgid "Selected light"
+msgstr ""
+
+#: tfobject3d.groupbox_selectedmaterial.caption
+msgctxt "TFOBJECT3D.GROUPBOX_SELECTEDMATERIAL.CAPTION"
+msgid "Selected material"
+msgstr ""
+
+#: tfobject3d.label_color.caption
+msgctxt "TFOBJECT3D.LABEL_COLOR.CAPTION"
+msgid "Color :"
+msgstr "Väri :"
+
+#: tfobject3d.label_color1.caption
+msgctxt "TFOBJECT3D.LABEL_COLOR1.CAPTION"
+msgid "Color :"
+msgstr "Väri :"
+
+#: tfobject3d.label_height.caption
+msgctxt "TFOBJECT3D.LABEL_HEIGHT.CAPTION"
+msgid "Height :"
+msgstr "Korkeus :"
+
+#: tfobject3d.label_lightingnormals.caption
+msgctxt "TFOBJECT3D.LABEL_LIGHTINGNORMALS.CAPTION"
+msgid "Lighting normals :"
+msgstr ""
+
+#: tfobject3d.label_lights.caption
+msgid "Lights :"
+msgstr ""
+
+#: tfobject3d.label_materials.caption
+msgctxt "TFOBJECT3D.LABEL_MATERIALS.CAPTION"
+msgid "Materials :"
+msgstr ""
+
+#: tfobject3d.label_opacity.caption
+msgctxt "TFOBJECT3D.LABEL_OPACITY.CAPTION"
+msgid "Opacity :"
+msgstr ""
+
+#: tfobject3d.label_specularindex.caption
+msgctxt "TFOBJECT3D.LABEL_SPECULARINDEX.CAPTION"
+msgid "Spec. index :"
+msgstr ""
+
+#: tfobject3d.label_width.caption
+msgctxt "TFOBJECT3D.LABEL_WIDTH.CAPTION"
+msgid "Width :"
+msgstr "Leveys :"
+
+#: tfobject3d.label_zoom.caption
+msgctxt "TFOBJECT3D.LABEL_ZOOM.CAPTION"
+msgid "Zoom"
+msgstr ""
+
+#: tfobject3d.lights.caption
+msgid "Lights"
+msgstr ""
+
+#: tfobject3d.materials.caption
+msgid "Materials"
+msgstr ""
+
+#: tfobject3d.opentexturedialog.title
+msgctxt "TFOBJECT3D.OPENTEXTUREDIALOG.TITLE"
+msgid "Open texture"
+msgstr ""
+
+#: tfobject3d.rendering.caption
+msgid "Rendering"
+msgstr ""
+
+#: tfobject3d.tooladddirectional.hint
+msgid "Add a directional light"
+msgstr ""
+
+#: tfobject3d.toolpointlight.hint
+msgid "Add a point light"
+msgstr ""
+
+#: tfobject3d.toolremoveselectedlight.hint
+msgid "Remove selected light"
+msgstr ""
+
+#: tfphongfilter.button_cancel.caption
+msgctxt "TFPHONGFILTER.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfphongfilter.button_ok.caption
+msgctxt "TFPHONGFILTER.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfphongfilter.caption
+msgctxt "TFPHONGFILTER.CAPTION"
+msgid "Shaded map"
+msgstr "Varjostettu kartta"
+
+#: tfphongfilter.groupbox_color.caption
+msgctxt "TFPHONGFILTER.GROUPBOX_COLOR.CAPTION"
+msgid "Color"
+msgstr "Väri"
+
+#: tfphongfilter.groupbox_color1.caption
+msgid "Altitude map"
+msgstr ""
+
+#: tfphongfilter.label_altitude.caption
+msgid "Global altitude :"
+msgstr ""
+
+#: tfphongfilter.label_lightposition.caption
+msgid "Light position :"
+msgstr "Valon paikka :"
+
+#: tfphongfilter.radio_mapalpha.caption
+msgid "Alpha"
+msgstr ""
+
+#: tfphongfilter.radio_mapblue.caption
+msgid "B"
+msgstr ""
+
+#: tfphongfilter.radio_mapgreen.caption
+msgid "G"
+msgstr ""
+
+#: tfphongfilter.radio_maplightness.caption
+msgctxt "TFPHONGFILTER.RADIO_MAPLIGHTNESS.CAPTION"
+msgid "Lightness"
+msgstr ""
+
+#: tfphongfilter.radio_maplinearlightness.caption
+msgid "Linear lightness"
+msgstr ""
+
+#: tfphongfilter.radio_mapred.caption
+msgid "R"
+msgstr ""
+
+#: tfphongfilter.radio_mapsaturation.caption
+msgctxt "TFPHONGFILTER.RADIO_MAPSATURATION.CAPTION"
+msgid "Saturation"
+msgstr "Kylläisyys"
+
+#: tfphongfilter.radio_usebackcolor.caption
+msgid "Back color"
+msgstr "Taustan väri"
+
+#: tfphongfilter.radio_usekeep.caption
+msgid "Keep"
+msgstr "Säilytä värit"
+
+#: tfphongfilter.radio_usepencolor.caption
+msgid "Pen color"
+msgstr "Kynän väri"
+
+#: tfphongfilter.radio_usetexture.caption
+msgctxt "TFPHONGFILTER.RADIO_USETEXTURE.CAPTION"
+msgid "Current texture"
+msgstr ""
+
+#: tfpixelate.button_cancel.caption
+msgctxt "TFPIXELATE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfpixelate.button_ok.caption
+msgctxt "TFPIXELATE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfpixelate.caption
+msgctxt "TFPIXELATE.CAPTION"
+msgid "Pixelate"
+msgstr "Pikselöinti"
+
+#: tfpixelate.label_pixelsize.caption
+msgctxt "TFPIXELATE.LABEL_PIXELSIZE.CAPTION"
+msgid "Pixel size :"
+msgstr "Pkselin koko :"
+
+#: tfpixelate.label_quality.caption
+msgctxt "TFPIXELATE.LABEL_QUALITY.CAPTION"
+msgid "Quality :"
+msgstr ""
+
+#: tfposterize.button_cancel.caption
+msgctxt "TFPOSTERIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfposterize.button_ok.caption
+msgctxt "TFPOSTERIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfposterize.caption
+msgctxt "TFPOSTERIZE.CAPTION"
+msgid "Posterize"
+msgstr ""
+
+#: tfposterize.checkbox_bylightness.caption
+msgid "By lightness"
+msgstr ""
+
+#: tfposterize.label_levels.caption
+msgid "Levels :"
+msgstr ""
+
+#: tfpreviewdialog.caption
+msgid "Preview"
+msgstr ""
+
+#: tfpreviewdialog.lstatus.caption
+msgctxt "tfpreviewdialog.lstatus.caption"
+msgid "."
+msgstr ""
+
+#: tfprint.button_configureprinter.caption
+msgid "Configure..."
+msgstr "Muokkaa asetuksia"
+
+#: tfprint.button_print.caption
+msgid "Print!"
+msgstr "Tulosta!"
+
+#: tfprint.button_zoomfit.caption
+msgctxt "TFPRINT.BUTTON_ZOOMFIT.CAPTION"
+msgid "Zoom fit"
+msgstr "Sovita"
+
+#: tfprint.caption
+msgid "Print"
+msgstr "Tulosta"
+
+#: tfprint.checkbox_ratio.caption
+msgctxt "TFPRINT.CHECKBOX_RATIO.CAPTION"
+msgid "Keep aspect ratio"
+msgstr ""
+
+#: tfprint.groupbox_imagesize.caption
+msgid "Image size"
+msgstr "Kuvan koko"
+
+#: tfprint.groupbox_margins.caption
+msgid "Margins"
+msgstr "Marginaalit"
+
+#: tfprint.label_bottom.caption
+msgid "Bottom:"
+msgstr "Alaosa:"
+
+#: tfprint.label_dpix.caption
+msgctxt "TFPRINT.LABEL_DPIX.CAPTION"
+msgid "."
+msgstr ""
+
+#: tfprint.label_dpiy.caption
+msgctxt "TFPRINT.LABEL_DPIY.CAPTION"
+msgid "."
+msgstr ""
+
+#: tfprint.label_height.caption
+msgid "Height:"
+msgstr "Korkeus:"
+
+#: tfprint.label_left.caption
+msgid "Left:"
+msgstr "Vasen reuna"
+
+#: tfprint.label_orientation.caption
+msgid "Orientation:"
+msgstr "Tulosteen asettelusuunta"
+
+#: tfprint.label_printerandpaper.caption
+msgid "Printer and paper:"
+msgstr "Tulostin ja paperikoko"
+
+#: tfprint.label_right.caption
+msgid "Right:"
+msgstr "Oikea reuna:"
+
+#: tfprint.label_top.caption
+msgid "Top:"
+msgstr "Yläreuna:"
+
+#: tfprint.label_width.caption
+msgid "Width:"
+msgstr "Leveys:"
+
+#: tfquestion.caption
+msgid "Question"
+msgstr ""
+
+#: tfquestion.checkbox_rememberchoice.caption
+msgid "Remember this choice"
+msgstr ""
+
+#: tfquestion.label_message.caption
+msgctxt "tfquestion.label_message.caption"
+msgid "."
+msgstr ""
+
+#: tfradialblur.button_cancel.caption
+msgctxt "TFRADIALBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfradialblur.button_ok.caption
+msgctxt "TFRADIALBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfradialblur.caption
+msgctxt "TFRADIALBLUR.CAPTION"
+msgid "Radial blur"
+msgstr "Säteittäinen sumennus"
+
+#: tfradialblur.label_radius.caption
+msgctxt "TFRADIALBLUR.LABEL_RADIUS.CAPTION"
+msgid "Radius :"
+msgstr ""
+
+#: tfrain.button_cancel.caption
+msgctxt "TFRAIN.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfrain.button_ok.caption
+msgctxt "TFRAIN.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfrain.caption
+msgid "Rain"
+msgstr "Sade"
+
+#: tfrain.label_quantity.caption
+msgid "Quantity:"
+msgstr "Määrä:"
+
+#: tfrain.label_wind.caption
+msgid "Wind :"
+msgstr "Tuuli"
+
+#: tfresample.button_cancel.caption
+msgctxt "TFRESAMPLE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfresample.button_ok.caption
+msgctxt "TFRESAMPLE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfresample.caption
+msgctxt "TFRESAMPLE.CAPTION"
+msgid "Resample"
+msgstr ""
+
+#: tfresample.checkbox_ratio.caption
+msgctxt "tfresample.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr ""
+
+#: tfresample.label_height.caption
+msgctxt "TFRESAMPLE.LABEL_HEIGHT.CAPTION"
+msgid "Height :"
+msgstr "Korkeus :"
+
+#: tfresample.label_quality.caption
+msgctxt "TFRESAMPLE.LABEL_QUALITY.CAPTION"
+msgid "Quality :"
+msgstr ""
+
+#: tfresample.label_width.caption
+msgctxt "TFRESAMPLE.LABEL_WIDTH.CAPTION"
+msgid "Width :"
+msgstr "Leveys :"
+
+#: tfsaveoption.button_cancel.caption
+msgctxt "TFSAVEOPTION.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfsaveoption.button_ok.caption
+msgctxt "TFSAVEOPTION.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfsaveoption.caption
+msgctxt "TFSAVEOPTION.CAPTION"
+msgid "Save"
+msgstr "Tallenna"
+
+#: tfsaveoption.checkbox_dithering.caption
+msgid "Dithering"
+msgstr "Rasterointi"
+
+#: tfsaveoption.label1.caption
+msgid "Quality:"
+msgstr ""
+
+#: tfsaveoption.label_0.caption
+msgid "0"
+msgstr ""
+
+#: tfsaveoption.label_1.caption
+msgid "100"
+msgstr ""
+
+#: tfsaveoption.label_50.caption
+msgid "50"
+msgstr ""
+
+#: tfsaveoption.label_colordepth.caption
+msgid "Color depth:"
+msgstr ""
+
+#: tfsaveoption.label_size.caption
+msgid "Size:"
+msgstr ""
+
+#: tfsaveoption.radiobutton_16colors.caption
+msgid "16 colors"
+msgstr "16 väriä"
+
+#: tfsaveoption.radiobutton_24bitsperpixel.caption
+msgid "24 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_256colors.caption
+msgid "256 colors"
+msgstr "256 väriä"
+
+#: tfsaveoption.radiobutton_2colors.caption
+msgid "2 colors"
+msgstr "2 väriä"
+
+#: tfsaveoption.radiobutton_32bitsperpixel.caption
+msgid "32 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_miomap.caption
+msgid "MioMap"
+msgstr ""
+
+#: tfsharpen.button_cancel.caption
+msgctxt "TFSHARPEN.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfsharpen.button_ok.caption
+msgctxt "TFSHARPEN.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfsharpen.caption
+msgid "Sharpen/Smooth"
+msgstr "Terävöitä/Pehmennä"
+
+#: tfsharpen.label_amount.caption
+msgctxt "TFSHARPEN.LABEL_AMOUNT.CAPTION"
+msgid "Amount :"
+msgstr ""
+
+#: tfshiftcolors.button_cancel.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Peru"
+
+#: tfshiftcolors.button_ok.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfshiftcolors.caption
+msgctxt "TFSHIFTCOLORS.CAPTION"
+msgid "Shift colors"
+msgstr ""
+
+#: tfshiftcolors.checkbox_gsba.caption
+msgctxt "tfshiftcolors.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr ""
+
+#: tfshiftcolors.label1.caption
+msgctxt "TFSHIFTCOLORS.LABEL1.CAPTION"
+msgid "Hue"
+msgstr "Värisävy"
+
+#: tfshiftcolors.label2.caption
+msgctxt "TFSHIFTCOLORS.LABEL2.CAPTION"
+msgid "Saturation"
+msgstr "Kylläisyys"
+
+#: tftoolbox.caption
+msgctxt "TFTOOLBOX.CAPTION"
+msgid "Tools"
+msgstr "Työkalut"
+

+ 1227 - 12
lazpaint/release/bin/i18n/lazpaint.fr.po

@@ -1559,9 +1559,13 @@ msgstr "tout"
 msgid "All supported filetypes"
 msgstr "Tous les formats connus"
 
-#: uresourcestrings.rsaltshiftscalemode
-msgid "Hold ALT or SHIFT to scale"
-msgstr "Appuyez sur ALT et MAJ pour étirer"
+#: uresourcestrings.rsalt
+msgid "ALT"
+msgstr "ALT"
+
+#: uresourcestrings.rsholdkeysscalemode
+msgid "Hold %1 or %2 to scale"
+msgstr "Appuyez sur %1 et %2 pour étirer"
 
 #: uresourcestrings.rsanimatedgif
 msgid "Animated GIF"
@@ -1679,9 +1683,17 @@ msgstr "Cosinus"
 msgid "Crop"
 msgstr "Recadrer"
 
-#: uresourcestrings.rsctrlrestrictrotation
-msgid "Hold CTRL to restrict rotation angle"
-msgstr "Maintenir CTRL pour restreindre l'angle de rotation"
+#: uresourcestrings.rsctrl
+msgid "CTRL"
+msgstr "CTRL"
+
+#: uresourcestrings.rscmd
+msgid "CMD"
+msgstr "CMD"
+
+#: uresourcestrings.rsholdkeyrestrictrotation
+msgid "Hold %1 to restrict rotation angle"
+msgstr "Maintenir %1 pour restreindre l'angle de rotation"
 
 #: uresourcestrings.rscurvemodehint
 msgid "Press S or X to set the curve mode of the last point"
@@ -1708,6 +1720,10 @@ msgstr "Le dossier n'est pas vide"
 msgid "Dither layer using palette"
 msgstr "Tramer le calque en utilisant la palette"
 
+#: uresourcestrings.rsduplicateimage
+msgid "Duplicate image"
+msgstr "Dupliquer l'image"
+
 #: uresourcestrings.rseditmask
 msgctxt "uresourcestrings.rseditmask"
 msgid "Edit mask"
@@ -1850,13 +1866,17 @@ msgctxt "uresourcestrings.rshalfcosine"
 msgid "Half-cosine"
 msgstr "Semi-cosinus"
 
-#: uresourcestrings.rsholdctrlsnaptopixel
-msgid "Hold CTRL to snap to pixels"
-msgstr "Maintenir CTRL pour aligner aux pixels"
+#: uresourcestrings.rsholdkeysnaptopixel
+msgid "Hold %1 to snap to pixels"
+msgstr "Maintenir %1 pour aligner aux pixels"
+
+#: uresourcestrings.rsshift
+msgid "SHIFT"
+msgstr "MAJ"
 
-#: uresourcestrings.rsholdshiftforsquare
-msgid "Hold SHIFT to draw a square or a circle"
-msgstr "Maintenir MAJ pour dessiner un carré ou un cercle"
+#: uresourcestrings.rsholdkeyforsquare
+msgid "Hold %1 to draw a square or a circle"
+msgstr "Maintenir %1 pour dessiner un carré ou un cercle"
 
 #: uresourcestrings.rshotspot
 msgctxt "uresourcestrings.rshotspot"
@@ -2330,3 +2350,1198 @@ msgstr "Calque vectoriel"
 msgid "Yes"
 msgstr "Oui"
 
+#: tablet.getprocfailed
+msgid "Procedure %s failed to load properly."
+msgstr "La procédure %s n'a pas réussi à se charger correctement."
+
+#: tablet.openfailed
+msgid "Tablet context failed to open."
+msgstr "Le contexte de la tablette ne s'est pas ouvert."
+
+#: tfabout.button_donate.caption
+msgctxt "tfabout.button_donate.caption"
+msgid "Donate..."
+msgstr "Faire un don..."
+
+#: tfabout.caption
+msgctxt "tfabout.caption"
+msgid "About"
+msgstr "À propos"
+
+#: tfabout.labelurl.caption
+msgid "http://sourceforge.net/projects/lazpaint/"
+msgstr "http://sourceforge.net/projects/lazpaint/"
+
+#: tfabout.label_authors.caption
+msgctxt "tfabout.label_authors.caption"
+msgid "Authors:"
+msgstr "Auteurs :"
+
+#: tfabout.label_authorsvalue.caption
+msgctxt "tfabout.label_authorsvalue.caption"
+msgid "Circular helped by FabienWang, Lainz and others"
+msgstr "Circular aidé par FabienWang, Lainz et autres"
+
+#: tfabout.label_homepage.caption
+msgctxt "tfabout.label_homepage.caption"
+msgid "Homepage:"
+msgstr "Site Web :"
+
+#: tfabout.label_libraries.caption
+msgctxt "tfabout.label_libraries.caption"
+msgid "Libraries used:"
+msgstr "Bibliothèques :"
+
+#: tfabout.label_licence.caption
+msgctxt "tfabout.label_licence.caption"
+msgid "Licence:"
+msgstr "Licence :"
+
+#: tfabout.label_opensource.caption
+msgctxt "tfabout.label_opensource.caption"
+msgid "Open source (GPLv3)"
+msgstr "Code libre (GPLv3)"
+
+#: tfadjustcurves.button_cancel.caption
+msgctxt "tfadjustcurves.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfadjustcurves.button_ok.caption
+msgctxt "tfadjustcurves.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfadjustcurves.caption
+msgid "Adjust curves"
+msgstr "Ajuster les courbes"
+
+#: tfadjustcurves.toolbutton_newcurve.hint
+msgid "Discard current curve and start a new one"
+msgstr "Effacer et commencer une nouvelle courbe"
+
+#: tfadjustcurves.toolbutton_posterize.hint
+msgctxt "tfadjustcurves.toolbutton_posterize.hint"
+msgid "Posterize"
+msgstr "Niveaux"
+
+#: tfadjustcurves.toolbutton_removepoint.hint
+msgid "Remove selected point (Del)"
+msgstr "Supprimer le point (Suppr)"
+
+#: tfblendop.button_cancel.caption
+msgctxt "tfblendop.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfblendop.button_ok.caption
+msgctxt "tfblendop.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfblendop.caption
+msgid "Blend operation"
+msgstr "Mode de fusion"
+
+#: tfblendop.label_blendopcategory.caption
+msgctxt "tfblendop.label_blendopcategory.caption"
+msgid "Category of blend operation"
+msgstr "Catégorie de mode de fusion"
+
+#: tfblendop.label_blendopvalue.caption
+msgctxt "tfblendop.label_blendopvalue.caption"
+msgid "."
+msgstr "."
+
+#: tfblendop.label_kritaover.caption
+msgctxt "tfblendop.label_kritaover.caption"
+msgid "Krita"
+msgstr "Krita"
+
+#: tfblendop.label_kritaover.hint
+msgid "Blend operations that are available in Krita"
+msgstr "Modes de fusion disponibles dans le logiciel Krita"
+
+#: tfblendop.label_otherover.caption
+msgctxt "tfblendop.label_otherover.caption"
+msgid "Other"
+msgstr "Autre"
+
+#: tfblendop.label_otherover.hint
+msgid "Blend operations of LazPaint and Paint.NET"
+msgstr "Modes de fusion de LazPaint et de Paint.NET"
+
+#: tfblendop.label_patternover.caption
+msgctxt "tfblendop.label_patternover.caption"
+msgid "Pattern over"
+msgstr "Texture au-dessus"
+
+#: tfblendop.label_patternover.hint
+msgid "Preview blend operation with the specified image on top"
+msgstr "Aperçu du mode de fusion avec l'image donnée au-dessus"
+
+#: tfblendop.label_patternunder.caption
+msgctxt "tfblendop.label_patternunder.caption"
+msgid "Pattern under"
+msgstr "Texture en-dessous"
+
+#: tfblendop.label_patternunder.hint
+msgid "Preview blend operation with the specified image underneath"
+msgstr "Aperçu du mode de fusion avec l'image donnée en-dessous"
+
+#: tfblendop.label_previewwith.caption
+msgctxt "tfblendop.label_previewwith.caption"
+msgid "Preview with"
+msgstr "Aperçu avec"
+
+#: tfblendop.label_selectedblendop.caption
+msgid "Selected blend operation :"
+msgstr "Mode de fusion choisi :"
+
+#: tfblendop.label_svgover.caption
+msgctxt "tfblendop.label_svgover.caption"
+msgid "Basic SVG"
+msgstr "SVG basique"
+
+#: tfblendop.label_svgover.hint
+msgid "Basic blend operations that are available in virtually all image editors"
+msgstr "Modes de fusion de base disponibles dans presque tous les logiciels"
+
+#: tfbrowseimages.caption
+msgid "Browse images"
+msgstr "Parcourir les images"
+
+#: tfbrowseimages.checkbox_usedirectoryonstartup.caption
+msgid "Use this directory on startup"
+msgstr "Utiliser ce dossier au démarrage"
+
+#: tfbrowseimages.label_status.caption
+msgctxt "tfbrowseimages.label_status.caption"
+msgid "."
+msgstr "."
+
+#: tfbrowseimages.toolbutton_createfolderorcontainer.hint
+msgid "Create folder or container"
+msgstr "Créer dossier ou conteneur"
+
+#: tfbrowseimages.toolbutton_goup.hint
+msgid "Go one directory up"
+msgstr "Répertoire parent"
+
+#: tfbrowseimages.toolbutton_openselectedfiles.hint
+msgid "Open selected files"
+msgstr "Ouvrir les fichiers sélectionnés"
+
+#: tfbrowseimages.toolbutton_viewbigicon.hint
+msgctxt "tfbrowseimages.toolbutton_viewbigicon.hint"
+msgid "Show big icons"
+msgstr "Grandes icônes"
+
+#: tfbrowseimages.toolbutton_viewdetails.hint
+msgctxt "tfbrowseimages.toolbutton_viewdetails.hint"
+msgid "Show details and preview"
+msgstr "Détails et aperçu"
+
+#: tfbrowseimages.tool_selectdrive.hint
+msgid "Select drive"
+msgstr "Choisir le support"
+
+#: tfcanvassize.button_cancel.caption
+msgctxt "TFCANVASSIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfcanvassize.button_ok.caption
+msgctxt "TFCANVASSIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcanvassize.caption
+msgctxt "tfcanvassize.caption"
+msgid "Canvas size"
+msgstr "Taille du canevas"
+
+#: tfcanvassize.checkbox_flipmode.caption
+msgid "Flip mode"
+msgstr "Retourner"
+
+#: tfcanvassize.label_anchor.caption
+msgctxt "tfcanvassize.label_anchor.caption"
+msgid "Anchor :"
+msgstr "Ancre :"
+
+#: tfcanvassize.label_height.caption
+msgctxt "tfcanvassize.label_height.caption"
+msgid "Height :"
+msgstr "Hauteur :"
+
+#: tfcanvassize.label_width.caption
+msgctxt "tfcanvassize.label_width.caption"
+msgid "Width :"
+msgstr "Largeur :"
+
+#: tfcolorintensity.button_cancel.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfcolorintensity.button_ok.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcolorintensity.caption
+msgctxt "tfcolorintensity.caption"
+msgid "Intensity"
+msgstr "Intensifier"
+
+#: tfcolorintensity.label_multiply.caption
+msgctxt "tfcolorintensity.label_multiply.caption"
+msgid "Multiply"
+msgstr "Multiplier"
+
+#: tfcolorintensity.label_shift.caption
+msgctxt "tfcolorintensity.label_shift.caption"
+msgid "Shift"
+msgstr "Décaler"
+
+#: tfcolorize.button_cancel.caption
+msgctxt "TFCOLORIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfcolorize.button_ok.caption
+msgctxt "TFCOLORIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcolorize.caption
+msgctxt "tfcolorize.caption"
+msgid "Colorize"
+msgstr "Coloriser"
+
+#: tfcolorize.checkbox_gsba.caption
+msgctxt "tfcolorize.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "Teinte et luminosité corrigées"
+
+#: tfcolorize.label_colorness.caption
+msgctxt "tfcolorize.label_colorness.caption"
+msgid "Colorness"
+msgstr "Couleurs"
+
+#: tfcolorize.label_hue.caption
+msgctxt "tfcolorize.label_hue.caption"
+msgid "Hue"
+msgstr "Nuances"
+
+#: tfcolorize.label_preset.caption
+msgid "Preset"
+msgstr "Prédéfini"
+
+#: tfcustomblur.button_cancel.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfcustomblur.button_editmask.caption
+msgid "Edit mask..."
+msgstr "Éditer un masque..."
+
+#: tfcustomblur.button_loadmask.caption
+msgid "Load mask..."
+msgstr "Charger un masque..."
+
+#: tfcustomblur.button_ok.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcustomblur.caption
+msgctxt "tfcustomblur.caption"
+msgid "Custom blur"
+msgstr "Flou personnalisé"
+
+#: tfcustomblur.openpicturedialog1.title
+msgid "Open grayscale file"
+msgstr "Ouvrir un fichier en échelle de gris"
+
+#: tfemboss.button_cancel.caption
+msgctxt "TFEMBOSS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfemboss.button_ok.caption
+msgctxt "TFEMBOSS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfemboss.caption
+msgctxt "tfemboss.caption"
+msgid "Emboss"
+msgstr "Embosser"
+
+#: tfemboss.checkbox_preservecolors.caption
+msgid "Preserve colors"
+msgstr "Conserver les couleurs"
+
+#: tfemboss.checkbox_transparent.caption
+msgid "Transparent"
+msgstr "Transparent"
+
+#: tfemboss.label_direction.caption
+msgctxt "tfemboss.label_direction.caption"
+msgid "Direction :"
+msgstr "Direction :"
+
+#: tffilterfunction.button_cancel.caption
+msgctxt "tffilterfunction.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tffilterfunction.button_ok.caption
+msgctxt "tffilterfunction.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tffilterfunction.caption
+msgid "Apply function"
+msgstr "Appliquer la fonction"
+
+#: tffilterfunction.checkbox_gsba.caption
+msgctxt "tffilterfunction.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "Teinte et luminosité corrigées"
+
+#: tffilterfunction.label_alphaequals.caption
+msgctxt "tffilterfunction.label_alphaequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_blueequals.caption
+msgctxt "tffilterfunction.label_blueequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_greenequals.caption
+msgctxt "tffilterfunction.label_greenequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_hueequals.caption
+msgctxt "tffilterfunction.label_hueequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_lightnessequals.caption
+msgctxt "tffilterfunction.label_lightnessequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_redequals.caption
+msgctxt "tffilterfunction.label_redequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_saturationequals.caption
+msgctxt "tffilterfunction.label_saturationequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_variables.caption
+msgid "Variables :"
+msgstr "Variables :"
+
+#: tffilterfunction.tabsheet_hsl.caption
+msgid "HSL"
+msgstr "HSL"
+
+#: tffilterfunction.tabsheet_rgb.caption
+msgctxt "tffilterfunction.tabsheet_rgb.caption"
+msgid "RGB"
+msgstr "RGB"
+
+#: tfgeometricbrush.button_cancel.caption
+msgctxt "tfgeometricbrush.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfgeometricbrush.button_ok.caption
+msgctxt "tfgeometricbrush.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfgeometricbrush.caption
+msgid "Geometric brush"
+msgstr "Pinceau géométrique"
+
+#: tfgeometricbrush.checkbox_isgradient.caption
+msgid "Opacity gradient"
+msgstr "Gradient d'opacité"
+
+#: tfgeometricbrush.label1.caption
+msgid "Number of sides:"
+msgstr "Nombre de côtés :"
+
+#: tfimagelist.caption
+msgid "Image List"
+msgstr "Liste d'images"
+
+#: tfimagelist.pmautouncheckonopen.caption
+msgid "Autouncheck files after being open"
+msgstr "Décocher automatiquement les fichiers lors de l'ouverture"
+
+#: tfimagelist.pmautouncheckonsave.caption
+msgid "Autouncheck files after being edited and saved"
+msgstr "Décocher automatiquement les fichiers après édition et sauvegarde"
+
+#: tfimagelist.pmremoveall.caption
+msgid "Empty image list"
+msgstr "Vider la liste d'images"
+
+#: tfimagelist.pmremovenonexisting.caption
+msgid "Remove nonexisting images"
+msgstr "Enlever les images inexistantes"
+
+#: tfimagelist.pmremoveunchecked.caption
+msgid "Remove unchecked images"
+msgstr "Enlever les images non cochées"
+
+#: tfimagelist.pmunchecknonexisting.caption
+msgid "Uncheck nonexisting files"
+msgstr "Décocher les images inexistantes"
+
+#: tfimagelist.stringgrid1.columns[0].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[0].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[1].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[1].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[2].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[2].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[3].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[3].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.tbaddfiles.hint
+msgid "Add images to list"
+msgstr "Ajouter des images"
+
+#: tfimagelist.tbautouncheck.hint
+msgid "Enable/disable autounchecking for processed files"
+msgstr "Activer/désactiver le décochage automatique des fichiers déjà ouverts"
+
+#: tfimagelist.tbautozoomfit.hint
+msgid "Enable/disable autofitting images in the LazPaint window"
+msgstr "Activer l'ajustement du zoom automatique dans la fenêtre principale"
+
+#: tfimagelist.tbcheckall.hint
+msgid "Check all files for processing"
+msgstr "Cocher tous les fichiers pour traitement"
+
+#: tfimagelist.tbminiwindow.hint
+msgid "Switch to miniwindow"
+msgstr "Passer en mode mini-fenêtre"
+
+#: tfimagelist.tbmovedown.hint
+msgid "Move selected items down"
+msgstr "Faire descendre l'élément sélectionné"
+
+#: tfimagelist.tbmoveup.hint
+msgid "Move selected items up"
+msgstr "Faire monter l'élément sélectionné"
+
+#: tfimagelist.tbnormalwindows.hint
+msgid "Switch to normal window"
+msgstr "Passer en mode fenêtre normale"
+
+#: tfimagelist.tbopenimage.hint
+msgid "Open current image"
+msgstr "Ouvrir l'image en cours"
+
+#: tfimagelist.tbopennext.hint
+msgctxt "tfimagelist.tbopennext.hint"
+msgid "Open next image (Alt-Right)"
+msgstr "Ouvrir l'image suivante (Alt-Droite)"
+
+#: tfimagelist.tbopennextsw.hint
+msgctxt "tfimagelist.tbopennextsw.hint"
+msgid "Open next image"
+msgstr "Ouvrir l'image suivante"
+
+#: tfimagelist.tbopenprev.hint
+msgctxt "tfimagelist.tbopenprev.hint"
+msgid "Open previous image (Alt-Left)"
+msgstr "Ouvrir l'image précédente (Alt-Gauche)"
+
+#: tfimagelist.tbopenprevsw.hint
+msgctxt "tfimagelist.tbopenprevsw.hint"
+msgid "Open previous image"
+msgstr "Ouvrir l'image précédente"
+
+#: tfimagelist.tbremoveitem.hint
+msgid "Remove selected images from list"
+msgstr "Retirer les images sélectionnées de la liste"
+
+#: tfimagelist.tbuncheckall.hint
+msgid "Uncheck all files for processing"
+msgstr "Décocher toutes les images pour traitement"
+
+#: tfloading.caption
+msgctxt "tfloading.caption"
+msgid "Loading..."
+msgstr "Chargement..."
+
+#: tfmotionblur.button_cancel.caption
+msgctxt "TFMOTIONBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfmotionblur.button_ok.caption
+msgctxt "TFMOTIONBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfmotionblur.caption
+msgctxt "tfmotionblur.caption"
+msgid "Motion blur"
+msgstr "Flou de mouvement"
+
+#: tfmotionblur.checkbox_oriented.caption
+msgid "Oriented"
+msgstr "Orienté"
+
+#: tfmotionblur.label_distance.caption
+msgctxt "tfmotionblur.label_distance.caption"
+msgid "Distance :"
+msgstr "Distance :"
+
+#: tfmultiimage.button_cancel.caption
+msgctxt "tfmultiimage.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfmultiimage.button_ok.caption
+msgctxt "tfmultiimage.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfmultiimage.caption
+msgid "Choose image"
+msgstr "Choisir une image"
+
+#: tfnewimage.button_cancel.caption
+msgctxt "TFNEWIMAGE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfnewimage.button_ok.caption
+msgctxt "TFNEWIMAGE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfnewimage.caption
+msgctxt "tfnewimage.caption"
+msgid "New image"
+msgstr "Nouvelle image"
+
+#: tfnewimage.combobox_bitdepth.text
+msgid "32"
+msgstr ""
+
+#: tfnewimage.label_bitdepth.caption
+msgid "Bit depth :"
+msgstr "Bits par pixel :"
+
+#: tfnewimage.label_height.caption
+msgctxt "tfnewimage.label_height.caption"
+msgid "Height :"
+msgstr "Hauteur :"
+
+#: tfnewimage.label_height1.caption
+msgid "Ratio :"
+msgstr "Rapport :"
+
+#: tfnewimage.label_memoryrequired.caption
+msgid "Memory required :"
+msgstr "Mémoire nécessaire :"
+
+#: tfnewimage.label_width.caption
+msgctxt "tfnewimage.label_width.caption"
+msgid "Width :"
+msgstr "Largeur :"
+
+#: tfnoisefilter.button_cancel.caption
+msgctxt "tfnoisefilter.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfnoisefilter.button_ok.caption
+msgctxt "tfnoisefilter.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfnoisefilter.caption
+msgid "Noise filter"
+msgstr "Bruit"
+
+#: tfnoisefilter.label_opacity.caption
+msgid "Opacity:"
+msgstr "Opacité :"
+
+#: tfnoisefilter.radio_grayscalenoise.caption
+msgid "Grayscale noise"
+msgstr "Bruit en tons de gris"
+
+#: tfnoisefilter.radio_rgbnoise.caption
+msgid "RGB noise"
+msgstr "Bruit R/V/B"
+
+#: tfobject3d.button_cancel.caption
+msgctxt "tfobject3d.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfobject3d.button_loadtex.caption
+msgid "Texture..."
+msgstr "Texture..."
+
+#: tfobject3d.button_notex.caption
+msgid "No tex."
+msgstr "Aucune"
+
+#: tfobject3d.button_ok.caption
+msgctxt "tfobject3d.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfobject3d.caption
+msgid "3D object"
+msgstr "Objet 3D"
+
+#: tfobject3d.checkbox_antialiasing.caption
+msgid "Antialiasing"
+msgstr "Anticrénelage"
+
+#: tfobject3d.checkbox_biface.caption
+msgid "2-sided faces"
+msgstr "Faces avec 2 côtés"
+
+#: tfobject3d.checkbox_textureinterp.caption
+msgid "Texture interpolation"
+msgstr "Interpolation de texture"
+
+#: tfobject3d.groupbox_selectedlight.caption
+msgid "Selected light"
+msgstr "Source lumineuse"
+
+#: tfobject3d.groupbox_selectedmaterial.caption
+msgctxt "tfobject3d.groupbox_selectedmaterial.caption"
+msgid "Selected material"
+msgstr "Matériau sélectionné"
+
+#: tfobject3d.label_color.caption
+msgctxt "tfobject3d.label_color.caption"
+msgid "Color :"
+msgstr "Couleur :"
+
+#: tfobject3d.label_color1.caption
+msgctxt "tfobject3d.label_color1.caption"
+msgid "Color :"
+msgstr "Couleur :"
+
+#: tfobject3d.label_height.caption
+msgctxt "tfobject3d.label_height.caption"
+msgid "Height :"
+msgstr "Hauteur :"
+
+#: tfobject3d.label_lightingnormals.caption
+msgctxt "tfobject3d.label_lightingnormals.caption"
+msgid "Lighting normals :"
+msgstr "Perp. pour éclairage :"
+
+#: tfobject3d.label_lights.caption
+msgid "Lights :"
+msgstr "Sources lumineuses :"
+
+#: tfobject3d.label_materials.caption
+msgctxt "tfobject3d.label_materials.caption"
+msgid "Materials :"
+msgstr "Matériaux :"
+
+#: tfobject3d.label_opacity.caption
+msgctxt "tfobject3d.label_opacity.caption"
+msgid "Opacity :"
+msgstr "Opacité :"
+
+#: tfobject3d.label_specularindex.caption
+msgctxt "tfobject3d.label_specularindex.caption"
+msgid "Spec. index :"
+msgstr "Indice spéc. :"
+
+#: tfobject3d.label_width.caption
+msgctxt "tfobject3d.label_width.caption"
+msgid "Width :"
+msgstr "Largeur :"
+
+#: tfobject3d.label_zoom.caption
+msgctxt "tfobject3d.label_zoom.caption"
+msgid "Zoom"
+msgstr "Zoom"
+
+#: tfobject3d.lights.caption
+msgid "Lights"
+msgstr "Lumières"
+
+#: tfobject3d.materials.caption
+msgid "Materials"
+msgstr "Matériaux"
+
+#: tfobject3d.opentexturedialog.title
+msgctxt "tfobject3d.opentexturedialog.title"
+msgid "Open texture"
+msgstr "Ouvrir une texture"
+
+#: tfobject3d.rendering.caption
+msgid "Rendering"
+msgstr "Rendu"
+
+#: tfobject3d.tooladddirectional.hint
+msgid "Add a directional light"
+msgstr "Ajouter une lumière directionnelle"
+
+#: tfobject3d.toolpointlight.hint
+msgid "Add a point light"
+msgstr "Ajouter une lumière ponctuelle"
+
+#: tfobject3d.toolremoveselectedlight.hint
+msgid "Remove selected light"
+msgstr "Supprimer la source lumineuse"
+
+#: tfphongfilter.button_cancel.caption
+msgctxt "tfphongfilter.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfphongfilter.button_ok.caption
+msgctxt "tfphongfilter.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfphongfilter.caption
+msgctxt "tfphongfilter.caption"
+msgid "Shaded map"
+msgstr "Carte éclairée"
+
+#: tfphongfilter.groupbox_color.caption
+msgctxt "tfphongfilter.groupbox_color.caption"
+msgid "Color"
+msgstr "Couleur"
+
+#: tfphongfilter.groupbox_color1.caption
+msgid "Altitude map"
+msgstr "Carte d'altitude"
+
+#: tfphongfilter.label_altitude.caption
+msgid "Global altitude :"
+msgstr "Altitude globale :"
+
+#: tfphongfilter.label_lightposition.caption
+msgid "Light position :"
+msgstr "Position de la lumière :"
+
+#: tfphongfilter.radio_mapalpha.caption
+msgid "Alpha"
+msgstr "Canal alpha"
+
+#: tfphongfilter.radio_mapblue.caption
+msgid "B"
+msgstr "B"
+
+#: tfphongfilter.radio_mapgreen.caption
+msgid "G"
+msgstr "V"
+
+#: tfphongfilter.radio_maplightness.caption
+msgctxt "tfphongfilter.radio_maplightness.caption"
+msgid "Lightness"
+msgstr "Clarté"
+
+#: tfphongfilter.radio_maplinearlightness.caption
+msgid "Linear lightness"
+msgstr "Clarté linéaire"
+
+#: tfphongfilter.radio_mapred.caption
+msgid "R"
+msgstr "R"
+
+#: tfphongfilter.radio_mapsaturation.caption
+msgctxt "tfphongfilter.radio_mapsaturation.caption"
+msgid "Saturation"
+msgstr "Saturation"
+
+#: tfphongfilter.radio_usebackcolor.caption
+msgid "Back color"
+msgstr "Couleur de fond"
+
+#: tfphongfilter.radio_usekeep.caption
+msgid "Keep"
+msgstr "Conserver"
+
+#: tfphongfilter.radio_usepencolor.caption
+msgid "Pen color"
+msgstr "Couleur de crayon"
+
+#: tfphongfilter.radio_usetexture.caption
+msgctxt "tfphongfilter.radio_usetexture.caption"
+msgid "Current texture"
+msgstr "Texture en cours"
+
+#: tfpixelate.button_cancel.caption
+msgctxt "TFPIXELATE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfpixelate.button_ok.caption
+msgctxt "TFPIXELATE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfpixelate.caption
+msgctxt "tfpixelate.caption"
+msgid "Pixelate"
+msgstr "Pixéliser"
+
+#: tfpixelate.label_pixelsize.caption
+msgctxt "tfpixelate.label_pixelsize.caption"
+msgid "Pixel size :"
+msgstr "Taille pixel :"
+
+#: tfpixelate.label_quality.caption
+msgctxt "tfpixelate.label_quality.caption"
+msgid "Quality :"
+msgstr "Qualité :"
+
+#: tfposterize.button_cancel.caption
+msgctxt "tfposterize.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfposterize.button_ok.caption
+msgctxt "tfposterize.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfposterize.caption
+msgctxt "tfposterize.caption"
+msgid "Posterize"
+msgstr "Niveaux"
+
+#: tfposterize.checkbox_bylightness.caption
+msgid "By lightness"
+msgstr "Par intensité"
+
+#: tfposterize.label_levels.caption
+msgid "Levels :"
+msgstr "Niveaux :"
+
+#: tfpreviewdialog.caption
+msgid "Preview"
+msgstr "Aperçu"
+
+#: tfpreviewdialog.lstatus.caption
+msgctxt "tfpreviewdialog.lstatus.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.button_configureprinter.caption
+msgid "Configure..."
+msgstr "Configurer..."
+
+#: tfprint.button_print.caption
+msgid "Print!"
+msgstr "Imprimer !"
+
+#: tfprint.button_zoomfit.caption
+msgctxt "tfprint.button_zoomfit.caption"
+msgid "Zoom fit"
+msgstr "Ajuster le zoom"
+
+#: tfprint.caption
+msgid "Print"
+msgstr "Imprimer"
+
+#: tfprint.checkbox_ratio.caption
+msgctxt "tfprint.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "Maintenir le ratio"
+
+#: tfprint.groupbox_imagesize.caption
+msgid "Image size"
+msgstr "Taille de l'image"
+
+#: tfprint.groupbox_margins.caption
+msgid "Margins"
+msgstr "Marges"
+
+#: tfprint.label_bottom.caption
+msgid "Bottom:"
+msgstr "Bas :"
+
+#: tfprint.label_dpix.caption
+msgctxt "tfprint.label_dpix.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.label_dpiy.caption
+msgctxt "tfprint.label_dpiy.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.label_height.caption
+msgid "Height:"
+msgstr "Hauteur :"
+
+#: tfprint.label_left.caption
+msgid "Left:"
+msgstr "Gauche :"
+
+#: tfprint.label_orientation.caption
+msgid "Orientation:"
+msgstr "Orientation :"
+
+#: tfprint.label_printerandpaper.caption
+msgid "Printer and paper:"
+msgstr "Imprimante et papier :"
+
+#: tfprint.label_right.caption
+msgid "Right:"
+msgstr "Droite :"
+
+#: tfprint.label_top.caption
+msgid "Top:"
+msgstr "Haute :"
+
+#: tfprint.label_width.caption
+msgid "Width:"
+msgstr "Largeur :"
+
+#: tfquestion.caption
+msgid "Question"
+msgstr "Question"
+
+#: tfquestion.checkbox_rememberchoice.caption
+msgid "Remember this choice"
+msgstr "Se souvenir du choix"
+
+#: tfquestion.label_message.caption
+msgctxt "tfquestion.label_message.caption"
+msgid "."
+msgstr "."
+
+#: tfradialblur.button_cancel.caption
+msgctxt "TFRADIALBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfradialblur.button_ok.caption
+msgctxt "TFRADIALBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfradialblur.caption
+msgctxt "tfradialblur.caption"
+msgid "Radial blur"
+msgstr "Flou radial"
+
+#: tfradialblur.label_radius.caption
+msgctxt "tfradialblur.label_radius.caption"
+msgid "Radius :"
+msgstr "Rayon :"
+
+#: tfrain.button_cancel.caption
+msgctxt "tfrain.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfrain.button_ok.caption
+msgctxt "tfrain.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfrain.caption
+msgid "Rain"
+msgstr "Pluie"
+
+#: tfrain.label_quantity.caption
+msgid "Quantity:"
+msgstr "Quantité :"
+
+#: tfrain.label_wind.caption
+msgid "Wind :"
+msgstr "Vent :"
+
+#: tfresample.button_cancel.caption
+msgctxt "TFRESAMPLE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfresample.button_ok.caption
+msgctxt "TFRESAMPLE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfresample.caption
+msgctxt "tfresample.caption"
+msgid "Resample"
+msgstr "Redimensionner"
+
+#: tfresample.checkbox_ratio.caption
+msgctxt "tfresample.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "Maintenir le ratio"
+
+#: tfresample.label_height.caption
+msgctxt "tfresample.label_height.caption"
+msgid "Height :"
+msgstr "Hauteur :"
+
+#: tfresample.label_quality.caption
+msgctxt "tfresample.label_quality.caption"
+msgid "Quality :"
+msgstr "Qualité :"
+
+#: tfresample.label_width.caption
+msgctxt "tfresample.label_width.caption"
+msgid "Width :"
+msgstr "Largeur :"
+
+#: tfsaveoption.button_cancel.caption
+msgctxt "tfsaveoption.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfsaveoption.button_ok.caption
+msgctxt "tfsaveoption.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfsaveoption.caption
+msgctxt "tfsaveoption.caption"
+msgid "Save"
+msgstr "Enregistrer"
+
+#: tfsaveoption.checkbox_dithering.caption
+msgid "Dithering"
+msgstr "Tramage"
+
+#: tfsaveoption.label1.caption
+msgid "Quality:"
+msgstr "Qualité :"
+
+#: tfsaveoption.label_0.caption
+msgid "0"
+msgstr "0"
+
+#: tfsaveoption.label_1.caption
+msgid "100"
+msgstr "100"
+
+#: tfsaveoption.label_50.caption
+msgid "50"
+msgstr "50"
+
+#: tfsaveoption.label_colordepth.caption
+msgid "Color depth:"
+msgstr "Couleurs :"
+
+#: tfsaveoption.label_size.caption
+msgid "Size:"
+msgstr "Taille :"
+
+#: tfsaveoption.radiobutton_16colors.caption
+msgid "16 colors"
+msgstr "16 couleurs"
+
+#: tfsaveoption.radiobutton_24bitsperpixel.caption
+msgid "24 bits"
+msgstr "24 bits"
+
+#: tfsaveoption.radiobutton_256colors.caption
+msgid "256 colors"
+msgstr "256 coul."
+
+#: tfsaveoption.radiobutton_2colors.caption
+msgid "2 colors"
+msgstr "2 couleurs"
+
+#: tfsaveoption.radiobutton_32bitsperpixel.caption
+msgid "32 bits"
+msgstr "32 bits"
+
+#: tfsaveoption.radiobutton_miomap.caption
+msgid "MioMap"
+msgstr "MioMap"
+
+#: tfsharpen.button_cancel.caption
+msgctxt "tfsharpen.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfsharpen.button_ok.caption
+msgctxt "tfsharpen.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfsharpen.caption
+msgid "Sharpen/Smooth"
+msgstr "Accentuer/Lisser"
+
+#: tfsharpen.label_amount.caption
+msgctxt "tfsharpen.label_amount.caption"
+msgid "Amount :"
+msgstr "Quantité :"
+
+#: tfshiftcolors.button_cancel.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuler"
+
+#: tfshiftcolors.button_ok.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfshiftcolors.caption
+msgctxt "tfshiftcolors.caption"
+msgid "Shift colors"
+msgstr "Décaler les couleurs"
+
+#: tfshiftcolors.checkbox_gsba.caption
+msgctxt "tfshiftcolors.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "Teinte et luminosité corrigées"
+
+#: tfshiftcolors.label1.caption
+msgctxt "TFSHIFTCOLORS.LABEL1.CAPTION"
+msgid "Hue"
+msgstr "Teinte"
+
+#: tfshiftcolors.label2.caption
+msgctxt "TFSHIFTCOLORS.LABEL2.CAPTION"
+msgid "Saturation"
+msgstr "Saturation"
+
+#: tftoolbox.caption
+msgctxt "tftoolbox.caption"
+msgid "Tools"
+msgstr "Outils"
+

+ 1208 - 8
lazpaint/release/bin/i18n/lazpaint.ja.po

@@ -1558,8 +1558,8 @@ msgstr ""
 msgid "All supported filetypes"
 msgstr ""
 
-#: uresourcestrings.rsaltshiftscalemode
-msgid "Hold ALT or SHIFT to scale"
+#: uresourcestrings.rsholdkeysscalemode
+msgid "Hold %1 or %2 to scale"
 msgstr ""
 
 #: uresourcestrings.rsanimatedgif
@@ -1675,8 +1675,8 @@ msgstr "コサイン"
 msgid "Crop"
 msgstr "切り抜く"
 
-#: uresourcestrings.rsctrlrestrictrotation
-msgid "Hold CTRL to restrict rotation angle"
+#: uresourcestrings.rsholdkeyrestrictrotation
+msgid "Hold %1 to restrict rotation angle"
 msgstr ""
 
 #: uresourcestrings.rscurvemodehint
@@ -1840,12 +1840,12 @@ msgstr ""
 msgid "Half-cosine"
 msgstr "Half-cosine"
 
-#: uresourcestrings.rsholdctrlsnaptopixel
-msgid "Hold CTRL to snap to pixels"
+#: uresourcestrings.rsholdkeysnaptopixel
+msgid "Hold %1 to snap to pixels"
 msgstr ""
 
-#: uresourcestrings.rsholdshiftforsquare
-msgid "Hold SHIFT to draw a square or a circle"
+#: uresourcestrings.rsholdkeyforsquare
+msgid "Hold %1 to draw a square or a circle"
 msgstr ""
 
 #: uresourcestrings.rshotspot
@@ -2309,3 +2309,1203 @@ msgstr ""
 msgid "Yes"
 msgstr ""
 
+#: tablet.getprocfailed
+msgid "Procedure %s failed to load properly."
+msgstr ""
+
+#: tablet.openfailed
+msgid "Tablet context failed to open."
+msgstr ""
+
+#: tfabout.button_donate.caption
+msgctxt "tfabout.button_donate.caption"
+msgid "Donate..."
+msgstr "寄付する..."
+
+#: tfabout.caption
+msgctxt "tfabout.caption"
+msgid "About"
+msgstr "About"
+
+#: tfabout.labelurl.caption
+msgid "http://sourceforge.net/projects/lazpaint/"
+msgstr "http://sourceforge.net/projects/lazpaint/"
+
+#: tfabout.label_authors.caption
+msgctxt "tfabout.label_authors.caption"
+msgid "Authors:"
+msgstr "Authors"
+
+#: tfabout.label_authorsvalue.caption
+msgctxt "tfabout.label_authorsvalue.caption"
+msgid "Circular helped by FabienWang, Lainz and others"
+msgstr "Circular, FabienWang, Lainz"
+
+#: tfabout.label_homepage.caption
+msgctxt "tfabout.label_homepage.caption"
+msgid "Homepage:"
+msgstr "Homepage"
+
+#: tfabout.label_libraries.caption
+msgctxt "tfabout.label_libraries.caption"
+msgid "Libraries used:"
+msgstr "使用しているライブラリ:"
+
+#: tfabout.label_licence.caption
+msgctxt "tfabout.label_licence.caption"
+msgid "Licence:"
+msgstr "ライセンス:"
+
+#: tfabout.label_opensource.caption
+msgctxt "tfabout.label_opensource.caption"
+msgid "Open source (GPLv3)"
+msgstr "Open source (GPLv3)"
+
+#: tfadjustcurves.button_cancel.caption
+msgctxt "tfadjustcurves.button_cancel.caption"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfadjustcurves.button_ok.caption
+msgctxt "tfadjustcurves.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfadjustcurves.caption
+msgid "Adjust curves"
+msgstr ""
+
+#: tfadjustcurves.toolbutton_newcurve.hint
+msgid "Discard current curve and start a new one"
+msgstr ""
+
+#: tfadjustcurves.toolbutton_posterize.hint
+msgctxt "tfadjustcurves.toolbutton_posterize.hint"
+msgid "Posterize"
+msgstr ""
+
+#: tfadjustcurves.toolbutton_removepoint.hint
+msgid "Remove selected point (Del)"
+msgstr ""
+
+#: tfblendop.button_cancel.caption
+msgctxt "tfblendop.button_cancel.caption"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfblendop.button_ok.caption
+msgctxt "tfblendop.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfblendop.caption
+msgid "Blend operation"
+msgstr ""
+
+#: tfblendop.label_blendopcategory.caption
+msgctxt "tfblendop.label_blendopcategory.caption"
+msgid "Category of blend operation"
+msgstr ""
+
+#: tfblendop.label_blendopvalue.caption
+msgctxt "tfblendop.label_blendopvalue.caption"
+msgid "."
+msgstr ""
+
+#: tfblendop.label_kritaover.caption
+msgctxt "tfblendop.label_kritaover.caption"
+msgid "Krita"
+msgstr ""
+
+#: tfblendop.label_kritaover.hint
+msgid "Blend operations that are available in Krita"
+msgstr ""
+
+#: tfblendop.label_otherover.caption
+msgctxt "tfblendop.label_otherover.caption"
+msgid "Other"
+msgstr ""
+
+#: tfblendop.label_otherover.hint
+msgid "Blend operations of LazPaint and Paint.NET"
+msgstr ""
+
+#: tfblendop.label_patternover.caption
+msgctxt "tfblendop.label_patternover.caption"
+msgid "Pattern over"
+msgstr ""
+
+#: tfblendop.label_patternover.hint
+msgid "Preview blend operation with the specified image on top"
+msgstr ""
+
+#: tfblendop.label_patternunder.caption
+msgctxt "tfblendop.label_patternunder.caption"
+msgid "Pattern under"
+msgstr ""
+
+#: tfblendop.label_patternunder.hint
+msgid "Preview blend operation with the specified image underneath"
+msgstr ""
+
+#: tfblendop.label_previewwith.caption
+msgctxt "tfblendop.label_previewwith.caption"
+msgid "Preview with"
+msgstr ""
+
+#: tfblendop.label_selectedblendop.caption
+msgid "Selected blend operation :"
+msgstr ""
+
+#: tfblendop.label_svgover.caption
+msgctxt "tfblendop.label_svgover.caption"
+msgid "Basic SVG"
+msgstr ""
+
+#: tfblendop.label_svgover.hint
+msgid "Basic blend operations that are available in virtually all image editors"
+msgstr ""
+
+#: tfbrowseimages.caption
+msgid "Browse images"
+msgstr ""
+
+#: tfbrowseimages.checkbox_usedirectoryonstartup.caption
+msgid "Use this directory on startup"
+msgstr ""
+
+#: tfbrowseimages.label_status.caption
+msgctxt "tfbrowseimages.label_status.caption"
+msgid "."
+msgstr ""
+
+#: tfbrowseimages.toolbutton_createfolderorcontainer.hint
+msgid "Create folder or container"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_goup.hint
+msgid "Go one directory up"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_openselectedfiles.hint
+msgid "Open selected files"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_viewbigicon.hint
+msgctxt "tfbrowseimages.toolbutton_viewbigicon.hint"
+msgid "Show big icons"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_viewdetails.hint
+msgctxt "tfbrowseimages.toolbutton_viewdetails.hint"
+msgid "Show details and preview"
+msgstr ""
+
+#: tfbrowseimages.tool_selectdrive.hint
+msgid "Select drive"
+msgstr ""
+
+#: tfcanvassize.button_cancel.caption
+msgctxt "TFCANVASSIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfcanvassize.button_ok.caption
+msgctxt "TFCANVASSIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcanvassize.caption
+msgctxt "tfcanvassize.caption"
+msgid "Canvas size"
+msgstr "キャンバスのサイズ"
+
+#: tfcanvassize.checkbox_flipmode.caption
+msgid "Flip mode"
+msgstr "フリップモード"
+
+#: tfcanvassize.label_anchor.caption
+msgctxt "tfcanvassize.label_anchor.caption"
+msgid "Anchor :"
+msgstr "アンカー:"
+
+#: tfcanvassize.label_height.caption
+msgctxt "tfcanvassize.label_height.caption"
+msgid "Height :"
+msgstr "高さ:"
+
+#: tfcanvassize.label_width.caption
+msgctxt "tfcanvassize.label_width.caption"
+msgid "Width :"
+msgstr "幅:"
+
+#: tfcolorintensity.button_cancel.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfcolorintensity.button_ok.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcolorintensity.caption
+msgctxt "tfcolorintensity.caption"
+msgid "Intensity"
+msgstr "輝度"
+
+#: tfcolorintensity.label_multiply.caption
+msgctxt "tfcolorintensity.label_multiply.caption"
+msgid "Multiply"
+msgstr "乗算"
+
+#: tfcolorintensity.label_shift.caption
+msgctxt "tfcolorintensity.label_shift.caption"
+msgid "Shift"
+msgstr "シフト"
+
+#: tfcolorize.button_cancel.caption
+msgctxt "TFCOLORIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfcolorize.button_ok.caption
+msgctxt "TFCOLORIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcolorize.caption
+msgctxt "tfcolorize.caption"
+msgid "Colorize"
+msgstr "Colorize"
+
+#: tfcolorize.checkbox_gsba.caption
+msgctxt "tfcolorize.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr ""
+
+#: tfcolorize.label_colorness.caption
+msgctxt "tfcolorize.label_colorness.caption"
+msgid "Colorness"
+msgstr "濃淡"
+
+#: tfcolorize.label_hue.caption
+msgctxt "tfcolorize.label_hue.caption"
+msgid "Hue"
+msgstr "色相"
+
+#: tfcolorize.label_preset.caption
+msgid "Preset"
+msgstr ""
+
+#: tfcustomblur.button_cancel.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfcustomblur.button_editmask.caption
+msgid "Edit mask..."
+msgstr "マスク編集"
+
+#: tfcustomblur.button_loadmask.caption
+msgid "Load mask..."
+msgstr "マスク読み込み"
+
+#: tfcustomblur.button_ok.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcustomblur.caption
+msgctxt "tfcustomblur.caption"
+msgid "Custom blur"
+msgstr "カスタムブラー"
+
+#: tfcustomblur.openpicturedialog1.title
+msgid "Open grayscale file"
+msgstr "注意:ブラー用に作成されたグレースケール画像を開く"
+
+#: tfemboss.button_cancel.caption
+msgctxt "TFEMBOSS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfemboss.button_ok.caption
+msgctxt "TFEMBOSS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfemboss.caption
+msgctxt "tfemboss.caption"
+msgid "Emboss"
+msgstr "エンボス"
+
+#: tfemboss.checkbox_preservecolors.caption
+msgid "Preserve colors"
+msgstr ""
+
+#: tfemboss.checkbox_transparent.caption
+msgid "Transparent"
+msgstr ""
+
+#: tfemboss.label_direction.caption
+msgctxt "tfemboss.label_direction.caption"
+msgid "Direction :"
+msgstr "方向:"
+
+#: tffilterfunction.button_cancel.caption
+msgctxt "tffilterfunction.button_cancel.caption"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tffilterfunction.button_ok.caption
+msgctxt "tffilterfunction.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tffilterfunction.caption
+msgid "Apply function"
+msgstr ""
+
+#: tffilterfunction.checkbox_gsba.caption
+msgctxt "tffilterfunction.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr ""
+
+#: tffilterfunction.label_alphaequals.caption
+msgctxt "tffilterfunction.label_alphaequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_blueequals.caption
+msgctxt "tffilterfunction.label_blueequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_greenequals.caption
+msgctxt "tffilterfunction.label_greenequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_hueequals.caption
+msgctxt "tffilterfunction.label_hueequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_lightnessequals.caption
+msgctxt "tffilterfunction.label_lightnessequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_redequals.caption
+msgctxt "tffilterfunction.label_redequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_saturationequals.caption
+msgctxt "tffilterfunction.label_saturationequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_variables.caption
+msgid "Variables :"
+msgstr ""
+
+#: tffilterfunction.tabsheet_hsl.caption
+msgid "HSL"
+msgstr ""
+
+#: tffilterfunction.tabsheet_rgb.caption
+msgctxt "tffilterfunction.tabsheet_rgb.caption"
+msgid "RGB"
+msgstr ""
+
+#: tfgeometricbrush.button_cancel.caption
+msgctxt "tfgeometricbrush.button_cancel.caption"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfgeometricbrush.button_ok.caption
+msgctxt "tfgeometricbrush.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfgeometricbrush.caption
+msgid "Geometric brush"
+msgstr ""
+
+#: tfgeometricbrush.checkbox_isgradient.caption
+msgid "Opacity gradient"
+msgstr ""
+
+#: tfgeometricbrush.label1.caption
+msgid "Number of sides:"
+msgstr ""
+
+#: tfimagelist.caption
+msgid "Image List"
+msgstr ""
+
+#: tfimagelist.pmautouncheckonopen.caption
+msgid "Autouncheck files after being open"
+msgstr ""
+
+#: tfimagelist.pmautouncheckonsave.caption
+msgid "Autouncheck files after being edited and saved"
+msgstr ""
+
+#: tfimagelist.pmremoveall.caption
+msgid "Empty image list"
+msgstr ""
+
+#: tfimagelist.pmremovenonexisting.caption
+msgid "Remove nonexisting images"
+msgstr ""
+
+#: tfimagelist.pmremoveunchecked.caption
+msgid "Remove unchecked images"
+msgstr ""
+
+#: tfimagelist.pmunchecknonexisting.caption
+msgid "Uncheck nonexisting files"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[0].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[0].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[1].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[1].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[2].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[2].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[3].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[3].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.tbaddfiles.hint
+msgid "Add images to list"
+msgstr ""
+
+#: tfimagelist.tbautouncheck.hint
+msgid "Enable/disable autounchecking for processed files"
+msgstr ""
+
+#: tfimagelist.tbautozoomfit.hint
+msgid "Enable/disable autofitting images in the LazPaint window"
+msgstr ""
+
+#: tfimagelist.tbcheckall.hint
+msgid "Check all files for processing"
+msgstr ""
+
+#: tfimagelist.tbminiwindow.hint
+msgid "Switch to miniwindow"
+msgstr ""
+
+#: tfimagelist.tbmovedown.hint
+msgid "Move selected items down"
+msgstr ""
+
+#: tfimagelist.tbmoveup.hint
+msgid "Move selected items up"
+msgstr ""
+
+#: tfimagelist.tbnormalwindows.hint
+msgid "Switch to normal window"
+msgstr ""
+
+#: tfimagelist.tbopenimage.hint
+msgid "Open current image"
+msgstr ""
+
+#: tfimagelist.tbopennext.hint
+msgctxt "tfimagelist.tbopennext.hint"
+msgid "Open next image (Alt-Right)"
+msgstr ""
+
+#: tfimagelist.tbopennextsw.hint
+msgctxt "tfimagelist.tbopennextsw.hint"
+msgid "Open next image"
+msgstr ""
+
+#: tfimagelist.tbopenprev.hint
+msgctxt "tfimagelist.tbopenprev.hint"
+msgid "Open previous image (Alt-Left)"
+msgstr ""
+
+#: tfimagelist.tbopenprevsw.hint
+msgctxt "tfimagelist.tbopenprevsw.hint"
+msgid "Open previous image"
+msgstr ""
+
+#: tfimagelist.tbremoveitem.hint
+msgid "Remove selected images from list"
+msgstr ""
+
+#: tfimagelist.tbuncheckall.hint
+msgid "Uncheck all files for processing"
+msgstr ""
+
+#: tfloading.caption
+msgctxt "tfloading.caption"
+msgid "Loading..."
+msgstr ""
+
+#: tfmotionblur.button_cancel.caption
+msgctxt "TFMOTIONBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfmotionblur.button_ok.caption
+msgctxt "TFMOTIONBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfmotionblur.caption
+msgctxt "tfmotionblur.caption"
+msgid "Motion blur"
+msgstr "モーションブラー"
+
+#: tfmotionblur.checkbox_oriented.caption
+msgid "Oriented"
+msgstr "両方向にのばす"
+
+#: tfmotionblur.label_distance.caption
+msgctxt "tfmotionblur.label_distance.caption"
+msgid "Distance :"
+msgstr "距離:"
+
+#: tfmotionblur.label_distance.caption
+msgctxt "tfmotionblur.label_distance.caption"
+msgid "Distance :"
+msgstr "距離:"
+
+#: tfmultiimage.button_cancel.caption
+msgctxt "tfmultiimage.button_cancel.caption"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfmultiimage.button_ok.caption
+msgctxt "tfmultiimage.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfmultiimage.caption
+msgid "Choose image"
+msgstr ""
+
+#: tfnewimage.button_cancel.caption
+msgctxt "TFNEWIMAGE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfnewimage.button_ok.caption
+msgctxt "TFNEWIMAGE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfnewimage.caption
+msgctxt "tfnewimage.caption"
+msgid "New image"
+msgstr "新規画像"
+
+#: tfnewimage.combobox_bitdepth.text
+msgid "32"
+msgstr ""
+
+#: tfnewimage.label_bitdepth.caption
+msgid "Bit depth :"
+msgstr ""
+
+#: tfnewimage.label_height.caption
+msgctxt "tfnewimage.label_height.caption"
+msgid "Height :"
+msgstr "高さ:"
+
+#: tfnewimage.label_height1.caption
+msgid "Ratio :"
+msgstr ""
+
+#: tfnewimage.label_memoryrequired.caption
+msgid "Memory required :"
+msgstr ""
+
+#: tfnewimage.label_width.caption
+msgctxt "tfnewimage.label_width.caption"
+msgid "Width :"
+msgstr "幅:"
+
+#: tfnoisefilter.button_cancel.caption
+msgctxt "tfnoisefilter.button_cancel.caption"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfnoisefilter.button_ok.caption
+msgctxt "tfnoisefilter.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfnoisefilter.caption
+msgid "Noise filter"
+msgstr ""
+
+#: tfnoisefilter.label_opacity.caption
+msgid "Opacity:"
+msgstr ""
+
+#: tfnoisefilter.radio_grayscalenoise.caption
+msgid "Grayscale noise"
+msgstr ""
+
+#: tfnoisefilter.radio_rgbnoise.caption
+msgid "RGB noise"
+msgstr ""
+
+#: tfobject3d.button_cancel.caption
+msgctxt "tfobject3d.button_cancel.caption"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfobject3d.button_loadtex.caption
+msgid "Texture..."
+msgstr ""
+
+#: tfobject3d.button_notex.caption
+msgid "No tex."
+msgstr ""
+
+#: tfobject3d.button_ok.caption
+msgctxt "tfobject3d.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfobject3d.caption
+msgid "3D object"
+msgstr ""
+
+#: tfobject3d.checkbox_antialiasing.caption
+msgid "Antialiasing"
+msgstr ""
+
+#: tfobject3d.checkbox_biface.caption
+msgid "2-sided faces"
+msgstr ""
+
+#: tfobject3d.checkbox_textureinterp.caption
+msgid "Texture interpolation"
+msgstr ""
+
+#: tfobject3d.groupbox_selectedlight.caption
+msgid "Selected light"
+msgstr ""
+
+#: tfobject3d.groupbox_selectedmaterial.caption
+msgctxt "tfobject3d.groupbox_selectedmaterial.caption"
+msgid "Selected material"
+msgstr ""
+
+#: tfobject3d.label_color.caption
+msgctxt "tfobject3d.label_color.caption"
+msgid "Color :"
+msgstr ""
+
+#: tfobject3d.label_color1.caption
+msgctxt "tfobject3d.label_color1.caption"
+msgid "Color :"
+msgstr ""
+
+#: tfobject3d.label_height.caption
+msgctxt "tfobject3d.label_height.caption"
+msgid "Height :"
+msgstr "高さ:"
+
+#: tfobject3d.label_lightingnormals.caption
+msgctxt "tfobject3d.label_lightingnormals.caption"
+msgid "Lighting normals :"
+msgstr ""
+
+#: tfobject3d.label_lights.caption
+msgid "Lights :"
+msgstr ""
+
+#: tfobject3d.label_materials.caption
+msgctxt "tfobject3d.label_materials.caption"
+msgid "Materials :"
+msgstr ""
+
+#: tfobject3d.label_opacity.caption
+msgctxt "tfobject3d.label_opacity.caption"
+msgid "Opacity :"
+msgstr ""
+
+#: tfobject3d.label_specularindex.caption
+msgctxt "tfobject3d.label_specularindex.caption"
+msgid "Spec. index :"
+msgstr ""
+
+#: tfobject3d.label_width.caption
+msgctxt "tfobject3d.label_width.caption"
+msgid "Width :"
+msgstr "幅:"
+
+#: tfobject3d.label_zoom.caption
+msgctxt "tfobject3d.label_zoom.caption"
+msgid "Zoom"
+msgstr ""
+
+#: tfobject3d.lights.caption
+msgid "Lights"
+msgstr ""
+
+#: tfobject3d.materials.caption
+msgid "Materials"
+msgstr ""
+
+#: tfobject3d.opentexturedialog.title
+msgctxt "tfobject3d.opentexturedialog.title"
+msgid "Open texture"
+msgstr "テクスチャを開く"
+
+#: tfobject3d.rendering.caption
+msgid "Rendering"
+msgstr ""
+
+#: tfobject3d.tooladddirectional.hint
+msgid "Add a directional light"
+msgstr ""
+
+#: tfobject3d.toolpointlight.hint
+msgid "Add a point light"
+msgstr ""
+
+#: tfobject3d.toolremoveselectedlight.hint
+msgid "Remove selected light"
+msgstr ""
+
+#: tfphongfilter.button_cancel.caption
+msgctxt "tfphongfilter.button_cancel.caption"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfphongfilter.button_ok.caption
+msgctxt "tfphongfilter.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfphongfilter.caption
+msgctxt "tfphongfilter.caption"
+msgid "Shaded map"
+msgstr ""
+
+#: tfphongfilter.groupbox_color.caption
+msgctxt "tfphongfilter.groupbox_color.caption"
+msgid "Color"
+msgstr "色"
+
+#: tfphongfilter.groupbox_color1.caption
+msgid "Altitude map"
+msgstr ""
+
+#: tfphongfilter.label_altitude.caption
+msgid "Global altitude :"
+msgstr ""
+
+#: tfphongfilter.label_lightposition.caption
+msgid "Light position :"
+msgstr ""
+
+#: tfphongfilter.radio_mapalpha.caption
+msgid "Alpha"
+msgstr ""
+
+#: tfphongfilter.radio_mapblue.caption
+msgid "B"
+msgstr ""
+
+#: tfphongfilter.radio_mapgreen.caption
+msgid "G"
+msgstr ""
+
+#: tfphongfilter.radio_maplightness.caption
+msgctxt "tfphongfilter.radio_maplightness.caption"
+msgid "Lightness"
+msgstr "明度"
+
+#: tfphongfilter.radio_maplinearlightness.caption
+msgid "Linear lightness"
+msgstr ""
+
+#: tfphongfilter.radio_mapred.caption
+msgid "R"
+msgstr ""
+
+#: tfphongfilter.radio_mapsaturation.caption
+msgctxt "tfphongfilter.radio_mapsaturation.caption"
+msgid "Saturation"
+msgstr "濃淡"
+
+#: tfphongfilter.radio_usebackcolor.caption
+msgid "Back color"
+msgstr ""
+
+#: tfphongfilter.radio_usekeep.caption
+msgid "Keep"
+msgstr ""
+
+#: tfphongfilter.radio_usepencolor.caption
+msgid "Pen color"
+msgstr ""
+
+#: tfphongfilter.radio_usetexture.caption
+msgctxt "tfphongfilter.radio_usetexture.caption"
+msgid "Current texture"
+msgstr "現在のテクスチャ"
+
+#: tfpixelate.button_cancel.caption
+msgctxt "TFPIXELATE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfpixelate.button_ok.caption
+msgctxt "TFPIXELATE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfpixelate.caption
+msgctxt "tfpixelate.caption"
+msgid "Pixelate"
+msgstr "モザイク"
+
+#: tfpixelate.label_pixelsize.caption
+msgctxt "tfpixelate.label_pixelsize.caption"
+msgid "Pixel size :"
+msgstr "画素のサイズ:"
+
+#: tfpixelate.label_quality.caption
+msgctxt "tfpixelate.label_quality.caption"
+msgid "Quality :"
+msgstr "精度:"
+
+#: tfposterize.button_cancel.caption
+msgctxt "tfposterize.button_cancel.caption"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfposterize.button_ok.caption
+msgctxt "tfposterize.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfposterize.caption
+msgctxt "tfposterize.caption"
+msgid "Posterize"
+msgstr ""
+
+#: tfposterize.checkbox_bylightness.caption
+msgid "By lightness"
+msgstr ""
+
+#: tfposterize.label_levels.caption
+msgid "Levels :"
+msgstr ""
+
+#: tfpreviewdialog.caption
+msgid "Preview"
+msgstr ""
+
+#: tfpreviewdialog.lstatus.caption
+msgctxt "tfpreviewdialog.lstatus.caption"
+msgid "."
+msgstr ""
+
+#: tfprint.button_configureprinter.caption
+msgid "Configure..."
+msgstr ""
+
+#: tfprint.button_print.caption
+msgid "Print!"
+msgstr ""
+
+#: tfprint.button_zoomfit.caption
+msgctxt "tfprint.button_zoomfit.caption"
+msgid "Zoom fit"
+msgstr "ズームfit"
+
+#: tfprint.caption
+msgid "Print"
+msgstr ""
+
+#: tfprint.checkbox_ratio.caption
+msgctxt "tfprint.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "アスペクト比を保持する"
+
+#: tfprint.groupbox_imagesize.caption
+msgid "Image size"
+msgstr ""
+
+#: tfprint.groupbox_margins.caption
+msgid "Margins"
+msgstr ""
+
+#: tfprint.label_bottom.caption
+msgid "Bottom:"
+msgstr ""
+
+#: tfprint.label_dpix.caption
+msgctxt "tfprint.label_dpix.caption"
+msgid "."
+msgstr ""
+
+#: tfprint.label_dpiy.caption
+msgctxt "tfprint.label_dpiy.caption"
+msgid "."
+msgstr ""
+
+#: tfprint.label_height.caption
+msgid "Height:"
+msgstr ""
+
+#: tfprint.label_left.caption
+msgid "Left:"
+msgstr ""
+
+#: tfprint.label_orientation.caption
+msgid "Orientation:"
+msgstr ""
+
+#: tfprint.label_printerandpaper.caption
+msgid "Printer and paper:"
+msgstr ""
+
+#: tfprint.label_right.caption
+msgid "Right:"
+msgstr ""
+
+#: tfprint.label_top.caption
+msgid "Top:"
+msgstr ""
+
+#: tfprint.label_width.caption
+msgid "Width:"
+msgstr ""
+
+#: tfquestion.caption
+msgid "Question"
+msgstr ""
+
+#: tfquestion.checkbox_rememberchoice.caption
+msgid "Remember this choice"
+msgstr ""
+
+#: tfquestion.label_message.caption
+msgctxt "tfquestion.label_message.caption"
+msgid "."
+msgstr ""
+
+#: tfradialblur.button_cancel.caption
+msgctxt "TFRADIALBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfradialblur.button_ok.caption
+msgctxt "TFRADIALBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfradialblur.caption
+msgctxt "tfradialblur.caption"
+msgid "Radial blur"
+msgstr "Radialブラー"
+
+#: tfradialblur.label_radius.caption
+msgctxt "tfradialblur.label_radius.caption"
+msgid "Radius :"
+msgstr "半径:"
+
+#: tfrain.button_cancel.caption
+msgctxt "tfrain.button_cancel.caption"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfrain.button_ok.caption
+msgctxt "tfrain.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfrain.caption
+msgid "Rain"
+msgstr ""
+
+#: tfrain.label_quantity.caption
+msgid "Quantity:"
+msgstr ""
+
+#: tfrain.label_wind.caption
+msgid "Wind :"
+msgstr ""
+
+#: tfresample.button_cancel.caption
+msgctxt "TFRESAMPLE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfresample.button_ok.caption
+msgctxt "TFRESAMPLE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfresample.caption
+msgctxt "tfresample.caption"
+msgid "Resample"
+msgstr "再サンプル"
+
+#: tfresample.checkbox_ratio.caption
+msgctxt "tfresample.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "アスペクト比を保持する"
+
+#: tfresample.label_height.caption
+msgctxt "tfresample.label_height.caption"
+msgid "Height :"
+msgstr "高さ:"
+
+#: tfresample.label_quality.caption
+msgctxt "tfresample.label_quality.caption"
+msgid "Quality :"
+msgstr "精度:"
+
+#: tfresample.label_width.caption
+msgctxt "tfresample.label_width.caption"
+msgid "Width :"
+msgstr "幅:"
+
+#: tfsaveoption.button_cancel.caption
+msgctxt "tfsaveoption.button_cancel.caption"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfsaveoption.button_ok.caption
+msgctxt "tfsaveoption.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfsaveoption.caption
+msgctxt "tfsaveoption.caption"
+msgid "Save"
+msgstr "保存"
+
+#: tfsaveoption.checkbox_dithering.caption
+msgid "Dithering"
+msgstr ""
+
+#: tfsaveoption.label1.caption
+msgid "Quality:"
+msgstr ""
+
+#: tfsaveoption.label_0.caption
+msgid "0"
+msgstr ""
+
+#: tfsaveoption.label_1.caption
+msgid "100"
+msgstr ""
+
+#: tfsaveoption.label_50.caption
+msgid "50"
+msgstr ""
+
+#: tfsaveoption.label_colordepth.caption
+msgid "Color depth:"
+msgstr ""
+
+#: tfsaveoption.label_size.caption
+msgid "Size:"
+msgstr ""
+
+#: tfsaveoption.radiobutton_16colors.caption
+msgid "16 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_24bitsperpixel.caption
+msgid "24 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_256colors.caption
+msgid "256 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_2colors.caption
+msgid "2 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_32bitsperpixel.caption
+msgid "32 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_miomap.caption
+msgid "MioMap"
+msgstr ""
+
+#: tfsharpen.button_cancel.caption
+msgctxt "tfsharpen.button_cancel.caption"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfsharpen.button_ok.caption
+msgctxt "tfsharpen.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfsharpen.caption
+msgid "Sharpen/Smooth"
+msgstr ""
+
+#: tfsharpen.label_amount.caption
+msgctxt "tfsharpen.label_amount.caption"
+msgid "Amount :"
+msgstr ""
+
+#: tfshiftcolors.button_cancel.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: tfshiftcolors.button_ok.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfshiftcolors.caption
+msgctxt "tfshiftcolors.caption"
+msgid "Shift colors"
+msgstr "色合いをずらす"
+
+#: tfshiftcolors.checkbox_gsba.caption
+msgctxt "tfshiftcolors.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr ""
+
+#: tfshiftcolors.label1.caption
+msgctxt "TFSHIFTCOLORS.LABEL1.CAPTION"
+msgid "Hue"
+msgstr "色相"
+
+#: tfshiftcolors.label2.caption
+msgctxt "TFSHIFTCOLORS.LABEL2.CAPTION"
+msgid "Saturation"
+msgstr "濃淡"
+
+#: tftoolbox.caption
+msgctxt "tftoolbox.caption"
+msgid "Tools"
+msgstr "ツール"
+

+ 1208 - 12
lazpaint/release/bin/i18n/lazpaint.lv.po

@@ -1556,9 +1556,9 @@ msgstr "visi"
 msgid "All supported filetypes"
 msgstr "Visi atbalstītie failu formāti"
 
-#: uresourcestrings.rsaltshiftscalemode
-msgid "Hold ALT or SHIFT to scale"
-msgstr "Turi [ALT] vai [SHIFT] lai mērogotu"
+#: uresourcestrings.rsholdkeysscalemode
+msgid "Hold %1 or %2 to scale"
+msgstr "Turi %1 vai %2 lai mērogotu"
 
 #: uresourcestrings.rsanimatedgif
 msgid "Animated GIF"
@@ -1673,9 +1673,9 @@ msgstr ""
 msgid "Crop"
 msgstr "Apcirpt"
 
-#: uresourcestrings.rsctrlrestrictrotation
-msgid "Hold CTRL to restrict rotation angle"
-msgstr "Turi [CTRL] lai izmantotu noteiktus leņķus"
+#: uresourcestrings.rsholdkeyrestrictrotation
+msgid "Hold %1 to restrict rotation angle"
+msgstr "Turi %1 lai izmantotu noteiktus leņķus"
 
 #: uresourcestrings.rscurvemodehint
 msgid "Press S or X to set the curve mode of the last point"
@@ -1838,13 +1838,13 @@ msgstr "Zaļš"
 msgid "Half-cosine"
 msgstr ""
 
-#: uresourcestrings.rsholdctrlsnaptopixel
-msgid "Hold CTRL to snap to pixels"
-msgstr "Turi [CTRL], lai pieliptu pikseļiem"
+#: uresourcestrings.rsholdkeysnaptopixel
+msgid "Hold %1 to snap to pixels"
+msgstr "Turi %1, lai pieliptu pikseļiem"
 
-#: uresourcestrings.rsholdshiftforsquare
-msgid "Hold SHIFT to draw a square or a circle"
-msgstr "Turi [SHIFT} lai zīmētu kvadrātu vai apli"
+#: uresourcestrings.rsholdkeyforsquare
+msgid "Hold %1 to draw a square or a circle"
+msgstr "Turi %1 lai zīmētu kvadrātu vai apli"
 
 #: uresourcestrings.rshotspot
 msgctxt "uresourcestrings.rshotspot"
@@ -2307,3 +2307,1199 @@ msgstr ""
 msgid "Yes"
 msgstr "Jā"
 
+#: tablet.getprocfailed
+msgid "Procedure %s failed to load properly."
+msgstr ""
+
+#: tablet.openfailed
+msgid "Tablet context failed to open."
+msgstr ""
+
+#: tfabout.button_donate.caption
+msgctxt "TFABOUT.BUTTON_DONATE.CAPTION"
+msgid "Donate..."
+msgstr "Ziedot ..."
+
+#: tfabout.caption
+msgctxt "TFABOUT.CAPTION"
+msgid "About"
+msgstr "Par LazPaint"
+
+#: tfabout.labelurl.caption
+msgid "http://sourceforge.net/projects/lazpaint/"
+msgstr "http://sourceforge.net/projects/lazpaint/"
+
+#: tfabout.label_authors.caption
+msgctxt "TFABOUT.LABEL_AUTHORS.CAPTION"
+msgid "Authors:"
+msgstr "Autori:"
+
+#: tfabout.label_authorsvalue.caption
+msgctxt "TFABOUT.LABEL_AUTHORSVALUE.CAPTION"
+msgid "Circular helped by FabienWang, Lainz and others"
+msgstr "Circular, kuram palīdzēja FabienWang, Lainz un citi"
+
+#: tfabout.label_homepage.caption
+msgctxt "TFABOUT.LABEL_HOMEPAGE.CAPTION"
+msgid "Homepage:"
+msgstr "Mājas lapa:"
+
+#: tfabout.label_libraries.caption
+msgctxt "TFABOUT.LABEL_LIBRARIES.CAPTION"
+msgid "Libraries used:"
+msgstr "Izmantotās bibliotēkas:"
+
+#: tfabout.label_licence.caption
+msgctxt "TFABOUT.LABEL_LICENCE.CAPTION"
+msgid "Licence:"
+msgstr "Licence"
+
+#: tfabout.label_opensource.caption
+msgctxt "TFABOUT.LABEL_OPENSOURCE.CAPTION"
+msgid "Open source (GPLv3)"
+msgstr "Atklātā pirmkoda programmatūra (GPLv3)"
+
+#: tfadjustcurves.button_cancel.caption
+msgctxt "TFADJUSTCURVES.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfadjustcurves.button_ok.caption
+msgctxt "TFADJUSTCURVES.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfadjustcurves.caption
+msgid "Adjust curves"
+msgstr "Mainīt līknes"
+
+#: tfadjustcurves.toolbutton_newcurve.hint
+msgid "Discard current curve and start a new one"
+msgstr "Dzēst patreizējo un sākt jaunu līkni"
+
+#: tfadjustcurves.toolbutton_posterize.hint
+msgctxt "tfadjustcurves.toolbutton_posterize.hint"
+msgid "Posterize"
+msgstr "Plakāta efekts"
+
+#: tfadjustcurves.toolbutton_removepoint.hint
+msgid "Remove selected point (Del)"
+msgstr "Dzēst izvēlēto punktu (Del)"
+
+#: tfblendop.button_cancel.caption
+msgctxt "TFBLENDOP.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfblendop.button_ok.caption
+msgctxt "TFBLENDOP.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfblendop.caption
+msgid "Blend operation"
+msgstr "Sapludināšana"
+
+#: tfblendop.label_blendopcategory.caption
+msgctxt "TFBLENDOP.LABEL_BLENDOPCATEGORY.CAPTION"
+msgid "Category of blend operation"
+msgstr "Sapludināšanas veids"
+
+#: tfblendop.label_blendopvalue.caption
+msgctxt "tfblendop.label_blendopvalue.caption"
+msgid "."
+msgstr "."
+
+#: tfblendop.label_kritaover.caption
+msgctxt "TFBLENDOP.LABEL_KRITAOVER.CAPTION"
+msgid "Krita"
+msgstr "Krita"
+
+#: tfblendop.label_kritaover.hint
+msgid "Blend operations that are available in Krita"
+msgstr "Sapludināšana kāda iespējama programmā Krita"
+
+#: tfblendop.label_otherover.caption
+msgctxt "TFBLENDOP.LABEL_OTHEROVER.CAPTION"
+msgid "Other"
+msgstr "Cits"
+
+#: tfblendop.label_otherover.hint
+msgid "Blend operations of LazPaint and Paint.NET"
+msgstr "LazPant un Paint.NET sapludināšanas darbības"
+
+#: tfblendop.label_patternover.caption
+msgctxt "TFBLENDOP.LABEL_PATTERNOVER.CAPTION"
+msgid "Pattern over"
+msgstr "Raksts pa virsu"
+
+#: tfblendop.label_patternover.hint
+msgid "Preview blend operation with the specified image on top"
+msgstr "Sapludināsanas priekšapskate ar izvēlēto attēlu augšpusē"
+
+#: tfblendop.label_patternunder.caption
+msgctxt "TFBLENDOP.LABEL_PATTERNUNDER.CAPTION"
+msgid "Pattern under"
+msgstr "Raksts apakšā"
+
+#: tfblendop.label_patternunder.hint
+msgid "Preview blend operation with the specified image underneath"
+msgstr "Sapludināsanas priekšapskate ar izvēlēto attēlu apakšpusē"
+
+#: tfblendop.label_previewwith.caption
+msgctxt "TFBLENDOP.LABEL_PREVIEWWITH.CAPTION"
+msgid "Preview with"
+msgstr "Priekšskatīt ar"
+
+#: tfblendop.label_selectedblendop.caption
+msgid "Selected blend operation :"
+msgstr "Izvēlētā sapludināšana"
+
+#: tfblendop.label_svgover.caption
+msgctxt "TFBLENDOP.LABEL_SVGOVER.CAPTION"
+msgid "Basic SVG"
+msgstr "PamatSVG"
+
+#: tfblendop.label_svgover.hint
+msgid "Basic blend operations that are available in virtually all image editors"
+msgstr "Sapludunāšana veidi, kuri pieejami gandrīz visos attēlu redaktoros"
+
+#: tfbrowseimages.caption
+msgid "Browse images"
+msgstr "Caurskatīt attēlus"
+
+#: tfbrowseimages.checkbox_usedirectoryonstartup.caption
+msgid "Use this directory on startup"
+msgstr ""
+
+#: tfbrowseimages.label_status.caption
+msgctxt "tfbrowseimages.label_status.caption"
+msgid "."
+msgstr "."
+
+#: tfbrowseimages.toolbutton_createfolderorcontainer.hint
+msgid "Create folder or container"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_goup.hint
+msgid "Go one directory up"
+msgstr "Vienu direktoriju augšup"
+
+#: tfbrowseimages.toolbutton_openselectedfiles.hint
+msgid "Open selected files"
+msgstr "Atvērt izvēlētos failus"
+
+#: tfbrowseimages.toolbutton_viewbigicon.hint
+msgctxt "TFBROWSEIMAGES.TOOLBUTTON_VIEWBIGICON.HINT"
+msgid "Show big icons"
+msgstr "Rādīt lielas ikonas"
+
+#: tfbrowseimages.toolbutton_viewdetails.hint
+msgctxt "TFBROWSEIMAGES.TOOLBUTTON_VIEWDETAILS.HINT"
+msgid "Show details and preview"
+msgstr "Ziņas un priekšapskate"
+
+#: tfbrowseimages.tool_selectdrive.hint
+msgid "Select drive"
+msgstr "Izvēlies disku"
+
+#: tfcanvassize.button_cancel.caption
+msgctxt "TFCANVASSIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfcanvassize.button_ok.caption
+msgctxt "TFCANVASSIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfcanvassize.caption
+msgctxt "TFCANVASSIZE.CAPTION"
+msgid "Canvas size"
+msgstr "Audekla izmērs"
+
+#: tfcanvassize.checkbox_flipmode.caption
+msgid "Flip mode"
+msgstr "Spoguļot"
+
+#: tfcanvassize.label_anchor.caption
+msgctxt "TFCANVASSIZE.LABEL_ANCHOR.CAPTION"
+msgid "Anchor :"
+msgstr "Slāņa novietojums:"
+
+#: tfcanvassize.label_height.caption
+msgctxt "TFCANVASSIZE.LABEL_HEIGHT.CAPTION"
+msgid "Height :"
+msgstr "Augstums:"
+
+#: tfcanvassize.label_width.caption
+msgctxt "TFCANVASSIZE.LABEL_WIDTH.CAPTION"
+msgid "Width :"
+msgstr "Platums:"
+
+#: tfcolorintensity.button_cancel.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfcolorintensity.button_ok.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfcolorintensity.caption
+msgctxt "TFCOLORINTENSITY.CAPTION"
+msgid "Intensity"
+msgstr "Spilgtums"
+
+#: tfcolorintensity.label_multiply.caption
+msgctxt "TFCOLORINTENSITY.LABEL_MULTIPLY.CAPTION"
+msgid "Multiply"
+msgstr "Reizinātājs"
+
+#: tfcolorintensity.label_shift.caption
+msgctxt "TFCOLORINTENSITY.LABEL_SHIFT.CAPTION"
+msgid "Shift"
+msgstr "Novirze"
+
+#: tfcolorize.button_cancel.caption
+msgctxt "TFCOLORIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfcolorize.button_ok.caption
+msgctxt "TFCOLORIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfcolorize.caption
+msgctxt "TFCOLORIZE.CAPTION"
+msgid "Colorize"
+msgstr "Iekrāsot"
+
+#: tfcolorize.checkbox_gsba.caption
+msgctxt "TFCOLORIZE.CHECKBOX_GSBA.CAPTION"
+msgid "Corrected hue and lightness"
+msgstr "Izlabot nokrāsu un gaišumu"
+
+#: tfcolorize.label_colorness.caption
+msgctxt "TFCOLORIZE.LABEL_COLORNESS.CAPTION"
+msgid "Colorness"
+msgstr "Piesātinājums"
+
+#: tfcolorize.label_hue.caption
+msgctxt "TFCOLORIZE.LABEL_HUE.CAPTION"
+msgid "Hue"
+msgstr "Nokrāsa"
+
+#: tfcolorize.label_preset.caption
+msgid "Preset"
+msgstr "Iestatījumi"
+
+#: tfcustomblur.button_cancel.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfcustomblur.button_editmask.caption
+msgid "Edit mask..."
+msgstr "Labot masku ..."
+
+#: tfcustomblur.button_loadmask.caption
+msgid "Load mask..."
+msgstr "Ielasīt masku ..."
+
+#: tfcustomblur.button_ok.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfcustomblur.caption
+msgctxt "TFCUSTOMBLUR.CAPTION"
+msgid "Custom blur"
+msgstr "Pielāgota aizmiglošana"
+
+#: tfcustomblur.openpicturedialog1.title
+msgid "Open grayscale file"
+msgstr "Atvērt pelēktoņu attēlu"
+
+#: tfemboss.button_cancel.caption
+msgctxt "TFEMBOSS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfemboss.button_ok.caption
+msgctxt "TFEMBOSS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfemboss.caption
+msgctxt "TFEMBOSS.CAPTION"
+msgid "Emboss"
+msgstr "Gofrēt"
+
+#: tfemboss.checkbox_preservecolors.caption
+msgid "Preserve colors"
+msgstr ""
+
+#: tfemboss.checkbox_transparent.caption
+msgid "Transparent"
+msgstr ""
+
+#: tfemboss.label_direction.caption
+msgctxt "TFEMBOSS.LABEL_DIRECTION.CAPTION"
+msgid "Direction :"
+msgstr "Virziens:"
+
+#: tffilterfunction.button_cancel.caption
+msgctxt "TFFILTERFUNCTION.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tffilterfunction.button_ok.caption
+msgctxt "TFFILTERFUNCTION.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tffilterfunction.caption
+msgid "Apply function"
+msgstr "Pielietot funkciju"
+
+#: tffilterfunction.checkbox_gsba.caption
+msgctxt "TFFILTERFUNCTION.CHECKBOX_GSBA.CAPTION"
+msgid "Corrected hue and lightness"
+msgstr "Izlabota nokrāsa un gaišums"
+
+#: tffilterfunction.label_alphaequals.caption
+msgctxt "tffilterfunction.label_alphaequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_blueequals.caption
+msgctxt "tffilterfunction.label_blueequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_greenequals.caption
+msgctxt "tffilterfunction.label_greenequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_hueequals.caption
+msgctxt "tffilterfunction.label_hueequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_lightnessequals.caption
+msgctxt "tffilterfunction.label_lightnessequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_redequals.caption
+msgctxt "tffilterfunction.label_redequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_saturationequals.caption
+msgctxt "tffilterfunction.label_saturationequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_variables.caption
+msgid "Variables :"
+msgstr "Mainīgie:"
+
+#: tffilterfunction.tabsheet_hsl.caption
+msgid "HSL"
+msgstr "HSL"
+
+#: tffilterfunction.tabsheet_rgb.caption
+msgctxt "tffilterfunction.tabsheet_rgb.caption"
+msgid "RGB"
+msgstr "RGB"
+
+#: tfgeometricbrush.button_cancel.caption
+msgctxt "tfgeometricbrush.button_cancel.caption"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfgeometricbrush.button_ok.caption
+msgctxt "tfgeometricbrush.button_ok.caption"
+msgid "OK"
+msgstr "Labi"
+
+#: tfgeometricbrush.caption
+msgid "Geometric brush"
+msgstr "Simetriska ota"
+
+#: tfgeometricbrush.checkbox_isgradient.caption
+msgid "Opacity gradient"
+msgstr "Izgaišana uz malām"
+
+#: tfgeometricbrush.label1.caption
+msgid "Number of sides:"
+msgstr "Malu skaits"
+
+#: tfimagelist.caption
+msgid "Image List"
+msgstr "Attēlu saraksts"
+
+#: tfimagelist.pmautouncheckonopen.caption
+msgid "Autouncheck files after being open"
+msgstr "Noņemt ķeksi, kad attēls atvērts"
+
+#: tfimagelist.pmautouncheckonsave.caption
+msgid "Autouncheck files after being edited and saved"
+msgstr "Noņemt ķeksi, kad attēls labots un saglabāts"
+
+#: tfimagelist.pmremoveall.caption
+msgid "Empty image list"
+msgstr "Tukšs attēlu saraksts"
+
+#: tfimagelist.pmremovenonexisting.caption
+msgid "Remove nonexisting images"
+msgstr "Izņemt neesošus attēlus"
+
+#: tfimagelist.pmremoveunchecked.caption
+msgid "Remove unchecked images"
+msgstr "Izņemt neatzīmētus attēlus"
+
+#: tfimagelist.pmunchecknonexisting.caption
+msgid "Uncheck nonexisting files"
+msgstr "Izņemt atzīmējumu neesošiem failiem"
+
+#: tfimagelist.stringgrid1.columns[0].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[0].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[1].title.caption
+msgctxt "TFIMAGELIST.STRINGGRID1.COLUMNS[1].TITLE.CAPTION"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[2].title.caption
+msgctxt "TFIMAGELIST.STRINGGRID1.COLUMNS[2].TITLE.CAPTION"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[3].title.caption
+msgctxt "TFIMAGELIST.STRINGGRID1.COLUMNS[3].TITLE.CAPTION"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.tbaddfiles.hint
+msgid "Add images to list"
+msgstr "Pievienot attēlu sarakstam"
+
+#: tfimagelist.tbautouncheck.hint
+msgid "Enable/disable autounchecking for processed files"
+msgstr "Iespējot ķekšu noņemšanu no apstrādātiem attēliem"
+
+#: tfimagelist.tbautozoomfit.hint
+msgid "Enable/disable autofitting images in the LazPaint window"
+msgstr "Iespējot attēlu pielāgošanu „LazPaint” logam"
+
+#: tfimagelist.tbcheckall.hint
+msgid "Check all files for processing"
+msgstr "Atzīmēt visus failus apstrādei"
+
+#: tfimagelist.tbminiwindow.hint
+msgid "Switch to miniwindow"
+msgstr "Pārslēgties uz mazo lodziņu"
+
+#: tfimagelist.tbmovedown.hint
+msgid "Move selected items down"
+msgstr "Pavirzīt atzīmētos attēlus uz leju"
+
+#: tfimagelist.tbmoveup.hint
+msgid "Move selected items up"
+msgstr "Pavirzīt atzīmētos attēlus uz augšu"
+
+#: tfimagelist.tbnormalwindows.hint
+msgid "Switch to normal window"
+msgstr "Pārslēgties uz parasto logu"
+
+#: tfimagelist.tbopenimage.hint
+msgid "Open current image"
+msgstr "Atvērt doto attēlu"
+
+#: tfimagelist.tbopennext.hint
+msgctxt "tfimagelist.tbopennext.hint"
+msgid "Open next image (Alt-Right)"
+msgstr "Atvērt sarakstā esošo nākamo attēlu (Alt-Pa_labi)"
+
+#: tfimagelist.tbopennextsw.hint
+msgctxt "TFIMAGELIST.TBOPENNEXTSW.HINT"
+msgid "Open next image"
+msgstr "Atvērt nākamo attēlu"
+
+#: tfimagelist.tbopenprev.hint
+msgctxt "tfimagelist.tbopenprev.hint"
+msgid "Open previous image (Alt-Left)"
+msgstr "Atvērt sarakstā esošo iepriekšējo attēlu (Alt-Pa_kreisi)"
+
+#: tfimagelist.tbopenprevsw.hint
+msgctxt "TFIMAGELIST.TBOPENPREVSW.HINT"
+msgid "Open previous image"
+msgstr "Atvērt iepriekšējo attēlu"
+
+#: tfimagelist.tbremoveitem.hint
+msgid "Remove selected images from list"
+msgstr "Izņemt atzīmētos attēlus no saraksta"
+
+#: tfimagelist.tbuncheckall.hint
+msgid "Uncheck all files for processing"
+msgstr "Noņemt visus ķekšus"
+
+#: tfloading.caption
+msgctxt "tfloading.caption"
+msgid "Loading..."
+msgstr "Ielasu ..."
+
+#: tfmotionblur.button_cancel.caption
+msgctxt "TFMOTIONBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfmotionblur.button_ok.caption
+msgctxt "TFMOTIONBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfmotionblur.caption
+msgctxt "TFMOTIONBLUR.CAPTION"
+msgid "Motion blur"
+msgstr "Kustības izplūdums"
+
+#: tfmotionblur.checkbox_oriented.caption
+msgid "Oriented"
+msgstr "Virzīts"
+
+#: tfmotionblur.label_distance.caption
+msgctxt "TFMOTIONBLUR.LABEL_DISTANCE.CAPTION"
+msgid "Distance :"
+msgstr "Attālums:"
+
+#: tfmultiimage.button_cancel.caption
+msgctxt "TFMULTIIMAGE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfmultiimage.button_ok.caption
+msgctxt "TFMULTIIMAGE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfmultiimage.caption
+msgid "Choose image"
+msgstr "Izvēlies attēlu"
+
+#: tfnewimage.button_cancel.caption
+msgctxt "TFNEWIMAGE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfnewimage.button_ok.caption
+msgctxt "TFNEWIMAGE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfnewimage.caption
+msgctxt "TFNEWIMAGE.CAPTION"
+msgid "New image"
+msgstr "Jauns attēls"
+
+#: tfnewimage.combobox_bitdepth.text
+msgid "32"
+msgstr ""
+
+#: tfnewimage.label_bitdepth.caption
+msgid "Bit depth :"
+msgstr ""
+
+#: tfnewimage.label_height.caption
+msgctxt "TFNEWIMAGE.LABEL_HEIGHT.CAPTION"
+msgid "Height :"
+msgstr "Augstums:"
+
+#: tfnewimage.label_height1.caption
+msgid "Ratio :"
+msgstr ""
+
+#: tfnewimage.label_memoryrequired.caption
+msgid "Memory required :"
+msgstr ""
+
+#: tfnewimage.label_width.caption
+msgctxt "TFNEWIMAGE.LABEL_WIDTH.CAPTION"
+msgid "Width :"
+msgstr "Platums:"
+
+#: tfnoisefilter.button_cancel.caption
+msgctxt "TFNOISEFILTER.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfnoisefilter.button_ok.caption
+msgctxt "TFNOISEFILTER.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfnoisefilter.caption
+msgid "Noise filter"
+msgstr "Trokšņu filtrs"
+
+#: tfnoisefilter.label_opacity.caption
+msgid "Opacity:"
+msgstr "Redzamība"
+
+#: tfnoisefilter.radio_grayscalenoise.caption
+msgid "Grayscale noise"
+msgstr "Pelēko toņu troksnis"
+
+#: tfnoisefilter.radio_rgbnoise.caption
+msgid "RGB noise"
+msgstr "RGB troksnis"
+
+#: tfobject3d.button_cancel.caption
+msgctxt "TFOBJECT3D.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfobject3d.button_loadtex.caption
+msgid "Texture..."
+msgstr "Virsmas raksts ..."
+
+#: tfobject3d.button_notex.caption
+msgid "No tex."
+msgstr ""
+
+#: tfobject3d.button_ok.caption
+msgctxt "TFOBJECT3D.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfobject3d.caption
+msgid "3D object"
+msgstr "3D veidojums"
+
+#: tfobject3d.checkbox_antialiasing.caption
+msgid "Antialiasing"
+msgstr "Kropļojumnovērse"
+
+#: tfobject3d.checkbox_biface.caption
+msgid "2-sided faces"
+msgstr "Divpusējas virsmas"
+
+#: tfobject3d.checkbox_textureinterp.caption
+msgid "Texture interpolation"
+msgstr "Iestarpinājumi virsmas rakstā"
+
+#: tfobject3d.groupbox_selectedlight.caption
+msgid "Selected light"
+msgstr "Izvēlētā gaisma"
+
+#: tfobject3d.groupbox_selectedmaterial.caption
+msgctxt "TFOBJECT3D.GROUPBOX_SELECTEDMATERIAL.CAPTION"
+msgid "Selected material"
+msgstr "Izvēlētais materiāls"
+
+#: tfobject3d.label_color.caption
+msgctxt "TFOBJECT3D.LABEL_COLOR.CAPTION"
+msgid "Color :"
+msgstr "Krāsa:"
+
+#: tfobject3d.label_color1.caption
+msgctxt "tfobject3d.label_color1.caption"
+msgid "Color :"
+msgstr "Krāsa:"
+
+#: tfobject3d.label_height.caption
+msgctxt "TFOBJECT3D.LABEL_HEIGHT.CAPTION"
+msgid "Height :"
+msgstr "Augstums:"
+
+#: tfobject3d.label_lightingnormals.caption
+msgctxt "TFOBJECT3D.LABEL_LIGHTINGNORMALS.CAPTION"
+msgid "Lighting normals :"
+msgstr "Apgaismojuma normāles:"
+
+#: tfobject3d.label_lights.caption
+msgid "Lights :"
+msgstr "Gaismas:"
+
+#: tfobject3d.label_materials.caption
+msgctxt "TFOBJECT3D.LABEL_MATERIALS.CAPTION"
+msgid "Materials :"
+msgstr "Materiāli:"
+
+#: tfobject3d.label_opacity.caption
+msgctxt "TFOBJECT3D.LABEL_OPACITY.CAPTION"
+msgid "Opacity :"
+msgstr "Redzamība:"
+
+#: tfobject3d.label_specularindex.caption
+msgctxt "TFOBJECT3D.LABEL_SPECULARINDEX.CAPTION"
+msgid "Spec. index :"
+msgstr ""
+
+#: tfobject3d.label_width.caption
+msgctxt "TFOBJECT3D.LABEL_WIDTH.CAPTION"
+msgid "Width :"
+msgstr "Platums:"
+
+#: tfobject3d.label_zoom.caption
+msgctxt "TFOBJECT3D.LABEL_ZOOM.CAPTION"
+msgid "Zoom"
+msgstr "Tuvinājums"
+
+#: tfobject3d.lights.caption
+msgid "Lights"
+msgstr "Gaismas"
+
+#: tfobject3d.materials.caption
+msgid "Materials"
+msgstr "Materiāli"
+
+#: tfobject3d.opentexturedialog.title
+msgctxt "TFOBJECT3D.OPENTEXTUREDIALOG.TITLE"
+msgid "Open texture"
+msgstr "Atvērt virsmas rakstu"
+
+#: tfobject3d.rendering.caption
+msgid "Rendering"
+msgstr "Atveidošana"
+
+#: tfobject3d.tooladddirectional.hint
+msgid "Add a directional light"
+msgstr "Pievinot virzītu gaismu"
+
+#: tfobject3d.toolpointlight.hint
+msgid "Add a point light"
+msgstr "Pievienot punktveida gaismas avotu"
+
+#: tfobject3d.toolremoveselectedlight.hint
+msgid "Remove selected light"
+msgstr "Izmest doto gaismu"
+
+#: tfphongfilter.button_cancel.caption
+msgctxt "TFPHONGFILTER.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfphongfilter.button_ok.caption
+msgctxt "TFPHONGFILTER.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfphongfilter.caption
+msgctxt "TFPHONGFILTER.CAPTION"
+msgid "Shaded map"
+msgstr "Ēnota virsma"
+
+#: tfphongfilter.groupbox_color.caption
+msgctxt "TFPHONGFILTER.GROUPBOX_COLOR.CAPTION"
+msgid "Color"
+msgstr "Krāsa"
+
+#: tfphongfilter.groupbox_color1.caption
+msgid "Altitude map"
+msgstr "Virsmas pacēlums"
+
+#: tfphongfilter.label_altitude.caption
+msgid "Global altitude :"
+msgstr "Kopējais pacēlums"
+
+#: tfphongfilter.label_lightposition.caption
+msgid "Light position :"
+msgstr "Gaismas avots"
+
+#: tfphongfilter.radio_mapalpha.caption
+msgid "Alpha"
+msgstr "Caurspīdīgums"
+
+#: tfphongfilter.radio_mapblue.caption
+msgid "B"
+msgstr "B"
+
+#: tfphongfilter.radio_mapgreen.caption
+msgid "G"
+msgstr "G"
+
+#: tfphongfilter.radio_maplightness.caption
+msgctxt "TFPHONGFILTER.RADIO_MAPLIGHTNESS.CAPTION"
+msgid "Lightness"
+msgstr "Gaišums"
+
+#: tfphongfilter.radio_maplinearlightness.caption
+msgid "Linear lightness"
+msgstr "Tiešs gaišums"
+
+#: tfphongfilter.radio_mapred.caption
+msgid "R"
+msgstr "R"
+
+#: tfphongfilter.radio_mapsaturation.caption
+msgctxt "TFPHONGFILTER.RADIO_MAPSATURATION.CAPTION"
+msgid "Saturation"
+msgstr "Piesātinājums"
+
+#: tfphongfilter.radio_usebackcolor.caption
+msgid "Back color"
+msgstr "Pamatnes krāsa"
+
+#: tfphongfilter.radio_usekeep.caption
+msgid "Keep"
+msgstr "Saglabāt"
+
+#: tfphongfilter.radio_usepencolor.caption
+msgid "Pen color"
+msgstr "Otas krāsa"
+
+#: tfphongfilter.radio_usetexture.caption
+msgctxt "TFPHONGFILTER.RADIO_USETEXTURE.CAPTION"
+msgid "Current texture"
+msgstr "Virsmas raksts"
+
+#: tfpixelate.button_cancel.caption
+msgctxt "TFPIXELATE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfpixelate.button_ok.caption
+msgctxt "TFPIXELATE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfpixelate.caption
+msgctxt "TFPIXELATE.CAPTION"
+msgid "Pixelate"
+msgstr ""
+
+#: tfpixelate.label_pixelsize.caption
+msgctxt "TFPIXELATE.LABEL_PIXELSIZE.CAPTION"
+msgid "Pixel size :"
+msgstr ""
+
+#: tfpixelate.label_quality.caption
+msgctxt "TFPIXELATE.LABEL_QUALITY.CAPTION"
+msgid "Quality :"
+msgstr ""
+
+#: tfposterize.button_cancel.caption
+msgctxt "TFPOSTERIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfposterize.button_ok.caption
+msgctxt "TFPOSTERIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfposterize.caption
+msgctxt "TFPOSTERIZE.CAPTION"
+msgid "Posterize"
+msgstr "Samazināts krāsu daudzums"
+
+#: tfposterize.checkbox_bylightness.caption
+msgid "By lightness"
+msgstr "Pēc gaišuma"
+
+#: tfposterize.label_levels.caption
+msgid "Levels :"
+msgstr "Līmeņi:"
+
+#: tfpreviewdialog.caption
+msgid "Preview"
+msgstr ""
+
+#: tfpreviewdialog.lstatus.caption
+msgctxt "tfpreviewdialog.lstatus.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.button_configureprinter.caption
+msgid "Configure..."
+msgstr "Iestatījumi ..."
+
+#: tfprint.button_print.caption
+msgid "Print!"
+msgstr "Drukāt!"
+
+#: tfprint.button_zoomfit.caption
+msgctxt "TFPRINT.BUTTON_ZOOMFIT.CAPTION"
+msgid "Zoom fit"
+msgstr "Pielāgot lapai"
+
+#: tfprint.caption
+msgid "Print"
+msgstr "Drukāt"
+
+#: tfprint.checkbox_ratio.caption
+msgctxt "TFPRINT.CHECKBOX_RATIO.CAPTION"
+msgid "Keep aspect ratio"
+msgstr "Saglabāt attiecību"
+
+#: tfprint.groupbox_imagesize.caption
+msgid "Image size"
+msgstr "Attēla izmērs"
+
+#: tfprint.groupbox_margins.caption
+msgid "Margins"
+msgstr "Malas"
+
+#: tfprint.label_bottom.caption
+msgid "Bottom:"
+msgstr "Apakšā:"
+
+#: tfprint.label_dpix.caption
+msgctxt "TFPRINT.LABEL_DPIX.CAPTION"
+msgid "."
+msgstr "."
+
+#: tfprint.label_dpiy.caption
+msgctxt "TFPRINT.LABEL_DPIY.CAPTION"
+msgid "."
+msgstr "."
+
+#: tfprint.label_height.caption
+msgid "Height:"
+msgstr "Augstums"
+
+#: tfprint.label_left.caption
+msgid "Left:"
+msgstr "Kreisā pusē:"
+
+#: tfprint.label_orientation.caption
+msgid "Orientation:"
+msgstr "Orientācija"
+
+#: tfprint.label_printerandpaper.caption
+msgid "Printer and paper:"
+msgstr "Drukas iekārta un papīrs"
+
+#: tfprint.label_right.caption
+msgid "Right:"
+msgstr "Labā pusē:"
+
+#: tfprint.label_top.caption
+msgid "Top:"
+msgstr "Augšā:"
+
+#: tfprint.label_width.caption
+msgid "Width:"
+msgstr "Platums"
+
+#: tfquestion.caption
+msgid "Question"
+msgstr ""
+
+#: tfquestion.checkbox_rememberchoice.caption
+msgid "Remember this choice"
+msgstr ""
+
+#: tfquestion.label_message.caption
+msgctxt "tfquestion.label_message.caption"
+msgid "."
+msgstr "."
+
+#: tfradialblur.button_cancel.caption
+msgctxt "TFRADIALBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfradialblur.button_ok.caption
+msgctxt "TFRADIALBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfradialblur.caption
+msgctxt "TFRADIALBLUR.CAPTION"
+msgid "Radial blur"
+msgstr "Izpludināšana"
+
+#: tfradialblur.label_radius.caption
+msgctxt "TFRADIALBLUR.LABEL_RADIUS.CAPTION"
+msgid "Radius :"
+msgstr "Rādiuss:"
+
+#: tfrain.button_cancel.caption
+msgctxt "tfrain.button_cancel.caption"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfrain.button_ok.caption
+msgctxt "tfrain.button_ok.caption"
+msgid "OK"
+msgstr "Labi"
+
+#: tfrain.caption
+msgid "Rain"
+msgstr "Lietus"
+
+#: tfrain.label_quantity.caption
+msgid "Quantity:"
+msgstr "Stiprums"
+
+#: tfrain.label_wind.caption
+msgid "Wind :"
+msgstr "Vējš"
+
+#: tfresample.button_cancel.caption
+msgctxt "TFRESAMPLE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfresample.button_ok.caption
+msgctxt "TFRESAMPLE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfresample.caption
+msgctxt "TFRESAMPLE.CAPTION"
+msgid "Resample"
+msgstr "Izmēra maiņa"
+
+#: tfresample.checkbox_ratio.caption
+msgctxt "tfresample.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "Saglabāt attiecību"
+
+#: tfresample.label_height.caption
+msgctxt "TFRESAMPLE.LABEL_HEIGHT.CAPTION"
+msgid "Height :"
+msgstr "Augstums:"
+
+#: tfresample.label_quality.caption
+msgctxt "TFRESAMPLE.LABEL_QUALITY.CAPTION"
+msgid "Quality :"
+msgstr ""
+
+#: tfresample.label_width.caption
+msgctxt "TFRESAMPLE.LABEL_WIDTH.CAPTION"
+msgid "Width :"
+msgstr "Platums:"
+
+#: tfsaveoption.button_cancel.caption
+msgctxt "tfsaveoption.button_cancel.caption"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfsaveoption.button_ok.caption
+msgctxt "tfsaveoption.button_ok.caption"
+msgid "OK"
+msgstr "Labi"
+
+#: tfsaveoption.caption
+msgctxt "tfsaveoption.caption"
+msgid "Save"
+msgstr "Saglabāt"
+
+#: tfsaveoption.checkbox_dithering.caption
+msgid "Dithering"
+msgstr "Neīstā tonēšana"
+
+#: tfsaveoption.label1.caption
+msgid "Quality:"
+msgstr ""
+
+#: tfsaveoption.label_0.caption
+msgid "0"
+msgstr "0"
+
+#: tfsaveoption.label_1.caption
+msgid "100"
+msgstr "100"
+
+#: tfsaveoption.label_50.caption
+msgid "50"
+msgstr "50"
+
+#: tfsaveoption.label_colordepth.caption
+msgid "Color depth:"
+msgstr "Krasu dziļums:"
+
+#: tfsaveoption.label_size.caption
+msgid "Size:"
+msgstr "Izmērs:"
+
+#: tfsaveoption.radiobutton_16colors.caption
+msgid "16 colors"
+msgstr "16 krāsas"
+
+#: tfsaveoption.radiobutton_24bitsperpixel.caption
+msgid "24 bits"
+msgstr "24 bitu"
+
+#: tfsaveoption.radiobutton_256colors.caption
+msgid "256 colors"
+msgstr "256 krāsas"
+
+#: tfsaveoption.radiobutton_2colors.caption
+msgid "2 colors"
+msgstr "2 krāsas"
+
+#: tfsaveoption.radiobutton_32bitsperpixel.caption
+msgid "32 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_miomap.caption
+msgid "MioMap"
+msgstr ""
+
+#: tfsharpen.button_cancel.caption
+msgctxt "TFSHARPEN.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfsharpen.button_ok.caption
+msgctxt "TFSHARPEN.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfsharpen.caption
+msgid "Sharpen/Smooth"
+msgstr "Asināt/Nogludināt"
+
+#: tfsharpen.label_amount.caption
+msgctxt "TFSHARPEN.LABEL_AMOUNT.CAPTION"
+msgid "Amount :"
+msgstr ""
+
+#: tfshiftcolors.button_cancel.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Atsaukt"
+
+#: tfshiftcolors.button_ok.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "Labi"
+
+#: tfshiftcolors.caption
+msgctxt "TFSHIFTCOLORS.CAPTION"
+msgid "Shift colors"
+msgstr "Nobīdīt krāsas"
+
+#: tfshiftcolors.checkbox_gsba.caption
+msgctxt "tfshiftcolors.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "Pielāgot nokrāsas un gaišumu"
+
+#: tfshiftcolors.label1.caption
+msgctxt "TFSHIFTCOLORS.LABEL1.CAPTION"
+msgid "Hue"
+msgstr "Nokrāsa"
+
+#: tfshiftcolors.label2.caption
+msgctxt "TFSHIFTCOLORS.LABEL2.CAPTION"
+msgid "Saturation"
+msgstr "Piesātinājums"
+
+#: tftoolbox.caption
+msgctxt "TFTOOLBOX.CAPTION"
+msgid "Tools"
+msgstr "Rīki"
+
+

+ 1210 - 12
lazpaint/release/bin/i18n/lazpaint.nl.po

@@ -1588,9 +1588,9 @@ msgstr "alles"
 msgid "All supported filetypes"
 msgstr "Alle ondersteunde bestandstypes"
 
-#: uresourcestrings.rsaltshiftscalemode
-msgid "Hold ALT or SHIFT to scale"
-msgstr "Houd ALT of SHIFT vast om te schalen"
+#: uresourcestrings.rsholdkeysscalemode
+msgid "Hold %1 or %2 to scale"
+msgstr "Houd %1 of %2 vast om te schalen"
 
 #: uresourcestrings.rsanimatedgif
 msgid "Animated GIF"
@@ -1705,9 +1705,9 @@ msgstr "Cosinus"
 msgid "Crop"
 msgstr "Bijsnijden"
 
-#: uresourcestrings.rsctrlrestrictrotation
-msgid "Hold CTRL to restrict rotation angle"
-msgstr "Houd CTRL ingedrukt om rotatiehoek te beperken"
+#: uresourcestrings.rsholdkeyrestrictrotation
+msgid "Hold %1 to restrict rotation angle"
+msgstr "Houd %2 ingedrukt om rotatiehoek te beperken"
 
 #: uresourcestrings.rscurvemodehint
 msgid "Press S or X to set the curve mode of the last point"
@@ -1870,13 +1870,13 @@ msgstr "Groen"
 msgid "Half-cosine"
 msgstr "Half-cosinus"
 
-#: uresourcestrings.rsholdctrlsnaptopixel
-msgid "Hold CTRL to snap to pixels"
-msgstr "Houd CTRL ingedrukt om op pixels vast te kleven"
+#: uresourcestrings.rsholdkeysnaptopixel
+msgid "Hold %1 to snap to pixels"
+msgstr "Houd %1 ingedrukt om op pixels vast te kleven"
 
-#: uresourcestrings.rsholdshiftforsquare
-msgid "Hold SHIFT to draw a square or a circle"
-msgstr "Houd SHIFT ingedrukt om een vierkant of cirkel te tekenen"
+#: uresourcestrings.rsholdkeyforsquare
+msgid "Hold %1 to draw a square or a circle"
+msgstr "Houd %1 ingedrukt om een vierkant of cirkel te tekenen"
 
 #: uresourcestrings.rshotspot
 msgctxt "uresourcestrings.rshotspot"
@@ -2338,3 +2338,1201 @@ msgstr "Vector laag"
 #: uresourcestrings.rsyes
 msgid "Yes"
 msgstr "Ja"
+
+#: tablet.getprocfailed
+msgid "Procedure %s failed to load properly."
+msgstr ""
+
+#: tablet.openfailed
+msgid "Tablet context failed to open."
+msgstr ""
+
+#: tfabout.button_donate.caption
+msgctxt "tfabout.button_donate.caption"
+msgid "Donate..."
+msgstr "Doneren..."
+
+#: tfabout.caption
+msgctxt "tfabout.caption"
+msgid "About"
+msgstr "Over"
+
+#: tfabout.labelurl.caption
+msgid "http://sourceforge.net/projects/lazpaint/"
+msgstr "http://sourceforge.net/projects/lazpaint/"
+
+#: tfabout.label_authors.caption
+msgctxt "tfabout.label_authors.caption"
+msgid "Authors:"
+msgstr "Auteurs:"
+
+#: tfabout.label_authorsvalue.caption
+#| msgid "Circular help by FabienWang and Lainz"
+msgctxt "tfabout.label_authorsvalue.caption"
+msgid "Circular helped by FabienWang, Lainz and others"
+msgstr "Circular geholpen door FabienWang, Lainz en anderen"
+
+#: tfabout.label_homepage.caption
+msgctxt "tfabout.label_homepage.caption"
+msgid "Homepage:"
+msgstr "Homepage:"
+
+#: tfabout.label_libraries.caption
+msgctxt "tfabout.label_libraries.caption"
+msgid "Libraries used:"
+msgstr "Gebruikte libraries:"
+
+#: tfabout.label_licence.caption
+msgctxt "tfabout.label_licence.caption"
+msgid "Licence:"
+msgstr "Licentie:"
+
+#: tfabout.label_opensource.caption
+msgctxt "tfabout.label_opensource.caption"
+msgid "Open source (GPLv3)"
+msgstr "Open source (GPLv3)"
+
+#: tfadjustcurves.button_cancel.caption
+msgctxt "tfadjustcurves.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfadjustcurves.button_ok.caption
+msgctxt "tfadjustcurves.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfadjustcurves.caption
+msgid "Adjust curves"
+msgstr "Krommen aanpassen"
+
+#: tfadjustcurves.toolbutton_newcurve.hint
+msgid "Discard current curve and start a new one"
+msgstr "Huidige kromme weggooien en een nieuwe beginnen"
+
+#: tfadjustcurves.toolbutton_posterize.hint
+msgctxt "tfadjustcurves.toolbutton_posterize.hint"
+msgid "Posterize"
+msgstr "Posterize"
+
+#: tfadjustcurves.toolbutton_removepoint.hint
+msgid "Remove selected point (Del)"
+msgstr "Verwijder geselecteerd punt (Del)"
+
+#: tfblendop.button_cancel.caption
+msgctxt "tfblendop.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfblendop.button_ok.caption
+msgctxt "tfblendop.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfblendop.caption
+msgid "Blend operation"
+msgstr "Mengoperatie"
+
+#: tfblendop.label_blendopcategory.caption
+msgctxt "tfblendop.label_blendopcategory.caption"
+msgid "Category of blend operation"
+msgstr "Categorie van mengoperatie"
+
+#: tfblendop.label_blendopvalue.caption
+msgctxt "tfblendop.label_blendopvalue.caption"
+msgid "."
+msgstr "."
+
+#: tfblendop.label_kritaover.caption
+msgctxt "tfblendop.label_kritaover.caption"
+msgid "Krita"
+msgstr "Krita"
+
+#: tfblendop.label_kritaover.hint
+msgid "Blend operations that are available in Krita"
+msgstr "Mengoperaties die beschikbaar zijn in Krita"
+
+#: tfblendop.label_otherover.caption
+msgctxt "tfblendop.label_otherover.caption"
+msgid "Other"
+msgstr "Overig"
+
+#: tfblendop.label_otherover.hint
+msgid "Blend operations of LazPaint and Paint.NET"
+msgstr "Mengoperaties van LazPaint en Paint.NET"
+
+#: tfblendop.label_patternover.caption
+msgctxt "tfblendop.label_patternover.caption"
+msgid "Pattern over"
+msgstr "Patroon over"
+
+#: tfblendop.label_patternover.hint
+msgid "Preview blend operation with the specified image on top"
+msgstr "Voorvertoning van mengoperatie met gekozen afbeelding boven"
+
+#: tfblendop.label_patternunder.caption
+msgctxt "tfblendop.label_patternunder.caption"
+msgid "Pattern under"
+msgstr "Patroon onder"
+
+#: tfblendop.label_patternunder.hint
+msgid "Preview blend operation with the specified image underneath"
+msgstr "Voorvertoning van mengoperatie met gekozen afbeelding onder"
+
+#: tfblendop.label_previewwith.caption
+msgctxt "tfblendop.label_previewwith.caption"
+msgid "Preview with"
+msgstr "Voorvertoning met"
+
+#: tfblendop.label_selectedblendop.caption
+msgid "Selected blend operation :"
+msgstr "Gekozen mengoperatie :"
+
+#: tfblendop.label_svgover.caption
+msgctxt "tfblendop.label_svgover.caption"
+msgid "Basic SVG"
+msgstr "Basale SVG"
+
+#: tfblendop.label_svgover.hint
+msgid "Basic blend operations that are available in virtually all image editors"
+msgstr "Basale mengoperaties die beschikbaar zijn in bijna alle beeldbewerkingssoftware"
+
+#: tfbrowseimages.caption
+msgid "Browse images"
+msgstr "Blader door beelden"
+
+#: tfbrowseimages.checkbox_usedirectoryonstartup.caption
+msgid "Use this directory on startup"
+msgstr ""
+
+#: tfbrowseimages.label_status.caption
+msgctxt "tfbrowseimages.label_status.caption"
+msgid "."
+msgstr "."
+
+#: tfbrowseimages.toolbutton_createfolderorcontainer.hint
+msgid "Create folder or container"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_goup.hint
+msgid "Go one directory up"
+msgstr "Een directory omhoog gaan"
+
+#: tfbrowseimages.toolbutton_openselectedfiles.hint
+msgid "Open selected files"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_viewbigicon.hint
+msgctxt "tfbrowseimages.toolbutton_viewbigicon.hint"
+msgid "Show big icons"
+msgstr "Toon grote iconen"
+
+#: tfbrowseimages.toolbutton_viewdetails.hint
+msgctxt "tfbrowseimages.toolbutton_viewdetails.hint"
+msgid "Show details and preview"
+msgstr "Toon details en voorvertoning"
+
+#: tfbrowseimages.tool_selectdrive.hint
+msgid "Select drive"
+msgstr ""
+
+#: tfcanvassize.button_cancel.caption
+msgctxt "TFCANVASSIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfcanvassize.button_ok.caption
+msgctxt "TFCANVASSIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcanvassize.caption
+msgctxt "tfcanvassize.caption"
+msgid "Canvas size"
+msgstr "Canvasgrootte"
+
+#: tfcanvassize.checkbox_flipmode.caption
+msgid "Flip mode"
+msgstr "Spiegelmodus"
+
+#: tfcanvassize.label_anchor.caption
+msgctxt "tfcanvassize.label_anchor.caption"
+msgid "Anchor :"
+msgstr "Anker :"
+
+#: tfcanvassize.label_height.caption
+msgctxt "tfcanvassize.label_height.caption"
+msgid "Height :"
+msgstr "Hoogte :"
+
+#: tfcanvassize.label_width.caption
+msgctxt "tfcanvassize.label_width.caption"
+msgid "Width :"
+msgstr "Breedte :"
+
+#: tfcolorintensity.button_cancel.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfcolorintensity.button_ok.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcolorintensity.caption
+msgctxt "tfcolorintensity.caption"
+msgid "Intensity"
+msgstr "Intensiteit"
+
+#: tfcolorintensity.label_multiply.caption
+msgctxt "tfcolorintensity.label_multiply.caption"
+msgid "Multiply"
+msgstr "Vermenigvuldigen"
+
+#: tfcolorintensity.label_shift.caption
+msgctxt "tfcolorintensity.label_shift.caption"
+msgid "Shift"
+msgstr "Verschuiven"
+
+#: tfcolorize.button_cancel.caption
+msgctxt "TFCOLORIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfcolorize.button_ok.caption
+msgctxt "TFCOLORIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcolorize.caption
+msgctxt "tfcolorize.caption"
+msgid "Colorize"
+msgstr "Inkleuren"
+
+#: tfcolorize.checkbox_gsba.caption
+msgctxt "tfcolorize.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "Gecorrigeerde tint en helderheid"
+
+#: tfcolorize.label_colorness.caption
+msgctxt "tfcolorize.label_colorness.caption"
+msgid "Colorness"
+msgstr "Kleuring"
+
+#: tfcolorize.label_hue.caption
+msgctxt "tfcolorize.label_hue.caption"
+msgid "Hue"
+msgstr "Kleurtint"
+
+#: tfcolorize.label_preset.caption
+msgid "Preset"
+msgstr "Voorinstelling"
+
+#: tfcustomblur.button_cancel.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfcustomblur.button_editmask.caption
+msgid "Edit mask..."
+msgstr "Bewerkingsmasker..."
+
+#: tfcustomblur.button_loadmask.caption
+msgid "Load mask..."
+msgstr "Laad masker..."
+
+#: tfcustomblur.button_ok.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcustomblur.caption
+msgctxt "tfcustomblur.caption"
+msgid "Custom blur"
+msgstr "Aangepaste vervaging"
+
+#: tfcustomblur.openpicturedialog1.title
+msgid "Open grayscale file"
+msgstr "Open grijstinten-bestand"
+
+#: tfemboss.button_cancel.caption
+msgctxt "TFEMBOSS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfemboss.button_ok.caption
+msgctxt "TFEMBOSS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfemboss.caption
+msgctxt "tfemboss.caption"
+msgid "Emboss"
+msgstr "Reliëf"
+
+#: tfemboss.checkbox_preservecolors.caption
+msgid "Preserve colors"
+msgstr ""
+
+#: tfemboss.checkbox_transparent.caption
+msgid "Transparent"
+msgstr ""
+
+#: tfemboss.label_direction.caption
+msgctxt "tfemboss.label_direction.caption"
+msgid "Direction :"
+msgstr "Richting :"
+
+#: tffilterfunction.button_cancel.caption
+msgctxt "tffilterfunction.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tffilterfunction.button_ok.caption
+msgctxt "tffilterfunction.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tffilterfunction.caption
+msgid "Apply function"
+msgstr "Functie toepassen"
+
+#: tffilterfunction.checkbox_gsba.caption
+msgctxt "tffilterfunction.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "Gecorrigeerde tint en helderheid"
+
+#: tffilterfunction.label_alphaequals.caption
+msgctxt "tffilterfunction.label_alphaequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_blueequals.caption
+msgctxt "tffilterfunction.label_blueequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_greenequals.caption
+msgctxt "tffilterfunction.label_greenequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_hueequals.caption
+msgctxt "tffilterfunction.label_hueequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_lightnessequals.caption
+msgctxt "tffilterfunction.label_lightnessequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_redequals.caption
+msgctxt "tffilterfunction.label_redequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_saturationequals.caption
+msgctxt "tffilterfunction.label_saturationequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_variables.caption
+msgid "Variables :"
+msgstr "Variabelen :"
+
+#: tffilterfunction.tabsheet_hsl.caption
+msgid "HSL"
+msgstr "HSL"
+
+#: tffilterfunction.tabsheet_rgb.caption
+msgctxt "tffilterfunction.tabsheet_rgb.caption"
+msgid "RGB"
+msgstr "RGB"
+
+#: tfgeometricbrush.button_cancel.caption
+msgctxt "tfgeometricbrush.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfgeometricbrush.button_ok.caption
+msgctxt "tfgeometricbrush.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfgeometricbrush.caption
+msgid "Geometric brush"
+msgstr ""
+
+#: tfgeometricbrush.checkbox_isgradient.caption
+msgid "Opacity gradient"
+msgstr ""
+
+#: tfgeometricbrush.label1.caption
+msgid "Number of sides:"
+msgstr ""
+
+#: tfimagelist.caption
+msgid "Image List"
+msgstr "Afbeeldingslijst"
+
+#: tfimagelist.pmautouncheckonopen.caption
+msgid "Autouncheck files after being open"
+msgstr "Automatisch bestanden uitvinken na openen"
+
+#: tfimagelist.pmautouncheckonsave.caption
+msgid "Autouncheck files after being edited and saved"
+msgstr "Automatisch bestanden uitvinken na bewerking en opslag"
+
+#: tfimagelist.pmremoveall.caption
+msgid "Empty image list"
+msgstr "Schoon beeldlijst op"
+
+#: tfimagelist.pmremovenonexisting.caption
+msgid "Remove nonexisting images"
+msgstr "Verwijder niet-bestaande beelden"
+
+#: tfimagelist.pmremoveunchecked.caption
+msgid "Remove unchecked images"
+msgstr "Verwijder uitgevinkte beelden"
+
+#: tfimagelist.pmunchecknonexisting.caption
+msgid "Uncheck nonexisting files"
+msgstr "Vink niet-bestaande bestanden uit"
+
+#: tfimagelist.stringgrid1.columns[0].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[0].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[1].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[1].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[2].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[2].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.stringgrid1.columns[3].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[3].title.caption"
+msgid "-"
+msgstr "-"
+
+#: tfimagelist.tbaddfiles.hint
+msgid "Add images to list"
+msgstr "Voeg beelden to aan lijst"
+
+#: tfimagelist.tbautouncheck.hint
+msgid "Enable/disable autounchecking for processed files"
+msgstr "Auto-uitvinken aan/uitzetten voor verwerkte bestanden"
+
+#: tfimagelist.tbautozoomfit.hint
+msgid "Enable/disable autofitting images in the LazPaint window"
+msgstr "Afbeelding autofit in LazPaint venster aan/uitzetten"
+
+#: tfimagelist.tbcheckall.hint
+msgid "Check all files for processing"
+msgstr "Controleer alle bestanden voor verwerking"
+
+#: tfimagelist.tbminiwindow.hint
+msgid "Switch to miniwindow"
+msgstr "Schakel naar minivenster"
+
+#: tfimagelist.tbmovedown.hint
+msgid "Move selected items down"
+msgstr "Verplaats geselecteerde items omlaag"
+
+#: tfimagelist.tbmoveup.hint
+msgid "Move selected items up"
+msgstr "Verplaats geselecteerde items omhoog"
+
+#: tfimagelist.tbnormalwindows.hint
+msgid "Switch to normal window"
+msgstr "Schakel naar normaal venster"
+
+#: tfimagelist.tbopenimage.hint
+msgid "Open current image"
+msgstr "Open huidige afbeelding"
+
+#: tfimagelist.tbopennext.hint
+msgctxt "tfimagelist.tbopennext.hint"
+msgid "Open next image (Alt-Right)"
+msgstr "Open volgende afbeelding (Alt-Rechts)"
+
+#: tfimagelist.tbopennextsw.hint
+msgctxt "tfimagelist.tbopennextsw.hint"
+msgid "Open next image"
+msgstr "Open volgende afbeelding"
+
+#: tfimagelist.tbopenprev.hint
+msgctxt "tfimagelist.tbopenprev.hint"
+msgid "Open previous image (Alt-Left)"
+msgstr "Open vorige afbeelding (Alt-Links)"
+
+#: tfimagelist.tbopenprevsw.hint
+msgctxt "tfimagelist.tbopenprevsw.hint"
+msgid "Open previous image"
+msgstr "Open vorige afbeelding"
+
+#: tfimagelist.tbremoveitem.hint
+msgid "Remove selected images from list"
+msgstr "Verwijder geselecteerde afbeeldingen uit lijst"
+
+#: tfimagelist.tbuncheckall.hint
+msgid "Uncheck all files for processing"
+msgstr "Vink alle bestanden uit voor verwerking"
+
+#: tfloading.caption
+msgctxt "tfloading.caption"
+msgid "Loading..."
+msgstr "Bezig met laden..."
+
+#: tfmotionblur.button_cancel.caption
+msgctxt "TFMOTIONBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfmotionblur.button_ok.caption
+msgctxt "TFMOTIONBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfmotionblur.caption
+msgctxt "tfmotionblur.caption"
+msgid "Motion blur"
+msgstr "Bewegingsvervaging"
+
+#: tfmotionblur.checkbox_oriented.caption
+msgid "Oriented"
+msgstr "Oriëntatie"
+
+#: tfmotionblur.label_distance.caption
+msgctxt "tfmotionblur.label_distance.caption"
+msgid "Distance :"
+msgstr "Afstand :"
+
+#: tfmultiimage.button_cancel.caption
+msgctxt "tfmultiimage.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfmultiimage.button_ok.caption
+msgctxt "tfmultiimage.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfmultiimage.caption
+msgid "Choose image"
+msgstr "Afbeelding kiezen"
+
+#: tfnewimage.button_cancel.caption
+msgctxt "TFNEWIMAGE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfnewimage.button_ok.caption
+msgctxt "TFNEWIMAGE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfnewimage.caption
+msgctxt "tfnewimage.caption"
+msgid "New image"
+msgstr "Nieuwe afbeelding"
+
+#: tfnewimage.combobox_bitdepth.text
+msgid "32"
+msgstr ""
+
+#: tfnewimage.label_bitdepth.caption
+msgid "Bit depth :"
+msgstr ""
+
+#: tfnewimage.label_height.caption
+msgctxt "tfnewimage.label_height.caption"
+msgid "Height :"
+msgstr "Hoogte :"
+
+#: tfnewimage.label_height1.caption
+msgid "Ratio :"
+msgstr ""
+
+#: tfnewimage.label_memoryrequired.caption
+msgid "Memory required :"
+msgstr ""
+
+#: tfnewimage.label_width.caption
+msgctxt "tfnewimage.label_width.caption"
+msgid "Width :"
+msgstr "Breedte :"
+
+#: tfnoisefilter.button_cancel.caption
+msgctxt "tfnoisefilter.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfnoisefilter.button_ok.caption
+msgctxt "tfnoisefilter.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfnoisefilter.caption
+msgid "Noise filter"
+msgstr "Ruisfilter"
+
+#: tfnoisefilter.label_opacity.caption
+msgid "Opacity:"
+msgstr "Dekking:"
+
+#: tfnoisefilter.radio_grayscalenoise.caption
+msgid "Grayscale noise"
+msgstr "Grijstint ruis"
+
+#: tfnoisefilter.radio_rgbnoise.caption
+msgid "RGB noise"
+msgstr "RGB ruis"
+
+#: tfobject3d.button_cancel.caption
+msgctxt "tfobject3d.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfobject3d.button_loadtex.caption
+msgid "Texture..."
+msgstr "Tekstuur..."
+
+#: tfobject3d.button_notex.caption
+msgid "No tex."
+msgstr "Geen tex."
+
+#: tfobject3d.button_ok.caption
+msgctxt "tfobject3d.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfobject3d.caption
+msgid "3D object"
+msgstr "3d object"
+
+#: tfobject3d.checkbox_antialiasing.caption
+msgid "Antialiasing"
+msgstr "Antialiasing"
+
+#: tfobject3d.checkbox_biface.caption
+msgid "2-sided faces"
+msgstr "2-zijdige vlakken"
+
+#: tfobject3d.checkbox_textureinterp.caption
+msgid "Texture interpolation"
+msgstr "Texture interpolatie"
+
+#: tfobject3d.groupbox_selectedlight.caption
+msgid "Selected light"
+msgstr ""
+
+#: tfobject3d.groupbox_selectedmaterial.caption
+msgctxt "tfobject3d.groupbox_selectedmaterial.caption"
+msgid "Selected material"
+msgstr "Geselecteerd materiaal"
+
+#: tfobject3d.label_color.caption
+msgctxt "tfobject3d.label_color.caption"
+msgid "Color :"
+msgstr "Kleur :"
+
+#: tfobject3d.label_color1.caption
+msgctxt "tfobject3d.label_color1.caption"
+msgid "Color :"
+msgstr "Kleur :"
+
+#: tfobject3d.label_height.caption
+msgctxt "tfobject3d.label_height.caption"
+msgid "Height :"
+msgstr "Hoogte :"
+
+#: tfobject3d.label_lightingnormals.caption
+msgctxt "tfobject3d.label_lightingnormals.caption"
+msgid "Lighting normals :"
+msgstr "Belichting normalen :"
+
+#: tfobject3d.label_lights.caption
+msgid "Lights :"
+msgstr ""
+
+#: tfobject3d.label_materials.caption
+msgctxt "tfobject3d.label_materials.caption"
+msgid "Materials :"
+msgstr "Materialen :"
+
+#: tfobject3d.label_opacity.caption
+msgctxt "tfobject3d.label_opacity.caption"
+msgid "Opacity :"
+msgstr "Dekking :"
+
+#: tfobject3d.label_specularindex.caption
+msgctxt "tfobject3d.label_specularindex.caption"
+msgid "Spec. index :"
+msgstr "Spec. index :"
+
+#: tfobject3d.label_width.caption
+msgctxt "tfobject3d.label_width.caption"
+msgid "Width :"
+msgstr "Breedte :"
+
+#: tfobject3d.label_zoom.caption
+msgctxt "tfobject3d.label_zoom.caption"
+msgid "Zoom"
+msgstr "Zoomen"
+
+#: tfobject3d.lights.caption
+msgid "Lights"
+msgstr ""
+
+#: tfobject3d.materials.caption
+msgid "Materials"
+msgstr "Materialen"
+
+#: tfobject3d.opentexturedialog.title
+msgctxt "tfobject3d.opentexturedialog.title"
+msgid "Open texture"
+msgstr "Textuur openen"
+
+#: tfobject3d.rendering.caption
+msgid "Rendering"
+msgstr "Renderen"
+
+#: tfobject3d.tooladddirectional.hint
+msgid "Add a directional light"
+msgstr ""
+
+#: tfobject3d.toolpointlight.hint
+msgid "Add a point light"
+msgstr ""
+
+#: tfobject3d.toolremoveselectedlight.hint
+msgid "Remove selected light"
+msgstr ""
+
+#: tfphongfilter.button_cancel.caption
+msgctxt "tfphongfilter.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfphongfilter.button_ok.caption
+msgctxt "tfphongfilter.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfphongfilter.caption
+msgctxt "tfphongfilter.caption"
+msgid "Shaded map"
+msgstr "Shaded map"
+
+#: tfphongfilter.groupbox_color.caption
+msgctxt "tfphongfilter.groupbox_color.caption"
+msgid "Color"
+msgstr "Kleur"
+
+#: tfphongfilter.groupbox_color1.caption
+msgid "Altitude map"
+msgstr "Hoogte map"
+
+#: tfphongfilter.label_altitude.caption
+msgid "Global altitude :"
+msgstr "Algemene hoogte :"
+
+#: tfphongfilter.label_lightposition.caption
+msgid "Light position :"
+msgstr "Lichtpositie :"
+
+#: tfphongfilter.radio_mapalpha.caption
+msgid "Alpha"
+msgstr "Alpha"
+
+#: tfphongfilter.radio_mapblue.caption
+msgid "B"
+msgstr "B"
+
+#: tfphongfilter.radio_mapgreen.caption
+msgid "G"
+msgstr "G"
+
+#: tfphongfilter.radio_maplightness.caption
+msgctxt "tfphongfilter.radio_maplightness.caption"
+msgid "Lightness"
+msgstr "Lichtheid"
+
+#: tfphongfilter.radio_maplinearlightness.caption
+msgid "Linear lightness"
+msgstr "Lineaire lichtheid"
+
+#: tfphongfilter.radio_mapred.caption
+msgid "R"
+msgstr "R"
+
+#: tfphongfilter.radio_mapsaturation.caption
+msgctxt "tfphongfilter.radio_mapsaturation.caption"
+msgid "Saturation"
+msgstr "Verzadiging"
+
+#: tfphongfilter.radio_usebackcolor.caption
+msgid "Back color"
+msgstr "Achtergrondkleur"
+
+#: tfphongfilter.radio_usekeep.caption
+msgid "Keep"
+msgstr "Behouden"
+
+#: tfphongfilter.radio_usepencolor.caption
+msgid "Pen color"
+msgstr "Penkleur"
+
+#: tfphongfilter.radio_usetexture.caption
+msgctxt "tfphongfilter.radio_usetexture.caption"
+msgid "Current texture"
+msgstr "Huidige textuur"
+
+#: tfpixelate.button_cancel.caption
+msgctxt "TFPIXELATE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfpixelate.button_ok.caption
+msgctxt "TFPIXELATE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfpixelate.caption
+msgctxt "tfpixelate.caption"
+msgid "Pixelate"
+msgstr "In pixels tonen"
+
+#: tfpixelate.label_pixelsize.caption
+msgctxt "tfpixelate.label_pixelsize.caption"
+msgid "Pixel size :"
+msgstr "Pixelgrootte :"
+
+#: tfpixelate.label_quality.caption
+msgctxt "tfpixelate.label_quality.caption"
+msgid "Quality :"
+msgstr "Kwaliteit :"
+
+#: tfposterize.button_cancel.caption
+msgctxt "tfposterize.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfposterize.button_ok.caption
+msgctxt "tfposterize.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfposterize.caption
+msgctxt "tfposterize.caption"
+msgid "Posterize"
+msgstr "Posterize"
+
+#: tfposterize.checkbox_bylightness.caption
+msgid "By lightness"
+msgstr "Middels lichtheid"
+
+#: tfposterize.label_levels.caption
+msgid "Levels :"
+msgstr "Niveaus :"
+
+#: tfpreviewdialog.caption
+msgid "Preview"
+msgstr ""
+
+#: tfpreviewdialog.lstatus.caption
+msgctxt "tfpreviewdialog.lstatus.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.button_configureprinter.caption
+msgid "Configure..."
+msgstr "Instellen..."
+
+#: tfprint.button_print.caption
+msgid "Print!"
+msgstr "Druk af!"
+
+#: tfprint.button_zoomfit.caption
+msgctxt "tfprint.button_zoomfit.caption"
+msgid "Zoom fit"
+msgstr "Passend maken"
+
+#: tfprint.caption
+msgid "Print"
+msgstr "Druk af"
+
+#: tfprint.checkbox_ratio.caption
+msgctxt "tfprint.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "Aspectverhouding behouden"
+
+#: tfprint.groupbox_imagesize.caption
+msgid "Image size"
+msgstr "Afbeeldingsgrootte"
+
+#: tfprint.groupbox_margins.caption
+msgid "Margins"
+msgstr "Marges"
+
+#: tfprint.label_bottom.caption
+msgid "Bottom:"
+msgstr "Onderkant:"
+
+#: tfprint.label_dpix.caption
+msgctxt "tfprint.label_dpix.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.label_dpiy.caption
+msgctxt "tfprint.label_dpiy.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.label_height.caption
+msgid "Height:"
+msgstr "Hoogte:"
+
+#: tfprint.label_left.caption
+msgid "Left:"
+msgstr "Links:"
+
+#: tfprint.label_orientation.caption
+msgid "Orientation:"
+msgstr "Oriëntatie:"
+
+#: tfprint.label_printerandpaper.caption
+msgid "Printer and paper:"
+msgstr "Printer en papier:"
+
+#: tfprint.label_right.caption
+msgid "Right:"
+msgstr "Rechts:"
+
+#: tfprint.label_top.caption
+msgid "Top:"
+msgstr "Bovenkant:"
+
+#: tfprint.label_width.caption
+msgid "Width:"
+msgstr "Breedte:"
+
+#: tfquestion.caption
+msgid "Question"
+msgstr ""
+
+#: tfquestion.checkbox_rememberchoice.caption
+msgid "Remember this choice"
+msgstr ""
+
+#: tfquestion.label_message.caption
+msgctxt "tfquestion.label_message.caption"
+msgid "."
+msgstr "."
+
+#: tfradialblur.button_cancel.caption
+msgctxt "TFRADIALBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfradialblur.button_ok.caption
+msgctxt "TFRADIALBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfradialblur.caption
+msgctxt "tfradialblur.caption"
+msgid "Radial blur"
+msgstr "Radiale vervaging"
+
+#: tfradialblur.label_radius.caption
+msgctxt "tfradialblur.label_radius.caption"
+msgid "Radius :"
+msgstr "Radius :"
+
+#: tfrain.button_cancel.caption
+msgctxt "tfrain.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfrain.button_ok.caption
+msgctxt "tfrain.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfrain.caption
+msgid "Rain"
+msgstr ""
+
+#: tfrain.label_quantity.caption
+msgid "Quantity:"
+msgstr ""
+
+#: tfrain.label_wind.caption
+msgid "Wind :"
+msgstr ""
+
+#: tfresample.button_cancel.caption
+msgctxt "TFRESAMPLE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfresample.button_ok.caption
+msgctxt "TFRESAMPLE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfresample.caption
+msgctxt "tfresample.caption"
+msgid "Resample"
+msgstr "Opnieuw samplen"
+
+#: tfresample.checkbox_ratio.caption
+msgctxt "tfresample.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "Aspectverhouding behouden"
+
+#: tfresample.label_height.caption
+msgctxt "tfresample.label_height.caption"
+msgid "Height :"
+msgstr "Hoogte :"
+
+#: tfresample.label_quality.caption
+msgctxt "tfresample.label_quality.caption"
+msgid "Quality :"
+msgstr "Kwaliteit :"
+
+#: tfresample.label_width.caption
+msgctxt "tfresample.label_width.caption"
+msgid "Width :"
+msgstr "Breedte :"
+
+#: tfsaveoption.button_cancel.caption
+msgctxt "tfsaveoption.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfsaveoption.button_ok.caption
+msgctxt "tfsaveoption.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfsaveoption.caption
+msgctxt "tfsaveoption.caption"
+msgid "Save"
+msgstr "Opslaan"
+
+#: tfsaveoption.checkbox_dithering.caption
+msgid "Dithering"
+msgstr ""
+
+#: tfsaveoption.label1.caption
+msgid "Quality:"
+msgstr ""
+
+#: tfsaveoption.label_0.caption
+msgid "0"
+msgstr ""
+
+#: tfsaveoption.label_1.caption
+msgid "100"
+msgstr ""
+
+#: tfsaveoption.label_50.caption
+msgid "50"
+msgstr ""
+
+#: tfsaveoption.label_colordepth.caption
+msgid "Color depth:"
+msgstr ""
+
+#: tfsaveoption.label_size.caption
+msgid "Size:"
+msgstr ""
+
+#: tfsaveoption.radiobutton_16colors.caption
+msgid "16 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_24bitsperpixel.caption
+msgid "24 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_256colors.caption
+msgid "256 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_2colors.caption
+msgid "2 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_32bitsperpixel.caption
+msgid "32 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_miomap.caption
+msgid "MioMap"
+msgstr ""
+
+#: tfsharpen.button_cancel.caption
+msgctxt "tfsharpen.button_cancel.caption"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfsharpen.button_ok.caption
+msgctxt "tfsharpen.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfsharpen.caption
+msgid "Sharpen/Smooth"
+msgstr "Verscherpen/Gladstrijken"
+
+#: tfsharpen.label_amount.caption
+msgctxt "tfsharpen.label_amount.caption"
+msgid "Amount :"
+msgstr "Hoeveelheid :"
+
+#: tfshiftcolors.button_cancel.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: tfshiftcolors.button_ok.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfshiftcolors.caption
+msgctxt "tfshiftcolors.caption"
+msgid "Shift colors"
+msgstr "Kleuren verschuiven"
+
+#: tfshiftcolors.checkbox_gsba.caption
+msgctxt "tfshiftcolors.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "Gecorrigeerde tint en helderheid"
+
+#: tfshiftcolors.label1.caption
+msgctxt "TFSHIFTCOLORS.LABEL1.CAPTION"
+msgid "Hue"
+msgstr "Kleurtint"
+
+#: tfshiftcolors.label2.caption
+#| msgid "Colorness"
+msgctxt "TFSHIFTCOLORS.LABEL2.CAPTION"
+msgid "Saturation"
+msgstr "Verzadiging"
+
+#: tftoolbox.caption
+msgctxt "tftoolbox.caption"
+msgid "Tools"
+msgstr "Gereedschappen"
+

+ 1330 - 94
lazpaint/release/bin/i18n/lazpaint.po

@@ -10,7 +10,7 @@ msgid "Remove color from palette"
 msgstr ""
 
 #: tfchoosecolor.caption
-msgctxt "TFCHOOSECOLOR.CAPTION"
+msgctxt "tfchoosecolor.caption"
 msgid "Color"
 msgstr ""
 
@@ -19,7 +19,7 @@ msgid "Color description: click to type in a color with the keyboard using color
 msgstr ""
 
 #: tflayerstack.caption
-msgctxt "TFLAYERSTACK.CAPTION"
+msgctxt "tflayerstack.caption"
 msgid "Layers"
 msgstr ""
 
@@ -38,12 +38,12 @@ msgid "Zoom layer stack out"
 msgstr ""
 
 #: tfmain.brushcreategeometric.hint
-msgctxt "TFMAIN.BRUSHCREATEGEOMETRIC.HINT"
+msgctxt "tfmain.brushcreategeometric.hint"
 msgid "Create geometric brush"
 msgstr ""
 
 #: tfmain.brushloadfromfile.hint
-msgctxt "TFMAIN.BRUSHLOADFROMFILE.HINT"
+msgctxt "tfmain.brushloadfromfile.hint"
 msgid "Load brush from file..."
 msgstr ""
 
@@ -52,7 +52,7 @@ msgid "Remove current brush"
 msgstr ""
 
 #: tfmain.caption
-msgctxt "TFMAIN.CAPTION"
+msgctxt "tfmain.caption"
 msgid "LazPaint"
 msgstr ""
 
@@ -81,7 +81,7 @@ msgid "Posterize..."
 msgstr ""
 
 #: tfmain.colorshiftcolors.caption
-msgctxt "TFMAIN.COLORSHIFTCOLORS.CAPTION"
+msgctxt "tfmain.colorshiftcolors.caption"
 msgid "Shift colors..."
 msgstr ""
 
@@ -272,7 +272,7 @@ msgid "Quit"
 msgstr ""
 
 #: tfmain.filereload.caption
-msgctxt "TFMAIN.FILERELOAD.CAPTION"
+msgctxt "tfmain.filereload.caption"
 msgid "Reload"
 msgstr ""
 
@@ -316,37 +316,37 @@ msgid "Box blur..."
 msgstr ""
 
 #: tfmain.filterblurcorona.caption
-msgctxt "TFMAIN.FILTERBLURCORONA.CAPTION"
+msgctxt "tfmain.filterblurcorona.caption"
 msgid "Corona blur..."
 msgstr ""
 
 #: tfmain.filterblurcustom.caption
-msgctxt "TFMAIN.FILTERBLURCUSTOM.CAPTION"
+msgctxt "tfmain.filterblurcustom.caption"
 msgid "Custom blur..."
 msgstr ""
 
 #: tfmain.filterblurdisk.caption
-msgctxt "TFMAIN.FILTERBLURDISK.CAPTION"
+msgctxt "tfmain.filterblurdisk.caption"
 msgid "Disk blur..."
 msgstr ""
 
 #: tfmain.filterblurfast.caption
-msgctxt "TFMAIN.FILTERBLURFAST.CAPTION"
+msgctxt "tfmain.filterblurfast.caption"
 msgid "Fast blur..."
 msgstr ""
 
 #: tfmain.filterblurmotion.caption
-msgctxt "TFMAIN.FILTERBLURMOTION.CAPTION"
+msgctxt "tfmain.filterblurmotion.caption"
 msgid "Motion blur..."
 msgstr ""
 
 #: tfmain.filterblurprecise.caption
-msgctxt "TFMAIN.FILTERBLURPRECISE.CAPTION"
+msgctxt "tfmain.filterblurprecise.caption"
 msgid "Precise blur..."
 msgstr ""
 
 #: tfmain.filterblurradial.caption
-msgctxt "TFMAIN.FILTERBLURRADIAL.CAPTION"
+msgctxt "tfmain.filterblurradial.caption"
 msgid "Gaussian blur..."
 msgstr ""
 
@@ -383,7 +383,7 @@ msgid "Grayscale"
 msgstr ""
 
 #: tfmain.filterlinearnegative.caption
-msgctxt "TFMAIN.FILTERLINEARNEGATIVE.CAPTION"
+msgctxt "tfmain.filterlinearnegative.caption"
 msgid "Linear negative"
 msgstr ""
 
@@ -493,12 +493,12 @@ msgid "Flip image horizontally"
 msgstr ""
 
 #: tfmain.imagelinearnegative.caption
-msgctxt "TFMAIN.IMAGELINEARNEGATIVE.CAPTION"
+msgctxt "tfmain.imagelinearnegative.caption"
 msgid "Linear negative"
 msgstr ""
 
 #: tfmain.imagenegative.caption
-msgctxt "TFMAIN.IMAGENEGATIVE.CAPTION"
+msgctxt "tfmain.imagenegative.caption"
 msgid "Negative"
 msgstr ""
 
@@ -550,7 +550,7 @@ msgid "Selected tool"
 msgstr ""
 
 #: tfmain.image_swapcolors.hint
-msgctxt "TFMAIN.IMAGE_SWAPCOLORS.HINT"
+msgctxt "tfmain.image_swapcolors.hint"
 msgid "Switch color"
 msgstr ""
 
@@ -559,7 +559,7 @@ msgid "Dock layers and colors"
 msgstr ""
 
 #: tfmain.itemdonate.caption
-msgctxt "TFMAIN.ITEMDONATE.CAPTION"
+msgctxt "tfmain.itemdonate.caption"
 msgid "Donate..."
 msgstr ""
 
@@ -568,7 +568,7 @@ msgid "Fullscreen"
 msgstr ""
 
 #: tfmain.itemuseimagebrowser.caption
-msgctxt "TFMAIN.ITEMUSEIMAGEBROWSER.CAPTION"
+msgctxt "tfmain.itemuseimagebrowser.caption"
 msgid "Use image browser"
 msgstr ""
 
@@ -585,7 +585,7 @@ msgid "Back"
 msgstr ""
 
 #: tfmain.label_brush.caption
-msgctxt "TFMAIN.LABEL_BRUSH.CAPTION"
+msgctxt "tfmain.label_brush.caption"
 msgid "Brush"
 msgstr ""
 
@@ -621,7 +621,7 @@ msgid "Curve"
 msgstr ""
 
 #: tfmain.label_eraser.caption
-msgctxt "TFMAIN.LABEL_ERASER.CAPTION"
+msgctxt "tfmain.label_eraser.caption"
 msgid "Erase"
 msgstr ""
 
@@ -631,12 +631,12 @@ msgid "Grid"
 msgstr ""
 
 #: tfmain.label_gridx.caption
-msgctxt "TFMAIN.LABEL_GRIDX.CAPTION"
+msgctxt "tfmain.label_gridx.caption"
 msgid "x"
 msgstr ""
 
 #: tfmain.label_outlinewidth.caption
-msgctxt "TFMAIN.LABEL_OUTLINEWIDTH.CAPTION"
+msgctxt "tfmain.label_outlinewidth.caption"
 msgid "Width"
 msgstr ""
 
@@ -646,12 +646,12 @@ msgid "Pen"
 msgstr ""
 
 #: tfmain.label_penwidth.caption
-msgctxt "TFMAIN.LABEL_PENWIDTH.CAPTION"
+msgctxt "tfmain.label_penwidth.caption"
 msgid "Width"
 msgstr ""
 
 #: tfmain.label_phongborder.caption
-msgctxt "TFMAIN.LABEL_PHONGBORDER.CAPTION"
+msgctxt "tfmain.label_phongborder.caption"
 msgid "Border"
 msgstr ""
 
@@ -684,7 +684,7 @@ msgid "Blur"
 msgstr ""
 
 #: tfmain.label_tolerance.caption
-msgctxt "TFMAIN.LABEL_TOLERANCE.CAPTION"
+msgctxt "tfmain.label_tolerance.caption"
 msgid "Tolerance"
 msgstr ""
 
@@ -699,7 +699,7 @@ msgid "Duplicate selected layer"
 msgstr ""
 
 #: tfmain.layerfromfile.hint
-msgctxt "TFMAIN.LAYERFROMFILE.HINT"
+msgctxt "tfmain.layerfromfile.hint"
 msgid "Import layer from file..."
 msgstr ""
 
@@ -708,12 +708,12 @@ msgid "Flip layer horizontally"
 msgstr ""
 
 #: tfmain.layermergeover.hint
-msgctxt "TFMAIN.LAYERMERGEOVER.HINT"
+msgctxt "tfmain.layermergeover.hint"
 msgid "Merge layer over"
 msgstr ""
 
 #: tfmain.layermove.hint
-msgctxt "TFMAIN.LAYERMOVE.HINT"
+msgctxt "tfmain.layermove.hint"
 msgid "Move layer"
 msgstr ""
 
@@ -722,12 +722,12 @@ msgid "Rasterize layer"
 msgstr ""
 
 #: tfmain.layerremovecurrent.hint
-msgctxt "TFMAIN.LAYERREMOVECURRENT.HINT"
+msgctxt "tfmain.layerremovecurrent.hint"
 msgid "Remove layer"
 msgstr ""
 
 #: tfmain.layerrotate.hint
-msgctxt "TFMAIN.LAYERROTATE.HINT"
+msgctxt "tfmain.layerrotate.hint"
 msgid "Rotate layer"
 msgstr ""
 
@@ -745,7 +745,7 @@ msgid "Load selection"
 msgstr ""
 
 #: tfmain.menucolors.caption
-msgctxt "TFMAIN.MENUCOLORS.CAPTION"
+msgctxt "tfmain.menucolors.caption"
 msgid "Colors"
 msgstr ""
 
@@ -766,7 +766,7 @@ msgid "Dock right"
 msgstr ""
 
 #: tfmain.menuedit.caption
-msgctxt "TFMAIN.MENUEDIT.CAPTION"
+msgctxt "tfmain.menuedit.caption"
 msgid "Edit"
 msgstr ""
 
@@ -779,57 +779,57 @@ msgid "Show file toolbar"
 msgstr ""
 
 #: tfmain.menufilter.caption
-msgctxt "TFMAIN.MENUFILTER.CAPTION"
+msgctxt "tfmain.menufilter.caption"
 msgid "Filter"
 msgstr ""
 
 #: tfmain.menuhelp.caption
-msgctxt "TFMAIN.MENUHELP.CAPTION"
+msgctxt "tfmain.menuhelp.caption"
 msgid "Help"
 msgstr ""
 
 #: tfmain.menuimage.caption
-msgctxt "TFMAIN.MENUIMAGE.CAPTION"
+msgctxt "tfmain.menuimage.caption"
 msgid "Image"
 msgstr ""
 
 #: tfmain.menulanguage.caption
-msgctxt "TFMAIN.MENULANGUAGE.CAPTION"
+msgctxt "tfmain.menulanguage.caption"
 msgid "Language"
 msgstr ""
 
 #: tfmain.menuradialblur.caption
-msgctxt "TFMAIN.MENURADIALBLUR.CAPTION"
+msgctxt "tfmain.menuradialblur.caption"
 msgid "Radial blur"
 msgstr ""
 
 #: tfmain.menurecentfiles.caption
-msgctxt "TFMAIN.MENURECENTFILES.CAPTION"
+msgctxt "tfmain.menurecentfiles.caption"
 msgid "Recent files"
 msgstr ""
 
 #: tfmain.menuremovetransparency.caption
-msgctxt "TFMAIN.MENUREMOVETRANSPARENCY.CAPTION"
+msgctxt "tfmain.menuremovetransparency.caption"
 msgid "Remove transparency"
 msgstr ""
 
 #: tfmain.menurender.caption
-msgctxt "TFMAIN.MENURENDER.CAPTION"
+msgctxt "tfmain.menurender.caption"
 msgid "Render"
 msgstr ""
 
 #: tfmain.menuselect.caption
-msgctxt "TFMAIN.MENUSELECT.CAPTION"
+msgctxt "tfmain.menuselect.caption"
 msgid "Select"
 msgstr ""
 
 #: tfmain.menushowpalette.caption
-msgctxt "TFMAIN.MENUSHOWPALETTE.CAPTION"
+msgctxt "tfmain.menushowpalette.caption"
 msgid "Show palette"
 msgstr ""
 
 #: tfmain.menutool.caption
-msgctxt "TFMAIN.MENUTOOL.CAPTION"
+msgctxt "tfmain.menutool.caption"
 msgid "Tools"
 msgstr ""
 
@@ -842,7 +842,7 @@ msgid "Show undo/redo toolbar"
 msgstr ""
 
 #: tfmain.menuview.caption
-msgctxt "TFMAIN.MENUVIEW.CAPTION"
+msgctxt "tfmain.menuview.caption"
 msgid "View"
 msgstr ""
 
@@ -851,7 +851,7 @@ msgid "Show zoom toolbar"
 msgstr ""
 
 #: tfmain.open3dobjectdialog.title
-msgctxt "TFMAIN.OPEN3DOBJECTDIALOG.TITLE"
+msgctxt "tfmain.open3dobjectdialog.title"
 msgid "Import 3D object"
 msgstr ""
 
@@ -860,6 +860,7 @@ msgid "Open brush"
 msgstr ""
 
 #: tfmain.openpicturedialog1.title
+msgctxt "TFMAIN.OPENPICTUREDIALOG1.TITLE"
 msgid "Open existing image"
 msgstr ""
 
@@ -869,12 +870,12 @@ msgid "Open texture"
 msgstr ""
 
 #: tfmain.perspective_repeat.hint
-msgctxt "TFMAIN.PERSPECTIVE_REPEAT.HINT"
+msgctxt "tfmain.perspective_repeat.hint"
 msgid "Repeat image"
 msgstr ""
 
 #: tfmain.perspective_twoplanes.hint
-msgctxt "TFMAIN.PERSPECTIVE_TWOPLANES.HINT"
+msgctxt "tfmain.perspective_twoplanes.hint"
 msgid "Draw opposite plane too"
 msgstr ""
 
@@ -891,7 +892,7 @@ msgid "Water with custom colors"
 msgstr ""
 
 #: tfmain.rendercyclicperlinnoise.caption
-msgctxt "TFMAIN.RENDERCYCLICPERLINNOISE.CAPTION"
+msgctxt "tfmain.rendercyclicperlinnoise.caption"
 msgid "Cyclic Perlin noise"
 msgstr ""
 
@@ -924,7 +925,7 @@ msgid "Stone"
 msgstr ""
 
 #: tfmain.renderwater.caption
-msgctxt "TFMAIN.RENDERWATER.CAPTION"
+msgctxt "tfmain.renderwater.caption"
 msgid "Water"
 msgstr ""
 
@@ -1043,7 +1044,7 @@ msgid "Brush"
 msgstr ""
 
 #: tfmain.toolchangedocking.hint
-msgctxt "TFMAIN.TOOLCHANGEDOCKING.HINT"
+msgctxt "tfmain.toolchangedocking.hint"
 msgid "Change docking"
 msgstr ""
 
@@ -1099,7 +1100,7 @@ msgid "Move and scroll picture"
 msgstr ""
 
 #: tfmain.toolhotspot.caption
-msgctxt "TFMAIN.TOOLHOTSPOT.CAPTION"
+msgctxt "tfmain.toolhotspot.caption"
 msgid "Hot spot"
 msgstr ""
 
@@ -1108,7 +1109,7 @@ msgid "Choose hot spot of a cursor"
 msgstr ""
 
 #: tfmain.toollayermapping.hint
-msgctxt "TFMAIN.TOOLLAYERMAPPING.HINT"
+msgctxt "tfmain.toollayermapping.hint"
 msgid "Layer perspective"
 msgstr ""
 
@@ -1173,12 +1174,12 @@ msgid "Select ellipse"
 msgstr ""
 
 #: tfmain.toolselectpen.caption
-msgctxt "TFMAIN.TOOLSELECTPEN.CAPTION"
+msgctxt "tfmain.toolselectpen.caption"
 msgid "Selection pen"
 msgstr ""
 
 #: tfmain.toolselectpen.hint
-msgctxt "TFMAIN.TOOLSELECTPEN.HINT"
+msgctxt "tfmain.toolselectpen.hint"
 msgid "Draw selection with pen"
 msgstr ""
 
@@ -1193,7 +1194,7 @@ msgid "Select rectangle"
 msgstr ""
 
 #: tfmain.toolselectspline.hint
-msgctxt "TFMAIN.TOOLSELECTSPLINE.HINT"
+msgctxt "tfmain.toolselectspline.hint"
 msgid "Select curve"
 msgstr ""
 
@@ -1237,7 +1238,7 @@ msgid "Square cap"
 msgstr ""
 
 #: tfmain.tool_closeshape.hint
-msgctxt "TFMAIN.TOOL_CLOSESHAPE.HINT"
+msgctxt "tfmain.tool_closeshape.hint"
 msgid "Close shape"
 msgstr ""
 
@@ -1246,7 +1247,7 @@ msgid "Draw an angle"
 msgstr ""
 
 #: tfmain.tool_curvemodeauto.hint
-msgctxt "TFMAIN.TOOL_CURVEMODEAUTO.HINT"
+msgctxt "tfmain.tool_curvemodeauto.hint"
 msgid "Autodetect angles"
 msgstr ""
 
@@ -1259,32 +1260,32 @@ msgid "Move point"
 msgstr ""
 
 #: tfmain.tool_diamondgradient.hint
-msgctxt "TFMAIN.TOOL_DIAMONDGRADIENT.HINT"
+msgctxt "tfmain.tool_diamondgradient.hint"
 msgid "Diamond gradient"
 msgstr ""
 
 #: tfmain.tool_drawshapeborder.hint
-msgctxt "TFMAIN.TOOL_DRAWSHAPEBORDER.HINT"
+msgctxt "tfmain.tool_drawshapeborder.hint"
 msgid "Draw border"
 msgstr ""
 
 #: tfmain.tool_erasealpha.hint
-msgctxt "TFMAIN.TOOL_ERASEALPHA.HINT"
+msgctxt "tfmain.tool_erasealpha.hint"
 msgid "Make transparent"
 msgstr ""
 
 #: tfmain.tool_eraseblur.hint
-msgctxt "TFMAIN.TOOL_ERASEBLUR.HINT"
+msgctxt "tfmain.tool_eraseblur.hint"
 msgid "Soften"
 msgstr ""
 
 #: tfmain.tool_fillshape.hint
-msgctxt "TFMAIN.TOOL_FILLSHAPE.HINT"
+msgctxt "tfmain.tool_fillshape.hint"
 msgid "Fill shape"
 msgstr ""
 
 #: tfmain.tool_gridmovewithoutdeformation.hint
-msgctxt "TFMAIN.TOOL_GRIDMOVEWITHOUTDEFORMATION.HINT"
+msgctxt "tfmain.tool_gridmovewithoutdeformation.hint"
 msgid "Move grid without deformation"
 msgstr ""
 
@@ -1304,67 +1305,67 @@ msgid "Round join"
 msgstr ""
 
 #: tfmain.tool_lineargradient.hint
-msgctxt "TFMAIN.TOOL_LINEARGRADIENT.HINT"
+msgctxt "tfmain.tool_lineargradient.hint"
 msgid "Linear gradient"
 msgstr ""
 
 #: tfmain.tool_phongshapecone.hint
-msgctxt "TFMAIN.TOOL_PHONGSHAPECONE.HINT"
+msgctxt "tfmain.tool_phongshapecone.hint"
 msgid "Cone"
 msgstr ""
 
 #: tfmain.tool_phongshapehorizontalcylinder.hint
-msgctxt "TFMAIN.TOOL_PHONGSHAPEHORIZONTALCYLINDER.HINT"
+msgctxt "tfmain.tool_phongshapehorizontalcylinder.hint"
 msgid "Horizontal cylinder"
 msgstr ""
 
 #: tfmain.tool_phongshaperectangle.hint
-msgctxt "TFMAIN.TOOL_PHONGSHAPERECTANGLE.HINT"
+msgctxt "tfmain.tool_phongshaperectangle.hint"
 msgid "Rectangle"
 msgstr ""
 
 #: tfmain.tool_phongshaperoundrect.hint
-msgctxt "TFMAIN.TOOL_PHONGSHAPEROUNDRECT.HINT"
+msgctxt "tfmain.tool_phongshaperoundrect.hint"
 msgid "Rounded rectangle"
 msgstr ""
 
 #: tfmain.tool_phongshapesphere.hint
-msgctxt "TFMAIN.TOOL_PHONGSHAPESPHERE.HINT"
+msgctxt "tfmain.tool_phongshapesphere.hint"
 msgid "Sphere"
 msgstr ""
 
 #: tfmain.tool_phongshapeverticalcone.hint
-msgctxt "TFMAIN.TOOL_PHONGSHAPEVERTICALCONE.HINT"
+msgctxt "tfmain.tool_phongshapeverticalcone.hint"
 msgid "Vertical cone"
 msgstr ""
 
 #: tfmain.tool_phongshapeverticalcylinder.hint
-msgctxt "TFMAIN.TOOL_PHONGSHAPEVERTICALCYLINDER.HINT"
+msgctxt "tfmain.tool_phongshapeverticalcylinder.hint"
 msgid "Vertical cylinder"
 msgstr ""
 
 #: tfmain.tool_progressivefloodfill.caption
-msgctxt "TFMAIN.TOOL_PROGRESSIVEFLOODFILL.CAPTION"
+msgctxt "tfmain.tool_progressivefloodfill.caption"
 msgid "Progressive floodfill"
 msgstr ""
 
 #: tfmain.tool_progressivefloodfill.hint
-msgctxt "TFMAIN.TOOL_PROGRESSIVEFLOODFILL.HINT"
+msgctxt "tfmain.tool_progressivefloodfill.hint"
 msgid "Progressive floodfill"
 msgstr ""
 
 #: tfmain.tool_radialgradient.hint
-msgctxt "TFMAIN.TOOL_RADIALGRADIENT.HINT"
+msgctxt "tfmain.tool_radialgradient.hint"
 msgid "Radial gradient"
 msgstr ""
 
 #: tfmain.tool_reflectedgradient.hint
-msgctxt "TFMAIN.TOOL_REFLECTEDGRADIENT.HINT"
+msgctxt "tfmain.tool_reflectedgradient.hint"
 msgid "Reflected gradient"
 msgstr ""
 
 #: tfmain.tool_singradient.hint
-msgctxt "TFMAIN.TOOL_SINGRADIENT.HINT"
+msgctxt "tfmain.tool_singradient.hint"
 msgid "Sine gradient"
 msgstr ""
 
@@ -1412,17 +1413,17 @@ msgid "Layers"
 msgstr ""
 
 #: tfmain.viewlayerstackbutton.caption
-msgctxt "TFMAIN.VIEWLAYERSTACKBUTTON.CAPTION"
+msgctxt "tfmain.viewlayerstackbutton.caption"
 msgid "Show layers"
 msgstr ""
 
 #: tfmain.viewlayerstackbutton.hint
-msgctxt "TFMAIN.VIEWLAYERSTACKBUTTON.HINT"
+msgctxt "tfmain.viewlayerstackbutton.hint"
 msgid "Show or hide layer stack window"
 msgstr ""
 
 #: tfmain.viewpalette.caption
-msgctxt "TFMAIN.VIEWPALETTE.CAPTION"
+msgctxt "tfmain.viewpalette.caption"
 msgid "Palette"
 msgstr ""
 
@@ -1478,17 +1479,17 @@ msgid "OK"
 msgstr ""
 
 #: tftwirl.caption
-msgctxt "TFTWIRL.CAPTION"
+msgctxt "tftwirl.caption"
 msgid "Twirl"
 msgstr ""
 
 #: tftwirl.label_angle.caption
-msgctxt "TFTWIRL.LABEL_ANGLE.CAPTION"
+msgctxt "tftwirl.label_angle.caption"
 msgid "Angle :"
 msgstr ""
 
 #: tftwirl.label_radius.caption
-msgctxt "TFTWIRL.LABEL_RADIUS.CAPTION"
+msgctxt "tftwirl.label_radius.caption"
 msgid "Radius :"
 msgstr ""
 
@@ -1538,8 +1539,12 @@ msgstr ""
 msgid "All supported filetypes"
 msgstr ""
 
-#: uresourcestrings.rsaltshiftscalemode
-msgid "Hold ALT or SHIFT to scale"
+#: uresourcestrings.rsalt
+msgid "ALT"
+msgstr ""
+
+#: uresourcestrings.rsholdkeysscalemode
+msgid "Hold %1 or %2 to scale"
 msgstr ""
 
 #: uresourcestrings.rsanimatedgif
@@ -1555,6 +1560,7 @@ msgid "Press BACKSPACE to remove last point"
 msgstr ""
 
 #: uresourcestrings.rsbestquality
+msgctxt "uresourcestrings.rsbestquality"
 msgid "Best quality"
 msgstr ""
 
@@ -1605,6 +1611,7 @@ msgid "Clear palette"
 msgstr ""
 
 #: uresourcestrings.rscloserequest
+msgctxt "uresourcestrings.rscloserequest"
 msgid "Close request"
 msgstr ""
 
@@ -1648,6 +1655,7 @@ msgid "Corr. Hue CW"
 msgstr ""
 
 #: uresourcestrings.rscosine
+msgctxt "uresourcestrings.rscosine"
 msgid "Cosine"
 msgstr ""
 
@@ -1655,8 +1663,16 @@ msgstr ""
 msgid "Crop"
 msgstr ""
 
-#: uresourcestrings.rsctrlrestrictrotation
-msgid "Hold CTRL to restrict rotation angle"
+#: uresourcestrings.rsctrl
+msgid "CTRL"
+msgstr ""
+
+#: uresourcestrings.rscmd
+msgid "CMD"
+msgstr ""
+
+#: uresourcestrings.rsholdkeyrestrictrotation
+msgid "Hold %1 to restrict rotation angle"
 msgstr ""
 
 #: uresourcestrings.rscurvemodehint
@@ -1684,7 +1700,12 @@ msgstr ""
 msgid "Dither layer using palette"
 msgstr ""
 
+#: uresourcestrings.rsduplicateimage
+msgid "Duplicate image"
+msgstr ""
+
 #: uresourcestrings.rseditmask
+msgctxt "uresourcestrings.rseditmask"
 msgid "Edit mask"
 msgstr ""
 
@@ -1693,6 +1714,7 @@ msgid "Edit selection"
 msgstr ""
 
 #: uresourcestrings.rsedittexture
+msgctxt "uresourcestrings.rsedittexture"
 msgid "Edit texture"
 msgstr ""
 
@@ -1726,9 +1748,10 @@ msgstr ""
 
 #: uresourcestrings.rserroronopeningfile
 msgid "Error on opening file \"%1\""
-msgstr ""
+msgstr ""%1\""
 
 #: uresourcestrings.rsexitrequest
+msgctxt "uresourcestrings.rsexitrequest"
 msgid "Exit request"
 msgstr ""
 
@@ -1745,6 +1768,7 @@ msgid "expects N parameters : "
 msgstr ""
 
 #: uresourcestrings.rsfast
+msgctxt "uresourcestrings.rsfast"
 msgid "Fast"
 msgstr ""
 
@@ -1757,6 +1781,7 @@ msgid "Date"
 msgstr ""
 
 #: uresourcestrings.rsfileextensionnotsupported
+msgctxt "uresourcestrings.rsfileextensionnotsupported"
 msgid "This file extension is not supported."
 msgstr ""
 
@@ -1817,15 +1842,20 @@ msgid "Green"
 msgstr ""
 
 #: uresourcestrings.rshalfcosine
+msgctxt "uresourcestrings.rshalfcosine"
 msgid "Half-cosine"
 msgstr ""
 
-#: uresourcestrings.rsholdctrlsnaptopixel
-msgid "Hold CTRL to snap to pixels"
+#: uresourcestrings.rsholdkeysnaptopixel
+msgid "Hold %1 to snap to pixels"
+msgstr ""
+
+#: uresourcestrings.rsshift
+msgid "SHIFT"
 msgstr ""
 
-#: uresourcestrings.rsholdshiftforsquare
-msgid "Hold SHIFT to draw a square or a circle"
+#: uresourcestrings.rsholdkeyforsquare
+msgid "Hold %1 to draw a square or a circle"
 msgstr ""
 
 #: uresourcestrings.rshotspot
@@ -1900,6 +1930,7 @@ msgid "Invalid size for new : "
 msgstr ""
 
 #: uresourcestrings.rskeepchanges
+msgctxt "uresourcestrings.rskeepchanges"
 msgid "Do you want to keep changes?"
 msgstr ""
 
@@ -1938,6 +1969,7 @@ msgid "LazPaint only"
 msgstr ""
 
 #: uresourcestrings.rslight
+msgctxt "uresourcestrings.rslight"
 msgid "Light"
 msgstr ""
 
@@ -1951,6 +1983,7 @@ msgid "Light position"
 msgstr ""
 
 #: uresourcestrings.rslinear
+msgctxt "uresourcestrings.rslinear"
 msgid "Linear"
 msgstr ""
 
@@ -1983,6 +2016,7 @@ msgid "Do you want to merge selection?"
 msgstr ""
 
 #: uresourcestrings.rsmitchell
+msgctxt "uresourcestrings.rsmitchell"
 msgid "Mitchell"
 msgstr ""
 
@@ -1991,6 +2025,7 @@ msgid "You are trying to open more than one file. How would you like these files
 msgstr ""
 
 #: uresourcestrings.rsmovingorrotatingselection
+msgctxt "uresourcestrings.rsmovingorrotatingselection"
 msgid "Moving or rotating selection"
 msgstr ""
 
@@ -2028,6 +2063,7 @@ msgid "Do not save and open another file"
 msgstr ""
 
 #: uresourcestrings.rsnoname
+msgctxt "uresourcestrings.rsnoname"
 msgid "noname"
 msgstr ""
 
@@ -2036,10 +2072,12 @@ msgid "Normal"
 msgstr ""
 
 #: uresourcestrings.rsnothingtobedeformed
+msgctxt "uresourcestrings.rsnothingtobedeformed"
 msgid "There is nothing to be deformed"
 msgstr ""
 
 #: uresourcestrings.rsnothingtoberetrieved
+msgctxt "uresourcestrings.rsnothingtoberetrieved"
 msgid "There is nothing to be retrieved"
 msgstr ""
 
@@ -2056,6 +2094,7 @@ msgid "Okay"
 msgstr ""
 
 #: uresourcestrings.rsopacity
+msgctxt "uresourcestrings.rsopacity"
 msgid "Opacity"
 msgstr ""
 
@@ -2151,6 +2190,7 @@ msgid "Repeat image"
 msgstr ""
 
 #: uresourcestrings.rsretrieveselectedarea
+msgctxt "uresourcestrings.rsretrieveselectedarea"
 msgid "Do you want to retrieve selected area?"
 msgstr ""
 
@@ -2183,6 +2223,7 @@ msgid "Save with specified filename"
 msgstr ""
 
 #: uresourcestrings.rssavechanges
+msgctxt "uresourcestrings.rssavechanges"
 msgid "Current bitmap has been modified. Do you want to save changes?"
 msgstr ""
 
@@ -2223,7 +2264,7 @@ msgstr ""
 
 #: uresourcestrings.rsthereisnofilenamegivenforthisfileusesaveas
 msgid "There is no file name given for this file. Use \"Save as...\" from the main menu."
-msgstr ""
+msgstr ""Enregistrer sous...\" depuis le menu principal."
 
 #: uresourcestrings.rstodo
 msgid "To do"
@@ -2289,3 +2330,1198 @@ msgstr ""
 msgid "Yes"
 msgstr ""
 
+#: tablet.getprocfailed
+msgid "Procedure %s failed to load properly."
+msgstr ""
+
+#: tablet.openfailed
+msgid "Tablet context failed to open."
+msgstr ""
+
+#: tfabout.button_donate.caption
+msgctxt "tfabout.button_donate.caption"
+msgid "Donate..."
+msgstr ""
+
+#: tfabout.caption
+msgctxt "tfabout.caption"
+msgid "About"
+msgstr ""
+
+#: tfabout.labelurl.caption
+msgid "http://sourceforge.net/projects/lazpaint/"
+msgstr ""
+
+#: tfabout.label_authors.caption
+msgctxt "tfabout.label_authors.caption"
+msgid "Authors:"
+msgstr ""
+
+#: tfabout.label_authorsvalue.caption
+msgctxt "tfabout.label_authorsvalue.caption"
+msgid "Circular helped by FabienWang, Lainz and others"
+msgstr ""
+
+#: tfabout.label_homepage.caption
+msgctxt "tfabout.label_homepage.caption"
+msgid "Homepage:"
+msgstr ""
+
+#: tfabout.label_libraries.caption
+msgctxt "tfabout.label_libraries.caption"
+msgid "Libraries used:"
+msgstr ""
+
+#: tfabout.label_licence.caption
+msgctxt "tfabout.label_licence.caption"
+msgid "Licence:"
+msgstr ""
+
+#: tfabout.label_opensource.caption
+msgctxt "tfabout.label_opensource.caption"
+msgid "Open source (GPLv3)"
+msgstr ""
+
+#: tfadjustcurves.button_cancel.caption
+msgctxt "tfadjustcurves.button_cancel.caption"
+msgid "Cancel"
+msgstr ""
+
+#: tfadjustcurves.button_ok.caption
+msgctxt "tfadjustcurves.button_ok.caption"
+msgid "OK"
+msgstr ""
+
+#: tfadjustcurves.caption
+msgid "Adjust curves"
+msgstr ""
+
+#: tfadjustcurves.toolbutton_newcurve.hint
+msgid "Discard current curve and start a new one"
+msgstr ""
+
+#: tfadjustcurves.toolbutton_posterize.hint
+msgctxt "tfadjustcurves.toolbutton_posterize.hint"
+msgid "Posterize"
+msgstr ""
+
+#: tfadjustcurves.toolbutton_removepoint.hint
+msgid "Remove selected point (Del)"
+msgstr ""
+
+#: tfblendop.button_cancel.caption
+msgctxt "tfblendop.button_cancel.caption"
+msgid "Cancel"
+msgstr ""
+
+#: tfblendop.button_ok.caption
+msgctxt "tfblendop.button_ok.caption"
+msgid "OK"
+msgstr ""
+
+#: tfblendop.caption
+msgid "Blend operation"
+msgstr ""
+
+#: tfblendop.label_blendopcategory.caption
+msgctxt "tfblendop.label_blendopcategory.caption"
+msgid "Category of blend operation"
+msgstr ""
+
+#: tfblendop.label_blendopvalue.caption
+msgctxt "tfblendop.label_blendopvalue.caption"
+msgid "."
+msgstr ""
+
+#: tfblendop.label_kritaover.caption
+msgctxt "tfblendop.label_kritaover.caption"
+msgid "Krita"
+msgstr ""
+
+#: tfblendop.label_kritaover.hint
+msgid "Blend operations that are available in Krita"
+msgstr ""
+
+#: tfblendop.label_otherover.caption
+msgctxt "tfblendop.label_otherover.caption"
+msgid "Other"
+msgstr ""
+
+#: tfblendop.label_otherover.hint
+msgid "Blend operations of LazPaint and Paint.NET"
+msgstr ""
+
+#: tfblendop.label_patternover.caption
+msgctxt "tfblendop.label_patternover.caption"
+msgid "Pattern over"
+msgstr ""
+
+#: tfblendop.label_patternover.hint
+msgid "Preview blend operation with the specified image on top"
+msgstr ""
+
+#: tfblendop.label_patternunder.caption
+msgctxt "tfblendop.label_patternunder.caption"
+msgid "Pattern under"
+msgstr ""
+
+#: tfblendop.label_patternunder.hint
+msgid "Preview blend operation with the specified image underneath"
+msgstr ""
+
+#: tfblendop.label_previewwith.caption
+msgctxt "tfblendop.label_previewwith.caption"
+msgid "Preview with"
+msgstr ""
+
+#: tfblendop.label_selectedblendop.caption
+msgid "Selected blend operation :"
+msgstr ""
+
+#: tfblendop.label_svgover.caption
+msgctxt "tfblendop.label_svgover.caption"
+msgid "Basic SVG"
+msgstr ""
+
+#: tfblendop.label_svgover.hint
+msgid "Basic blend operations that are available in virtually all image editors"
+msgstr ""
+
+#: tfbrowseimages.caption
+msgid "Browse images"
+msgstr ""
+
+#: tfbrowseimages.checkbox_usedirectoryonstartup.caption
+msgid "Use this directory on startup"
+msgstr ""
+
+#: tfbrowseimages.label_status.caption
+msgctxt "tfbrowseimages.label_status.caption"
+msgid "."
+msgstr ""
+
+#: tfbrowseimages.toolbutton_createfolderorcontainer.hint
+msgid "Create folder or container"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_goup.hint
+msgid "Go one directory up"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_openselectedfiles.hint
+msgid "Open selected files"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_viewbigicon.hint
+msgctxt "tfbrowseimages.toolbutton_viewbigicon.hint"
+msgid "Show big icons"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_viewdetails.hint
+msgctxt "tfbrowseimages.toolbutton_viewdetails.hint"
+msgid "Show details and preview"
+msgstr ""
+
+#: tfbrowseimages.tool_selectdrive.hint
+msgid "Select drive"
+msgstr ""
+
+#: tfcanvassize.button_cancel.caption
+msgctxt "TFCANVASSIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr ""
+
+#: tfcanvassize.button_ok.caption
+msgctxt "TFCANVASSIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfcanvassize.caption
+msgctxt "tfcanvassize.caption"
+msgid "Canvas size"
+msgstr ""
+
+#: tfcanvassize.checkbox_flipmode.caption
+msgid "Flip mode"
+msgstr ""
+
+#: tfcanvassize.label_anchor.caption
+msgctxt "tfcanvassize.label_anchor.caption"
+msgid "Anchor :"
+msgstr ""
+
+#: tfcanvassize.label_height.caption
+msgctxt "tfcanvassize.label_height.caption"
+msgid "Height :"
+msgstr ""
+
+#: tfcanvassize.label_width.caption
+msgctxt "tfcanvassize.label_width.caption"
+msgid "Width :"
+msgstr ""
+
+#: tfcolorintensity.button_cancel.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr ""
+
+#: tfcolorintensity.button_ok.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfcolorintensity.caption
+msgctxt "tfcolorintensity.caption"
+msgid "Intensity"
+msgstr ""
+
+#: tfcolorintensity.label_multiply.caption
+msgctxt "tfcolorintensity.label_multiply.caption"
+msgid "Multiply"
+msgstr ""
+
+#: tfcolorintensity.label_shift.caption
+msgctxt "tfcolorintensity.label_shift.caption"
+msgid "Shift"
+msgstr ""
+
+#: tfcolorize.button_cancel.caption
+msgctxt "TFCOLORIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr ""
+
+#: tfcolorize.button_ok.caption
+msgctxt "TFCOLORIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfcolorize.caption
+msgctxt "tfcolorize.caption"
+msgid "Colorize"
+msgstr ""
+
+#: tfcolorize.checkbox_gsba.caption
+msgctxt "tfcolorize.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr ""
+
+#: tfcolorize.label_colorness.caption
+msgctxt "tfcolorize.label_colorness.caption"
+msgid "Colorness"
+msgstr ""
+
+#: tfcolorize.label_hue.caption
+msgctxt "tfcolorize.label_hue.caption"
+msgid "Hue"
+msgstr ""
+
+#: tfcolorize.label_preset.caption
+msgid "Preset"
+msgstr ""
+
+#: tfcustomblur.button_cancel.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr ""
+
+#: tfcustomblur.button_editmask.caption
+msgid "Edit mask..."
+msgstr ""
+
+#: tfcustomblur.button_loadmask.caption
+msgid "Load mask..."
+msgstr ""
+
+#: tfcustomblur.button_ok.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfcustomblur.caption
+msgctxt "tfcustomblur.caption"
+msgid "Custom blur"
+msgstr ""
+
+#: tfcustomblur.openpicturedialog1.title
+msgid "Open grayscale file"
+msgstr ""
+
+#: tfemboss.button_cancel.caption
+msgctxt "TFEMBOSS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr ""
+
+#: tfemboss.button_ok.caption
+msgctxt "TFEMBOSS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfemboss.caption
+msgctxt "tfemboss.caption"
+msgid "Emboss"
+msgstr ""
+
+#: tfemboss.checkbox_preservecolors.caption
+msgid "Preserve colors"
+msgstr ""
+
+#: tfemboss.checkbox_transparent.caption
+msgid "Transparent"
+msgstr ""
+
+#: tfemboss.label_direction.caption
+msgctxt "tfemboss.label_direction.caption"
+msgid "Direction :"
+msgstr ""
+
+#: tffilterfunction.button_cancel.caption
+msgctxt "tffilterfunction.button_cancel.caption"
+msgid "Cancel"
+msgstr ""
+
+#: tffilterfunction.button_ok.caption
+msgctxt "tffilterfunction.button_ok.caption"
+msgid "OK"
+msgstr ""
+
+#: tffilterfunction.caption
+msgid "Apply function"
+msgstr ""
+
+#: tffilterfunction.checkbox_gsba.caption
+msgctxt "tffilterfunction.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr ""
+
+#: tffilterfunction.label_alphaequals.caption
+msgctxt "tffilterfunction.label_alphaequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_blueequals.caption
+msgctxt "tffilterfunction.label_blueequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_greenequals.caption
+msgctxt "tffilterfunction.label_greenequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_hueequals.caption
+msgctxt "tffilterfunction.label_hueequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_lightnessequals.caption
+msgctxt "tffilterfunction.label_lightnessequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_redequals.caption
+msgctxt "tffilterfunction.label_redequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_saturationequals.caption
+msgctxt "tffilterfunction.label_saturationequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_variables.caption
+msgid "Variables :"
+msgstr ""
+
+#: tffilterfunction.tabsheet_hsl.caption
+msgid "HSL"
+msgstr ""
+
+#: tffilterfunction.tabsheet_rgb.caption
+msgctxt "tffilterfunction.tabsheet_rgb.caption"
+msgid "RGB"
+msgstr ""
+
+#: tfgeometricbrush.button_cancel.caption
+msgctxt "tfgeometricbrush.button_cancel.caption"
+msgid "Cancel"
+msgstr ""
+
+#: tfgeometricbrush.button_ok.caption
+msgctxt "tfgeometricbrush.button_ok.caption"
+msgid "OK"
+msgstr ""
+
+#: tfgeometricbrush.caption
+msgid "Geometric brush"
+msgstr ""
+
+#: tfgeometricbrush.checkbox_isgradient.caption
+msgid "Opacity gradient"
+msgstr ""
+
+#: tfgeometricbrush.label1.caption
+msgid "Number of sides:"
+msgstr ""
+
+#: tfimagelist.caption
+msgid "Image List"
+msgstr ""
+
+#: tfimagelist.pmautouncheckonopen.caption
+msgid "Autouncheck files after being open"
+msgstr ""
+
+#: tfimagelist.pmautouncheckonsave.caption
+msgid "Autouncheck files after being edited and saved"
+msgstr ""
+
+#: tfimagelist.pmremoveall.caption
+msgid "Empty image list"
+msgstr ""
+
+#: tfimagelist.pmremovenonexisting.caption
+msgid "Remove nonexisting images"
+msgstr ""
+
+#: tfimagelist.pmremoveunchecked.caption
+msgid "Remove unchecked images"
+msgstr ""
+
+#: tfimagelist.pmunchecknonexisting.caption
+msgid "Uncheck nonexisting files"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[0].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[0].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[1].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[1].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[2].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[2].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[3].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[3].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.tbaddfiles.hint
+msgid "Add images to list"
+msgstr ""
+
+#: tfimagelist.tbautouncheck.hint
+msgid "Enable/disable autounchecking for processed files"
+msgstr ""
+
+#: tfimagelist.tbautozoomfit.hint
+msgid "Enable/disable autofitting images in the LazPaint window"
+msgstr ""
+
+#: tfimagelist.tbcheckall.hint
+msgid "Check all files for processing"
+msgstr ""
+
+#: tfimagelist.tbminiwindow.hint
+msgid "Switch to miniwindow"
+msgstr ""
+
+#: tfimagelist.tbmovedown.hint
+msgid "Move selected items down"
+msgstr ""
+
+#: tfimagelist.tbmoveup.hint
+msgid "Move selected items up"
+msgstr ""
+
+#: tfimagelist.tbnormalwindows.hint
+msgid "Switch to normal window"
+msgstr ""
+
+#: tfimagelist.tbopenimage.hint
+msgid "Open current image"
+msgstr ""
+
+#: tfimagelist.tbopennext.hint
+msgctxt "tfimagelist.tbopennext.hint"
+msgid "Open next image (Alt-Right)"
+msgstr ""
+
+#: tfimagelist.tbopennextsw.hint
+msgctxt "tfimagelist.tbopennextsw.hint"
+msgid "Open next image"
+msgstr ""
+
+#: tfimagelist.tbopenprev.hint
+msgctxt "tfimagelist.tbopenprev.hint"
+msgid "Open previous image (Alt-Left)"
+msgstr ""
+
+#: tfimagelist.tbopenprevsw.hint
+msgctxt "tfimagelist.tbopenprevsw.hint"
+msgid "Open previous image"
+msgstr ""
+
+#: tfimagelist.tbremoveitem.hint
+msgid "Remove selected images from list"
+msgstr ""
+
+#: tfimagelist.tbuncheckall.hint
+msgid "Uncheck all files for processing"
+msgstr ""
+
+#: tfloading.caption
+msgctxt "tfloading.caption"
+msgid "Loading..."
+msgstr ""
+
+#: tfmotionblur.button_cancel.caption
+msgctxt "TFMOTIONBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr ""
+
+#: tfmotionblur.button_ok.caption
+msgctxt "TFMOTIONBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfmotionblur.caption
+msgctxt "tfmotionblur.caption"
+msgid "Motion blur"
+msgstr ""
+
+#: tfmotionblur.checkbox_oriented.caption
+msgid "Oriented"
+msgstr ""
+
+#: tfmotionblur.label_distance.caption
+msgctxt "tfmotionblur.label_distance.caption"
+msgid "Distance :"
+msgstr ""
+
+#: tfmultiimage.button_cancel.caption
+msgctxt "tfmultiimage.button_cancel.caption"
+msgid "Cancel"
+msgstr ""
+
+#: tfmultiimage.button_ok.caption
+msgctxt "tfmultiimage.button_ok.caption"
+msgid "OK"
+msgstr ""
+
+#: tfmultiimage.caption
+msgid "Choose image"
+msgstr ""
+
+#: tfnewimage.button_cancel.caption
+msgctxt "TFNEWIMAGE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr ""
+
+#: tfnewimage.button_ok.caption
+msgctxt "TFNEWIMAGE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfnewimage.caption
+msgctxt "tfnewimage.caption"
+msgid "New image"
+msgstr ""
+
+#: tfnewimage.combobox_bitdepth.text
+msgid "32"
+msgstr ""
+
+#: tfnewimage.label_bitdepth.caption
+msgid "Bit depth :"
+msgstr ""
+
+#: tfnewimage.label_height.caption
+msgctxt "tfnewimage.label_height.caption"
+msgid "Height :"
+msgstr ""
+
+#: tfnewimage.label_height1.caption
+msgid "Ratio :"
+msgstr ""
+
+#: tfnewimage.label_memoryrequired.caption
+msgid "Memory required :"
+msgstr ""
+
+#: tfnewimage.label_width.caption
+msgctxt "tfnewimage.label_width.caption"
+msgid "Width :"
+msgstr ""
+
+#: tfnoisefilter.button_cancel.caption
+msgctxt "tfnoisefilter.button_cancel.caption"
+msgid "Cancel"
+msgstr ""
+
+#: tfnoisefilter.button_ok.caption
+msgctxt "tfnoisefilter.button_ok.caption"
+msgid "OK"
+msgstr ""
+
+#: tfnoisefilter.caption
+msgid "Noise filter"
+msgstr ""
+
+#: tfnoisefilter.label_opacity.caption
+msgid "Opacity:"
+msgstr ""
+
+#: tfnoisefilter.radio_grayscalenoise.caption
+msgid "Grayscale noise"
+msgstr ""
+
+#: tfnoisefilter.radio_rgbnoise.caption
+msgid "RGB noise"
+msgstr ""
+
+#: tfobject3d.button_cancel.caption
+msgctxt "tfobject3d.button_cancel.caption"
+msgid "Cancel"
+msgstr ""
+
+#: tfobject3d.button_loadtex.caption
+msgid "Texture..."
+msgstr ""
+
+#: tfobject3d.button_notex.caption
+msgid "No tex."
+msgstr ""
+
+#: tfobject3d.button_ok.caption
+msgctxt "tfobject3d.button_ok.caption"
+msgid "OK"
+msgstr ""
+
+#: tfobject3d.caption
+msgid "3D object"
+msgstr ""
+
+#: tfobject3d.checkbox_antialiasing.caption
+msgid "Antialiasing"
+msgstr ""
+
+#: tfobject3d.checkbox_biface.caption
+msgid "2-sided faces"
+msgstr ""
+
+#: tfobject3d.checkbox_textureinterp.caption
+msgid "Texture interpolation"
+msgstr ""
+
+#: tfobject3d.groupbox_selectedlight.caption
+msgid "Selected light"
+msgstr ""
+
+#: tfobject3d.groupbox_selectedmaterial.caption
+msgctxt "tfobject3d.groupbox_selectedmaterial.caption"
+msgid "Selected material"
+msgstr ""
+
+#: tfobject3d.label_color.caption
+msgctxt "tfobject3d.label_color.caption"
+msgid "Color :"
+msgstr ""
+
+#: tfobject3d.label_color1.caption
+msgctxt "tfobject3d.label_color1.caption"
+msgid "Color :"
+msgstr ""
+
+#: tfobject3d.label_height.caption
+msgctxt "tfobject3d.label_height.caption"
+msgid "Height :"
+msgstr ""
+
+#: tfobject3d.label_lightingnormals.caption
+msgctxt "tfobject3d.label_lightingnormals.caption"
+msgid "Lighting normals :"
+msgstr ""
+
+#: tfobject3d.label_lights.caption
+msgid "Lights :"
+msgstr ""
+
+#: tfobject3d.label_materials.caption
+msgctxt "tfobject3d.label_materials.caption"
+msgid "Materials :"
+msgstr ""
+
+#: tfobject3d.label_opacity.caption
+msgctxt "tfobject3d.label_opacity.caption"
+msgid "Opacity :"
+msgstr ""
+
+#: tfobject3d.label_specularindex.caption
+msgctxt "tfobject3d.label_specularindex.caption"
+msgid "Spec. index :"
+msgstr ""
+
+#: tfobject3d.label_width.caption
+msgctxt "tfobject3d.label_width.caption"
+msgid "Width :"
+msgstr ""
+
+#: tfobject3d.label_zoom.caption
+msgctxt "tfobject3d.label_zoom.caption"
+msgid "Zoom"
+msgstr ""
+
+#: tfobject3d.lights.caption
+msgid "Lights"
+msgstr ""
+
+#: tfobject3d.materials.caption
+msgid "Materials"
+msgstr ""
+
+#: tfobject3d.opentexturedialog.title
+msgctxt "tfobject3d.opentexturedialog.title"
+msgid "Open texture"
+msgstr ""
+
+#: tfobject3d.rendering.caption
+msgid "Rendering"
+msgstr ""
+
+#: tfobject3d.tooladddirectional.hint
+msgid "Add a directional light"
+msgstr ""
+
+#: tfobject3d.toolpointlight.hint
+msgid "Add a point light"
+msgstr ""
+
+#: tfobject3d.toolremoveselectedlight.hint
+msgid "Remove selected light"
+msgstr ""
+
+#: tfphongfilter.button_cancel.caption
+msgctxt "tfphongfilter.button_cancel.caption"
+msgid "Cancel"
+msgstr ""
+
+#: tfphongfilter.button_ok.caption
+msgctxt "tfphongfilter.button_ok.caption"
+msgid "OK"
+msgstr ""
+
+#: tfphongfilter.caption
+msgctxt "tfphongfilter.caption"
+msgid "Shaded map"
+msgstr ""
+
+#: tfphongfilter.groupbox_color.caption
+msgctxt "tfphongfilter.groupbox_color.caption"
+msgid "Color"
+msgstr ""
+
+#: tfphongfilter.groupbox_color1.caption
+msgid "Altitude map"
+msgstr ""
+
+#: tfphongfilter.label_altitude.caption
+msgid "Global altitude :"
+msgstr ""
+
+#: tfphongfilter.label_lightposition.caption
+msgid "Light position :"
+msgstr ""
+
+#: tfphongfilter.radio_mapalpha.caption
+msgid "Alpha"
+msgstr ""
+
+#: tfphongfilter.radio_mapblue.caption
+msgid "B"
+msgstr ""
+
+#: tfphongfilter.radio_mapgreen.caption
+msgid "G"
+msgstr ""
+
+#: tfphongfilter.radio_maplightness.caption
+msgctxt "tfphongfilter.radio_maplightness.caption"
+msgid "Lightness"
+msgstr ""
+
+#: tfphongfilter.radio_maplinearlightness.caption
+msgid "Linear lightness"
+msgstr ""
+
+#: tfphongfilter.radio_mapred.caption
+msgid "R"
+msgstr ""
+
+#: tfphongfilter.radio_mapsaturation.caption
+msgctxt "tfphongfilter.radio_mapsaturation.caption"
+msgid "Saturation"
+msgstr ""
+
+#: tfphongfilter.radio_usebackcolor.caption
+msgid "Back color"
+msgstr ""
+
+#: tfphongfilter.radio_usekeep.caption
+msgid "Keep"
+msgstr ""
+
+#: tfphongfilter.radio_usepencolor.caption
+msgid "Pen color"
+msgstr ""
+
+#: tfphongfilter.radio_usetexture.caption
+msgctxt "tfphongfilter.radio_usetexture.caption"
+msgid "Current texture"
+msgstr ""
+
+#: tfpixelate.button_cancel.caption
+msgctxt "TFPIXELATE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr ""
+
+#: tfpixelate.button_ok.caption
+msgctxt "TFPIXELATE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfpixelate.caption
+msgctxt "tfpixelate.caption"
+msgid "Pixelate"
+msgstr ""
+
+#: tfpixelate.label_pixelsize.caption
+msgctxt "tfpixelate.label_pixelsize.caption"
+msgid "Pixel size :"
+msgstr ""
+
+#: tfpixelate.label_quality.caption
+msgctxt "tfpixelate.label_quality.caption"
+msgid "Quality :"
+msgstr ""
+
+#: tfposterize.button_cancel.caption
+msgctxt "tfposterize.button_cancel.caption"
+msgid "Cancel"
+msgstr ""
+
+#: tfposterize.button_ok.caption
+msgctxt "tfposterize.button_ok.caption"
+msgid "OK"
+msgstr ""
+
+#: tfposterize.caption
+msgctxt "tfposterize.caption"
+msgid "Posterize"
+msgstr ""
+
+#: tfposterize.checkbox_bylightness.caption
+msgid "By lightness"
+msgstr ""
+
+#: tfposterize.label_levels.caption
+msgid "Levels :"
+msgstr ""
+
+#: tfpreviewdialog.caption
+msgid "Preview"
+msgstr ""
+
+#: tfpreviewdialog.lstatus.caption
+msgctxt "tfpreviewdialog.lstatus.caption"
+msgid "."
+msgstr ""
+
+#: tfprint.button_configureprinter.caption
+msgid "Configure..."
+msgstr ""
+
+#: tfprint.button_print.caption
+msgid "Print!"
+msgstr ""
+
+#: tfprint.button_zoomfit.caption
+msgctxt "tfprint.button_zoomfit.caption"
+msgid "Zoom fit"
+msgstr ""
+
+#: tfprint.caption
+msgid "Print"
+msgstr ""
+
+#: tfprint.checkbox_ratio.caption
+msgctxt "tfprint.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr ""
+
+#: tfprint.groupbox_imagesize.caption
+msgid "Image size"
+msgstr ""
+
+#: tfprint.groupbox_margins.caption
+msgid "Margins"
+msgstr ""
+
+#: tfprint.label_bottom.caption
+msgid "Bottom:"
+msgstr ""
+
+#: tfprint.label_dpix.caption
+msgctxt "tfprint.label_dpix.caption"
+msgid "."
+msgstr ""
+
+#: tfprint.label_dpiy.caption
+msgctxt "tfprint.label_dpiy.caption"
+msgid "."
+msgstr ""
+
+#: tfprint.label_height.caption
+msgid "Height:"
+msgstr ""
+
+#: tfprint.label_left.caption
+msgid "Left:"
+msgstr ""
+
+#: tfprint.label_orientation.caption
+msgid "Orientation:"
+msgstr ""
+
+#: tfprint.label_printerandpaper.caption
+msgid "Printer and paper:"
+msgstr ""
+
+#: tfprint.label_right.caption
+msgid "Right:"
+msgstr ""
+
+#: tfprint.label_top.caption
+msgid "Top:"
+msgstr ""
+
+#: tfprint.label_width.caption
+msgid "Width:"
+msgstr ""
+
+#: tfquestion.caption
+msgid "Question"
+msgstr ""
+
+#: tfquestion.checkbox_rememberchoice.caption
+msgid "Remember this choice"
+msgstr ""
+
+#: tfquestion.label_message.caption
+msgctxt "tfquestion.label_message.caption"
+msgid "."
+msgstr ""
+
+#: tfradialblur.button_cancel.caption
+msgctxt "TFRADIALBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr ""
+
+#: tfradialblur.button_ok.caption
+msgctxt "TFRADIALBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfradialblur.caption
+msgctxt "tfradialblur.caption"
+msgid "Radial blur"
+msgstr ""
+
+#: tfradialblur.label_radius.caption
+msgctxt "tfradialblur.label_radius.caption"
+msgid "Radius :"
+msgstr ""
+
+#: tfrain.button_cancel.caption
+msgctxt "tfrain.button_cancel.caption"
+msgid "Cancel"
+msgstr ""
+
+#: tfrain.button_ok.caption
+msgctxt "tfrain.button_ok.caption"
+msgid "OK"
+msgstr ""
+
+#: tfrain.caption
+msgid "Rain"
+msgstr ""
+
+#: tfrain.label_quantity.caption
+msgid "Quantity:"
+msgstr ""
+
+#: tfrain.label_wind.caption
+msgid "Wind :"
+msgstr ""
+
+#: tfresample.button_cancel.caption
+msgctxt "TFRESAMPLE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr ""
+
+#: tfresample.button_ok.caption
+msgctxt "TFRESAMPLE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfresample.caption
+msgctxt "tfresample.caption"
+msgid "Resample"
+msgstr ""
+
+#: tfresample.checkbox_ratio.caption
+msgctxt "tfresample.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr ""
+
+#: tfresample.label_height.caption
+msgctxt "tfresample.label_height.caption"
+msgid "Height :"
+msgstr ""
+
+#: tfresample.label_quality.caption
+msgctxt "tfresample.label_quality.caption"
+msgid "Quality :"
+msgstr ""
+
+#: tfresample.label_width.caption
+msgctxt "tfresample.label_width.caption"
+msgid "Width :"
+msgstr ""
+
+#: tfsaveoption.button_cancel.caption
+msgctxt "tfsaveoption.button_cancel.caption"
+msgid "Cancel"
+msgstr ""
+
+#: tfsaveoption.button_ok.caption
+msgctxt "tfsaveoption.button_ok.caption"
+msgid "OK"
+msgstr ""
+
+#: tfsaveoption.caption
+msgctxt "tfsaveoption.caption"
+msgid "Save"
+msgstr ""
+
+#: tfsaveoption.checkbox_dithering.caption
+msgid "Dithering"
+msgstr ""
+
+#: tfsaveoption.label1.caption
+msgid "Quality:"
+msgstr ""
+
+#: tfsaveoption.label_0.caption
+msgid "0"
+msgstr ""
+
+#: tfsaveoption.label_1.caption
+msgid "100"
+msgstr ""
+
+#: tfsaveoption.label_50.caption
+msgid "50"
+msgstr ""
+
+#: tfsaveoption.label_colordepth.caption
+msgid "Color depth:"
+msgstr ""
+
+#: tfsaveoption.label_size.caption
+msgid "Size:"
+msgstr ""
+
+#: tfsaveoption.radiobutton_16colors.caption
+msgid "16 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_24bitsperpixel.caption
+msgid "24 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_256colors.caption
+msgid "256 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_2colors.caption
+msgid "2 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_32bitsperpixel.caption
+msgid "32 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_miomap.caption
+msgid "MioMap"
+msgstr ""
+
+#: tfsharpen.button_cancel.caption
+msgctxt "tfsharpen.button_cancel.caption"
+msgid "Cancel"
+msgstr ""
+
+#: tfsharpen.button_ok.caption
+msgctxt "tfsharpen.button_ok.caption"
+msgid "OK"
+msgstr ""
+
+#: tfsharpen.caption
+msgid "Sharpen/Smooth"
+msgstr ""
+
+#: tfsharpen.label_amount.caption
+msgctxt "tfsharpen.label_amount.caption"
+msgid "Amount :"
+msgstr ""
+
+#: tfshiftcolors.button_cancel.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr ""
+
+#: tfshiftcolors.button_ok.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfshiftcolors.caption
+msgctxt "tfshiftcolors.caption"
+msgid "Shift colors"
+msgstr ""
+
+#: tfshiftcolors.checkbox_gsba.caption
+msgctxt "tfshiftcolors.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr ""
+
+#: tfshiftcolors.label1.caption
+msgctxt "TFSHIFTCOLORS.LABEL1.CAPTION"
+msgid "Hue"
+msgstr ""
+
+#: tfshiftcolors.label2.caption
+msgctxt "TFSHIFTCOLORS.LABEL2.CAPTION"
+msgid "Saturation"
+msgstr ""
+
+#: tftoolbox.caption
+msgctxt "tftoolbox.caption"
+msgid "Tools"
+msgstr ""
+

+ 0 - 707
lazpaint/release/bin/i18n/lazpaint.pot

@@ -1,707 +0,0 @@
-msgid ""
-msgstr "Content-Type: text/plain; charset=UTF-8"
-
-#: uresourcestrings.rsactioninprogress
-msgid "Action in progress"
-msgstr ""
-
-#: uresourcestrings.rsaddtoimagelist
-msgid "Add files to the image processing list"
-msgstr ""
-
-#: uresourcestrings.rsallapplications
-msgid "all"
-msgstr ""
-
-#: uresourcestrings.rsallsupportedfiletypes
-msgid "All supported filetypes"
-msgstr ""
-
-#: uresourcestrings.rsaltshiftscalemode
-msgid "Hold ALT or SHIFT to scale"
-msgstr ""
-
-#: uresourcestrings.rsanimatedgif
-msgid "Animated GIF"
-msgstr ""
-
-#: uresourcestrings.rsbackspaceremovelastpoint
-msgid "Press BACKSPACE to remove last point"
-msgstr ""
-
-#: uresourcestrings.rsbestquality
-msgid "Best quality"
-msgstr ""
-
-#: uresourcestrings.rsbitmap
-msgid "Bitmap"
-msgstr ""
-
-#: uresourcestrings.rsblendopnotusedforbackground
-msgid "The blend operation is applied only if there is a layer underneath"
-msgstr ""
-
-#: uresourcestrings.rsblue
-msgid "Blue"
-msgstr ""
-
-#: uresourcestrings.rsbrightness
-msgid "Brightness"
-msgstr ""
-
-#: uresourcestrings.rsbytes
-msgid "Bytes"
-msgstr ""
-
-#: uresourcestrings.rscancel
-msgid "Cancel"
-msgstr ""
-
-#: uresourcestrings.rscannotopenfile
-msgid "Cannot open file"
-msgstr ""
-
-#: uresourcestrings.rscanvassize
-msgid "Canvas size"
-msgstr ""
-
-#: uresourcestrings.rscdrom
-msgid "CD"
-msgstr ""
-
-#: uresourcestrings.rsclearpalette
-msgid "Clear palette"
-msgstr ""
-
-#: uresourcestrings.rscloserequest
-msgid "Close request"
-msgstr ""
-
-#: uresourcestrings.rscolors
-msgid "Colors"
-msgstr ""
-
-#: uresourcestrings.rsconfirmdeletefromcontainer
-msgid "Are you sure you want to delete this file from the container?"
-msgstr ""
-
-#: uresourcestrings.rsconfirmdeletemultiplefromcontainer
-msgid "Are you sure you want to delete these %1 files from the container?"
-msgstr ""
-
-#: uresourcestrings.rsconfirmmovemultipletotrash
-msgid "Are you sure you want to move these %1 files to the trash?"
-msgstr ""
-
-#: uresourcestrings.rsconfirmmovetotrash
-msgid "Are you sure you want to move this file to the trash?"
-msgstr ""
-
-#: uresourcestrings.rsconflictingactions
-msgid "Conflicting actions"
-msgstr ""
-
-#: uresourcestrings.rscontrast
-msgid "Contrast"
-msgstr ""
-
-#: uresourcestrings.rscorrectedhueccw
-msgid "Corr. Hue CCW"
-msgstr ""
-
-#: uresourcestrings.rscorrectedhuecw
-msgid "Corr. Hue CW"
-msgstr ""
-
-#: uresourcestrings.rscosine
-msgid "Cosine"
-msgstr ""
-
-#: uresourcestrings.rscrop
-msgid "Crop"
-msgstr ""
-
-#: uresourcestrings.rsctrlrestrictrotation
-msgid "Hold CTRL to restrict rotation angle"
-msgstr ""
-
-#: uresourcestrings.rscurvemodehint
-msgid "Press S or X to set the curve mode of the last point"
-msgstr ""
-
-#: uresourcestrings.rsdefaultpalette
-msgid "Default palette"
-msgstr ""
-
-#: uresourcestrings.rsdeletefile
-msgid "Delete"
-msgstr ""
-
-#: uresourcestrings.rsdeleteimageentry
-msgid "Delete selected image entry?"
-msgstr ""
-
-#: uresourcestrings.rsdirectorynotempty
-msgid "Directory is not empty"
-msgstr ""
-
-#: uresourcestrings.rsditherlayerusingpalette
-msgid "Dither layer using palette"
-msgstr ""
-
-#: uresourcestrings.rseditmask
-msgid "Edit mask"
-msgstr ""
-
-#: uresourcestrings.rseditselection
-msgid "Edit selection"
-msgstr ""
-
-#: uresourcestrings.rsedittexture
-msgid "Edit texture"
-msgstr ""
-
-#: uresourcestrings.rsemptylayer
-msgid "Layer is empty"
-msgstr ""
-
-#: uresourcestrings.rsemptyselection
-msgid "Selection is empty"
-msgstr ""
-
-#: uresourcestrings.rsenterfolderorcontainername
-msgid "Enter name for new folder or container (using RES or LRS extension):"
-msgstr ""
-
-#: uresourcestrings.rsenterlayername
-msgid "Enter layer name:"
-msgstr ""
-
-#: uresourcestrings.rsentries
-msgid "Entries"
-msgstr ""
-
-#: uresourcestrings.rserror
-msgid "Error"
-msgstr ""
-
-#: uresourcestrings.rserroronopeningfile
-msgid "Error on opening file \"%1\""
-msgstr ""
-
-#: uresourcestrings.rsexitrequest
-msgid "Exit request"
-msgstr ""
-
-#: uresourcestrings.rsexpect1parameter
-msgid "expects one parameter : "
-msgstr ""
-
-#: uresourcestrings.rsexpect2parameters
-msgid "expects two parameters : "
-msgstr ""
-
-#: uresourcestrings.rsexpectnparameters
-msgid "expects N parameters : "
-msgstr ""
-
-#: uresourcestrings.rsfast
-msgid "Fast"
-msgstr ""
-
-#: uresourcestrings.rsfilecannotbeempty
-msgid "File cannot be empty"
-msgstr ""
-
-#: uresourcestrings.rsfiledate
-msgid "Date"
-msgstr ""
-
-#: uresourcestrings.rsfileextensionnotsupported
-msgid "This file extension is not supported."
-msgstr ""
-
-#: uresourcestrings.rsfileformatnotrecognized
-msgid "The file format has not been recognized."
-msgstr ""
-
-#: uresourcestrings.rsfilename
-msgid "Filename"
-msgstr ""
-
-#: uresourcestrings.rsfilenotfound
-msgid "File not found!"
-msgstr ""
-
-#: uresourcestrings.rsfilenotsaved
-msgid "File not saved"
-msgstr ""
-
-#: uresourcestrings.rsfilesize
-msgid "Size"
-msgstr ""
-
-#: uresourcestrings.rsfilesystem
-msgid "File system"
-msgstr ""
-
-#: uresourcestrings.rsfiletype
-msgid "Type"
-msgstr ""
-
-#: uresourcestrings.rsfixeddrive
-msgid "Fixed"
-msgstr ""
-
-#: uresourcestrings.rsfolder
-msgid "Folder"
-msgstr ""
-
-#: uresourcestrings.rsfolderorcontaineralreadyexists
-msgid "Folder or container already exists."
-msgstr ""
-
-#: uresourcestrings.rsfollowingerrorsoccured
-msgid "Following errors occured:"
-msgstr ""
-
-#: uresourcestrings.rsframes
-msgid "Frames"
-msgstr ""
-
-#: uresourcestrings.rsfunctionnotdefined
-msgid "The function %1 is not defined."
-msgstr ""
-
-#: uresourcestrings.rsgreen
-msgid "Green"
-msgstr ""
-
-#: uresourcestrings.rshalfcosine
-msgid "Half-cosine"
-msgstr ""
-
-#: uresourcestrings.rsholdctrlsnaptopixel
-msgid "Hold CTRL to snap to pixels"
-msgstr ""
-
-#: uresourcestrings.rsholdshiftforsquare
-msgid "Hold SHIFT to draw a square or a circle"
-msgstr ""
-
-#: uresourcestrings.rshotspot
-msgid "Hot spot"
-msgstr ""
-
-#: uresourcestrings.rshue
-msgid "Hue"
-msgstr ""
-
-#: uresourcestrings.rshueccw
-msgid "Hue CCW"
-msgstr ""
-
-#: uresourcestrings.rshuecw
-msgid "Hue CW"
-msgstr ""
-
-#: uresourcestrings.rsiconimagealreadyexists
-msgid "There is already an image with this size and depth."
-msgstr ""
-
-#: uresourcestrings.rsiconorcursor
-msgid "Icon/cursor"
-msgstr ""
-
-#: uresourcestrings.rsimagetoobig
-msgid "Image is too big"
-msgstr ""
-
-#: uresourcestrings.rsinfinity
-msgid "Infinity"
-msgstr ""
-
-#: uresourcestrings.rsinformation
-msgid "Information"
-msgstr ""
-
-#: uresourcestrings.rsintensity
-msgid "Intensity"
-msgstr ""
-
-#: uresourcestrings.rsinternalerror
-msgid "Internal error"
-msgstr ""
-
-#: uresourcestrings.rsinvalidname
-msgid "Invalid name"
-msgstr ""
-
-#: uresourcestrings.rsinvalidopacity
-msgid "Invalid opacity : "
-msgstr ""
-
-#: uresourcestrings.rsinvalidresamplesize
-msgid "Invalid resample size : "
-msgstr ""
-
-#: uresourcestrings.rsinvalidsizefornew
-msgid "Invalid size for new : "
-msgstr ""
-
-#: uresourcestrings.rskeepchanges
-msgid "Do you want to keep changes?"
-msgstr ""
-
-#: uresourcestrings.rskeepemptyspace
-msgid "Keep empty space around opaque pixels?"
-msgstr ""
-
-#: uresourcestrings.rslanczos
-msgid "Lanczos %1"
-msgstr ""
-
-#: uresourcestrings.rslandscape
-msgid "Landscape"
-msgstr ""
-
-#: uresourcestrings.rslatestversion
-msgid "The latest version of LazPaint available online is"
-msgstr ""
-
-#: uresourcestrings.rslayeredimage
-msgid "Layered image"
-msgstr ""
-
-#: uresourcestrings.rslayers
-msgid "Layers"
-msgstr ""
-
-#: uresourcestrings.rslazpaint
-msgid "LazPaint"
-msgstr ""
-
-#: uresourcestrings.rslazpaintonly
-msgid "LazPaint only"
-msgstr ""
-
-#: uresourcestrings.rslight
-msgid "Light"
-msgstr ""
-
-#: uresourcestrings.rslightness
-msgid "Lightness"
-msgstr ""
-
-#: uresourcestrings.rslightposition
-msgid "Light position"
-msgstr ""
-
-#: uresourcestrings.rslinear
-msgid "Linear"
-msgstr ""
-
-#: uresourcestrings.rslinearrgb
-msgid "Linear RGB"
-msgstr ""
-
-#: uresourcestrings.rsloadandmergepalette
-msgid "Load and merge palette..."
-msgstr ""
-
-#: uresourcestrings.rsloading
-msgid "Loading"
-msgstr ""
-
-#: uresourcestrings.rsloadpalette
-msgid "Load palette..."
-msgstr ""
-
-#: uresourcestrings.rsloopcount
-msgid "Loop count"
-msgstr ""
-
-#: uresourcestrings.rsmakencolorspalettefrombitmap
-msgid "Make %1-colors palette from image"
-msgstr ""
-
-#: uresourcestrings.rsmergeselection
-msgid "Do you want to merge selection?"
-msgstr ""
-
-#: uresourcestrings.rsmitchell
-msgid "Mitchell"
-msgstr ""
-
-#: uresourcestrings.rsmorethanonefile
-msgid "You are trying to open more than one file. How would you like these files to be opened?"
-msgstr ""
-
-#: uresourcestrings.rsmovingorrotatingselection
-msgid "Moving or rotating selection"
-msgstr ""
-
-#: uresourcestrings.rsmustreleaseselection
-msgid "You must first release the selection"
-msgstr ""
-
-#: uresourcestrings.rsmustshowlayer
-msgid "You must first make the layer visible"
-msgstr ""
-
-#: uresourcestrings.rsnetworkdrive
-msgid "Network"
-msgstr ""
-
-#: uresourcestrings.rsnewimage
-msgid "New image"
-msgstr ""
-
-#: uresourcestrings.rsno
-msgid "No"
-msgstr ""
-
-#: uresourcestrings.rsnoactivelayer
-msgid "No active layer"
-msgstr ""
-
-#: uresourcestrings.rsnoactiveselection
-msgid "There is no active selection"
-msgstr ""
-
-#: uresourcestrings.rsnoandproceedtonext
-msgid "Do not save and open another file"
-msgstr ""
-
-#: uresourcestrings.rsnoname
-msgid "noname"
-msgstr ""
-
-#: uresourcestrings.rsnormalblendop
-msgid "Normal"
-msgstr ""
-
-#: uresourcestrings.rsnothingtobedeformed
-msgid "There is nothing to be deformed"
-msgstr ""
-
-#: uresourcestrings.rsnothingtoberetrieved
-msgid "There is nothing to be retrieved"
-msgstr ""
-
-#: uresourcestrings.rsnotreasonableformat
-msgid "It is not reasonable to save such a big image in this file format."
-msgstr ""
-
-#: uresourcestrings.rsnumber
-msgid "№"
-msgstr ""
-
-#: uresourcestrings.rsokay
-msgid "Okay"
-msgstr ""
-
-#: uresourcestrings.rsopacity
-msgid "Opacity"
-msgstr ""
-
-#: uresourcestrings.rsopen
-msgid "Open"
-msgstr ""
-
-#: uresourcestrings.rsopenfilesaslayers
-msgid "Open files as layers in a single image"
-msgstr ""
-
-#: uresourcestrings.rsopenfirstfileonly
-msgid "Open the first file only"
-msgstr ""
-
-#: uresourcestrings.rsopening
-msgid "Opening"
-msgstr ""
-
-#: uresourcestrings.rsopenmultipleimagefiles
-msgid "Open multiple image files"
-msgstr ""
-
-#: uresourcestrings.rsotherblendop
-msgid "Other..."
-msgstr ""
-
-#: uresourcestrings.rsoverwritefile
-msgid "File already exists. Do you want to overwrite it?"
-msgstr ""
-
-#: uresourcestrings.rspaletteincludesalphachannel
-msgid "Palette includes alpha channel"
-msgstr ""
-
-#: uresourcestrings.rspaletteoptions
-msgid "Palette options"
-msgstr ""
-
-#: uresourcestrings.rspercent
-msgid "%"
-msgstr ""
-
-#: uresourcestrings.rsportait
-msgid "Portrait"
-msgstr ""
-
-#: uresourcestrings.rsposterizelayerusingpalette
-msgid "Posterize layer using palette"
-msgstr ""
-
-#: uresourcestrings.rspresetname
-msgid "Preset name"
-msgstr ""
-
-#: uresourcestrings.rspx
-msgid "px"
-msgstr ""
-
-#: uresourcestrings.rsramdisk
-msgid "RAM disk"
-msgstr ""
-
-#: uresourcestrings.rsrecentdirectories
-msgid "Recent directories:"
-msgstr ""
-
-#: uresourcestrings.rsred
-msgid "Red"
-msgstr ""
-
-#: uresourcestrings.rsreload
-msgid "Reload"
-msgstr ""
-
-#: uresourcestrings.rsreloadchanged
-msgid "Bitmap has been modified. Do you really want to reload?"
-msgstr ""
-
-#: uresourcestrings.rsremovabledrive
-msgid "Removable"
-msgstr ""
-
-#: uresourcestrings.rsrepeatimage
-msgid "Repeat image"
-msgstr ""
-
-#: uresourcestrings.rsretrieveselectedarea
-msgid "Do you want to retrieve selected area?"
-msgstr ""
-
-#: uresourcestrings.rsreturnvalides
-msgid "Press ENTER to validate"
-msgstr ""
-
-#: uresourcestrings.rsrgb
-msgid "RGB"
-msgstr ""
-
-#: uresourcestrings.rsrightclickforsource
-msgid "Use RIGHT click to define source"
-msgstr ""
-
-#: uresourcestrings.rssaturation
-msgid "Saturation"
-msgstr ""
-
-#: uresourcestrings.rssave
-msgid "Save"
-msgstr ""
-
-#: uresourcestrings.rssaveasbuttonhint
-msgid "Save with specified filename"
-msgstr ""
-
-#: uresourcestrings.rssavechanges
-msgid "Current bitmap has been modified. Do you want to save changes?"
-msgstr ""
-
-#: uresourcestrings.rssavepaletteas
-msgid "Save palette as..."
-msgstr ""
-
-#: uresourcestrings.rsscript
-msgid "Script"
-msgstr ""
-
-#: uresourcestrings.rsshowpalette
-msgid "Show palette"
-msgstr ""
-
-#: uresourcestrings.rssourceposition
-msgid "Source position"
-msgstr ""
-
-#: uresourcestrings.rsspline
-msgid "Spline"
-msgstr ""
-
-#: uresourcestrings.rsstoragedevice
-msgid "Device"
-msgstr ""
-
-#: uresourcestrings.rstexturemapping
-msgid "Texture mapping"
-msgstr ""
-
-#: uresourcestrings.rstherearenocheckeditems
-msgid "There are no checked items. Check some items or add some new ones."
-msgstr ""
-
-#: uresourcestrings.rsthereisnofilenamegivenforthisfileusesaveas
-msgid "There is no file name given for this file. Use \"Save as...\" from the main menu."
-msgstr ""
-
-#: uresourcestrings.rstodo
-msgid "To do"
-msgstr ""
-
-#: uresourcestrings.rstodoimages
-msgid "Images left: %1"
-msgstr ""
-
-#: uresourcestrings.rstooloninvisiblelayer
-msgid "Tool cannot be used on an invisible layer"
-msgstr ""
-
-#: uresourcestrings.rstoomanylayers
-msgid "Too many layers"
-msgstr ""
-
-#: uresourcestrings.rstotalimages
-msgid "Total images: %1"
-msgstr ""
-
-#: uresourcestrings.rstransferselectiontootherlayer
-msgid "Transfer selection to other layer?"
-msgstr ""
-
-#: uresourcestrings.rstransformselectioncontent
-msgid "Do you want to transform content of the selection?"
-msgstr ""
-
-#: uresourcestrings.rsunabletoapplyfilter
-msgid "Unable to apply filter : "
-msgstr ""
-
-#: uresourcestrings.rsunabletoloadfile
-msgid "Unable to load file : "
-msgstr ""
-
-#: uresourcestrings.rsunabletosavefile
-msgid "Unable to save file : "
-msgstr ""
-
-#: uresourcestrings.rsunknowncommand
-msgid "Unknown command : "
-msgstr ""
-
-#: uresourcestrings.rsyes
-msgid "Yes"
-msgstr ""
-

+ 1211 - 12
lazpaint/release/bin/i18n/lazpaint.pt_BR.po

@@ -1560,9 +1560,9 @@ msgstr "todos"
 msgid "All supported filetypes"
 msgstr ""
 
-#: uresourcestrings.rsaltshiftscalemode
-msgid "Hold ALT or SHIFT to scale"
-msgstr "Pressione ALT ou SHIFT para alongar"
+#: uresourcestrings.rsholdkeysscalemode
+msgid "Hold %1 or %2 to scale"
+msgstr "Pressione %1 ou %2 para alongar"
 
 #: uresourcestrings.rsanimatedgif
 msgid "Animated GIF"
@@ -1677,9 +1677,9 @@ msgstr "Co-seno"
 msgid "Crop"
 msgstr "Cortar"
 
-#: uresourcestrings.rsctrlrestrictrotation
-msgid "Hold CTRL to restrict rotation angle"
-msgstr "Segurar Ctrl para restringir o ângulo de rotação"
+#: uresourcestrings.rsholdkeyrestrictrotation
+msgid "Hold %1 to restrict rotation angle"
+msgstr "Segurar %1 para restringir o ângulo de rotação"
 
 #: uresourcestrings.rscurvemodehint
 msgid "Press S or X to set the curve mode of the last point"
@@ -1706,6 +1706,10 @@ msgstr ""
 msgid "Dither layer using palette"
 msgstr ""
 
+#: uresourcestrings.rsduplicateimage
+msgid "Duplicate image"
+msgstr "Duplicar imagem"
+
 #: uresourcestrings.rseditmask
 msgid "Edit mask"
 msgstr "Editar máscara"
@@ -1842,13 +1846,13 @@ msgstr ""
 msgid "Half-cosine"
 msgstr "Meio-cosseno"
 
-#: uresourcestrings.rsholdctrlsnaptopixel
-msgid "Hold CTRL to snap to pixels"
-msgstr "Segurar CTRL para tirar pixels"
+#: uresourcestrings.rsholdkeysnaptopixel
+msgid "Hold %1 to snap to pixels"
+msgstr "Segurar %1 para tirar pixels"
 
-#: uresourcestrings.rsholdshiftforsquare
-msgid "Hold SHIFT to draw a square or a circle"
-msgstr "Segurar SHIFT para desenhar um quadrado ou um círculo"
+#: uresourcestrings.rsholdkeyforsquare
+msgid "Hold %1 to draw a square or a circle"
+msgstr "Segurar %1 para desenhar um quadrado ou um círculo"
 
 #: uresourcestrings.rshotspot
 msgctxt "uresourcestrings.rshotspot"
@@ -2311,3 +2315,1198 @@ msgstr ""
 msgid "Yes"
 msgstr ""
 
+#: tablet.getprocfailed
+msgid "Procedure %s failed to load properly."
+msgstr ""
+
+#: tablet.openfailed
+msgid "Tablet context failed to open."
+msgstr ""
+
+#: tfabout.button_donate.caption
+msgctxt "tfabout.button_donate.caption"
+msgid "Donate..."
+msgstr "Doar..."
+
+#: tfabout.caption
+msgctxt "TFABOUT.CAPTION"
+msgid "About"
+msgstr "Sobre"
+
+#: tfabout.labelurl.caption
+msgid "http://sourceforge.net/projects/lazpaint/"
+msgstr ""
+
+#: tfabout.label_authors.caption
+msgctxt "TFABOUT.LABEL_AUTHORS.CAPTION"
+msgid "Authors:"
+msgstr "Autores:"
+
+#: tfabout.label_authorsvalue.caption
+msgctxt "TFABOUT.LABEL_AUTHORSVALUE.CAPTION"
+msgid "Circular helped by FabienWang, Lainz and others"
+msgstr "Circular, ajuda por FabienWang e Lainz"
+
+#: tfabout.label_homepage.caption
+msgctxt "TFABOUT.LABEL_HOMEPAGE.CAPTION"
+msgid "Homepage:"
+msgstr "Página Inicial:"
+
+#: tfabout.label_libraries.caption
+msgctxt "TFABOUT.LABEL_LIBRARIES.CAPTION"
+msgid "Libraries used:"
+msgstr "Bibliotecas usadas:"
+
+#: tfabout.label_licence.caption
+msgctxt "TFABOUT.LABEL_LICENCE.CAPTION"
+msgid "Licence:"
+msgstr "Licença:"
+
+#: tfabout.label_opensource.caption
+msgctxt "TFABOUT.LABEL_OPENSOURCE.CAPTION"
+msgid "Open source (GPLv3)"
+msgstr ""
+
+#: tfadjustcurves.button_cancel.caption
+msgctxt "TFADJUSTCURVES.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfadjustcurves.button_ok.caption
+msgctxt "TFADJUSTCURVES.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfadjustcurves.caption
+msgid "Adjust curves"
+msgstr "Ajustar curvas"
+
+#: tfadjustcurves.toolbutton_newcurve.hint
+msgid "Discard current curve and start a new one"
+msgstr "Descartar curva atual e iniciar uma nova"
+
+#: tfadjustcurves.toolbutton_posterize.hint
+msgctxt "tfadjustcurves.toolbutton_posterize.hint"
+msgid "Posterize"
+msgstr "Posterizar"
+
+#: tfadjustcurves.toolbutton_removepoint.hint
+msgid "Remove selected point (Del)"
+msgstr "Remover ponto selecionado (Del)"
+
+#: tfblendop.button_cancel.caption
+msgctxt "TFBLENDOP.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfblendop.button_ok.caption
+msgctxt "TFBLENDOP.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfblendop.caption
+msgid "Blend operation"
+msgstr "operação de mesclagem"
+
+#: tfblendop.label_blendopcategory.caption
+msgctxt "TFBLENDOP.LABEL_BLENDOPCATEGORY.CAPTION"
+msgid "Category of blend operation"
+msgstr "Categoria de operação de mesclagem"
+
+#: tfblendop.label_blendopvalue.caption
+msgctxt "tfblendop.label_blendopvalue.caption"
+msgid "."
+msgstr ""
+
+#: tfblendop.label_kritaover.caption
+msgctxt "TFBLENDOP.LABEL_KRITAOVER.CAPTION"
+msgid "Krita"
+msgstr ""
+
+#: tfblendop.label_kritaover.hint
+msgid "Blend operations that are available in Krita"
+msgstr "Mesclar operações que estão disponíveis em Krita"
+
+#: tfblendop.label_otherover.caption
+msgctxt "TFBLENDOP.LABEL_OTHEROVER.CAPTION"
+msgid "Other"
+msgstr "Outro"
+
+#: tfblendop.label_otherover.hint
+msgid "Blend operations of LazPaint and Paint.NET"
+msgstr "Operações de mesclagem de LazPaint e Paint.NET"
+
+#: tfblendop.label_patternover.caption
+msgctxt "TFBLENDOP.LABEL_PATTERNOVER.CAPTION"
+msgid "Pattern over"
+msgstr "Padrão sobre"
+
+#: tfblendop.label_patternover.hint
+msgid "Preview blend operation with the specified image on top"
+msgstr "Pré-operação de mesclagem com a imagem especificada no topo"
+
+#: tfblendop.label_patternunder.caption
+msgctxt "TFBLENDOP.LABEL_PATTERNUNDER.CAPTION"
+msgid "Pattern under"
+msgstr "Padrão sob"
+
+#: tfblendop.label_patternunder.hint
+msgid "Preview blend operation with the specified image underneath"
+msgstr "Pré-operação de mesclagem com a imagem especificada por baixo"
+
+#: tfblendop.label_previewwith.caption
+msgctxt "TFBLENDOP.LABEL_PREVIEWWITH.CAPTION"
+msgid "Preview with"
+msgstr "Pré-visualização com"
+
+#: tfblendop.label_selectedblendop.caption
+msgid "Selected blend operation :"
+msgstr "Operação de mesclagem selecionada :"
+
+#: tfblendop.label_svgover.caption
+msgctxt "TFBLENDOP.LABEL_SVGOVER.CAPTION"
+msgid "Basic SVG"
+msgstr "SVG Básico"
+
+#: tfblendop.label_svgover.hint
+msgid "Basic blend operations that are available in virtually all image editors"
+msgstr "Operações de mesclagem básicas que estão disponíveis em praticamente todos os editores de imagem"
+
+#: tfbrowseimages.caption
+msgid "Browse images"
+msgstr "Navegue nas imagens"
+
+#: tfbrowseimages.checkbox_usedirectoryonstartup.caption
+msgid "Use this directory on startup"
+msgstr ""
+
+#: tfbrowseimages.label_status.caption
+msgctxt "tfbrowseimages.label_status.caption"
+msgid "."
+msgstr ""
+
+#: tfbrowseimages.toolbutton_createfolderorcontainer.hint
+msgid "Create folder or container"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_goup.hint
+msgid "Go one directory up"
+msgstr "Ir para um diretório acima"
+
+#: tfbrowseimages.toolbutton_openselectedfiles.hint
+msgid "Open selected files"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_viewbigicon.hint
+msgctxt "tfbrowseimages.toolbutton_viewbigicon.hint"
+msgid "Show big icons"
+msgstr "Mostrar ícones grandes"
+
+#: tfbrowseimages.toolbutton_viewdetails.hint
+msgctxt "tfbrowseimages.toolbutton_viewdetails.hint"
+msgid "Show details and preview"
+msgstr "Mostrar detalhes e pré-visualização"
+
+#: tfbrowseimages.tool_selectdrive.hint
+msgid "Select drive"
+msgstr ""
+
+#: tfcanvassize.button_cancel.caption
+msgctxt "TFCANVASSIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfcanvassize.button_ok.caption
+msgctxt "TFCANVASSIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfcanvassize.caption
+msgctxt "TFCANVASSIZE.CAPTION"
+msgid "Canvas size"
+msgstr "Tamanho da Tela da Imagem"
+
+#: tfcanvassize.checkbox_flipmode.caption
+msgid "Flip mode"
+msgstr "modo de inversão"
+
+#: tfcanvassize.label_anchor.caption
+msgctxt "TFCANVASSIZE.LABEL_ANCHOR.CAPTION"
+msgid "Anchor :"
+msgstr "Âncora :"
+
+#: tfcanvassize.label_height.caption
+msgctxt "TFCANVASSIZE.LABEL_HEIGHT.CAPTION"
+msgid "Height :"
+msgstr "Altura :"
+
+#: tfcanvassize.label_width.caption
+msgctxt "TFCANVASSIZE.LABEL_WIDTH.CAPTION"
+msgid "Width :"
+msgstr "Largura :"
+
+#: tfcolorintensity.button_cancel.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfcolorintensity.button_ok.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfcolorintensity.caption
+msgctxt "TFCOLORINTENSITY.CAPTION"
+msgid "Intensity"
+msgstr "Intensidade"
+
+#: tfcolorintensity.label_multiply.caption
+msgctxt "TFCOLORINTENSITY.LABEL_MULTIPLY.CAPTION"
+msgid "Multiply"
+msgstr "Multiplicar"
+
+#: tfcolorintensity.label_shift.caption
+msgctxt "TFCOLORINTENSITY.LABEL_SHIFT.CAPTION"
+msgid "Shift"
+msgstr "Alterar"
+
+#: tfcolorize.button_cancel.caption
+msgctxt "TFCOLORIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfcolorize.button_ok.caption
+msgctxt "TFCOLORIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfcolorize.caption
+msgctxt "TFCOLORIZE.CAPTION"
+msgid "Colorize"
+msgstr "Colorir"
+
+#: tfcolorize.checkbox_gsba.caption
+msgctxt "TFCOLORIZE.CHECKBOX_GSBA.CAPTION"
+msgid "Corrected hue and lightness"
+msgstr "Corrigida a tonalidade e luminosidade"
+
+#: tfcolorize.label_colorness.caption
+msgctxt "TFCOLORIZE.LABEL_COLORNESS.CAPTION"
+msgid "Colorness"
+msgstr "Saturação"
+
+#: tfcolorize.label_hue.caption
+msgctxt "TFCOLORIZE.LABEL_HUE.CAPTION"
+msgid "Hue"
+msgstr "Tonalidade"
+
+#: tfcolorize.label_preset.caption
+msgid "Preset"
+msgstr "Predefinida"
+
+#: tfcustomblur.button_cancel.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfcustomblur.button_editmask.caption
+msgid "Edit mask..."
+msgstr "Editar máscara..."
+
+#: tfcustomblur.button_loadmask.caption
+msgid "Load mask..."
+msgstr "Abrir máscara..."
+
+#: tfcustomblur.button_ok.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfcustomblur.caption
+msgctxt "TFCUSTOMBLUR.CAPTION"
+msgid "Custom blur"
+msgstr "Desfoque personalizado"
+
+#: tfcustomblur.openpicturedialog1.title
+msgid "Open grayscale file"
+msgstr "Abrir arquivo em tons de cinza"
+
+#: tfemboss.button_cancel.caption
+msgctxt "TFEMBOSS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfemboss.button_ok.caption
+msgctxt "TFEMBOSS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfemboss.caption
+msgctxt "TFEMBOSS.CAPTION"
+msgid "Emboss"
+msgstr "Realçar"
+
+#: tfemboss.checkbox_preservecolors.caption
+msgid "Preserve colors"
+msgstr ""
+
+#: tfemboss.checkbox_transparent.caption
+msgid "Transparent"
+msgstr ""
+
+#: tfemboss.label_direction.caption
+msgctxt "TFEMBOSS.LABEL_DIRECTION.CAPTION"
+msgid "Direction :"
+msgstr "Direção :"
+
+#: tffilterfunction.button_cancel.caption
+msgctxt "TFFILTERFUNCTION.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tffilterfunction.button_ok.caption
+msgctxt "TFFILTERFUNCTION.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tffilterfunction.caption
+msgid "Apply function"
+msgstr "Aplicar função"
+
+#: tffilterfunction.checkbox_gsba.caption
+msgctxt "TFFILTERFUNCTION.CHECKBOX_GSBA.CAPTION"
+msgid "Corrected hue and lightness"
+msgstr "Corrigida a tonalidade e luminosidade"
+
+#: tffilterfunction.label_alphaequals.caption
+msgctxt "tffilterfunction.label_alphaequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_blueequals.caption
+msgctxt "tffilterfunction.label_blueequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_greenequals.caption
+msgctxt "tffilterfunction.label_greenequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_hueequals.caption
+msgctxt "tffilterfunction.label_hueequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_lightnessequals.caption
+msgctxt "tffilterfunction.label_lightnessequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_redequals.caption
+msgctxt "tffilterfunction.label_redequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_saturationequals.caption
+msgctxt "tffilterfunction.label_saturationequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_variables.caption
+msgid "Variables :"
+msgstr "Variáveis :"
+
+#: tffilterfunction.tabsheet_hsl.caption
+msgid "HSL"
+msgstr ""
+
+#: tffilterfunction.tabsheet_rgb.caption
+msgctxt "tffilterfunction.tabsheet_rgb.caption"
+msgid "RGB"
+msgstr ""
+
+#: tfgeometricbrush.button_cancel.caption
+msgctxt "tfgeometricbrush.button_cancel.caption"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfgeometricbrush.button_ok.caption
+msgctxt "tfgeometricbrush.button_ok.caption"
+msgid "OK"
+msgstr ""
+
+#: tfgeometricbrush.caption
+msgid "Geometric brush"
+msgstr ""
+
+#: tfgeometricbrush.checkbox_isgradient.caption
+msgid "Opacity gradient"
+msgstr ""
+
+#: tfgeometricbrush.label1.caption
+msgid "Number of sides:"
+msgstr ""
+
+#: tfimagelist.caption
+msgid "Image List"
+msgstr ""
+
+#: tfimagelist.pmautouncheckonopen.caption
+msgid "Autouncheck files after being open"
+msgstr ""
+
+#: tfimagelist.pmautouncheckonsave.caption
+msgid "Autouncheck files after being edited and saved"
+msgstr ""
+
+#: tfimagelist.pmremoveall.caption
+msgid "Empty image list"
+msgstr ""
+
+#: tfimagelist.pmremovenonexisting.caption
+msgid "Remove nonexisting images"
+msgstr ""
+
+#: tfimagelist.pmremoveunchecked.caption
+msgid "Remove unchecked images"
+msgstr ""
+
+#: tfimagelist.pmunchecknonexisting.caption
+msgid "Uncheck nonexisting files"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[0].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[0].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[1].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[1].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[2].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[2].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[3].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[3].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.tbaddfiles.hint
+msgid "Add images to list"
+msgstr ""
+
+#: tfimagelist.tbautouncheck.hint
+msgid "Enable/disable autounchecking for processed files"
+msgstr ""
+
+#: tfimagelist.tbautozoomfit.hint
+msgid "Enable/disable autofitting images in the LazPaint window"
+msgstr ""
+
+#: tfimagelist.tbcheckall.hint
+msgid "Check all files for processing"
+msgstr ""
+
+#: tfimagelist.tbminiwindow.hint
+msgid "Switch to miniwindow"
+msgstr ""
+
+#: tfimagelist.tbmovedown.hint
+msgid "Move selected items down"
+msgstr ""
+
+#: tfimagelist.tbmoveup.hint
+msgid "Move selected items up"
+msgstr ""
+
+#: tfimagelist.tbnormalwindows.hint
+msgid "Switch to normal window"
+msgstr ""
+
+#: tfimagelist.tbopenimage.hint
+msgid "Open current image"
+msgstr ""
+
+#: tfimagelist.tbopennext.hint
+msgctxt "tfimagelist.tbopennext.hint"
+msgid "Open next image (Alt-Right)"
+msgstr ""
+
+#: tfimagelist.tbopennextsw.hint
+msgctxt "tfimagelist.tbopennextsw.hint"
+msgid "Open next image"
+msgstr ""
+
+#: tfimagelist.tbopenprev.hint
+msgctxt "tfimagelist.tbopenprev.hint"
+msgid "Open previous image (Alt-Left)"
+msgstr ""
+
+#: tfimagelist.tbopenprevsw.hint
+msgctxt "tfimagelist.tbopenprevsw.hint"
+msgid "Open previous image"
+msgstr ""
+
+#: tfimagelist.tbremoveitem.hint
+msgid "Remove selected images from list"
+msgstr ""
+
+#: tfimagelist.tbuncheckall.hint
+msgid "Uncheck all files for processing"
+msgstr ""
+
+#: tfloading.caption
+msgctxt "tfloading.caption"
+msgid "Loading..."
+msgstr "Carregando..."
+
+#: tfmotionblur.button_cancel.caption
+msgctxt "TFMOTIONBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfmotionblur.button_ok.caption
+msgctxt "TFMOTIONBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfmotionblur.caption
+msgctxt "TFMOTIONBLUR.CAPTION"
+msgid "Motion blur"
+msgstr "Borrão de movimento"
+
+#: tfmotionblur.checkbox_oriented.caption
+msgid "Oriented"
+msgstr "Orientado"
+
+#: tfmotionblur.label_distance.caption
+msgctxt "TFMOTIONBLUR.LABEL_DISTANCE.CAPTION"
+msgid "Distance :"
+msgstr "Distância:"
+
+#: tfmultiimage.button_cancel.caption
+msgctxt "TFMULTIIMAGE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfmultiimage.button_ok.caption
+msgctxt "TFMULTIIMAGE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfmultiimage.caption
+msgid "Choose image"
+msgstr "Escolher imagem"
+
+#: tfnewimage.button_cancel.caption
+msgctxt "TFNEWIMAGE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfnewimage.button_ok.caption
+msgctxt "TFNEWIMAGE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfnewimage.caption
+msgctxt "TFNEWIMAGE.CAPTION"
+msgid "New image"
+msgstr "Nova imagem"
+
+#: tfnewimage.combobox_bitdepth.text
+msgid "32"
+msgstr ""
+
+#: tfnewimage.label_bitdepth.caption
+msgid "Bit depth :"
+msgstr ""
+
+#: tfnewimage.label_height.caption
+msgctxt "TFNEWIMAGE.LABEL_HEIGHT.CAPTION"
+msgid "Height :"
+msgstr "Altura :"
+
+#: tfnewimage.label_height1.caption
+msgid "Ratio :"
+msgstr ""
+
+#: tfnewimage.label_memoryrequired.caption
+msgid "Memory required :"
+msgstr ""
+
+#: tfnewimage.label_width.caption
+msgctxt "TFNEWIMAGE.LABEL_WIDTH.CAPTION"
+msgid "Width :"
+msgstr "Largura :"
+
+#: tfnoisefilter.button_cancel.caption
+msgctxt "TFNOISEFILTER.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfnoisefilter.button_ok.caption
+msgctxt "TFNOISEFILTER.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfnoisefilter.caption
+msgid "Noise filter"
+msgstr "Filtro de ruído"
+
+#: tfnoisefilter.label_opacity.caption
+msgid "Opacity:"
+msgstr "Opacidade:"
+
+#: tfnoisefilter.radio_grayscalenoise.caption
+msgid "Grayscale noise"
+msgstr "Ruído em tons de cinza"
+
+#: tfnoisefilter.radio_rgbnoise.caption
+msgid "RGB noise"
+msgstr "Ruído em RGB"
+
+#: tfobject3d.button_cancel.caption
+msgctxt "TFOBJECT3D.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfobject3d.button_loadtex.caption
+msgid "Texture..."
+msgstr "Textura..."
+
+#: tfobject3d.button_notex.caption
+msgid "No tex."
+msgstr ""
+
+#: tfobject3d.button_ok.caption
+msgctxt "TFOBJECT3D.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfobject3d.caption
+msgid "3D object"
+msgstr "Objeto 3D"
+
+#: tfobject3d.checkbox_antialiasing.caption
+msgid "Antialiasing"
+msgstr "Suavização"
+
+#: tfobject3d.checkbox_biface.caption
+msgid "2-sided faces"
+msgstr "Superfície dupla face"
+
+#: tfobject3d.checkbox_textureinterp.caption
+msgid "Texture interpolation"
+msgstr "Interpolação da textura"
+
+#: tfobject3d.groupbox_selectedlight.caption
+msgid "Selected light"
+msgstr ""
+
+#: tfobject3d.groupbox_selectedmaterial.caption
+msgctxt "TFOBJECT3D.GROUPBOX_SELECTEDMATERIAL.CAPTION"
+msgid "Selected material"
+msgstr "Material selecionado"
+
+#: tfobject3d.label_color.caption
+msgctxt "TFOBJECT3D.LABEL_COLOR.CAPTION"
+msgid "Color :"
+msgstr "Cor :"
+
+#: tfobject3d.label_color1.caption
+msgctxt "tfobject3d.label_color1.caption"
+msgid "Color :"
+msgstr "Cor :"
+
+#: tfobject3d.label_height.caption
+msgctxt "TFOBJECT3D.LABEL_HEIGHT.CAPTION"
+msgid "Height :"
+msgstr "Altura :"
+
+#: tfobject3d.label_lightingnormals.caption
+msgctxt "TFOBJECT3D.LABEL_LIGHTINGNORMALS.CAPTION"
+msgid "Lighting normals :"
+msgstr "Normais de iluminação :"
+
+#: tfobject3d.label_lights.caption
+msgid "Lights :"
+msgstr ""
+
+#: tfobject3d.label_materials.caption
+msgctxt "TFOBJECT3D.LABEL_MATERIALS.CAPTION"
+msgid "Materials :"
+msgstr "Materiais :"
+
+#: tfobject3d.label_opacity.caption
+msgctxt "TFOBJECT3D.LABEL_OPACITY.CAPTION"
+msgid "Opacity :"
+msgstr "Opacidade :"
+
+#: tfobject3d.label_specularindex.caption
+msgctxt "TFOBJECT3D.LABEL_SPECULARINDEX.CAPTION"
+msgid "Spec. index :"
+msgstr ""
+
+#: tfobject3d.label_width.caption
+msgctxt "TFOBJECT3D.LABEL_WIDTH.CAPTION"
+msgid "Width :"
+msgstr "Largura :"
+
+#: tfobject3d.label_zoom.caption
+msgctxt "TFOBJECT3D.LABEL_ZOOM.CAPTION"
+msgid "Zoom"
+msgstr ""
+
+#: tfobject3d.lights.caption
+msgid "Lights"
+msgstr ""
+
+#: tfobject3d.materials.caption
+msgid "Materials"
+msgstr "Materiais"
+
+#: tfobject3d.opentexturedialog.title
+msgctxt "TFOBJECT3D.OPENTEXTUREDIALOG.TITLE"
+msgid "Open texture"
+msgstr "Abrir textura"
+
+#: tfobject3d.rendering.caption
+msgid "Rendering"
+msgstr "Renderização"
+
+#: tfobject3d.tooladddirectional.hint
+msgid "Add a directional light"
+msgstr ""
+
+#: tfobject3d.toolpointlight.hint
+msgid "Add a point light"
+msgstr ""
+
+#: tfobject3d.toolremoveselectedlight.hint
+msgid "Remove selected light"
+msgstr ""
+
+#: tfphongfilter.button_cancel.caption
+msgctxt "TFPHONGFILTER.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfphongfilter.button_ok.caption
+msgctxt "TFPHONGFILTER.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfphongfilter.caption
+msgctxt "TFPHONGFILTER.CAPTION"
+msgid "Shaded map"
+msgstr "Mapa sombreado"
+
+#: tfphongfilter.groupbox_color.caption
+msgctxt "TFPHONGFILTER.GROUPBOX_COLOR.CAPTION"
+msgid "Color"
+msgstr "Cor"
+
+#: tfphongfilter.groupbox_color1.caption
+msgid "Altitude map"
+msgstr "Altura do mapa"
+
+#: tfphongfilter.label_altitude.caption
+msgid "Global altitude :"
+msgstr "Altura global :"
+
+#: tfphongfilter.label_lightposition.caption
+msgid "Light position :"
+msgstr "Posição de luz :"
+
+#: tfphongfilter.radio_mapalpha.caption
+msgid "Alpha"
+msgstr ""
+
+#: tfphongfilter.radio_mapblue.caption
+msgid "B"
+msgstr ""
+
+#: tfphongfilter.radio_mapgreen.caption
+msgid "G"
+msgstr ""
+
+#: tfphongfilter.radio_maplightness.caption
+msgctxt "TFPHONGFILTER.RADIO_MAPLIGHTNESS.CAPTION"
+msgid "Lightness"
+msgstr "Luminosidade"
+
+#: tfphongfilter.radio_maplinearlightness.caption
+msgid "Linear lightness"
+msgstr "Luminosidade linear"
+
+#: tfphongfilter.radio_mapred.caption
+msgid "R"
+msgstr ""
+
+#: tfphongfilter.radio_mapsaturation.caption
+msgctxt "TFPHONGFILTER.RADIO_MAPSATURATION.CAPTION"
+msgid "Saturation"
+msgstr "Saturação"
+
+#: tfphongfilter.radio_usebackcolor.caption
+msgid "Back color"
+msgstr "Cor de fundo"
+
+#: tfphongfilter.radio_usekeep.caption
+msgid "Keep"
+msgstr "Manter"
+
+#: tfphongfilter.radio_usepencolor.caption
+msgid "Pen color"
+msgstr "cor da caneta"
+
+#: tfphongfilter.radio_usetexture.caption
+msgctxt "TFPHONGFILTER.RADIO_USETEXTURE.CAPTION"
+msgid "Current texture"
+msgstr "Textura atual"
+
+#: tfpixelate.button_cancel.caption
+msgctxt "TFPIXELATE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfpixelate.button_ok.caption
+msgctxt "TFPIXELATE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfpixelate.caption
+msgctxt "TFPIXELATE.CAPTION"
+msgid "Pixelate"
+msgstr "Pixelizar"
+
+#: tfpixelate.label_pixelsize.caption
+msgctxt "TFPIXELATE.LABEL_PIXELSIZE.CAPTION"
+msgid "Pixel size :"
+msgstr "Tamanho do pixel :"
+
+#: tfpixelate.label_quality.caption
+msgctxt "TFPIXELATE.LABEL_QUALITY.CAPTION"
+msgid "Quality :"
+msgstr "Qualidade :"
+
+#: tfposterize.button_cancel.caption
+msgctxt "TFPOSTERIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfposterize.button_ok.caption
+msgctxt "TFPOSTERIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfposterize.caption
+msgctxt "TFPOSTERIZE.CAPTION"
+msgid "Posterize"
+msgstr "Posterizar"
+
+#: tfposterize.checkbox_bylightness.caption
+msgid "By lightness"
+msgstr "Por luminosidade"
+
+#: tfposterize.label_levels.caption
+msgid "Levels :"
+msgstr "Níveis :"
+
+#: tfpreviewdialog.caption
+msgid "Preview"
+msgstr ""
+
+#: tfpreviewdialog.lstatus.caption
+msgctxt "tfpreviewdialog.lstatus.caption"
+msgid "."
+msgstr ""
+
+#: tfprint.button_configureprinter.caption
+msgid "Configure..."
+msgstr "Configurar..."
+
+#: tfprint.button_print.caption
+msgid "Print!"
+msgstr "Imprimir!"
+
+#: tfprint.button_zoomfit.caption
+msgctxt "tfprint.button_zoomfit.caption"
+msgid "Zoom fit"
+msgstr "Ajuste de zoom"
+
+#: tfprint.caption
+msgid "Print"
+msgstr "Imprimir"
+
+#: tfprint.checkbox_ratio.caption
+msgctxt "TFPRINT.CHECKBOX_RATIO.CAPTION"
+msgid "Keep aspect ratio"
+msgstr "Manter a proporção"
+
+#: tfprint.groupbox_imagesize.caption
+msgid "Image size"
+msgstr "Tamanho da imagem"
+
+#: tfprint.groupbox_margins.caption
+msgid "Margins"
+msgstr "Margens"
+
+#: tfprint.label_bottom.caption
+msgid "Bottom:"
+msgstr "Botão:"
+
+#: tfprint.label_dpix.caption
+msgctxt "TFPRINT.LABEL_DPIX.CAPTION"
+msgid "."
+msgstr ""
+
+#: tfprint.label_dpiy.caption
+msgctxt "TFPRINT.LABEL_DPIY.CAPTION"
+msgid "."
+msgstr ""
+
+#: tfprint.label_height.caption
+msgid "Height:"
+msgstr "Altura:"
+
+#: tfprint.label_left.caption
+msgid "Left:"
+msgstr "Esquerda:"
+
+#: tfprint.label_orientation.caption
+msgid "Orientation:"
+msgstr "Orientação:"
+
+#: tfprint.label_printerandpaper.caption
+msgid "Printer and paper:"
+msgstr "Impressora e papel:"
+
+#: tfprint.label_right.caption
+msgid "Right:"
+msgstr "Direita:"
+
+#: tfprint.label_top.caption
+msgid "Top:"
+msgstr "Acima:"
+
+#: tfprint.label_width.caption
+msgid "Width:"
+msgstr "Largura:"
+
+#: tfquestion.caption
+msgid "Question"
+msgstr ""
+
+#: tfquestion.checkbox_rememberchoice.caption
+msgid "Remember this choice"
+msgstr ""
+
+#: tfquestion.label_message.caption
+msgctxt "tfquestion.label_message.caption"
+msgid "."
+msgstr ""
+
+#: tfradialblur.button_cancel.caption
+msgctxt "TFRADIALBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfradialblur.button_ok.caption
+msgctxt "TFRADIALBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfradialblur.caption
+msgctxt "TFRADIALBLUR.CAPTION"
+msgid "Radial blur"
+msgstr "Desfoque radial"
+
+#: tfradialblur.label_radius.caption
+msgctxt "TFRADIALBLUR.LABEL_RADIUS.CAPTION"
+msgid "Radius :"
+msgstr "Raio :"
+
+#: tfrain.button_cancel.caption
+msgctxt "tfrain.button_cancel.caption"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfrain.button_ok.caption
+msgctxt "tfrain.button_ok.caption"
+msgid "OK"
+msgstr ""
+
+#: tfrain.caption
+msgid "Rain"
+msgstr ""
+
+#: tfrain.label_quantity.caption
+msgid "Quantity:"
+msgstr ""
+
+#: tfrain.label_wind.caption
+msgid "Wind :"
+msgstr ""
+
+#: tfresample.button_cancel.caption
+msgctxt "TFRESAMPLE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfresample.button_ok.caption
+msgctxt "TFRESAMPLE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfresample.caption
+msgctxt "TFRESAMPLE.CAPTION"
+msgid "Resample"
+msgstr "Reamostrar"
+
+#: tfresample.checkbox_ratio.caption
+msgctxt "tfresample.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "Manter a proporção"
+
+#: tfresample.label_height.caption
+msgctxt "TFRESAMPLE.LABEL_HEIGHT.CAPTION"
+msgid "Height :"
+msgstr "Altura :"
+
+#: tfresample.label_quality.caption
+msgctxt "TFRESAMPLE.LABEL_QUALITY.CAPTION"
+msgid "Quality :"
+msgstr "Qualidade :"
+
+#: tfresample.label_width.caption
+msgctxt "TFRESAMPLE.LABEL_WIDTH.CAPTION"
+msgid "Width :"
+msgstr "Largura :"
+
+#: tfsaveoption.button_cancel.caption
+msgctxt "tfsaveoption.button_cancel.caption"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfsaveoption.button_ok.caption
+msgctxt "tfsaveoption.button_ok.caption"
+msgid "OK"
+msgstr ""
+
+#: tfsaveoption.caption
+msgctxt "tfsaveoption.caption"
+msgid "Save"
+msgstr "Salvar"
+
+#: tfsaveoption.checkbox_dithering.caption
+msgid "Dithering"
+msgstr ""
+
+#: tfsaveoption.label1.caption
+msgid "Quality:"
+msgstr ""
+
+#: tfsaveoption.label_0.caption
+msgid "0"
+msgstr ""
+
+#: tfsaveoption.label_1.caption
+msgid "100"
+msgstr ""
+
+#: tfsaveoption.label_50.caption
+msgid "50"
+msgstr ""
+
+#: tfsaveoption.label_colordepth.caption
+msgid "Color depth:"
+msgstr ""
+
+#: tfsaveoption.label_size.caption
+msgid "Size:"
+msgstr ""
+
+#: tfsaveoption.radiobutton_16colors.caption
+msgid "16 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_24bitsperpixel.caption
+msgid "24 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_256colors.caption
+msgid "256 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_2colors.caption
+msgid "2 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_32bitsperpixel.caption
+msgid "32 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_miomap.caption
+msgid "MioMap"
+msgstr ""
+
+#: tfsharpen.button_cancel.caption
+msgctxt "TFSHARPEN.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfsharpen.button_ok.caption
+msgctxt "TFSHARPEN.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfsharpen.caption
+msgid "Sharpen/Smooth"
+msgstr "Nitidez/Suave"
+
+#: tfsharpen.label_amount.caption
+msgctxt "TFSHARPEN.LABEL_AMOUNT.CAPTION"
+msgid "Amount :"
+msgstr "Quantidade :"
+
+#: tfshiftcolors.button_cancel.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: tfshiftcolors.button_ok.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr ""
+
+#: tfshiftcolors.caption
+msgctxt "TFSHIFTCOLORS.CAPTION"
+msgid "Shift colors"
+msgstr "Mudar as cores"
+
+#: tfshiftcolors.checkbox_gsba.caption
+msgctxt "tfshiftcolors.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "Correção de tonalidade e luminosidade"
+
+#: tfshiftcolors.label1.caption
+msgctxt "TFSHIFTCOLORS.LABEL1.CAPTION"
+msgid "Hue"
+msgstr "Tonalidade"
+
+#: tfshiftcolors.label2.caption
+msgctxt "TFSHIFTCOLORS.LABEL2.CAPTION"
+msgid "Saturation"
+msgstr "Saturação"
+
+#: tftoolbox.caption
+msgctxt "TFTOOLBOX.CAPTION"
+msgid "Tools"
+msgstr "Ferramentas"
+

+ 1202 - 12
lazpaint/release/bin/i18n/lazpaint.ru.po

@@ -1556,9 +1556,9 @@ msgstr "все"
 msgid "All supported filetypes"
 msgstr ""
 
-#: uresourcestrings.rsaltshiftscalemode
-msgid "Hold ALT or SHIFT to scale"
-msgstr "Удерживайте ALT или SHIFT для масштабирования"
+#: uresourcestrings.rsohldkeysscalemode
+msgid "Hold %1 or %2 to scale"
+msgstr "Удерживайте %1 или %2 для масштабирования"
 
 #: uresourcestrings.rsanimatedgif
 msgid "Animated GIF"
@@ -1673,9 +1673,9 @@ msgstr "Косинус"
 msgid "Crop"
 msgstr "Обрезать"
 
-#: uresourcestrings.rsctrlrestrictrotation
-msgid "Hold CTRL to restrict rotation angle"
-msgstr "Удерживайте CTRL для ограничения угла поворота"
+#: uresourcestrings.rsholdkeyrestrictrotation
+msgid "Hold %1 to restrict rotation angle"
+msgstr "Удерживайте %1 для ограничения угла поворота"
 
 #: uresourcestrings.rscurvemodehint
 msgid "Press S or X to set the curve mode of the last point"
@@ -1838,13 +1838,13 @@ msgstr ""
 msgid "Half-cosine"
 msgstr "Полу-косинус"
 
-#: uresourcestrings.rsholdctrlsnaptopixel
-msgid "Hold CTRL to snap to pixels"
-msgstr "Удерживайте CTRL для привязки к пикселям"
+#: uresourcestrings.rsholdkeysnaptopixel
+msgid "Hold %1 to snap to pixels"
+msgstr "Удерживайте %1 для привязки к пикселям"
 
-#: uresourcestrings.rsholdshiftforsquare
-msgid "Hold SHIFT to draw a square or a circle"
-msgstr "Удерживайте SHIFT для рисования квадрата или круга"
+#: uresourcestrings.rsholdkeyforsquare
+msgid "Hold %1 to draw a square or a circle"
+msgstr "Удерживайте %1 для рисования квадрата или круга"
 
 #: uresourcestrings.rshotspot
 msgctxt "uresourcestrings.rshotspot"
@@ -2307,3 +2307,1193 @@ msgstr ""
 msgid "Yes"
 msgstr ""
 
+#: tablet.getprocfailed
+msgid "Procedure %s failed to load properly."
+msgstr ""
+
+#: tablet.openfailed
+msgid "Tablet context failed to open."
+msgstr ""
+
+#: tfabout.button_donate.caption
+msgctxt "tfabout.button_donate.caption"
+msgid "Donate..."
+msgstr "Пожертвования ..."
+
+#: tfabout.caption
+msgctxt "tfabout.caption"
+msgid "About"
+msgstr "О программе"
+
+#: tfabout.labelurl.caption
+msgid "http://sourceforge.net/projects/lazpaint/"
+msgstr "http://sourceforge.net/projects/lazpaint/"
+
+#: tfabout.label_authors.caption
+msgctxt "tfabout.label_authors.caption"
+msgid "Authors:"
+msgstr "Авторы:"
+
+#: tfabout.label_authorsvalue.caption
+msgctxt "tfabout.label_authorsvalue.caption"
+msgid "Circular helped by FabienWang, Lainz and others"
+msgstr "Circular, FabienWang и Lainz"
+
+#: tfabout.label_homepage.caption
+msgctxt "tfabout.label_homepage.caption"
+msgid "Homepage:"
+msgstr "Сайт:"
+
+#: tfabout.label_libraries.caption
+msgctxt "tfabout.label_libraries.caption"
+msgid "Libraries used:"
+msgstr "Библиотеки:"
+
+#: tfabout.label_licence.caption
+msgctxt "tfabout.label_licence.caption"
+msgid "Licence:"
+msgstr "Лицензия:"
+
+#: tfabout.label_opensource.caption
+msgctxt "tfabout.label_opensource.caption"
+msgid "Open source (GPLv3)"
+msgstr "С открытым исходным кодом (GPLv3)"
+
+#: tfadjustcurves.button_cancel.caption
+msgctxt "tfadjustcurves.button_cancel.caption"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfadjustcurves.button_ok.caption
+msgctxt "tfadjustcurves.button_ok.caption"
+msgid "OK"
+msgstr "ОК"
+
+#: tfadjustcurves.caption
+msgid "Adjust curves"
+msgstr ""
+
+#: tfadjustcurves.toolbutton_newcurve.hint
+msgid "Discard current curve and start a new one"
+msgstr ""
+
+#: tfadjustcurves.toolbutton_posterize.hint
+msgctxt "tfadjustcurves.toolbutton_posterize.hint"
+msgid "Posterize"
+msgstr ""
+
+#: tfadjustcurves.toolbutton_removepoint.hint
+msgid "Remove selected point (Del)"
+msgstr ""
+
+#: tfblendop.button_cancel.caption
+msgctxt "tfblendop.button_cancel.caption"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfblendop.button_ok.caption
+msgctxt "tfblendop.button_ok.caption"
+msgid "OK"
+msgstr "ОК"
+
+#: tfblendop.caption
+msgid "Blend operation"
+msgstr "Операции наложения"
+
+#: tfblendop.label_blendopcategory.caption
+msgctxt "tfblendop.label_blendopcategory.caption"
+msgid "Category of blend operation"
+msgstr ""
+
+#: tfblendop.label_blendopvalue.caption
+msgctxt "tfblendop.label_blendopvalue.caption"
+msgid "."
+msgstr "."
+
+#: tfblendop.label_kritaover.caption
+msgid "Krita"
+msgstr "Krita"
+
+#: tfblendop.label_kritaover.hint
+msgid "Blend operations that are available in Krita"
+msgstr ""
+
+#: tfblendop.label_otherover.caption
+msgid "Other"
+msgstr "Другое"
+
+#: tfblendop.label_otherover.hint
+msgid "Blend operations of LazPaint and Paint.NET"
+msgstr ""
+
+#: tfblendop.label_patternover.caption
+msgid "Pattern over"
+msgstr "Узор над"
+
+#: tfblendop.label_patternover.hint
+msgid "Preview blend operation with the specified image on top"
+msgstr ""
+
+#: tfblendop.label_patternunder.caption
+msgid "Pattern under"
+msgstr "Узор под"
+
+#: tfblendop.label_patternunder.hint
+msgid "Preview blend operation with the specified image underneath"
+msgstr ""
+
+#: tfblendop.label_previewwith.caption
+msgctxt "tfblendop.label_previewwith.caption"
+msgid "Preview with"
+msgstr ""
+
+#: tfblendop.label_selectedblendop.caption
+msgid "Selected blend operation :"
+msgstr "Выбранная операц. налож.:"
+
+#: tfblendop.label_svgover.caption
+msgid "Basic SVG"
+msgstr "Базов. SVG"
+
+#: tfblendop.label_svgover.hint
+msgid "Basic blend operations that are available in virtually all image editors"
+msgstr ""
+
+#: tfbrowseimages.caption
+msgid "Browse images"
+msgstr ""
+
+#: tfbrowseimages.checkbox_usedirectoryonstartup.caption
+msgid "Use this directory on startup"
+msgstr ""
+
+#: tfbrowseimages.label_status.caption
+msgctxt "tfbrowseimages.label_status.caption"
+msgid "."
+msgstr "."
+
+#: tfbrowseimages.toolbutton_createfolderorcontainer.hint
+msgid "Create folder or container"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_goup.hint
+msgid "Go one directory up"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_openselectedfiles.hint
+msgid "Open selected files"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_viewbigicon.hint
+msgctxt "tfbrowseimages.toolbutton_viewbigicon.hint"
+msgid "Show big icons"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_viewdetails.hint
+msgctxt "tfbrowseimages.toolbutton_viewdetails.hint"
+msgid "Show details and preview"
+msgstr ""
+
+#: tfbrowseimages.tool_selectdrive.hint
+msgid "Select drive"
+msgstr ""
+
+#: tfcanvassize.button_cancel.caption
+msgctxt "TFCANVASSIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfcanvassize.button_ok.caption
+msgctxt "TFCANVASSIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "ОК"
+
+#: tfcanvassize.caption
+msgctxt "tfcanvassize.caption"
+msgid "Canvas size"
+msgstr "Размер холста"
+
+#: tfcanvassize.checkbox_flipmode.caption
+msgid "Flip mode"
+msgstr "Режим отражения"
+
+#: tfcanvassize.label_anchor.caption
+msgctxt "tfcanvassize.label_anchor.caption"
+msgid "Anchor :"
+msgstr "Привязка:"
+
+#: tfcanvassize.label_height.caption
+msgctxt "tfcanvassize.label_height.caption"
+msgid "Height :"
+msgstr "Высота:"
+
+#: tfcanvassize.label_width.caption
+msgctxt "tfcanvassize.label_width.caption"
+msgid "Width :"
+msgstr "Ширина:"
+
+#: tfcolorintensity.button_cancel.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfcolorintensity.button_ok.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "ОК"
+
+#: tfcolorintensity.caption
+msgctxt "tfcolorintensity.caption"
+msgid "Intensity"
+msgstr "Интенсивность"
+
+#: tfcolorintensity.label_multiply.caption
+msgctxt "tfcolorintensity.label_multiply.caption"
+msgid "Multiply"
+msgstr "Умножить"
+
+#: tfcolorintensity.label_shift.caption
+msgctxt "tfcolorintensity.label_shift.caption"
+msgid "Shift"
+msgstr "Shift"
+
+#: tfcolorize.button_cancel.caption
+msgctxt "TFCOLORIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfcolorize.button_ok.caption
+msgctxt "TFCOLORIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "ОК"
+
+#: tfcolorize.caption
+msgctxt "tfcolorize.caption"
+msgid "Colorize"
+msgstr "Раскрасить"
+
+#: tfcolorize.checkbox_gsba.caption
+msgctxt "tfcolorize.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "Исправить оттенок и освещение"
+
+#: tfcolorize.label_colorness.caption
+msgctxt "tfcolorize.label_colorness.caption"
+msgid "Colorness"
+msgstr "Цветность"
+
+#: tfcolorize.label_hue.caption
+msgctxt "tfcolorize.label_hue.caption"
+msgid "Hue"
+msgstr "Оттенок"
+
+#: tfcolorize.label_preset.caption
+msgid "Preset"
+msgstr ""
+
+#: tfcustomblur.button_cancel.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfcustomblur.button_editmask.caption
+msgid "Edit mask..."
+msgstr "Редактировать маску ..."
+
+#: tfcustomblur.button_loadmask.caption
+msgid "Load mask..."
+msgstr "Загрузить маску ..."
+
+#: tfcustomblur.button_ok.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "ОК"
+
+#: tfcustomblur.caption
+msgctxt "tfcustomblur.caption"
+msgid "Custom blur"
+msgstr "Пользовательское размытие"
+
+#: tfcustomblur.openpicturedialog1.title
+msgid "Open grayscale file"
+msgstr "Открытие файла оттенков серого"
+
+#: tfemboss.button_cancel.caption
+msgctxt "TFEMBOSS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfemboss.button_ok.caption
+msgctxt "TFEMBOSS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "ОК"
+
+#: tfemboss.caption
+msgctxt "tfemboss.caption"
+msgid "Emboss"
+msgstr "Тиснение"
+
+#: tfemboss.checkbox_preservecolors.caption
+msgid "Preserve colors"
+msgstr ""
+
+#: tfemboss.checkbox_transparent.caption
+msgid "Transparent"
+msgstr ""
+
+#: tfemboss.label_direction.caption
+msgctxt "tfemboss.label_direction.caption"
+msgid "Direction :"
+msgstr "Направление:"
+
+#: tffilterfunction.button_cancel.caption
+msgctxt "tffilterfunction.button_cancel.caption"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tffilterfunction.button_ok.caption
+msgctxt "tffilterfunction.button_ok.caption"
+msgid "OK"
+msgstr "ОК"
+
+#: tffilterfunction.caption
+msgid "Apply function"
+msgstr "Применить функц"
+
+#: tffilterfunction.checkbox_gsba.caption
+msgctxt "tffilterfunction.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "Исправить оттенок и освещение"
+
+#: tffilterfunction.label_alphaequals.caption
+msgctxt "tffilterfunction.label_alphaequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_blueequals.caption
+msgctxt "tffilterfunction.label_blueequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_greenequals.caption
+msgctxt "tffilterfunction.label_greenequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_hueequals.caption
+msgctxt "tffilterfunction.label_hueequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_lightnessequals.caption
+msgctxt "tffilterfunction.label_lightnessequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_redequals.caption
+msgctxt "tffilterfunction.label_redequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_saturationequals.caption
+msgctxt "tffilterfunction.label_saturationequals.caption"
+msgid "."
+msgstr "."
+
+#: tffilterfunction.label_variables.caption
+msgid "Variables :"
+msgstr "Переменные :"
+
+#: tffilterfunction.tabsheet_hsl.caption
+msgid "HSL"
+msgstr "HSL"
+
+#: tffilterfunction.tabsheet_rgb.caption
+msgctxt "tffilterfunction.tabsheet_rgb.caption"
+msgid "RGB"
+msgstr "RGB"
+
+#: tfgeometricbrush.button_cancel.caption
+msgctxt "tfgeometricbrush.button_cancel.caption"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfgeometricbrush.button_ok.caption
+msgctxt "tfgeometricbrush.button_ok.caption"
+msgid "OK"
+msgstr "ОК"
+
+#: tfgeometricbrush.caption
+msgid "Geometric brush"
+msgstr ""
+
+#: tfgeometricbrush.checkbox_isgradient.caption
+msgid "Opacity gradient"
+msgstr ""
+
+#: tfgeometricbrush.label1.caption
+msgid "Number of sides:"
+msgstr ""
+
+#: tfimagelist.caption
+msgid "Image List"
+msgstr ""
+
+#: tfimagelist.pmautouncheckonopen.caption
+msgid "Autouncheck files after being open"
+msgstr ""
+
+#: tfimagelist.pmautouncheckonsave.caption
+msgid "Autouncheck files after being edited and saved"
+msgstr ""
+
+#: tfimagelist.pmremoveall.caption
+msgid "Empty image list"
+msgstr ""
+
+#: tfimagelist.pmremovenonexisting.caption
+msgid "Remove nonexisting images"
+msgstr ""
+
+#: tfimagelist.pmremoveunchecked.caption
+msgid "Remove unchecked images"
+msgstr ""
+
+#: tfimagelist.pmunchecknonexisting.caption
+msgid "Uncheck nonexisting files"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[0].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[0].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[1].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[1].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[2].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[2].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[3].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[3].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.tbaddfiles.hint
+msgid "Add images to list"
+msgstr ""
+
+#: tfimagelist.tbautouncheck.hint
+msgid "Enable/disable autounchecking for processed files"
+msgstr ""
+
+#: tfimagelist.tbautozoomfit.hint
+msgid "Enable/disable autofitting images in the LazPaint window"
+msgstr ""
+
+#: tfimagelist.tbcheckall.hint
+msgid "Check all files for processing"
+msgstr ""
+
+#: tfimagelist.tbminiwindow.hint
+msgid "Switch to miniwindow"
+msgstr ""
+
+#: tfimagelist.tbmovedown.hint
+msgid "Move selected items down"
+msgstr ""
+
+#: tfimagelist.tbmoveup.hint
+msgid "Move selected items up"
+msgstr ""
+
+#: tfimagelist.tbnormalwindows.hint
+msgid "Switch to normal window"
+msgstr ""
+
+#: tfimagelist.tbopenimage.hint
+msgid "Open current image"
+msgstr ""
+
+#: tfimagelist.tbopennext.hint
+msgctxt "tfimagelist.tbopennext.hint"
+msgid "Open next image (Alt-Right)"
+msgstr ""
+
+#: tfimagelist.tbopennextsw.hint
+msgctxt "tfimagelist.tbopennextsw.hint"
+msgid "Open next image"
+msgstr ""
+
+#: tfimagelist.tbopenprev.hint
+msgctxt "tfimagelist.tbopenprev.hint"
+msgid "Open previous image (Alt-Left)"
+msgstr ""
+
+#: tfimagelist.tbopenprevsw.hint
+msgctxt "tfimagelist.tbopenprevsw.hint"
+msgid "Open previous image"
+msgstr ""
+
+#: tfimagelist.tbremoveitem.hint
+msgid "Remove selected images from list"
+msgstr ""
+
+#: tfimagelist.tbuncheckall.hint
+msgid "Uncheck all files for processing"
+msgstr ""
+
+#: tfloading.caption
+msgctxt "tfloading.caption"
+msgid "Loading..."
+msgstr "Загрузка..."
+
+#: tfmotionblur.button_cancel.caption
+msgctxt "TFMOTIONBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfmotionblur.button_ok.caption
+msgctxt "TFMOTIONBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "ОК"
+
+#: tfmotionblur.caption
+msgctxt "tfmotionblur.caption"
+msgid "Motion blur"
+msgstr "Размытие в движении"
+
+#: tfmotionblur.checkbox_oriented.caption
+msgid "Oriented"
+msgstr "Ориентированный"
+
+#: tfmotionblur.label_distance.caption
+msgctxt "tfmotionblur.label_distance.caption"
+msgid "Distance :"
+msgstr "Расстояние:"
+
+#: tfmultiimage.button_cancel.caption
+msgctxt "tfmultiimage.button_cancel.caption"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfmultiimage.button_ok.caption
+msgctxt "tfmultiimage.button_ok.caption"
+msgid "OK"
+msgstr "ОК"
+
+#: tfmultiimage.caption
+msgid "Choose image"
+msgstr ""
+
+#: tfnewimage.button_cancel.caption
+msgctxt "TFNEWIMAGE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfnewimage.button_ok.caption
+msgctxt "TFNEWIMAGE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "ОК"
+
+#: tfnewimage.caption
+msgctxt "tfnewimage.caption"
+msgid "New image"
+msgstr "Новое изображение"
+
+#: tfnewimage.combobox_bitdepth.text
+msgid "32"
+msgstr ""
+
+#: tfnewimage.label_bitdepth.caption
+msgid "Bit depth :"
+msgstr ""
+
+#: tfnewimage.label_height.caption
+msgctxt "tfnewimage.label_height.caption"
+msgid "Height :"
+msgstr "Высота:"
+
+#: tfnewimage.label_height1.caption
+msgid "Ratio :"
+msgstr ""
+
+#: tfnewimage.label_memoryrequired.caption
+msgid "Memory required :"
+msgstr ""
+
+#: tfnewimage.label_width.caption
+msgctxt "tfnewimage.label_width.caption"
+msgid "Width :"
+msgstr "Ширина:"
+
+#: tfnoisefilter.button_cancel.caption
+msgctxt "tfnoisefilter.button_cancel.caption"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfnoisefilter.button_ok.caption
+msgctxt "tfnoisefilter.button_ok.caption"
+msgid "OK"
+msgstr "ОК"
+
+#: tfnoisefilter.caption
+msgid "Noise filter"
+msgstr ""
+
+#: tfnoisefilter.label_opacity.caption
+msgid "Opacity:"
+msgstr ""
+
+#: tfnoisefilter.radio_grayscalenoise.caption
+msgid "Grayscale noise"
+msgstr ""
+
+#: tfnoisefilter.radio_rgbnoise.caption
+msgid "RGB noise"
+msgstr ""
+
+#: tfobject3d.button_cancel.caption
+msgctxt "TFOBJECT3D.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfobject3d.button_loadtex.caption
+msgid "Texture..."
+msgstr ""
+
+#: tfobject3d.button_notex.caption
+msgid "No tex."
+msgstr ""
+
+#: tfobject3d.button_ok.caption
+msgctxt "TFOBJECT3D.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "ОК"
+
+#: tfobject3d.caption
+msgid "3D object"
+msgstr "3D-объект"
+
+#: tfobject3d.checkbox_antialiasing.caption
+msgid "Antialiasing"
+msgstr "Сглаживание"
+
+#: tfobject3d.checkbox_biface.caption
+msgid "2-sided faces"
+msgstr "Двухсторонние грани"
+
+#: tfobject3d.checkbox_textureinterp.caption
+msgid "Texture interpolation"
+msgstr "Текстурная интерполяция"
+
+#: tfobject3d.groupbox_selectedlight.caption
+msgid "Selected light"
+msgstr ""
+
+#: tfobject3d.groupbox_selectedmaterial.caption
+msgctxt "tfobject3d.groupbox_selectedmaterial.caption"
+msgid "Selected material"
+msgstr "Выбор материала"
+
+#: tfobject3d.label_color.caption
+msgctxt "tfobject3d.label_color.caption"
+msgid "Color :"
+msgstr "Цвет:"
+
+#: tfobject3d.label_color1.caption
+msgctxt "tfobject3d.label_color1.caption"
+msgid "Color :"
+msgstr "Цвет:"
+
+#: tfobject3d.label_height.caption
+msgctxt "tfobject3d.label_height.caption"
+msgid "Height :"
+msgstr "Высота:"
+
+#: tfobject3d.label_lightingnormals.caption
+msgctxt "tfobject3d.label_lightingnormals.caption"
+msgid "Lighting normals :"
+msgstr "Освещение нормалей:"
+
+#: tfobject3d.label_lights.caption
+msgid "Lights :"
+msgstr ""
+
+#: tfobject3d.label_materials.caption
+msgctxt "tfobject3d.label_materials.caption"
+msgid "Materials :"
+msgstr "Материалы:"
+
+#: tfobject3d.label_opacity.caption
+msgctxt "tfobject3d.label_opacity.caption"
+msgid "Opacity :"
+msgstr "Непрозрачность:"
+
+#: tfobject3d.label_specularindex.caption
+msgctxt "tfobject3d.label_specularindex.caption"
+msgid "Spec. index :"
+msgstr "Специальный индекс:"
+
+#: tfobject3d.label_width.caption
+msgctxt "tfobject3d.label_width.caption"
+msgid "Width :"
+msgstr "Ширина:"
+
+#: tfobject3d.label_zoom.caption
+msgctxt "tfobject3d.label_zoom.caption"
+msgid "Zoom"
+msgstr "Увеличить"
+
+#: tfobject3d.lights.caption
+msgid "Lights"
+msgstr ""
+
+#: tfobject3d.materials.caption
+msgid "Materials"
+msgstr "Материалы"
+
+#: tfobject3d.opentexturedialog.title
+msgctxt "tfobject3d.opentexturedialog.title"
+msgid "Open texture"
+msgstr "Открыть текстуру"
+
+#: tfobject3d.rendering.caption
+msgid "Rendering"
+msgstr "Визуализация"
+
+#: tfobject3d.tooladddirectional.hint
+msgid "Add a directional light"
+msgstr ""
+
+#: tfobject3d.toolpointlight.hint
+msgid "Add a point light"
+msgstr ""
+
+#: tfobject3d.toolremoveselectedlight.hint
+msgid "Remove selected light"
+msgstr ""
+
+#: tfphongfilter.button_cancel.caption
+msgctxt "tfphongfilter.button_cancel.caption"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfphongfilter.button_ok.caption
+msgctxt "tfphongfilter.button_ok.caption"
+msgid "OK"
+msgstr "ОК"
+
+#: tfphongfilter.caption
+msgctxt "tfphongfilter.caption"
+msgid "Shaded map"
+msgstr "Затененная карта"
+
+#: tfphongfilter.groupbox_color.caption
+msgctxt "tfphongfilter.groupbox_color.caption"
+msgid "Color"
+msgstr "Цвет"
+
+#: tfphongfilter.groupbox_color1.caption
+msgid "Altitude map"
+msgstr "Карта высот"
+
+#: tfphongfilter.label_altitude.caption
+msgid "Global altitude :"
+msgstr "Глобальная высота:"
+
+#: tfphongfilter.label_lightposition.caption
+msgid "Light position :"
+msgstr "Позиция света: "
+
+#: tfphongfilter.radio_mapalpha.caption
+msgid "Alpha"
+msgstr "Alpha"
+
+#: tfphongfilter.radio_mapblue.caption
+msgid "B"
+msgstr "B"
+
+#: tfphongfilter.radio_mapgreen.caption
+msgid "G"
+msgstr "G"
+
+#: tfphongfilter.radio_maplightness.caption
+msgctxt "tfphongfilter.radio_maplightness.caption"
+msgid "Lightness"
+msgstr "Освещение"
+
+#: tfphongfilter.radio_maplinearlightness.caption
+msgid "Linear lightness"
+msgstr "Линейное освещение"
+
+#: tfphongfilter.radio_mapred.caption
+msgid "R"
+msgstr "R"
+
+#: tfphongfilter.radio_mapsaturation.caption
+msgctxt "tfphongfilter.radio_mapsaturation.caption"
+msgid "Saturation"
+msgstr "Насыщенность"
+
+#: tfphongfilter.radio_usebackcolor.caption
+msgid "Back color"
+msgstr "Цвет фона"
+
+#: tfphongfilter.radio_usekeep.caption
+msgid "Keep"
+msgstr "Придержать"
+
+#: tfphongfilter.radio_usepencolor.caption
+msgid "Pen color"
+msgstr "Цвет пера"
+
+#: tfphongfilter.radio_usetexture.caption
+msgctxt "tfphongfilter.radio_usetexture.caption"
+msgid "Current texture"
+msgstr "Текущая текстура"
+
+#: tfpixelate.button_cancel.caption
+msgctxt "TFPIXELATE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfpixelate.button_ok.caption
+msgctxt "TFPIXELATE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "ОК"
+
+#: tfpixelate.caption
+msgctxt "tfpixelate.caption"
+msgid "Pixelate"
+msgstr "Растрировать"
+
+#: tfpixelate.label_pixelsize.caption
+msgctxt "tfpixelate.label_pixelsize.caption"
+msgid "Pixel size :"
+msgstr "Размер пикселя:"
+
+#: tfpixelate.label_quality.caption
+msgctxt "tfpixelate.label_quality.caption"
+msgid "Quality :"
+msgstr "Качество:"
+
+#: tfposterize.button_cancel.caption
+msgctxt "tfposterize.button_cancel.caption"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfposterize.button_ok.caption
+msgctxt "tfposterize.button_ok.caption"
+msgid "OK"
+msgstr "ОК"
+
+#: tfposterize.caption
+msgctxt "tfposterize.caption"
+msgid "Posterize"
+msgstr ""
+
+#: tfposterize.checkbox_bylightness.caption
+msgid "By lightness"
+msgstr ""
+
+#: tfposterize.label_levels.caption
+msgid "Levels :"
+msgstr ""
+
+#: tfpreviewdialog.caption
+msgid "Preview"
+msgstr ""
+
+#: tfpreviewdialog.lstatus.caption
+msgctxt "tfpreviewdialog.lstatus.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.button_configureprinter.caption
+msgid "Configure..."
+msgstr ""
+
+#: tfprint.button_print.caption
+msgid "Print!"
+msgstr ""
+
+#: tfprint.button_zoomfit.caption
+msgctxt "tfprint.button_zoomfit.caption"
+msgid "Zoom fit"
+msgstr "Увеличить, полностью вписав"
+
+#: tfprint.caption
+msgid "Print"
+msgstr ""
+
+#: tfprint.checkbox_ratio.caption
+msgctxt "tfprint.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "Сохранять пропорции"
+
+#: tfprint.groupbox_imagesize.caption
+msgid "Image size"
+msgstr ""
+
+#: tfprint.groupbox_margins.caption
+msgid "Margins"
+msgstr ""
+
+#: tfprint.label_bottom.caption
+msgid "Bottom:"
+msgstr ""
+
+#: tfprint.label_dpix.caption
+msgctxt "tfprint.label_dpix.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.label_dpiy.caption
+msgctxt "tfprint.label_dpiy.caption"
+msgid "."
+msgstr "."
+
+#: tfprint.label_height.caption
+msgid "Height:"
+msgstr ""
+
+#: tfprint.label_left.caption
+msgid "Left:"
+msgstr ""
+
+#: tfprint.label_orientation.caption
+msgid "Orientation:"
+msgstr ""
+
+#: tfprint.label_printerandpaper.caption
+msgid "Printer and paper:"
+msgstr ""
+
+#: tfprint.label_right.caption
+msgid "Right:"
+msgstr ""
+
+#: tfprint.label_top.caption
+msgid "Top:"
+msgstr ""
+
+#: tfprint.label_width.caption
+msgid "Width:"
+msgstr ""
+
+#: tfquestion.caption
+msgid "Question"
+msgstr ""
+
+#: tfquestion.checkbox_rememberchoice.caption
+msgid "Remember this choice"
+msgstr ""
+
+#: tfquestion.label_message.caption
+msgctxt "tfquestion.label_message.caption"
+msgid "."
+msgstr "."
+
+#: tfradialblur.button_cancel.caption
+msgctxt "TFRADIALBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfradialblur.button_ok.caption
+msgctxt "TFRADIALBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "ОК"
+
+#: tfradialblur.caption
+msgctxt "tfradialblur.caption"
+msgid "Radial blur"
+msgstr "Радиальное размытие"
+
+#: tfradialblur.label_radius.caption
+msgctxt "tfradialblur.label_radius.caption"
+msgid "Radius :"
+msgstr "Радиус:"
+
+#: tfrain.button_cancel.caption
+msgctxt "tfrain.button_cancel.caption"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfrain.button_ok.caption
+msgctxt "tfrain.button_ok.caption"
+msgid "OK"
+msgstr "ОК"
+
+#: tfrain.caption
+msgid "Rain"
+msgstr ""
+
+#: tfrain.label_quantity.caption
+msgid "Quantity:"
+msgstr ""
+
+#: tfrain.label_wind.caption
+msgid "Wind :"
+msgstr ""
+
+#: tfresample.button_cancel.caption
+msgctxt "TFRESAMPLE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfresample.button_ok.caption
+msgctxt "TFRESAMPLE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "ОК"
+
+#: tfresample.caption
+msgctxt "tfresample.caption"
+msgid "Resample"
+msgstr "Ресэмпл"
+
+#: tfresample.checkbox_ratio.caption
+msgctxt "tfresample.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "Сохранять пропорции"
+
+#: tfresample.label_height.caption
+msgctxt "tfresample.label_height.caption"
+msgid "Height :"
+msgstr "Высота:"
+
+#: tfresample.label_quality.caption
+msgctxt "tfresample.label_quality.caption"
+msgid "Quality :"
+msgstr "Качество:"
+
+#: tfresample.label_width.caption
+msgctxt "tfresample.label_width.caption"
+msgid "Width :"
+msgstr "Ширина:"
+
+#: tfsaveoption.button_cancel.caption
+msgctxt "tfsaveoption.button_cancel.caption"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfsaveoption.button_ok.caption
+msgctxt "tfsaveoption.button_ok.caption"
+msgid "OK"
+msgstr "ОК"
+
+#: tfsaveoption.caption
+msgctxt "tfsaveoption.caption"
+msgid "Save"
+msgstr "Сохранить"
+
+#: tfsaveoption.checkbox_dithering.caption
+msgid "Dithering"
+msgstr ""
+
+#: tfsaveoption.label1.caption
+msgid "Quality:"
+msgstr ""
+
+#: tfsaveoption.label_0.caption
+msgid "0"
+msgstr ""
+
+#: tfsaveoption.label_1.caption
+msgid "100"
+msgstr ""
+
+#: tfsaveoption.label_50.caption
+msgid "50"
+msgstr ""
+
+#: tfsaveoption.label_colordepth.caption
+msgid "Color depth:"
+msgstr ""
+
+#: tfsaveoption.label_size.caption
+msgid "Size:"
+msgstr ""
+
+#: tfsaveoption.radiobutton_16colors.caption
+msgid "16 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_24bitsperpixel.caption
+msgid "24 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_256colors.caption
+msgid "256 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_2colors.caption
+msgid "2 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_32bitsperpixel.caption
+msgid "32 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_miomap.caption
+msgid "MioMap"
+msgstr ""
+
+#: tfsharpen.button_cancel.caption
+msgctxt "tfsharpen.button_cancel.caption"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfsharpen.button_ok.caption
+msgctxt "tfsharpen.button_ok.caption"
+msgid "OK"
+msgstr "ОК"
+
+#: tfsharpen.caption
+msgid "Sharpen/Smooth"
+msgstr "Заострить/Сгладить"
+
+#: tfsharpen.label_amount.caption
+msgctxt "tfsharpen.label_amount.caption"
+msgid "Amount :"
+msgstr "Суммировать:"
+
+#: tfshiftcolors.button_cancel.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Отменить"
+
+#: tfshiftcolors.button_ok.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "ОК"
+
+#: tfshiftcolors.caption
+msgctxt "tfshiftcolors.caption"
+msgid "Shift colors"
+msgstr "Сдвиг цвета"
+
+#: tfshiftcolors.checkbox_gsba.caption
+msgctxt "tfshiftcolors.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr "Исправить оттенок и освещение"
+
+#: tfshiftcolors.label1.caption
+msgctxt "TFSHIFTCOLORS.LABEL1.CAPTION"
+msgid "Hue"
+msgstr "Оттенок"
+
+#: tfshiftcolors.label2.caption
+msgctxt "TFSHIFTCOLORS.LABEL2.CAPTION"
+msgid "Saturation"
+msgstr "Насыщенность"
+
+#: tftoolbox.caption
+msgctxt "tftoolbox.caption"
+msgid "Tools"
+msgstr "Инструменты"
+

+ 1203 - 8
lazpaint/release/bin/i18n/lazpaint.sv.po

@@ -1542,8 +1542,8 @@ msgstr ""
 msgid "All supported filetypes"
 msgstr ""
 
-#: uresourcestrings.rsaltshiftscalemode
-msgid "Hold ALT or SHIFT to scale"
+#: uresourcestrings.rsholdkeysscalemode
+msgid "Hold %1 or %2 to scale"
 msgstr ""
 
 #: uresourcestrings.rsanimatedgif
@@ -1659,8 +1659,8 @@ msgstr "Cosine"
 msgid "Crop"
 msgstr "Beskär"
 
-#: uresourcestrings.rsctrlrestrictrotation
-msgid "Hold CTRL to restrict rotation angle"
+#: uresourcestrings.rsholdkeyrestrictrotation
+msgid "Hold %1 to restrict rotation angle"
 msgstr ""
 
 #: uresourcestrings.rscurvemodehint
@@ -1824,12 +1824,12 @@ msgstr ""
 msgid "Half-cosine"
 msgstr "Halv-cosine"
 
-#: uresourcestrings.rsholdctrlsnaptopixel
-msgid "Hold CTRL to snap to pixels"
+#: uresourcestrings.rsholdkeysnaptopixel
+msgid "Hold %1 to snap to pixels"
 msgstr ""
 
-#: uresourcestrings.rsholdshiftforsquare
-msgid "Hold SHIFT to draw a square or a circle"
+#: uresourcestrings.rsholdkeyforsquare
+msgid "Hold %1 to draw a square or a circle"
 msgstr ""
 
 #: uresourcestrings.rshotspot
@@ -2293,3 +2293,1198 @@ msgstr ""
 msgid "Yes"
 msgstr ""
 
+#: tablet.getprocfailed
+msgid "Procedure %s failed to load properly."
+msgstr ""
+
+#: tablet.openfailed
+msgid "Tablet context failed to open."
+msgstr ""
+
+#: tfabout.button_donate.caption
+msgctxt "tfabout.button_donate.caption"
+msgid "Donate..."
+msgstr "Donera..."
+
+#: tfabout.caption
+msgctxt "tfabout.caption"
+msgid "About"
+msgstr "Om"
+
+#: tfabout.labelurl.caption
+msgid "http://sourceforge.net/projects/lazpaint/"
+msgstr "http://sourceforge.net/projects/lazpaint/"
+
+#: tfabout.label_authors.caption
+msgctxt "tfabout.label_authors.caption"
+msgid "Authors:"
+msgstr "Upphovsman"
+
+#: tfabout.label_authorsvalue.caption
+msgctxt "tfabout.label_authorsvalue.caption"
+msgid "Circular helped by FabienWang, Lainz and others"
+msgstr "Circular, FabienWang och Lainz"
+
+#: tfabout.label_homepage.caption
+msgctxt "tfabout.label_homepage.caption"
+msgid "Homepage:"
+msgstr "Hemsidan"
+
+#: tfabout.label_libraries.caption
+msgctxt "tfabout.label_libraries.caption"
+msgid "Libraries used:"
+msgstr "Använda bibliotek:"
+
+#: tfabout.label_licence.caption
+msgctxt "tfabout.label_licence.caption"
+msgid "Licence:"
+msgstr "Licens:"
+
+#: tfabout.label_opensource.caption
+msgctxt "tfabout.label_opensource.caption"
+msgid "Open source (GPLv3)"
+msgstr "Öppen källkod (GPLv3)"
+
+#: tfadjustcurves.button_cancel.caption
+msgctxt "tfadjustcurves.button_cancel.caption"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfadjustcurves.button_ok.caption
+msgctxt "tfadjustcurves.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfadjustcurves.caption
+msgid "Adjust curves"
+msgstr ""
+
+#: tfadjustcurves.toolbutton_newcurve.hint
+msgid "Discard current curve and start a new one"
+msgstr ""
+
+#: tfadjustcurves.toolbutton_posterize.hint
+msgctxt "tfadjustcurves.toolbutton_posterize.hint"
+msgid "Posterize"
+msgstr ""
+
+#: tfadjustcurves.toolbutton_removepoint.hint
+msgid "Remove selected point (Del)"
+msgstr ""
+
+#: tfblendop.button_cancel.caption
+msgctxt "tfblendop.button_cancel.caption"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfblendop.button_ok.caption
+msgctxt "tfblendop.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfblendop.caption
+msgid "Blend operation"
+msgstr ""
+
+#: tfblendop.label_blendopcategory.caption
+msgctxt "tfblendop.label_blendopcategory.caption"
+msgid "Category of blend operation"
+msgstr ""
+
+#: tfblendop.label_blendopvalue.caption
+msgctxt "tfblendop.label_blendopvalue.caption"
+msgid "."
+msgstr ""
+
+#: tfblendop.label_kritaover.caption
+msgctxt "tfblendop.label_kritaover.caption"
+msgid "Krita"
+msgstr ""
+
+#: tfblendop.label_kritaover.hint
+msgid "Blend operations that are available in Krita"
+msgstr ""
+
+#: tfblendop.label_otherover.caption
+msgctxt "tfblendop.label_otherover.caption"
+msgid "Other"
+msgstr ""
+
+#: tfblendop.label_otherover.hint
+msgid "Blend operations of LazPaint and Paint.NET"
+msgstr ""
+
+#: tfblendop.label_patternover.caption
+msgctxt "tfblendop.label_patternover.caption"
+msgid "Pattern over"
+msgstr ""
+
+#: tfblendop.label_patternover.hint
+msgid "Preview blend operation with the specified image on top"
+msgstr ""
+
+#: tfblendop.label_patternunder.caption
+msgctxt "tfblendop.label_patternunder.caption"
+msgid "Pattern under"
+msgstr ""
+
+#: tfblendop.label_patternunder.hint
+msgid "Preview blend operation with the specified image underneath"
+msgstr ""
+
+#: tfblendop.label_previewwith.caption
+msgctxt "tfblendop.label_previewwith.caption"
+msgid "Preview with"
+msgstr ""
+
+#: tfblendop.label_selectedblendop.caption
+msgid "Selected blend operation :"
+msgstr ""
+
+#: tfblendop.label_svgover.caption
+msgctxt "tfblendop.label_svgover.caption"
+msgid "Basic SVG"
+msgstr ""
+
+#: tfblendop.label_svgover.hint
+msgid "Basic blend operations that are available in virtually all image editors"
+msgstr ""
+
+#: tfbrowseimages.caption
+msgid "Browse images"
+msgstr ""
+
+#: tfbrowseimages.checkbox_usedirectoryonstartup.caption
+msgid "Use this directory on startup"
+msgstr ""
+
+#: tfbrowseimages.label_status.caption
+msgctxt "tfbrowseimages.label_status.caption"
+msgid "."
+msgstr ""
+
+#: tfbrowseimages.toolbutton_createfolderorcontainer.hint
+msgid "Create folder or container"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_goup.hint
+msgid "Go one directory up"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_openselectedfiles.hint
+msgid "Open selected files"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_viewbigicon.hint
+msgctxt "tfbrowseimages.toolbutton_viewbigicon.hint"
+msgid "Show big icons"
+msgstr ""
+
+#: tfbrowseimages.toolbutton_viewdetails.hint
+msgctxt "tfbrowseimages.toolbutton_viewdetails.hint"
+msgid "Show details and preview"
+msgstr ""
+
+#: tfbrowseimages.tool_selectdrive.hint
+msgid "Select drive"
+msgstr ""
+
+#: tfcanvassize.button_cancel.caption
+msgctxt "TFCANVASSIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfcanvassize.button_ok.caption
+msgctxt "TFCANVASSIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcanvassize.caption
+msgctxt "tfcanvassize.caption"
+msgid "Canvas size"
+msgstr "Storlek på rityta"
+
+#: tfcanvassize.checkbox_flipmode.caption
+msgid "Flip mode"
+msgstr "Vändläge"
+
+#: tfcanvassize.label_anchor.caption
+msgctxt "tfcanvassize.label_anchor.caption"
+msgid "Anchor :"
+msgstr "Ankare :"
+
+#: tfcanvassize.label_height.caption
+msgctxt "tfcanvassize.label_height.caption"
+msgid "Height :"
+msgstr "Höjd :"
+
+#: tfcanvassize.label_width.caption
+msgctxt "tfcanvassize.label_width.caption"
+msgid "Width :"
+msgstr "Bredd :"
+
+#: tfcolorintensity.button_cancel.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfcolorintensity.button_ok.caption
+msgctxt "TFCOLORINTENSITY.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcolorintensity.caption
+msgctxt "tfcolorintensity.caption"
+msgid "Intensity"
+msgstr "Intensitet"
+
+#: tfcolorintensity.label_multiply.caption
+msgctxt "tfcolorintensity.label_multiply.caption"
+msgid "Multiply"
+msgstr "Multiplicera"
+
+#: tfcolorintensity.label_shift.caption
+msgctxt "tfcolorintensity.label_shift.caption"
+msgid "Shift"
+msgstr "Ändra"
+
+#: tfcolorize.button_cancel.caption
+msgctxt "TFCOLORIZE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfcolorize.button_ok.caption
+msgctxt "TFCOLORIZE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcolorize.caption
+msgctxt "tfcolorize.caption"
+msgid "Colorize"
+msgstr "Färgsätt"
+
+#: tfcolorize.checkbox_gsba.caption
+msgctxt "tfcolorize.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr ""
+
+#: tfcolorize.label_colorness.caption
+msgctxt "tfcolorize.label_colorness.caption"
+msgid "Colorness"
+msgstr "Intensitet"
+
+#: tfcolorize.label_hue.caption
+msgctxt "tfcolorize.label_hue.caption"
+msgid "Hue"
+msgstr "Ton"
+
+#: tfcolorize.label_preset.caption
+msgid "Preset"
+msgstr ""
+
+#: tfcustomblur.button_cancel.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfcustomblur.button_editmask.caption
+msgid "Edit mask..."
+msgstr "Redigera mask..."
+
+#: tfcustomblur.button_loadmask.caption
+msgid "Load mask..."
+msgstr "Ladda mask..."
+
+#: tfcustomblur.button_ok.caption
+msgctxt "TFCUSTOMBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfcustomblur.caption
+msgctxt "tfcustomblur.caption"
+msgid "Custom blur"
+msgstr "Egen oskärpa"
+
+#: tfcustomblur.openpicturedialog1.title
+msgid "Open grayscale file"
+msgstr "Öppna gråskalefil"
+
+#: tfemboss.button_cancel.caption
+msgctxt "TFEMBOSS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfemboss.button_ok.caption
+msgctxt "TFEMBOSS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfemboss.caption
+msgctxt "tfemboss.caption"
+msgid "Emboss"
+msgstr "Ciselera"
+
+#: tfemboss.checkbox_preservecolors.caption
+msgid "Preserve colors"
+msgstr ""
+
+#: tfemboss.checkbox_transparent.caption
+msgid "Transparent"
+msgstr ""
+
+#: tfemboss.label_direction.caption
+msgctxt "tfemboss.label_direction.caption"
+msgid "Direction :"
+msgstr "Riktning :"
+
+#: tffilterfunction.button_cancel.caption
+msgctxt "tffilterfunction.button_cancel.caption"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tffilterfunction.button_ok.caption
+msgctxt "tffilterfunction.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tffilterfunction.caption
+msgid "Apply function"
+msgstr ""
+
+#: tffilterfunction.checkbox_gsba.caption
+msgctxt "tffilterfunction.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr ""
+
+#: tffilterfunction.label_alphaequals.caption
+msgctxt "tffilterfunction.label_alphaequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_blueequals.caption
+msgctxt "tffilterfunction.label_blueequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_greenequals.caption
+msgctxt "tffilterfunction.label_greenequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_hueequals.caption
+msgctxt "tffilterfunction.label_hueequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_lightnessequals.caption
+msgctxt "tffilterfunction.label_lightnessequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_redequals.caption
+msgctxt "tffilterfunction.label_redequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_saturationequals.caption
+msgctxt "tffilterfunction.label_saturationequals.caption"
+msgid "."
+msgstr ""
+
+#: tffilterfunction.label_variables.caption
+msgid "Variables :"
+msgstr ""
+
+#: tffilterfunction.tabsheet_hsl.caption
+msgid "HSL"
+msgstr ""
+
+#: tffilterfunction.tabsheet_rgb.caption
+msgctxt "tffilterfunction.tabsheet_rgb.caption"
+msgid "RGB"
+msgstr ""
+
+#: tfgeometricbrush.button_cancel.caption
+msgctxt "tfgeometricbrush.button_cancel.caption"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfgeometricbrush.button_ok.caption
+msgctxt "tfgeometricbrush.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfgeometricbrush.caption
+msgid "Geometric brush"
+msgstr ""
+
+#: tfgeometricbrush.checkbox_isgradient.caption
+msgid "Opacity gradient"
+msgstr ""
+
+#: tfgeometricbrush.label1.caption
+msgid "Number of sides:"
+msgstr ""
+
+#: tfimagelist.caption
+msgid "Image List"
+msgstr ""
+
+#: tfimagelist.pmautouncheckonopen.caption
+msgid "Autouncheck files after being open"
+msgstr ""
+
+#: tfimagelist.pmautouncheckonsave.caption
+msgid "Autouncheck files after being edited and saved"
+msgstr ""
+
+#: tfimagelist.pmremoveall.caption
+msgid "Empty image list"
+msgstr ""
+
+#: tfimagelist.pmremovenonexisting.caption
+msgid "Remove nonexisting images"
+msgstr ""
+
+#: tfimagelist.pmremoveunchecked.caption
+msgid "Remove unchecked images"
+msgstr ""
+
+#: tfimagelist.pmunchecknonexisting.caption
+msgid "Uncheck nonexisting files"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[0].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[0].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[1].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[1].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[2].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[2].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.stringgrid1.columns[3].title.caption
+msgctxt "tfimagelist.stringgrid1.columns[3].title.caption"
+msgid "-"
+msgstr ""
+
+#: tfimagelist.tbaddfiles.hint
+msgid "Add images to list"
+msgstr ""
+
+#: tfimagelist.tbautouncheck.hint
+msgid "Enable/disable autounchecking for processed files"
+msgstr ""
+
+#: tfimagelist.tbautozoomfit.hint
+msgid "Enable/disable autofitting images in the LazPaint window"
+msgstr ""
+
+#: tfimagelist.tbcheckall.hint
+msgid "Check all files for processing"
+msgstr ""
+
+#: tfimagelist.tbminiwindow.hint
+msgid "Switch to miniwindow"
+msgstr ""
+
+#: tfimagelist.tbmovedown.hint
+msgid "Move selected items down"
+msgstr ""
+
+#: tfimagelist.tbmoveup.hint
+msgid "Move selected items up"
+msgstr ""
+
+#: tfimagelist.tbnormalwindows.hint
+msgid "Switch to normal window"
+msgstr ""
+
+#: tfimagelist.tbopenimage.hint
+msgid "Open current image"
+msgstr ""
+
+#: tfimagelist.tbopennext.hint
+msgctxt "tfimagelist.tbopennext.hint"
+msgid "Open next image (Alt-Right)"
+msgstr ""
+
+#: tfimagelist.tbopennextsw.hint
+msgctxt "tfimagelist.tbopennextsw.hint"
+msgid "Open next image"
+msgstr ""
+
+#: tfimagelist.tbopenprev.hint
+msgctxt "tfimagelist.tbopenprev.hint"
+msgid "Open previous image (Alt-Left)"
+msgstr ""
+
+#: tfimagelist.tbopenprevsw.hint
+msgctxt "tfimagelist.tbopenprevsw.hint"
+msgid "Open previous image"
+msgstr ""
+
+#: tfimagelist.tbremoveitem.hint
+msgid "Remove selected images from list"
+msgstr ""
+
+#: tfimagelist.tbuncheckall.hint
+msgid "Uncheck all files for processing"
+msgstr ""
+
+#: tfloading.caption
+msgctxt "tfloading.caption"
+msgid "Loading..."
+msgstr ""
+
+#: tfmotionblur.button_cancel.caption
+msgctxt "TFMOTIONBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfmotionblur.button_ok.caption
+msgctxt "TFMOTIONBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfmotionblur.caption
+msgctxt "tfmotionblur.caption"
+msgid "Motion blur"
+msgstr "Rörelseoskärpa"
+
+#: tfmotionblur.checkbox_oriented.caption
+msgid "Oriented"
+msgstr "Orientering"
+
+#: tfmotionblur.label_distance.caption
+msgctxt "tfmotionblur.label_distance.caption"
+msgid "Distance :"
+msgstr "Avstånd :"
+
+#: tfmultiimage.button_cancel.caption
+msgctxt "tfmultiimage.button_cancel.caption"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfmultiimage.button_ok.caption
+msgctxt "tfmultiimage.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfmultiimage.caption
+msgid "Choose image"
+msgstr ""
+
+#: tfnewimage.button_cancel.caption
+msgctxt "TFNEWIMAGE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfnewimage.button_ok.caption
+msgctxt "TFNEWIMAGE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfnewimage.caption
+msgctxt "tfnewimage.caption"
+msgid "New image"
+msgstr "Ny bild"
+
+#: tfnewimage.combobox_bitdepth.text
+msgid "32"
+msgstr ""
+
+#: tfnewimage.label_bitdepth.caption
+msgid "Bit depth :"
+msgstr ""
+
+#: tfnewimage.label_height.caption
+msgctxt "tfnewimage.label_height.caption"
+msgid "Height :"
+msgstr "Höjd :"
+
+#: tfnewimage.label_height1.caption
+msgid "Ratio :"
+msgstr ""
+
+#: tfnewimage.label_memoryrequired.caption
+msgid "Memory required :"
+msgstr ""
+
+#: tfnewimage.label_width.caption
+msgctxt "tfnewimage.label_width.caption"
+msgid "Width :"
+msgstr "Bredd :"
+
+#: tfnoisefilter.button_cancel.caption
+msgctxt "tfnoisefilter.button_cancel.caption"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfnoisefilter.button_ok.caption
+msgctxt "tfnoisefilter.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfnoisefilter.caption
+msgid "Noise filter"
+msgstr ""
+
+#: tfnoisefilter.label_opacity.caption
+msgid "Opacity:"
+msgstr ""
+
+#: tfnoisefilter.radio_grayscalenoise.caption
+msgid "Grayscale noise"
+msgstr ""
+
+#: tfnoisefilter.radio_rgbnoise.caption
+msgid "RGB noise"
+msgstr ""
+
+#: tfobject3d.button_cancel.caption
+msgctxt "tfobject3d.button_cancel.caption"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfobject3d.button_loadtex.caption
+msgid "Texture..."
+msgstr ""
+
+#: tfobject3d.button_notex.caption
+msgid "No tex."
+msgstr ""
+
+#: tfobject3d.button_ok.caption
+msgctxt "tfobject3d.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfobject3d.caption
+msgid "3D object"
+msgstr ""
+
+#: tfobject3d.checkbox_antialiasing.caption
+msgid "Antialiasing"
+msgstr ""
+
+#: tfobject3d.checkbox_biface.caption
+msgid "2-sided faces"
+msgstr ""
+
+#: tfobject3d.checkbox_textureinterp.caption
+msgid "Texture interpolation"
+msgstr ""
+
+#: tfobject3d.groupbox_selectedlight.caption
+msgid "Selected light"
+msgstr ""
+
+#: tfobject3d.groupbox_selectedmaterial.caption
+msgctxt "tfobject3d.groupbox_selectedmaterial.caption"
+msgid "Selected material"
+msgstr ""
+
+#: tfobject3d.label_color.caption
+msgctxt "tfobject3d.label_color.caption"
+msgid "Color :"
+msgstr ""
+
+#: tfobject3d.label_color1.caption
+msgctxt "tfobject3d.label_color1.caption"
+msgid "Color :"
+msgstr ""
+
+#: tfobject3d.label_height.caption
+msgctxt "tfobject3d.label_height.caption"
+msgid "Height :"
+msgstr "Höjd :"
+
+#: tfobject3d.label_lightingnormals.caption
+msgctxt "tfobject3d.label_lightingnormals.caption"
+msgid "Lighting normals :"
+msgstr ""
+
+#: tfobject3d.label_lights.caption
+msgid "Lights :"
+msgstr ""
+
+#: tfobject3d.label_materials.caption
+msgctxt "tfobject3d.label_materials.caption"
+msgid "Materials :"
+msgstr ""
+
+#: tfobject3d.label_opacity.caption
+msgctxt "tfobject3d.label_opacity.caption"
+msgid "Opacity :"
+msgstr ""
+
+#: tfobject3d.label_specularindex.caption
+msgctxt "tfobject3d.label_specularindex.caption"
+msgid "Spec. index :"
+msgstr ""
+
+#: tfobject3d.label_width.caption
+msgctxt "tfobject3d.label_width.caption"
+msgid "Width :"
+msgstr "Bredd :"
+
+#: tfobject3d.label_zoom.caption
+msgctxt "tfobject3d.label_zoom.caption"
+msgid "Zoom"
+msgstr ""
+
+#: tfobject3d.lights.caption
+msgid "Lights"
+msgstr ""
+
+#: tfobject3d.materials.caption
+msgid "Materials"
+msgstr ""
+
+#: tfobject3d.opentexturedialog.title
+msgctxt "tfobject3d.opentexturedialog.title"
+msgid "Open texture"
+msgstr "Öppna textur"
+
+#: tfobject3d.rendering.caption
+msgid "Rendering"
+msgstr ""
+
+#: tfobject3d.tooladddirectional.hint
+msgid "Add a directional light"
+msgstr ""
+
+#: tfobject3d.toolpointlight.hint
+msgid "Add a point light"
+msgstr ""
+
+#: tfobject3d.toolremoveselectedlight.hint
+msgid "Remove selected light"
+msgstr ""
+
+#: tfphongfilter.button_cancel.caption
+msgctxt "tfphongfilter.button_cancel.caption"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfphongfilter.button_ok.caption
+msgctxt "tfphongfilter.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfphongfilter.caption
+msgctxt "tfphongfilter.caption"
+msgid "Shaded map"
+msgstr ""
+
+#: tfphongfilter.groupbox_color.caption
+msgctxt "tfphongfilter.groupbox_color.caption"
+msgid "Color"
+msgstr "Färg"
+
+#: tfphongfilter.groupbox_color1.caption
+msgid "Altitude map"
+msgstr ""
+
+#: tfphongfilter.label_altitude.caption
+msgid "Global altitude :"
+msgstr ""
+
+#: tfphongfilter.label_lightposition.caption
+msgid "Light position :"
+msgstr ""
+
+#: tfphongfilter.radio_mapalpha.caption
+msgid "Alpha"
+msgstr ""
+
+#: tfphongfilter.radio_mapblue.caption
+msgid "B"
+msgstr ""
+
+#: tfphongfilter.radio_mapgreen.caption
+msgid "G"
+msgstr ""
+
+#: tfphongfilter.radio_maplightness.caption
+msgctxt "tfphongfilter.radio_maplightness.caption"
+msgid "Lightness"
+msgstr "Ljusstyrka"
+
+#: tfphongfilter.radio_maplinearlightness.caption
+msgid "Linear lightness"
+msgstr ""
+
+#: tfphongfilter.radio_mapred.caption
+msgid "R"
+msgstr ""
+
+#: tfphongfilter.radio_mapsaturation.caption
+msgctxt "tfphongfilter.radio_mapsaturation.caption"
+msgid "Saturation"
+msgstr "Intensitet"
+
+#: tfphongfilter.radio_usebackcolor.caption
+msgid "Back color"
+msgstr ""
+
+#: tfphongfilter.radio_usekeep.caption
+msgid "Keep"
+msgstr ""
+
+#: tfphongfilter.radio_usepencolor.caption
+msgid "Pen color"
+msgstr ""
+
+#: tfphongfilter.radio_usetexture.caption
+msgctxt "tfphongfilter.radio_usetexture.caption"
+msgid "Current texture"
+msgstr "Vald textur"
+
+#: tfpixelate.button_cancel.caption
+msgctxt "TFPIXELATE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfpixelate.button_ok.caption
+msgctxt "TFPIXELATE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfpixelate.caption
+msgctxt "tfpixelate.caption"
+msgid "Pixelate"
+msgstr "Pixelera"
+
+#: tfpixelate.label_pixelsize.caption
+msgctxt "tfpixelate.label_pixelsize.caption"
+msgid "Pixel size :"
+msgstr "Pixelstorlek :"
+
+#: tfpixelate.label_quality.caption
+msgctxt "tfpixelate.label_quality.caption"
+msgid "Quality :"
+msgstr "Kvaltiet :"
+
+#: tfposterize.button_cancel.caption
+msgctxt "tfposterize.button_cancel.caption"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfposterize.button_ok.caption
+msgctxt "tfposterize.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfposterize.caption
+msgctxt "tfposterize.caption"
+msgid "Posterize"
+msgstr ""
+
+#: tfposterize.checkbox_bylightness.caption
+msgid "By lightness"
+msgstr ""
+
+#: tfposterize.label_levels.caption
+msgid "Levels :"
+msgstr ""
+
+#: tfpreviewdialog.caption
+msgid "Preview"
+msgstr ""
+
+#: tfpreviewdialog.lstatus.caption
+msgctxt "tfpreviewdialog.lstatus.caption"
+msgid "."
+msgstr ""
+
+#: tfprint.button_configureprinter.caption
+msgid "Configure..."
+msgstr ""
+
+#: tfprint.button_print.caption
+msgid "Print!"
+msgstr ""
+
+#: tfprint.button_zoomfit.caption
+msgctxt "tfprint.button_zoomfit.caption"
+msgid "Zoom fit"
+msgstr "Anpassad zoom"
+
+#: tfprint.caption
+msgid "Print"
+msgstr ""
+
+#: tfprint.checkbox_ratio.caption
+msgctxt "tfprint.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "Behåll bildformat"
+
+#: tfprint.groupbox_imagesize.caption
+msgid "Image size"
+msgstr ""
+
+#: tfprint.groupbox_margins.caption
+msgid "Margins"
+msgstr ""
+
+#: tfprint.label_bottom.caption
+msgid "Bottom:"
+msgstr ""
+
+#: tfprint.label_dpix.caption
+msgctxt "tfprint.label_dpix.caption"
+msgid "."
+msgstr ""
+
+#: tfprint.label_dpiy.caption
+msgctxt "tfprint.label_dpiy.caption"
+msgid "."
+msgstr ""
+
+#: tfprint.label_height.caption
+msgid "Height:"
+msgstr ""
+
+#: tfprint.label_left.caption
+msgid "Left:"
+msgstr ""
+
+#: tfprint.label_orientation.caption
+msgid "Orientation:"
+msgstr ""
+
+#: tfprint.label_printerandpaper.caption
+msgid "Printer and paper:"
+msgstr ""
+
+#: tfprint.label_right.caption
+msgid "Right:"
+msgstr ""
+
+#: tfprint.label_top.caption
+msgid "Top:"
+msgstr ""
+
+#: tfprint.label_width.caption
+msgid "Width:"
+msgstr ""
+
+#: tfquestion.caption
+msgid "Question"
+msgstr ""
+
+#: tfquestion.checkbox_rememberchoice.caption
+msgid "Remember this choice"
+msgstr ""
+
+#: tfquestion.label_message.caption
+msgctxt "tfquestion.label_message.caption"
+msgid "."
+msgstr ""
+
+#: tfradialblur.button_cancel.caption
+msgctxt "TFRADIALBLUR.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfradialblur.button_ok.caption
+msgctxt "TFRADIALBLUR.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfradialblur.caption
+msgctxt "tfradialblur.caption"
+msgid "Radial blur"
+msgstr "Cirkulär oskärpa"
+
+#: tfradialblur.label_radius.caption
+msgctxt "tfradialblur.label_radius.caption"
+msgid "Radius :"
+msgstr "Radie :"
+
+#: tfrain.button_cancel.caption
+msgctxt "tfrain.button_cancel.caption"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfrain.button_ok.caption
+msgctxt "tfrain.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfrain.caption
+msgid "Rain"
+msgstr ""
+
+#: tfrain.label_quantity.caption
+msgid "Quantity:"
+msgstr ""
+
+#: tfrain.label_wind.caption
+msgid "Wind :"
+msgstr ""
+
+#: tfresample.button_cancel.caption
+msgctxt "TFRESAMPLE.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfresample.button_ok.caption
+msgctxt "TFRESAMPLE.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfresample.caption
+msgctxt "tfresample.caption"
+msgid "Resample"
+msgstr "Omsampling"
+
+#: tfresample.checkbox_ratio.caption
+msgctxt "tfresample.checkbox_ratio.caption"
+msgid "Keep aspect ratio"
+msgstr "Behåll bildformat"
+
+#: tfresample.label_height.caption
+msgctxt "tfresample.label_height.caption"
+msgid "Height :"
+msgstr "Höjd :"
+
+#: tfresample.label_quality.caption
+msgctxt "tfresample.label_quality.caption"
+msgid "Quality :"
+msgstr "Kvalitet :"
+
+#: tfresample.label_width.caption
+msgctxt "tfresample.label_width.caption"
+msgid "Width :"
+msgstr "Bredd :"
+
+#: tfsaveoption.button_cancel.caption
+msgctxt "tfsaveoption.button_cancel.caption"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfsaveoption.button_ok.caption
+msgctxt "tfsaveoption.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfsaveoption.caption
+msgctxt "tfsaveoption.caption"
+msgid "Save"
+msgstr "Spara"
+
+#: tfsaveoption.checkbox_dithering.caption
+msgid "Dithering"
+msgstr ""
+
+#: tfsaveoption.label1.caption
+msgid "Quality:"
+msgstr ""
+
+#: tfsaveoption.label_0.caption
+msgid "0"
+msgstr ""
+
+#: tfsaveoption.label_1.caption
+msgid "100"
+msgstr ""
+
+#: tfsaveoption.label_50.caption
+msgid "50"
+msgstr ""
+
+#: tfsaveoption.label_colordepth.caption
+msgid "Color depth:"
+msgstr ""
+
+#: tfsaveoption.label_size.caption
+msgid "Size:"
+msgstr ""
+
+#: tfsaveoption.radiobutton_16colors.caption
+msgid "16 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_24bitsperpixel.caption
+msgid "24 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_256colors.caption
+msgid "256 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_2colors.caption
+msgid "2 colors"
+msgstr ""
+
+#: tfsaveoption.radiobutton_32bitsperpixel.caption
+msgid "32 bits"
+msgstr ""
+
+#: tfsaveoption.radiobutton_miomap.caption
+msgid "MioMap"
+msgstr ""
+
+#: tfsharpen.button_cancel.caption
+msgctxt "tfsharpen.button_cancel.caption"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfsharpen.button_ok.caption
+msgctxt "tfsharpen.button_ok.caption"
+msgid "OK"
+msgstr "OK"
+
+#: tfsharpen.caption
+msgid "Sharpen/Smooth"
+msgstr ""
+
+#: tfsharpen.label_amount.caption
+msgctxt "tfsharpen.label_amount.caption"
+msgid "Amount :"
+msgstr ""
+
+#: tfshiftcolors.button_cancel.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_CANCEL.CAPTION"
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: tfshiftcolors.button_ok.caption
+msgctxt "TFSHIFTCOLORS.BUTTON_OK.CAPTION"
+msgid "OK"
+msgstr "OK"
+
+#: tfshiftcolors.caption
+msgctxt "tfshiftcolors.caption"
+msgid "Shift colors"
+msgstr "Skifta färger"
+
+#: tfshiftcolors.checkbox_gsba.caption
+msgctxt "tfshiftcolors.checkbox_gsba.caption"
+msgid "Corrected hue and lightness"
+msgstr ""
+
+#: tfshiftcolors.label1.caption
+msgctxt "TFSHIFTCOLORS.LABEL1.CAPTION"
+msgid "Hue"
+msgstr "Färgton"
+
+#: tfshiftcolors.label2.caption
+msgctxt "TFSHIFTCOLORS.LABEL2.CAPTION"
+msgid "Saturation"
+msgstr "Intensitet"
+
+#: tftoolbox.caption
+msgctxt "tftoolbox.caption"
+msgid "Tools"
+msgstr "Verktyg"
+

+ 38 - 0
lazpaint/release/changelog

@@ -67,6 +67,44 @@ lazpaint (7.0.5) stable; urgency=low
   * shortcuts for colorpicker is "C", for curve move point "Z", for curve insert point "I" as well of Insert
   * dutch translation
   * filling of workarea with maximum zoom
+  * paste vector shape on empty layer
+  * alignment of vector shapes to pixels with CTRL
+  * return key to finish polygon shape
+  * reset counter of popups on "forget dialogs"
+  * fix TIFF loading error on some systems
 
 -- circular <[email protected]>  Sun, 24 Aug 2019 11:46:00 +0100
 
+lazpaint (7.0.6) stable; urgency=low
+
+  * fix merge bitmap layer
+  * fix mouse scroll on MacOS
+  * clipboard image format with transparency
+  * allow undo when creating shape
+  * fix texture panel
+  * merging empty layer simply deletes it
+  * fix layer offset after undoing merge layer
+
+-- circular <[email protected]>  Wed, 11 Sep 2019 18:20:00 +0100
+
+lazpaint (7.0.7) stable; urgency=low
+
+  * polygon: clicking first point closes the polygon, holding Shift while inserting new point will align it on segment
+  * rectangular shape: right-clicking on border will rotate/shear the shape as with Alt key  * clipboard image format with transparency
+  * merging vector layers will make a vector layer if possible
+  * merging a vector with a raster layer will convert the latter to a vector shape
+  * transform texture when modifying rectangular shape
+  * select vector shape even if clicking a bit aside
+  * allow Space key when editing text object
+  * update contextual toolbar when selecting shape with edit shape tool
+  * context menu of toolbar in the upper toolbar background
+  * handling case when saving current file that has been renamed/deleted
+  * faster saving of layers with vectors
+  * fix bug with undo of deleted vector layer
+  * fix transform when copying shapes between layers
+  * fix crop layer with layer offset
+  * clear layer when deleting it in shape editor
+  * duplicate entry in GIF or TIFF
+
+-- circular <[email protected]>  Wed, 10 Oct 2019 17:37:00 +0100
+

+ 38 - 0
lazpaint/release/debian/linux32/DEBIAN/changelog

@@ -67,6 +67,44 @@ lazpaint (7.0.5) stable; urgency=low
   * shortcuts for colorpicker is "C", for curve move point "Z", for curve insert point "I" as well of Insert
   * dutch translation
   * filling of workarea with maximum zoom
+  * paste vector shape on empty layer
+  * alignment of vector shapes to pixels with CTRL
+  * return key to finish polygon shape
+  * reset counter of popups on "forget dialogs"
+  * fix TIFF loading error on some systems
 
 -- circular <[email protected]>  Sun, 24 Aug 2019 11:46:00 +0100
 
+lazpaint (7.0.6) stable; urgency=low
+
+  * fix merge bitmap layer
+  * fix mouse scroll on MacOS
+  * clipboard image format with transparency
+  * allow undo when creating shape
+  * fix texture panel
+  * merging empty layer simply deletes it
+  * fix layer offset after undoing merge layer
+
+-- circular <[email protected]>  Wed, 11 Sep 2019 18:20:00 +0100
+
+lazpaint (7.0.7) stable; urgency=low
+
+  * polygon: clicking first point closes the polygon, holding Shift while inserting new point will align it on segment
+  * rectangular shape: right-clicking on border will rotate/shear the shape as with Alt key  * clipboard image format with transparency
+  * merging vector layers will make a vector layer if possible
+  * merging a vector with a raster layer will convert the latter to a vector shape
+  * transform texture when modifying rectangular shape
+  * select vector shape even if clicking a bit aside
+  * allow Space key when editing text object
+  * update contextual toolbar when selecting shape with edit shape tool
+  * context menu of toolbar in the upper toolbar background
+  * handling case when saving current file that has been renamed/deleted
+  * faster saving of layers with vectors
+  * fix bug with undo of deleted vector layer
+  * fix transform when copying shapes between layers
+  * fix crop layer with layer offset
+  * clear layer when deleting it in shape editor
+  * duplicate entry in GIF or TIFF
+
+-- circular <[email protected]>  Wed, 10 Oct 2019 17:37:00 +0100
+

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

@@ -1,5 +1,5 @@
 Package: lazpaint
-Version: 7.0.5
+Version: 7.0.7
 Section: base
 Priority: optional
 Architecture: i386

+ 38 - 0
lazpaint/release/debian/linux64/DEBIAN/changelog

@@ -67,6 +67,44 @@ lazpaint (7.0.5) stable; urgency=low
   * shortcuts for colorpicker is "C", for curve move point "Z", for curve insert point "I" as well of Insert
   * dutch translation
   * filling of workarea with maximum zoom
+  * paste vector shape on empty layer
+  * alignment of vector shapes to pixels with CTRL
+  * return key to finish polygon shape
+  * reset counter of popups on "forget dialogs"
+  * fix TIFF loading error on some systems
 
 -- circular <[email protected]>  Sun, 24 Aug 2019 11:46:00 +0100
 
+lazpaint (7.0.6) stable; urgency=low
+
+  * fix merge bitmap layer
+  * fix mouse scroll on MacOS
+  * clipboard image format with transparency
+  * allow undo when creating shape
+  * fix texture panel
+  * merging empty layer simply deletes it
+  * fix layer offset after undoing merge layer
+
+-- circular <[email protected]>  Wed, 11 Sep 2019 18:20:00 +0100
+
+lazpaint (7.0.7) stable; urgency=low
+
+  * polygon: clicking first point closes the polygon, holding Shift while inserting new point will align it on segment
+  * rectangular shape: right-clicking on border will rotate/shear the shape as with Alt key  * clipboard image format with transparency
+  * merging vector layers will make a vector layer if possible
+  * merging a vector with a raster layer will convert the latter to a vector shape
+  * transform texture when modifying rectangular shape
+  * select vector shape even if clicking a bit aside
+  * allow Space key when editing text object
+  * update contextual toolbar when selecting shape with edit shape tool
+  * context menu of toolbar in the upper toolbar background
+  * handling case when saving current file that has been renamed/deleted
+  * faster saving of layers with vectors
+  * fix bug with undo of deleted vector layer
+  * fix transform when copying shapes between layers
+  * fix crop layer with layer offset
+  * clear layer when deleting it in shape editor
+  * duplicate entry in GIF or TIFF
+
+-- circular <[email protected]>  Wed, 10 Oct 2019 17:37:00 +0100
+

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

@@ -1,5 +1,5 @@
 Package: lazpaint
-Version: 7.0.5
+Version: 7.0.7
 Section: base
 Priority: optional
 Architecture: amd64

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

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>CFBundleIconFile</key>
+    <string>lazpaint</string>
+    <key>CFBundleDevelopmentRegion</key>
+    <string>English</string>
+    <key>CFBundleExecutable</key>
+    <string>lazpaint</string>
+    <key>CFBundleName</key>
+    <string>LazPaint</string>
+    <key>CFBundleIdentifier</key>
+    <string>com.company.lazpaint</string>
+    <key>CFBundleInfoDictionaryVersion</key>
+    <string>6.0</string>
+    <key>CFBundlePackageType</key>
+    <string>APPL</string>
+    <key>CFBundleSignature</key>
+    <string>lazp</string>
+    <key>CFBundleShortVersionString</key>
+    <string>7.0.7</string>
+    <key>CFBundleVersion</key>
+    <string>7.0.7</string>
+    <key>CSResourcesFileMapped</key>
+    <true/>
+    <key>CFBundleDocumentTypes</key>
+    <array>
+      <dict>
+        <key>CFBundleTypeRole</key>
+        <string>Viewer</string>
+        <key>CFBundleTypeExtensions</key>
+        <array>
+          <string>*</string>
+        </array>
+        <key>CFBundleTypeOSTypes</key>
+        <array>
+          <string>fold</string>
+          <string>disk</string>
+          <string>****</string>
+        </array>
+      </dict>
+    </array>
+    <key>NSHighResolutionCapable</key>
+    <true/>
+  </dict>
+</plist>

+ 0 - 0
lazpaint/release/macOS/LazPaint.app/Contents/MacOS/delete.me


+ 1 - 0
lazpaint/release/macOS/LazPaint.app/Contents/PkgInfo

@@ -0,0 +1 @@
+APPL????

BIN
lazpaint/release/macOS/LazPaint.app/Contents/Resources/lazpaint.icns


BIN
lazpaint/release/macOS/background.png


+ 10 - 0
lazpaint/release/macOS/instructions.txt

@@ -0,0 +1,10 @@
+To make the DMG file:
+- compile the program in release mode for a CPU target (32 or 64)
+- open a shell in this macOS folder and run ./makedmg.sh
+- rename the created DMG file by appending the CPU target
+
+Alternatively, you can make an application bundle by hand:
+- make copy the LazPaint.app folder
+- copy "lazpaint" executable file into subfolder /Contents/MacOS
+- copy aditionnal files into subfolder /Contents/Resources
+(readme file, i18n and models folders, but not the auto-created application bundle)

+ 30 - 29
lazpaint/release/macOS/makedmg.sh

@@ -2,7 +2,7 @@
 set -e
 
 if ! [ ${OSTYPE:0:6} = "darwin" ]; then
-  echo " This script is for OS X only"
+  echo "This script is for OS X only"
   exit 1
 fi
 
@@ -12,21 +12,17 @@ fi
 
 
 appname=LazPaint
-appversion=7.0.5
+appversion=7.0.7
 pkgversion=0
-
-appnamenospaces=LazPaint
-dskimage="$appnamenospaces"
+appnamenospaces=lazpaint
 appbundle="$appname.app"
 
 DMG_BACKGROUND_IMG="background.png"
-
-
-
-VOL_NAME="${appname}"   
+VOL_NAME="$appnamenospaces${appversion}_macos"   
 DMG_TMP="${VOL_NAME}-temp.dmg"
 DMG_FINAL="${VOL_NAME}.dmg"         
-STAGING_DIR="./macOS"             # we copy all our stuff into this dir
+STAGING_DIR="./staging"             # we copy all our stuff into this dir
+SOURCE_DIR="$(cd ../bin; pwd)"
 
 # Check the background image DPI and convert it if it isn't 72x72
 _BACKGROUND_IMAGE_DPI_H=`sips -g dpiHeight ${DMG_BACKGROUND_IMG} | grep -Eo '[0-9]+\.[0-9]+'`
@@ -48,15 +44,25 @@ rm -rf "${STAGING_DIR}" "${DMG_TMP}" "${DMG_FINAL}"
 
 # copy over the stuff we want in the final disk image to our staging dir
 mkdir -p "${STAGING_DIR}"
-cp -rpf ./LazPaint.app "${STAGING_DIR}"
+cp -rpf "./$appbundle" "${STAGING_DIR}"
 # ... cp anything else you want in the DMG - documentation, etc.
 
-pushd "${STAGING_DIR}"
-
-# ... perform any other stripping/compressing of libs and executables
-
-popd
-
+echo Staging files...
+pushd "${STAGING_DIR}/${appbundle}" >/dev/null
+ pushd Contents >/dev/null
+  pushd MacOS >/dev/null
+   unlink delete.me
+   cp "${SOURCE_DIR}/${appnamenospaces}" .
+  popd >/dev/null
+  pushd Resources >/dev/null
+   cp -r "${SOURCE_DIR}/i18n" .
+   cp -r "${SOURCE_DIR}/models" .
+   cp "${SOURCE_DIR}/readme.txt" .
+  popd >/dev/null
+ popd >/dev/null
+popd >/dev/null
+
+echo Making uncompressed DMG
 # figure out how big our DMG needs to be
 #  assumes our contents are at least 1M!
 SIZE=`du -sh "${STAGING_DIR}" | sed 's/\([0-9\.]*\)M\(.*\)/\1/'`
@@ -71,8 +77,7 @@ fi
 hdiutil create -srcfolder "${STAGING_DIR}" -volname "${VOL_NAME}" -fs HFS+ \
       -fsargs "-c c=64,a=16,e=16" -format UDRW -size ${SIZE}M "${DMG_TMP}"
 
-echo "Created DMG: ${DMG_TMP}"
-
+echo Mounting DMG...
 # mount it and save the device
 DEVICE=$(hdiutil attach -readwrite -noverify "${DMG_TMP}" | \
          egrep '^/dev/' | sed 1q | awk '{print $1}')
@@ -80,12 +85,13 @@ DEVICE=$(hdiutil attach -readwrite -noverify "${DMG_TMP}" | \
 sleep 2
 
 # add a link to the Applications dir
-echo "Add link to /Applications"
-pushd /Volumes/"${VOL_NAME}"
+echo "Adding link to Applications..."
+pushd /Volumes/"${VOL_NAME}" >/dev/null
 ln -s /Applications
-popd
+popd >/dev/null
 
 # add a background image
+echo "Adding background image..."
 mkdir /Volumes/"${VOL_NAME}"/.background
 cp "${DMG_BACKGROUND_IMG}" /Volumes/"${VOL_NAME}"/.background/
 
@@ -103,7 +109,7 @@ echo '
            set arrangement of viewOptions to not arranged
            set icon size of viewOptions to 72
            set background picture of viewOptions to file ".background:'${DMG_BACKGROUND_IMG}'"
-           set position of item "'${appname}'.app" of container window to {160, 205}
+           set position of item "'$appbundle'" of container window to {160, 205}
            set position of item "Applications" of container window to {360, 205}
            close
            open
@@ -123,13 +129,8 @@ echo "Creating compressed image"
 hdiutil convert "${DMG_TMP}" -format UDZO -imagekey zlib-level=9 -o "${DMG_FINAL}"
 
 # clean up
+echo Cleaning up...
 rm -rf "${DMG_TMP}"
 rm -rf "${STAGING_DIR}"
 
 echo 'Done.'
-
-if [ -e "debian/$bindir" ]; then
-  rm -R debian
-fi
-
-exit

+ 1 - 1
lazpaint/release/stable/latest.txt

@@ -1,2 +1,2 @@
-6.4.1
+7.0.7
 lang_update=

+ 9 - 9
lazpaint/release/stable/pad_file.xml

@@ -34,10 +34,10 @@
 	</Company_Info>
 	<Program_Info>
 		<Program_Name>LazPaint</Program_Name>
-		<Program_Version>6.4.1</Program_Version>
-		<Program_Release_Month>04</Program_Release_Month>
-		<Program_Release_Day>07</Program_Release_Day>
-		<Program_Release_Year>2015</Program_Release_Year>
+		<Program_Version>7.0.7</Program_Version>
+		<Program_Release_Month>10</Program_Release_Month>
+		<Program_Release_Day>14</Program_Release_Day>
+		<Program_Release_Year>2019</Program_Release_Year>
 		<Program_Cost_Dollars />
 		<Program_Cost_Other_Code />
 		<Program_Cost_Other />
@@ -46,14 +46,14 @@
 		<Program_Install_Support>Install and Uninstall</Program_Install_Support>
 		<Program_OS_Support>Mac OSX,Linux,Win7 x32,Win7 x64,WinVista,WinVista x64,WinXP</Program_OS_Support>
 		<Program_Language>English</Program_Language>
-		<Program_Change_Info>added brush tool, clone tool, palette toolbar, docking of toolbox, choice of quality when saving PNG/JPG/BMP files, rain rendering, improved 3d object importation (texture, vertex normals)</Program_Change_Info>
+		<Program_Change_Info>vectorial shapes and layers, dark theme, align and move shapes up and down, frame edition for ICO/GIF/TIFF, SVG as vectorial, resources files LRS/RES, ratio for selection rectangle/ellipse</Program_Change_Info>
 		<Program_Specific_Category>Graphics</Program_Specific_Category>
 		<Program_Category_Class>Graphic Apps::Editors</Program_Category_Class>
 		<Program_System_Requirements>Pentium, 32-bit processor, 200 Mbytes RAM</Program_System_Requirements>
 		<File_Info>
-			<File_Size_Bytes>3321446</File_Size_Bytes>
-			<File_Size_K>3244</File_Size_K>
-			<File_Size_MB>3.16</File_Size_MB>
+			<File_Size_Bytes>5434703</File_Size_Bytes>
+			<File_Size_K>5307</File_Size_K>
+			<File_Size_MB>5.18</File_Size_MB>
 		</File_Info>
 		<Expire_Info>
 			<Has_Expire_Info>N</Has_Expire_Info>
@@ -116,7 +116,7 @@
 			<Application_XML_File_URL>http://lazpaint.sourceforge.net/pad_file.xml</Application_XML_File_URL>
 		</Application_URLs>
 		<Download_URLs>
-			<Primary_Download_URL>https://github.com/bgrabitmap/lazpaint/releases/download/v6.4.1/lazpaint6.4.1_setup_win32_win64.exe</Primary_Download_URL>
+			<Primary_Download_URL>https://github.com/bgrabitmap/lazpaint/releases/download/v7.0.7/lazpaint7.0.7_setup_win32_win64.exe</Primary_Download_URL>
 			<Secondary_Download_URL />
 			<Additional_Download_URL_1 />
 			<Additional_Download_URL_2 />

BIN
lazpaint/release/stable/pad_icon.gif


BIN
lazpaint/release/stable/pad_screenshot.png


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

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

+ 62 - 57
lazpaint/tools/utool.pas

@@ -5,9 +5,14 @@ unit UTool;
 interface
 
 uses
-  Classes, SysUtils, Graphics, BGRABitmap, BGRABitmapTypes, uimage,
-  UImageType, ULayerAction, LCLType, Controls, UBrushType, UConfig,
-  LCVectorPolyShapes, BGRAGradientScanner, LCVectorRectShapes;
+  Classes, SysUtils, Graphics, BGRABitmap, BGRABitmapTypes, uimage, UImageType,
+  ULayerAction, LCLType, Controls, UBrushType, UConfig, LCVectorPolyShapes,
+  BGRAGradientScanner, BGRALayerOriginal, LCVectorRectShapes;
+
+const
+  VK_SNAP = {$IFDEF DARWIN}VK_LWIN{$ELSE}VK_CONTROL{$ENDIF};
+  VK_SNAP2 = {$IFDEF DARWIN}VK_RWIN{$ELSE}VK_CONTROL{$ENDIF};
+  ssSnap = {$IFDEF DARWIN}ssMeta{$ELSE}ssCtrl{$ENDIF};
 
 type TPaintToolType = (ptHand,ptHotSpot, ptMoveLayer,ptRotateLayer,ptZoomLayer,
                    ptPen, ptBrush, ptClone, ptColorPicker, ptEraser,
@@ -39,7 +44,7 @@ type
   TBitmapToVirtualScreenFunction = function(PtF: TPointF): TPointF of object;
 
   TEraserMode = (emEraseAlpha, emSoften);
-  TToolCommand = (tcCut, tcCopy, tcPaste, tcDelete, tcMoveUp, tcMoveDown, tcMoveToFront, tcMoveToBack,
+  TToolCommand = (tcCut, tcCopy, tcPaste, tcDelete, tcFinish, tcMoveUp, tcMoveDown, tcMoveToFront, tcMoveToBack,
     tcAlignLeft, tcCenterHorizontally, tcAlignRight, tcAlignTop, tcCenterVertically, tcAlignBottom,
     tcShapeToSpline);
 
@@ -47,6 +52,8 @@ function GradientColorSpaceToDisplay(AValue: TBGRAColorInterpolation): string;
 function DisplayToGradientColorSpace(AValue: string): TBGRAColorInterpolation;
 
 type
+  TLayerKind = (lkUnknown, lkEmpty, lkBitmap, lkTransformedBitmap, lkGradient, lkVectorial, lkSVG, lkOther);
+
   { TGenericTool }
 
   TGenericTool = class
@@ -64,12 +71,12 @@ type
     function FixLayerOffset: boolean; virtual;
     function DoToolDown(toolDest: TBGRABitmap; pt: TPoint; ptF: TPointF; rightBtn: boolean): TRect; virtual;
     function DoToolMove(toolDest: TBGRABitmap; pt: TPoint; ptF: TPointF): TRect; virtual;
-    procedure DoToolMoveAfter(pt: TPoint; ptF: TPointF); virtual;
     function DoToolUpdate(toolDest: TBGRABitmap): TRect; virtual;
     procedure OnTryStop(sender: TCustomLayerAction); virtual;
     function SelectionMaxPointDistance: single;
     function GetStatusText: string; virtual;
     function DoGetToolDrawingLayer: TBGRABitmap; virtual;
+    function GetCurrentLayerKind: TLayerKind;
   public
     ToolUpdateNeeded: boolean;
     Cursor: TCursor;
@@ -84,7 +91,6 @@ type
     function ToolUpdate: TRect;
     function ToolDown(X,Y: single; rightBtn: boolean): TRect;
     function ToolMove(X,Y: single): TRect;
-    procedure ToolMoveAfter(X,Y: single);
     function ToolKeyDown(var key: Word): TRect; virtual;
     function ToolKeyUp(var key: Word): TRect; virtual;
     function ToolKeyPress(var key: TUTF8Char): TRect; virtual;
@@ -117,13 +123,13 @@ type
 
   TToolClass = class of TGenericTool;
 
-  TToolPopupMessage= (tpmNone,tpmHoldShiftForSquare, tpmHoldCtrlSnapToPixel,
-    tpmReturnValides, tpmBackspaceRemoveLastPoint, tpmCtrlRestrictRotation,
-    tpmAltShiftScaleMode, tpmCurveModeHint, tpmBlendOpBackground,
+  TToolPopupMessage= (tpmNone,tpmHoldKeyForSquare, tpmHoldKeySnapToPixel,
+    tpmReturnValides, tpmBackspaceRemoveLastPoint, tpmHoldKeyRestrictRotation,
+    tpmHoldKeysScaleMode, tpmCurveModeHint, tpmBlendOpBackground,
     tpmRightClickForSource);
 
   TOnToolChangedHandler = procedure(sender: TToolManager; ANewToolType: TPaintToolType) of object;
-  TOnPopupToolHandler = procedure(sender: TToolManager; APopupMessage: TToolPopupMessage) of object;
+  TOnPopupToolHandler = procedure(sender: TToolManager; APopupMessage: TToolPopupMessage; AKey: Word) of object;
 
   TShapeOption = (toAliasing, toDrawShape, toFillShape, toCloseShape);
   TShapeOptions = set of TShapeOption;
@@ -272,10 +278,8 @@ type
 
     function ToolDown(X,Y: single; ARightBtn: boolean; APressure: single): boolean; overload;
     function ToolMove(X,Y: single; APressure: single): boolean; overload;
-    procedure ToolMoveAfter(X,Y: single); overload;
     function ToolDown(ACoord: TPointF; ARightBtn: boolean; APressure: single): boolean; overload;
     function ToolMove(ACoord: TPointF; APressure: single): boolean; overload;
-    procedure ToolMoveAfter(coord: TPointF); overload;
     function ToolKeyDown(var key: Word): boolean;
     function ToolKeyUp(var key: Word): boolean;
     function ToolKeyPress(var key: TUTF8Char): boolean;
@@ -286,7 +290,7 @@ type
     procedure ToolOpen;
     function ToolUpdate: boolean;
     function ToolUpdateNeeded: boolean;
-    procedure ToolPopup(AMessage: TToolPopupMessage);
+    procedure ToolPopup(AMessage: TToolPopupMessage; AKey: Word = 0);
     procedure HintReturnValidates;
 
     function IsSelectingTool: boolean;
@@ -368,12 +372,12 @@ type
    end;
 
 procedure RegisterTool(ATool: TPaintToolType; AClass: TToolClass);
-function ToolPopupMessageToStr(AMessage :TToolPopupMessage): string;
+function ToolPopupMessageToStr(AMessage :TToolPopupMessage; AKey: Word = 0): string;
 
 implementation
 
 uses Types, ugraph, LCScaleDPI, LazPaintType, UCursors, BGRATextFX, ULoading, uresourcestrings,
-  BGRATransform;
+  BGRATransform, LCVectorOriginal, BGRAGradientOriginal, BGRASVGOriginal;
 
 function StrToPaintToolType(const s: ansistring): TPaintToolType;
 var pt: TPaintToolType;
@@ -421,15 +425,25 @@ begin
   PaintTools[ATool] := AClass;
 end;
 
-function ToolPopupMessageToStr(AMessage: TToolPopupMessage): string;
+function ReplaceKey(AText: string; AKey: Word; AParam: integer = 1): string;
+begin
+  if AKey = VK_SHIFT then result := StringReplace(AText, '%'+inttostr(AParam), rsShift, []) else
+  if AKey = VK_CONTROL then result := StringReplace(AText, '%'+inttostr(AParam), rsCtrl, []) else
+  if AKey = VK_MENU then result := StringReplace(AText, '%'+inttostr(AParam), rsAlt, []) else
+  if AKey = VK_LWIN then result := StringReplace(AText, '%'+inttostr(AParam), rsCmd, []) else
+    result := AText;
+
+end;
+
+function ToolPopupMessageToStr(AMessage: TToolPopupMessage; AKey: Word = 0): string;
 begin
   case AMessage of
-  tpmHoldShiftForSquare: result := rsHoldShiftForSquare;
-  tpmHoldCtrlSnapToPixel: result := rsHoldCtrlSnapToPixel;
+  tpmHoldKeyForSquare: result := ReplaceKey(rsHoldKeyForSquare, AKey);
+  tpmHoldKeySnapToPixel: result := ReplaceKey(rsHoldKeySnapToPixel, AKey);
   tpmReturnValides: result := rsReturnValides;
   tpmBackspaceRemoveLastPoint: result := rsBackspaceRemoveLastPoint;
-  tpmCtrlRestrictRotation: result := rsCtrlRestrictRotation;
-  tpmAltShiftScaleMode: result := rsAltShiftScaleMode;
+  tpmHoldKeyRestrictRotation: result := ReplaceKey(rsHoldKeyRestrictRotation, AKey);
+  tpmHoldKeysScaleMode: result := ReplaceKey(ReplaceKey(rsHoldKeysScaleMode, AKey, 2), VK_MENU);
   tpmCurveModeHint: result := rsCurveModeHint;
   tpmBlendOpBackground: result := rsBlendOpNotUsedForBackground;
   tpmRightClickForSource: result := rsRightClickForSource;
@@ -502,6 +516,28 @@ begin
     result := Action.DrawingLayer;
 end;
 
+function TGenericTool.GetCurrentLayerKind: TLayerKind;
+var
+  c: TBGRALayerOriginalAny;
+begin
+  if not Manager.Image.LayerOriginalDefined[Manager.Image.CurrentLayerIndex] then
+  begin
+    if Manager.Image.CurrentLayerEmpty then exit(lkEmpty)
+    else exit(lkBitmap);
+  end else
+  if not Manager.Image.LayerOriginalKnown[Manager.Image.CurrentLayerIndex] then
+   exit(lkUnknown)
+  else
+  begin
+    c := Manager.Image.LayerOriginalClass[Manager.Image.CurrentLayerIndex];
+    if c = TVectorOriginal then exit(lkVectorial) else
+    if c = TBGRALayerImageOriginal then exit(lkTransformedBitmap) else
+    if c = TBGRALayerGradientOriginal then exit(lkGradient) else
+    if c = TBGRALayerSVGOriginal then exit(lkSVG) else
+      exit(lkOther);
+  end;
+end;
+
 function TGenericTool.GetAction: TLayerAction;
 begin
   if not Assigned(FAction) then
@@ -549,14 +585,6 @@ begin
 end;
 {$hints on}
 
-{$hints off}
-procedure TGenericTool.DoToolMoveAfter(pt: TPoint; ptF: TPointF);
-begin
-  //nothing
-end;
-
-{$hints on}
-
 constructor TGenericTool.Create(AManager: TToolManager);
 begin
   inherited Create;
@@ -712,21 +740,6 @@ begin
   result := DoToolMove(toolDest,ptF.Round,ptF);
 end;
 
-procedure TGenericTool.ToolMoveAfter(X, Y: single);
-var
-  pt: TPoint;
-  ptF: TPointF;
-begin
-  if FixLayerOffset then
-  begin
-    x -= LayerOffset.x;
-    y -= LayerOffset.y;
-  end;
-  pt := Point(round(x),round(y));
-  ptF := PointF(x,y);
-  DoToolMoveAfter(pt,ptF);
-end;
-
 {$hints off}
 function TGenericTool.ToolKeyDown(var key: Word): TRect;
 begin
@@ -1674,12 +1687,6 @@ begin
   if result then NotifyImageOrSelectionChanged(currentTool.LastToolDrawingLayer, changed);
 end;
 
-procedure TToolManager.ToolMoveAfter(X, Y: single); overload;
-begin
-  if ToolCanBeUsed then
-    currentTool.ToolMoveAfter(X,Y);
-end;
-
 function TToolManager.ToolKeyDown(var key: Word): boolean;
 var changed: TRect;
 begin
@@ -1725,7 +1732,10 @@ end;
 function TToolManager.ToolCommand(ACommand: TToolCommand): boolean;
 begin
   if Assigned(FCurrentTool) then
-    result := FCurrentTool.ToolCommand(ACommand)
+  begin
+    result := FCurrentTool.ToolCommand(ACommand);
+    CheckExitTool;
+  end
   else
     result := false;
 end;
@@ -1797,10 +1807,10 @@ begin
     result := true;
 end;
 
-procedure TToolManager.ToolPopup(AMessage: TToolPopupMessage);
+procedure TToolManager.ToolPopup(AMessage: TToolPopupMessage; AKey: Word = 0);
 begin
   if Assigned(FOnPopupToolHandler) then
-    FOnPopupToolHandler(self, AMessage);
+    FOnPopupToolHandler(self, AMessage, AKey);
 end;
 
 function TToolManager.IsSelectingTool: boolean;
@@ -1846,11 +1856,6 @@ begin
   result := ToolMove(ACoord.x,ACoord.y,APressure)
 end;
 
-procedure TToolManager.ToolMoveAfter(coord: TPointF); overload;
-begin
-  ToolMoveAfter(coord.x,coord.y);
-end;
-
 initialization
   fillchar({%H-}PaintTools,sizeof(PaintTools),0);
 

+ 33 - 21
lazpaint/tools/utoolbasic.pas

@@ -15,14 +15,15 @@ type
   TToolHand = class(TReadonlyTool)
   protected
     handMoving: boolean;
-    handOrigin: TPoint;
+    handOriginF: TPointF;
     function FixSelectionTransform: boolean; override;
+    function FixLayerOffset: boolean; override;
     function DoToolDown({%H-}toolDest: TBGRABitmap; pt: TPoint; {%H-}ptF: TPointF;
       {%H-}rightBtn: boolean): TRect; override;
     function DoToolMove({%H-}toolDest: TBGRABitmap; pt: TPoint; {%H-}ptF: TPointF): TRect; override;
-    procedure DoToolMoveAfter(pt: TPoint; {%H-}ptF: TPointF); override;
     function GetStatusText: string; override;
   public
+    constructor Create(AManager: TToolManager); override;
     function ToolUp: TRect; override;
   end;
 
@@ -305,12 +306,11 @@ begin
     result := EmptyRect;
 end;
 
-function TToolPen.DoToolMove(toolDest: TBGRABitmap; pt: TPoint; ptF: TPointF
-  ): TRect;
+function TToolPen.DoToolMove(toolDest: TBGRABitmap; pt: TPoint; ptF: TPointF): TRect;
 begin
   if (manager.PenWidth <= 3) and not HintShowed then
   begin
-    Manager.ToolPopup(tpmHoldCtrlSnapToPixel);
+    Manager.ToolPopup(tpmHoldKeySnapToPixel, VK_SNAP);
     HintShowed:= true;
   end;
   if snapToPixel then ptF := PointF(pt.X,pt.Y);
@@ -326,11 +326,12 @@ end;
 constructor TToolPen.Create(AManager: TToolManager);
 begin
   inherited Create(AManager);
+  snapToPixel:= false;
 end;
 
 function TToolPen.ToolKeyDown(var key: Word): TRect;
 begin
-  if key = VK_CONTROL then
+  if key = VK_SNAP then
   begin
     snapToPixel := true;
     Key := 0;
@@ -340,7 +341,7 @@ end;
 
 function TToolPen.ToolKeyUp(var key: Word): TRect;
 begin
-  if key = VK_CONTROL then
+  if key = VK_SNAP then
   begin
     snapToPixel := false;
     key := 0;
@@ -415,6 +416,11 @@ begin
   Result:= false;
 end;
 
+function TToolHand.FixLayerOffset: boolean;
+begin
+  Result:= false;
+end;
+
 function TToolHand.DoToolDown(toolDest: TBGRABitmap; pt: TPoint; ptF: TPointF;
   rightBtn: boolean): TRect;
 begin
@@ -422,25 +428,25 @@ begin
   if not handMoving then
   begin
     handMoving := true;
-    handOrigin := pt;
+    handOriginF := ptF;
   end;
 end;
 
-function TToolHand.DoToolMove(toolDest: TBGRABitmap; pt: TPoint; ptF: TPointF
-  ): TRect;
+function TToolHand.DoToolMove(toolDest: TBGRABitmap; pt: TPoint; ptF: TPointF): TRect;
+var
+  newOfs: TPoint;
 begin
-  if handMoving and ((handOrigin.X <> pt.X) or (handOrigin.Y <> pt.Y)) then
+  result := EmptyRect;
+  if handMoving then
   begin
-    Manager.Image.ImageOffset := Point(Manager.Image.ImageOffset.X+pt.X-HandOrigin.X,
-                                       Manager.Image.ImageOffset.Y+pt.Y-HandOrigin.Y);
-    result := OnlyRenderChange;
-  end else
-    result := EmptyRect;
-end;
-
-procedure TToolHand.DoToolMoveAfter(pt: TPoint; ptF: TPointF);
-begin
-  if handMoving then handOrigin := pt;
+    newOfs := Point(Manager.Image.ImageOffset.X+round(ptF.X-HandOriginF.X),
+                    Manager.Image.ImageOffset.Y+round(ptF.Y-HandOriginF.Y));
+    if newOfs <> Manager.Image.ImageOffset then
+    begin
+      Manager.Image.ImageOffset := newOfs;
+      result := OnlyRenderChange;
+    end;
+  end;
 end;
 
 function TToolHand.GetStatusText: string;
@@ -479,6 +485,12 @@ begin
   end;
 end;
 
+constructor TToolHand.Create(AManager: TToolManager);
+begin
+  inherited Create(AManager);
+  handMoving := false;
+end;
+
 function TToolHand.ToolUp: TRect;
 begin
   handMoving := false;

+ 55 - 8
lazpaint/tools/utooldeformationgrid.pas

@@ -36,7 +36,9 @@ type
     function GetContextualToolbars: TContextualToolbars; override;
     function Render(VirtualScreen: TBGRABitmap; {%H-}VirtualScreenWidth, {%H-}VirtualScreenHeight: integer; BitmapToVirtualScreen: TBitmapToVirtualScreenFunction): TRect; override;
     procedure BeforeGridSizeChange; override;
-    procedure AfterGridSizeChange(NewNbX,NewNbY: Integer); override;
+    procedure AfterGridSizeChange({%H-}NewNbX,{%H-}NewNbY: Integer); override;
+    function ToolCommand(ACommand: TToolCommand): boolean; override;
+    function ToolProvideCommand(ACommand: TToolCommand): boolean; override;
     destructor Destroy; override;
   end;
 
@@ -84,6 +86,8 @@ type
     function ToolUp: TRect; override;
     function GetContextualToolbars: TContextualToolbars; override;
     function Render(VirtualScreen: TBGRABitmap; {%H-}VirtualScreenWidth, {%H-}VirtualScreenHeight: integer; BitmapToVirtualScreen: TBitmapToVirtualScreenFunction):TRect; override;
+    function ToolProvideCommand(ACommand: TToolCommand): boolean; override;
+    function ToolCommand(ACommand: TToolCommand): boolean; override;
     destructor Destroy; override;
   end;
 
@@ -398,7 +402,7 @@ var n: integer;
 begin
   if not FHintShowed then
   begin
-    Manager.ToolPopup(tpmAltShiftScaleMode);
+    Manager.ToolPopup(tpmHoldKeysScaleMode, VK_SHIFT);
     FHintShowed:= true;
   end;
   result := EmptyRect;
@@ -576,7 +580,7 @@ begin
     key := 0;
   end
   else
-  if Key = VK_CONTROL then
+  if Key = VK_SNAP then
   begin
     snapToPixel:= true;
     key := 0;
@@ -614,7 +618,7 @@ end;
 function TToolTextureMapping.ToolKeyUp(var key: Word): TRect;
 begin
   result := EmptyRect;
-  if Key = VK_CONTROL then
+  if Key = VK_SNAP then
   begin
     snapToPixel:= false;
     key := 0;
@@ -717,6 +721,29 @@ begin
     DrawPoints(quad,192);
 end;
 
+function TToolTextureMapping.ToolProvideCommand(ACommand: TToolCommand
+  ): boolean;
+begin
+  case ACommand of
+    tcFinish: result := quadDefined;
+  else result := false;
+  end;
+end;
+
+function TToolTextureMapping.ToolCommand(ACommand: TToolCommand): boolean;
+begin
+  case ACommand of
+    tcFinish: if quadDefined then
+      begin
+        ValidateQuad;
+        Manager.QueryExitTool;
+        result := true;
+      end  else
+        result := false;
+  else result := false;
+  end;
+end;
+
 destructor TToolTextureMapping.Destroy;
 begin
   ValidateAction;
@@ -758,12 +785,32 @@ begin
   DeformationGridTexCoord := nil;
 end;
 
-{$hints off}
 procedure TToolDeformationGrid.AfterGridSizeChange(NewNbX,NewNbY: Integer);
 begin
   //grid will be created when needed
 end;
-{$hints on}
+
+function TToolDeformationGrid.ToolCommand(ACommand: TToolCommand): boolean;
+begin
+  case ACommand of
+    tcFinish: if DoingDeformation then
+      begin
+        ValidateDeformationGrid;
+        result := true;
+      end
+      else result := false;
+  else result := false;
+  end;
+end;
+
+function TToolDeformationGrid.ToolProvideCommand(ACommand: TToolCommand
+  ): boolean;
+begin
+  case ACommand of
+    tcFinish: result := DoingDeformation;
+  else result := false;
+  end;
+end;
 
 destructor TToolDeformationGrid.Destroy;
 begin
@@ -1012,7 +1059,7 @@ begin
   result := EmptyRect;
   if Key = VK_RETURN then
   begin
-    if Action <> nil then
+    if DoingDeformation then
     begin
       ValidateDeformationGrid;
       result := EmptyRect;
@@ -1022,7 +1069,7 @@ begin
   end else
   if Key = VK_ESCAPE then
   begin
-    if Action <> nil then
+    if DoingDeformation then
     begin
       CancelActionPartially;
       result := OnlyRenderChange;

+ 81 - 30
lazpaint/tools/utoollayer.pas

@@ -15,7 +15,10 @@ type
   TToolMoveLayer = class(TGenericTool)
   protected
     handMoving: boolean;
-    handOrigin: TPoint;
+    handOriginF: TPointF;
+    originalTransformBefore: TAffineMatrix;
+    layerOffsetBefore: TPoint;
+    snapToPixel: boolean;
     FStartLayerOffset: TPoint;
     FStartLayerMatrix: TAffineMatrix;
     FStartLayerOffsetDefined: boolean;
@@ -25,15 +28,17 @@ type
     function DoToolDown({%H-}toolDest: TBGRABitmap; pt: TPoint; {%H-}ptF: TPointF;
       {%H-}rightBtn: boolean): TRect; override;
     function DoToolMove({%H-}toolDest: TBGRABitmap; pt: TPoint; {%H-}ptF: TPointF): TRect; override;
-    procedure DoToolMoveAfter(pt: TPoint; {%H-}ptF: TPointF); override;
     function UseOriginal: boolean;
     procedure NeedLayerBounds;
     function GetAction: TLayerAction; override;
     function DoGetToolDrawingLayer: TBGRABitmap; override;
     procedure OnTryStop({%H-}sender: TCustomLayerAction); override;
+    function FixLayerOffset: boolean; override;
   public
+    constructor Create(AManager: TToolManager); override;
     function ToolUp: TRect; override;
     function ToolKeyDown(var key: Word): TRect; override;
+    function ToolKeyUp(var key: Word): TRect; override;
     function GetContextualToolbars: TContextualToolbars; override;
     function ToolCommand(ACommand: TToolCommand): boolean; override;
     function ToolProvideCommand(ACommand: TToolCommand): boolean; override;
@@ -63,7 +68,7 @@ type
     FPreviousFilter: TResampleFilter;
     FTransforming: boolean;
     FPreviousMousePos: TPointF;
-    FCtrlDown: boolean;
+    FSnapDown: boolean;
     FLastUpdateRect: TRect;
     FLastUpdateRectDefined: boolean;
     FOriginalBounds: TRect;
@@ -152,46 +157,62 @@ begin
   if not handMoving then
   begin
     handMoving := true;
-    handOrigin := pt;
+    handOriginF := ptF;
+    idx := Manager.Image.CurrentLayerIndex;
     if not FStartLayerOffsetDefined then
     begin
       FStartLayerOffsetDefined := true;
-      idx := Manager.Image.CurrentLayerIndex;
       NeedLayerBounds;
       FStartLayerOffset := Manager.Image.LayerOffset[idx];
       FStartLayerMatrix := Manager.Image.LayerOriginalMatrix[idx];
     end;
-    if UseOriginal then Manager.Image.DraftOriginal := true;
+    if UseOriginal then
+    begin
+      Manager.Image.DraftOriginal := true;
+      originalTransformBefore := Manager.Image.LayerOriginalMatrix[idx];
+    end else
+      originalTransformBefore := AffineMatrixIdentity;
+    layerOffsetBefore := Manager.Image.LayerOffset[idx];
   end;
 end;
 
 function TToolMoveLayer.DoToolMove(toolDest: TBGRABitmap; pt: TPoint;
   ptF: TPointF): TRect;
 var idx: integer;
-  prev: TPoint;
+  dx, dy: Single;
+  newTransform: TAffineMatrix;
+  newOfs: TPoint;
 begin
-  if handMoving and ((handOrigin.X <> pt.X) or (handOrigin.Y <> pt.Y)) then
+  result := EmptyRect;
+  if handMoving then
   begin
     idx := Manager.Image.CurrentLayerIndex;
+    dx := ptF.X-HandOriginF.X;
+    dy := ptF.Y-HandOriginF.Y;
+    if snapToPixel then
+    begin
+      dx := round(dx);
+      dy := round(dy);
+    end;
     if UseOriginal then
     begin
-      Manager.Image.LayerOriginalMatrix[idx] :=
-          AffineMatrixTranslation(pt.X-HandOrigin.X,pt.Y-HandOrigin.Y)*Manager.Image.LayerOriginalMatrix[idx];
-      result := OnlyRenderChange;
+      newTransform := AffineMatrixTranslation(dx,dy)*originalTransformBefore;
+      if Manager.Image.LayerOriginalMatrix[idx] <> newTransform then
+      begin
+        Manager.Image.LayerOriginalMatrix[idx] := newTransform;
+        result := OnlyRenderChange;
+      end;
     end else
     begin
-      prev := Manager.Image.LayerOffset[idx];
-      Manager.Image.SetLayerOffset(idx, Point(prev.X+pt.X-HandOrigin.X,
-                                         prev.Y+pt.Y-HandOrigin.Y), FLayerBounds);
-      result := OnlyRenderChange;
+      newOfs := Point(layerOffsetBefore.X+round(dx),
+                      layerOffsetBefore.Y+round(dy));
+      if Manager.Image.LayerOffset[idx]<>newOfs then
+      begin
+        Manager.Image.SetLayerOffset(idx, newOfs, FLayerBounds);
+        result := OnlyRenderChange;
+      end;
     end;
-  end else
-    result := EmptyRect;
-end;
-
-procedure TToolMoveLayer.DoToolMoveAfter(pt: TPoint; ptF: TPointF);
-begin
-  if handMoving then handOrigin := pt;
+  end;
 end;
 
 function TToolMoveLayer.UseOriginal: boolean;
@@ -240,6 +261,19 @@ begin
   //nothing
 end;
 
+function TToolMoveLayer.FixLayerOffset: boolean;
+begin
+  Result:= false;
+end;
+
+constructor TToolMoveLayer.Create(AManager: TToolManager);
+begin
+  inherited Create(AManager);
+  handMoving := false;
+  FStartLayerOffsetDefined:= false;
+  snapToPixel:= false;
+end;
+
 function TToolMoveLayer.ToolUp: TRect;
 begin
   handMoving := false;
@@ -256,6 +290,12 @@ begin
     result := EmptyRect;
     Key := 0;
   end
+  else if (key = VK_SNAP) or (key = VK_SNAP2) then
+  begin
+    snapToPixel:= true;
+    result := EmptyRect;
+    key := 0;
+  end
   else if key = VK_ESCAPE then
   begin
     if FStartLayerOffsetDefined then
@@ -274,6 +314,17 @@ begin
     Result:=inherited ToolKeyDown(key);
 end;
 
+function TToolMoveLayer.ToolKeyUp(var key: Word): TRect;
+begin
+  if (key = VK_SNAP) or (key = VK_SNAP2) then
+  begin
+    snapToPixel:= false;
+    result := EmptyRect;
+    key := 0;
+  end
+  else Result:=inherited ToolKeyUp(key);
+end;
+
 function TToolMoveLayer.GetContextualToolbars: TContextualToolbars;
 begin
   Result:= [];
@@ -402,7 +453,7 @@ begin
   begin
     FTransforming := true;
     FPreviousMousePos := ptF;
-    if FCtrlDown then
+    if FSnapDown then
     begin
       result := UpdateTransform;
       if IsRectEmpty(result) then result := OnlyRenderChange;
@@ -491,7 +542,7 @@ end;
 constructor TToolTransformLayer.Create(AManager: TToolManager);
 begin
   inherited Create(AManager);
-  FCtrlDown:= false;
+  FSnapDown:= false;
   FTransformCenterDefined := false;
   FLastUpdateRectDefined:= false;
 end;
@@ -531,9 +582,9 @@ end;
 
 function TToolTransformLayer.ToolKeyDown(var key: Word): TRect;
 begin
-  if key = VK_CONTROL then
+  if (key = VK_SNAP) or (KEY = VK_SNAP2) then
   begin
-    FCtrlDown:= true;
+    FSnapDown:= true;
     if FTransforming and CtrlChangesTransform then
     begin
       result := UpdateTransform;
@@ -560,9 +611,9 @@ end;
 
 function TToolTransformLayer.ToolKeyUp(var key: Word): TRect;
 begin
-  if key = VK_CONTROL then
+  if (key = VK_SNAP) or (KEY = VK_SNAP2) then
   begin
-    FCtrlDown := false;
+    FSnapDown := false;
     if FTransforming and CtrlChangesTransform then
     begin
       result := UpdateTransform;
@@ -652,7 +703,7 @@ var
   baseZoom: single;
   invZoom: boolean;
 begin
-  if FCtrlDown then
+  if FSnapDown then
   begin
     logZoom := ln(FZoom)/ln(2);
     if logZoom < 0 then
@@ -742,7 +793,7 @@ end;
 
 function TToolRotateLayer.GetActualAngle: single;
 begin
-  if FCtrlDown then
+  if FSnapDown then
     result := round(FAngle/15)*15
   else
     result := FAngle;

+ 58 - 9
lazpaint/tools/utoolpolygon.pas

@@ -34,10 +34,15 @@ type
 
   TToolPolygon = class(TVectorialTool)
   protected
+    initiallyClosed : boolean;
     function CreateShape: TVectorShape; override;
     procedure AssignShapeStyle(AMatrix: TAffineMatrix); override;
     procedure UpdateUserMode; virtual;
+    procedure ShapeValidated; override;
   public
+    function ToolUp: TRect; override;
+    function ToolKeyPress(var key: TUTF8Char): TRect; override;
+    function ToolKeyDown(var key: Word): TRect; override;
     function GetContextualToolbars: TContextualToolbars; override;
   end;
 
@@ -152,7 +157,6 @@ begin
 end;
 
 function TToolSpline.ToolKeyPress(var key: TUTF8Char): TRect;
-var keyCode: Word;
 begin
   if (Key='z') or (Key = 'Z') then
   begin
@@ -160,14 +164,6 @@ begin
     result := OnlyRenderChange;
     Key := #0;
   end else
-  if (Key='i') or (Key='I') then
-  begin
-    keyCode := VK_INSERT;
-    ToolKeyDown(keyCode);
-    keyCode := VK_INSERT;
-    ToolKeyUp(keyCode);
-    result := EmptyRect;
-  end else
   begin
     Result:=inherited ToolKeyPress(key);
     if Key='x' then Key := #0;
@@ -184,6 +180,7 @@ end;
 function TToolPolygon.CreateShape: TVectorShape;
 begin
   result := TPolylineShape.Create(nil);
+  initiallyClosed := toCloseShape in Manager.ShapeOptions;
 end;
 
 procedure TToolPolygon.AssignShapeStyle(AMatrix: TAffineMatrix);
@@ -203,6 +200,58 @@ begin
   if FQuickDefine then FShape.Usermode := vsuCreate;
 end;
 
+procedure TToolPolygon.ShapeValidated;
+begin
+  inherited ShapeValidated;
+  if not initiallyClosed then
+    Manager.ShapeOptions := Manager.ShapeOptions - [toCloseShape];
+end;
+
+function TToolPolygon.ToolUp: TRect;
+var
+  opt: TShapeOptions;
+begin
+  Result:=inherited ToolUp;
+  if Assigned(FShape) then
+  begin
+    opt := Manager.ShapeOptions;
+    if (FShape as TCustomPolypointShape).Closed then
+      include(opt, toCloseShape)
+    else
+      exclude(opt, toCloseShape);
+    Manager.ShapeOptions:= opt;
+  end;
+end;
+
+function TToolPolygon.ToolKeyPress(var key: TUTF8Char): TRect;
+var
+  keyCode: Word;
+begin
+  if (Key='i') or (Key='I') then
+  begin
+    keyCode := VK_INSERT;
+    ToolKeyDown(keyCode);
+    if keyCode = 0 then key := #0;
+    keyCode := VK_INSERT;
+    ToolKeyUp(keyCode);
+    result := EmptyRect;
+  end else
+    Result:=inherited ToolKeyPress(key);
+end;
+
+function TToolPolygon.ToolKeyDown(var key: Word): TRect;
+begin
+  if (key = VK_RETURN) and Assigned(FShape)
+   and (FShape.Usermode = vsuCreate) then
+  begin
+    FShape.Usermode:= vsuEdit;
+    result := OnlyRenderChange;
+    key := 0;
+    exit;
+  end else
+    Result:=inherited ToolKeyDown(key);
+end;
+
 function TToolPolygon.GetContextualToolbars: TContextualToolbars;
 begin
   Result:= [ctColor,ctTexture,ctShape,ctPenWidth,ctPenStyle,ctJoinStyle,ctLineCap];

+ 54 - 16
lazpaint/tools/utoolselect.pas

@@ -100,14 +100,17 @@ type
 
   TToolMoveSelection = class(TTransformSelectionTool)
   protected
-    handMoving: boolean;
-    handOrigin: TPoint;
+    handMoving, snapToPixel: boolean;
+    handOriginF: TPointF;
+    selectionTransformBefore: TAffineMatrix;
     function DoToolDown({%H-}toolDest: TBGRABitmap; pt: TPoint; {%H-}ptF: TPointF;
       {%H-}rightBtn: boolean): TRect; override;
     function DoToolMove({%H-}toolDest: TBGRABitmap; pt: TPoint; {%H-}ptF: TPointF): TRect; override;
-    procedure DoToolMoveAfter(pt: TPoint; {%H-}ptF: TPointF); override;
   public
+    constructor Create(AManager: TToolManager); override;
     function ToolUp: TRect; override;
+    function ToolKeyDown(var key: Word): TRect; override;
+    function ToolKeyUp(var key: Word): TRect; override;
     destructor Destroy; override;
   end;
 
@@ -395,7 +398,7 @@ var angleDiff: single;
 begin
   if not HintShowed then
   begin
-    Manager.ToolPopup(tpmCtrlRestrictRotation);
+    Manager.ToolPopup(tpmHoldKeyRestrictRotation, VK_SNAP);
     HintShowed:= true;
   end;
   if handMoving and ((handOrigin.X <> ptF.X) or (handOrigin.Y <> ptF.Y)) then
@@ -439,7 +442,7 @@ end;
 function TToolRotateSelection.ToolKeyDown(var key: Word): TRect;
 begin
   result := EmptyRect;
-  if key = VK_CONTROL then
+  if key = VK_SNAP then
   begin
     if not snapRotate then
     begin
@@ -469,7 +472,7 @@ end;
 
 function TToolRotateSelection.ToolKeyUp(var key: Word): TRect;
 begin
-  if key = VK_CONTROL then
+  if key = VK_SNAP then
   begin
     snapRotate := false;
     Key := 0;
@@ -502,31 +505,44 @@ end;
 function TToolMoveSelection.DoToolDown(toolDest: TBGRABitmap; pt: TPoint;
   ptF: TPointF; rightBtn: boolean): TRect;
 begin
-  if not handMoving then
+  if not handMoving and not Manager.Image.SelectionMaskEmpty then
   begin
     handMoving := true;
-    handOrigin := pt;
+    handOriginF := ptF;
+    selectionTransformBefore := Manager.Image.SelectionTransform;
   end;
   result := EmptyRect;
 end;
 
 function TToolMoveSelection.DoToolMove(toolDest: TBGRABitmap; pt: TPoint;
   ptF: TPointF): TRect;
-var dx,dy: integer;
+var dx,dy: single;
+  newSelTransform: TAffineMatrix;
 begin
   result := EmptyRect;
-  if handMoving and ((handOrigin.X <> pt.X) or (handOrigin.Y <> pt.Y)) then
+  if handMoving then
   begin
-    dx := pt.X-HandOrigin.X;
-    dy := pt.Y-HandOrigin.Y;
-    Manager.Image.SelectionTransform := AffineMatrixTranslation(dx,dy) * Manager.Image.SelectionTransform;
-    result := OnlyRenderChange;
+    dx := ptF.X-HandOriginF.X;
+    dy := ptF.Y-HandOriginF.Y;
+    if snapToPixel then
+    begin
+      dx := round(dx);
+      dy := round(dy);
+    end;
+    newSelTransform := AffineMatrixTranslation(dx,dy) * selectionTransformBefore;
+    if Manager.Image.SelectionTransform <> newSelTransform then
+    begin
+      Manager.Image.SelectionTransform := newSelTransform;
+      result := OnlyRenderChange;
+    end;
   end;
 end;
 
-procedure TToolMoveSelection.DoToolMoveAfter(pt: TPoint; ptF: TPointF);
+constructor TToolMoveSelection.Create(AManager: TToolManager);
 begin
-  if handMoving then handOrigin := pt;
+  inherited Create(AManager);
+  handMoving := false;
+  snapToPixel:= false;
 end;
 
 function TToolMoveSelection.ToolUp: TRect;
@@ -535,6 +551,28 @@ begin
   result := EmptyRect;
 end;
 
+function TToolMoveSelection.ToolKeyDown(var key: Word): TRect;
+begin
+  if (Key = VK_SNAP) or (Key = VK_SNAP2) then
+  begin
+    result := EmptyRect;
+    snapToPixel:= true;
+    key := 0;
+  end else
+    Result:=inherited ToolKeyDown(key);
+end;
+
+function TToolMoveSelection.ToolKeyUp(var key: Word): TRect;
+begin
+  if (Key = VK_SNAP) or (Key = VK_SNAP2) then
+  begin
+    result := EmptyRect;
+    snapToPixel:= false;
+    key := 0;
+  end else
+    Result:=inherited ToolKeyUp(key);
+end;
+
 destructor TToolMoveSelection.Destroy;
 begin
   if handMoving then handMoving := false;

ファイルの差分が大きいため隠しています
+ 474 - 253
lazpaint/tools/utoolvectorial.pas


+ 15 - 12
lazpaint/uchoosecolor.pas

@@ -59,8 +59,10 @@ type
                         bmp,bmpMaxlight: TBGRABitmap; end;
     Lightscale: record bounds: TRect;
                       bmp: TBGRABitmap; end;
+    LightCursorRect: TRect;
     Alphascale: record bounds: TRect;
                        bmp: TBGRABitmap; end;
+    AlphaCursorRect: TRect;
     function GetAvailableBmpHeight: integer;
     function GetAvailableBmpWidth: integer;
     procedure SetAvailableBmpHeight(AValue: integer);
@@ -70,7 +72,7 @@ type
     function ColorWithLight(c: TBGRAPixel; light: word): TBGRAPixel;
     function BitmapWithLight(bmpsrc: TBGRABitmap; light: word; lookFor: TBGRAPixel; var pColorX,pColorY: integer): TBGRABitmap;
     function ColorLightOf(c: TBGRAPixel): word;
-    procedure DrawTriangleCursor(dest: TBGRABitmap; bounds: TRect; value: byte);
+    function DrawTriangleCursor(dest: TBGRABitmap; bounds: TRect; value: byte): TRect;
     procedure DoSelect(X,Y: integer);
     function MakeIconBase(size: integer): TBitmap;
     function MakeAddIcon(size: integer): TBitmap;
@@ -271,12 +273,12 @@ begin
       SelectZone := szColorCircle;
       DoSelect(X,Y);
     end else
-    if PtInRect(Point(X,Y),Alphascale.Bounds) then
+    if PtInRect(Point(X,Y),Alphascale.Bounds) or PtInRect(Point(X,Y),AlphaCursorRect) then
     begin
       SelectZone := szAlphascale;
       DoSelect(X,Y);
     end else
-    if PtInRect(Point(X,Y),lightscale.Bounds) then
+    if PtInRect(Point(X,Y),lightscale.Bounds) or PtInRect(Point(X,Y),LightCursorRect) then
     begin
       SelectZone := szLightscale;
       DoSelect(X,Y);
@@ -322,8 +324,8 @@ begin
     boundRight := x-4;
     Bitmap.PutImage(alphascale.bounds.Left,alphascale.bounds.top,alphascale.Bmp,dmDrawWithTransparency);
     Bitmap.Rectangle(alphascale.bounds,BGRA(FormTextColor.red,FormTextColor.green,FormTextColor.Blue,128),dmDrawWithTransparency);
-    DrawTriangleCursor(Bitmap, alphascale.bounds, currentColor.alpha);
-  end;
+    AlphaCursorRect := DrawTriangleCursor(Bitmap, alphascale.bounds, currentColor.alpha);
+  end else AlphaCursorRect := EmptyRect;
   if Lightscale.Bmp<>nil then
   begin
     w := Bitmap.TextSize(rsLight).cx;
@@ -334,8 +336,8 @@ begin
     boundRight := x-4;
     Bitmap.PutImage(Lightscale.bounds.Left,Lightscale.bounds.top,Lightscale.Bmp,dmFastBlend);
     Bitmap.Rectangle(Lightscale.bounds,BGRA(FormTextColor.red,FormTextColor.green,FormTextColor.Blue,128),dmDrawWithTransparency);
-    DrawTriangleCursor(Bitmap, Lightscale.bounds, colorLight div 256);
-  end;
+    LightCursorRect := DrawTriangleCursor(Bitmap, Lightscale.bounds, colorLight div 256);
+  end else LightCursorRect := EmptyRect;
   if (colorCircle.Bmp<>nil) and not LazPaintInstance.BlackAndWhite then
   begin
     w := Bitmap.TextSize(rsColors).cx;
@@ -357,13 +359,14 @@ begin
   end;
 end;
 
-procedure TFChooseColor.DrawTriangleCursor(dest: TBGRABitmap; bounds: TRect;
-  value: byte);
+function TFChooseColor.DrawTriangleCursor(dest: TBGRABitmap; bounds: TRect;
+  value: byte): TRect;
 var x,y: integer;
 begin
-     x := bounds.right+cursormargin;
-     y := bounds.bottom-1 + integer(round(value/255*(bounds.top-(bounds.bottom-1))));
-     dest.FillPolyAntialias([pointF(x,y),pointF(x+cursorsize,y-cursorsize),pointF(x+cursorsize,y+cursorsize)],FormTextColor);
+  x := bounds.right+cursormargin;
+  y := bounds.bottom-1 + integer(round(value/255*(bounds.top-(bounds.bottom-1))));
+  dest.FillPolyAntialias([pointF(x,y),pointF(x+cursorsize,y-cursorsize),pointF(x+cursorsize,y+cursorsize)],FormTextColor);
+  result := rect(floor(x-cursorsize/2),floor(y-cursorsize*1.5),ceil(x+cursorsize*1.5),ceil(y+cursorsize*1.5));
 end;
 
 procedure TFChooseColor.DoSelect(X, Y: integer);

+ 104 - 74
lazpaint/uclipboard.pas

@@ -1,10 +1,19 @@
 unit UClipboard;
 
 {$mode objfpc}{$H+}
-{ $DEFINE DEBUG_CLIPBOARD}
+{$IFDEF DEBUG}
+  {$DEFINE DEBUG_CLIPBOARD}
+{$ENDIF}
 
+{$DEFINE HTML_CLIPBOARD_FORMAT}
 {$IFDEF DARWIN}
   {$DEFINE TIFF_CLIPBOARD_FORMAT}
+{$ELSE}
+  {$DEFINE BMP_CLIPBOARD_FORMAT}
+  {$DEFINE PNG_CLIPBOARD_FORMAT}
+{$ENDIF}
+{$IFDEF WINDOWS}
+  {$DEFINE PDN_CLIPBOARD_FORMAT}
 {$ENDIF}
 
 interface
@@ -18,8 +27,10 @@ function ClipboardContainsBitmap: boolean;
 
 implementation
 
-uses Dialogs, BGRABitmapTypes, Clipbrd, Graphics, LCLIntf, LCLType,
-    BGRADNetDeserial, math, GraphType, fphttpclient, FPWriteBMP;
+uses Dialogs, BGRABitmapTypes, Clipbrd, Graphics, LCLIntf, LCLType, GraphType
+    {$IFDEF PDN_CLIPBOARD_FORMAT}, math, BGRADNetDeserial{$ENDIF}
+    {$IFDEF BMP_CLIPBOARD_FORMAT}, FPWriteBMP{$ENDIF}
+    {$IFDEF HTML_CLIPBOARD_FORMAT}, fphttpclient{$ENDIF};
 
 {$IFDEF DEBUG_CLIPBOARD}
 const
@@ -31,9 +42,13 @@ const
 var
   tiffClipboardFormat: TClipboardFormat;
 {$ENDIF}
-
+{$IFDEF PNG_CLIPBOARD_FORMAT}
+var
+  pngClipboardFormat: TClipboardFormat;
+{$ENDIF}
+{$IFDEF PDN_CLIPBOARD_FORMAT}
 var
-  bgraClipboardFormat: TClipboardFormat;
+  pdnClipboardFormat: TClipboardFormat;
 
 function GetBitmapFromPaintDotNetMaskedSurface(deserial: TDotNetDeserialization): TBGRABitmap;
 var width,height: integer;
@@ -121,6 +136,11 @@ begin
     end;
   end;
 end;
+{$ENDIF}
+
+{$IFDEF HTML_CLIPBOARD_FORMAT}
+var
+  htmlClipboardFormat: TClipboardFormat;
 
 function WideStringToStr(data: string): string;
 var
@@ -330,38 +350,31 @@ begin
   end;
   tagTokens.Free;
 end;
-
-function SafeClipboardFormatToMimeType(FormatID: TClipboardFormat): string;
-begin
-  try
-    result := ClipboardFormatToMimeType(FormatID);
-  except
-    on ex: Exception do
-      result := '';
-  end;
-end;
+{$ENDIF}
 
 function GetBitmapFromClipboard: TBGRABitmap;
 var i: integer;
     Stream: TMemoryStream;
+    data: string;
 
 {$IFDEF DEBUG_CLIPBOARD}
     j: integer;
     pcf: TPredefinedClipboardFormat;
-    str: string;
+    mime, str: string;
 
     c: char;
     prevCok: boolean;
 {$ENDIF}
 
+{$IFDEF PDN_CLIPBOARD_FORMAT}
     deserial: TDotNetDeserialization;
-    mime, data: string;
+{$ENDIF}
 
 begin
   result := nil;
 
   {$IFDEF DEBUG_CLIPBOARD}
-  str := '';
+  str := 'clipboard.FormatCount = '+inttostr(clipboard.FormatCount)+lineending;
   for i := 0 to clipboard.FormatCount-1 do
   begin
     if str <> '' then str += ', ';
@@ -408,15 +421,13 @@ begin
       str += ']'+lineending;
     end;
     stream.Free;
-
   end;
   ShowMessage(str);
   {$ENDIF}
 
+  {$IFDEF PDN_CLIPBOARD_FORMAT}
   for i := 0 to clipboard.FormatCount-1 do
-  begin
-    mime := SafeClipboardFormatToMimeType(Clipboard.Formats[i]);
-    if mime = 'PaintDotNet.MaskedSurface' then
+    if Clipboard.Formats[i] = pdnClipboardFormat then
     begin
        Stream := TMemoryStream.Create;
        Clipboard.GetFormat(Clipboard.Formats[i],Stream);
@@ -430,8 +441,55 @@ begin
        end;
        deserial.Free;
        if result <> nil then exit;
-    end else
-    if mime = 'text/html' then
+    end;
+  {$ENDIF}
+
+  {$IFDEF TIFF_CLIPBOARD_FORMAT}
+  for i := 0 to clipboard.FormatCount-1 do
+    if Clipboard.Formats[i] = tiffClipboardFormat then
+    begin
+      Stream := TMemoryStream.Create;
+      Clipboard.GetFormat(Clipboard.Formats[i],Stream);
+      Stream.Position := 0;
+      try
+        result := TBGRABitmap.Create;
+        result.LoadFromStream(Stream);
+        if result.Empty then result.AlphaFill(255);
+      except
+        on ex:exception do
+        begin
+          result := nil;
+        end;
+      end;
+      Stream.Free;
+      if result <> nil then exit;
+    end;
+  {$ENDIF}
+
+  {$IFDEF PNG_CLIPBOARD_FORMAT}
+  for i := 0 to clipboard.FormatCount-1 do
+    if Clipboard.Formats[i] = pngClipboardFormat then
+    begin
+      Stream := TMemoryStream.Create;
+      Clipboard.GetFormat(Clipboard.Formats[i],Stream);
+      Stream.Position := 0;
+      try
+        result := TBGRABitmap.Create;
+        result.LoadFromStream(Stream);
+        if result.Empty then result.AlphaFill(255);
+      except
+        on ex:exception do
+        begin
+          result := nil;
+        end;
+      end;
+      Stream.Free;
+      if result <> nil then exit;
+    end;
+  {$ENDIF}
+
+  for i := 0 to clipboard.FormatCount-1 do
+    if Clipboard.Formats[i] = htmlClipboardFormat then
     begin
        Stream := TMemoryStream.Create;
        Clipboard.GetFormat(Clipboard.Formats[i],Stream);
@@ -447,26 +505,6 @@ begin
        end;
        if result <> nil then exit;
     end;
-  end;
-
-  for i := 0 to clipboard.FormatCount-1 do
-    if Clipboard.Formats[i] = bgraClipboardFormat then
-    begin
-       Stream := TMemoryStream.Create;
-       Clipboard.GetFormat(Clipboard.Formats[i],Stream);
-       stream.Position := 0;
-       result := TBGRABitmap.Create;
-       try
-         result.Deserialize(Stream);
-       except
-         on ex:exception do
-         begin
-           FreeAndNil(result);
-         end;
-       end;
-       Stream.Free;
-       if result <> nil then exit;
-    end;
 
   for i := 0 to clipboard.FormatCount-1 do
     if (Clipboard.Formats[i] = PredefinedClipboardFormat(pcfBitmap)) then
@@ -486,28 +524,6 @@ begin
        Stream.Free;
        if result <> nil then exit;
     end;
-
-  {$IFDEF TIFF_CLIPBOARD_FORMAT}
-  for i := 0 to clipboard.FormatCount-1 do
-    if Clipboard.Formats[i] = tiffClipboardFormat then
-    begin
-      Stream := TMemoryStream.Create;
-      Clipboard.GetFormat(Clipboard.Formats[i],Stream);
-      Stream.Position := 0;
-      try
-        result := TBGRABitmap.Create;
-        result.LoadFromStream(Stream);
-        if result.Empty then result.AlphaFill(255);
-      except
-        on ex:exception do
-        begin
-          result := nil;
-        end;
-      end;
-      Stream.Free;
-      if result <> nil then exit;
-    end;
-  {$ENDIF}
 end;
 
 function ClipboardContainsBitmap: boolean;
@@ -522,10 +538,13 @@ end;
 procedure CopyToClipboard(bmp: TBGRABitmap);
 var
   stream: TMemoryStream;
+  {$IFDEF BMP_CLIPBOARD_FORMAT}
   bmpWriter: TFPWriterBMP;
+  {$ENDIF}
 begin
   Clipboard.Clear;
 
+  {$IFDEF BMP_CLIPBOARD_FORMAT}
   stream := TMemoryStream.Create;
   bmpWriter := TFPWriterBMP.Create;
   bmpWriter.BitsPerPixel := 32;
@@ -533,11 +552,7 @@ begin
   bmpWriter.Free;
   Clipboard.AddFormat(PredefinedClipboardFormat(pcfBitmap), stream);
   stream.Free;
-
-  stream := TMemoryStream.Create;
-  bmp.Serialize(stream);
-  Clipboard.AddFormat(bgraClipboardFormat, stream);
-  stream.Free;
+  {$ENDIF}
 
   {$IFDEF TIFF_CLIPBOARD_FORMAT}
   stream := TMemoryStream.Create;
@@ -545,15 +560,30 @@ begin
   Clipboard.AddFormat(tiffClipboardFormat, stream);
   stream.Free;
   {$ENDIF}
+
+  {$IFDEF PNG_CLIPBOARD_FORMAT}
+  stream := TMemoryStream.Create;
+  bmp.SaveToStreamAs(stream, ifPng);
+  Clipboard.AddFormat(pngClipboardFormat, stream);
+  stream.Free;
+  {$ENDIF}
 end;
 
 initialization
 
-  bgraClipboardFormat := RegisterClipboardFormat('TBGRABitmap');
-
 {$IFDEF TIFF_CLIPBOARD_FORMAT}
-  tiffClipboardFormat := RegisterClipboardFormat('image/tiff');
+  tiffClipboardFormat := RegisterClipboardFormat({$IFDEF DARWIN}'public.tiff'{$ELSE}'image/tiff'{$ENDIF});
+{$ENDIF}
+{$IFDEF PNG_CLIPBOARD_FORMAT}
+  pngClipboardFormat := RegisterClipboardFormat({$IFDEF DARWIN}'public.png'{$ELSE}{$IFDEF WINDOWS}'PNG'{$ELSE}'image/png'{$ENDIF}{$ENDIF});
 {$ENDIF}
+{$IFDEF HTML_CLIPBOARD_FORMAT}
+  htmlClipboardFormat := RegisterClipboardFormat({$IFDEF DARWIN}'public.html'{$ELSE}'text/html'{$ENDIF});
+{$ENDIF}
+{$IFDEF PDN_CLIPBOARD_FORMAT}
+  pdnClipboardFormat := RegisterClipboardFormat('PaintDotNet.MaskedSurface');
+{$ENDIF}
+
 
 end.
 

+ 143 - 17
lazpaint/ufilesystem.pas

@@ -28,11 +28,15 @@ const
 
   //more Linux file systems
   fsSysV = 'sysv';     // Unix System V
-  rsXFS = 'XFS';       //IRIX
-  rsJFS = 'JFS';       //AIX journaled file system
-  rsXiaFS = 'xiafs';   //extension of Minix file system
+  fsXFS = 'XFS';       //IRIX
+  fsJFS = 'JFS';       //AIX journaled file system
+  fsXiaFS = 'xiafs';   //extension of Minix file system
   fsReiserFS = 'Reiserfs';  //ReiserFS
 
+  //Apple file systems
+  fsAPFS = 'APFS';
+  fsHFS = 'HFS';
+
   //Misc
   fsHPFS = 'HPFS';     // OS/2 'High Performance File System'
   fsNWFS = 'NWFS';     // Novel NetWare File System
@@ -73,6 +77,7 @@ type
     function RemovePathTrail(ADir: string): string;
     procedure RemoveLastPathElement(var ADir: string; out ALastElement: string);
     function GetFileSystems: TFileSystemArray;
+    function CanGetFileSystems: boolean;
     function MoveToTrash(AForm: TForm; const AFilenamesUTF8: array of string; AConfirmationCallback: TDeleteConfirmationFunction): boolean;
     function CreateFileStream(AFilenameUTF8: string; AMode: Word): TStream; overload;
     procedure CancelStreamAndFree(AStream: TStream);
@@ -96,7 +101,7 @@ implementation
 uses BGRAUTF8, BGRAWinResource, BGRALazResource, LazFileUtils, Dialogs
 {$IFDEF WINDOWS}, Windows{$ENDIF}
 {$IFDEF LINUX}, Process{$ENDIF}
-;
+{$IFDEF DARWIN}, Process{$ENDIF};
 
 type
   TExtendedFilename = record
@@ -104,11 +109,29 @@ type
     SubFilename: string;
   end;
 
+procedure LinuxBundleToFileSystem(ABundle: string; out AFilesystem: string;
+      out ALongFilenames: boolean; out ACaseSensitive: boolean);
+begin
+  if (ABundle = 'ntfs') or (ABundle = 'fuseblk') then AFilesystem := fsNTFS else
+  if (ABundle = 'msdos') or (ABundle = 'umsdos') or (ABundle='vfat') then AFilesystem := fsFAT else
+  if ABundle = 'iso9660' then AFilesystem:= fsCDFS else
+  if ABundle = 'hpfs' then AFilesystem := fsHPFS else
+  if ABundle = 'udf' then AFilesystem := fsUDF else
+  if ABundle = 'ncp' then AFilesystem := fsNWFS else
+  if ABundle = 'apfs' then AFilesystem := fsAPFS else
+  if ABundle = 'hfs' then AFilesystem := fsHFS else
+  if ABundle = 'exfat' then AFilesystem := fsExFAT else
+    AFilesystem := ABundle;
+  ALongFilenames := (ABundle <> 'minix') and (ABundle <> 'msdos');
+  ACaseSensitive := (ABundle <> 'msdos') and (ABundle <> 'umsdos') and (ABundle <> 'vfat')
+                and (ABundle <> 'exfat');
+end;
+
 {$IFDEF LINUX}
-const LinuxFileSystems: array[0..20] of string =
+const LinuxFileSystems: array[0..21] of string =
  ('minix', 'ext2', 'ext3', 'ext4',
   'sysv', 'XFS', 'JFS', 'xiafs', 'Reiserfs',
-  {FAT} 'msdos', 'umsdos', 'vfat', {NTFS} 'ntfs', 'fuseblk',
+  {FAT} 'msdos', 'umsdos', 'vfat', 'exfat', {NTFS} 'ntfs', 'fuseblk',
   {CDFS} 'iso9660', {UDF} 'udf',
   {HPFS} 'hpfs', {NWFS} 'ncp',
   'nfs', 'smb', 'ncpfs');
@@ -179,10 +202,6 @@ begin
               fileSystem := lFileSystem;
               path := UnespacePath(parsedDesc[1]);
               device := parsedDesc[0];
-              longFilenames := (fileSystem <> 'minix') and
-                (fileSystem <> 'msdos');
-              caseSensitive := (fileSystem <> 'msdos') and
-                (fileSystem <> 'umsdos') and (fileSystem <> 'vfat');
               readonly:= (copy(parsedDesc[3],1,3) <> 'rw,') and (parsedDesc[3]<>'rw');
 
               //detecting device type
@@ -221,12 +240,7 @@ begin
                 name := ExtractFileName(path);
 
               //formatting file system
-              if (fileSystem = 'ntfs') or (fileSystem = 'fuseblk') then fileSystem := fsNTFS else
-              if (fileSystem = 'msdos') or (fileSystem = 'umsdos') or (fileSystem='vfat') then fileSystem := fsFAT else
-              if fileSystem = 'iso9660' then fileSystem:= fsCDFS else
-              if fileSystem = 'hpfs' then fileSystem := fsHPFS else
-              if fileSystem = 'udf' then fileSystem := fsUDF else
-              if fileSystem = 'ncp' then fileSystem := fsNWFS;
+              LinuxBundleToFileSystem(fileSystem, fileSystem, longFilenames, caseSensitive);
             end;
           end;
         end;
@@ -294,6 +308,105 @@ begin
 end;
 {$ENDIF}
 
+{$IFDEF DARWIN}
+var
+  darwinFilesystemsDate: TDateTime;
+  darwinFilesystemsCached: TFileSystemArray;
+
+function GetDarwinFileSystems: TFileSystemArray;
+  procedure FindDevices;
+  var
+    runResult, headers, curLine, fs, mountPath: string;
+    lines: TStringList;
+    blocksPos, mountedPos, i, endFS: integer;
+    count: integer;
+  begin
+    if not RunCommand('df',['-P'],runResult) then exit;
+    lines := TStringList.Create;
+    lines.Text:= runResult;
+    headers := lines[0];
+    blocksPos := pos('-blocks', headers);
+    mountedPos := pos('Mounted on', headers);
+    if (blocksPos <> 0) and (mountedPos <> 0) then
+    begin
+      inc(blocksPos, 5);
+      count := 0;
+      setlength(result, lines.Count-1);
+      for i := 1 to lines.Count-1 do
+      begin
+        curLine := lines[i];
+        endFS := blocksPos;
+        if endFS > length(curLine) then continue;
+        while (endFS > 1) and (curLine[endFS] in['0'..'9']) do dec(endFS);
+        while (endFS > 1) and (curLine[endFS] in[#0..#32]) do dec(endFS);
+        fs := copy(curLine,1,endFS);
+        if fs.StartsWith('/dev/') then
+        begin
+          mountPath := copy(curLine, mountedPos, length(curLine)-mountedPos+1);
+          if (mountPath <> '/var/vm') and (mountPath <> '/private/var/vm') then
+          begin
+            result[count].path := mountPath;
+            inc(count);
+          end;
+        end;
+      end;
+      setlength(result, count);
+    end;
+    lines.Free;
+  end;
+
+  procedure FetchDiskInfo(var fsi: TFileSystemInfo);
+  var
+    runResult, curLine, key, value: string;
+    lines: TStringList;
+    posColon: SizeInt;
+    i: Integer;
+  begin
+    if not RunCommand('diskutil',['info',fsi.path],runResult) then exit;
+    lines := TStringList.Create;
+    lines.Text:= runResult;
+    fsi.name:= '';
+    fsi.device := '?';
+    fsi.fileSystem := '?';
+    fsi.longFilenames:= true;
+    for i := 0 to lines.Count-1 do
+    begin
+      curLine := lines[i];
+      posColon := pos(':',curLine);
+      if posColon <> 0 then
+      begin
+        key := copy(curLine,1,posColon-1).TrimLeft;
+        value := copy(curLine,posColon+1,length(curLine)-posColon).Trim;
+        if key = 'Optical Drive Type' then fsi.device := rsCdRom else
+        if (key = 'Removable Media') and (fsi.device = '?') then
+        begin
+          if value = 'Fixed' then fsi.device := rsFixedDrive
+          else fsi.device := rsRemovableDrive;
+        end else
+        if key = 'Type (Bundle)' then
+        begin
+          LinuxBundleToFileSystem(value, fsi.fileSystem, fsi.longFilenames, fsi.caseSensitive);
+        end else
+        if key = 'Volume Name' then fsi.name:= value else
+        if key = 'Read-Only Volume' then fsi.readonly:= value='Yes';
+      end;
+    end;
+    lines.Free;
+  end;
+
+var i: integer;
+begin
+  if (darwinFilesystemsDate <> 0) and (Now < darwinFilesystemsDate + (10/(60*60*24))) then
+    exit(darwinFilesystemsCached);
+  result := nil;
+  FindDevices;
+  for i := 0 to high(result) do
+    FetchDiskInfo(result[i]);
+  darwinFilesystemsCached := result;
+  darwinFilesystemsDate:= Now;
+end;
+{$ENDIF}
+
 function TFileManager.RemovePathTrail(ADir: string): string;
 begin
   if (length(ADir)>=1) and (ADir[length(ADir)]=PathDelim) then
@@ -328,11 +441,24 @@ begin
     {$IFDEF WINDOWS}
     result := GetWindowsFileSystems;
     {$ELSE}
-    result := nil;
+      {$IFDEF DARWIN}
+      result := GetDarwinFileSystems;
+      {$ELSE}
+      result := nil;
+      {$ENDIF}
     {$ENDIF}
   {$ENDIF}
 end;
 
+function TFileManager.CanGetFileSystems: boolean;
+begin
+  {$IFDEF DARWIN}
+  result := true;
+  {$ELSE}
+  result := length(GetFileSystems)>0;
+  {$ENDIF}
+end;
+
 {$IFDEF WINDOWS}
 type
   {$PUSH}{$PACKRECORDS C}

+ 131 - 25
lazpaint/uimagepreview.pas

@@ -33,13 +33,14 @@ type
     FTiff: TTiff;                     //has entries
     FIconCursor: TBGRAIconCursor;     //has entries
     FThumbnails: TBGRABitmapList;
+    FDuplicateEntrySourceIndex: integer;
 
     FSelectedMenuIndex: integer;
     FImageMenu: array of record
                  Area, IconArea: TRect;
                  DeleteArea: TRect;
                  FrameIndex: integer;
-                 IsNew,IsLoopCount: boolean;
+                 IsNew,IsDuplicate,IsLoopCount: boolean;
                end;
 
     FOnValidate: TNotifyEvent;
@@ -63,6 +64,7 @@ type
     procedure ScrollToSelectedMenu;
 
     function CanAddNewEntry: boolean;
+    function CanDuplicateEntry: boolean;
     function CanDeleteEntry(index: integer): boolean;
     procedure DeleteEntry(i: integer);
     function GetEntryCount: integer;
@@ -70,6 +72,7 @@ type
     function GetEntryHeight(index: integer): integer;
     function GetEntryBitDepth(index: integer): integer;
     function GetEntryBitmap(index: integer): TImageEntry;
+    procedure SetEntryBitmap(var AEntry: TImageEntry);
     function GetEntryThumbnail(index: integer; stretchWidth, stretchHeight: integer): TBGRABitmap;
 
     procedure DrawCurrentFrame(Bitmap: TBGRABitmap);
@@ -91,6 +94,7 @@ type
     property OnEscape: TNotifyEvent read FOnEscape write FOnEscape;
     property EntryCount: integer read GetEntryCount;
     function GetPreviewBitmap: TImageEntry;
+    property DuplicateEntrySourceIndex: integer read FDuplicateEntrySourceIndex write FDuplicateEntrySourceIndex;
   end;
 
 implementation
@@ -265,7 +269,8 @@ begin
   begin
     Key := 0;
     if (FSelectedMenuIndex >= 0) and (FSelectedMenuIndex <= high(FImageMenu)) and
-      not FImageMenu[FSelectedMenuIndex].IsNew then
+      not FImageMenu[FSelectedMenuIndex].IsNew and
+      not FImageMenu[FSelectedMenuIndex].IsDuplicate then
     begin
       DeleteEntry(FImageMenu[FSelectedMenuIndex].FrameIndex);
     end;
@@ -309,16 +314,31 @@ begin
 end;
 
 procedure TImagePreview.DrawMenu(Bitmap: TBGRABitmap);
+
+  procedure DrawSheet(x,y,sw,sh: single);
+  var
+    ptsF,ptsF2: ArrayOfTPointF;
+    j: integer;
+  begin
+    ptsF := PointsF([PointF(x+sw*0.20,y+sh*0.1),PointF(x+sw*0.55,y+sh*0.1),PointF(x+sw*0.75,y+sh*0.3),
+                     PointF(x+sw*0.75,y+sh*0.9),PointF(x+sw*0.20,y+sh*0.9)]);
+    setlength(ptsF2,length(ptsF));
+    for j := 0 to high(ptsF) do
+        ptsF2[j] := ptsF[j] + PointF(3,3);
+    bitmap.FillPolyAntialias(ptsF2, BGRA(0,0,0,96));
+    bitmap.FillPolyAntialias(ptsF, BGRAWhite);
+    bitmap.DrawPolygonAntialias(ptsF, BGRABlack, 1.5);
+    bitmap.DrawPolyLineAntialias([PointF(x+sw*0.55,y+sh*0.1),PointF(x+sw*0.55,y+sh*0.3),PointF(x+sw*0.75,y+sh*0.3)], BGRABlack,1.5);
+  end;
+
 var scrollPos, totalHeight, maxScroll, availableWidth: integer;
-  i,j: integer;
+  i: integer;
   x,y,sw,sh: integer;
   textRight, bpp: integer;
   iconCaption: string;
-  ptsF,ptsF2: ArrayOfTPointF;
   scrolledArea, inter: TRect;
 begin
   if (Bitmap.Width < 8) or (Bitmap.Height < 8) or (GetEntryCount = 0) then exit;
-
   if Assigned(FScrollbar) then
   begin
     scrollPos := FScrollbar.Position;
@@ -364,10 +384,12 @@ begin
     FSelectedMenuIndex:= -1;
   if (FSelectedMenuIndex = -1) and (length(FImageMenu) > 0) then
   begin
-    if (length(FImageMenu)>=2) and FImageMenu[0].IsNew then
-      FSelectedMenuIndex:= 1 //do not select "add new" entry by default
-    else
-      FSelectedMenuIndex:= 0;
+    FSelectedMenuIndex:= 0;
+    while (FSelectedMenuIndex < length(FImageMenu)) and
+      (FImageMenu[FSelectedMenuIndex].IsNew or FImageMenu[FSelectedMenuIndex].IsDuplicate
+       or FImageMenu[FSelectedMenuIndex].IsLoopCount) do
+      inc(FSelectedMenuIndex);
+    //do not select special entries by default
   end;
 
   for i := 0 to high(FImageMenu) do
@@ -382,7 +404,7 @@ begin
     if i = FSelectedMenuIndex then
     begin
       bitmap.FillRect(scrolledArea, ColorToRGB(clHighlight));
-      if not IsNew and not IsLoopCount and (Area.Right - IconArea.Right > 32) and CanDeleteEntry(FrameIndex) then
+      if not IsNew and not IsLoopCount and not IsDuplicate and (Area.Right - IconArea.Right > 32) and CanDeleteEntry(FrameIndex) then
       begin
         sh := (Area.Right - IconArea.Right - 8) div 4;
         if sh < 16 then sh := 16;
@@ -416,15 +438,13 @@ begin
     end else
     if IsNew then
     begin
-      ptsF := PointsF([PointF(x+sw*0.20,y+sh*0.1),PointF(x+sw*0.55,y+sh*0.1),PointF(x+sw*0.75,y+sh*0.3),
-                       PointF(x+sw*0.75,y+sh*0.9),PointF(x+sw*0.20,y+sh*0.9)]);
-      setlength(ptsF2,length(ptsF));
-      for j := 0 to high(ptsF) do
-          ptsF2[j] := ptsF[j] + PointF(3,3);
-      bitmap.FillPolyAntialias(ptsF2, BGRA(0,0,0,96));
-      bitmap.FillPolyAntialias(ptsF, BGRAWhite);
-      bitmap.DrawPolygonAntialias(ptsF, BGRABlack, 1.5);
-      bitmap.DrawPolyLineAntialias([PointF(x+sw*0.55,y+sh*0.1),PointF(x+sw*0.55,y+sh*0.3),PointF(x+sw*0.75,y+sh*0.3)], BGRABlack,1.5);
+      DrawSheet(x,y,sw,sh);
+    end else
+    if IsDuplicate then
+    begin
+      DrawSheet(x-sw*0.15,y-sh*0.1,sw,sh*0.9);
+      DrawSheet(x+sw*0.1,y+sh*0.1,sw,sh*0.9);
+      bitmap.FontFullHeight:= round(sh*0.7);
     end else
     begin
       bitmap.FillRect(rect(x+2,y+2, x+sw+2,y+sh+2), BGRA(0,0,0,96), dmDrawWithTransparency);
@@ -432,6 +452,7 @@ begin
     end;
 
     if IsNew then iconCaption := rsNewImage else
+    if IsDuplicate then iconCaption := rsDuplicateImage else
     if IsLoopCount then
     begin
       iconCaption:= rsLoopCount+': ';
@@ -466,7 +487,8 @@ end;
 
 function TImagePreview.TryMenuLayout(AWidth: integer; AColCount, ABottom: integer): integer;
 var x,y,i,frameIndex,h,w,sw,sh: integer;
-  newItem, LoopCountItem, colLeft,colRight, maxWidth, maxHeight: integer;
+  newItem, LoopCountItem, DuplicateItem,
+  colLeft,colRight, maxWidth, maxHeight: integer;
   currentCol: integer;
 
   procedure ComputeColumn;
@@ -490,8 +512,9 @@ begin
 
   if Assigned(FAnimatedGif) then LoopCountItem := 1 else LoopCountItem:= 0;
   if CanAddNewEntry then NewItem := 1 else NewItem := 0;
-  setlength(FImageMenu, GetEntryCount + NewItem + LoopCountItem);
-  for i := 0 to GetEntryCount-1 + NewItem + LoopCountItem do
+  if CanDuplicateEntry then DuplicateItem := 1 else DuplicateItem := 0;
+  setlength(FImageMenu, GetEntryCount + LoopCountItem + NewItem + DuplicateItem);
+  for i := 0 to high(FImageMenu) do
   begin
     if (LoopCountItem = 1) and (i = 0) then
     begin
@@ -508,8 +531,16 @@ begin
       h := 32;
     end
     else
+    if (DuplicateItem = 1) and (i = LoopCountItem + NewItem) then
     begin
-      frameIndex := i-NewItem-LoopCountItem;
+      frameIndex := GetEntryCount;
+      FImageMenu[i].IsDuplicate := true;
+      w := 32;
+      h := 32;
+    end
+    else
+    begin
+      frameIndex := i-NewItem-LoopCountItem-DuplicateItem;
       w := GetEntryWidth(frameIndex);
       h := GetEntryHeight(frameIndex);
     end;
@@ -549,6 +580,12 @@ begin
   result := Assigned(FIconCursor) or Assigned(FTiff) or Assigned(FAnimatedGif);
 end;
 
+function TImagePreview.CanDuplicateEntry: boolean;
+begin
+  result := (Assigned(FTiff) or Assigned(FAnimatedGif)) and
+    (FDuplicateEntrySourceIndex >= 0) and (FDuplicateEntrySourceIndex < EntryCount);
+end;
+
 function TImagePreview.GetEntryCount: integer;
 begin
   if Assigned(FIconCursor) then
@@ -641,6 +678,56 @@ begin
   end;
 end;
 
+procedure TImagePreview.SetEntryBitmap(var AEntry: TImageEntry);
+var
+  sAddedTiff: TMemoryStream;
+  addedTiff: TTiff;
+  sOut: TStream;
+begin
+  if (AEntry.frameIndex < 0) or (AEntry.frameIndex > GetEntryCount) then
+    raise exception.Create('Index out of bounds');
+  if Filename = '' then raise exception.create('Filename undefined');
+
+  if Assigned(FTiff) then
+  begin
+    addedTiff := TTiff.Create;
+    sAddedTiff := TMemoryStream.Create;
+    try
+      AEntry.bmp.SaveToStreamAs(sAddedTiff, ifTiff);
+      sAddedTiff.Position:= 0;
+      if addedTiff.LoadFromStream(sAddedTiff) <> teNone then
+        raise Exception.Create(rsInternalError);
+      if AEntry.frameIndex > FTiff.Count then
+        AEntry.frameIndex := FTiff.Count;
+      FTiff.Move(addedTiff,0, AEntry.frameIndex);
+
+      sOut := FileManager.CreateFileStream(Filename,fmCreate);
+      try
+        FTiff.SaveToStream(sOut);
+      finally
+        sOut.Free;
+      end;
+    finally
+      sAddedTiff.Free;
+      addedTiff.Free;
+    end;
+  end else
+  if Assigned(FAnimatedGif) then
+  begin
+    if AEntry.frameIndex >= FAnimatedGif.Count then
+      AEntry.frameIndex := FAnimatedGif.AddFullFrame(AEntry.bmp, FAnimatedGif.AverageDelayMs)
+    else
+      FAnimatedGif.ReplaceFullFrame(AEntry.frameIndex, AEntry.bmp, FAnimatedGif.FrameDelayMs[AEntry.frameIndex]);
+
+    sOut := FileManager.CreateFileStream(Filename,fmCreate);
+    try
+      FAnimatedGif.SaveToStream(sOut);
+    finally
+      sOut.Free;
+    end;
+  end;
+end;
+
 function TImagePreview.GetEntryThumbnail(index: integer; stretchWidth, stretchHeight: integer): TBGRABitmap;
 var
   entry: TImageEntry;
@@ -749,6 +836,7 @@ var reader: TFPCustomImageReader;
   jpegReader: TBGRAReaderJpeg;
   source: TStream;
   svg: TBGRASVG;
+  tr: TTiffError;
 begin
   if FInUpdatePreview then
   begin
@@ -775,8 +863,9 @@ begin
         begin
           try
             FTiff := TTiff.Create;
-            if FTiff.LoadFromStream(source) <> teNone then
-              raise exception.Create(rsCannotOpenFile);
+            tr := FTiff.LoadFromStream(source);
+            if tr <> teNone then
+              raise exception.Create(rsCannotOpenFile+' (TIFF '+inttostr(ord(tr))+')');
 
             FImageNbLayers := 1;
             if FTiff.Count = 0 then
@@ -978,6 +1067,7 @@ begin
   FStatus := AStatus;
   FAnimate:= AAnimate;
   FSelectedMenuIndex := -1;
+  FDuplicateEntrySourceIndex := -1;
   {$IFDEF WINDOWS}
   ASurface.Color := clAppWorkspace;
   {$ENDIF}
@@ -1093,6 +1183,14 @@ begin
             result.frameIndex:= TImageEntry.NewFrameIndex;
           end;
         end else
+        if FImageMenu[FSelectedMenuIndex].IsDuplicate then
+        begin
+          result := GetEntryBitmap(DuplicateEntrySourceIndex);
+          result.frameIndex:= GetEntryCount;
+          result.isDuplicate:= true;
+          SetEntryBitmap(result);
+        end
+        else
           result := GetEntryBitmap(FImageMenu[FSelectedMenuIndex].FrameIndex);
       end;
     end else
@@ -1120,6 +1218,14 @@ begin
               result.bmp := TBGRABitmap.Create(FAnimatedGif.Width,FAnimatedGif.Height,BGRAPixelTransparent);
               result.frameIndex:= TImageEntry.NewFrameIndex;
           end else
+          if FImageMenu[FSelectedMenuIndex].IsDuplicate then
+          begin
+            result := GetEntryBitmap(DuplicateEntrySourceIndex);
+            result.frameIndex:= GetEntryCount;
+            result.isDuplicate:= true;
+            SetEntryBitmap(result);
+          end
+          else
             result := GetEntryBitmap(FImageMenu[FSelectedMenuIndex].FrameIndex);
         end;
       end else

+ 8 - 1
lazpaint/uimageview.pas

@@ -49,6 +49,7 @@ type
     procedure PictureSelectionChanged({%H-}sender: TLazPaintImage; const ARect: TRect);
     procedure PaintVirtualScreenCursor({%H-}ACanvasOfs: TPoint; {%H-}AWorkArea: TRect; {%H-}AWinControlOfs: TPoint; {%H-}AWinControl: TWinControl);
     function GetRectToInvalidate(AInvalidateAll: boolean; AWorkArea: TRect): TRect;
+    function GetPictureCoordsDefined: boolean;
   public
     constructor Create(AInstance: TLazPaintCustomInstance; AZoom: TZoom; ACanvas: TCanvas);
     destructor Destroy; override;
@@ -71,6 +72,7 @@ type
     property FillSelectionHighlight: boolean read GetFillSelectionHighlight write SetFillSelectionHighlight;
     property ShowSelection: boolean read FShowSelection write SetShowSelection;
     property WorkspaceColor: TColor read GetWorkspaceColor;
+    property PictureCoordsDefined: boolean read GetPictureCoordsDefined;
   end;
 
 implementation
@@ -101,6 +103,11 @@ begin
   Image.ImageMayChangeCompletely;
 end;
 
+function TImageView.GetPictureCoordsDefined: boolean;
+begin
+  result := FLastPictureParameters.defined;
+end;
+
 function TImageView.GetImage: TLazPaintImage;
 begin
   result := FInstance.Image;
@@ -531,7 +538,7 @@ var virtualScreenPenCursorBefore: boolean;
       PtInRect(FLastPictureParameters.scaledArea, Point(X,Y)) then
     begin
       FPenCursorVisible := True;
-      wantedCursor := crNone;
+      {$IFNDEF DARWIN}wantedCursor := crNone;{$ENDIF}
       result := true;
     end else
       result := false;

+ 9 - 8
lazpaint/ulayerstack.pas

@@ -167,24 +167,25 @@ begin
   if ASelected then
   begin
     result.NameRect := rect(layerpos.X+round(LayerRectWidth*0.95),layerpos.Y,layerpos.X+StackWidth,layerPos.Y+LayerRectHeight div 2);
-    barwidth := StackWidth-InterruptorWidth-Int32or64(round(LayerRectWidth*1.1));
-    if barwidth > LayerRectWidth then barwidth := LayerRectWidth;
-    result.OpacityBar := rect(layerpos.X+LayerRectWidth,layerpos.Y+LayerRectHeight div 2,layerpos.X+LayerRectWidth+barwidth,layerpos.Y+LayerRectHeight);
-    rOpacity := rect(result.OpacityBar.left,(result.OpacityBar.top*7+result.OpacityBar.bottom) div 8,result.OpacityBar.right,
-        (result.OpacityBar.top+result.OpacityBar.bottom*7) div 8);
+    barwidth := StackWidth-InterruptorWidth-round(LayerRectWidth*0.92)-ABitmap.FontFullHeight div 2;
+    result.OpacityBar := rect(layerpos.X+round(LayerRectWidth*0.92),layerpos.Y+LayerRectHeight div 2,
+                              layerpos.X+round(LayerRectWidth*0.92)+barwidth,layerpos.Y+LayerRectHeight);
+    rOpacity := rect(result.OpacityBar.left,(result.OpacityBar.top*7+result.OpacityBar.bottom) div 8,
+                     result.OpacityBar.right,(result.OpacityBar.top+result.OpacityBar.bottom*7) div 8);
     ABitmap.Rectangle(rOpacity,lColor,dmSet);
     rOpacity.Inflate(-1,-1);
     bmpOpacity := TBGRABitmap.Create(rOpacity.Width,rOpacity.Height,BGRABlack);
     rFill := rect(0,0,round(bmpOpacity.Width*LazPaintInstance.Image.LayerOpacity[LayerIndex]/255),bmpOpacity.Height);
     bmpOpacity.ClipRect := rFill;
     bmpOpacity.FillRect(rFill, CSSSilver,dmSet);
-    bmpOpacity.FontFullHeight := bmpOpacity.Height;
+    bmpOpacity.FontFullHeight := min(bmpOpacity.Height, ABitmap.FontFullHeight*2);
     bmpOpacity.FontName := ABitmap.FontName;
     bmpOpacity.FontStyle:= [fsBold];
+    bmpOpacity.FontVerticalAnchor:= fvaCenter;
     percentStr := IntToStr(round(LazPaintInstance.Image.LayerOpacity[LayerIndex]*100/255))+'%';
-    bmpOpacity.TextOut(bmpOpacity.Width/2,0, percentStr, BGRABlack, taCenter);
+    bmpOpacity.TextOut(bmpOpacity.Width/2,bmpOpacity.Height/2, percentStr, BGRABlack, taCenter);
     bmpOpacity.ClipRect := rect(rFill.Right,rFill.Top,bmpOpacity.Width,rFill.Bottom);
-    bmpOpacity.TextOut(bmpOpacity.Width/2,0, percentStr, BGRAWhite, taCenter);
+    bmpOpacity.TextOut(bmpOpacity.Width/2,bmpOpacity.Height/2, percentStr, BGRAWhite, taCenter);
     ABitmap.FillMask(rOpacity.Left,rOpacity.Top,bmpOpacity, lColor, dmDrawWithTransparency);
     bmpOpacity.Free;
   end

+ 1 - 1
lazpaint/umenu.pas

@@ -372,7 +372,7 @@ begin
 end;
 
 procedure TMainFormMenu.Apply;
-const ImageBrowser = {$IFNDEF DARWIN}'FileUseImageBrowser,'{$ELSE}''{$ENDIF};
+const ImageBrowser = 'FileUseImageBrowser,';
 var i,j,tbHeight,tbHeightOrig: NativeInt;
 begin
   for i := 0 to FActionList.ActionCount-1 do

+ 9 - 4
lazpaint/uresourcestrings.pas

@@ -63,6 +63,7 @@ resourcestring
   rsMergeSelection='Do you want to merge selection?';
   rsSave='Save';
   rsNewImage='New image';
+  rsDuplicateImage='Duplicate image';
   rsOpen='Open';
   rsReload='Reload';
   rsReloadChanged='Bitmap has been modified. Do you really want to reload?';
@@ -73,12 +74,16 @@ resourcestring
   rsLatestVersion = 'The latest version of LazPaint available online is';
   rsMustReleaseSelection = 'You must first release the selection';
   rsMustShowLayer = 'You must first make the layer visible';
-  rsHoldShiftForSquare = 'Hold SHIFT to draw a square or a circle';
-  rsHoldCtrlSnapToPixel = 'Hold CTRL to snap to pixels';
+  rsCtrl = 'CTRL';
+  rsAlt = 'ALT';
+  rsShift = 'SHIFT';
+  rsCmd = 'CMD';
+  rsHoldKeyForSquare = 'Hold %1 to draw a square or a circle';
+  rsHoldKeySnapToPixel = 'Hold %1 to snap to pixels';
   rsReturnValides = 'Press ENTER to validate';
   rsBackspaceRemoveLastPoint = 'Press BACKSPACE to remove last point';
-  rsCtrlRestrictRotation = 'Hold CTRL to restrict rotation angle';
-  rsAltShiftScaleMode = 'Hold ALT or SHIFT to scale';
+  rsHoldKeyRestrictRotation = 'Hold %1 to restrict rotation angle';
+  rsHoldKeysScaleMode = 'Hold %1 or %2 to scale';
   rsCurveModeHint = 'Press S or X to set the curve mode of the last point';
   rsBlendOpNotUsedForBackground = 'The blend operation is applied only if there is a layer underneath';
   rsRightClickForSource = 'Use RIGHT click to define source';

+ 22 - 0
lazpaint/uscripting.pas

@@ -51,6 +51,7 @@ type
     function GetSubsetByName(const AName: string): TVariableSet;
     function GetListByName(const AName: string): string;
     function GetVariablesAsString: string;
+    function GetVarName(AIndex: integer): string;
     procedure SetBooleanByName(const AName: string; AValue: boolean);
     procedure SetFloatByName(const AName: string; AValue: double);
     procedure SetIntegerByName(const AName: string; AValue: TScriptInteger);
@@ -126,6 +127,7 @@ type
     function CopyValuesTo(ASet: TVariableSet): boolean;
     property FunctionName: string read FFunctionName;
     property Count: NativeInt read GetCount;
+    property VariableName[AIndex: integer]: string read GetVarName;
     property VariablesAsString: string read GetVariablesAsString;
     property Floats[const AName: string]: double read GetFloatByName write SetFloatByName;
     property Integers[const AName: string]: TScriptInteger read GetIntegerByName write SetIntegerByName;
@@ -386,6 +388,26 @@ begin
 
 end;
 
+function TVariableSet.GetVarName(AIndex: integer): string;
+begin
+  if AIndex < 0 then raise exception.Create('Index out of bounds');
+
+  if AIndex < FNbScalars then exit(FScalars[AIndex].name)
+  else dec(AIndex, FNbScalars);
+  if AIndex < FNbStrings then exit(FStrings[AIndex].name)
+  else dec(AIndex, FNbStrings);
+  if AIndex < FNbBoolLists then exit(FBoolLists[AIndex].name)
+  else dec(AIndex, FNbBoolLists);
+  if AIndex < FNbScalarLists then exit(FScalarLists[AIndex].name)
+  else dec(AIndex, FNbScalarLists);
+  if AIndex < FNbStrLists then exit(FStrLists[AIndex].name)
+  else dec(AIndex, FNbStrLists);
+  if AIndex < FNbSubsets then exit(FSubsets[AIndex].name)
+  else dec(AIndex, FNbSubsets);
+
+  raise exception.Create('Index out of bounds');
+end;
+
 function TVariableSet.LoadFromVariablesAsString(AVariablesAsString: string
   ): TInterpretationErrors;
 var varName: string;

+ 7 - 3
lazpaint/utiff.pas

@@ -466,6 +466,8 @@ begin
 
   subError := LoadChunkList(AInput, TiffTagFreeOffsets, TiffTagFreeByteCounts, FFreeChunks);
   if subError <> teNone then Exit(subError);
+
+  result := teNone;
 end;
 
 procedure TTiffImageDirectory.SaveChunks(AOutput: TTiffIO);
@@ -1143,6 +1145,7 @@ begin
         AList.Add(mem);
     end;
   end;
+  result := teNone;
 end;
 
 procedure TTiffDirectory.SaveChunkList(AOutput: TTiffIO; ATagOffsets,
@@ -1365,15 +1368,15 @@ end;
 
 function TTiff.LoadImageEntries(var AInput: TTiffIO; AFirstImagePos: LongWord
   ): TTiffError;
-type TIntegerList = specialize TFPGList<integer>;
+type TLongwordList = specialize TFPGList<Longword>;
 var
   curImagePos, nextImagePos: LongWord;
-  previousPositions: TIntegerList;
+  previousPositions: TLongwordList;
   newEntry: TTiffImageDirectory;
   i: Integer;
   subError: TTiffError;
 begin
-  previousPositions := TIntegerList.Create;
+  previousPositions := TLongwordList.Create;
   try
     curImagePos := AFirstImagePos;
     repeat
@@ -1403,6 +1406,7 @@ begin
   finally
     previousPositions.Free;
   end;
+  result := teNone;
 end;
 
 constructor TTiff.Create;

+ 17 - 7
lazpaintcontrols/lcvectorclipboard.pas

@@ -5,10 +5,10 @@ unit LCVectorClipboard;
 interface
 
 uses
-  Classes, SysUtils, Clipbrd, LCLType, LCVectorOriginal;
+  Classes, SysUtils, Clipbrd, LCLType, LCVectorOriginal, BGRATransform;
 
-function CopyShapesToClipboard(AShapes: array of TVectorShape): boolean;
-procedure PasteShapesFromClipboard(ATargetContainer: TVectorOriginal);
+function CopyShapesToClipboard(AShapes: array of TVectorShape; const AMatrix: TAffineMatrix): boolean;
+procedure PasteShapesFromClipboard(ATargetContainer: TVectorOriginal; const ATargetMatrix: TAffineMatrix);
 function ClipboardHasShapes: boolean;
 
 implementation
@@ -16,11 +16,12 @@ implementation
 var
   vectorClipboardFormat : TClipboardFormat;
 
-function CopyShapesToClipboard(AShapes: array of TVectorShape): boolean;
+function CopyShapesToClipboard(AShapes: array of TVectorShape; const AMatrix: TAffineMatrix): boolean;
 var
   tempContainer: TVectorOriginal;
   mem: TMemoryStream;
   i: Integer;
+  s: TVectorShape;
 begin
   result:= false;
   if length(AShapes)=0 then exit;
@@ -28,7 +29,11 @@ begin
   mem := TMemoryStream.Create;
   try
     for i := 0 to high(AShapes) do
-      tempContainer.AddShape(AShapes[i].Duplicate);
+    begin
+      s := AShapes[i].Duplicate;
+      s.Transform(AMatrix);
+      tempContainer.AddShape(s);
+    end;
     tempContainer.SaveToStream(mem);
     Clipboard.Clear;
     mem.Position:= 0;
@@ -39,13 +44,16 @@ begin
   end;
 end;
 
-procedure PasteShapesFromClipboard(ATargetContainer: TVectorOriginal);
+procedure PasteShapesFromClipboard(ATargetContainer: TVectorOriginal; const ATargetMatrix: TAffineMatrix);
 var
   tempContainer: TVectorOriginal;
   mem: TMemoryStream;
   i: Integer;
   pastedShape: TVectorShape;
+  invMatrix: TAffineMatrix;
 begin
+  if not IsAffineMatrixInversible(ATargetMatrix) then exit;
+  invMatrix := AffineMatrixInverse(ATargetMatrix);
   if Clipboard.HasFormat(vectorClipboardFormat) then
   begin
     mem := TMemoryStream.Create;
@@ -58,8 +66,10 @@ begin
         for i := 0 to tempContainer.ShapeCount-1 do
         begin
           pastedShape := tempContainer.Shape[i].Duplicate;
+          pastedShape.Transform(invMatrix);
           ATargetContainer.AddShape(pastedShape);
-          ATargetContainer.SelectShape(pastedShape);
+          if i = tempContainer.ShapeCount-1 then
+            ATargetContainer.SelectShape(pastedShape);
         end;
       end;
     finally

+ 12 - 1
lazpaintcontrols/lcvectorialfill.pas

@@ -109,6 +109,7 @@ type
     function Duplicate: TVectorialFill; virtual;
     destructor Destroy; override;
     function Equals(Obj: TObject): boolean; override;
+    class function Equal(AFill1, AFill2: TVectorialFill): boolean;
     procedure Assign(Obj: TObject);
     property FillType: TVectorialFillType read GetFillType;
     property IsEditable: boolean read GetIsEditable;
@@ -171,7 +172,7 @@ end;
 
 function TVectorialFillDiff.IsIdentity: boolean;
 begin
-  result := FStart.Equals(FEnd);
+  result := TVectorialFill.Equal(FStart,FEnd);
 end;
 
 function TVectorialFillDiff.CanAppend(ADiff: TCustomVectorialFillDiff
@@ -615,6 +616,16 @@ begin
     result:= false;
 end;
 
+class function TVectorialFill.Equal(AFill1, AFill2: TVectorialFill): boolean;
+begin
+  if AFill1 = nil then
+  begin
+    if AFill2 = nil then result := true
+    else result := (AFill2.FillType = vftNone);
+  end else
+    result := AFill1.Equals(AFill2);
+end;
+
 procedure TVectorialFill.Assign(Obj: TObject);
 var
   other: TVectorialFill;

+ 61 - 7
lazpaintcontrols/lcvectororiginal.pas

@@ -15,6 +15,7 @@ const
   InfiniteRect : TRect = (Left: -MaxLongInt; Top: -MaxLongInt; Right: MaxLongInt; Bottom: MaxLongInt);
   EmptyTextureId = 0;
   DefaultShapeOutlineWidth = 2;
+  MediumShapeCost = 100;
 
 type
   TVectorOriginal = class;
@@ -179,6 +180,7 @@ type
     procedure LoadFill(AStorage: TBGRACustomOriginalStorage; AObjectName: string; var AValue: TVectorialFill);
     procedure SaveFill(AStorage: TBGRACustomOriginalStorage; AObjectName: string; AValue: TVectorialFill);
     function ComputeStroke(APoints: ArrayOfTPointF; AClosed: boolean; AStrokeMatrix: TAffineMatrix): ArrayOfTPointF; virtual;
+    function ComputeStrokeEnvelope(APoints: ArrayOfTPointF; AClosed: boolean; AWidth: single): ArrayOfTPointF; virtual;
     function GetStroker: TBGRAPenStroker;
     property Stroker: TBGRAPenStroker read GetStroker;
     procedure FillChange({%H-}ASender: TObject; var ADiff: TCustomVectorialFillDiff); virtual;
@@ -201,7 +203,8 @@ type
     procedure Render(ADest: TBGRABitmap; ARenderOffset: TPoint; AMatrix: TAffineMatrix; ADraft: boolean); virtual;
     function GetRenderBounds(ADestRect: TRect; AMatrix: TAffineMatrix; AOptions: TRenderBoundsOptions = []): TRectF; virtual; abstract;
     function SuggestGradientBox(AMatrix: TAffineMatrix): TAffineBox; virtual;
-    function PointInShape(APoint: TPointF): boolean; virtual; abstract;
+    function PointInShape(APoint: TPointF): boolean; overload; virtual; abstract;
+    function PointInShape(APoint: TPointF; ARadius: single): boolean; overload; virtual; abstract;
     procedure ConfigureCustomEditor(AEditor: TBGRAOriginalEditor); virtual; abstract;
     procedure ConfigureEditor(AEditor: TBGRAOriginalEditor); virtual;
     procedure LoadFromStorage(AStorage: TBGRACustomOriginalStorage); virtual;
@@ -224,6 +227,7 @@ type
     function Duplicate: TVectorShape;
     class function StorageClassName: RawByteString; virtual; abstract;
     function GetIsSlow(const {%H-}AMatrix: TAffineMatrix): boolean; virtual;
+    function GetGenericCost: integer; virtual;
     function GetUsedTextures: ArrayOfBGRABitmap; virtual;
     procedure Transform(const AMatrix: TAffineMatrix); virtual;
     class function Fields: TVectorShapeFields; virtual;
@@ -359,7 +363,8 @@ type
     procedure SelectShape(AIndex: integer); overload;
     procedure SelectShape(AShape: TVectorShape); overload;
     procedure DeselectShape;
-    procedure MouseClick(APoint: TPointF);
+    function GetShapesCost: integer;
+    procedure MouseClick(APoint: TPointF; ARadius: single);
     procedure Render(ADest: TBGRABitmap; ARenderOffset: TPoint; AMatrix: TAffineMatrix; ADraft: boolean); override;
     procedure ConfigureEditor(AEditor: TBGRAOriginalEditor); override;
     function CreateEditor: TBGRAOriginalEditor; override;
@@ -601,9 +606,9 @@ end;
 
 function TVectorShapeCommonFillDiff.IsIdentity: boolean;
 begin
-  result := FStartPenFill.Equals(FEndPenFill) and
-    FStartBackFill.Equals(FEndBackFill) and
-    FStartOutlineFill.Equals(FEndOutlineFill);
+  result := TVectorialFill.Equal(FStartPenFill, FEndPenFill) and
+    TVectorialFill.Equal(FStartBackFill, FEndBackFill) and
+    TVectorialFill.Equal(FStartOutlineFill, FEndOutlineFill);
 end;
 
 { TVectorOriginalShapeRangeDiff }
@@ -1204,6 +1209,28 @@ begin
   result := false;
 end;
 
+function TVectorShape.GetGenericCost: integer;
+begin
+  if vsfBackFill in Fields then
+  begin
+    case BackFill.FillType of
+    vftGradient: result := 25;
+    vftTexture: result := 10;
+    vftSolid: result := 4;
+    else {vftNone} result := 1;
+    end
+  end else
+  if vsfPenStyle in Fields then
+  begin
+    if PenStyleEqual(PenStyle, SolidPenStyle) or
+       PenStyleEqual(PenStyle, ClearPenStyle) then
+       result := 1
+    else
+      result := 2;
+  end else
+    result := 1;
+end;
+
 function TVectorShape.GetUsedTextures: ArrayOfBGRABitmap;
 var
   f: TVectorShapeFields;
@@ -1280,7 +1307,8 @@ begin
     result := nil;
     pointerData := AStorage.RawString[AName+'-ptr'];
     if length(pointerData)<>sizeof(result) then
-      raise exception.Create('Invalid stored pointer');
+      raise exception.Create('Invalid stored pointer (expected size '+
+        inttostr(sizeof(result))+' but encountered '+inttostr(length(pointerData))+')');
     move(pointerData[1],result,sizeof(result));
   end else
   if Assigned(Container) then
@@ -1632,6 +1660,16 @@ begin
     result := Stroker.ComputePolyline(APoints, PenWidth, PenColor);
 end;
 
+function TVectorShape.ComputeStrokeEnvelope(APoints: ArrayOfTPointF;
+  AClosed: boolean; AWidth: single): ArrayOfTPointF;
+var
+  opt: TBGRAPolyLineOptions;
+begin
+  opt := [];
+  if AClosed then include(opt, plCycle);
+  result := ComputeWidePolyPolylinePoints(APoints, AWidth, BGRABlack, pecRound, pjsMiter, SolidPenStyle, opt);
+end;
+
 function TVectorShape.GetStroker: TBGRAPenStroker;
 begin
   if FStroker = nil then
@@ -2477,6 +2515,7 @@ begin
   idx := FShapes.IndexOf(AShape);
   if idx = -1 then exit(false);
   DeleteShapeRange(idx, 1);
+  result := true;
 end;
 
 procedure TVectorOriginal.DeleteShape(AIndex: integer);
@@ -2575,7 +2614,16 @@ begin
   SelectShape(nil);
 end;
 
-procedure TVectorOriginal.MouseClick(APoint: TPointF);
+function TVectorOriginal.GetShapesCost: integer;
+var
+  i: Integer;
+begin
+  result := 0;
+  for i := 0 to ShapeCount-1 do
+    inc(result, Shape[i].GetGenericCost);
+end;
+
+procedure TVectorOriginal.MouseClick(APoint: TPointF; ARadius: single);
 var
   i: LongInt;
 begin
@@ -2585,6 +2633,12 @@ begin
       SelectShape(i);
       exit;
     end;
+  for i:= FShapes.Count-1 downto 0 do
+    if FShapes[i].PointInShape(APoint, ARadius) then
+    begin
+      SelectShape(i);
+      exit;
+    end;
   DeselectShape;
 end;
 

+ 37 - 9
lazpaintcontrols/lcvectorpolyshapes.pas

@@ -90,7 +90,7 @@ type
     procedure OnClickPoint({%H-}ASender: TObject; APointIndex: integer; {%H-}AShift: TShiftState); virtual;
     procedure DoClickPoint({%H-}APointIndex: integer; {%H-}AShift: TShiftState); virtual;
     function CanMovePoints: boolean; virtual;
-    procedure InsertPointAuto;
+    procedure InsertPointAuto(AShift: TShiftState);
     function ComputeStroke(APoints: ArrayOfTPointF; AClosed: boolean;
       AStrokeMatrix: TAffineMatrix): ArrayOfTPointF; override;
   public
@@ -130,7 +130,8 @@ type
     class function Fields: TVectorShapeFields; override;
     procedure Render(ADest: TBGRABitmap; AMatrix: TAffineMatrix; ADraft: boolean); override;
     function GetRenderBounds({%H-}ADestRect: TRect; AMatrix: TAffineMatrix; AOptions: TRenderBoundsOptions = []): TRectF; override;
-    function PointInShape(APoint: TPointF): boolean; override;
+    function PointInShape(APoint: TPointF): boolean; overload; override;
+    function PointInShape(APoint: TPointF; ARadius: single): boolean; overload; override;
     function GetIsSlow(const {%H-}AMatrix: TAffineMatrix): boolean; override;
     class function StorageClassName: RawByteString; override;
   end;
@@ -637,7 +638,18 @@ end;
 procedure TCustomPolypointShape.DoClickPoint(APointIndex: integer;
   AShift: TShiftState);
 begin
-  //nothing
+  if (APointIndex = 0) and (UserMode = vsuCreate) and not Closed then
+  begin
+    if PointCount > 2 then
+    begin
+      RemovePoint(PointCount-1);
+      Closed := true;
+      UserMode := vsuEdit;
+    end else
+    begin
+      Remove;
+    end;
+  end;
 end;
 
 function TCustomPolypointShape.CanMovePoints: boolean;
@@ -645,11 +657,12 @@ begin
   result := true;
 end;
 
-procedure TCustomPolypointShape.InsertPointAuto;
+procedure TCustomPolypointShape.InsertPointAuto(AShift: TShiftState);
 var
   bestSegmentIndex, i: Integer;
-  bestSegmentDist, segmentLen, segmentPos: single;
-  u, n: TPointF;
+  bestSegmentDist,
+  segmentLen, segmentPos: single;
+  u, n, bestProjection: TPointF;
   segmentDist: single;
 begin
   if isEmptyPointF(FMousePos) then exit;
@@ -659,6 +672,7 @@ begin
 
   bestSegmentIndex := -1;
   bestSegmentDist := MaxSingle;
+  bestProjection := EmptyPointF;
   for i := 0 to PointCount-1 do
   if FAddingPoint and (i >= PointCount-2) then break else
   begin
@@ -677,13 +691,17 @@ begin
         begin
           bestSegmentDist := segmentDist;
           bestSegmentIndex := i;
+          bestProjection := Points[i]+segmentPos*u;
         end;
       end;
     end;
   end;
   if bestSegmentIndex <> -1 then
   begin
-    InsertPoint(bestSegmentIndex+1, FMousePos);
+    if ssShift in AShift then
+      InsertPoint(bestSegmentIndex+1, bestProjection)
+    else
+      InsertPoint(bestSegmentIndex+1, FMousePos);
     FHoverPoint:= bestSegmentIndex+1;
   end;
 end;
@@ -816,7 +834,7 @@ begin
       RemovePoint(PointCount-2);
     AHandled:= true;
   end else
-  if (Key = skInsert) then InsertPointAuto else
+  if (Key = skInsert) then InsertPointAuto(Shift) else
     inherited KeyDown(Shift, Key, AHandled);
 end;
 
@@ -1038,7 +1056,7 @@ function TPolylineShape.PointInShape(APoint: TPointF): boolean;
 var
   pts: ArrayOfTPointF;
 begin
-  if not BackVisible and not PenVisible then exit;
+  if not BackVisible and not PenVisible then exit(false);
   pts := GetCurve(AffineMatrixIdentity);
   if BackVisible and IsPointInPolygon(pts, APoint, true) then exit(true);
   if PenVisible then
@@ -1049,6 +1067,16 @@ begin
   result := false;
 end;
 
+function TPolylineShape.PointInShape(APoint: TPointF; ARadius: single): boolean;
+var
+  pts: ArrayOfTPointF;
+begin
+  if not BackVisible and not PenVisible then exit(false);
+  pts := GetCurve(AffineMatrixIdentity);
+  pts := ComputeStrokeEnvelope(pts, Closed, ARadius*2);
+  result := IsPointInPolygon(pts, APoint, true);
+end;
+
 function TPolylineShape.GetIsSlow(const AMatrix: TAffineMatrix): boolean;
 begin
   Result:= PointCount > 40;

+ 159 - 22
lazpaintcontrols/lcvectorrectshapes.pas

@@ -39,6 +39,7 @@ type
     FOriginBackup,FXUnitBackup,FYUnitBackup,
     FXAxisBackup,FYAxisBackup: TPointF;
     FXSizeBackup,FYSizeBackup: single;
+    FMatrixBackup: TAffineMatrix;
     FFixedRatio: single;
     procedure DoMoveXAxis(ANewCoord: TPointF; AShift: TShiftState; AFactor: single);
     procedure DoMoveYAxis(ANewCoord: TPointF; AShift: TShiftState; AFactor: single);
@@ -48,11 +49,20 @@ type
     procedure OnMoveYAxis({%H-}ASender: TObject; {%H-}APrevCoord, ANewCoord: TPointF; AShift: TShiftState);
     procedure OnMoveXAxisNeg({%H-}ASender: TObject; {%H-}APrevCoord, ANewCoord: TPointF; AShift: TShiftState);
     procedure OnMoveYAxisNeg({%H-}ASender: TObject; {%H-}APrevCoord, ANewCoord: TPointF; AShift: TShiftState);
+    procedure OnMoveXAxisAlt({%H-}ASender: TObject; {%H-}APrevCoord, ANewCoord: TPointF; AShift: TShiftState);
+    procedure OnMoveYAxisAlt({%H-}ASender: TObject; {%H-}APrevCoord, ANewCoord: TPointF; AShift: TShiftState);
+    procedure OnMoveXAxisNegAlt({%H-}ASender: TObject; {%H-}APrevCoord, ANewCoord: TPointF; AShift: TShiftState);
+    procedure OnMoveYAxisNegAlt({%H-}ASender: TObject; {%H-}APrevCoord, ANewCoord: TPointF; AShift: TShiftState);
     procedure OnMoveXYCorner({%H-}ASender: TObject; {%H-}APrevCoord, ANewCoord: TPointF; AShift: TShiftState);
     procedure OnMoveXNegYCorner({%H-}ASender: TObject; {%H-}APrevCoord, ANewCoord: TPointF; AShift: TShiftState);
     procedure OnMoveXYNegCorner({%H-}ASender: TObject; {%H-}APrevCoord, ANewCoord: TPointF; AShift: TShiftState);
     procedure OnMoveXNegYNegCorner({%H-}ASender: TObject; {%H-}APrevCoord, ANewCoord: TPointF; AShift: TShiftState);
+    procedure OnMoveXYCornerAlt({%H-}ASender: TObject; {%H-}APrevCoord, ANewCoord: TPointF; AShift: TShiftState);
+    procedure OnMoveXNegYCornerAlt({%H-}ASender: TObject; {%H-}APrevCoord, ANewCoord: TPointF; AShift: TShiftState);
+    procedure OnMoveXYNegCornerAlt({%H-}ASender: TObject; {%H-}APrevCoord, ANewCoord: TPointF; AShift: TShiftState);
+    procedure OnMoveXNegYNegCornerAlt({%H-}ASender: TObject; {%H-}APrevCoord, ANewCoord: TPointF; AShift: TShiftState);
     procedure OnStartMove({%H-}ASender: TObject; {%H-}APointIndex: integer; {%H-}AShift: TShiftState);
+    procedure UpdateFillMatrixFromRect;
     function GetCornerPositition: single; virtual; abstract;
     function GetOrthoRect(AMatrix: TAffineMatrix; out ARect: TRectF): boolean;
     function AllowShearTransform: boolean; virtual;
@@ -93,7 +103,8 @@ type
     class function Fields: TVectorShapeFields; override;
     procedure Render(ADest: TBGRABitmap; AMatrix: TAffineMatrix; ADraft: boolean); override;
     function GetRenderBounds({%H-}ADestRect: TRect; AMatrix: TAffineMatrix; AOptions: TRenderBoundsOptions = []): TRectF; override;
-    function PointInShape(APoint: TPointF): boolean; override;
+    function PointInShape(APoint: TPointF): boolean; overload; override;
+    function PointInShape(APoint: TPointF; ARadius: single): boolean; overload; override;
     function GetIsSlow(const AMatrix: TAffineMatrix): boolean; override;
     class function StorageClassName: RawByteString; override;
   end;
@@ -111,7 +122,8 @@ type
     function GetAlignBounds(const {%H-}ALayoutRect: TRect; const AMatrix: TAffineMatrix): TRectF; override;
     procedure Render(ADest: TBGRABitmap; AMatrix: TAffineMatrix; ADraft: boolean); override;
     function GetRenderBounds({%H-}ADestRect: TRect; AMatrix: TAffineMatrix; AOptions: TRenderBoundsOptions = []): TRectF; override;
-    function PointInShape(APoint: TPointF): boolean; override;
+    function PointInShape(APoint: TPointF): boolean; overload; override;
+    function PointInShape(APoint: TPointF; ARadius: single): boolean; overload; override;
     function GetIsSlow(const AMatrix: TAffineMatrix): boolean; override;
     class function StorageClassName: RawByteString; override;
   end;
@@ -160,6 +172,7 @@ type
     procedure SetShapeAltitudePercent(AValue: single);
     procedure SetShapeKind(AValue: TPhongShapeKind);
     function BackVisible: boolean;
+    function GetEnvelope: ArrayOfTPointF;
   protected
     function AllowShearTransform: boolean; override;
   public
@@ -175,8 +188,10 @@ type
     procedure SaveToStorage(AStorage: TBGRACustomOriginalStorage); override;
     procedure Render(ADest: TBGRABitmap; AMatrix: TAffineMatrix; ADraft: boolean); override;
     function GetRenderBounds({%H-}ADestRect: TRect; AMatrix: TAffineMatrix; AOptions: TRenderBoundsOptions = []): TRectF; override;
-    function PointInShape(APoint: TPointF): boolean; override;
+    function PointInShape(APoint: TPointF): boolean; overload; override;
+    function PointInShape(APoint: TPointF; ARadius: single): boolean; overload; override;
     function GetIsSlow(const AMatrix: TAffineMatrix): boolean; override;
+    function GetGenericCost: integer; override;
     procedure Transform(const AMatrix: TAffineMatrix); override;
     class function StorageClassName: RawByteString; override;
     property ShapeKind: TPhongShapeKind read FShapeKind write SetShapeKind;
@@ -484,6 +499,7 @@ begin
     end;
   end;
   EnsureRatio(-AFactor,0);
+  UpdateFillMatrixFromRect;
   EndUpdate;
 end;
 
@@ -522,6 +538,7 @@ begin
     end;
   end;
   EnsureRatio(0,-AFactor);
+  UpdateFillMatrixFromRect;
   EndUpdate;
 end;
 
@@ -581,6 +598,7 @@ begin
     end;
   end;
   EnsureRatio(-AFactorX,-AFactorY);
+  UpdateFillMatrixFromRect;
   EndUpdate;
 end;
 
@@ -614,6 +632,30 @@ begin
   DoMoveYAxis(ANewCoord, AShift, -1);
 end;
 
+procedure TCustomRectShape.OnMoveXAxisAlt(ASender: TObject; APrevCoord,
+  ANewCoord: TPointF; AShift: TShiftState);
+begin
+  DoMoveXAxis(ANewCoord, AShift+[ssAlt], 1);
+end;
+
+procedure TCustomRectShape.OnMoveYAxisAlt(ASender: TObject; APrevCoord,
+  ANewCoord: TPointF; AShift: TShiftState);
+begin
+  DoMoveYAxis(ANewCoord, AShift+[ssAlt], 1);
+end;
+
+procedure TCustomRectShape.OnMoveXAxisNegAlt(ASender: TObject; APrevCoord,
+  ANewCoord: TPointF; AShift: TShiftState);
+begin
+  DoMoveXAxis(ANewCoord, AShift+[ssAlt], -1);
+end;
+
+procedure TCustomRectShape.OnMoveYAxisNegAlt(ASender: TObject; APrevCoord,
+  ANewCoord: TPointF; AShift: TShiftState);
+begin
+  DoMoveYAxis(ANewCoord, AShift+[ssAlt], -1);
+end;
+
 procedure TCustomRectShape.OnMoveXYCorner(ASender: TObject; APrevCoord,
   ANewCoord: TPointF; AShift: TShiftState);
 begin
@@ -638,6 +680,30 @@ begin
   DoMoveXYCorner(ANewCoord, AShift, -1, -1);
 end;
 
+procedure TCustomRectShape.OnMoveXYCornerAlt(ASender: TObject; APrevCoord,
+  ANewCoord: TPointF; AShift: TShiftState);
+begin
+  DoMoveXYCorner(ANewCoord, AShift+[ssAlt], 1, 1);
+end;
+
+procedure TCustomRectShape.OnMoveXNegYCornerAlt(ASender: TObject; APrevCoord,
+  ANewCoord: TPointF; AShift: TShiftState);
+begin
+  DoMoveXYCorner(ANewCoord, AShift+[ssAlt], -1, 1);
+end;
+
+procedure TCustomRectShape.OnMoveXYNegCornerAlt(ASender: TObject; APrevCoord,
+  ANewCoord: TPointF; AShift: TShiftState);
+begin
+  DoMoveXYCorner(ANewCoord, AShift+[ssAlt], 1, -1);
+end;
+
+procedure TCustomRectShape.OnMoveXNegYNegCornerAlt(ASender: TObject;
+  APrevCoord, ANewCoord: TPointF; AShift: TShiftState);
+begin
+  DoMoveXYCorner(ANewCoord, AShift+[ssAlt], -1, -1);
+end;
+
 procedure TCustomRectShape.OnStartMove(ASender: TObject; APointIndex: integer;
   AShift: TShiftState);
 begin
@@ -650,6 +716,23 @@ begin
   FYUnitBackup := FYAxis-FOrigin;
   FYSizeBackup := VectLen(FYUnitBackup);
   if FYSizeBackup <> 0 then FYUnitBackup := (1/FYSizeBackup)*FYUnitBackup;
+  FMatrixBackup := AffineMatrix(FXAxis-FOrigin, FYAxis-FOrigin, FOrigin);
+end;
+
+procedure TCustomRectShape.UpdateFillMatrixFromRect;
+var
+  newMatrix, matrixDiff: TAffineMatrix;
+begin
+  newMatrix := AffineMatrix(FXAxis-FOrigin, FYAxis-FOrigin, FOrigin);
+  if IsAffineMatrixInversible(newMatrix) and IsAffineMatrixInversible(FMatrixBackup) then
+  begin
+    if vsfBackFill in Fields then
+    begin
+      matrixDiff := newMatrix*AffineMatrixInverse(FMatrixBackup);
+      BackFill.Transform(matrixDiff);
+    end;
+    FMatrixBackup := newMatrix;
+  end;
 end;
 
 function TCustomRectShape.GetAffineBox(const AMatrix: TAffineMatrix; APixelCentered: boolean): TAffineBox;
@@ -759,7 +842,7 @@ procedure TCustomRectShape.ConfigureCustomEditor(AEditor: TBGRAOriginalEditor);
 var
   d: Single;
   u, v: TPointF;
-  idxOrig, idxX,idxY,idxXNeg,idxYNeg: Integer;
+  idx,idxOrig, idxX,idxY,idxXNeg,idxYNeg: Integer;
 begin
   u := FXAxis - FOrigin;
   v := FYAxis - FOrigin;
@@ -767,10 +850,14 @@ begin
   d := GetCornerPositition;
   if d <> 0 then
   begin
-    AEditor.AddPoint(FOrigin + (u+v)*d, @OnMoveXYCorner, false);
-    AEditor.AddPoint(FOrigin + (-u+v)*d, @OnMoveXNegYCorner, false);
-    AEditor.AddPoint(FOrigin + (u-v)*d, @OnMoveXYNegCorner, false);
-    AEditor.AddPoint(FOrigin + (-u-v)*d, @OnMoveXNegYNegCorner, false);
+    idx := AEditor.AddPoint(FOrigin + (u+v)*d, @OnMoveXYCorner, false);
+    AEditor.AddPointAlternateMove(idx, @OnMoveXYCornerAlt);
+    idx := AEditor.AddPoint(FOrigin + (-u+v)*d, @OnMoveXNegYCorner, false);
+    AEditor.AddPointAlternateMove(idx, @OnMoveXNegYCornerAlt);
+    idx := AEditor.AddPoint(FOrigin + (u-v)*d, @OnMoveXYNegCorner, false);
+    AEditor.AddPointAlternateMove(idx, @OnMoveXYNegCornerAlt);
+    idx := AEditor.AddPoint(FOrigin + (-u-v)*d, @OnMoveXNegYNegCorner, false);
+    AEditor.AddPointAlternateMove(idx, @OnMoveXNegYNegCornerAlt);
   end;
   if ShowArrows then
   begin
@@ -785,6 +872,10 @@ begin
     idxXNeg := AEditor.AddPoint(FOrigin - u, @OnMoveXAxisNeg);
     idxYNeg := AEditor.AddPoint(FOrigin - v, @OnMoveYAxisNeg);
   end;
+  AEditor.AddPointAlternateMove(idxX, @OnMoveXAxisAlt);
+  AEditor.AddPointAlternateMove(idxY, @OnMoveYAxisAlt);
+  AEditor.AddPointAlternateMove(idxXNeg, @OnMoveXAxisNegAlt);
+  AEditor.AddPointAlternateMove(idxYNeg, @OnMoveYAxisNegAlt);
   idxOrig := AEditor.AddPoint(FOrigin, @OnMoveOrigin, true);
   if ShowArrows then
   begin
@@ -1004,6 +1095,20 @@ begin
     result := false;
 end;
 
+function TRectShape.PointInShape(APoint: TPointF; ARadius: single): boolean;
+var
+  pts: ArrayOfTPointF;
+  box: TAffineBox;
+begin
+  if PenVisible or BackVisible then
+  begin
+    box := GetAffineBox(AffineMatrixIdentity, true);
+    pts := ComputeStrokeEnvelope(box.AsPolygon, true, ARadius*2);
+    result:= IsPointInPolygon(pts, APoint, true);
+  end
+  else result := false;
+end;
+
 class function TRectShape.StorageClassName: RawByteString;
 begin
   result := 'rect';
@@ -1236,6 +1341,19 @@ begin
     result := false;
 end;
 
+function TEllipseShape.PointInShape(APoint: TPointF; ARadius: single): boolean;
+var
+  pts: ArrayOfTPointF;
+begin
+  if PenVisible or BackVisible then
+  begin
+    pts := ComputeEllipse(FOrigin, FXAxis, FYAxis);
+    pts := ComputeStrokeEnvelope(pts, true, ARadius*2);
+    result:= IsPointInPolygon(pts, APoint, true);
+  end else
+    result := false;
+end;
+
 function TEllipseShape.GetIsSlow(const AMatrix: TAffineMatrix): boolean;
 var
   ab: TAffineBox;
@@ -1310,6 +1428,21 @@ begin
   result := not BackFill.IsFullyTransparent;
 end;
 
+function TPhongShape.GetEnvelope: ArrayOfTPointF;
+var
+  box: TAffineBox;
+begin
+  case ShapeKind of
+    pskHalfSphere, pskConeTop: result := ComputeEllipse(FOrigin, FXAxis, FYAxis);
+    pskConeSide: result := PointsF([FOrigin - (FYAxis-FOrigin), FYAxis + (FXAxis-FOrigin), FYAxis - (FXAxis-FOrigin)]);
+  else
+    begin
+      box := GetAffineBox(AffineMatrixIdentity, true);
+      result := box.AsPolygon;
+    end;
+  end;
+end;
+
 function TPhongShape.AllowShearTransform: boolean;
 begin
   Result:= false;
@@ -1604,24 +1737,23 @@ end;
 
 function TPhongShape.PointInShape(APoint: TPointF): boolean;
 var
-  box: TAffineBox;
   pts: ArrayOfTPointF;
 begin
   if not BackVisible then exit(false);
-  if ShapeKind in [pskHalfSphere, pskConeTop] then
-  begin
-    pts := ComputeEllipse(FOrigin, FXAxis, FYAxis);
-    result := IsPointInPolygon(pts, APoint, true);
-  end else
-  if ShapeKind = pskConeSide then
-  begin
-    pts:= PointsF([FOrigin - (FYAxis-FOrigin), FYAxis + (FXAxis-FOrigin), FYAxis - (FXAxis-FOrigin)]);
-    result := IsPointInPolygon(pts, APoint, true);
-  end else
+  pts := GetEnvelope;
+  result := IsPointInPolygon(pts, APoint, true);
+end;
+
+function TPhongShape.PointInShape(APoint: TPointF; ARadius: single): boolean;
+var
+  pts: ArrayOfTPointF;
+begin
+  if BackVisible then
   begin
-    box := GetAffineBox(AffineMatrixIdentity, true);
-    result:= box.Contains(APoint);
-  end;
+    pts := ComputeStrokeEnvelope(GetEnvelope, true, ARadius*2);
+    result:= IsPointInPolygon(pts, APoint, true);
+  end
+    else result := false;
 end;
 
 function TPhongShape.GetIsSlow(const AMatrix: TAffineMatrix): boolean;
@@ -1633,6 +1765,11 @@ begin
   result := ab.Surface > 320*240;
 end;
 
+function TPhongShape.GetGenericCost: integer;
+begin
+  Result:= 10;
+end;
+
 procedure TPhongShape.Transform(const AMatrix: TAffineMatrix);
 begin
   BeginUpdate(TPhongShapeDiff);

+ 13 - 1
lazpaintcontrols/lcvectortextshapes.pas

@@ -151,8 +151,10 @@ type
     procedure ConfigureCustomEditor(AEditor: TBGRAOriginalEditor); override;
     procedure Render(ADest: TBGRABitmap; ARenderOffset: TPoint; AMatrix: TAffineMatrix; ADraft: boolean); override;
     function GetRenderBounds({%H-}ADestRect: TRect; AMatrix: TAffineMatrix; AOptions: TRenderBoundsOptions = []): TRectF; override;
-    function PointInShape(APoint: TPointF): boolean; override;
+    function PointInShape(APoint: TPointF): boolean; overload; override;
+    function PointInShape(APoint: TPointF; ARadius: single): boolean; overload; override;
     function GetIsSlow(const {%H-}AMatrix: TAffineMatrix): boolean; 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 MouseDown({%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;
@@ -1467,11 +1469,21 @@ begin
   result := GetAffineBox(AffineMatrixIdentity,true).Contains(APoint);
 end;
 
+function TTextShape.PointInShape(APoint: TPointF; ARadius: single): boolean;
+begin
+  result := false;
+end;
+
 function TTextShape.GetIsSlow(const AMatrix: TAffineMatrix): boolean;
 begin
   Result:= true;
 end;
 
+function TTextShape.GetGenericCost: integer;
+begin
+  Result:= 10;
+end;
+
 procedure TTextShape.MouseMove(Shift: TShiftState; X, Y: single;
   var ACursor: TOriginalEditorCursor; var AHandled: boolean);
 begin

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません