summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrej Shadura <andrew.shadura@collabora.co.uk>2020-12-01 14:34:07 +0100
committerAndrej Shadura <andrew.shadura@collabora.co.uk>2020-12-01 14:34:07 +0100
commitab4336efe38a57d37ce059c3f777230c1f10e576 (patch)
tree11e13d8cb6513b790461febf41c0f0a5b20f2ebd
parent0a92d4161d504a4b8e411e933312318cd16fe7f9 (diff)
parentbd1948c57ae2a2f678de0a06d33702f9ecf05ef3 (diff)
Update upstream source from tag 'upstream/0.6.4'
Update to upstream version '0.6.4' with Debian dir 1c1fb0509970eb1f6418ded92340271779010e72
-rw-r--r--.github/ISSUE_TEMPLATE/bug_report.md5
-rw-r--r--.github/ISSUE_TEMPLATE/feature_request.md23
-rw-r--r--.github/ISSUE_TEMPLATE/improvement.md35
-rw-r--r--.github/ISSUE_TEMPLATE/other_issue.md2
-rw-r--r--.github/PULL_REQUEST_TEMPLATE/other.md7
-rw-r--r--.github/PULL_REQUEST_TEMPLATE/translation.md61
-rw-r--r--.gitignore1
-rw-r--r--CONTRIBUTING.md366
-rw-r--r--README.md107
-rwxr-xr-xbuild-aux/meson/postinstall.py7
-rw-r--r--class_diagram.diabin8907 -> 0 bytes
-rw-r--r--com.github.maoschanz.drawing.json10
-rw-r--r--data/com.github.maoschanz.drawing.appdata.xml.in115
-rw-r--r--data/com.github.maoschanz.drawing.desktop.in2
-rw-r--r--data/com.github.maoschanz.drawing.gschema.xml30
-rw-r--r--data/meson.build15
-rwxr-xr-xdeb_package.sh22
-rw-r--r--diagrams/README.md129
-rw-r--r--diagrams/bottombar-class-diagram.diabin0 -> 2365 bytes
-rw-r--r--diagrams/general-class-diagram.diabin0 -> 6149 bytes
-rw-r--r--diagrams/tools-class-diagram.diabin0 -> 4998 bytes
-rw-r--r--docs/example.css74
-rw-r--r--docs/gallery.html103
-rw-r--r--docs/index.html264
-rw-r--r--docs/screenshots/0.2/elementary.png (renamed from docs/screenshots/elementary.png)bin34617 -> 34617 bytes
-rw-r--r--docs/screenshots/0.4/cinnamon.png (renamed from docs/screenshots/cinnamon.png)bin298157 -> 298157 bytes
-rw-r--r--docs/screenshots/0.4/cinnamon_preferences.png (renamed from docs/screenshots/cinnamon_preferences.png)bin184586 -> 184586 bytes
-rw-r--r--docs/screenshots/0.4/elementary_labels.png (renamed from docs/screenshots/elementary_labels.png)bin462692 -> 462692 bytes
-rw-r--r--docs/screenshots/0.4/gnome_arc.png (renamed from docs/screenshots/gnome_arc.png)bin105759 -> 105759 bytes
-rw-r--r--docs/screenshots/0.4/gnome_colors.png (renamed from docs/screenshots/gnome_colors.png)bin182185 -> 182185 bytes
-rw-r--r--docs/screenshots/0.4/gnome_menu.png (renamed from docs/screenshots/gnome_menu.png)bin319962 -> 319962 bytes
-rw-r--r--docs/screenshots/0.4/gnome_new.png (renamed from docs/screenshots/gnome_new.png)bin32075 -> 32075 bytes
-rw-r--r--docs/screenshots/0.4/gnome_saturate.png (renamed from docs/screenshots/gnome_saturate.png)bin209369 -> 209369 bytes
-rw-r--r--docs/screenshots/0.4/gnome_selection.png (renamed from docs/screenshots/gnome_selection.png)bin236895 -> 236895 bytes
-rw-r--r--docs/screenshots/0.4/gnome_selection1.png (renamed from docs/screenshots/gnome_selection1.png)bin152909 -> 152909 bytes
-rw-r--r--docs/screenshots/0.4/gnome_text.png (renamed from docs/screenshots/gnome_text.png)bin382396 -> 382396 bytes
-rw-r--r--docs/screenshots/0.4/gnome_tools_preview.png (renamed from docs/screenshots/gnome_tools_preview.png)bin60091 -> 60091 bytes
-rw-r--r--docs/screenshots/0.4/gnome_zoom_selection.png (renamed from docs/screenshots/gnome_zoom_selection.png)bin263869 -> 263869 bytes
-rw-r--r--docs/screenshots/0.4/librem_menu.png (renamed from docs/screenshots/librem_menu.png)bin37030 -> 37030 bytes
-rw-r--r--docs/screenshots/0.4/librem_options.png (renamed from docs/screenshots/librem_options.png)bin295122 -> 295122 bytes
-rw-r--r--docs/screenshots/0.4/mate_scale.png (renamed from docs/screenshots/mate_scale.png)bin240484 -> 240484 bytes
-rw-r--r--docs/screenshots/0.6/cinnamon_scale.pngbin0 -> 492154 bytes
-rw-r--r--docs/screenshots/0.6/elementary_save_as.pngbin0 -> 311607 bytes
-rw-r--r--docs/screenshots/0.6/gnome_menu.pngbin0 -> 328919 bytes
-rw-r--r--docs/screenshots/0.6/gnome_new.pngbin0 -> 158836 bytes
-rw-r--r--docs/screenshots/0.6/gnome_selection.pngbin0 -> 68218 bytes
-rw-r--r--docs/screenshots/0.6/gnome_tools_preview.pngbin0 -> 89268 bytes
-rw-r--r--docs/screenshots/0.6/librem_menu.pngbin0 -> 156048 bytes
-rw-r--r--docs/screenshots/0.6/plasma_global.pngbin0 -> 105487 bytes
-rw-r--r--help/C/figures/screenshot_arc.pngbin51469 -> 0 bytes
-rw-r--r--help/C/figures/screenshot_arrow.pngbin0 -> 87820 bytes
-rw-r--r--help/C/figures/screenshot_color_editor.pngbin0 -> 28607 bytes
-rw-r--r--help/C/figures/screenshot_color_palette.pngbin0 -> 18234 bytes
-rw-r--r--help/C/figures/screenshot_filters.pngbin0 -> 368434 bytes
-rw-r--r--help/C/figures/screenshot_hsl.pngbin0 -> 387665 bytes
-rw-r--r--help/C/figures/screenshot_menu.pngbin345244 -> 328976 bytes
-rw-r--r--help/C/figures/screenshot_prefs_images.pngbin46181 -> 44758 bytes
-rw-r--r--help/C/figures/screenshot_prefs_tools.pngbin26642 -> 29112 bytes
-rw-r--r--help/C/figures/screenshot_saturate.pngbin152299 -> 0 bytes
-rw-r--r--help/C/figures/screenshot_scale.pngbin0 -> 295707 bytes
-rw-r--r--help/C/figures/screenshot_selection.pngbin288687 -> 68265 bytes
-rw-r--r--help/C/figures/screenshot_text.pngbin0 -> 169608 bytes
-rw-r--r--help/C/figures/screenshot_zoom.pngbin0 -> 442247 bytes
-rw-r--r--help/C/index.page8
-rw-r--r--help/C/legal.xml1
-rw-r--r--help/C/main_features.page76
-rw-r--r--help/C/preferences.page110
-rw-r--r--help/C/tools_canvas.page92
-rw-r--r--help/C/tools_classic.page163
-rw-r--r--help/C/tools_selection.page29
-rw-r--r--help/C/tools_transform.page111
-rw-r--r--help/meson.build48
-rw-r--r--meson.build20
-rw-r--r--po/LINGUAS5
-rw-r--r--po/POTFILES46
-rw-r--r--po/cs.po2025
-rw-r--r--po/da.po1008
-rw-r--r--po/de_DE.po999
-rw-r--r--po/drawing.pot872
-rw-r--r--po/es.po1197
-rw-r--r--po/eu.po2082
-rw-r--r--po/fi.po991
-rw-r--r--po/fr.po1007
-rw-r--r--po/he.po984
-rw-r--r--po/hr.po997
-rw-r--r--po/hu.po999
-rw-r--r--po/id.po2031
-rw-r--r--po/it.po1040
-rw-r--r--po/meson.build2
-rw-r--r--po/nl.po1014
-rw-r--r--po/pl.po995
-rw-r--r--po/pt_BR.po1283
-rw-r--r--po/ru.po976
-rw-r--r--po/sv.po974
-rw-r--r--po/tr.po1005
-rw-r--r--po/zh_CN.po2066
-rw-r--r--po/zh_TW.po2059
-rw-r--r--src/deco_manager.py39
-rw-r--r--src/drawing.gresource.xml21
-rw-r--r--src/gi_composites.py265
-rw-r--r--src/history_manager.py175
-rw-r--r--src/image.py396
-rw-r--r--src/main.py118
-rw-r--r--src/meson.build28
-rw-r--r--src/minimap.py77
-rw-r--r--src/new_image_dialog.py4
-rw-r--r--src/options_manager.py23
-rw-r--r--src/optionsbars/abstract_optionsbar.py2
-rw-r--r--src/optionsbars/classic/optionsbar-color-popover.ui13
-rw-r--r--src/optionsbars/classic/optionsbar_classic.py38
-rw-r--r--src/optionsbars/classic/optionsbar_color_popover.py47
-rw-r--r--src/optionsbars/selection/optionsbar-selection.ui1
-rw-r--r--src/optionsbars/transform/optionsbar-crop.ui (renamed from src/optionsbars/canvas/optionsbar-crop.ui)63
-rw-r--r--src/optionsbars/transform/optionsbar-filters.ui (renamed from src/optionsbars/canvas/optionsbar-filters.ui)6
-rw-r--r--src/optionsbars/transform/optionsbar-rotate.ui (renamed from src/optionsbars/canvas/optionsbar-rotate.ui)2
-rw-r--r--src/optionsbars/transform/optionsbar-scale.ui (renamed from src/optionsbars/canvas/optionsbar-scale.ui)9
-rw-r--r--src/optionsbars/transform/optionsbar-skew.ui (renamed from src/optionsbars/canvas/optionsbar-skew.ui)2
-rw-r--r--src/optionsbars/transform/optionsbar_crop.py (renamed from src/optionsbars/canvas/optionsbar_crop.py)12
-rw-r--r--src/optionsbars/transform/optionsbar_filters.py (renamed from src/optionsbars/canvas/optionsbar_filters.py)2
-rw-r--r--src/optionsbars/transform/optionsbar_rotate.py (renamed from src/optionsbars/canvas/optionsbar_rotate.py)2
-rw-r--r--src/optionsbars/transform/optionsbar_scale.py (renamed from src/optionsbars/canvas/optionsbar_scale.py)2
-rw-r--r--src/optionsbars/transform/optionsbar_skew.py (renamed from src/optionsbars/canvas/optionsbar_skew.py)2
-rw-r--r--src/preferences.py108
-rw-r--r--src/properties.py5
-rw-r--r--src/saving_manager.py262
-rw-r--r--src/selection_manager.py89
-rw-r--r--src/tools/abstract_tool.py60
-rw-r--r--src/tools/classic_tools/abstract_classic_tool.py35
-rw-r--r--src/tools/classic_tools/tool_arc.py50
-rw-r--r--src/tools/classic_tools/tool_eraser.py2
-rw-r--r--src/tools/classic_tools/tool_experiment.py32
-rw-r--r--src/tools/classic_tools/tool_highlight.py45
-rw-r--r--src/tools/classic_tools/tool_line.py41
-rw-r--r--src/tools/classic_tools/tool_paint.py136
-rw-r--r--src/tools/classic_tools/tool_pencil.py22
-rw-r--r--src/tools/classic_tools/tool_picker.py2
-rw-r--r--src/tools/classic_tools/tool_points.py166
-rw-r--r--src/tools/classic_tools/tool_shape.py93
-rw-r--r--src/tools/classic_tools/tool_text.py152
-rw-r--r--src/tools/icons/dash-alt-symbolic.svg6
-rw-r--r--src/tools/icons/dash-dots-symbolic.svg6
-rw-r--r--src/tools/icons/dash-long-symbolic.svg6
-rw-r--r--src/tools/icons/dash-none-symbolic.svg6
-rw-r--r--src/tools/icons/dash-regular-symbolic.svg6
-rw-r--r--src/tools/icons/tool-line-symbolic.svg3
-rw-r--r--src/tools/icons/tool-points-symbolic.svg19
-rw-r--r--src/tools/icons/tool-rotate-symbolic.svg7
-rw-r--r--src/tools/selection_tools/abstract_select.py123
-rw-r--r--src/tools/selection_tools/select_color.py11
-rw-r--r--src/tools/selection_tools/select_free.py16
-rw-r--r--src/tools/selection_tools/select_rect.py5
-rw-r--r--src/tools/transform_tools/abstract_transform_tool.py (renamed from src/tools/canvas_tools/abstract_canvas_tool.py)43
-rw-r--r--src/tools/transform_tools/tool_crop.py (renamed from src/tools/canvas_tools/tool_crop.py)61
-rw-r--r--src/tools/transform_tools/tool_filters.py (renamed from src/tools/canvas_tools/tool_filters.py)18
-rw-r--r--src/tools/transform_tools/tool_rotate.py (renamed from src/tools/canvas_tools/tool_rotate.py)25
-rw-r--r--src/tools/transform_tools/tool_scale.py (renamed from src/tools/canvas_tools/tool_scale.py)20
-rw-r--r--src/tools/transform_tools/tool_skew.py (renamed from src/tools/canvas_tools/tool_skew.py)3
-rw-r--r--src/tools/ui/selection.ui17
-rw-r--r--src/tools/ui/tool-arc.ui53
-rw-r--r--src/tools/ui/tool-crop.ui20
-rw-r--r--src/tools/ui/tool-filters.ui4
-rw-r--r--src/tools/ui/tool-highlight.ui30
-rw-r--r--src/tools/ui/tool-line.ui53
-rw-r--r--src/tools/ui/tool-paint.ui25
-rw-r--r--src/tools/ui/tool-pencil.ui42
-rw-r--r--src/tools/ui/tool-points.ui59
-rw-r--r--src/tools/ui/tool-rotate.ui2
-rw-r--r--src/tools/ui/tool-scale.ui2
-rw-r--r--src/tools/ui/tool-shape.ui88
-rw-r--r--src/tools/ui/tool-skew.ui2
-rw-r--r--src/tools/ui/tool-text.ui70
-rw-r--r--src/tools/utilities_blur.py50
-rw-r--r--src/tools/utilities_overlay.py3
-rw-r--r--src/tools/utilities_paths.py91
-rw-r--r--src/ui/app-menus.ui69
-rw-r--r--src/ui/headerbar-eos.ui126
-rw-r--r--src/ui/image.ui6
-rw-r--r--src/ui/minimap.ui4
-rw-r--r--src/ui/new-image-dialog.ui2
-rw-r--r--src/ui/selection-manager.ui12
-rw-r--r--src/ui/shortcuts.ui292
-rw-r--r--src/ui/toolbar-symbolic.ui30
-rw-r--r--src/ui/toolbar.ui30
-rw-r--r--src/ui/win-menus.ui63
-rw-r--r--src/ui/window.ui15
-rw-r--r--src/utilities.py137
-rw-r--r--src/window.py459
187 files changed, 26724 insertions, 6858 deletions
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 5bf00261..694e4624 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -7,13 +7,10 @@ assignees: ''
---
-<!-- IF YOU FEEL THAT THIS TEMPLATE DOESN'T FIT YOUR ISSUE, IT PROBABLY MEANS
-YOU'RE USING THE WRONG TEMPLATE -->
-
## Description
<!-- Describe the bug: what doesn't work? -->
-<!-- If applicable, add screenshots to help explain your problem. -->
+<!-- If it's useful, add screenshots to help explain your problem. -->
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index 13aee94a..53704f0e 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -2,35 +2,34 @@
name: Feature request
about: Suggest a new feature for this app
title: ''
-labels: enhancement
+labels: feature request
assignees: ''
---
-## Use case
+## Requested feature
-<!-- Why do you think this feature should be in Drawing? You can describe how
-you would use it, or in what situation it may help the users. -->
+<!-- A clear and concise description of the feature you suggest. -->
-## Suggested solution
+### Possible drawbacks
-<!-- A clear and concise description of what you suggest to fix this issue.
-It can be (for example) a new tool, a new behavior for an existing tool, a new
-options, a new action to add the menus, … -->
+<!-- Could it introduce new problems? -->
-### Possible drawbacks
+### Possible alternatives
-<!-- Does your solution entirely fix the issue? Could it introduce new problems? -->
+<!-- Describe alternatives solutions you've considered, if any. -->
-### Possible alternatives
+## Use case
+
+<!-- Why do you think this feature should be in Drawing? You can describe how
+you would use it, or in what situation it may help the users. -->
-<!-- Describe alternatives solutions you've considered, if any. -->
diff --git a/.github/ISSUE_TEMPLATE/improvement.md b/.github/ISSUE_TEMPLATE/improvement.md
new file mode 100644
index 00000000..c0919d2b
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/improvement.md
@@ -0,0 +1,35 @@
+---
+name: Feature improvement
+about: Suggest a way to improve an existing feature
+title: ''
+labels: enhancement
+assignees: ''
+
+---
+
+## Use case
+
+<!-- What feature do you want to improve? What's the issue with the current
+situation? -->
+
+
+
+## Suggested solution
+
+<!-- A clear and concise description of what you suggest to fix this issue. -->
+
+
+
+### Possible drawbacks
+
+<!-- Does your solution entirely fix the issue? Could it introduce new problems? -->
+
+
+
+### Possible alternatives
+
+<!-- Describe alternatives solutions you've considered, if any. -->
+
+
+
+
diff --git a/.github/ISSUE_TEMPLATE/other_issue.md b/.github/ISSUE_TEMPLATE/other_issue.md
index 5cdf4340..f2a699b9 100644
--- a/.github/ISSUE_TEMPLATE/other_issue.md
+++ b/.github/ISSUE_TEMPLATE/other_issue.md
@@ -8,7 +8,7 @@ assignees: ''
---
<!-- Describe the issue, in english or in french -->
-<!-- If applicable, add screenshots to help explain your problem. -->
+<!-- If it's useful, add screenshots to help explain your problem. -->
diff --git a/.github/PULL_REQUEST_TEMPLATE/other.md b/.github/PULL_REQUEST_TEMPLATE/other.md
new file mode 100644
index 00000000..2e7fa09b
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE/other.md
@@ -0,0 +1,7 @@
+
+
+
+
+<!-- If your contribution fixes an issue, please mention it -->
+
+
diff --git a/.github/PULL_REQUEST_TEMPLATE/translation.md b/.github/PULL_REQUEST_TEMPLATE/translation.md
new file mode 100644
index 00000000..d1b82a70
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE/translation.md
@@ -0,0 +1,61 @@
+
+<!-- This is the template for adding or updating a translation -->
+
+
+
+
+
+
+----
+
+Before opening the merge request, you should check the following points (delete
+the text if everything's fine):
+
+## If you added a new language
+
+* The id of your language has been added to the `po/LINGUAS` file
+
+## Crediting
+
+* Is "translator-credits" translated by the complete list of translators
+names (optionally with email address)? (one translator per line)
+* Proper names should stay untranslated
+* You can credit yourself in the README (or, if it's already there, you can
+update the translation's completion percentage)
+
+## Keywords
+
+* In the list of keywords used to find the app ("Paint;Sketch;Pencil;"), you
+can translate all the keywords and even add a few ones, but "Paint" has to be
+present in english so people will find the app when they search for a clone of
+MS Paint in their appstore.
+* In the list of keywords used to find the app ("Paint;Sketch;Pencil;"), there
+has to be a semicolon after each keyword (including the last one!)
+
+## Special formats
+
+* When a string includes "%s", it means there will be a replacement of this
+"%s" in the code. Comments are usually included to provide a context. The
+replacement is often a file name, or a numerical value. "%%" is the notation for
+the symbol "%" itself.
+
+Despite not being shown by default, a menubar exists in this app. When it is
+visible, its menus are accessible using keyboard accelerators: `Alt+f` to open
+the "_File" menu, `Alt+e` to open the "_Edit" menu, etc.
+When you translate the labels of these menus, the "_" character should never be
+twice before the same character.
+
+<!-- Example in french:
+
+if "_View" and "_Help" were translated as "_Affichage" and "_Aide", `Alt+a`
+would open… nothing at all! The underscore doesn't have to be always before the
+first letter: "_Affichage" and "A_ide" are a correct translation.
+
+If your language doesn't use the roman alphabet, you can translate "_File" as
+"[your translation of the word File] (_F)"
+-->
+
+* Underscore accelerators are available in your translation
+* They're never twice on the same key
+
+
diff --git a/.gitignore b/.gitignore
index fb56ce32..705856b9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
/.flatpak*
*/_*
/*.deb
+
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 68735e41..b2d2e151 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -13,9 +13,7 @@ How to contribute to Drawing
# Bug reports
-Usability and design issues concerning existing features are bugs.
-
-- If you can, try to **check if it hasn't already been fixed but not released**.
+- If you can, try to **check if the bug has already been fixed but not released**.
- Report it with informations required by the adequate issue template.
- If it's meaningful, try to include screenshots.
@@ -23,9 +21,7 @@ Usability and design issues concerning existing features are bugs.
# Feature requests
-Usability and design issues concerning existing features are **not** new features.
-
-- If you can, try to **check if it hasn't already been added but not released**.
+- If you can, try to **check if the feature has already been added but not released**.
- Report it with informations required by the adequate issue template.
- In the report, explain **what** it does, **not how** it does it.
@@ -33,32 +29,78 @@ Usability and design issues concerning existing features are **not** new feature
# Translating
+Notice that this procedure will translate the unstable, unreleased version
+currently developed on the `master` branch.
+
+<!-- If you want to entirely translate older versions, restart this -->
+<!-- procedure but run `git checkout 0.6` just after having cloned the repo, -->
+<!-- and at the end, open the merge request to `0.6` too. -->
+
+>You don't have to update your translation each time i update the files!
+
+>Doing it just before the planned date of a major release should be enough;
+>there are around two major releases per year, and 1 minor release per month.
+
+>Their dates are written in `debian/changelog`.
+
+### Get the .po file
+
- Fork the repo and clone your fork on your disk (see [installation instructions here](#with-gnome-builder-and-flatpak))
- **If the translation exists but is incomplete:**
- - Find the file corresponding to you language in the the `po` directory
+ - Find the file corresponding to your language in the the `po` directory.
- **If the translation doesn't exist at all:**
- Add your language to `po/LINGUAS`
- - Build the app once, and then run `ninja -C _build drawing-update-po` at the root of the project. It will produce a `.po` file for your language in the `po` directory.
+ - Run `msginit -i po/drawing.pot --locale=xx -o po/xx.po`, where `xx` should
+ be replaced by the ISO code of your language. This command will produce a
+ `.po` file for your language in the `po` directory.
+
+### Translate
Use a text editor or [an adequate app](https://flathub.org/apps/details/org.gnome.Gtranslator)
-to translate the strings of this `.po` file. There are comments in the file to
-give context helping you to translate some strings, please take them into
-account.
+to translate the strings of this `.po` file.
->Example of something translators can't guess so it's written in the comments:
+Concerning the "original version" in english: i'm **not** a native english
+speaker, so there might be mistakes. If you find incorrect english labels,
+please report an issue about them.
+
+##### Comments
+
+There are comments in the file to give context helping you to translate some
+strings, please take them into account.
+
+Example of something translators can't guess so it's written in the comments:
since this app is a clone of MS Paint, `Paint;` (untranslated) has to be in the
list of keywords for finding the app in searchable menus or software centers.
-- **(optional)** If you want to test your translation:
- - The flatpak SDK isn't able to run a translated version of the app, so export it as a `.flatpak` file and install it with `flatpak install path/to/that/file`.
- - Or (it's harder) [install it with `meson`](#with-git-and-meson).
-- Run `git add . && git commit && git push`
-- Submit a "pull request"/"merge request"
+##### Accelerators
+
+When words have an underscore in them, it defines a keyboard accelerator working
+with the <kbd>Alt</kbd> key: for example, if an english-speaking user uses a
+layout with a menu-bar, pressing <kbd>Alt</kbd>+<kbd>F</kbd> will open the
+`_File` menu.
+
+In translations, the underscore can be on another character of the word, but
+translators should take into account that 2 labels activatable at the same time
+can't share the same accelerator.
+
+Example: `Édi_tion` and `Ou_tils` can't work, but `É_dition` and `Ou_tils` can
+work.
+
+Also, the character should be accessible easily from the keyboard layouts of
+your language.
+
+### Testing your translation (optional)
-Notice that it will translate the unstable, unreleased version currently
-developed on the `master` branch, while users may use versions with slightly
-different labels you may not have translated. If you want to entirely translate
-older versions, restart but run `git checkout 0.4` just after the step 1.
+If you want to test your translation:
+
+- The flatpak SDK isn't able to run a translated version of the app, so
+export it as a `.flatpak` file and install it with `flatpak install path/to/that/file`.
+- Or (it's harder) [install it with `meson`](#with-git-and-meson).
+
+### Submitting your translation
+
+- Run `git add po && git commit && git push`
+- Submit a "pull request"/"merge request"
----
@@ -67,33 +109,81 @@ older versions, restart but run `git checkout 0.4` just after the step 1.
### General guidelines
- It's better if an issue is reported first
-- Easy issues are tagged "**good first issue**"
+- Easy issues are tagged "[good first issue](https://github.com/maoschanz/drawing/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)"
- Tell on the issue that you'll try to fix it
-**If you find some bullshit in the code, or don't understand it, feel free to
+**If you find anything weird in the code, or don't understand it, feel free to
ask me about it.**
To set up a development environment, see [here](#install-from-source-code).
-### Syntax
+### Settings
+
+The settings are managed by the `Gio.Settings` abstraction, which will probably
+corresponds to the `dconf` database once the app is installed as a native
+package.
+
+With flatpak however, which includes the recommended development setup, the
+settings are stored in a key-value file, which can be found (and edited) at
+`~/.var/app/com.github.maoschanz.drawing/config/glib-2.0/settings/keyfile`.
+
+### Syntax and comments
-- Use tabs in `.py` files.
- Use 2 spaces in `.ui` or `.xml` files.
-- Try to not write lines longer than 80 characters.
-- In the python code, use double quotes for strings the user might see, and
-single quotes otherwise (paths, constants, enumerations, dict keys, …)
- Good comments explain *why* the code does what it does. If a comment explains
-*what* it does, the comment is useless, or the code is bad.
+*what* it does, the comment is useless, or the code is bad. (useless comments
+are fine, don't worry)
+- Upon translatable strings, comments explaining the context to translators are
+welcome.
-I like `GAction`s and i've added wrapper methods for using them, try to use that
-instead of directly connecting buttons/menu-items to a method.
+**In python code only:**
+
+- Use actual tabs (4 columns wide).
+- Try to not write lines longer than 80 characters.
+- Use double quotes for strings the user might see, and single quotes otherwise
+(paths, constants, enumerations, dict keys, …)
+
+### Structure of the code
+
+The `data` directory contains data useful for installation but useless to the
+execution (app icons, desktop launcher, settings schemas, appdata, …).
+
+According to some people, this directory should contain the UI resources, but
+here no: resources used by the app (`.ui` files, in-app icons, …) are in `src`,
+along with the python code.
+
+>See [here](./diagrams/) for explanations about the architecture and class
+diagrams
### UI design
-People sometimes like to design their apps in Glade, while here the main `.ui`
-files are mere templates filled algorithmically according to the user's
-settings, you kinda have to run the app to be sure of how your changes to it
-actually look like.
+If you want to change something to the user interface:
+
+##### About Glade
+
+People sometimes like to design their apps in Glade, or in the "GUI designer"
+extension integrated in GNOME Builder.
+
+But in Drawing, the UI is modular, and the `.ui` files are mere templates filled
+algorithmically according to the user's actions and settings. So you have to:
+
+- edit them with a text editor, since the point of a given file is hard to
+understand by just looking at the Glade preview;
+- run the app to be sure of how your changes to these files actually look like
+once filled with the accurate widgets.
+
+If you **ever** even try to use Glade or a similar software, the auto-generated
+code will re-order all the lines, and add dozens of useless properties. Such a
+commit diff would be unreadable.
+
+Glade also removes all comments, which are essential to the understanding of the
+code, to the generation of the translation files, or which may be disabled code
+for future features. It also removes some of the empty containers meant to be
+filled by the python code, thus breaking the app.
+
+Please do not use Glade here. Merge requests with such changes will be rejected.
+
+##### Design guidelines
Try to respect [GNOME Human Interface Guidelines](https://developer.gnome.org/hig/stable/)
as much as possible, while making your feature available from the menubar
@@ -102,106 +192,39 @@ as many `GAction`s as possible for testing purposes (and also because searchable
menus still exist).
If you're contributing to an alternative layout ("elementary OS", "Cinnamon", or
-any other), please be sure to not hurt the UX with the GNOME layout (since it's
-the one used on smartphone, be careful it has to stay very resizable).
+any other), please be sure to not hurt the UX of the GNOME layout (since it's
+the one used on smartphone, be careful: it has to stay very resizable).
### Other remarks
-In my opinion, the difficulties with the code can come mainly from 2 points:
+I like `GAction`s and i've added wrapper methods for using them, try to use that
+instead of directly connecting buttons/menu-items to a method.
+
+In my opinion, the difficulties with the code can come mainly from 3 points:
- tools are window-wide, while the operations they produce, which are stored in
the history, are image-wide.
- the interactions with the selection are ridiculously complex and numerous
_(defining, explicit applying, explicit canceling, import, clipboard methods,
-use by other tools (cancelled or confirmed), deletion, implicit applying,
-implicit canceling, …)_ which can easily create small bugs.
-
-----
-
-# Structure of the code
-
-The `data` directory contains data useless to the execution (app icons, desktop
-launcher, settings schemas, appdata, …).
-
-According to some people, it should contain the UI resources, but i don't care:
-resources used by the app (`.ui` files, in-app icons, …) are in `src`, along
-with the python code.
-
-<!-- TODO ![UML diagrams](docs/uml.png) -->
-
-### The application itself
-
-`main.py` defines the application, which has:
-
-- implementations of CLI handling methods
-- some `GioAction`s
-- a preferences window (`preferences.py`)
-- a menubar (hidden with most layouts)
-- an appmenu (for GNOME Shell ≤ 3.30)
-- dialogs (about, shortcuts)
-- several **windows**
-
-`window.py` defines a GtkApplicationWindow:
-
-- some `GioAction`s
-- a "properties" dialog (`properties.py`). It depends on the window despite
-showing image-wide infos.
-- a window's decorations can change quite a lot, which is mostly handled by
-`deco_manager.py`. Three classes are defined in this file:
- - `DrDecoManagerMenubar` just hides or shows the menubar. Most of its
- methods are empty.
- - `DrDecoManagerToolbar` loads a toolbar from an UI file. This class extends
- `DrDecoManagerMenubar`, and will manage a small "hamburger menu" at the end
- of the toolbar if the menubar is hidden.
- - `DrDecoManagerHeaderbar` loads a headerbar from an UI file. This class
- extends `DrDecoManagerMenubar` but the menubar will always stay hidden.
- It handles how widgets are shown or hidden depending on the size of the
- window, and will display various menus depending on the visibility of the
- buttons, to ensure all features are always available.
-- a window has several **tools**
-- a window has several **images**
-- `minimap.py` for the minimap, which shows a thumbnail of the currently opened image.
-- each window has an **options_manager** (`options_manager.py`). It will display
-the correct bottom bar (= the one required by the current **tool**) and manage
-tools' options. All bottom options bars can be found in the sub-directories of
-`src/optionsbars/`, and are specialized from `src/optionsbars/abstract_optionsbar.py`
-
-`image.py` defines an image, which contains:
-
-- an "undo" history and a "redo" history
-- a selection, managed by `selection_manager.py`
-- a `GdkPixbuf.Pixbuf` (as an attribute), named `main_pixbuf`, which corresponds
-to the current state of the edited image.
-
-### The tools
-
-The tools are managed by a bunch of files in the `src/tools` directory.
-
->The relationship between the window and the tools is a
-**[State](https://en.wikipedia.org/wiki/State_pattern)** design pattern.
-
-The active tool's methods are called from the window's (or the current image's)
-code regardless of what tool is active. To achieve that, all tools inherit from
-**abstract** classes defining common methods.
-
-First of all, `src/tools/abstract_tool.py` defines how the tool will be added in
-the UI, provides several wrappers to add options, to access the pixbufs, to add
-an operation to the edition history, etc. Other common features, when they don't
-depend on the image or the tool at all (such as blurring, computing some paths,
-displaying an overlay on the image (for the selection for example)), may be
-provided by one of the `src/tools/utilities_*.py` files.
-
-Then, an other layer of abstract classes is used, depending on the subcategory a
-tool is in:
-
-- the classic tools, draw on the main pixbuf using **`cairo`**
-- the selection tools translates the user's input into operations using the
-image's **selection_manager**. These operations are quite complex, and are
-almost entirely managed in `abstract_select.py`.
-- the "canvas tools" (scale/crop/rotate/filters/…) can be applied to the
-selection pixbuf or the main pixbuf, and will use the image's `temp_pixbuf`
-attribute to store a preview of their changes. These tools have to be
-explicitely applied by the user.
+use by the transformation tools (whose operation can be cancelled or confirmed),
+deletion, implicit applying, implicit canceling, …)_ which can easily create
+small bugs or regressions.
+- the horizontal and vertical scrollings (and their scrollbars) are managed
+"manually" and quite poorly.
+
+These 3 points sometimes can lead to object-oriented spaghetti code.
+
+If you change anything regarding the selection and/or the transformation tools
+(which can edit the selection content), make sure to test various scenarios like
+this one:
+
+1. several images edited in different tabs of the same window;
+2. zoom and/or scroll;
+3. select things, or import/paste things (in both tabs);
+4. edit the selection (in both tabs, don't forget to click "apply" before
+switching to the other tab);
+5. unselect it (in both tabs);
+6. undo/redo.
----
@@ -217,7 +240,8 @@ This app is developed using _GNOME Builder_ and its support for `flatpak`:
- Open _GNOME Builder_
- Click on "Clone a repository…" and use this address: `https://github.com/maoschanz/drawing.git`
- Open it as a project with GNOME Builder
-- Be sure the runtime is installed (if it doesn't suggest it automatically, <kbd>Ctrl</kbd>+<kbd>Return</kbd> → type `update-dependencies`)
+- Be sure the runtime is installed (if it doesn't suggest it automatically,
+<kbd>Ctrl</kbd>+<kbd>Return</kbd> → type `update-dependencies`)
- Click on the _Run_ button
### With `git` and `meson`
@@ -226,25 +250,25 @@ See [here](#dependencies) for the list of dependencies.
Get the code:
-```
+```sh
git clone https://github.com/maoschanz/drawing.git
```
Build the app:
-```
+```sh
cd drawing
meson _build
ninja -C _build
```
Install the app (system-wide):
-```
+```sh
sudo ninja -C _build install
```
(if you know the options to install user-wide, please tell)
The app can then be removed with:
-```
+```sh
cd _build
sudo ninja uninstall
```
@@ -255,7 +279,7 @@ sudo ninja uninstall
<p>
Initial setup of the local flatpak repository:
-```
+```sh
wget https://raw.githubusercontent.com/maoschanz/drawing/master/com.github.maoschanz.drawing.json
flatpak-builder --force-clean _build2/ --repo=_repo com.github.maoschanz.drawing.json
flatpak --user remote-add --no-gpg-verify local-drawing-repo _repo
@@ -263,7 +287,7 @@ flatpak --user install local-drawing-repo com.github.maoschanz.drawing
```
Update:
-```
+```sh
flatpak-builder --force-clean _build2/ --repo=_repo com.github.maoschanz.drawing.json
flatpak update
```
@@ -273,35 +297,79 @@ flatpak update
You can also build a debian package with the script `deb_package.sh`, but you
won't get updates that way, so don't do that. You probably don't have all the
-dependencies to make it work anyway.
+dependencies to make the script work anyway.
----
# Packaging
-### Branches
+### Branches and tags
-The `master` branch is not stable and should not be packaged.
+Stable versions for end-users are **tagged**, and listed in this Github repo's
+"_Releases_" section.
-Stable versions for end-users are tagged, and listed on this Github repo's
-"_Releases_" tab. For now, most of them are on the `0.4` branch.
+```
+ 0.4.1 0.4.2 … 0.4.14 0.6.3 0.6.4
+ _.______.____…____. _.______._
+ 0.2 / ______ 0.6.0 0.6.1 0.6.2 /
+____.____/_________/______\________.______.______.___/____________
+ \____________/
+```
-### Dependencies
+**Please don't package anything aside this tagged code**
+<details><summary>(except if your distro have experimental repos)</summary>
+<p>
-Dependencies to run the app:
+<a href=https://wiki.debian.org/DebianExperimental>How to set up the debian
+experimental repository</a>
-- GObject Introspection (GI) for python3 (on Debian, it's `python3-gi`). A version ≥3.30.0 is required to run the code from the branch `master`. The branch `0.4` should be fine with any version.
-- `cairo` library's GI for python3 (on Debian, it's `python3-gi-cairo`).
-- GTK libraries' GI (on Debian, it's `gir1.2-gtk-3.0`).
+```sh
+sudo apt -t experimental install drawing
+```
-Dependencies to build the app (Debian packages names):
+</p>
+</details>
-- `meson`. The version required by the `meson.build` file at the root of the project can be changed if necessary, but please don't add this change to your commit(s).
-- `appstream-util` (validation of the `.appdata.xml` file)
-- `libglib2.0-dev-bin` (IIRC that one is to compress the `.ui` files and the icons into a `.gresource` file)
+### Dependencies
-----
+(Debian packages names are used here)
+##### Dependencies to run the app
+- GObject Introspection (GI) for python3 (on Debian, it's `python3-gi`).
+- `cairo` library's GI for python3 (on Debian, it's `python3-gi-cairo`).
+- GTK libraries' GI (on Debian, it's `gir1.2-gtk-3.0`).
+Minimal versions of the dependencies:
+
+| | `python3-gi` | `python3-gi-cairo` | `gir1.2-gtk-3.0` |
+|-----------------|--------------|--------------------|------------------|
+| 0.2 | any | any? | 3.22 |
+| --------------- | ------------ | ------------------ | ---------------- |
+| 0.4.1, 0.4.2 | **≥3.30.0** | any? | 3.22 |
+| 0.4.3 to 0.4.13 | any | any? | 3.22 |
+| 0.4.14 | **≥3.32** | any? | 3.22 |
+| 0.4.15 | any | any? | 3.22 |
+| --------------- | ------------ | ------------------ | ---------------- |
+| 0.6.0 to 0.6.1 | **≥3.32.0** | any? | 3.22 |
+| 0.6.2 | **≥3.30.0** | any? | 3.22 |
+| 0.6.3 to 0.6.?? | any | any? | 3.22 |
+| `master`'s HEAD | **≥3.30.0** | any? | 3.22 |
+
+##### Dependencies to build the app
+
+- `meson`. The version of meson required by the `meson.build` file at the root
+of the project can be changed if necessary, but please don't add this change to
+your commit(s).
+- [optional] `appstream-util` (validation of the `.appdata.xml` file)
+- `libglib2.0-dev-bin` (IIRC that one is to compress the `.ui` files and the
+icons into a `.gresource` file)
+
+Aside of this, **since 0.6.0**, the main `meson.build` script will try to check
+if your system does have **the dependencies to run the app**.
+
+The tag 0.6.0 can't be built if `appstream-util` is on the system, the other
+tags should be fine.
+
+----
diff --git a/README.md b/README.md
index 94658c9c..3b06a554 100644
--- a/README.md
+++ b/README.md
@@ -8,14 +8,15 @@ at the GNOME desktop.
PNG, JPEG and BMP files are supported.
Besides GNOME, some more traditional design layouts are available too, as well
-as an [elementaryOS layout](./docs/screenshots/elementary.png). It should also
-be compatible with [the Pinephone and Librem 5 smartphones](./docs/screenshots/librem_options.png).
+as an [elementaryOS layout](./docs/screenshots/0.6/elementary_save_as.png). It
+should also be compatible with the *Pinephone* and *Librem 5*
+[smartphones](./docs/screenshots/0.6/librem_menu.png).
## Screenshots
### Default user interface (for GNOME/Budgie)
-![UI for GNOME and Budgie, here with the main menu opened](./docs/screenshots/gnome_menu.png)
+![UI for GNOME and Budgie, here with the main menu opened](./docs/screenshots/0.6/gnome_menu.png)
[More screenshots](https://maoschanz.github.io/drawing/gallery.html)
@@ -27,91 +28,114 @@ be compatible with [the Pinephone and Librem 5 smartphones](./docs/screenshots/l
>**Recommended**
-You can install it from flathub.org using the instructions on [this page](https://flathub.org/apps/details/com.github.maoschanz.drawing).
+You can install it from flathub.org using the instructions on
+[this page](https://flathub.org/apps/details/com.github.maoschanz.drawing).
+
+[<img alt="" height="100" src="https://flathub.org/assets/badges/flathub-badge-en.png">](https://flathub.org/apps/details/com.github.maoschanz.drawing).
### Other packages available
[![Packaging status](https://repology.org/badge/vertical-allrepos/drawing.svg)](https://repology.org/project/drawing/versions)
-- Ubuntu 18.04, 19.10 and 20.04: [PPA](https://launchpad.net/~cartes/+archive/ubuntu/drawing/)
+- Ubuntu 18.04, 20.04, and 20.10: [PPA](https://launchpad.net/~cartes/+archive/ubuntu/drawing/)
+- [Gentoo package](https://gitlab.com/src_prepare/src_prepare-overlay/-/tree/master/media-gfx/drawing) from an external overlay
- ["Snap" package](https://snapcraft.io/drawing)
### Unstable/nightly version
-[See here](./CONTRIBUTING.md#install-from-source-code)
+[See here](./CONTRIBUTING.md#install-from-source-code) to install and test the
+app from source code.
+
+<!-- It's also possible to use the -->
+<!-- [debian experimental repository](https://wiki.debian.org/DebianExperimental) -->
----
### Available languages
-- Brazilian portuguese (thanks to [Antonio Hauren](https://github.com/haurenburu))
-- Castillan (thanks to [Adolfo Jayme-Barrientos](https://github.com/fitojb) and [Xoan Sampaiño](https://github.com/xoan))
-- Croatian (thanks to [Milo Ivir](https://github.com/milotype))
-- Danish (thanks to [scootergrisen](https://github.com/scootergrisen))
-- Dutch (thanks to [Heimen Stoffels](https://github.com/Vistaus))
-- English
-- Finnish (thanks to [MahtiAnkka](https://github.com/mahtiankka))
-- French
-- German (thanks to [Onno Giesmann](https://github.com/Etamuk))
-- Hebrew (thanks to [moriel5](https://github.com/moriel5) and [Shaked Ashkenazi](https://github.com/shaqash))
-- Hungarian (thanks to [Kálmán „KAMI” Szalai](https://github.com/kami911))
-- Italian (thanks to [Jimmy Scionti](https://github.com/amivaleo) and [Albano Battistella ](https://github.com/albanobattistella))
-- Polish (thanks to [Piotr Komur](https://github.com/pkomur))
-- Russian (thanks to [Artem Polishchuk](https://github.com/tim77))
-- Swedish (thanks to [Åke Engelbrektson](https://github.com/eson57))
-- Turkish (thanks to [Serdar Sağlam](https://github.com/TeknoMobil))
-
-<!-- TODO add completion percentages, since he and ru for example are at ~50% -->
-
If your language is not here, or is incompletely translated, you can
[contribute](./CONTRIBUTING.md#translating) to the translations.
+| code | name | since… | complete*? | main translators |
+|------|--------------|--------|------------|----------------------------------|
+| da | Danish | 0.4.10 | 93% | [scootergrisen](https://github.com/scootergrisen)
+| de_DE | German | 0.4.1 | 91% | [Onno Giesmann](https://github.com/Etamuk)
+| | English | 0.2 | 100% | help welcome ** |
+| es | Castillan | 0.2 | 95% | [Adolfo Jayme-Barrientos](https://github.com/fitojb) and [Xoan Sampaiño](https://github.com/xoan)
+| eu | Basque | 0.4.14 | 95% | [alexgabi](https://github.com/alexgabi)
+| fi | Finnish | 0.4.10 | 88% | [MahtiAnkka](https://github.com/mahtiankka)
+| fr | French | 0.2 | 100% | |
+| he | Hebrew | 0.4.1 | **45%** | [moriel5](https://github.com/moriel5) and [Shaked Ashkenazi](https://github.com/shaqash)
+| hr | Croatian | 0.4.11 | 91% | [Milo Ivir](https://github.com/milotype)
+| hu | Hungarian | 0.4.10 | **73%** | [Kálmán „KAMI” Szalai](https://github.com/kami911)
+| id | Indonesian | 0.6.3 | 99% | [Ghani Rafif](https://github.com/ekickx)
+| it | Italian | 0.4.1 | 99% | [Jimmy Scionti](https://github.com/amivaleo) and [Albano Battistella ](https://github.com/albanobattistella)
+| nl | Dutch | 0.4.1 | 98% | [Heimen Stoffels](https://github.com/Vistaus)
+| pl | Polish | 0.4.10 | 84% | [Piotr Komur](https://github.com/pkomur)
+| pt_BR | Br. portuguese | 0.4.3 | 95% | [Antonio Hauren](https://github.com/haurenburu) and [ArthurBacci64](https://github.com/ArthurBacci64)
+| ru | Russian | 0.4.1 | **40%** | [Artem Polishchuk](https://github.com/tim77)
+| sv | Swedish | 0.4.11 | 98% | [Åke Engelbrektson](https://github.com/eson57)
+| tr | Turkish | 0.2 | 95% | [Serdar Sağlam](https://github.com/TeknoMobil)
+| zh_CN | Chinese, simpl. | 0.4.14 | 93% | [OverflowCat](https://github.com/OverflowCat)
+| zh_TW | Chinese, tradi. | 0.4.14 | 95% | [pan93412](https://github.com/pan93412), [OverflowCat](https://github.com/OverflowCat), [張修銘](https://github.com/cges30901)
+
+\*Completion percentages correspond to **the next** major version, still in
+development.
+
+\**Concerning the "original version" in english: all the labels are here, but
+i'm **not** a native english speaker, so there might be mistakes. If you find
+incorrect english labels, please report an issue about it.
+
----
-### Tools (0.5.3-unstable)
+### Tools
+
+(last update: **version 0.6.4**)
-(last update: **version 0.5.3-unstable**, this is **NOT** what is provided by the packages)
+*Tools in italic can be disabled.*
#### Classic tools
-(general options: colors, use blur or eraser, size, …)
+General options for these tools: colors, use antialiasing, size, …
-- Pencil (options: dashes, …)
-- Eraser
-- Highlighter
+- Pencil (options: dashes, line shape, …)
+- *Eraser*
+- *Highlighter* (options: highlight on dark background)
- Line (options: arrow, dashes, gradient, …)
- Curve (options: arrow, dashes, …)
-- Insert text (options: font, shadow, font size, …)
-- Shape (options: filling style, gradient, …):
+- Insert text (options: font, shadow/outline, font size, …)
+- *Insert points (options: shape of the points, include a number, …) to help captioning*
+- Shape (options: filling style, outline style, gradient, …):
- rectangle
- rounded rectangle
- circle
- oval
- polygon
- free shape
-- Color picker
-- Paint (options: remove a color, …)
+- *Color picker*
+- *Paint (options: remove a color, …)*
#### Selection tools
These tools allow you to define an area (rectangle or free), which you can move,
-cut, copy, paste, edit with canvas tools, export, open as a new image, etc.
+cut, copy, paste, edit with any transformation tool, export, open as a new
+image, etc.
- Rectangle selection
- Free shape selection
-- Adjacent color selection
+- *Adjacent color selection*
-#### Canvas/selection edition tools
+#### Transformation tools
-These tools allow to edit the whole image, or to edit a selected part of it.
+These tools can edit the whole image, or edit a selected part of it.
- Crop
- Scale (options: keep proportions or not)
- Rotate (rotate or flip)
-- Skew (horizontally or vertically)
+<!-- - Skew (horizontally or vertically) -->
- Filters:
- Blur (various types)
- - Pixelisation
+ - Pixelization
- Saturation (increase or decrease)
- Transparency
- Invert colors
@@ -124,3 +148,4 @@ These tools allow to edit the whole image, or to edit a selected part of it.
[To contribute](./CONTRIBUTING.md)
the code is under GPL3, some tools icons are from [here](https://github.com/gnome-design-team/gnome-icons/tree/master/art-libre-symbolic)
+
diff --git a/build-aux/meson/postinstall.py b/build-aux/meson/postinstall.py
index bda81da2..fd6e6fcb 100755
--- a/build-aux/meson/postinstall.py
+++ b/build-aux/meson/postinstall.py
@@ -9,13 +9,12 @@ destdir = environ.get('DESTDIR', '')
# Package managers set this so we don't need to run
if not destdir:
- print('Updating icon cache...')
+ print('Updating icon cache…')
call(['gtk-update-icon-cache', '-qtf', path.join(datadir, 'icons', 'hicolor')])
- print('Updating desktop database...')
+ print('Updating desktop database…')
call(['update-desktop-database', '-q', path.join(datadir, 'applications')])
- print('Compiling GSettings schemas...')
+ print('Compiling GSettings schemas…')
call(['glib-compile-schemas', path.join(datadir, 'glib-2.0', 'schemas')])
-
diff --git a/class_diagram.dia b/class_diagram.dia
deleted file mode 100644
index e59a0caf..00000000
--- a/class_diagram.dia
+++ /dev/null
Binary files differ
diff --git a/com.github.maoschanz.drawing.json b/com.github.maoschanz.drawing.json
index 51db07ea..c76f6f52 100644
--- a/com.github.maoschanz.drawing.json
+++ b/com.github.maoschanz.drawing.json
@@ -1,7 +1,7 @@
{
"app-id" : "com.github.maoschanz.drawing",
"runtime" : "org.gnome.Platform",
- "runtime-version" : "3.36",
+ "runtime-version" : "3.38",
"sdk" : "org.gnome.Sdk",
"command" : "drawing",
"finish-args" : [
@@ -17,5 +17,11 @@
"type" : "git",
"url" : "https://github.com/maoschanz/drawing"
}]
- }]
+ }],
+ "build-options" : {
+ "env" : {
+
+ }
+ }
}
+
diff --git a/data/com.github.maoschanz.drawing.appdata.xml.in b/data/com.github.maoschanz.drawing.appdata.xml.in
index 43f920d9..ce4f9f9d 100644
--- a/data/com.github.maoschanz.drawing.appdata.xml.in
+++ b/data/com.github.maoschanz.drawing.appdata.xml.in
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2020 Romain F. T. -->
<component type="desktop">
<id>com.github.maoschanz.drawing</id>
<metadata_license>CC0-1.0</metadata_license>
@@ -9,6 +10,10 @@
<kudo>ModernToolkit</kudo>
<kudo>UserDocs</kudo>
</kudos>
+ <custom>
+ <value key="Purism::form_factor">workstation</value>
+ <value key="Purism::form_factor">mobile</value>
+ </custom>
<content_rating type="oars-1.1" />
<name>Drawing</name>
@@ -24,7 +29,73 @@
</description>
<releases>
- <release version="0.6.1" date="2019-12-01">
+ <release version="0.6.4" date="2020-11-28">
+ <description>
+ <p>
+ Version 0.6.4 features several minor bug fixes, and various new
+ translations.
+ </p>
+ <p>
+ The value of the "use anti-aliasing" option is now restored when the
+ app starts.
+ </p>
+ </description>
+ </release>
+
+ <release version="0.6.3" date="2020-10-31">
+ <description>
+ <p>
+ The version 0.6.3 improves the option to draw arrows: several issues
+ have been fixed and double-ended arrows are now possible.
+ </p>
+ <p>
+ There is also more options to draw using dashes.
+ </p>
+ <p>
+ This version is finally compatible with older distributions (versions
+ of GNOME libraries older than 3.30).
+ </p>
+ </description>
+ </release>
+
+ <release version="0.6.2" date="2020-10-17">
+ <description>
+ <p>
+ Version 0.6.2 features several minor bug fixes, and various new
+ translations.
+ </p>
+ <p>
+ The 'highlighter' tool now provides options to highlight light text on
+ a dark background.
+ </p>
+ <p>
+ When an image has been saved without its transparency, the app now
+ suggests to reload the image from the disk. Also, the 'reload from
+ disk' feature is now available with every possible window layout.
+ </p>
+ <p>
+ An action to copy the whole image to clipboard has been added.
+ </p>
+ </description>
+ </release>
+
+ <release version="0.6.1" date="2020-10-03">
+ <description>
+ <p>
+ It's now possible to remove transparency when saving PNG files too.
+ And there are more color options to replace the transparent pixels.
+ </p>
+ <p>
+ A new optional tool named "Points" has been added, it may help
+ captioning pictures.
+ </p>
+ <p>
+ Minors bugs to the 'rotate' tool have been fixed.
+ </p>
+ </description>
+ </release>
+
+ <release version="0.6.0" date="2020-09-20">
<description>
<p>
Version 0.6 is a major update, with various important changes. The app
@@ -42,8 +113,12 @@
include various types of gradients.
</p>
<p>
+ The text tool can now write using most system fonts, thus allowing
+ more complex characters to be used (e.g. Asian characters).
+ </p>
+ <p>
The 'saturate' tool has been replaced by 'filters', a more powerful
- tool with several types of blur, color inversion, pixelisation,
+ tool with several types of blur, color inversion, pixelization,
saturation and transparency.
</p>
<p>
@@ -55,12 +130,6 @@
</p>
</description>
</release>
- <release version="0.4.8" date="2019-10-13">
- <description>
- <p>Version 0.4.8 features several minor bug fixes, and various new
- translations.</p>
- </description>
- </release>
</releases>
<!-- This is just my name, do not translate it. -->
@@ -73,28 +142,39 @@
<screenshots>
<screenshot type="default">
<image type="source">
- https://raw.githubusercontent.com/maoschanz/drawing/master/docs/screenshots/gnome_menu.png
+ https://raw.githubusercontent.com/maoschanz/drawing/master/docs/screenshots/0.6/gnome_menu.png
</image>
- <!-- TODO screenshots are not up-to-date -->
- <!-- <caption></caption> -->
+ <!-- Caption of a screenshot, for appstores -->
+ <caption>
+ The window and its primary menu
+ </caption>
</screenshot>
<screenshot>
<image type="source">
- https://raw.githubusercontent.com/maoschanz/drawing/master/docs/screenshots/gnome_selection.png
+ https://raw.githubusercontent.com/maoschanz/drawing/master/docs/screenshots/0.6/gnome_selection.png
</image>
- <!-- <caption></caption> -->
+ <!-- Caption of a screenshot, for appstores -->
+ <caption>
+ The selection and the actions associated with it
+ </caption>
</screenshot>
<screenshot>
<image type="source">
- https://raw.githubusercontent.com/maoschanz/drawing/master/docs/screenshots/gnome_tools_preview.png
+ https://raw.githubusercontent.com/maoschanz/drawing/master/docs/screenshots/0.6/gnome_tools_preview.png
</image>
- <!-- <caption></caption> -->
+ <!-- Caption of a screenshot, for appstores -->
+ <caption>
+ Zooming in various shapes
+ </caption>
</screenshot>
<screenshot>
<image type="source">
- https://raw.githubusercontent.com/maoschanz/drawing/master/docs/screenshots/gnome_new.png
+ https://raw.githubusercontent.com/maoschanz/drawing/master/docs/screenshots/0.6/gnome_new.png
</image>
- <!-- <caption></caption> -->
+ <!-- Caption of a screenshot, for appstores -->
+ <caption>
+ The "new image" menu opened
+ </caption>
</screenshot>
</screenshots>
@@ -104,3 +184,4 @@
<binary>drawing</binary>
</provides>
</component>
+
diff --git a/data/com.github.maoschanz.drawing.desktop.in b/data/com.github.maoschanz.drawing.desktop.in
index 1f56c51d..d5bc2750 100644
--- a/data/com.github.maoschanz.drawing.desktop.in
+++ b/data/com.github.maoschanz.drawing.desktop.in
@@ -12,6 +12,8 @@ Keywords=Paint;Sketch;Pencil;
Categories=Graphics;GNOME;GTK;
MimeType=image/png;image/bmp;image/jpeg;
Actions=new-window;new-tab;edit-clipboard;
+# Translators: Do NOT translate or transliterate this text
+X-Purism-FormFactor=Workstation;Mobile;
[Desktop Action new-window]
Name=New Window
diff --git a/data/com.github.maoschanz.drawing.gschema.xml b/data/com.github.maoschanz.drawing.gschema.xml
index 4f51f77a..5ea8b3fa 100644
--- a/data/com.github.maoschanz.drawing.gschema.xml
+++ b/data/com.github.maoschanz.drawing.gschema.xml
@@ -26,7 +26,7 @@
<description>User can zoom with scrolling or ctrl+scrolling.</description>
</key>
<key type="as" name="disabled-tools">
- <default>['eraser', 'highlight', 'color_select', 'picker', 'paint']</default>
+ <default>['eraser', 'highlight', 'color_select', 'points', 'picker', 'paint']</default>
<summary>Optional tools to disable</summary>
<description>A list of optional tools' id to disable.</description>
</key>
@@ -36,15 +36,22 @@
<description>Size of the bigger dimension of the preview (px).</description>
</key>
<key type="s" name="replace-alpha">
- <default>'white'</default>
+ <default>'ask'</default>
<summary>What will replace transparent pixels if needed</summary>
<description>
What will replace transparent pixels when saving to a file format not
supporting it, such as JPG or BMP. It can be 'white', 'black', 'ask'
(the value isn't memorized and a dialog is prompted each time),
'nothing' (the alpha channel is removed, which usually replace deleted
- areas with black but preserves semi-transparent colors' saturation), or
- 'checkboard'.
+ areas with black but preserves semi-transparent colors' saturation),
+ 'checkboard', or 'initial' (the initial color of an image).
+ </description>
+ </key>
+ <key type="as" name="ui-background-rgba">
+ <default>['0.0', '0.0', '0.0', '0.5']</default>
+ <summary>Default UI background color</summary>
+ <description>
+ The color for the background of the user interface, behind the image.
</description>
</key>
<key type="b" name="devel-only">
@@ -54,7 +61,7 @@
</key>
<!-- Default new canvas -->
- <key type="as" name="background-rgba">
+ <key type="as" name="default-rgba">
<default>['1.0', '1.0', '1.0', '1.0']</default>
<summary>Default color background</summary>
<description>The default color background of a new image.</description>
@@ -121,5 +128,18 @@
<description>The id of the last active shape from the "shape" tool, saved
when closing a window.</description>
</key>
+ <key type="s" name="last-font-name">
+ <default>'Sans'</default>
+ <summary>Default active font</summary>
+ <description>The name of the last active font family, from the "text"
+ tool, saved when closing a window.</description>
+ </key>
+ <key type="b" name="use-antialiasing">
+ <default>true</default>
+ <summary>Use antialiasing or not</summary>
+ <description>The default value of the 'antialiasing' boolean option, for
+ any compatible tools.</description>
+ </key>
</schema>
</schemalist>
+
diff --git a/data/meson.build b/data/meson.build
index 674db434..f3d23212 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -1,6 +1,7 @@
+
desktop_file = i18n.merge_file(
- input: 'com.github.maoschanz.drawing.desktop.in',
- output: 'com.github.maoschanz.drawing.desktop',
+ input: app_uuid + '.desktop.in',
+ output: app_uuid + '.desktop',
type: 'desktop',
po_dir: '../po',
install: true,
@@ -13,8 +14,8 @@ if desktop_utils.found()
endif
appstream_file = i18n.merge_file(
- input: 'com.github.maoschanz.drawing.appdata.xml.in',
- output: 'com.github.maoschanz.drawing.appdata.xml',
+ input: app_uuid + '.appdata.xml.in',
+ output: app_uuid + '.appdata.xml',
po_dir: '../po',
install: true,
install_dir: join_paths(get_option('datadir'), 'metainfo')
@@ -27,10 +28,13 @@ if appstream_util.found()
appstream_util,
args: ['validate', appstream_file]
)
+ # The app will never pass "validate-strict" because appstream-util wants
+ # pictures with a 16:9 ratio, while i use pictures of the default window
+ # size, which is approximating the objectively better golden ratio.
endif
install_data(
- 'com.github.maoschanz.drawing.gschema.xml',
+ app_uuid + '.gschema.xml',
install_dir: join_paths(get_option('datadir'), 'glib-2.0/schemas')
)
@@ -45,3 +49,4 @@ endif
message('Making a list of icons')
subdir('icons')
+
diff --git a/deb_package.sh b/deb_package.sh
index 2553294b..6de4e675 100755
--- a/deb_package.sh
+++ b/deb_package.sh
@@ -1,10 +1,14 @@
#!/bin/bash
-DISTRO="unstable" # TODO lister les valeurs possibles (debian ? ubuntu ?
-# elementary ? mint ?) il est probable qu'on s'en tape, car si ce script est
-# fait pour un usage local, les vraies distros changent ça comme des grandes.
-PACKAGE_NAME="drawing" # XXX et pour elementary ? osef je pense, flemme.
-VERSION="0.5"
+DISTRO="unstable" # this script is for local use, distros manage this themselves
+PACKAGE_NAME="drawing" # XXX ask it as an input maybe?
+VERSION="0.6.4"
+
+function separator () {
+ echo ""
+ echo "---------------------------------------------------------------------"
+ echo ""
+}
echo "targeted distribution: $DISTRO"
echo "package name: $PACKAGE_NAME"
@@ -12,12 +16,13 @@ echo "package version: $VERSION"
echo ""
echo "Is it correct? [Return/^C]"
read confirmation
+separator
# remember current directory (theorically, the project's root) to bring the
# package here in the end
previous_dir=`pwd`
-# mettre en place la structure à la con voulue par les scripts de debian
+# set up the stupidly specific structure required by debian scripts
DIR_NAME=$PACKAGE_NAME'-'$VERSION
FILE_NAME=$PACKAGE_NAME'_'$VERSION
DIR_PATH=/tmp/building-dir
@@ -32,12 +37,15 @@ cp meson.build $DIR_PATH/$DIR_NAME/
cd $DIR_PATH/
tar -Jcvf $FILE_NAME.orig.tar.xz $DIR_NAME
cd $DIR_PATH/$DIR_NAME/
+separator
-# création automatique des fichiers supplémentaires pour la construction
+# automatic creation of additional files for the build process
dh_make -i -y
+separator
# actually building the package
dpkg-buildpackage -i -us -uc -b
+separator
# get the package in /tmp and move it where the user is
cp $DIR_PATH/*.deb $previous_dir
diff --git a/diagrams/README.md b/diagrams/README.md
new file mode 100644
index 00000000..f0428b45
--- /dev/null
+++ b/diagrams/README.md
@@ -0,0 +1,129 @@
+
+Be sure to read [general contributing guidelines](../CONTRIBUTING.md#contribute-to-the-code)
+first.
+
+<!--[TOC]-->
+<!--XXX quand un objet retient qui l'a invoqué, c'est tjrs de la compo ??-->
+
+# Overview
+
+>See general-class-diagram.dia
+
+## The application
+
+`main.py` defines the application, which has:
+
+- implementations of CLI handling methods
+- some `GioAction`s
+- a preferences window (`preferences.py`)
+- a menubar (hidden with most layouts)
+- an appmenu (for GNOME Shell ≤ 3.30)
+- dialogs (about, shortcuts)
+- several **windows**
+
+## Windows
+
+`window.py` defines a GtkApplicationWindow:
+
+- some `GioAction`s
+- a window's decorations can change quite a lot, which is mostly handled by
+`deco_manager.py`. Three classes are defined in this file:
+ - **`DrDecoManagerMenubar`** just hides or shows the menubar. Most of its
+ methods are empty.
+ - **`DrDecoManagerToolbar`** loads a toolbar from an UI file. This class
+ extends `DrDecoManagerMenubar`, and will manage a small "hamburger menu" at
+ the end of the toolbar if the menubar is hidden.
+ - **`DrDecoManagerHeaderbar`** loads a headerbar from an UI file. This class
+ extends `DrDecoManagerMenubar` but the menubar will always stay hidden.
+ It handles how widgets are shown or hidden depending on the size of the
+ window, and will display various menus depending on the visibility of the
+ buttons, to ensure all features are always available.
+- a window has several **tools**
+- a window has several **images**
+- `minimap.py` for the minimap, which shows a thumbnail of the currently opened image.
+- each window has an **options_manager** (`options_manager.py`). It will display
+the correct bottom bar (= the one required by the current **tool**) and manage
+tools' options. All bottom options bars can be found in the sub-directories of
+`src/optionsbars/`, and are specialized from `src/optionsbars/abstract_optionsbar.py`
+
+## Images
+
+`image.py` defines an image (= a tab), which contains:
+
+- a `GdkPixbuf.Pixbuf` (as an attribute), named `main_pixbuf`, which corresponds
+to the current state of the edited image.
+- a file (`Gio.File`) which can be `None` (if it's a new image never saved).
+- a history, managed by `history_manager.py`
+- a selection, managed by `selection_manager.py`
+- methods to manage the zoom and the scroll.
+- methods to manage printing.
+- methods to receive signals from the mouse, and transmit them to the tools.
+
+# The tools
+
+>See tools-class-diagram.dia
+
+The tools are managed by a bunch of files in the `src/tools` directory.
+
+>The relationship between the window and the tools is a
+**[State](https://en.wikipedia.org/wiki/State_pattern)** design pattern.
+
+The active tool's methods are called from the currently active image's code (or
+the window's code) regardless of what tool is active. To achieve that, all tools
+inherit from **abstract** classes defining common methods.
+
+First of all, `src/tools/abstract_tool.py` defines how the tool will be added in
+the UI, provides several wrappers to add options, to access the pixbufs, to add
+an operation to the edition history, etc.
+
+Other common features, when they don't depend on the image or the tool at all
+(such as blurring, computing some paths, displaying an overlay on the image (for
+the selection for example)), may be provided by one of the
+`src/tools/utilities_*.py` files.
+
+Then, an other layer of abstract classes is used, depending on the subcategory a
+tool is in:
+
+- the classic tools, draw on the main pixbuf using **`cairo`**
+- the selection tools translates the user's input into operations using the
+image's **selection_manager**. These operations are quite complex, and are
+almost entirely managed in `abstract_select.py`.
+- the transformation tools (scale/crop/rotate/filters/…) can be applied to the
+selection pixbuf or the main pixbuf, and will use the image's `temp_pixbuf`
+attribute to store a preview of their changes. These tools have to be
+explicitely applied by the user, using a button in the bottom bar.
+
+# The bottom bar
+
+>See bottombar-class-diagram.dia
+
+Each tool is associated to a bottom bar, providing access the tool's options.
+They're named "optionsbar(s)" in the code, and are managed mostly by the
+window's **"options manager"**.
+
+Several tools can share the same bottom bar, so the optionsbars are distinct
+from the tools. Although both work according to a similar "state" pattern.
+
+While tools are mostly defining the way the image will behave depending on the
+user input, optionsbars also define actual GTK widgets, which have to be
+responsive (adapt to mobile phones' window size).
+
+They also have to list options (of course) and actions depending on the current
+tool, respond to a few keyboard shortcuts (<kbd>Ctrl</kbd>+<kbd>M</kbd>,
+<kbd>Shift</kbd>+<kbd>F10</kbd>, …), and -when it's pertinent- they should
+provide access to the minimap and/or the zoom controls.
+
+- classic optionsbar: the distinctive feature here is the pair of color picking
+popovers. The default associated set of options and actions is pretty rich
+(color, size, cairo operator, zoom controls, …) and the tools each provide a
+`Gio.MenuModel` to plug here, with their specific options.
+- selection optionsbar: all selection tools have roughly the same actions, which
+are hardcoded in the optionsbar, although tools can disable actions they don't
+support (e.g. "Closing selection", useless for the rectangle selection).
+- transformation tools: each of these tools defines its own optionsbar. All of
+them have a layout with a "cancel" button at the left and an "apply" button at
+the right. The rest differs greatly, but it's usually spinbuttons to provide
+precise control over numerical values (sizes, angles, percentages, …) in the
+middle, and a small menu with options at the right.
+
+
diff --git a/diagrams/bottombar-class-diagram.dia b/diagrams/bottombar-class-diagram.dia
new file mode 100644
index 00000000..df7abd0c
--- /dev/null
+++ b/diagrams/bottombar-class-diagram.dia
Binary files differ
diff --git a/diagrams/general-class-diagram.dia b/diagrams/general-class-diagram.dia
new file mode 100644
index 00000000..094bdfab
--- /dev/null
+++ b/diagrams/general-class-diagram.dia
Binary files differ
diff --git a/diagrams/tools-class-diagram.dia b/diagrams/tools-class-diagram.dia
new file mode 100644
index 00000000..7d96f02a
--- /dev/null
+++ b/diagrams/tools-class-diagram.dia
Binary files differ
diff --git a/docs/example.css b/docs/example.css
index c05ad860..22547247 100644
--- a/docs/example.css
+++ b/docs/example.css
@@ -1,5 +1,5 @@
-/* Header */
-header {
+/* Header & footer */
+header, footer {
background-color: #404040;
padding: 2px;
color: white;
@@ -7,13 +7,17 @@ header {
header h1 {
color: white;
}
-header a, header a:hover {
+header a, header a:hover,
+footer a, footer a:hover {
color: white;
font-weight: bold;
}
+.header-icon {
+ float:right;
+}
/* Titles */
-h1, h2, h3 {
+h1, h2, h3, h4 {
color: #404040;
line-height: 36px;
margin: 0px;
@@ -29,6 +33,9 @@ h2 {
h3 {
font-size: 20px;
}
+h4 {
+ font-size: 16px;
+}
/* Main page */
body {
@@ -66,8 +73,9 @@ kbd {
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
-.header_icon {
- float:right;
+.limited-image {
+ width: 90%;
+ max-width: 350px;
}
/* Style classes to get collapsable columns */
@@ -87,11 +95,49 @@ kbd {
width: 66.6%;
}
-@media (max-width: 576px){
- header a {
+/* Style classes to get tabs */
+input, .tab {
+ display: none;
+}
+
+#tab1:checked ~ .tab.content1,
+#tab2:checked ~ .tab.content2,
+#tab3:checked ~ .tab.content3 {
+ display: block;
+}
+
+input + label {
+ display: inline-block;
+ border: 1px solid #999;
+ background: #EEE;
+ padding: 4px 10px;
+ border-radius: 4px 4px 0 0;
+ position: relative;
+ top: 1px;
+ /* text-align: center; */
+}
+input:checked + label {
+ background: #FFF;
+ border-bottom: 1px solid transparent;
+}
+input ~ .tab {
+ border-top: 1px solid #999;
+ padding: 12px;
+}
+
+/******************************************************************************/
+
+@media (max-width: 576px) {
+ /* Header & footer */
+ header a, footer a {
font-size: 20px;
line-height: 32px;
}
+ .header-icon {
+ display: none;
+ }
+
+ /* Collapsable columns */
.responsive-row {
display: flex;
flex-direction: column;
@@ -99,13 +145,19 @@ kbd {
.col50, .col66, .col33 {
width: 100%;
}
- .header_icon {
- display: none;
+
+ /* Tabs */
+ label h4 {
+ font-size: 12px;
+ line-height: 20px;
+ }
+ input + label {
+ padding: 4px 4px;
}
}
@media screen and (min-width: 914px) {
- main, .header_box {
+ main, .header-box {
width: 854px;
margin: 10px auto;
}
diff --git a/docs/gallery.html b/docs/gallery.html
index b244564d..294f01d6 100644
--- a/docs/gallery.html
+++ b/docs/gallery.html
@@ -8,7 +8,7 @@
<body>
<header>
- <div class="header_box">
+ <div class="header-box">
<div class="responsive-row">
<div class="col66">
<h1>Drawing</h1>
@@ -28,7 +28,7 @@
</div>
</div>
<div class="col33">
- <img class="header_icon"
+ <img class="header-icon"
src="https://raw.githubusercontent.com/maoschanz/drawing/master/data/icons/hicolor/128x128/apps/com.github.maoschanz.drawing.png"
alt="icon" />
</div>
@@ -37,72 +37,73 @@
</header>
<main class="main">
<h2>Screenshots</h2>
- <p>Warning: the following gallery include screenshots from unstable and
- unreleased versions.</p>
+ <!-- <p>Warning: the following gallery includes screenshots from unstable -->
+ <!-- and unreleased versions.</p> -->
+
+ <h3>GNOME and Budgie</h3><!-- **************************************** -->
- <h3>GNOME and Budgie</h3>
<div class="responsive-row">
<div class="col50">
<img alt="screenshot" style="width:100%"
- src="screenshots/gnome_menu.png" />
- <p>The primary menu opened (version 0.4.8)</p>
+ src="screenshots/0.6/gnome_menu.png" />
+ <p>The primary menu opened (version 0.6.0)</p>
</div>
<div class="col50">
<img alt="screenshot" style="width:100%"
- src="screenshots/gnome_selection.png" />
- <p>The "selection" tool and its menu (version 0.4.8)</p>
+ src="screenshots/0.6/gnome_selection.png" />
+ <p>The "selection" tool and its menu (version 0.6.0)</p>
</div>
</div>
-
+
<div class="responsive-row">
<div class="col50">
<img alt="screenshot" style="width:100%"
- src="screenshots/gnome_arc.png" />
- <p>The "arc" tool and its options (version 0.4.8)</p>
+ src="screenshots/0.6/gnome_new.png" />
+ <p>The "new image" menu opened while the selection is being scaled up (version 0.6.0)</p>
</div>
<div class="col50">
<img alt="screenshot" style="width:100%"
- src="screenshots/gnome_saturate.png" />
- <p>Change the saturation (version 0.4.8)</p>
+ src="screenshots/0.6/gnome_tools_preview.png" />
+ <p>The thumbnail preview, showing various shapes zoomed in (version 0.6.0)</p>
</div>
</div>
-
+
<div class="responsive-row">
<div class="col50">
<img alt="screenshot" style="width:100%"
- src="screenshots/gnome_new.png" />
- <p>The "new images" menu opened (version 0.4.7)</p>
+ src="screenshots/0.4/gnome_zoom_selection.png" />
+ <p>Zooming on the image (version 0.5.3-unstable)</p>
</div>
<div class="col50">
<img alt="screenshot" style="width:100%"
- src="screenshots/gnome_colors.png" />
- <p>Select a color (version 0.4.7)</p>
+ src="screenshots/0.4/gnome_saturate.png" />
+ <p>Change the saturation (version 0.4.8)</p>
</div>
</div>
-
+
<div class="responsive-row">
<div class="col50">
<img alt="screenshot" style="width:100%"
- src="screenshots/gnome_text.png" />
- <p>Add text to a picture (version 0.4.1)</p>
+ src="screenshots/0.4/gnome_colors.png" />
+ <p>Select a color (version 0.4.7)</p>
</div>
<div class="col50">
<img alt="screenshot" style="width:100%"
- src="screenshots/gnome_zoom_selection.png" />
- <p>Zooming on the image (version 0.5.3-unstable)</p>
+ src="screenshots/0.4/gnome_text.png" />
+ <p>Add text to a picture (version 0.4.1)</p>
</div>
</div>
-
- <h3>Cinnamon and MATE</h3>
+
+ <h3>Traditional-looking environments</h3><!-- ************************ -->
+
<div class="responsive-row">
<div class="col50">
- <img alt="screenshot" src="screenshots/cinnamon.png" style="width:100%" />
- <p>The Cinnamon user interface (version 0.4.8)</p>
+ <img alt="screenshot" src="screenshots/0.6/plasma_global.png" style="width:100%" />
+ <p>Integration with KDE Plasma global menu-bar (version 0.6.1)</p>
</div>
<div class="col50">
- <img alt="screenshot" src="screenshots/mate_scale.png" style="width:100%" />
- <p>Scaling the picture with the colorful icons of the MATE user
- interface (version 0.4.7)</p>
+ <img alt="screenshot" src="screenshots/0.4/cinnamon.png" style="width:100%" />
+ <p>Both the menubar and the toolbar (version 0.4.8)</p>
</div>
</div>
<p>It's also possible to use only the toolbar, or only the menubar. The
@@ -110,45 +111,47 @@
environment, but you can change that in the app preferences.</p>
<div class="responsive-row">
<div class="col50">
- <img alt="screenshot" src="screenshots/cinnamon_preferences.png" style="width:100%" />
- <p>Toolbar only, with the preferences window (version 0.5.3)</p>
+ <img alt="screenshot" src="screenshots/0.4/mate_scale.png" style="width:100%" />
+ <p>Scaling the picture, with the menubar and the toolbar with colorful
+ icons (version 0.4.7)</p>
+ </div>
+ <div class="col50">
+ <!-- XXX incorrect proportions -->
+ <img alt="screenshot" src="screenshots/0.6/cinnamon_scale.png" style="width:100%" />
+ <p>Toolbar only, scaling the picture on Cinnamon (version 0.6.0)</p>
</div>
- <!-- <div class="col50"> -->
- <!-- <img alt="screenshot" src="screenshots/.png" style="width:100%" /> -->
- <!-- <p>... (version 0.4.7)</p> -->
- <!-- </div> -->
</div>
- <h3>elementaryOS</h3>
+ <h3>elementaryOS</h3><!-- ******************************************** -->
+
<div class="responsive-row">
<div class="col50">
- <img alt="screenshot" src="screenshots/elementary.png" style="width:100%" />
- <p>The elementaryOS design guidelines (version 0.2)</p>
+ <img alt="screenshot" src="screenshots/0.6/elementary_save_as.png" style="width:100%" />
+ <p>The elementaryOS design guidelines (version 0.6.0)</p>
</div>
<div class="col50">
- <img alt="screenshot" src="screenshots/elementary_labels.png" style="width:100%" />
+ <img alt="screenshot" src="screenshots/0.4/elementary_labels.png" style="width:100%" />
<p>Using the primary menu to show the tools names (version 0.4.8)</p>
</div>
</div>
- <h3>Linux smartphones</h3>
+ <h3>Linux smartphones</h3><!-- *************************************** -->
<div class="responsive-row">
<div class="col33">
<p>With the default "GNOME" layout, the window can fit in the narrow
screen of a smartphone such as Purism's Librem 5 or the PinePhone.</p>
- <hr />
- <p>Here is a <a href="https://www.youtube.com/watch?v=xwfDnPd5NDU">
- youtube screencast</a> on the devkit (version 0.2).</p>
+ <!-- <hr /> -->
+ <!-- <p>Here is a <a href="https://www.youtube.com/watch?v=xwfDnPd5NDU"> -->
+ <!-- youtube screencast</a> on the librem5 devkit (version 0.2).</p> -->
</div>
<div class="col33">
- <img alt="screenshot" src="screenshots/librem_menu.png" style="width:100%" />
+ <img alt="screenshot" src="screenshots/0.6/librem_menu.png" style="width:100%" />
<p>When features can't fit in the headerbar, they are available from
- the primary menu (version 0.4.8)</p>
+ the primary menu (version 0.6.0)</p>
</div>
<div class="col33">
- <img alt="screenshot" src="screenshots/librem_options.png" style="width:100%" />
+ <img alt="screenshot" src="screenshots/0.4/librem_options.png" style="width:100%" />
<p>Pencil options menu on a window resized to fit a Librem 5 screen.
- Notice that my fonts are smaller than the default GNOME settings
(version 0.4.7)</p>
</div>
</div>
@@ -157,7 +160,7 @@
<header>
<!--it's a footer but it has ths same css as the header so here we are-->
- <div class="header_box">
+ <div class="header-box">
<div class="responsive-row">
<div class="col33">
<a href="https://github.com/maoschanz/drawing">Source code</a>
diff --git a/docs/index.html b/docs/index.html
index 36a39d9c..22fe8e0a 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -8,7 +8,7 @@
<body>
<header>
- <div class="header_box">
+ <div class="header-box">
<div class="responsive-row">
<div class="col66">
<h1>Drawing</h1>
@@ -29,7 +29,7 @@
</div>
<div class="col33">
<img
- class="header_icon"
+ class="header-icon"
src="https://raw.githubusercontent.com/maoschanz/drawing/master/data/icons/hicolor/128x128/apps/com.github.maoschanz.drawing.png"
alt="icon" />
</div>
@@ -46,6 +46,13 @@
Paint, but aiming at the GNOME desktop.
</p>
<p>PNG, JPEG and BMP files are supported.</p>
+
+ <!-- Links to anchors -->
+ <!-- <ul> -->
+ <!-- <li><a href="#installation">Installation</a></li> -->
+ <!-- <li><a href="#tools">Tools</a></li> -->
+ <!-- <li><a href="#translations">Available languages</a></li> -->
+ <!-- </ul> -->
</div>
<div class="col66">
<!-- Main screenshot -->
@@ -53,7 +60,7 @@
<img
alt="screenshot"
style="width:100%"
- src="screenshots/gnome_menu.png" />
+ src="screenshots/0.6/gnome_menu.png" />
</p>
</div>
</div>
@@ -61,135 +68,193 @@
<!-- Smaller screenshots -->
<div class="responsive-row">
<div class="col33">
- <img alt="screenshot" src="screenshots/gnome_selection.png" style="width:100%" />
+ <img alt="screenshot" src="screenshots/0.6/gnome_selection.png" style="width:100%" />
</div>
<div class="col33">
- <img alt="screenshot" src="screenshots/gnome_saturate.png" style="width:100%" />
+ <img alt="screenshot" src="screenshots/0.6/gnome_new.png" style="width:100%" />
</div>
<div class="col33">
- <img alt="screenshot" src="screenshots/gnome_tools_preview.png" style="width:100%" />
+ <img alt="screenshot" src="screenshots/0.6/gnome_tools_preview.png" style="width:100%" />
</div>
</div>
<p>
More traditional design user interfaces are available too, as well as an
elementaryOS layout. The app should also be compatible with GNU-Linux
smartphones. For more screenshots, see the <a href="./gallery.html">
- gallery</a>.</p>
+ gallery</a>.
+ </p>
- <h2>Installation</h2>
- <!-- TODO tabs ? -->
- <div class="responsive-row">
- <div class="col50">
- <h3>Recommended method</h3>
- <p>The recommended way to install Drawing is with <code>flatpak</code>:</p>
- <p>
- <a
- href="https://flathub.org/apps/details/com.github.maoschanz.drawing"
- style="width:90%">
- <img
- style="width:90%"
- src="https://raw.githubusercontent.com/flatpak-design-team/flathub-mockups/master/assets/download-button/download-i.png"
- alt="Install it from Flathub" />
- </a>
- </p>
- <p>(version 0.4.12)</p>
- <h3>Alternative methods for Ubuntu</h3>
- <p>
+ <h2><a id="installation"></a>Installation</h2><!-- ******************* -->
+
+ &nbsp;
+ <!-- It would look better if in a div, but that would break the CSS, -->
+ <!-- which relies on the "~" combinator. -->
+ <input type="radio" name="tabs" id="tab1" checked="yes" />
+ <label for="tab1"><h4>Flatpak</h4></label>
+
+ <input type="radio" name="tabs" id="tab2" />
+ <label for="tab2"><h4>Native packages</h4></label>
+
+ <input type="radio" name="tabs" id="tab3" />
+ <label for="tab3"><h4>Other methods</h4></label>
+
+ <div class="tab content1">
+ <p>
+ The <b>recommended</b> way to install the most recent version of
+ Drawing is to use <code>flatpak</code>:</p>
+ <p>
+ <a
+ href="https://flathub.org/apps/details/com.github.maoschanz.drawing"
+ class="limited-image">
+ <img
+ class="limited-image"
+ src="https://raw.githubusercontent.com/flatpak-design-team/flathub-mockups/master/assets/download-button/download-i.png"
+ alt="Install it from Flathub" />
+ <p>(version 0.6.2)</p>
+ </a>
+ </p>
+ <p>Permissions required: ipc/x11/wayland</p>
+ </div>
+
+ <div class="tab content2">
+ <p>
+ The app is also available as native packages in the repositories of
+ the following distributions:
+ </p>
+ <p>
+ <a href="https://repology.org/project/drawing/versions">
+ <img
+ src="https://repology.org/badge/vertical-allrepos/drawing.svg"
+ alt="Packaging status" />
+ </a>
+ </p>
+ <p>
+ You can use the package manager of your distribution to install the
+ package <code>drawing</code>.
+ </p>
+ </div>
+
+ <div class="tab content3">
+ <p>Alternative installation methods for Ubuntu :</p>
+ <ul>
+ <li>
<a href="https://launchpad.net/~cartes/+archive/ubuntu/drawing/">
- PPA repository (version 0.4.12)
+ <b>PPA repository (version 0.6.2)</b>
</a>
- </p>
- <p>
- <a href="https://snapcraft.io/drawing">
- Snap package (version 0.4.7)
- </a>
- </p>
- </div>
- <div class="col50">
- <h3>Native packages</h3>
- <p>
- The app is also available as native packages in the repositories of
- the following distributions:
- </p>
- <p>
- <a href="https://repology.org/project/drawing/versions">
- <img
- src="https://repology.org/badge/vertical-allrepos/drawing.svg"
- alt="Packaging status" />
+ </li>
+ <li>
+ <!-- <a href="https://snapcraft.io/drawing"> -->
+ <a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ"
+ title="very outdated version. And the code isn't even correctly
+packaged??? I will NOT provide any support for it. And i don't
+provide the actual link either. Use flatpak instead.">
+ Snap package (0.4.7? 0.4.8? unstable?)
</a>
- </p>
- </div>
+ </li>
+ </ul>
+ <hr />
+ <p>
+ <a href="https://gitlab.com/src_prepare/src_prepare-overlay/-/tree/master/media-gfx/drawing">
+ Gentoo package
+ </a>
+ from an external overlay
+ </p>
</div>
+
<hr />
<!-- Other useful but not sexy infos -->
+ <h2><a id="tools"></a>Tools</h2><!-- ********************************* -->
<div class="responsive-row">
+
<div class="col50">
- <h2>Tools</h2>
- <p>
- Tools to draw:
- </p>
+ <p>Tools to <b>draw</b>:</p>
<ul>
<li>Pencil</li>
- <li>Rectangle &amp; rounded rectangle</li>
- <li>Circle &amp; oval</li>
- <li>Polygon</li>
- <li>Free shape</li>
- <li>Line &amp; arrow</li>
- <li>Arc</li>
+ <li>Eraser*</li>
+ <li>Highlighter*</li>
<li>Insert text</li>
- <li>Paint</li>
+ <li>Points</li>
+ <li>Shape
+ <ul>
+ <li>Rectangle</li>
+ <li>Rounded rectangle</li>
+ <li>Circle</li>
+ <li>Oval</li>
+ <li>Polygon</li>
+ <li>Free shape</li>
+ </ul>
+ </li>
+ <li>Line &amp; arrow</li>
+ <li>Curve</li>
+ <li>Color picker*</li>
+ <li>Paint*</li>
</ul>
- <p>
- Tools to select part of the image:
- </p>
+ </div>
+
+ <div class="col50">
+ <p>Tools to <b>select</b> a part of the image:</p>
<ul>
- <li>Selection (rectangle or free shape)</li>
- <li>Color picker</li>
+ <li>Rectangle selection</li>
+ <li>Free selection</li>
+ <li>Adjacent color selection*</li>
</ul>
- <p>
- Tools to alter the canvas or the selected area:
- </p>
+
+ <p>Tools to <b>transform</b> the canvas or the selected area:</p>
<ul>
<li>Crop</li>
- <li>Flip</li>
<li>Scale</li>
- <li>Rotate</li>
- <li>Saturate</li>
+ <li>Rotate &amp; flip</li>
+ <li>Filters
+ <ul>
+ <li>Blur</li>
+ <li>Pixelization</li>
+ <li>Saturate &amp; desaturate</li>
+ <li>Add transparency</li>
+ <li>Invert colors</li>
+ </ul>
+ </li>
</ul>
+
+ <p>(version 0.6.1)</p>
+ <p>*these tools are disabled by default.</p>
</div>
- <div class="col50">
- <h2>Available languages</h2>
- <ul>
- <li>Brazilian portuguese</li>
- <li>Castillan</li>
- <li>Croatian</li>
- <li>Danish</li>
- <li>Dutch</li>
- <li>English</li>
- <li>Finnish</li>
- <li>French</li>
- <li>German</li>
- <li>Hebrew</li>
- <li>Hungarian</li>
- <li>Italian</li>
- <li>Polish</li>
- <li>Russian</li>
- <li>Swedish</li>
- <li>Turkish</li>
- </ul>
- <p>
- Credits for these translations are available
- <a href="https://github.com/maoschanz/drawing#available-languages">
- here</a> and in the app's "about" dialog.
- </p>
- </div>
+
</div>
+
+ <h2><a id="translations"></a>Available languages</h2><!-- ************ -->
+ <ul>
+ <li>Basque</li>
+ <li>Brazilian portuguese</li>
+ <li>Castillan</li>
+ <li>Croatian</li>
+ <li>Chinese (simplified)</li>
+ <li>Chinese (traditional)</li>
+ <li>Danish</li>
+ <li>Dutch</li>
+ <li>English</li>
+ <li>Finnish</li>
+ <li>French</li>
+ <li>German</li>
+ <li>Hebrew</li>
+ <li>Hungarian</li>
+ <li>Italian</li>
+ <li>Polish</li>
+ <li>Russian</li>
+ <li>Swedish</li>
+ <li>Turkish</li>
+ </ul>
+ <p>
+ Credits for these translations are available
+ <a href="https://github.com/maoschanz/drawing#available-languages">
+ here</a> and in the app's "about" dialog.
+ </p>
+
</main>
- <header>
- <!--it's a footer but it has ths same css as the header so here we are-->
- <div class="header_box">
+ <footer>
+ <!--it's a footer but it has ths same css as the header-->
+ <div class="header-box">
<div class="responsive-row">
<div class="col33">
<a href="https://github.com/maoschanz/drawing">Source code</a>
@@ -203,7 +268,8 @@
</div>
</div>
</div>
- </header>
+ </footer>
</body>
</html>
+
diff --git a/docs/screenshots/elementary.png b/docs/screenshots/0.2/elementary.png
index 41646aef..41646aef 100644
--- a/docs/screenshots/elementary.png
+++ b/docs/screenshots/0.2/elementary.png
Binary files differ
diff --git a/docs/screenshots/cinnamon.png b/docs/screenshots/0.4/cinnamon.png
index 03210027..03210027 100644
--- a/docs/screenshots/cinnamon.png
+++ b/docs/screenshots/0.4/cinnamon.png
Binary files differ
diff --git a/docs/screenshots/cinnamon_preferences.png b/docs/screenshots/0.4/cinnamon_preferences.png
index dd834c62..dd834c62 100644
--- a/docs/screenshots/cinnamon_preferences.png
+++ b/docs/screenshots/0.4/cinnamon_preferences.png
Binary files differ
diff --git a/docs/screenshots/elementary_labels.png b/docs/screenshots/0.4/elementary_labels.png
index 16504a3d..16504a3d 100644
--- a/docs/screenshots/elementary_labels.png
+++ b/docs/screenshots/0.4/elementary_labels.png
Binary files differ
diff --git a/docs/screenshots/gnome_arc.png b/docs/screenshots/0.4/gnome_arc.png
index 8b9cec95..8b9cec95 100644
--- a/docs/screenshots/gnome_arc.png
+++ b/docs/screenshots/0.4/gnome_arc.png
Binary files differ
diff --git a/docs/screenshots/gnome_colors.png b/docs/screenshots/0.4/gnome_colors.png
index 80358ec2..80358ec2 100644
--- a/docs/screenshots/gnome_colors.png
+++ b/docs/screenshots/0.4/gnome_colors.png
Binary files differ
diff --git a/docs/screenshots/gnome_menu.png b/docs/screenshots/0.4/gnome_menu.png
index 84715d12..84715d12 100644
--- a/docs/screenshots/gnome_menu.png
+++ b/docs/screenshots/0.4/gnome_menu.png
Binary files differ
diff --git a/docs/screenshots/gnome_new.png b/docs/screenshots/0.4/gnome_new.png
index b3b6c402..b3b6c402 100644
--- a/docs/screenshots/gnome_new.png
+++ b/docs/screenshots/0.4/gnome_new.png
Binary files differ
diff --git a/docs/screenshots/gnome_saturate.png b/docs/screenshots/0.4/gnome_saturate.png
index 1c8e196d..1c8e196d 100644
--- a/docs/screenshots/gnome_saturate.png
+++ b/docs/screenshots/0.4/gnome_saturate.png
Binary files differ
diff --git a/docs/screenshots/gnome_selection.png b/docs/screenshots/0.4/gnome_selection.png
index f547710b..f547710b 100644
--- a/docs/screenshots/gnome_selection.png
+++ b/docs/screenshots/0.4/gnome_selection.png
Binary files differ
diff --git a/docs/screenshots/gnome_selection1.png b/docs/screenshots/0.4/gnome_selection1.png
index 376bbbc0..376bbbc0 100644
--- a/docs/screenshots/gnome_selection1.png
+++ b/docs/screenshots/0.4/gnome_selection1.png
Binary files differ
diff --git a/docs/screenshots/gnome_text.png b/docs/screenshots/0.4/gnome_text.png
index 78d729ca..78d729ca 100644
--- a/docs/screenshots/gnome_text.png
+++ b/docs/screenshots/0.4/gnome_text.png
Binary files differ
diff --git a/docs/screenshots/gnome_tools_preview.png b/docs/screenshots/0.4/gnome_tools_preview.png
index 38955c8e..38955c8e 100644
--- a/docs/screenshots/gnome_tools_preview.png
+++ b/docs/screenshots/0.4/gnome_tools_preview.png
Binary files differ
diff --git a/docs/screenshots/gnome_zoom_selection.png b/docs/screenshots/0.4/gnome_zoom_selection.png
index be920a97..be920a97 100644
--- a/docs/screenshots/gnome_zoom_selection.png
+++ b/docs/screenshots/0.4/gnome_zoom_selection.png
Binary files differ
diff --git a/docs/screenshots/librem_menu.png b/docs/screenshots/0.4/librem_menu.png
index 3d59b62c..3d59b62c 100644
--- a/docs/screenshots/librem_menu.png
+++ b/docs/screenshots/0.4/librem_menu.png
Binary files differ
diff --git a/docs/screenshots/librem_options.png b/docs/screenshots/0.4/librem_options.png
index 06e99be8..06e99be8 100644
--- a/docs/screenshots/librem_options.png
+++ b/docs/screenshots/0.4/librem_options.png
Binary files differ
diff --git a/docs/screenshots/mate_scale.png b/docs/screenshots/0.4/mate_scale.png
index 437d7efd..437d7efd 100644
--- a/docs/screenshots/mate_scale.png
+++ b/docs/screenshots/0.4/mate_scale.png
Binary files differ
diff --git a/docs/screenshots/0.6/cinnamon_scale.png b/docs/screenshots/0.6/cinnamon_scale.png
new file mode 100644
index 00000000..3674fe1e
--- /dev/null
+++ b/docs/screenshots/0.6/cinnamon_scale.png
Binary files differ
diff --git a/docs/screenshots/0.6/elementary_save_as.png b/docs/screenshots/0.6/elementary_save_as.png
new file mode 100644
index 00000000..216d20db
--- /dev/null
+++ b/docs/screenshots/0.6/elementary_save_as.png
Binary files differ
diff --git a/docs/screenshots/0.6/gnome_menu.png b/docs/screenshots/0.6/gnome_menu.png
new file mode 100644
index 00000000..55d04416
--- /dev/null
+++ b/docs/screenshots/0.6/gnome_menu.png
Binary files differ
diff --git a/docs/screenshots/0.6/gnome_new.png b/docs/screenshots/0.6/gnome_new.png
new file mode 100644
index 00000000..43901ff5
--- /dev/null
+++ b/docs/screenshots/0.6/gnome_new.png
Binary files differ
diff --git a/docs/screenshots/0.6/gnome_selection.png b/docs/screenshots/0.6/gnome_selection.png
new file mode 100644
index 00000000..dfb5f886
--- /dev/null
+++ b/docs/screenshots/0.6/gnome_selection.png
Binary files differ
diff --git a/docs/screenshots/0.6/gnome_tools_preview.png b/docs/screenshots/0.6/gnome_tools_preview.png
new file mode 100644
index 00000000..cd70f065
--- /dev/null
+++ b/docs/screenshots/0.6/gnome_tools_preview.png
Binary files differ
diff --git a/docs/screenshots/0.6/librem_menu.png b/docs/screenshots/0.6/librem_menu.png
new file mode 100644
index 00000000..74bb59f5
--- /dev/null
+++ b/docs/screenshots/0.6/librem_menu.png
Binary files differ
diff --git a/docs/screenshots/0.6/plasma_global.png b/docs/screenshots/0.6/plasma_global.png
new file mode 100644
index 00000000..2046f439
--- /dev/null
+++ b/docs/screenshots/0.6/plasma_global.png
Binary files differ
diff --git a/help/C/figures/screenshot_arc.png b/help/C/figures/screenshot_arc.png
deleted file mode 100644
index 61268bca..00000000
--- a/help/C/figures/screenshot_arc.png
+++ /dev/null
Binary files differ
diff --git a/help/C/figures/screenshot_arrow.png b/help/C/figures/screenshot_arrow.png
new file mode 100644
index 00000000..c83e00cf
--- /dev/null
+++ b/help/C/figures/screenshot_arrow.png
Binary files differ
diff --git a/help/C/figures/screenshot_color_editor.png b/help/C/figures/screenshot_color_editor.png
new file mode 100644
index 00000000..70e25ae9
--- /dev/null
+++ b/help/C/figures/screenshot_color_editor.png
Binary files differ
diff --git a/help/C/figures/screenshot_color_palette.png b/help/C/figures/screenshot_color_palette.png
new file mode 100644
index 00000000..bc3ceac8
--- /dev/null
+++ b/help/C/figures/screenshot_color_palette.png
Binary files differ
diff --git a/help/C/figures/screenshot_filters.png b/help/C/figures/screenshot_filters.png
new file mode 100644
index 00000000..19aa163f
--- /dev/null
+++ b/help/C/figures/screenshot_filters.png
Binary files differ
diff --git a/help/C/figures/screenshot_hsl.png b/help/C/figures/screenshot_hsl.png
new file mode 100644
index 00000000..4e9394fd
--- /dev/null
+++ b/help/C/figures/screenshot_hsl.png
Binary files differ
diff --git a/help/C/figures/screenshot_menu.png b/help/C/figures/screenshot_menu.png
index 372e0e57..fead97c9 100644
--- a/help/C/figures/screenshot_menu.png
+++ b/help/C/figures/screenshot_menu.png
Binary files differ
diff --git a/help/C/figures/screenshot_prefs_images.png b/help/C/figures/screenshot_prefs_images.png
index 2da3fbd7..f33c07bd 100644
--- a/help/C/figures/screenshot_prefs_images.png
+++ b/help/C/figures/screenshot_prefs_images.png
Binary files differ
diff --git a/help/C/figures/screenshot_prefs_tools.png b/help/C/figures/screenshot_prefs_tools.png
index 535e0b30..d0e294bb 100644
--- a/help/C/figures/screenshot_prefs_tools.png
+++ b/help/C/figures/screenshot_prefs_tools.png
Binary files differ
diff --git a/help/C/figures/screenshot_saturate.png b/help/C/figures/screenshot_saturate.png
deleted file mode 100644
index ff93aa15..00000000
--- a/help/C/figures/screenshot_saturate.png
+++ /dev/null
Binary files differ
diff --git a/help/C/figures/screenshot_scale.png b/help/C/figures/screenshot_scale.png
new file mode 100644
index 00000000..56297a41
--- /dev/null
+++ b/help/C/figures/screenshot_scale.png
Binary files differ
diff --git a/help/C/figures/screenshot_selection.png b/help/C/figures/screenshot_selection.png
index f9607445..33e91f8b 100644
--- a/help/C/figures/screenshot_selection.png
+++ b/help/C/figures/screenshot_selection.png
Binary files differ
diff --git a/help/C/figures/screenshot_text.png b/help/C/figures/screenshot_text.png
new file mode 100644
index 00000000..45ce1540
--- /dev/null
+++ b/help/C/figures/screenshot_text.png
Binary files differ
diff --git a/help/C/figures/screenshot_zoom.png b/help/C/figures/screenshot_zoom.png
new file mode 100644
index 00000000..bb435022
--- /dev/null
+++ b/help/C/figures/screenshot_zoom.png
Binary files differ
diff --git a/help/C/index.page b/help/C/index.page
index 2f4a407e..a42cb439 100644
--- a/help/C/index.page
+++ b/help/C/index.page
@@ -4,7 +4,7 @@
<info>
<title type="text">Drawing</title>
- <revision pkgversion="0.6.0" date="2020-01-13"/>
+ <revision pkgversion="0.6.0" date="2020-09-01"/>
<credit type="author">
<name>Romain F. T.</name>
<years>2018-2020</years>
@@ -13,10 +13,8 @@
</info>
<title>
- <media type="image" mime="image/png"
- src="figures/icon.png"
- height="48"
- its:translate="no"/>
+ <media type="image" mime="image/png" height="48" its:translate="no"
+ src="figures/icon.png" />
Drawing
</title>
diff --git a/help/C/legal.xml b/help/C/legal.xml
index aa36246c..efacd5ed 100644
--- a/help/C/legal.xml
+++ b/help/C/legal.xml
@@ -6,3 +6,4 @@
Attribution-ShareAlike 3.0 Unported License</link>.</p>
</license>
+
diff --git a/help/C/main_features.page b/help/C/main_features.page
index 49efdd27..3bdb0e97 100644
--- a/help/C/main_features.page
+++ b/help/C/main_features.page
@@ -17,35 +17,40 @@
<p>"Drawing" is a basic drawing application for the GNOME desktop, which can
edit or create pictures (PNG, JPEG or BMP).</p>
- <p>Basic features are located in the header of the window, such as the
- <gui style="button">Open</gui> button, the <gui style="button">Save</gui>
- button, and the main menu.</p>
+
+ <note style="tip">
+ <p>Many features described here are located in the header of the window, but
+ the exact layout of the app depends on your desktop environment. Screenshots
+ are provided for a standard GNOME environment.</p>
+ </note>
<section>
<title>The "Open" button</title>
<p>Open a picture file from your documents.</p>
- <p>If the window size is too small to display its button, the
- <gui style="button">Open</gui> button is available in the primary menu.</p>
+ <p>If the window size is too small to display the <gui style="button">Open</gui>
+ button, it's available in the primary menu.</p>
</section>
<section>
<title>The "New Image" menu</title>
- <p>This menu allows you to create a new image. Several options are
+ <p>The goal of this menu is to create a new image. Several options are
available:</p>
<list>
<item>
- <p>Create a new blank image, in a new tab. Such an new image can use the
- <link xref="preferences">default size and background color</link>, or
- you can set custom values.</p>
+ <p>Create a new blank image, in a new tab. This new image will use the
+ <link xref="preferences">default size and background color</link>.</p>
+ </item>
+ <item>
+ <p>Create a new blank image, with a custom size and background color.</p>
</item>
<item>
<p>Create a new image from the current <link xref="tools_selection">
selection</link>.</p>
</item>
<item>
- <p>Create a new image from the clipboard content.</p>
+ <p>Create a new image from the current clipboard content.</p>
</item>
<item>
<p>Open a new window with a new blank image.</p>
@@ -58,8 +63,9 @@
<section id="main-menu">
<title>The primary menu</title>
- <media type="image" mime="image/png" width="80%"
- src="figures/screenshot_menu.png" its:translate="no"/>
+ <media type="image" mime="image/png" width="80%" its:translate="no"
+ src="figures/screenshot_menu.png" />
+
<list>
<item>
<p>Reload the picture from the disk.</p>
@@ -80,6 +86,10 @@
<p>Print the picture.</p>
</item>
<item>
+ <p>Copy the picture to the clipboard, for example to share it with an
+ other app.</p>
+ </item>
+ <item>
<p>Show tools names. Edit <link xref="preferences">preferences</link>.</p>
</item>
</list>
@@ -88,20 +98,42 @@
<section>
<title>Editing</title>
- <p>You can edit the opened picture with the <link xref="tools_classic">tools
- </link> in the side bar. The <gui style="button">Undo</gui> and
- <gui style="button">Redo</gui> buttons are located in the header of the
- window.</p>
+ <p>You can edit the picture with the tools in the side bar. There are
+ several types of tools:</p>
+ <list>
+ <item>
+ <p>The <link xref="tools_classic">classic tools</link>, such as pencils,
+ shapes, or text insertion.</p>
+ </item>
+ <item>
+ <p>The various types of <link xref="tools_selection">selection</link>,
+ to define a part of the picture you want to move or edit further with
+ the following tools:</p>
+ </item>
+ <item>
+ <p>Finally, <link xref="tools_transform">some tools</link> can transform
+ either the selection or the entire canvas. This includes cropping,
+ rotating, scaling, or applying a filter.</p>
+ </item>
+ </list>
+ <p>With the related buttons in the header of the window, you can
+ <gui style="button">Undo</gui> (and then <gui style="button">Redo</gui>)
+ any edit you just did.</p>
+ <p>In the bottom bar, each tool can provide various options and actions.</p>
</section>
<section>
- <title>Preview and zoom</title>
+ <title>Zoom and thumbnail preview</title>
- <p>In the bottom bar, the <gui style="button">Preview</gui> button (not
- available with <link xref="tools_canvas">some tools</link>) displays a
- thumbnail of the full picture you're editing.</p>
- <p>This preview provides zoom controls, and its button shows the current
- zoom level as its label.</p>
+ <p>Also in the bottom bar, the <gui style="button">Preview</gui> button
+ (available with <link xref="tools_classic">most tools</link>) displays the
+ current zoom level.</p>
+ <p>Clicking on this button opens a menu with a thumbnail of the full picture
+ you're editing, along with zoom level controls.</p>
+
+ <media type="image" mime="image/png" width="80%" its:translate="no"
+ src="figures/screenshot_zoom.png" />
</section>
</page>
+
diff --git a/help/C/preferences.page b/help/C/preferences.page
index 4864862c..0bc9237e 100644
--- a/help/C/preferences.page
+++ b/help/C/preferences.page
@@ -15,72 +15,80 @@
<title>Preferences</title>
- <p>The preferences dialog is splitted into 3 tabs.</p>
+ <p>The preferences dialog is splitted into 3 parts.</p>
<section>
<title>Image</title>
- <table rules="colgroups">
- <tr>
- <td>
- <media type="image" mime="image/png" width="100%" its:translate="no"
- src="figures/screenshot_prefs_images.png" />
- </td>
- <td>
- <p>Here you can choose the size and color of the default canvas used
- when creating a new file.</p>
-
- <p>When a file is saved to the JPEG or the BMP file format, the
- transparency can't be kept. The application can replace the
- transparent pixels with something else: it can be white, black, or a
- checkboard of greys.</p>
- <p>If the replacement you want depends on the image, it's also
- possible to open a dialog every time you save an image to one of these
- file formats: the choices available in that dialog will also be white,
- black, or a checkboard of greys.</p>
-
- <p>You can also set how you want to zoom on the image: it can be with
- <key>Ctrl</key> and the mouse wheel, or only with the mouse wheel.</p>
- </td>
- </tr>
- </table>
+
+ <p>You can choose the size and color of the default canvas used when
+ creating a new file.</p>
+
+ <p>When a file is saved to the JPEG or the BMP file format, the transparency
+ can't be kept. The application can replace the transparent pixels with
+ something else: it can be white, black, or a checkboard of greys.</p>
+ <p>The option "default color" corresponds to the initial color of the
+ canvas, which is usually the "default color" setting available in the
+ previous section.</p>
+ <p>If the replacement you want depends on the image, it's also possible to
+ open a dialog every time you save an image to one of these file formats: the
+ choices available in that dialog will also be white, black, or a checkboard
+ of greys.</p>
+
+ <media type="image" mime="image/png" width="80%" its:translate="no"
+ src="figures/screenshot_prefs_images.png" />
+
+ <p>You can also set how you want to zoom on the image: by default, scrolling
+ on the canvas <em>moves the current view</em> in the direction of the
+ scrolling, and scrolling while holding the <key>Ctrl</key> key <em>zooms in
+ or out</em>. You can turn off the switch to invert these behaviors.</p>
+
+ <p>If you rely on an old-school mouse, it's pertinent to turn this setting
+ off: the mouse wheel will then directly zoom in and out. To browse the
+ image, you can move your mouse on the canvas while you hold its middle
+ button: it'll to move the current view in any direction.</p>
+
+ <p>If you have a trackpad, or a touchscreen, it's recommended to keep using
+ the <key>Ctrl</key> key to zoom (default behavior): with such a device,
+ you're able to intuitively scroll in both directions to browse the entire
+ image. If your device supports multi-touch gestures, you'll even be able to
+ zoom in and out using the default <em>touch gestures (stretch or pinch with
+ two fingers)</em>, which will not work if you turn off this setting.</p>
+ <p>Of course, it's always possible to control the zoom level with the
+ keyboard shortcuts, or the buttons under the thumbnail preview.</p>
</section>
- <section>
+ <section id="tools">
<title><link xref="tools_classic">Tools</link></title>
- <table rules="colgroups">
- <tr>
- <td>
- <p>You can set whether you prefer normal icons (16 pixels) or large
- icons (24 pixels).</p>
- <p>Choosing whether or not you want to display the names of the tools
- next to their icons is possible here, and it's also available from the
- <link xref="main_features#main-menu">primary menu</link> of the
- window.</p>
-
- <p>A few additional tools are also available. If they're not activated
- by default, it's because they might be less reliable or useful.</p>
- </td>
- <td>
- <media type="image" mime="image/png" width="100%" its:translate="no"
- src="figures/screenshot_prefs_tools.png" />
- <!-- TODO outdated -->
- </td>
- </tr>
- </table>
+ <p>You can set whether you prefer normal icons (16 pixels) or large icons
+ (24 pixels).</p>
+ <p>Choosing whether or not you want to display the names of the tools next
+ to their icons is possible here, and it's also available from the
+ <link xref="main_features#main-menu">primary menu</link> of the window.</p>
+
+ <p>A few additional tools are also available. If they're not activated by
+ default, it's because they might be less reliable or useful.</p>
+
+ <media type="image" mime="image/png" width="80%" its:translate="no"
+ src="figures/screenshot_prefs_tools.png" />
</section>
<section>
<title>Window</title>
- <p>It's possible to choose the layout of the user interface: the
+ <p>Here you can set the size of the thumbnail preview, but using a bigger
+ preview is not recommended for technical reasons.</p>
+
+ <p>You can also set the color of the background "behind" the canvas.</p>
+
+ <p>Finally, it's possible to choose the layout of the user interface: the
"Compact" layout, designed for the GNOME desktop, is well tested. Other
options include the "elementary OS" layout, designed for the elementary OS
desktop, and the traditional layout, for MATE or Cinnamon desktop.</p>
- <p>"Symbolic icons" means that the icons are monochrome (black if you use a
- light theme, or white if you use a dark theme.</p>
- <p>You can also set the size of the thumbnail preview, but using a bigger
- preview is not recommended for technical reasons.</p>
+ <p>In this context,"symbolic icons" means that the icons are monochrome
+ (black if you use a light theme, or white if you use a dark theme).
+ Otherwise they can be colorful (depending on your theme).</p>
</section>
</page>
+
diff --git a/help/C/tools_canvas.page b/help/C/tools_canvas.page
deleted file mode 100644
index 0a283ba0..00000000
--- a/help/C/tools_canvas.page
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:its="http://www.w3.org/2005/11/its" type="task" style="task"
- id="tools_canvas">
-
- <info>
- <link type="guide" xref="index#tools"/>
- <include xmlns="http://www.w3.org/2001/XInclude" href="legal.xml"/>
- <credit type="author">
- <name>Romain F. T.</name>
- <email its:translate="no">rrroschan@gmail.com</email>
- </credit>
- <desc>Transform the image canvas or the current selection</desc>
- </info>
-
- <title>Edit the canvas or the selection</title>
-
- <p>These tools are available from the side bar (along with
- <link xref="tools_classic">the other tools</link>), or from a right click on
- a <link xref="tools_selection">selected area</link>.</p>
- <p>If a selection is defined, these tools will have an effect on the selected
- area, otherwise they will have an effect on the picture as a whole.</p>
-
- <p>After finding the value you need, you have to apply the result with the
- <gui style="button">Apply</gui> button at the right. Otherwise you can cancel
- the edition with the <gui style="button">Cancel</gui> button at the left.</p>
-
- <section>
- <title>Crop</title>
-
- <p>Change the size of the image, by removing parts of it. The side you're
- cropping is indicated by the mouse cursor: it changes depending on the
- position of the mouse pointer on the canvas.</p>
- <p>The exact size can be set using the values in the bottom bar.</p>
- <p>If your increasing the size of the image instead of decreasing it, you
- may need to change the zoom level.</p>
- </section>
-
- <section>
- <title>Scale</title>
-
- <p>Resize the image, using the mouse or the values in the bottom bar.</p>
- <p>Proportions can be locked or not.</p>
- <!-- TODO illustration -->
- </section>
-
- <!-- TODO skew ? -->
-
- <section>
- <title>Rotate</title>
-
- <p>Change the orientation of the image, or flip it, using the buttons in the
- bottom bar.</p>
- <p>If a selection is defined, you can freely choose the precise angle of the
- rotation.</p>
- </section>
-
- <section>
- <title>Filters</title>
-
- <p>You can apply a filter to the image or the selection. Click on the
- picture to preview the selected filter.</p>
- <list>
- <item>
- <p><gui style="menuitem">Saturation</gui> allows you to increase of
- decrease the saturation of the image by modifying the number in the
- bottom bar.</p>
- <media type="image" mime="image/png" width="80%"
- src="figures/screenshot_saturate.png" its:translate="no"/>
- <p>A saturation bigger than 100% will boost the colors, a saturation
- smaller than 100% will produce a greyish image.</p>
- </item>
- <item>
- <p><gui style="menuitem">Blur</gui>, and several variations of it, will
- blur the image using a parametrable radius which be modified in the same
- way.</p>
- <p>Be careful, applying blur to the image can take a few seconds.</p>
- </item>
- <item>
- <p><gui style="menuitem">Pixelate</gui></p>
- </item>
- <item>
- <p><gui style="menuitem">Invert colors</gui></p>
- </item>
- <item>
- <p><gui style="menuitem">Transparency</gui> can make the image partly
- translucent, according to the percentage in the bottom bar.</p>
- </item>
- </list>
- </section>
-
-</page>
diff --git a/help/C/tools_classic.page b/help/C/tools_classic.page
index 587eca4d..74421c3c 100644
--- a/help/C/tools_classic.page
+++ b/help/C/tools_classic.page
@@ -28,20 +28,28 @@
Click on these buttons to change their respective colors:</p>
<table rules="colgroups">
+ <!-- Unusual width because the pics are in a table, side-by-side, with -->
+ <!-- different aspect ratios. -->
<tr>
<td>
- <media type="image" mime="image/png" width="100%" its:translate="no" />
- <!-- src="figures/screenshot_prefs_tools.png" /> TODO -->
+ <media type="image" mime="image/png" width="100%" its:translate="no"
+ src="figures/screenshot_color_palette.png" />
</td>
<td>
- <media type="image" mime="image/png" width="100%" its:translate="no" />
- <!-- src="figures/screenshot_prefs_tools.png" /> TODO -->
+ <media type="image" mime="image/png" width="60%" its:translate="no"
+ src="figures/screenshot_color_editor.png" />
</td>
</tr>
</table>
- <p>At the top of the palette, you can select the way the color will be
- applied to the image:</p>
+ <note style="tip">
+ <p>If the exact color you want isn't listed in the palette (picture at the
+ left), click the <gui style="button">+</gui> button to use the color
+ editor (picture at the right).</p>
+ </note>
+
+ <p><em>With compatible tools</em>, you can select at the top of the palette
+ the way the color will be applied to the image:</p>
<list>
<item>
<p>Normal: the selected color is added over the existing image. If your
@@ -54,72 +62,93 @@
would be semi-transparent yellow.</p>
</item>
<item>
- <p>Highlight: ...</p>
- <!-- TODO -->
- </item>
- <item>
- <p>Difference: ...</p>
- <!-- TODO -->
+ <p>Highlight: the selected color is added to the lighter pixels only,
+ which highlights dark text on light background.</p>
</item>
<item>
- <p>Replace hue: ...</p>
- <!-- TODO -->
+ <p>Difference: the resulting color is the difference between the
+ selected color and the existing pixels.</p>
</item>
<item>
- <p>Replace color: ...</p>
- <!-- TODO -->
+ <p>Photo-oriented mode: these options don't make much sense when you're
+ drawing something, but they can help you when editing photos.</p>
+ <note style="advanced">
+ <p>The idea is to apply <em>only</em> a dimension of the current color
+ in the hue-saturation-luminosity representation, and not the other
+ ones.</p>
+ </note>
+ <p>For example, you can draw with a red hue but not affect the
+ luminosity of the existing pixels; or draw with a light luminosity but
+ not affect the hue of the existing pixels.</p>
+ <media type="image" mime="image/png" width="80%" its:translate="no"
+ src="figures/screenshot_hsl.png" />
</item>
<item>
- <p>Blur: blurs the hovered pixels regardless of the selected color.</p>
+ <p>Blur: blurs the hovered pixels regardless of the selected color. The
+ quality of this blur is far behind the blurring you can get using the
+ <link xref="tools_transform#filters">"Filters" tool</link>.</p>
</item>
<item>
<p>Erase: deletes any color where the tool is applied.</p>
+ <note style="tip">
+ <p>The same result can be achieved used the <link xref="preferences#tools">
+ optional</link> <gui style="menuitem">Eraser</gui> tool.</p>
+ </note>
</item>
</list>
- <p>If the exact color you want isn't listed in the palette, click the
- <gui style="button">+</gui> button to use the color editor.</p>
- <p>An optional <gui style="button">Color Picker</gui> tool can also help you
- to select a color. While the color picker from within the color editor can
- select a RGB color anywhere on the screen, the <gui style="menuitem">Color
- Picker</gui> tool support translucent colors but only works for pixels from
- the image.</p>
+ <note style="warning">
+ <p>Not all tools are compatible with these color application modes!</p>
+ </note>
+
+ <p>An <link xref="preferences#tools">optional</link> <gui style="button">
+ Color Picker</gui> tool can also help you to select a color.
+ While the color picker from within the color editor can select a RGB color
+ anywhere on the screen, the <gui style="menuitem">Color Picker</gui> tool
+ support translucent colors but only works for pixels from the image.</p>
</section>
<section>
<title>Draw things</title>
- <p>Most options for these tools concern the ends of the line: it can be
- thin, rounded or square. You can also draw a dashed lines.</p>
+ <p>Aside of the colors, most options for these tools concern the ends of the
+ line: it can be thin, rounded or square. You can also draw dashed lines.</p>
<list>
<item>
<p>Pencil: The pencil draws following the pointer, and according to the
chosen color.</p>
- <p>Don't forget you can use the "eraser" mode from the color menu to
- delete existing colors, or the "blur" mode to blur parts of the image!</p>
+ <note style="tip">
+ <p>Using the "eraser" mode from the color menu, the pencil can delete
+ all existing colors. Using the "highlight" mode and a semi-transparent
+ color, it can also highlight text. For this reason, the two next tools
+ are <link xref="preferences#tools">disabled by default</link>.</p>
+ </note>
</item>
<item>
<p>Eraser: Ignore the current color settings and just erase to get fully
transparent pixels.</p>
- <p>This tool is disabled by default.</p>
</item>
<item>
- <p>Highlighter: Ignore some of the color settings, and draw ("normal"
- mode) with a semi-transparent version of the current color.</p>
- <p>This tool is disabled by default.</p>
+ <p>Highlighter: Ignore some of the color settings, and draw with a
+ semi-transparent version of the current color.</p>
+ <p>The "highlight" color application mode is used, so the selected color
+ is added to the lighter pixels only, which highlights dark text on light
+ background. An option can be used to do the opposite (highlight light
+ text on dark background).</p>
</item>
<item>
<p>Line: This tool can draw straight lines. Its options also include
ending the line with an arrow, and using a gradient from the main color
to the secondary color.</p>
- <p>Don't forget you can use the "blur" mode from the color menu to hide
- text!</p>
+ <note style="tip">
+ <p>You can use the "blur" mode from the color menu to hide text!</p>
+ </note>
</item>
<item>
<p>Curve: This tool can draw Bézier curves, optionally with an arrow at
the end. Two clicks are required, if you only click once to draw a
straight line, that line is drawn temporarily until a second click.</p>
- <media type="image" mime="image/png" width="80%"
- src="figures/screenshot_arc.png" its:translate="no"/>
+ <media type="image" mime="image/png" width="80%" its:translate="no"
+ src="figures/screenshot_arrow.png" />
</item>
</list>
</section>
@@ -129,37 +158,57 @@
<p>With the <gui style="menuitem">Text</gui> tool, you can insert text on
the image. A few formatting options are available in the options menu, such
- as "italic", "bold", or a basic font type option.</p>
+ as "italic", "bold", or a basic font family selection.</p>
+
<p>For better contrast, the text can be displayed on a rectangle background,
or with a shadow, or with an outline. The color of this background is the
secondary color you chose.</p>
- <p>Don't forget to confirm the insertion using the <gui style="button">
- Insert here</gui> button.</p>
- <!-- TODO illustration -->
+
+ <media type="image" mime="image/png" width="80%" its:translate="no"
+ src="figures/screenshot_text.png" />
+
+ <note style="tip">
+ <p>Don't forget to confirm the insertion using the <gui style="button">
+ Insert here</gui> button.</p>
+ </note>
+
+ <p>An optional tool named <gui style="menuitem">Points</gui> is designed to
+ help you captioning pictures: you can add numbered round dots or crosses to
+ elements of the picture.</p>
</section>
<section>
<title>Fill an area</title>
- <p>......</p>
- <!-- TODO illustration -->
+ <p>To paint an area using a given color, several tools can be used:</p>
<list>
<item>
- <p>Shapes: Available shapes include rectangle, oval, circle, polygon, and
- free shape.</p>
- <p>Polygons and free shapes can be drawn in several clicks. To close them,
- do a last click at the position where you began the line, or use the
- <gui style="menuitem">Close shape</gui> menu item.</p>
- <p>Various filling options are available, with or without an outline,
- using a plain color or a gradient.</p>
- <!-- TODO explain options -->
+ <p>Shapes. Available shapes include rectangle, rounded rectangle, oval,
+ circle, polygon, and free shape.</p>
+ <p>Polygons and free shapes are drawn in several clicks. To close them,
+ do a last click at the position where you began the shape, or use
+ the <gui style="menuitem">Close shape</gui> menu item.</p>
+ <p>Various filling options are available (using a plain color, or a
+ gradient, or nothing), as well as outline options (using a plain
+ outline, dashes, or nothing).</p>
</item>
<item>
- <p>Paint. This tool tries to paint an area with a color, which doesn't
- always work as expected so this tool is disabled by default. It can use
- three possible algorithms: ......</p>
- <!-- TODO -->
+ <p>Paint. This tool tries to paint an area of a given color with a new
+ color.</p>
+ <note style="warning">
+ <p>This tool is disabled by default, because it will not work if the
+ shape to paint is too complex.</p>
+ </note>
+ <p>It can use several possible algorithms: <gui style="menuitem">
+ Encircle and fill</gui> is very simplistic and discouraged,
+ <gui style="menuitem">Erase and replace</gui> should work better, but
+ still fails in a few situations.</p>
+ <p>The <gui style="menuitem">Entire image</gui> option paints over the
+ the entire image, regardless of what's already drawn.</p>
+ <p><gui style="menuitem">Erase color</gui> doesn't paint but erase the
+ color you clicked, on the entire image, for example to cut out an image
+ from its white background.</p>
</item>
</list>
</section>
@@ -169,8 +218,10 @@
<p>The <link xref="tools_selection">selection tools</link> don't draw, but
their capabilities are very powerful and useful for any image editing.</p>
- <p><link xref="tools_canvas">Other tools</link> allow you to transform the
- canvas or the selected area.</p>
+
+ <p>Use these special tools to <link xref="tools_transform">transform the
+ canvas or the selected area</link>.</p>
</section>
</page>
+
diff --git a/help/C/tools_selection.page b/help/C/tools_selection.page
index 39048866..47d49248 100644
--- a/help/C/tools_selection.page
+++ b/help/C/tools_selection.page
@@ -19,12 +19,9 @@
<title>Selecting an area</title>
<p>Tools such as <gui style="button">Rectangle Selection</gui> or <gui
- style="button">Free Selection</gui> which are available in the side bar
- (along with <link xref="tools_classic">the other tools</link>), allow you to
- define a part of the image for further manipulations.</p>
- <p>A tool named <gui style="button">Color Selection</gui> also exists, and
- tries to select an area according to its color, but it doesn't always work
- as expected so this tool is disabled by default.</p>
+ style="button">Free Selection</gui> are available in the side bar, along
+ with <link xref="tools_classic">the other tools</link>. You can use them
+ to define a part of the image for further manipulations.</p>
<p>Aside of defining the contour of an area with the mouse, the selection
can also be created in various ways:</p>
@@ -39,25 +36,32 @@
<p>Right-click, <gui style="menuitem">Select all</gui>.</p>
</item>
</list>
+
+ <note style="tip">
+ <p>A tool named <gui style="button">Color Selection</gui> also exists, and
+ tries to select an area according to its color, but it doesn't always work
+ as expected so this tool is <link xref="preferences#tools">disabled by
+ default</link>.</p>
+ </note>
</section>
<section>
<title>Using the selection</title>
<p>Once the selection is defined, you can then perform various actions with
- this area:</p>
+ this selected area:</p>
<list>
<item>
<p>Move it on the canvas.</p>
</item>
<item>
- <p>Cut or copy it to the clipboard.</p>
+ <p>Copy it (or cut it) to the clipboard.</p>
</item>
<item>
- <p>Edit it with <link xref="tools_canvas">tools</link>. You can access
- the compatible tools with a right-click on the selection.</p>
- <media type="image" mime="image/png" width="80%"
- src="figures/screenshot_selection.png" its:translate="no"/>
+ <p>Transform it with tools. <link xref="tools_transform">The compatible
+ tools</link> can be accessed with a right-click on the selection.</p>
+ <media type="image" mime="image/png" width="80%" its:translate="no"
+ src="figures/screenshot_selection.png" />
</item>
<item>
<p>Delete it.</p>
@@ -74,3 +78,4 @@
</section>
</page>
+
diff --git a/help/C/tools_transform.page b/help/C/tools_transform.page
new file mode 100644
index 00000000..f4cd92d6
--- /dev/null
+++ b/help/C/tools_transform.page
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="utf-8"?>
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:its="http://www.w3.org/2005/11/its" type="task" style="task"
+ id="tools_transform">
+
+ <info>
+ <link type="guide" xref="index#tools"/>
+ <include xmlns="http://www.w3.org/2001/XInclude" href="legal.xml"/>
+ <credit type="author">
+ <name>Romain F. T.</name>
+ <email its:translate="no">rrroschan@gmail.com</email>
+ </credit>
+ <desc>Apply a transformation to the image or the current selection</desc>
+ </info>
+
+ <title>Transform the image or the selection</title>
+
+ <p>These tools are available from the side bar (along with
+ <link xref="tools_classic">the other tools</link>), or from a right click on
+ a <link xref="tools_selection">selected area</link>.</p>
+ <p>If a selection is defined, these tools will have transform the selected
+ area, otherwise they will transform the picture as a whole.</p>
+
+ <note style="important">
+ <p>With these tools, once you have the transformation you want, you should
+ apply the result with the <gui style="button">Apply</gui> button at the
+ right.</p>
+ <p>Otherwise you can cancel the transformation with the <gui style="button">
+ Cancel</gui> button at the left.</p>
+ </note>
+ <note style="tip">
+ <p>When you change the current tool without applying explicitely, the
+ transformation will be automatically applied if it concerns the selection,
+ but cancelled if it concerns the whole image.</p>
+ <p>If you try to save without applying the transformation, a dialog will
+ remind you that you should apply it before saving.</p>
+ </note>
+
+ <section>
+ <title>Crop</title>
+
+ <p>Change the size of the image, by removing parts of it. The side you're
+ cropping is indicated by the mouse cursor: it changes depending on the
+ position of the mouse pointer on the canvas.</p>
+ <p>The exact size can be set using the values in the bottom bar.</p>
+ <p>If your increasing the size of the image instead of decreasing it, you
+ may need to change the zoom level. The color of the pixels you create when
+ increasing the size is customizable.</p>
+ </section>
+
+ <section>
+ <title>Scale</title>
+
+ <p>Resize the image, using the mouse or the values in the bottom bar.</p>
+ <p>Proportions can be locked or not, using the menu at the bottom-right.</p>
+
+ <media type="image" mime="image/png" width="80%" its:translate="no"
+ src="figures/screenshot_scale.png" />
+ </section>
+
+ <!-- XXX skew (later) -->
+
+ <section>
+ <title>Rotate</title>
+
+ <p>Change the orientation of the image, or flip it, using the buttons in the
+ bottom bar.</p>
+ <p>If a selection is defined, you can freely choose the precise angle of the
+ rotation. Otherwise, only rotations of 90°, 180° or 270° are possible.</p>
+ </section>
+
+ <section id="filters">
+ <title>Filters</title>
+
+ <p>You can apply a filter to the image or the selection. Click on the
+ picture to preview the selected filter.</p>
+ <list>
+ <item>
+ <p>Change the <gui style="menuitem">Saturation</gui>: increase or
+ decrease the saturation of the image by modifying the number in the
+ bottom bar.</p>
+ <p>A saturation bigger than 100% boosts the colors, a saturation smaller
+ than 100% does a greyish image.</p>
+ </item>
+ <item>
+ <p><gui style="menuitem">Veil</gui> will add a slightly desaturated veil
+ upon the image, with a thin pixelated pattern.</p>
+ </item>
+ <item>
+ <p><gui style="menuitem">Transparency</gui> can make the image partly
+ translucent, according to the percentage in the bottom bar.</p>
+ </item>
+ <item>
+ <p><gui style="menuitem">Invert colors</gui>.</p>
+ </item>
+ <item>
+ <p><gui style="menuitem">Blur</gui>, and several variations of it, will
+ blur the image using a parametrable radius.</p>
+ <note style="warning">
+ <p>Be careful, applying blur to the image can take a few seconds.</p>
+ </note>
+ </item>
+ </list>
+
+ <p>Here is an example of filters applied on small areas of an image:</p>
+ <media type="image" mime="image/png" width="80%" its:translate="no"
+ src="figures/screenshot_filters.png" />
+ </section>
+
+</page>
+
diff --git a/help/meson.build b/help/meson.build
index 2d5f633c..f6a0c02c 100644
--- a/help/meson.build
+++ b/help/meson.build
@@ -1,21 +1,29 @@
-gnome = import('gnome')
-gnome.yelp(meson.project_name(),
- sources: [
- 'index.page',
- 'main_features.page',
- 'preferences.page',
- 'tools_classic.page',
- 'tools_selection.page',
- 'tools_canvas.page',
- 'legal.xml'
- ],
- media: [
- 'figures/icon.png',
- 'figures/screenshot_arc.png',
- 'figures/screenshot_menu.png',
- 'figures/screenshot_prefs_images.png',
- 'figures/screenshot_prefs_tools.png',
- 'figures/screenshot_selection.png',
- 'figures/screenshot_saturate.png'
- ]
+
+gnome.yelp(
+ meson.project_name(),
+ sources: [
+ 'index.page',
+ 'main_features.page',
+ 'preferences.page',
+ 'tools_classic.page',
+ 'tools_selection.page',
+ 'tools_transform.page',
+ 'legal.xml'
+ ],
+ media: [
+ 'figures/icon.png',
+ 'figures/screenshot_arrow.png',
+ 'figures/screenshot_color_editor.png',
+ 'figures/screenshot_color_palette.png',
+ 'figures/screenshot_filters.png',
+ 'figures/screenshot_hsl.png',
+ 'figures/screenshot_menu.png',
+ 'figures/screenshot_prefs_images.png',
+ 'figures/screenshot_prefs_tools.png',
+ 'figures/screenshot_scale.png',
+ 'figures/screenshot_selection.png',
+ 'figures/screenshot_text.png',
+ 'figures/screenshot_zoom.png'
+ ]
)
+
diff --git a/meson.build b/meson.build
index e6222bdc..bb9ba4e3 100644
--- a/meson.build
+++ b/meson.build
@@ -1,14 +1,32 @@
+
project(
'drawing',
- version: '0.5.3',
+ version: '0.6.4',
meson_version: '>= 0.50.0',
)
+app_uuid = 'com.github.maoschanz.drawing'
+
+# Dependencies #################################################################
+
+# XXX the proper way to check python3 libs dependencies is this:
+# https://mesonbuild.com/Python-module.html#dependency but the doc is quite bad
+# so i've no idea how to make it work
+
+################################################################################
+
+# Will be used in po and data
i18n = import('i18n')
+# Will be used in help and src
+gnome = import('gnome')
+
subdir('data')
subdir('help')
subdir('src')
subdir('po')
meson.add_install_script('build-aux/meson/postinstall.py')
+
+################################################################################
+
diff --git a/po/LINGUAS b/po/LINGUAS
index 5c004873..ed21dcb5 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -1,13 +1,16 @@
# please keep this list sorted alphabetically
#
+cs
da
de_DE
es
+eu
fi
fr
he
hr
hu
+id
it
nl
pl
@@ -15,4 +18,6 @@ pt_BR
ru
sv
tr
+zh_CN
+zh_TW
diff --git a/po/POTFILES b/po/POTFILES
index 8451e78c..9be139e3 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -23,6 +23,7 @@ src/main.py
src/minimap.py
src/preferences.py
src/properties.py
+src/saving_manager.py
src/utilities.py
src/window.py
@@ -35,34 +36,36 @@ src/optionsbars/abstract_optionsbar.py
src/optionsbars/classic/optionsbar_classic.py
src/optionsbars/classic/optionsbar_color_popover.py
src/optionsbars/selection/optionsbar_selection.py
-src/optionsbars/canvas/optionsbar_crop.py
-src/optionsbars/canvas/optionsbar_filters.py
-src/optionsbars/canvas/optionsbar_rotate.py
-src/optionsbars/canvas/optionsbar_scale.py
-src/optionsbars/canvas/optionsbar_skew.py
+src/optionsbars/transform/optionsbar_crop.py
+src/optionsbars/transform/optionsbar_filters.py
+src/optionsbars/transform/optionsbar_rotate.py
+src/optionsbars/transform/optionsbar_scale.py
+src/optionsbars/transform/optionsbar_skew.py
src/optionsbars/classic/optionsbar-classic.ui
src/optionsbars/classic/optionsbar-color-popover.ui
src/optionsbars/selection/optionsbar-selection.ui
-src/optionsbars/canvas/optionsbar-crop.ui
-src/optionsbars/canvas/optionsbar-filters.ui
-src/optionsbars/canvas/optionsbar-rotate.ui
-src/optionsbars/canvas/optionsbar-scale.ui
-src/optionsbars/canvas/optionsbar-skew.ui
+src/optionsbars/transform/optionsbar-crop.ui
+src/optionsbars/transform/optionsbar-filters.ui
+src/optionsbars/transform/optionsbar-rotate.ui
+src/optionsbars/transform/optionsbar-scale.ui
+src/optionsbars/transform/optionsbar-skew.ui
+src/tools/ui/selection.ui
src/tools/ui/tool-arc.ui
+src/tools/ui/tool-crop.ui
src/tools/ui/tool-experiment.ui
+src/tools/ui/tool-filters.ui
+src/tools/ui/tool-highlight.ui
src/tools/ui/tool-line.ui
src/tools/ui/tool-paint.ui
src/tools/ui/tool-pencil.ui
-src/tools/ui/tool-shape.ui
-src/tools/ui/tool-text.ui
-src/tools/ui/selection.ui
-src/tools/ui/tool-crop.ui
-src/tools/ui/tool-filters.ui
+src/tools/ui/tool-points.ui
src/tools/ui/tool-rotate.ui
src/tools/ui/tool-scale.ui
+src/tools/ui/tool-shape.ui
src/tools/ui/tool-skew.ui
+src/tools/ui/tool-text.ui
src/tools/classic_tools/abstract_classic_tool.py
src/tools/classic_tools/tool_arc.py
@@ -71,6 +74,7 @@ src/tools/classic_tools/tool_highlight.py
src/tools/classic_tools/tool_line.py
src/tools/classic_tools/tool_paint.py
src/tools/classic_tools/tool_pencil.py
+src/tools/classic_tools/tool_points.py
src/tools/classic_tools/tool_picker.py
src/tools/classic_tools/tool_shape.py
src/tools/classic_tools/tool_text.py
@@ -80,10 +84,10 @@ src/tools/selection_tools/select_color.py
src/tools/selection_tools/select_free.py
src/tools/selection_tools/select_rect.py
-src/tools/canvas_tools/abstract_canvas_tool.py
-src/tools/canvas_tools/tool_crop.py
-src/tools/canvas_tools/tool_filters.py
-src/tools/canvas_tools/tool_rotate.py
-src/tools/canvas_tools/tool_scale.py
-src/tools/canvas_tools/tool_skew.py
+src/tools/transform_tools/abstract_transform_tool.py
+src/tools/transform_tools/tool_crop.py
+src/tools/transform_tools/tool_filters.py
+src/tools/transform_tools/tool_rotate.py
+src/tools/transform_tools/tool_scale.py
+src/tools/transform_tools/tool_skew.py
diff --git a/po/cs.po b/po/cs.po
new file mode 100644
index 00000000..db9ac759
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,2025 @@
+# Language xx translations for drawing package.
+# Copyright (C) 2020 THE drawing'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the drawing package.
+# Vojtěch Perník <v.pernik@centrum.cz>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: drawing\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
+"PO-Revision-Date: 2020-11-25 18:15+0100\n"
+"Last-Translator: Vojtěch Perník <v.pernik@centrum.cz>\n"
+"Language-Team: Czech <@>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
+"X-Generator: Gtranslator 3.36.0\n"
+
+#: data/com.github.maoschanz.drawing.desktop.in
+#: data/com.github.maoschanz.drawing.appdata.xml.in src/deco_manager.py
+#: src/main.py
+msgid "Drawing"
+msgstr "Kreslení"
+
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "Simple drawing utility"
+msgstr "Jednoduchý kreslicí nástroj"
+
+#. Icon name, do not translate
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "com.github.maoschanz.drawing"
+msgstr ""
+
+#. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons.
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "Paint;Sketch;Pencil;"
+msgstr "Paint;Skica;Tužka;"
+
+#. Context: answer to "where do you want to open the image?"
+#: data/com.github.maoschanz.drawing.desktop.in src/ui/app-menus.ui
+#: src/ui/shortcuts.ui src/ui/win-menus.ui src/window.py
+msgid "New Window"
+msgstr "Nové okno"
+
+#: data/com.github.maoschanz.drawing.desktop.in src/ui/app-menus.ui
+#: src/ui/headerbar.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/ui/window.ui
+msgid "New Image"
+msgstr "Nový obrázek"
+
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "Edit Image in Clipboard"
+msgstr "Upravit obrázek v clipboardu"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "A drawing application for the GNOME desktop"
+msgstr "Kreslicí aplikace pro prostředí GNOME"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types."
+msgstr ""
+"\"Kreslení\" je jednoduchý editor obrázků, podporující typy PNG, JPEG a BMP."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It allows you to draw or edit pictures with tools such as pencil, line or "
+"arc (with various options), selection (cut/copy/paste/drag/…), shapes "
+"(rectangle, circle, polygon, …), text insertion, resizing, cropping, "
+"rotating, …"
+msgstr ""
+"Umožňuje kreslit nebo upravovat obrázky pomocí nástrojů, jako je tužka, čára "
+"nebo oblouk (s různými možnostmi), výběr (vyjmutí/kopírování/vložení/"
+"přetažení/…), tvary (obdélník, kruh, mnohoúhelník,…), vkládání textu, změna "
+"velikosti, oříznutí, otočení,…"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+"Verze 0.6.4 obsahuje několik drobných oprav chyb a různé nové překlady."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+#, fuzzy
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+"Verze 0.6.4 obsahuje několik drobných oprav chyb a různé nové překlady."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+#, fuzzy
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr "Úpravy aktuálního nástroje nebyly použity."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6 is a major update, with various important changes. The app is "
+"more robust and has more tools:"
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Rectangle selection and freehand selection are now distinct tools, and the "
+"'rotate' tool now supports any angle and handles horizontal or vertical "
+"flipping."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The numerous tools producing shapes (circle, rectangle, polygon, …), have "
+"been merged into a single, more consistent 'shape' tool, along with 'rounded "
+"rectangle' and 'ellipse'. Their filling options now include various types of "
+"gradients."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
+"with several types of blur, color inversion, pixelization, saturation and "
+"transparency."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+#, fuzzy
+msgid "A fullscreen mode is now available."
+msgstr "Požadovaný nástroj není k dispozici"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The most prominent new feature is the ability to zoom in (or out) on the "
+"image, using the minimap, the touchpad or the mouse wheel."
+msgstr ""
+
+#. This is just my name, do not translate it.
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Romain F. T."
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr "Okno a jeho hlavní menu"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr "Výběr a akce s ním spojené"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr "Přiblížení v různých tvarech"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr "Otevřeno menu „nový obrázek“"
+
+#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Preferences"
+msgstr "Předvolby"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
+msgid "Report a bug"
+msgstr "Nahlásit chybu"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Shortcuts"
+msgstr "Zkratky"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Help"
+msgstr "Nápověda"
+
+#: src/ui/app-menus.ui
+msgid "About"
+msgstr "O aplikaci"
+
+#: src/ui/app-menus.ui
+msgid "Quit"
+msgstr "Zavřít"
+
+#: src/ui/app-menus.ui
+msgid "_File"
+msgstr "_Soubor"
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
+msgid "Open an image"
+msgstr "Otevřít obrázek"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "New Blank Image"
+msgstr "Nový prázdný obrázek"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/new_image_dialog.py
+msgid "New Image With Custom Size"
+msgstr "Nový obrázek s vlastní velikostí"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "New Image From Selection"
+msgstr "Nový obrázek z výběru"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "New Image From Clipboard"
+msgstr "Nový obrázek z clipboardu"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Reload file"
+msgstr "Znovu načíst soubor"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
+msgid "Image properties"
+msgstr "Vlastnosti obrázku"
+
+#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
+#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui src/saving_manager.py
+msgid "Save"
+msgstr "Uložit"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Save without transparency"
+msgstr "Uložit bez zachování průhlednosti"
+
+#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
+#: src/saving_manager.py
+msgid "Save as…"
+msgstr "Uložit jako..."
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/win-menus.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Export as…"
+msgstr "Exportovat jako..."
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr "Kopírovat do clipboardu"
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
+msgid "Print"
+msgstr "Tisknout"
+
+#: src/ui/app-menus.ui
+msgid "Close Image"
+msgstr "Zavřít obrázek"
+
+#: src/ui/app-menus.ui
+msgid "Close Window"
+msgstr "Zavřít okno"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Quit all windows"
+msgstr "Zavřít všechna okna"
+
+#: src/ui/app-menus.ui
+msgid "_Edit"
+msgstr "_Upravit"
+
+#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
+#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui src/deco_manager.py
+msgid "Undo"
+msgstr "Zpět"
+
+#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
+#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui src/deco_manager.py
+msgid "Redo"
+msgstr "Dopředu"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Rebuild from history"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Select all"
+msgstr "Vybrat vše"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Cut"
+msgstr "Vyjmout"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Copy"
+msgstr "Kopírovat"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Delete"
+msgstr "Smazat"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+msgid "Paste"
+msgstr "Vložit"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/window.py
+#: src/optionsbars/selection/optionsbar-selection.ui
+msgid "Import"
+msgstr "Importovat"
+
+#: src/ui/app-menus.ui
+msgid "_View"
+msgstr "_Zobrazit"
+
+#: src/ui/app-menus.ui
+msgid "Show the preview"
+msgstr "Zobrazit náhled"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/preferences.py
+msgid "Zoom"
+msgstr "Přiblížení"
+
+#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui
+msgid "Optimal Zoom"
+msgstr "Optimální přiblížení"
+
+#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Zoom Out"
+msgstr "Oddálit"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Original Zoom"
+msgstr "Původní přiblížení"
+
+#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Zoom In"
+msgstr "Přiblížit"
+
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
+#: src/ui/app-menus.ui
+msgid "Position"
+msgstr "Pozice"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Left"
+msgstr "Vlevo"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Up"
+msgstr "Nahoru"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Down"
+msgstr "Dolů"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Right"
+msgstr "Vpravo"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Tab at the left"
+msgstr "Záložka nalevo"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Tab at the right"
+msgstr "Záložka napravo"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Refresh"
+msgstr "Obnovit"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Fullscreen"
+msgstr "Zapnout zobrazení na celou obrazovku"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Exit fullscreen"
+msgstr "Ukončit zobrazení na celou obrazovku"
+
+#: src/ui/app-menus.ui
+msgid "_Colors"
+msgstr "_Barvy"
+
+#: src/ui/app-menus.ui
+msgid "Edit Main Color…"
+msgstr "Upravit hlavní barvu..."
+
+#: src/ui/app-menus.ui
+msgid "Edit Secondary Color…"
+msgstr "Upravit vedlejší barvu..."
+
+#: src/ui/app-menus.ui
+msgid "Use color editor by default"
+msgstr "Ve výchozím nastavení použít editor barev"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+#: src/optionsbars/classic/optionsbar-classic.ui
+msgid "Exchange colors"
+msgstr "Otočit barvy"
+
+#: src/ui/app-menus.ui
+msgid "Color application mode"
+msgstr "Barevný režim aplikace"
+
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Normal"
+msgstr "Normální"
+
+#. Context: possible ways to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Other modes"
+msgstr "Ostatní režimy"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Raw source color"
+msgstr "Barva plátna"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Highlight"
+msgstr "Zvýraznění"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Difference"
+msgstr "Rozdíl"
+
+#. Context: possible ways to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Photo-oriented modes"
+msgstr ""
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Hue only"
+msgstr "Pouze odstín"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Saturation only"
+msgstr "Pouze sytost"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Hue and saturation"
+msgstr "Odstín a sytost"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Luminosity only"
+msgstr "Pouze zářivost"
+
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Don't use the colors but…"
+msgstr "Nepoužívat barvy, ale ..."
+
+#. To translators: this is a verb
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Blur"
+msgstr "Rozmazat"
+
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Erase"
+msgstr "Vymazat"
+
+#: src/ui/app-menus.ui
+msgid "_Tools"
+msgstr "_Nástroje"
+
+#: src/ui/app-menus.ui
+msgid "Previous tool"
+msgstr "Předchozí nástroj"
+
+#: src/ui/app-menus.ui
+msgid "Active tool"
+msgstr "Aktivní nástroj"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "Zobrazit názvy nástrojů"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr "Větší šířka"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Smaller width"
+msgstr "Menší šířka"
+
+#: src/ui/app-menus.ui src/window.py
+msgid "_Options"
+msgstr "_Možnosti"
+
+#: src/ui/app-menus.ui
+msgid "_Help"
+msgstr "Ná_pověda"
+
+#. Context: open the index of all help pages
+#: src/ui/app-menus.ui
+msgid "Index"
+msgstr "Rejstřík"
+
+#. Context: open the help page about general use of the app
+#: src/ui/app-menus.ui
+msgid "Basic help"
+msgstr "Základní nápověda"
+
+#. Context: open the help page about classic tools
+#: src/ui/app-menus.ui
+msgid "Help about tools"
+msgstr "Nápověda k nástrojům"
+
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
+#: src/ui/app-menus.ui
+msgid "Canvas and selection"
+msgstr "Plátno a výběr"
+
+#. Context: open the help page about the selection
+#: src/ui/app-menus.ui
+msgid "Help about selection"
+msgstr "Nápověda k výběru"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "About Drawing"
+msgstr "O Kreslení"
+
+#: src/ui/headerbar.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/window.py
+msgid "Open"
+msgstr "Otevřít"
+
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr "Sdílet obrázek"
+
+#: src/ui/new-image-dialog.ui src/ui/properties.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Width"
+msgstr "Šířka"
+
+#: src/ui/new-image-dialog.ui src/ui/properties.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Height"
+msgstr "Výška"
+
+#: src/ui/new-image-dialog.ui
+msgid "Color"
+msgstr "Barva"
+
+#: src/ui/new-image-dialog.ui
+msgid "Use these settings by default"
+msgstr "Používat toto nastavení automaticky"
+
+#: src/ui/minimap.ui
+msgid "100%"
+msgstr ""
+
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
+#: src/ui/properties.ui src/utilities.py
+msgid "pixels"
+msgstr "pixely"
+
+#: src/ui/properties.ui
+msgid "centimeters"
+msgstr "centimatry"
+
+#: src/ui/properties.ui
+msgid "inches"
+msgstr "palce"
+
+#: src/ui/preferences.ui
+msgid "Images"
+msgstr "Obrázky"
+
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Tools"
+msgstr "Nástroje"
+
+#: src/ui/preferences.ui
+msgid "Window"
+msgstr "Okno"
+
+#: src/ui/selection-manager.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Close selection"
+msgstr "Zrušit výběr"
+
+#: src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Unselect"
+msgstr "Zrušit výběr"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_crop.py
+msgid "Crop"
+msgstr "Oříznout"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_scale.py
+msgid "Scale"
+msgstr "Změnit velikost"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_rotate.py
+msgid "Rotate"
+msgstr "Otočit"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Filters"
+msgstr "Filtry"
+
+#: src/ui/selection-manager.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Open As New Image"
+msgstr "Otevřít jako nový obrázek"
+
+#: src/ui/shortcuts.ui
+msgid "Keyboard Shortcuts"
+msgstr "Klávesové zkratky"
+
+#: src/ui/shortcuts.ui
+msgid "General"
+msgstr "Obecné"
+
+#: src/ui/shortcuts.ui
+msgid "Main menu"
+msgstr "Hlavní menu"
+
+#: src/ui/shortcuts.ui
+msgid "Image"
+msgstr "Obrázek"
+
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "Otevřít obrázek"
+
+#: src/ui/shortcuts.ui
+msgid "Reload image from disk"
+msgstr "Znovu načíst obrázek z disku"
+
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "Uložit obrázek jako..."
+
+#: src/ui/shortcuts.ui
+msgid "Close the active image"
+msgstr "Zavřít aktivní obrázek"
+
+#: src/ui/shortcuts.ui
+msgid "Open the tool options menu"
+msgstr "Otevřít nástrojové menu"
+
+#: src/ui/shortcuts.ui
+msgid "Back to previous tool"
+msgstr "Zpět k předchozímu nástroji"
+
+#: src/ui/shortcuts.ui
+msgid "Apply a transformation"
+msgstr "Použít transformaci"
+
+#: src/ui/shortcuts.ui
+msgid "History"
+msgstr "Historie"
+
+#: src/ui/shortcuts.ui
+msgid "Selection"
+msgstr "Výběr"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Delete the selection"
+msgstr "Smazat výběr"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Import a file as the selection"
+msgstr "Importovat soubor jako výběr"
+
+#: src/ui/shortcuts.ui
+msgid "Colors"
+msgstr "Barvy"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Edit the main color (left click)"
+msgstr "Upravit hlavní barvu (kliknout levým tlačítkem)"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Edit the secondary color (right click)"
+msgstr "Upravit vedlejší barvu (kliknout pravým tlačítkem)"
+
+#: src/ui/shortcuts.ui
+msgid "Tabs"
+msgstr "Záložky"
+
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
+#: src/ui/shortcuts.ui
+msgid "Navigation"
+msgstr "Navigace"
+
+#: src/ui/shortcuts.ui
+msgid "Toggle the preview"
+msgstr "Přepnout náhled"
+
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr "Zapnout zobrazení na celou obrazovku"
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr "Ukončit zobrazení na celou obrazovku"
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr "Dotyková gesta"
+
+#: src/ui/win-menus.ui
+msgid "Troubleshoot selection"
+msgstr "Odstranit potíže s výběrem"
+
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr "Ostatní nástroje"
+
+#: src/ui/window.ui
+msgid "Error starting the application, please report this bug."
+msgstr "Při spuštění aplikace došlo k chybě, tuto chybu prosím nahlaste."
+
+#: src/deco_manager.py
+#, python-format
+msgid "Undo %s"
+msgstr "Zpět %s"
+
+#: src/deco_manager.py
+#, python-format
+msgid "Redo %s"
+msgstr "Dopředu %s"
+
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr "Nový pixbuf prázdný, na %s nebyla použita žádná změna"
+
+#: src/image.py
+msgid "Can't reload a never-saved file from the disk."
+msgstr "Nelze znovu načíst nikdy neuložený soubor z disku."
+
+#: src/image.py src/properties.py
+msgid "Unsaved file"
+msgstr "Neuložený soubor"
+
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
+msgid "Cancel"
+msgstr "Zrušit"
+
+#. Context: Create a new image
+#: src/new_image_dialog.py
+msgid "Create"
+msgstr "Vytvořit"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Show the app version"
+msgstr "Zobrazit verzi aplikace"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Open a new window"
+msgstr "Otevřít nové okno"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Open a new tab"
+msgstr "Otevřít novou záložku"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Edit the clipboard content"
+msgstr "Upravit obsah clipboardu"
+
+#: src/main.py
+msgid "This version isn't stable!"
+msgstr "Tato verze není stabilní!"
+
+#: src/main.py
+msgid "Report bugs or ideas"
+msgstr "Nahlásit chyby nebo nápady"
+
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
+#: src/main.py
+msgid "translator-credits"
+msgstr "Vojtěch Perník <v.pernik@centrum.cz>"
+
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
+#: src/main.py
+msgid "GNOME's \"Art Libre\" icon set authors"
+msgstr "Autoři GNOME sady ikon „Art Libre“"
+
+#: src/main.py
+msgid "A drawing application for the GNOME desktop."
+msgstr "Kreslicí aplikace pro prostředí GNOME."
+
+#: src/main.py
+msgid "Official webpage"
+msgstr "Oficiální web"
+
+#: src/main.py
+msgid "Error opening this file."
+msgstr "Při otevírání tohoto souboru došlo k chybě."
+
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr "Měli jste na mysli %s ?"
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
+#: src/minimap.py
+#, python-format
+msgid "%s%%"
+msgstr ""
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "New images"
+msgstr "Nové obrázky"
+
+#: src/preferences.py
+msgid "Default width"
+msgstr "Výchozí šířka"
+
+#: src/preferences.py
+msgid "Default height"
+msgstr "Výchozí výška"
+
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Default color"
+msgstr "Výchozí barva"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "Images saving"
+msgstr "Ukládání obrázků"
+
+#: src/preferences.py
+msgid "JPEG and BMP images can't handle transparency."
+msgstr "Obrázky JPEG a BMP neumožňují průhlednost."
+
+#: src/preferences.py
+msgid ""
+"If you save your images in these formats, what do want to use to replace "
+"transparent pixels?"
+msgstr ""
+"Pokud ukládáte obrázky v těchto formátech, co chcete použít k nahrazení "
+"průhledných pixelů?"
+
+#: src/preferences.py src/saving_manager.py src/utilities.py
+msgid "White"
+msgstr "Bílá"
+
+#: src/preferences.py src/saving_manager.py src/utilities.py
+msgid "Black"
+msgstr "Černá"
+
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
+msgid "Checkboard"
+msgstr "Šachovnice"
+
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
+msgid "Nothing"
+msgstr "Nic"
+
+#: src/preferences.py
+msgid "Ask before saving"
+msgstr "Zeptat se před uložením"
+
+#: src/preferences.py
+msgid "You can zoom with Ctrl+scrolling, or only scrolling."
+msgstr "Přibližovat můžete pomocí Ctrl + posouvání nebo pouze posouváním."
+
+#: src/preferences.py
+msgid "See the user help manual for explanations."
+msgstr "Vysvětlení najdete v uživatelské příručce."
+
+#: src/preferences.py
+msgid "Use 'Ctrl' to zoom"
+msgstr "Používat \"Ctrl\" pro přiblížení"
+
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
+#: src/preferences.py
+msgid "Appearance"
+msgstr "Vzhled"
+
+#: src/preferences.py
+msgid "Use big icons"
+msgstr "Použít velké ikony"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "Additional tools"
+msgstr "Další nástroje"
+
+#: src/preferences.py
+msgid ""
+"These tools are not as reliable and useful as they should be, so they are "
+"not all enabled by default."
+msgstr ""
+"Tyto nástroje nejsou tak spolehlivé a užitečné, jak by měly být, takže ve "
+"výchozím nastavení nejsou všechny povoleny."
+
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
+#: src/preferences.py src/tools/classic_tools/tool_eraser.py
+msgid "Eraser"
+msgstr "Guma"
+
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
+#: src/preferences.py src/tools/classic_tools/tool_highlight.py
+msgid "Highlighter"
+msgstr "Zvýrazňovač"
+
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr "Body"
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
+#: src/preferences.py src/tools/selection_tools/select_free.py
+msgid "Free selection"
+msgstr "Volný výběr"
+
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
+#: src/preferences.py src/tools/selection_tools/select_color.py
+msgid "Color selection"
+msgstr "Výběr barvy"
+
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
+#: src/preferences.py src/tools/classic_tools/tool_picker.py
+msgid "Color Picker"
+msgstr "Kapátko"
+
+#. Context: the name of a tool to fill an area of one color with an other
+#: src/preferences.py src/tools/classic_tools/tool_paint.py
+msgid "Paint"
+msgstr "Kyblík"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "Advanced options"
+msgstr "Pokročilé možnosti"
+
+#: src/preferences.py
+msgid "Preview size"
+msgstr "Velikost náhledu"
+
+#. This label will not be displayed in the UI of stable versions
+#: src/preferences.py
+msgid "Development features"
+msgstr "Funkce pro vývojáře"
+
+#: src/preferences.py
+msgid "Background color"
+msgstr "Barva pozadí"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
+msgid "Layout"
+msgstr "Rozložení"
+
+#: src/preferences.py
+msgid "The recommended value is \"Automatic\"."
+msgstr "Doporučená hodnota je „Automaticky“."
+
+#. It has to match what's written in the previous string.
+#: src/preferences.py
+msgid "Automatic"
+msgstr "Automaticky"
+
+#: src/preferences.py
+msgid "Compact"
+msgstr "Kompaktní"
+
+#: src/preferences.py
+msgid "elementary OS"
+msgstr ""
+
+#. "Legacy" is about the window layout, it means menubar+toolbar, you
+#. can translate it like if it was "Traditional"
+#: src/preferences.py
+msgid "Legacy"
+msgstr "Tradiční"
+
+#. "Legacy" is about the window layout, it means menubar+toolbar, you
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
+#: src/preferences.py
+msgid "Legacy (symbolic icons)"
+msgstr "Tradiční (symbolické ikony)"
+
+#: src/preferences.py
+msgid "Menubar only"
+msgstr "Pouze menu"
+
+#: src/preferences.py
+msgid "Toolbar only"
+msgstr "Pouze panel nástrojů"
+
+#. Symbolic icons are monochrome icons.
+#: src/preferences.py
+msgid "Toolbar only (symbolic icons)"
+msgstr "Pouze panel nástrojů (symbolické ikony)"
+
+#: src/properties.py
+#, python-format
+msgid "%s px"
+msgstr ""
+
+#: src/properties.py
+#, python-format
+msgid "%s cm"
+msgstr ""
+
+#: src/properties.py
+#, python-format
+msgid "%s in"
+msgstr ""
+
+#. Context: the path of the edited file
+#: src/properties.py
+msgid "Path"
+msgstr "Cesta"
+
+#. Context: the file format of the edited file
+#: src/properties.py
+msgid "Format"
+msgstr "Formát"
+
+#: src/properties.py
+msgid "Colorspace"
+msgstr "Barevný prostor"
+
+#. Context: an invalid colorspace format
+#: src/properties.py
+msgid "Invalid format"
+msgstr "Chybný formát"
+
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "Nepovedlo se uložit %s"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "Bez názvu"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "tento obrázek"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "Zahodit"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "U obrázku %s existují neuložené úpravy."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr "Je vybrána část obrázku a pixely pod výběrem jsou prázdné."
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr "Úpravy aktuálního nástroje nebyly použity."
+
+#: src/saving_manager.py
+msgid "Do you want to save anyway?"
+msgstr "Chcete soubor přesto uložit?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr "Nahradit"
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "Tento formát souboru nepodporuje průhledné barvy."
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr "Obrázek můžete uložit jako soubor PNG nebo průhlednost nahradit:"
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "Nahradit průhlednost:"
+
+#: src/utilities.py
+msgid "Transparent"
+msgstr "Průhledný"
+
+#: src/utilities.py
+#, python-format
+msgid "%s%% transparent"
+msgstr "%s%% průhledný"
+
+#: src/utilities.py
+msgid "Grey"
+msgstr "Šedá"
+
+#: src/utilities.py
+msgid "Orange"
+msgstr "Oranžová"
+
+#: src/utilities.py
+msgid "Brown"
+msgstr "Hnědá"
+
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
+#: src/utilities.py
+msgid "Probably brown"
+msgstr "Pravděpodobně hnědá"
+
+#: src/utilities.py
+msgid "Red"
+msgstr "Červená"
+
+#: src/utilities.py
+msgid "Green"
+msgstr "Zelená"
+
+#: src/utilities.py
+msgid "Blue"
+msgstr "Modrá"
+
+#: src/utilities.py
+msgid "Yellow"
+msgstr "Žlutá"
+
+#: src/utilities.py
+msgid "Magenta"
+msgstr "Purpurová"
+
+#: src/utilities.py
+msgid "Purple"
+msgstr "Fialová"
+
+#: src/utilities.py
+msgid "Cyan"
+msgstr "Tyrkysová"
+
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
+#: src/utilities.py
+msgid "Probably teal"
+msgstr "Pravděpodobně zelenomodrá"
+
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
+#: src/utilities.py
+msgid "Unknown color name"
+msgstr "Neznámý název barvy"
+
+#: src/utilities.py
+msgid "All pictures"
+msgstr "Všechny obrázky"
+
+#: src/utilities.py
+msgid "PNG images"
+msgstr "PNG obrázky"
+
+#: src/utilities.py
+msgid "JPEG images"
+msgstr "JPEG obrázky"
+
+#: src/utilities.py
+msgid "BMP images"
+msgstr "BMP obrázky"
+
+#. To translators: it appears in tooltips over numerical inputs
+#: src/utilities.py
+msgid "percents"
+msgstr "procenta"
+
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
+#: src/utilities.py
+msgid "degrees"
+msgstr "stupně"
+
+#: src/utilities.py
+#, python-format
+msgid "%s isn't an image."
+msgstr "%s není obrázek."
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr "Omlouváme se, ale tato aplikace nepodporuje obrázky WEBP."
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr "Navzdory své příponě je %s stále obrázek WEBP."
+
+#. Context: an error message
+#: src/window.py
+#, python-format
+msgid "Failed to load tool: %s"
+msgstr "Nepodařilo se načíst nástroj: %s"
+
+#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr "Clipboard neobsahuje žádný obrázek."
+
+#: src/window.py
+msgid "Modifications will take effect in the next new window."
+msgstr "Úpravy se projeví v dalším novém okně."
+
+#: src/window.py src/tools/abstract_tool.py
+#: src/optionsbars/classic/optionsbar-classic.ui
+#: src/tools/classic_tools/tool_eraser.py
+msgid "No options"
+msgstr "Žádné možnosti"
+
+#: src/window.py
+msgid "Opened images"
+msgstr "Otevřené obrázky"
+
+#: src/window.py
+#, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "Chyba: neplatná oblast pro \"%s\". Prosím, nahlaste tuto chybu."
+
+#: src/window.py
+#, python-format
+msgid "Loading %s"
+msgstr "Načítání %s"
+
+#. Context: answer to "where do you want to open the image?"
+#: src/window.py
+msgid "New Tab"
+msgstr "Nová záložka"
+
+#: src/window.py
+msgid "Discard changes"
+msgstr "Zahodit změny"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/window.py
+#, python-format
+msgid "Where do you want to open %s?"
+msgstr "Kde si přejete otevřít %s?"
+
+#. Context for translation:
+#. "What do you want to do with *these files*?"
+#: src/window.py
+msgid "these files"
+msgstr "těmito soubory"
+
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
+#: src/window.py
+#, python-format
+msgid "What do you want to do with %s?"
+msgstr "Co si přejete udělat s %s?"
+
+#: src/window.py
+msgid "Image copied to clipboard"
+msgstr "Obrázek zkopírován do clipboardu."
+
+#: src/window.py
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr "Obrázek byl změněn. Přejete si ho znovu načíst?"
+
+#: src/window.py
+msgid "Reload"
+msgstr "Znovu načíst"
+
+#: src/window.py
+msgid "Import a picture"
+msgstr "Importovat obrázek"
+
+#: src/window.py
+msgid "Required tool is not available"
+msgstr "Požadovaný nástroj není k dispozici"
+
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
+"Nelze spustit operaci: nesprávné ID nástroje (očekáváno {0}, získáno {1})"
+
+#: src/tools/utilities_paths.py
+msgid "Continue"
+msgstr "Pokračovat"
+
+#: src/tools/utilities_paths.py
+msgid "The area seems poorly delimited, or is very complex."
+msgstr "Tato oblast se zdá být špatně vymezená nebo je velmi složitá."
+
+#: src/tools/utilities_paths.py
+msgid "This algorithm may not be able to manage the wanted area."
+msgstr "Tento algoritmus nemusí být schopen spravovat požadovanou oblast."
+
+#: src/tools/utilities_paths.py
+msgid "Do you want to abort the operation, or to let the tool struggle ?"
+msgstr "Chcete operaci přerušit nebo nechat nástroj se snažit?"
+
+#. Context: fill a shape with the color of the left click
+#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Main color"
+msgstr "Hlavní barva"
+
+#. Context: fill a shape with the color of the right click
+#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Secondary color"
+msgstr "Vedlejší barva"
+
+#: src/optionsbars/classic/optionsbar-classic.ui
+msgid "Tool size"
+msgstr "Velikost nástroje"
+
+#: src/optionsbars/classic/optionsbar-classic.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
+msgid "Preview"
+msgstr "Náhled"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "How the color will be applied to the existing pixels"
+msgstr "Jak bude barva použita na stávající pixely"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Back to the palette"
+msgstr "Zpět na paletu"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Palette"
+msgstr "Paleta"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Use this editor by default"
+msgstr "Použít tento editor jako výchozí"
+
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+msgid "More actions"
+msgstr "Více akcí"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+msgid "Apply"
+msgstr "Použít"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "Více možností"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr "Rozbalit pomocí..."
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "Průhlednost"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Select a filter…"
+msgstr "Vybrat filtr..."
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+msgid "Saturation"
+msgstr "Saturace"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+msgid "Blur radius"
+msgstr "Poloměr rozostření"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Change saturation"
+msgstr "Změnit saturaci"
+
+#. Context: a filter adding like a light veil on the image
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Veil"
+msgstr "Maska"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
+msgid "Add transparency"
+msgstr "Přidat průhlednost"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Invert colors"
+msgstr "Invertovat barvy"
+
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
+msgid "Blurring"
+msgstr "Rozostření"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Fast blur"
+msgstr "Rychlé rozostření"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Slow blur"
+msgstr "Pomalé rozostření"
+
+#. Context: a filter that censors the image with some kind of tiles
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
+msgstr "Pixelizace"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "Blur direction"
+msgstr "Směr rozostření"
+
+#. Context: about the blur direction
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "Horizontal"
+msgstr "Horizontální"
+
+#. Context: about the blur direction
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "Vertical"
+msgstr "Vertikální"
+
+#. Context: about the blur direction
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "No direction"
+msgstr "Žádný směr"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui
+msgid "Angle (degrees)"
+msgstr "Úhel (stupně)"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui
+msgid "Angle"
+msgstr "Úhel"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Rotate left"
+msgstr "Otočit vlevo"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Rotate right"
+msgstr "Otočit vpravo"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Flip horizontally"
+msgstr "Překlopit horizontálně"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Flip vertically"
+msgstr "Překlopit vertikálně"
+
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "Keep proportions"
+msgstr "Uzamknout poměr stran"
+
+#. Context: an item in a menu whose title is "Keep proportions"
+#. Context for translations: "Always [keep proportions]"
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "Always"
+msgstr "Vždy"
+
+#. Context: an item in a menu whose title is "Keep proportions"
+#. Context for translations: "[Keep proportions only] when scaling from corners"
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "When scaling from corners"
+msgstr "Při změně velikosti z rohů"
+
+#. Context: an item in a menu whose title is "Keep proportions"
+#. Context for translations: "Never [keep proportions]"
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "Never"
+msgstr "Nikdy"
+
+#: src/optionsbars/transform/optionsbar-skew.ui
+msgid "Horizontal deformation"
+msgstr "Horizontální deformace"
+
+#: src/optionsbars/transform/optionsbar-skew.ui
+msgid "Vertical deformation"
+msgstr "Vertikální deformace"
+
+#: src/tools/ui/selection.ui
+msgid "Transform"
+msgstr "Transormovat"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Line shape"
+msgstr "Tvar konce čáry"
+
+#. Context: this is the name of a line shape
+#. Default values
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
+#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+msgid "Round"
+msgstr "Zakulacený"
+
+#. Context: this is the name of a line shape
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
+msgid "Square"
+msgstr "Rovný"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "No arrow"
+msgstr "Žádná šipka"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr "Jednoduchá šipka"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Double arrow"
+msgstr "Dvojitá šipka"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "No dashes"
+msgstr "Bez přerušování"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Simple dashes"
+msgstr "Základní přerušování"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Long dashes"
+msgstr "Dlouhé přerušování"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Short dashes"
+msgstr "Krátké přerušování"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr "Střídavé přerušování"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+msgid "Antialiasing"
+msgstr "Uhladit"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Dark text on light background"
+msgstr "Tmavý text na světlém pozadí"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr "Světlý text na tmavém pozadí"
+
+#: src/tools/ui/tool-line.ui
+msgid "Color gradient"
+msgstr "Barevný přechod"
+
+#. Context: title for the list of the possible painting algorithms.
+#: src/tools/ui/tool-paint.ui
+msgid "Behavior"
+msgstr "Chování"
+
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
+#: src/tools/ui/tool-paint.ui
+msgid "Encircle and fill"
+msgstr "Označit a vyplnit"
+
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
+#: src/tools/ui/tool-paint.ui
+msgid "Erase and replace"
+msgstr "Smazat a nahradit"
+
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
+#: src/tools/ui/tool-paint.ui
+msgid "Entire image"
+msgstr "Celý obrázek"
+
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+msgid "Remove color"
+msgstr "Odstranit barvu"
+
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr "Typ bodů"
+
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "Kruh"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr "Kříž"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr "Kříž ve tvaru X."
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr "Uvést číslo"
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr "Další číslo"
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr "Resetovat číslo"
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr "Zmenšit číslo"
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr "Zvětšit číslo"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Solid outline"
+msgstr "Plný obrys"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Dashed outline"
+msgstr "Přerušovaný obrys"
+
+#. if state_as_string == 'none':
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "No outline"
+msgstr "Žádný obrys"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr "Vyplňující"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Empty shape"
+msgstr "Prázdný tvar"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Horizontal gradient"
+msgstr "Horizontální přechod"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Vertical gradient"
+msgstr "Vertikální přechod"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Radial gradient"
+msgstr "Kruhový přechod"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "Obdélník"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr "Zaoblený obdélník"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "Ovál"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "Mnohoúhelník"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "Volný tvar"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Close shape"
+msgstr "Uzavřený tvar"
+
+#: src/tools/ui/tool-text.ui
+msgid "Insert here"
+msgstr "Vložit sem"
+
+#: src/tools/ui/tool-text.ui
+msgid "Font"
+msgstr "Font"
+
+#: src/tools/ui/tool-text.ui
+msgid "Select a font…"
+msgstr "Vybrat font..."
+
+#: src/tools/ui/tool-text.ui
+msgid "Italic"
+msgstr "Kurzíva"
+
+#: src/tools/ui/tool-text.ui
+msgid "Bold"
+msgstr "Tučné"
+
+#. Context: the types of background behind the inserted text
+#: src/tools/ui/tool-text.ui
+msgid "Background"
+msgstr "Pozadí"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "No background"
+msgstr "Žádné pozadí"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "Shadow"
+msgstr "Stín"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "Outline"
+msgstr "Obrys"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "Rectangle background"
+msgstr "Pozadí obdélníku"
+
+#: src/tools/classic_tools/tool_arc.py
+msgid "Curve"
+msgstr "Křivka"
+
+#: src/tools/classic_tools/tool_arc.py
+msgid "Curve options"
+msgstr "Možnosti křivky"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Dashed arrow"
+msgstr "Přerušovaná šipka"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "Šipka"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+msgid "Dashed"
+msgstr "Přerušované"
+
+#: src/tools/classic_tools/tool_highlight.py
+msgid "Highlighter options"
+msgstr "Možnosti zvýrazňovače"
+
+#: src/tools/classic_tools/tool_line.py
+msgid "Line"
+msgstr "Čára"
+
+#: src/tools/classic_tools/tool_line.py
+msgid "Line options"
+msgstr "Možnosti čáry"
+
+#: src/tools/classic_tools/tool_paint.py
+msgid "Painting options"
+msgstr "Možnosti výplně"
+
+#: src/tools/classic_tools/tool_paint.py
+msgid "Click on an area to replace its color by transparency"
+msgstr "Kliknutím na oblast nahradíte její barvu průhledností"
+
+#: src/tools/classic_tools/tool_paint.py
+msgid "Click on the canvas to entirely paint it"
+msgstr "Kliknutím na plátno jej vyplníte"
+
+#: src/tools/classic_tools/tool_pencil.py
+msgid "Pencil"
+msgstr "Tužka"
+
+#: src/tools/classic_tools/tool_pencil.py
+msgid "Pencil options"
+msgstr "Možnosti tužky"
+
+#: src/tools/classic_tools/tool_points.py
+msgid "Points options"
+msgstr "Možnosti bodů"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr "Následující číslo: %s"
+
+#: src/tools/classic_tools/tool_shape.py
+msgid "Shape"
+msgstr "Tvar"
+
+#: src/tools/classic_tools/tool_shape.py
+msgid "Shape options"
+msgstr "Možnosti tvaru"
+
+#: src/tools/classic_tools/tool_shape.py
+msgid "Click on the shape's first point to close it."
+msgstr "Kliknutím na první bod obrazce jej zavřete."
+
+#: src/tools/classic_tools/tool_text.py
+msgid "Text"
+msgstr "Text"
+
+#. XXX use "text options" instead
+#: src/tools/classic_tools/tool_text.py
+msgid "Font options"
+msgstr "Možnosti fontu"
+
+#: src/tools/selection_tools/abstract_select.py
+msgid "Drag the selection or right-click on the canvas"
+msgstr "Přetáhněte výběr nebo klikněte pravým tlačítkem na plátno"
+
+#: src/tools/selection_tools/abstract_select.py
+msgid "Select an area or right-click on the canvas"
+msgstr "Vyberte oblast nebo klikněte pravým tlačítkem na plátno"
+
+#: src/tools/selection_tools/select_rect.py
+msgid "Rectangle selection"
+msgstr "Výběr obdélníku"
+
+#: src/tools/transform_tools/abstract_transform_tool.py
+msgid "Error: invalid values"
+msgstr "Chyba: neplatné hodnoty"
+
+#: src/tools/transform_tools/tool_crop.py
+msgid "Cropping the selection"
+msgstr "Oříznutí výběru"
+
+#: src/tools/transform_tools/tool_crop.py
+msgid "Cropping the canvas"
+msgstr "Oříznutí plátna"
+
+#: src/tools/transform_tools/tool_filters.py
+msgid "Click on the image to preview the selected filter"
+msgstr "Kliknutím na obrázek zobrazíte náhled vybraného filtru"
+
+#: src/tools/transform_tools/tool_rotate.py
+msgid "Rotating the selection"
+msgstr "Otočení výběru"
+
+#: src/tools/transform_tools/tool_rotate.py
+msgid "Rotating the canvas"
+msgstr "Otočení plátna"
+
+#: src/tools/transform_tools/tool_scale.py
+msgid "Scaling the selection"
+msgstr "Změna velikosti výběru"
+
+#: src/tools/transform_tools/tool_scale.py
+msgid "Scaling the canvas"
+msgstr "Změna velikosti plátna"
+
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr "Zšikmit"
+
diff --git a/po/da.po b/po/da.po
index 2e2c698c..849521dd 100644
--- a/po/da.po
+++ b/po/da.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: drawing\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-15 19:07+0200\n"
-"PO-Revision-Date: 2020-04-28 13:02+0200\n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
+"PO-Revision-Date: 2020-10-06 18:41+0200\n"
"Last-Translator: scootergrisen\n"
"Language-Team: Danish\n"
"Language: da\n"
@@ -77,6 +77,87 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+"Version 0.6.4 har adskillige mindre fejlrettelser og diverse nye "
+"oversættelser."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+"Version 0.6.3 forbedre valgmuligheden til at tegne pile: adskillige "
+"problemstillinger er blevet rettet og det er nu muligt at bruge pile med "
+"pile i begge ender."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+"Version 0.6.2 har adskillige mindre fejlrettelser og diverse nye "
+"oversættelser."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+"Værktøjet 'overstregningspen' har nu valgmuligheden til at fremhæve lys "
+"tekst på en mørk baggrund."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+"Når et billedet er blevet gemt uden dets gennemsigtighed, så foreslår "
+"programmet nu at genindlæse billedet fra disken. Desuden er funktionaliteten "
+"'genindlæs fra disk' nu tilgængelig i alle layouts."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+"Nu er det også muligt at fjerne gennemsigtighed når PNG-filer gemmes. Og der "
+"er flere farvevalgmuligheder til at erstatte de gennemsigtige pixels."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+"Et nyt valgfrits værktøj kaldet \"Punkter\" er blevet tilføjet. Det kan være "
+"en hjælp når der sættes tekst på billeder."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr "Mindre fejl i værktøjet 'drej' er blevet rettet."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"Version 0.6 is a major update, with various important changes. The app is "
"more robust and has more tools:"
msgstr ""
@@ -107,11 +188,19 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+"Tekstværktøjet kan nu skrive med de fleste af systemets skrifttyper, hvilket "
+"giver mulighed for at bruge mere komplekse tegn (f.eks. asiatiske tegn)."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
-"with several types of blur, color inversion, pixelisation, saturation and "
+"with several types of blur, color inversion, pixelization, saturation and "
"transparency."
msgstr ""
-"Værktøjet \"Saturate\" er blevet erstattet af \"filtre\", som er et mere "
+"Værktøjet 'saturate' er blevet erstattet af 'filtre', som er et mere "
"kraftfuldt værktøj med adskillige typer sløring, farveinvertering, "
"pixelering, farvemætning og gennemsigtighed."
@@ -127,24 +216,37 @@ msgstr ""
"Den mest fremtrædende nye funktionalitet er muligheden for at zoome ind "
"(eller ud) på billedet, med minikortet, touchpaden eller musehjulet."
-#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid ""
-"Version 0.4.8 features several minor bug fixes, and various new translations."
-msgstr ""
-"Version 0.4.8 har adskillige mindre fejlrettelser og diverse nye "
-"oversættelser."
-
#. This is just my name, do not translate it.
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid "Romain F. T."
msgstr "Romain F. T."
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr "Vinduet og dets primære menu"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr "Markeringen og de handlinger den er tilknyttet"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr "Zooming i diverse forme"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr "Den åbnede menu \"nyt billede\""
+
#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
#: src/preferences.py
msgid "Preferences"
msgstr "Præferencer"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
msgid "Report a bug"
msgstr "Rapportér en fejl"
@@ -193,19 +295,22 @@ msgstr "Nyt billede fra udklipsholder"
msgid "Reload file"
msgstr "Genindlæs fil"
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/properties.py
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
msgid "Image properties"
msgstr "Billedegenskaber"
#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
-#: src/ui/win-menus.ui src/window.py
+#: src/ui/win-menus.ui src/saving_manager.py
msgid "Save"
msgstr "Gem"
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Save without transparency"
+msgstr "Gem uden gennemsigtighed"
+
#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
-#: src/utilities.py
+#: src/saving_manager.py
msgid "Save as…"
msgstr "Gem som …"
@@ -214,7 +319,13 @@ msgstr "Gem som …"
msgid "Export as…"
msgstr "Eksportér som …"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr "Kopiér til udklipsholder"
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
msgid "Print"
msgstr "Udskriv"
@@ -299,20 +410,25 @@ msgid "Optimal Zoom"
msgstr "Optimal zoom"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom Out"
msgstr "Zoom ud"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Original Zoom"
msgstr "Oprindelig zoom"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom In"
msgstr "Zoom ind"
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
#: src/ui/app-menus.ui
msgid "Position"
msgstr "Position"
@@ -334,26 +450,18 @@ msgid "Go Right"
msgstr "Gå til højre"
#: src/ui/app-menus.ui src/ui/shortcuts.ui
-#, fuzzy
msgid "Tab at the left"
-msgstr "Tilbage til paletten"
+msgstr "Tabulator til venstre"
#: src/ui/app-menus.ui src/ui/shortcuts.ui
-#, fuzzy
msgid "Tab at the right"
-msgstr "Drej til højre"
+msgstr "Tabulator til højre"
#: src/ui/app-menus.ui src/ui/win-menus.ui
msgid "Refresh"
msgstr "Opdater"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
-#: src/preferences.py
-msgid "Show tools names"
-msgstr "Vis værktøjernes navne"
-
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/shortcuts.ui
-#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
msgid "Fullscreen"
msgstr "Fuldskærm"
@@ -386,75 +494,79 @@ msgstr "Byt om på farverne"
msgid "Color application mode"
msgstr "Farvepåføringstilstand"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Normal"
msgstr "Normal"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Other modes"
-msgstr ""
+msgstr "Andre tilstande"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Raw source color"
-msgstr "Kildefarve"
+msgstr "Rå kildefarve"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Highlight"
-msgstr "Overstregningspen"
+msgstr "Overstreg"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Difference"
msgstr "Forskelle"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
-msgid "Photo manipulation"
-msgstr ""
+msgid "Photo-oriented modes"
+msgstr "Fotoorienterede tilstande"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Hue only"
-msgstr "Kun menulinje"
+msgstr "Kun farvetone"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Saturation only"
-msgstr "Farvemætning"
+msgstr "Kun farvemætning"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Hue and saturation"
-msgstr "Ændr farvemætning"
+msgstr "Farvetone og farvemætning"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Luminosity only"
-msgstr ""
+msgstr "Kun lysstyrke"
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Don't use the colors but…"
msgstr "Brug ikke farverne men …"
#. To translators: this is a verb
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Blur"
msgstr "Sløring"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Erase"
msgstr "Viskelæder"
-#: src/ui/app-menus.ui src/window.py
+#: src/ui/app-menus.ui
msgid "_Tools"
msgstr "Værk_tøjer"
@@ -462,6 +574,23 @@ msgstr "Værk_tøjer"
msgid "Previous tool"
msgstr "Forrige værktøj"
+#: src/ui/app-menus.ui
+msgid "Active tool"
+msgstr "Aktive værktøj"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "Vis værktøjernes navne"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr "Bredere"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Smaller width"
+msgstr "Smallere"
+
#: src/ui/app-menus.ui src/window.py
msgid "_Options"
msgstr "Valg_muligheder"
@@ -470,22 +599,28 @@ msgstr "Valg_muligheder"
msgid "_Help"
msgstr "_Hjælp"
+#. Context: open the index of all help pages
#: src/ui/app-menus.ui
msgid "Index"
msgstr "Indeks"
+#. Context: open the help page about general use of the app
#: src/ui/app-menus.ui
msgid "Basic help"
msgstr "Grundlæggende hjælp"
+#. Context: open the help page about classic tools
#: src/ui/app-menus.ui
msgid "Help about tools"
msgstr "Hjælp til værktøjer"
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
#: src/ui/app-menus.ui
msgid "Canvas and selection"
msgstr "Lærred og markering"
+#. Context: open the help page about the selection
#: src/ui/app-menus.ui
msgid "Help about selection"
msgstr "Hjælp til markering"
@@ -499,21 +634,25 @@ msgstr "Om Drawing"
msgid "Open"
msgstr "Åbn"
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr "Del billedet"
+
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Width"
msgstr "Bredde"
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Height"
msgstr "Højde"
#: src/ui/new-image-dialog.ui
-msgid "Background color"
-msgstr "Baggrundsfarve"
+msgid "Color"
+msgstr "Farve"
#: src/ui/new-image-dialog.ui
msgid "Use these settings by default"
@@ -523,6 +662,8 @@ msgstr "Brug indstillingerne som standard"
msgid "100%"
msgstr "100 %"
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
#: src/ui/properties.ui src/utilities.py
msgid "pixels"
msgstr "pixels"
@@ -539,7 +680,7 @@ msgstr "inch"
msgid "Images"
msgstr "Billeder"
-#: src/ui/preferences.ui src/ui/shortcuts.ui
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "Tools"
msgstr "Værktøjer"
@@ -558,30 +699,22 @@ msgid "Unselect"
msgstr "Fjern markering"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Crop"
msgstr "Beskær"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scale"
msgstr "Skaler"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotate"
msgstr "Drej"
-#. In this context, "Skew" is the name of the tool changing rectangles
-#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
-#. "Stretch/Skew" dialog.
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_skew.py
-msgid "Skew"
-msgstr "Vrid"
-
-#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Filters"
msgstr "Filtre"
@@ -591,8 +724,8 @@ msgid "Open As New Image"
msgstr "Åbn som nyt billede"
#: src/ui/shortcuts.ui
-msgid "Keyboard"
-msgstr "Tastatur"
+msgid "Keyboard Shortcuts"
+msgstr "Tastaturgenveje"
#: src/ui/shortcuts.ui
msgid "General"
@@ -603,50 +736,40 @@ msgid "Main menu"
msgstr "Hovedmenu"
#: src/ui/shortcuts.ui
-msgid "Editing"
-msgstr "Redigering"
-
-#: src/ui/shortcuts.ui
msgid "Image"
msgstr "Billede"
-#: src/ui/shortcuts.ui
-msgid "Open a file"
-msgstr "Åbn en fil"
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "Åbn et billede"
#: src/ui/shortcuts.ui
msgid "Reload image from disk"
msgstr "Genindlæs billede fra disk"
-#: src/ui/shortcuts.ui
-msgid "Save as"
-msgstr "Gem som"
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "Gem billede som …"
#: src/ui/shortcuts.ui
msgid "Close the active image"
msgstr "Luk det aktive billede"
#: src/ui/shortcuts.ui
-msgid "Options menu"
-msgstr "Valgmulighedsmenu"
+msgid "Open the tool options menu"
+msgstr "Åbn menuen værktøjsvalgmuligheder"
#: src/ui/shortcuts.ui
msgid "Back to previous tool"
msgstr "Tilbage til forrige værktøj"
#: src/ui/shortcuts.ui
-msgid "Colors"
-msgstr "Farver"
-
-#. Label displayed in the keyboard shortcuts dialog
-#: src/ui/shortcuts.ui
-msgid "Edit the main color (left click)"
-msgstr "Rediger den primære farve (venstreklik)"
+msgid "Apply a transformation"
+msgstr ""
-#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Edit the secondary color (right click)"
-msgstr "Rediger den sekundære farve (højreklik)"
+msgid "History"
+msgstr "Historik"
#: src/ui/shortcuts.ui
msgid "Selection"
@@ -663,17 +786,25 @@ msgid "Import a file as the selection"
msgstr "Importér en fil som markeringen"
#: src/ui/shortcuts.ui
-msgid "Tabs"
-msgstr ""
+msgid "Colors"
+msgstr "Farver"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Enter fullscreen mode"
-msgstr "Gå i fuldskærmstilstand"
+msgid "Edit the main color (left click)"
+msgstr "Rediger den primære farve (venstreklik)"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Edit the secondary color (right click)"
+msgstr "Rediger den sekundære farve (højreklik)"
#: src/ui/shortcuts.ui
-msgid "Exit fullscreen mode"
-msgstr "Afslut fuldskærmstilstand"
+msgid "Tabs"
+msgstr "Tabulatorer"
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
#: src/ui/shortcuts.ui
msgid "Navigation"
msgstr "Navigation"
@@ -682,10 +813,26 @@ msgstr "Navigation"
msgid "Toggle the preview"
msgstr "Forhåndsvisning til/fra"
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr "Gå i fuldskærmstilstand"
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr "Afslut fuldskærmstilstand"
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr "Berøringsbevægelser"
+
#: src/ui/win-menus.ui
msgid "Troubleshoot selection"
msgstr "Fejlsøg markering"
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr "Andre værktøjer"
+
#: src/ui/window.ui
msgid "Error starting the application, please report this bug."
msgstr "Fejl ved start af programmet. Rapportér venligst fejlen."
@@ -700,24 +847,29 @@ msgstr "Fortryd %s"
msgid "Redo %s"
msgstr "Omgør %s"
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr "Ny pixbuf tom, ingen ændring anvendt til %s"
+
#: src/image.py
-#, fuzzy
msgid "Can't reload a never-saved file from the disk."
-msgstr "Kan ikke genindlæse en nyere gemt fil fra disken."
+msgstr "Kan ikke genindlæse en fil fra disken som aldrig er blevet gemt."
#: src/image.py src/properties.py
msgid "Unsaved file"
msgstr "Ikke gemt"
-#: src/new_image_dialog.py src/utilities.py src/window.py
-#: src/tools/utilities_paths.py src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-crop.ui src/tools/ui/tool-filters.ui
-#: src/tools/ui/tool-rotate.ui src/tools/ui/tool-scale.ui
-#: src/tools/ui/tool-skew.ui
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
msgid "Cancel"
msgstr "Annuller"
@@ -726,18 +878,22 @@ msgstr "Annuller"
msgid "Create"
msgstr "Opret"
+#. Description of a command line option
#: src/main.py
msgid "Show the app version"
msgstr "Vis programversionen"
+#. Description of a command line option
#: src/main.py
msgid "Open a new window"
msgstr "Åbn et nyt vindue"
+#. Description of a command line option
#: src/main.py
msgid "Open a new tab"
msgstr "Åbn et nyt faneblad"
+#. Description of a command line option
#: src/main.py
msgid "Edit the clipboard content"
msgstr "Rediger udklipsholderens indhold"
@@ -750,12 +906,14 @@ msgstr "Denne version er ikke stabil!"
msgid "Report bugs or ideas"
msgstr "Rapportér fejl eller ideer"
-#. To tranlators: "translate" this by your name, it will be displayed
-#. in the "about" dialog
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
#: src/main.py
msgid "translator-credits"
msgstr "scootergrisen"
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
#: src/main.py
msgid "GNOME's \"Art Libre\" icon set authors"
msgstr "Forfatterne af GNOMEs \"Art Libre\"-ikonsæt"
@@ -769,17 +927,24 @@ msgid "Official webpage"
msgstr "Officiel webside"
#: src/main.py
-#, python-format
-msgid "Error opening this file. Did you mean %s ?"
+#, fuzzy
+msgid "Error opening this file."
msgstr "Fejl ved åbning af filen. Mente du %s?"
-#. This displays the zoom level, %s will be replaced with a number, while
-#. %% is just the symbol '%'
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr ""
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
#: src/minimap.py
#, python-format
msgid "%s%%"
msgstr "%s %%"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "New images"
msgstr "Nye billeder"
@@ -792,10 +957,16 @@ msgstr "Standardbredde"
msgid "Default height"
msgstr "Standardhøjde"
-#: src/preferences.py
-msgid "Default background"
-msgstr "Standardbaggrund"
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Default color"
+msgstr "Standardfarve"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Images saving"
msgstr "Når billeder gemmes"
@@ -812,19 +983,23 @@ msgstr ""
"Hvis du gemmer dine billeder i disse formater, hvad skal så erstatte de "
"gennemsigtige pixels?"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "White"
msgstr "Hvid"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "Black"
msgstr "Sort"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
msgid "Checkboard"
msgstr "Skakbræt"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
msgid "Nothing"
msgstr "Intet"
@@ -837,13 +1012,15 @@ msgid "You can zoom with Ctrl+scrolling, or only scrolling."
msgstr "Du kan zoome med Ctrl+rulning eller kun rulning."
#: src/preferences.py
-msgid "Using keyboard shortcuts or touch gestures is possible too."
-msgstr "Og med tastaturgenveje eller touchbevægelser."
+msgid "See the user help manual for explanations."
+msgstr "Se brugerhjælpmanualen for forklaringer."
#: src/preferences.py
msgid "Use 'Ctrl' to zoom"
msgstr "Brug 'Ctrl' til at zoome"
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
#: src/preferences.py
msgid "Appearance"
msgstr "Udseende"
@@ -852,6 +1029,7 @@ msgstr "Udseende"
msgid "Use big icons"
msgstr "Brug store ikoner"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Additional tools"
msgstr "Yderligere værktøjer"
@@ -864,31 +1042,51 @@ msgstr ""
"Disse værktøjer er ikke så pålidelige og nyttige som de burde være, så de er "
"ikke allesammen aktiveret som standard."
-#. In the meaning "a rubber eraser"
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
#: src/preferences.py src/tools/classic_tools/tool_eraser.py
msgid "Eraser"
msgstr "Viskelæder"
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
#: src/preferences.py src/tools/classic_tools/tool_highlight.py
msgid "Highlighter"
msgstr "Overstregningspen"
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr "Punkter"
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
#: src/preferences.py src/tools/selection_tools/select_free.py
msgid "Free selection"
msgstr "Fri markering"
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
#: src/preferences.py src/tools/selection_tools/select_color.py
msgid "Color selection"
msgstr "Farvemarkering"
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
#: src/preferences.py src/tools/classic_tools/tool_picker.py
msgid "Color Picker"
msgstr "Farvevælger"
+#. Context: the name of a tool to fill an area of one color with an other
#: src/preferences.py src/tools/classic_tools/tool_paint.py
msgid "Paint"
msgstr "Malerbøtte"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Advanced options"
msgstr "Avancerede valgmuligheder"
@@ -897,11 +1095,18 @@ msgstr "Avancerede valgmuligheder"
msgid "Preview size"
msgstr "Størrelse på forhåndsvisning"
+#. This label will not be displayed in the UI of stable versions
#: src/preferences.py
msgid "Development features"
msgstr "Udviklingsfunktionaliteter"
#: src/preferences.py
+msgid "Background color"
+msgstr "Baggrundsfarve"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
msgid "Layout"
msgstr "Layout"
@@ -909,6 +1114,7 @@ msgstr "Layout"
msgid "The recommended value is \"Automatic\"."
msgstr "Den anbefalede værdi er \"Automatisk\"."
+#. It has to match what's written in the previous string.
#: src/preferences.py
msgid "Automatic"
msgstr "Automatisk"
@@ -928,7 +1134,8 @@ msgid "Legacy"
msgstr "Udgået"
#. "Legacy" is about the window layout, it means menubar+toolbar, you
-#. can translate it like if it was "Traditional"
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Legacy (symbolic icons)"
msgstr "Udgået (symbolske ikoner)"
@@ -941,6 +1148,7 @@ msgstr "Kun menulinje"
msgid "Toolbar only"
msgstr "Kun værktøjslinje"
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Toolbar only (symbolic icons)"
msgstr "Kun værktøjslinje (symbolske ikoner)"
@@ -960,10 +1168,12 @@ msgstr "%s cm"
msgid "%s in"
msgstr "%s tommer"
+#. Context: the path of the edited file
#: src/properties.py
msgid "Path"
msgstr "Sti"
+#. Context: the file format of the edited file
#: src/properties.py
msgid "Format"
msgstr "Format"
@@ -972,10 +1182,70 @@ msgstr "Format"
msgid "Colorspace"
msgstr "Farverum"
+#. Context: an invalid colorspace format
#: src/properties.py
msgid "Invalid format"
msgstr "Ugyldigt format"
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "Kunne ikke gemme %s"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "Unavngivet"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "dette billede"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "Forkast"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "Der er ændringer i %s som ikke er blevet gemt."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+"En del af billedet er markeret og pixelerne under markeringen er tomme."
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr "Ændringerne fra det nuværende værktøj er ikke blevet anvendt."
+
+#: src/saving_manager.py
+msgid "Do you want to save anyway?"
+msgstr "Vil du gemme alligevel?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr "Erstat"
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "Filformatet understøtter ikke gennemsigtige farver."
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr ""
+"Du kan gemme billedet som en PNG-fil eller erstatte gennemsigtighed med:"
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "Erstat gennemsigtighed med:"
+
#: src/utilities.py
msgid "Transparent"
msgstr "Gennemsigtig"
@@ -997,6 +1267,9 @@ msgstr "Orange"
msgid "Brown"
msgstr "Brun"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
#: src/utilities.py
msgid "Probably brown"
msgstr "Formodentlig brun"
@@ -1029,32 +1302,23 @@ msgstr "Lilla"
msgid "Cyan"
msgstr "Cyan"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
#: src/utilities.py
-msgid "Probably turquoise"
+msgid "Probably teal"
msgstr "Formodentlig turkis"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
#: src/utilities.py
msgid "Unknown color name"
msgstr "Ukendt farvenavn"
#: src/utilities.py
-msgid "Replace"
-msgstr "Erstat"
-
-#: src/utilities.py
-msgid "This file format doesn't support transparent colors."
-msgstr "Filformatet understøtter ikke gennemsigtige farver."
-
-#: src/utilities.py
-msgid "You can save the image as a PNG file, or replace transparency with:"
-msgstr ""
-"Du kan gemme billedet som en PNG-fil eller erstatte gennemsigtighed med:"
-
-#: src/utilities.py
-msgid "Replace transparency with:"
-msgstr "Erstat gennemsigtighed med:"
-
-#: src/utilities.py
msgid "All pictures"
msgstr "Alle billeder"
@@ -1070,28 +1334,49 @@ msgstr "JPEG-billeder"
msgid "BMP images"
msgstr "BMP-billeder"
+#. To translators: it appears in tooltips over numerical inputs
#: src/utilities.py
msgid "percents"
msgstr "procent"
-#. To translators: it's the angle measure unit
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
#: src/utilities.py
msgid "degrees"
msgstr "grader"
+#: src/utilities.py
+#, fuzzy, python-format
+msgid "%s isn't an image."
+msgstr "Åbn et billede"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr ""
+
+#. Context: an error message
#: src/window.py
#, python-format
msgid "Failed to load tool: %s"
msgstr "Kunne ikke indlæse værktøj: %s"
#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr ""
+
+#: src/window.py
msgid "Modifications will take effect in the next new window."
msgstr "Ændringerne træder i kraft i det næste nye vindue."
#: src/window.py src/tools/abstract_tool.py
#: src/optionsbars/classic/optionsbar-classic.ui
#: src/tools/classic_tools/tool_eraser.py
-#: src/tools/classic_tools/tool_highlight.py
msgid "No options"
msgstr "Ingen valgmuligheder"
@@ -1101,6 +1386,11 @@ msgstr "Åbne billeder"
#: src/window.py
#, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "Fejl: rude ugyldig for '%s'. Rapportér venligst fejlen."
+
+#: src/window.py
+#, python-format
msgid "Loading %s"
msgstr "Indlæser %s"
@@ -1113,54 +1403,36 @@ msgstr "Nyt faneblad"
msgid "Discard changes"
msgstr "Forkast ændringerne"
-#: src/window.py
-#, python-format
-msgid "There are unsaved modifications to %s."
-msgstr "Der er ændringer i %s som ikke er blevet gemt."
-
+#. Context: %s will be replaced by the name of a file.
#: src/window.py
#, python-format
msgid "Where do you want to open %s?"
msgstr "Hvor vil du åbne %s?"
-#: src/window.py
-msgid "Open a picture"
-msgstr "Åbn et billede"
-
#. Context for translation:
#. "What do you want to do with *these files*?"
#: src/window.py
msgid "these files"
msgstr "disse filer"
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
#: src/window.py
#, python-format
msgid "What do you want to do with %s?"
msgstr "Hvad vil du gøre med %s?"
-#. else the exception was raised because an actual error occured, or
-#. the user clicked on "cancel"
#: src/window.py
-#, python-format
-msgid "Failed to save %s"
-msgstr "Kunne ikke gemme %s"
-
-#: src/window.py
-msgid "Untitled"
-msgstr "Unavngivet"
-
-#. Context: the sentence "There are unsaved modifications to %s."
-#: src/window.py
-msgid "this picture"
-msgstr "dette billede"
+msgid "Image copied to clipboard"
+msgstr "Billede kopieret til udklipsholder"
#: src/window.py
-msgid "Discard"
-msgstr "Forkast"
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr "Billedet blev ændret på disken. Vil du genindlæse det?"
#: src/window.py
-msgid "Save picture as…"
-msgstr "Gem billede som …"
+msgid "Reload"
+msgstr "Genindlæs"
#: src/window.py
msgid "Import a picture"
@@ -1170,6 +1442,12 @@ msgstr "Importér et billede"
msgid "Required tool is not available"
msgstr "Krævet værktøj er ikke tilgængeligt"
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr "Kan ikke state handling: forkert værktøjs-id (ventede {0}, fik {1})"
+
#: src/tools/utilities_paths.py
msgid "Continue"
msgstr "Fortsæt"
@@ -1186,13 +1464,15 @@ msgstr "Algoritmen er måske ikke i stand til at håndtere det ønskede område.
msgid "Do you want to abort the operation, or to let the tool struggle ?"
msgstr "Vil du afbryde handlingen eller lade værktøjet knokle?"
+#. Context: fill a shape with the color of the left click
#: src/optionsbars/classic/optionsbar_color_popover.py
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Main color"
msgstr "Primær farve"
-#. if state_as_string == 'secondary':
+#. Context: fill a shape with the color of the right click
#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Secondary color"
msgstr "Sekundær farve"
@@ -1202,8 +1482,8 @@ msgid "Tool size"
msgstr "Værktøjsstørrelse"
#: src/optionsbars/classic/optionsbar-classic.ui
-#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-filters.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
msgid "Preview"
msgstr "Forhåndsvisning"
@@ -1224,160 +1504,174 @@ msgid "Use this editor by default"
msgstr "Brug editoren som standard"
#: src/optionsbars/selection/optionsbar-selection.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "More actions"
msgstr "Flere handlinger"
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
msgid "Apply"
msgstr "Anvend"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "Flere valgmuligheder"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr "Udvid med …"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "Gennemsigtighed"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Select a filter…"
msgstr "Vælg et filter …"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Saturation"
msgstr "Farvemætning"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blur radius"
msgstr "Sløringsradius"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-msgid "Transparency"
-msgstr "Gennemsigtighed"
-
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Change saturation"
msgstr "Ændr farvemætning"
#. Context: a filter adding like a light veil on the image
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Veil"
msgstr "Slør"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
msgid "Add transparency"
msgstr "Tilføj gennemsigtighed"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Invert colors"
msgstr "Invertér farver"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blurring"
msgstr "Sløring"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Fast blur"
msgstr "Hurtig sløring"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Slow blur"
msgstr "Langsom sløring"
#. Context: a filter that censors the image with some kind of tiles
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-msgid "Pixelisation"
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
msgstr "Pixelering"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Blur direction"
msgstr "Sløringsretning"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Horizontal"
msgstr "Vandret"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Vertical"
msgstr "Lodret"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "No direction"
msgstr "Ingen retning"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle (degrees)"
msgstr "Vinkel (grader)"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle"
msgstr "Vinkel"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate left"
msgstr "Drej til venstre"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate right"
msgstr "Drej til højre"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip horizontally"
msgstr "Vend vandret"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip vertically"
msgstr "Vend lodret"
-#: src/optionsbars/canvas/optionsbar-scale.ui
-msgid "More options"
-msgstr "Flere valgmuligheder"
-
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Keep proportions"
msgstr "Bevar størrelsesforhold"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Always [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Always"
msgstr "Altid"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "[Keep proportions only] when scaling from corners"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "When scaling from corners"
msgstr "Ved skalering fra hjørner"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Never [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Never"
msgstr "Aldrig"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Horizontal deformation"
msgstr "Vandret deformering"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Vertical deformation"
msgstr "Lodret deformering"
+#: src/tools/ui/selection.ui
+msgid "Transform"
+msgstr "Transformér"
+
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
msgid "Line shape"
msgstr "Linjens form"
+#. Context: this is the name of a line shape
#. Default values
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
@@ -1385,80 +1679,162 @@ msgstr "Linjens form"
msgid "Round"
msgstr "Rund"
+#. Context: this is the name of a line shape
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Thin"
-msgstr "Tynd"
-
-#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
msgid "Square"
msgstr "Firkantet"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "No arrow"
+msgstr "Ingen pil"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr "Simpel pil"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Double arrow"
+msgstr "Dobbelt pil"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-msgid "Use dashes"
-msgstr "Stiplet"
+msgid "No dashes"
+msgstr "Ingen stiplet"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
-msgid "Arrow"
-msgstr "Pil"
+#: src/tools/ui/tool-pencil.ui
+msgid "Simple dashes"
+msgstr "Simpel stiplet"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-shape.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Long dashes"
+msgstr "Lang stiplet"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Short dashes"
+msgstr "Kort stiplet"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr "Skiftende stiplet"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
msgid "Antialiasing"
msgstr "Antialiasing"
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Dark text on light background"
+msgstr "Mørk tekst på lys baggrund"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr "Lys tekst på mørk baggrund"
+
#: src/tools/ui/tool-line.ui
msgid "Color gradient"
msgstr "Farvegradient"
+#. Context: title for the list of the possible painting algorithms.
#: src/tools/ui/tool-paint.ui
msgid "Behavior"
msgstr "Opførsel"
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
#: src/tools/ui/tool-paint.ui
msgid "Encircle and fill"
msgstr "Omring og udfyld"
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
#: src/tools/ui/tool-paint.ui
msgid "Erase and replace"
msgstr "Slet og erstat"
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
#: src/tools/ui/tool-paint.ui
-msgid "Clipping"
-msgstr "Klipning"
+msgid "Entire image"
+msgstr "Hele billedet"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rectangle"
-msgstr "Rektangel"
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+msgid "Remove color"
+msgstr "Fjern farve"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rounded rectangle"
-msgstr "Afrundet rektangel"
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr "Priktype"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Oval"
-msgstr "Oval"
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "Cirkel"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr "Kryds"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr "X-formet kryds"
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr "Medtag et tal"
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr "Næste tal"
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr "Nulstil tal"
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr "Tal til at mindske"
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr "Tal til at øge"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Polygon"
-msgstr "Polygon"
+msgid "Solid outline"
+msgstr "Ensfarvet omrids"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Free shape"
-msgstr "Fri form"
+msgid "Dashed outline"
+msgstr "Stiplet omrids"
+#. if state_as_string == 'none':
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Circle"
-msgstr "Cirkel"
+msgid "No outline"
+msgstr "Intet omrids"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr "Udfyldning"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Empty outline"
-msgstr "Tomt omrids"
+msgid "Empty shape"
+msgstr "Tom form"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Horizontal gradient"
@@ -1472,6 +1848,26 @@ msgstr "Lodret gradient"
msgid "Radial gradient"
msgstr "Radial gradient"
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "Rektangel"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr "Afrundet rektangel"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "Oval"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "Polygon"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "Fri form"
+
#: src/tools/ui/tool-shape.ui
msgid "Close shape"
msgstr "Luk form"
@@ -1485,6 +1881,10 @@ msgid "Font"
msgstr "Skrifttype"
#: src/tools/ui/tool-text.ui
+msgid "Select a font…"
+msgstr "Vælg en skrifttype …"
+
+#: src/tools/ui/tool-text.ui
msgid "Italic"
msgstr "Kursiv"
@@ -1492,34 +1892,31 @@ msgstr "Kursiv"
msgid "Bold"
msgstr "Fed"
+#. Context: the types of background behind the inserted text
#: src/tools/ui/tool-text.ui
msgid "Background"
msgstr "Baggrund"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "No background"
msgstr "Ingen baggrund"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Shadow"
msgstr "Skygge"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Outline"
msgstr "Omrids"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Rectangle background"
msgstr "Rektangelbaggrund"
-#: src/tools/ui/selection.ui
-msgid "Edit"
-msgstr "Rediger"
-
-#: src/tools/ui/selection.ui
-msgid "Flip"
-msgstr "Vend"
-
#: src/tools/classic_tools/tool_arc.py
msgid "Curve"
msgstr "Kurve"
@@ -1533,10 +1930,18 @@ msgid "Dashed arrow"
msgstr "Stiplet pil"
#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "Pil"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
#: src/tools/classic_tools/tool_pencil.py
msgid "Dashed"
msgstr "Stiplet"
+#: src/tools/classic_tools/tool_highlight.py
+msgid "Highlighter options"
+msgstr "Valgmuligheder for overstregningspen"
+
#: src/tools/classic_tools/tool_line.py
msgid "Line"
msgstr "Linje"
@@ -1553,6 +1958,10 @@ msgstr "Valgmuligheder for malerbøtte"
msgid "Click on an area to replace its color by transparency"
msgstr "Klik på et område for at erstatte dets farve med gennemsigtighed"
+#: src/tools/classic_tools/tool_paint.py
+msgid "Click on the canvas to entirely paint it"
+msgstr "Klik på lærredet for at male det hele"
+
#: src/tools/classic_tools/tool_pencil.py
msgid "Pencil"
msgstr "Blyant"
@@ -1561,15 +1970,20 @@ msgstr "Blyant"
msgid "Pencil options"
msgstr "Valgmuligheder for blyant"
+#: src/tools/classic_tools/tool_points.py
+msgid "Points options"
+msgstr "Valgmuligheder for punkter"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr "Næste tal: %s"
+
#: src/tools/classic_tools/tool_shape.py
msgid "Shape"
msgstr "Form"
#: src/tools/classic_tools/tool_shape.py
-msgid "Empty"
-msgstr "Tom"
-
-#: src/tools/classic_tools/tool_shape.py
msgid "Shape options"
msgstr "Valgmuligheder for form"
@@ -1581,6 +1995,7 @@ msgstr "Klik på formens første punkt for at lukke den."
msgid "Text"
msgstr "Tekst"
+#. XXX use "text options" instead
#: src/tools/classic_tools/tool_text.py
msgid "Font options"
msgstr "Valgmuligheder for skrifttype"
@@ -1597,34 +2012,51 @@ msgstr "Vælg et område eller højreklik på lærredet"
msgid "Rectangle selection"
msgstr "Rektangelmarkering"
-#: src/tools/canvas_tools/abstract_canvas_tool.py
+#: src/tools/transform_tools/abstract_transform_tool.py
msgid "Error: invalid values"
msgstr "Fejl: ugyldige værdier"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the selection"
msgstr "Beskær markeringen"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the canvas"
msgstr "Beskær lærredet"
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Click on the image to preview the selected filter"
msgstr "Klik på billedet for at forhåndsvise det valgte filter"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the selection"
msgstr "Drej markeringen"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the canvas"
msgstr "Drej lærredet"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the selection"
msgstr "Skaler markeringen"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the canvas"
msgstr "Skaler lærredet"
+
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr "Vrid"
+
+#~ msgid "Flip"
+#~ msgstr "Vend"
+
+#, fuzzy
+#~ msgid "Add semi-transparency"
+#~ msgstr "Tilføj gennemsigtighed"
+
+#~ msgid "Thin"
+#~ msgstr "Tynd"
diff --git a/po/de_DE.po b/po/de_DE.po
index 5f55440e..5b72b87c 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -8,16 +8,16 @@ msgid ""
msgstr ""
"Project-Id-Version: drawing\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-15 19:07+0200\n"
-"PO-Revision-Date: 2020-05-17 14:49+0200\n"
-"Last-Translator: Milo Ivir <mail@milotype.de>\n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
+"PO-Revision-Date: 2020-10-28 21:05+0100\n"
+"Last-Translator: Onno Giesmann <nutzer3105@gmail.com>\n"
"Language-Team: German <--->\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 2.3.1\n"
+"X-Generator: Poedit 2.4.1\n"
#: data/com.github.maoschanz.drawing.desktop.in
#: data/com.github.maoschanz.drawing.appdata.xml.in src/deco_manager.py
@@ -37,7 +37,7 @@ msgstr "com.github.maoschanz.drawing"
#. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons.
#: data/com.github.maoschanz.drawing.desktop.in
msgid "Paint;Sketch;Pencil;"
-msgstr "Paint;Skizze;Bleistift;"
+msgstr "Paint;Skizze;Bleistift;Zeichnen;Malen;Zeichnung;"
#. Context: answer to "where do you want to open the image?"
#: data/com.github.maoschanz.drawing.desktop.in src/ui/app-menus.ui
@@ -80,6 +80,92 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+"Die Version 0.6.4 enthält mehrere kleine Fehlerbehebungen und verschiedene "
+"neue Übersetzungen."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+"Die Version 0.6.3 verbessert das Zeichnen von Pfeilen: verschiedene Fehler "
+"wurden behoben und es sind jetzt auch Pfeile mit zwei Spitzen möglich."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr "Es sind jetzt auch weitere Optionen möglich, Striche zu zeichnen."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+"Diese Version ist jetzt auch mit älteren Distributionen kompatibel "
+"(Versionen der GNOME-Bibliotheken älter als 3.30)"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+"Die Version 0.6.2 enthält mehrere kleine Fehlerbehebungen und verschiedene "
+"neue Übersetzungen."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+"Das Werkzeug 'Hervorheben' bietet jetzt die Option, hellen Text auf einem "
+"dunklen Hintergrund hervorzuheben."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+"Wenn ein Bild ohne seine Transparenz gespeichert wurde, schlägt die "
+"Anwendung nun vor, das Bild noch mal vom Datenträger zu laden. Auch das "
+"Feature 'Vom Datenträger neu laden' ist jetzt verfügbar für alle Fenster-"
+"Layouts."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+"Eine Befehl zum Kopieren des gesamten Bildes in die Zwischenablage wurde "
+"hinzugefügt."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+"Es ist jetzt auch möglich, die Transparenz von PNG-Bildern beim Speichern zu "
+"entfernen. Es gibt jetzt auch mehr Farboptionen, um die transparenten Pixel "
+"zu ersetzen."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+"Ein neues optionales Werkzeug namens 'Punkte' wurde hinzugefügt. Es könnte "
+"hilfreich sein, Bilder zu beschriften."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr "Kleinere Fehler im Werkzeug 'Drehen' wurden behoben."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"Version 0.6 is a major update, with various important changes. The app is "
"more robust and has more tools:"
msgstr ""
@@ -110,8 +196,16 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+"Das Textwerkzeug kann jetzt die meisten Systemschriftarten verwenden. Das "
+"erlaubt komplexere Zeichen zu verwenden (z.B. Asiatische Zeichen)"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
-"with several types of blur, color inversion, pixelisation, saturation and "
+"with several types of blur, color inversion, pixelization, saturation and "
"transparency."
msgstr ""
"Das Werkzeug 'Sättigung' wurde durch 'Filter' ersetzt, einem umfangreichen "
@@ -131,25 +225,38 @@ msgstr ""
"(kleiner oder größer). Das funktioniert über die Mini-Karte, Touchpad oder "
"das Mausrad."
-#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid ""
-"Version 0.4.8 features several minor bug fixes, and various new translations."
-msgstr ""
-"Die Version 0.4.8 enthält mehrere kleine Fehlerbehebungen und verschiedene "
-"neue Übersetzungen."
-
# Copied & pasted into the translated-field to get 100% translated. Did no change to the source string.
#. This is just my name, do not translate it.
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid "Romain F. T."
msgstr "Romain F. T."
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr "Das Fenster mit dem Hauptmenü"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr "Die Auswahl und die damit verknüpften Aktionen"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr "Zoomen in verschiedenen Formen"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr "Menü \"Neues Bild\" geöffnet"
+
#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
#: src/preferences.py
msgid "Preferences"
msgstr "Einstellungen"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
msgid "Report a bug"
msgstr "Einen Fehler melden"
@@ -198,19 +305,22 @@ msgstr "Neues Bild aus der Zwischenablage"
msgid "Reload file"
msgstr "Datei neu laden"
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/properties.py
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
msgid "Image properties"
msgstr "Bildeigenschaften"
#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
-#: src/ui/win-menus.ui src/window.py
+#: src/ui/win-menus.ui src/saving_manager.py
msgid "Save"
msgstr "Speichern"
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Save without transparency"
+msgstr "Speichern ohne Transparenz"
+
#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
-#: src/utilities.py
+#: src/saving_manager.py
msgid "Save as…"
msgstr "Speichern als…"
@@ -219,7 +329,13 @@ msgstr "Speichern als…"
msgid "Export as…"
msgstr "Exportieren als…"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr "In Zwischenablage kopieren"
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
msgid "Print"
msgstr "Drucken"
@@ -304,20 +420,25 @@ msgid "Optimal Zoom"
msgstr "Optimaler Zoom"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom Out"
msgstr "Herauszoomen"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Original Zoom"
msgstr "Original-Zoom"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom In"
msgstr "Hineinzoomen"
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
#: src/ui/app-menus.ui
msgid "Position"
msgstr "Position"
@@ -351,12 +472,6 @@ msgid "Refresh"
msgstr "Aktualisieren"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
-#: src/preferences.py
-msgid "Show tools names"
-msgstr "Werkzeugnamen anzeigen"
-
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/shortcuts.ui
-#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
msgid "Fullscreen"
msgstr "Vollbildansicht"
@@ -389,50 +504,59 @@ msgstr "Farben tauschen"
msgid "Color application mode"
msgstr "Farbanwendungsmodus"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Normal"
msgstr "Normal"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Other modes"
msgstr "Andere Modi"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Raw source color"
msgstr "Quellfarbe"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Highlight"
msgstr "Hervorheben"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Difference"
msgstr "Gegensätzlich"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
-msgid "Photo manipulation"
-msgstr "Bildbearbeitung"
+msgid "Photo-oriented modes"
+msgstr "Fotoorientierte Modi"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Hue only"
msgstr "Nur Farbton"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Saturation only"
msgstr "Nur Sättigung"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Hue and saturation"
msgstr "Farbton und Sättigung"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Luminosity only"
msgstr "Nur Helligkeit"
@@ -442,17 +566,17 @@ msgid "Don't use the colors but…"
msgstr "Benutze nicht die Farben, sondern …"
#. To translators: this is a verb
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Blur"
msgstr "Verwischen"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Erase"
msgstr "Löschen"
-#: src/ui/app-menus.ui src/window.py
+#: src/ui/app-menus.ui
msgid "_Tools"
msgstr "_Werkzeuge"
@@ -460,6 +584,23 @@ msgstr "_Werkzeuge"
msgid "Previous tool"
msgstr "Vorheriges Werkzeug"
+#: src/ui/app-menus.ui
+msgid "Active tool"
+msgstr "Aktives Werkzeug"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "Werkzeugnamen anzeigen"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr "Größere Breite"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Smaller width"
+msgstr "Kleinere Breite"
+
#: src/ui/app-menus.ui src/window.py
msgid "_Options"
msgstr "_Optionen"
@@ -468,22 +609,28 @@ msgstr "_Optionen"
msgid "_Help"
msgstr "_Hilfe"
+#. Context: open the index of all help pages
#: src/ui/app-menus.ui
msgid "Index"
msgstr "Index"
+#. Context: open the help page about general use of the app
#: src/ui/app-menus.ui
msgid "Basic help"
msgstr "Grundlegende Hilfe"
+#. Context: open the help page about classic tools
#: src/ui/app-menus.ui
msgid "Help about tools"
msgstr "Hilfe zu Werkzeugen"
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
#: src/ui/app-menus.ui
msgid "Canvas and selection"
msgstr "Leinwand und Auswahl"
+#. Context: open the help page about the selection
#: src/ui/app-menus.ui
msgid "Help about selection"
msgstr "Hilfe zur Auswahl"
@@ -497,21 +644,25 @@ msgstr "Info zu Zeichnung"
msgid "Open"
msgstr "Öffnen"
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr "Bild teilen"
+
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Width"
msgstr "Breite"
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Height"
msgstr "Höhe"
#: src/ui/new-image-dialog.ui
-msgid "Background color"
-msgstr "Hintergrundfarbe"
+msgid "Color"
+msgstr "Farbe"
#: src/ui/new-image-dialog.ui
msgid "Use these settings by default"
@@ -521,6 +672,8 @@ msgstr "Diese Einstellungen standardmäßig verwenden"
msgid "100%"
msgstr "100%"
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
#: src/ui/properties.ui src/utilities.py
msgid "pixels"
msgstr "Pixel"
@@ -537,7 +690,7 @@ msgstr "Zoll"
msgid "Images"
msgstr "Bilder"
-#: src/ui/preferences.ui src/ui/shortcuts.ui
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "Tools"
msgstr "Werkzeuge"
@@ -556,30 +709,22 @@ msgid "Unselect"
msgstr "Abwählen"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Crop"
msgstr "Zuschneiden"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scale"
msgstr "Skalieren"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotate"
msgstr "Drehen"
-#. In this context, "Skew" is the name of the tool changing rectangles
-#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
-#. "Stretch/Skew" dialog.
-#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_skew.py
-msgid "Skew"
-msgstr "Verzerren"
-
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Filters"
msgstr "Filter"
@@ -589,8 +734,8 @@ msgid "Open As New Image"
msgstr "Als neues Bild öffnen"
#: src/ui/shortcuts.ui
-msgid "Keyboard"
-msgstr "Tastatur"
+msgid "Keyboard Shortcuts"
+msgstr "Tastenkürzel"
#: src/ui/shortcuts.ui
msgid "General"
@@ -601,50 +746,40 @@ msgid "Main menu"
msgstr "Hauptmenü"
#: src/ui/shortcuts.ui
-msgid "Editing"
-msgstr "Bearbeitung"
-
-#: src/ui/shortcuts.ui
msgid "Image"
msgstr "Bild"
-#: src/ui/shortcuts.ui
-msgid "Open a file"
-msgstr "Eine Datei öffnen"
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "Ein Bild öffnen"
#: src/ui/shortcuts.ui
msgid "Reload image from disk"
msgstr "Bild von Festplatte neu laden"
-#: src/ui/shortcuts.ui
-msgid "Save as"
-msgstr "Speichern als"
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "Bild speichern als…"
#: src/ui/shortcuts.ui
msgid "Close the active image"
msgstr "Aktives Bild schließen"
#: src/ui/shortcuts.ui
-msgid "Options menu"
-msgstr "Optionen-Menü"
+msgid "Open the tool options menu"
+msgstr "Menü mit Optionen für Werkzeug öffnen"
#: src/ui/shortcuts.ui
msgid "Back to previous tool"
msgstr "Zurück zum vorherigen Werkzeug"
#: src/ui/shortcuts.ui
-msgid "Colors"
-msgstr "Farben"
-
-#. Label displayed in the keyboard shortcuts dialog
-#: src/ui/shortcuts.ui
-msgid "Edit the main color (left click)"
-msgstr "Bearbeiten der Hauptfarbe (Linksklick)"
+msgid "Apply a transformation"
+msgstr ""
-#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Edit the secondary color (right click)"
-msgstr "Bearbeiten der Zweitfarbe (Rechtsklick)"
+msgid "History"
+msgstr "Verlauf"
#: src/ui/shortcuts.ui
msgid "Selection"
@@ -662,18 +797,26 @@ msgid "Import a file as the selection"
msgstr "Importieren einer Datei als Auswahl"
#: src/ui/shortcuts.ui
-msgid "Tabs"
-msgstr "Reiter"
+msgid "Colors"
+msgstr "Farben"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Enter fullscreen mode"
-msgstr "Vollbildansicht starten"
+msgid "Edit the main color (left click)"
+msgstr "Bearbeiten der Hauptfarbe (Linksklick)"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Exit fullscreen mode"
-msgstr "Vollbildansicht beenden"
+msgid "Edit the secondary color (right click)"
+msgstr "Bearbeiten der Zweitfarbe (Rechtsklick)"
#: src/ui/shortcuts.ui
+msgid "Tabs"
+msgstr "Reiter"
+
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
+#: src/ui/shortcuts.ui
msgid "Navigation"
msgstr "Steuerung"
@@ -681,13 +824,29 @@ msgstr "Steuerung"
msgid "Toggle the preview"
msgstr "Vorschau umschalten"
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr "Vollbildansicht starten"
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr "Vollbildansicht beenden"
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr "Touch-Gesten"
+
#: src/ui/win-menus.ui
msgid "Troubleshoot selection"
msgstr "Problembehandlung bei der Auswahl"
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr "Andere Werkzeuge"
+
#: src/ui/window.ui
msgid "Error starting the application, please report this bug."
-msgstr "Fehler beim Starten der Anwendung. Bitte diesen Fehler melden."
+msgstr "Fehler beim Starten der Anwendung. Bitte melden Sie diesen Fehler."
#: src/deco_manager.py
#, python-format
@@ -699,6 +858,12 @@ msgstr "Rückgängig %s"
msgid "Redo %s"
msgstr "Wiederherstellen %s"
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr "Neuer Pixbuf ist leer, keine Änderung an %s angewendet"
+
#: src/image.py
msgid "Can't reload a never-saved file from the disk."
msgstr ""
@@ -709,15 +874,15 @@ msgstr ""
msgid "Unsaved file"
msgstr "Nicht gespeicherte Datei"
-#: src/new_image_dialog.py src/utilities.py src/window.py
-#: src/tools/utilities_paths.py src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-crop.ui src/tools/ui/tool-filters.ui
-#: src/tools/ui/tool-rotate.ui src/tools/ui/tool-scale.ui
-#: src/tools/ui/tool-skew.ui
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
msgid "Cancel"
msgstr "Abbrechen"
@@ -726,18 +891,22 @@ msgstr "Abbrechen"
msgid "Create"
msgstr "Erstellen"
+#. Description of a command line option
#: src/main.py
msgid "Show the app version"
msgstr "Version der Anwendung anzeigen"
+#. Description of a command line option
#: src/main.py
msgid "Open a new window"
msgstr "Neues Fenster öffnen"
+#. Description of a command line option
#: src/main.py
msgid "Open a new tab"
msgstr "Neuen Tab öffnen"
+#. Description of a command line option
#: src/main.py
msgid "Edit the clipboard content"
msgstr "Inhalt der Zwischenablage bearbeiten"
@@ -750,12 +919,14 @@ msgstr "Diese Version ist nicht fertig!"
msgid "Report bugs or ideas"
msgstr "Fehler oder Ideen melden"
-#. To tranlators: "translate" this by your name, it will be displayed
-#. in the "about" dialog
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
#: src/main.py
msgid "translator-credits"
msgstr "Onno Giesmann"
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
#: src/main.py
msgid "GNOME's \"Art Libre\" icon set authors"
msgstr "Symbolsatz-Autoren von GNOME's \"Art Libre\""
@@ -769,17 +940,24 @@ msgid "Official webpage"
msgstr "Offizielle Internetseite"
#: src/main.py
-#, python-format
-msgid "Error opening this file. Did you mean %s ?"
+#, fuzzy
+msgid "Error opening this file."
msgstr "Fehler beim Öffnen dieser Datei. Meinten Sie %s ?"
-#. This displays the zoom level, %s will be replaced with a number, while
-#. %% is just the symbol '%'
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr ""
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
#: src/minimap.py
#, python-format
msgid "%s%%"
msgstr "%s%%"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "New images"
msgstr "Neue Bilder"
@@ -792,10 +970,16 @@ msgstr "Standardbreite"
msgid "Default height"
msgstr "Standardhöhe"
-#: src/preferences.py
-msgid "Default background"
-msgstr "Standardhintergrund"
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Default color"
+msgstr "Standardfarbe"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Images saving"
msgstr "Speichern von Bildern"
@@ -812,19 +996,23 @@ msgstr ""
"Wenn Sie Ihre Bilder in diesem Format speichern möchten, werden die "
"transparenten Pixel ersetzt. Was möchten Sie dafür nutzen?"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "White"
msgstr "Weiß"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "Black"
msgstr "Schwarz"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
msgid "Checkboard"
msgstr "Schachbrett"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
msgid "Nothing"
msgstr "Nichts"
@@ -837,15 +1025,15 @@ msgid "You can zoom with Ctrl+scrolling, or only scrolling."
msgstr "Sie können Zoomen mit STR+Scrollen oder nur mit Scrollen."
#: src/preferences.py
-msgid "Using keyboard shortcuts or touch gestures is possible too."
-msgstr ""
-"Die Benutzung von Tastenkombinationen oder Touch-Gesten sind ebenfalls "
-"möglich."
+msgid "See the user help manual for explanations."
+msgstr "Schauen Sie in die Hilfeseiten für Erklärungen."
#: src/preferences.py
msgid "Use 'Ctrl' to zoom"
msgstr "'STRG' für Zoomen nutzen"
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
#: src/preferences.py
msgid "Appearance"
msgstr "Erscheinungsbild"
@@ -854,6 +1042,7 @@ msgstr "Erscheinungsbild"
msgid "Use big icons"
msgstr "Große Symbole verwenden"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Additional tools"
msgstr "Zusätzliche Werkzeuge"
@@ -866,31 +1055,51 @@ msgstr ""
"Diese Werkzeuge sind nicht so zuverlässig und nützlich, wie sie sein "
"sollten. Daher sind nicht alle standardmäßig aktiviert."
-#. In the meaning "a rubber eraser"
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
#: src/preferences.py src/tools/classic_tools/tool_eraser.py
msgid "Eraser"
msgstr "Radiergummi"
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
#: src/preferences.py src/tools/classic_tools/tool_highlight.py
msgid "Highlighter"
msgstr "Hervorhebung"
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr "Punkte"
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
#: src/preferences.py src/tools/selection_tools/select_free.py
msgid "Free selection"
msgstr "Freie Auswahl"
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
#: src/preferences.py src/tools/selection_tools/select_color.py
msgid "Color selection"
msgstr "Farbauswahl"
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
#: src/preferences.py src/tools/classic_tools/tool_picker.py
msgid "Color Picker"
msgstr "Farbwähler"
+#. Context: the name of a tool to fill an area of one color with an other
#: src/preferences.py src/tools/classic_tools/tool_paint.py
msgid "Paint"
msgstr "Füllen"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Advanced options"
msgstr "Erweiterte Einstellungen"
@@ -899,11 +1108,18 @@ msgstr "Erweiterte Einstellungen"
msgid "Preview size"
msgstr "Vorschaugröße"
+#. This label will not be displayed in the UI of stable versions
#: src/preferences.py
msgid "Development features"
msgstr "Entwicklungsfunktionen"
#: src/preferences.py
+msgid "Background color"
+msgstr "Hintergrundfarbe"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
msgid "Layout"
msgstr "Layout"
@@ -911,6 +1127,7 @@ msgstr "Layout"
msgid "The recommended value is \"Automatic\"."
msgstr "Der empfohlene Wert ist \"Automatisch\"."
+#. It has to match what's written in the previous string.
#: src/preferences.py
msgid "Automatic"
msgstr "Automatisch"
@@ -930,7 +1147,8 @@ msgid "Legacy"
msgstr "Altmodisch"
#. "Legacy" is about the window layout, it means menubar+toolbar, you
-#. can translate it like if it was "Traditional"
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Legacy (symbolic icons)"
msgstr "Traditionell (einfarbig)"
@@ -943,6 +1161,7 @@ msgstr "Nur Menüleiste"
msgid "Toolbar only"
msgstr "Nur Werkzeugleiste"
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Toolbar only (symbolic icons)"
msgstr "Nur Werkzeugleiste (einfarbig)"
@@ -962,10 +1181,12 @@ msgstr "%s cm"
msgid "%s in"
msgstr "%s in"
+#. Context: the path of the edited file
#: src/properties.py
msgid "Path"
msgstr "Pfad"
+#. Context: the file format of the edited file
#: src/properties.py
msgid "Format"
msgstr "Format"
@@ -974,10 +1195,71 @@ msgstr "Format"
msgid "Colorspace"
msgstr "Farbraum"
+#. Context: an invalid colorspace format
#: src/properties.py
msgid "Invalid format"
msgstr "Ungültiges Format"
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "Speichern von %s fehlgeschlagen"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "Unbenannt"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "diesem Bild"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "Verwerfen"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "Es gibt Änderungen an %s, die noch nicht gespeichert wurden."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+"Ein Teil des Bildes ist ausgewählt und die Pixel unter der Auswahl sind leer."
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr "Änderungen aus dem aktuellen Werkzeug wurden nicht angewendet."
+
+#: src/saving_manager.py
+msgid "Do you want to save anyway?"
+msgstr "Möchten Sie trotzdem speichern?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr "Ersetzen"
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "Dieses Dateiformat unterstützt keine transparenten Farben."
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr ""
+"Sie können das Bild als PNG-Datei speichern oder die Transparenz ersetzen "
+"mit:"
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "Transparenz ersetzen mit:"
+
#: src/utilities.py
msgid "Transparent"
msgstr "Transparenz"
@@ -1000,6 +1282,9 @@ msgid "Brown"
msgstr "Braun"
# Note for me as translator: I need to see this "in work" in the app to understand the whole meaning of it. But I think the translation is good for the moment.
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
#: src/utilities.py
msgid "Probably brown"
msgstr "Eher braun"
@@ -1033,33 +1318,23 @@ msgid "Cyan"
msgstr "Cyan"
# Note for me as translator: I need to see this "in work" in the app to understand the whole meaning of it. But I think the translation is good for the moment.
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
#: src/utilities.py
-msgid "Probably turquoise"
+msgid "Probably teal"
msgstr "Eher türkis"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
#: src/utilities.py
msgid "Unknown color name"
msgstr "Unbekannter Farbname"
#: src/utilities.py
-msgid "Replace"
-msgstr "Ersetzen"
-
-#: src/utilities.py
-msgid "This file format doesn't support transparent colors."
-msgstr "Dieses Dateiformat unterstützt keine transparenten Farben."
-
-#: src/utilities.py
-msgid "You can save the image as a PNG file, or replace transparency with:"
-msgstr ""
-"Sie können das Bild als PNG-Datei speichern oder die Transparenz ersetzen "
-"mit:"
-
-#: src/utilities.py
-msgid "Replace transparency with:"
-msgstr "Transparenz ersetzen mit:"
-
-#: src/utilities.py
msgid "All pictures"
msgstr "Alle Bilder"
@@ -1075,28 +1350,49 @@ msgstr "JPEG-Bilder"
msgid "BMP images"
msgstr "BMP-Bilder"
+#. To translators: it appears in tooltips over numerical inputs
#: src/utilities.py
msgid "percents"
msgstr "Prozent"
-#. To translators: it's the angle measure unit
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
#: src/utilities.py
msgid "degrees"
msgstr "Grad"
+#: src/utilities.py
+#, fuzzy, python-format
+msgid "%s isn't an image."
+msgstr "Ein Bild öffnen"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr ""
+
+#. Context: an error message
#: src/window.py
#, python-format
msgid "Failed to load tool: %s"
msgstr "Fehler beim Laden des Werkzeugs: %s"
#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr ""
+
+#: src/window.py
msgid "Modifications will take effect in the next new window."
msgstr "Die Änderungen werden im nächsten neuen Fenster angewendet."
#: src/window.py src/tools/abstract_tool.py
#: src/optionsbars/classic/optionsbar-classic.ui
#: src/tools/classic_tools/tool_eraser.py
-#: src/tools/classic_tools/tool_highlight.py
msgid "No options"
msgstr "Keine Optionen"
@@ -1106,6 +1402,11 @@ msgstr "Geöffnete Bilder"
#: src/window.py
#, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "Fehler: Bereich ungültig für '%s'. Bitte melden Sie diesen Fehler."
+
+#: src/window.py
+#, python-format
msgid "Loading %s"
msgstr "Wird geladen %s"
@@ -1118,54 +1419,36 @@ msgstr "Neuer Tab"
msgid "Discard changes"
msgstr "Änderungen verwerfen"
-#: src/window.py
-#, python-format
-msgid "There are unsaved modifications to %s."
-msgstr "Es gibt Änderungen an %s, die noch nicht gespeichert wurden."
-
+#. Context: %s will be replaced by the name of a file.
#: src/window.py
#, python-format
msgid "Where do you want to open %s?"
msgstr "Wo möchten Sie %s öffnen?"
-#: src/window.py
-msgid "Open a picture"
-msgstr "Ein Bild öffnen"
-
#. Context for translation:
#. "What do you want to do with *these files*?"
#: src/window.py
msgid "these files"
msgstr "diese Dateien"
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
#: src/window.py
#, python-format
msgid "What do you want to do with %s?"
msgstr "Was möchten Sie mit %s machen?"
-#. else the exception was raised because an actual error occured, or
-#. the user clicked on "cancel"
-#: src/window.py
-#, python-format
-msgid "Failed to save %s"
-msgstr "Speichern von %s fehlgeschlagen"
-
#: src/window.py
-msgid "Untitled"
-msgstr "Unbenannt"
-
-#. Context: the sentence "There are unsaved modifications to %s."
-#: src/window.py
-msgid "this picture"
-msgstr "diesem Bild"
+msgid "Image copied to clipboard"
+msgstr "Bild in Zwischenablage kopiert"
#: src/window.py
-msgid "Discard"
-msgstr "Verwerfen"
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr "Das Bild auf dem Datenträger wurde geändert. Möchten Sie es neu laden?"
#: src/window.py
-msgid "Save picture as…"
-msgstr "Bild speichern als…"
+msgid "Reload"
+msgstr "Neu laden"
#: src/window.py
msgid "Import a picture"
@@ -1175,6 +1458,13 @@ msgstr "Ein Bild importieren"
msgid "Required tool is not available"
msgstr "Benötigtes Werkzeug ist nicht verfügbar"
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
+"Vorgang nicht durchführbar: falsche Werkzeug-ID (erwartet {0}, erhalten {1})"
+
#: src/tools/utilities_paths.py
msgid "Continue"
msgstr "Weiter"
@@ -1195,13 +1485,15 @@ msgstr ""
"Möchten Sie den Vorgang abbrechen oder soll das Werkzeug es trotzdem "
"versuchen?"
+#. Context: fill a shape with the color of the left click
#: src/optionsbars/classic/optionsbar_color_popover.py
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Main color"
msgstr "Hauptfarbe"
-#. if state_as_string == 'secondary':
+#. Context: fill a shape with the color of the right click
#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Secondary color"
msgstr "Zweitfarbe"
@@ -1211,8 +1503,8 @@ msgid "Tool size"
msgstr "Werkzeuggröße"
#: src/optionsbars/classic/optionsbar-classic.ui
-#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-filters.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
msgid "Preview"
msgstr "Vorschau"
@@ -1233,160 +1525,174 @@ msgid "Use this editor by default"
msgstr "Diesen Farbwähler standardmäßig nutzen"
#: src/optionsbars/selection/optionsbar-selection.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "More actions"
msgstr "Weitere Aktionen"
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
msgid "Apply"
msgstr "Anwenden"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "Weitere Optionen"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr "Erweitern mit…"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "Transparenz"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Select a filter…"
msgstr "Wählen Sie einen Filter…"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Saturation"
msgstr "Sättigung"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blur radius"
msgstr "Unschärferadius"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-msgid "Transparency"
-msgstr "Transparenz"
-
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Change saturation"
msgstr "Sättigung ändern"
#. Context: a filter adding like a light veil on the image
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Veil"
msgstr "Schleier"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
msgid "Add transparency"
msgstr "Transparenz hinzufügen"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Invert colors"
msgstr "Farben tauschen"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blurring"
msgstr "Unschärfe"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Fast blur"
msgstr "Schnelle Unschärfe"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Slow blur"
msgstr "Langsame Unschärfe"
#. Context: a filter that censors the image with some kind of tiles
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-msgid "Pixelisation"
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
msgstr "Verpixelung"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Blur direction"
msgstr "Unschärfe-Richtung"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Horizontal"
msgstr "Horizontal"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Vertical"
msgstr "Vertikal"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "No direction"
msgstr "Keine Richtung"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle (degrees)"
msgstr "Winkel (Grad)"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle"
msgstr "Winkel"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate left"
msgstr "Nach links drehen"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate right"
msgstr "Nach rechts drehen"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip horizontally"
msgstr "Horizontal spiegeln"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip vertically"
msgstr "Vertikal spiegeln"
-#: src/optionsbars/canvas/optionsbar-scale.ui
-msgid "More options"
-msgstr "Weitere Optionen"
-
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Keep proportions"
msgstr "Verhältnisse beibehalten"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Always [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Always"
msgstr "Immer"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "[Keep proportions only] when scaling from corners"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "When scaling from corners"
msgstr "Beim Skalieren an den Ecken"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Never [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Never"
msgstr "Nie"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Horizontal deformation"
msgstr "Horizontale Verformung"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Vertical deformation"
msgstr "Vertikale Verformung"
+#: src/tools/ui/selection.ui
+msgid "Transform"
+msgstr "Umwandeln"
+
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
msgid "Line shape"
msgstr "Linienform"
+#. Context: this is the name of a line shape
#. Default values
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
@@ -1394,80 +1700,162 @@ msgstr "Linienform"
msgid "Round"
msgstr "Rund"
+#. Context: this is the name of a line shape
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Thin"
-msgstr "Dünn"
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
+msgid "Square"
+msgstr "Rechteckig"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Square"
-msgstr "Eckig"
+msgid "No arrow"
+msgstr "Kein Pfeil"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr "Einfacher Pfeil"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Double arrow"
+msgstr "Doppelpfeil"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-msgid "Use dashes"
-msgstr "Gestrichelt"
+msgid "No dashes"
+msgstr "Keine Striche"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
-msgid "Arrow"
-msgstr "Pfeil"
+#: src/tools/ui/tool-pencil.ui
+msgid "Simple dashes"
+msgstr "Einfache Striche"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Long dashes"
+msgstr "Lange Striche"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Short dashes"
+msgstr "Kurze Striche"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-shape.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr "Abwechselnde Striche"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
msgid "Antialiasing"
msgstr "Kantenglättung"
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Dark text on light background"
+msgstr "Dunkler Text auf hellem Hintergrund"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr "Heller Text auf dunklem Hintergrund"
+
#: src/tools/ui/tool-line.ui
msgid "Color gradient"
msgstr "Farbverlauf"
+#. Context: title for the list of the possible painting algorithms.
#: src/tools/ui/tool-paint.ui
msgid "Behavior"
msgstr "Verhalten"
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
#: src/tools/ui/tool-paint.ui
msgid "Encircle and fill"
msgstr "Einkreisen und füllen"
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
#: src/tools/ui/tool-paint.ui
msgid "Erase and replace"
msgstr "Löschen und ersetzen"
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
#: src/tools/ui/tool-paint.ui
-msgid "Clipping"
-msgstr "Ausschnitt"
+msgid "Entire image"
+msgstr "Gesamtes Bild"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rectangle"
-msgstr "Rechteck"
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+msgid "Remove color"
+msgstr "Farbe entfernen"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rounded rectangle"
-msgstr "Abgerundetes Rechteck"
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr "Punktetyp"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Oval"
-msgstr "Oval"
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "Kreis"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr "Kreuz"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr "X-förmiges Kreuz"
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr "Eine Nummer einschließen"
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr "Nächste Nummer"
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr "Nummer zurücksetzen"
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr "Dekrementnummer"
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr "Inkrementzahl"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Polygon"
-msgstr "Vieleck"
+msgid "Solid outline"
+msgstr "Durchgehende Außenlinie"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Free shape"
-msgstr "Freie Form"
+msgid "Dashed outline"
+msgstr "Gestrichelte Außenlinie"
+#. if state_as_string == 'none':
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Circle"
-msgstr "Kreis"
+msgid "No outline"
+msgstr "Keine Außenlinie"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr "Füllung"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Empty outline"
-msgstr "Leere Außenlinie"
+msgid "Empty shape"
+msgstr "Leere Form"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Horizontal gradient"
@@ -1481,6 +1869,26 @@ msgstr "Vertikaler Farbverlauf"
msgid "Radial gradient"
msgstr "Radialer Farbverlauf"
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "Rechteck"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr "Abgerundetes Rechteck"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "Oval"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "Vieleck"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "Freie Form"
+
#: src/tools/ui/tool-shape.ui
msgid "Close shape"
msgstr "Form schließen"
@@ -1494,6 +1902,10 @@ msgid "Font"
msgstr "Schriftart"
#: src/tools/ui/tool-text.ui
+msgid "Select a font…"
+msgstr "Wählen Sie eine Schriftart…"
+
+#: src/tools/ui/tool-text.ui
msgid "Italic"
msgstr "Kursiv"
@@ -1501,34 +1913,31 @@ msgstr "Kursiv"
msgid "Bold"
msgstr "Fett"
+#. Context: the types of background behind the inserted text
#: src/tools/ui/tool-text.ui
msgid "Background"
msgstr "Hintergrund"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "No background"
msgstr "Ohne Hintergrund"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Shadow"
msgstr "Schatten"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Outline"
msgstr "Außenlinie"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Rectangle background"
msgstr "Rechteckiger Hintergrund"
-#: src/tools/ui/selection.ui
-msgid "Edit"
-msgstr "Bearbeiten"
-
-#: src/tools/ui/selection.ui
-msgid "Flip"
-msgstr "Spiegeln"
-
#: src/tools/classic_tools/tool_arc.py
msgid "Curve"
msgstr "Bogen"
@@ -1542,10 +1951,18 @@ msgid "Dashed arrow"
msgstr "Gestrichelter Pfeil"
#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "Pfeil"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
#: src/tools/classic_tools/tool_pencil.py
msgid "Dashed"
msgstr "Gestrichelt"
+#: src/tools/classic_tools/tool_highlight.py
+msgid "Highlighter options"
+msgstr "Hervorhebe-Optionen"
+
#: src/tools/classic_tools/tool_line.py
msgid "Line"
msgstr "Linie"
@@ -1563,6 +1980,10 @@ msgid "Click on an area to replace its color by transparency"
msgstr ""
"Klicken Sie auf einen Bereich, um dessen Farbe durch Transparenz zu ersetzen"
+#: src/tools/classic_tools/tool_paint.py
+msgid "Click on the canvas to entirely paint it"
+msgstr "Leinwand anklicken, um sie vollständig auszumalen"
+
#: src/tools/classic_tools/tool_pencil.py
msgid "Pencil"
msgstr "Bleistift"
@@ -1571,15 +1992,20 @@ msgstr "Bleistift"
msgid "Pencil options"
msgstr "Bleistift-Optionen"
+#: src/tools/classic_tools/tool_points.py
+msgid "Points options"
+msgstr "Punkte-Optionen"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr "Nächste Nummer: %s"
+
#: src/tools/classic_tools/tool_shape.py
msgid "Shape"
msgstr "Form"
#: src/tools/classic_tools/tool_shape.py
-msgid "Empty"
-msgstr "Leer"
-
-#: src/tools/classic_tools/tool_shape.py
msgid "Shape options"
msgstr "Form-Optionen"
@@ -1591,6 +2017,7 @@ msgstr "Klicken Sie auf den ersten Punkt der Form, um es zu schließen."
msgid "Text"
msgstr "Text"
+#. XXX use "text options" instead
#: src/tools/classic_tools/tool_text.py
msgid "Font options"
msgstr "Schriftart-Optionen"
@@ -1607,47 +2034,57 @@ msgstr "Bereich auswählen oder Rechtsklick auf die Leinwand"
msgid "Rectangle selection"
msgstr "Rechteckauswahl"
-#: src/tools/canvas_tools/abstract_canvas_tool.py
+#: src/tools/transform_tools/abstract_transform_tool.py
msgid "Error: invalid values"
msgstr "Fehler: Ungültige Werte"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the selection"
msgstr "Auswahl zuschneiden"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the canvas"
msgstr "Leinwand zuschneiden"
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Click on the image to preview the selected filter"
msgstr "Klicken Sie für eine Vorschau zum ausgewählten Filter auf das Bild"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the selection"
msgstr "Auswahl drehen"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the canvas"
msgstr "Leinwand drehen"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the selection"
msgstr "Auswahl skalieren"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the canvas"
msgstr "Leinwand skalieren"
-#~ msgid "Classic"
-#~ msgstr "Klassisch"
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr "Verzerren"
+
+#~ msgid "Flip"
+#~ msgstr "Spiegeln"
+
+#~ msgid "Edit"
+#~ msgstr "Bearbeiten"
+
+#~ msgid "Save as"
+#~ msgstr "Speichern als"
#~ msgid "Close"
#~ msgstr "Schließen"
-#~ msgid "Filling"
-#~ msgstr "Füllung"
-
#~ msgid "Freehand"
#~ msgstr "Freihand"
diff --git a/po/drawing.pot b/po/drawing.pot
index 3bccf65e..0b9f6cd3 100644
--- a/po/drawing.pot
+++ b/po/drawing.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: drawing\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-15 19:07+0200\n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -72,6 +72,71 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"Version 0.6 is a major update, with various important changes. The app is "
"more robust and has more tools:"
msgstr ""
@@ -93,8 +158,14 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
-"with several types of blur, color inversion, pixelisation, saturation and "
+"with several types of blur, color inversion, pixelization, saturation and "
"transparency."
msgstr ""
@@ -108,14 +179,29 @@ msgid ""
"image, using the minimap, the touchpad or the mouse wheel."
msgstr ""
+#. This is just my name, do not translate it.
#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid ""
-"Version 0.4.8 features several minor bug fixes, and various new translations."
+msgid "Romain F. T."
msgstr ""
-#. This is just my name, do not translate it.
+#. Caption of a screenshot, for appstores
#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid "Romain F. T."
+msgid "The window and its primary menu"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
msgstr ""
#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
@@ -123,7 +209,7 @@ msgstr ""
msgid "Preferences"
msgstr ""
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
msgid "Report a bug"
msgstr ""
@@ -172,19 +258,22 @@ msgstr ""
msgid "Reload file"
msgstr ""
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/properties.py
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
msgid "Image properties"
msgstr ""
#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
-#: src/ui/win-menus.ui src/window.py
+#: src/ui/win-menus.ui src/saving_manager.py
msgid "Save"
msgstr ""
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Save without transparency"
+msgstr ""
+
#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
-#: src/utilities.py
+#: src/saving_manager.py
msgid "Save as…"
msgstr ""
@@ -193,7 +282,13 @@ msgstr ""
msgid "Export as…"
msgstr ""
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
msgid "Print"
msgstr ""
@@ -278,20 +373,25 @@ msgid "Optimal Zoom"
msgstr ""
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom Out"
msgstr ""
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Original Zoom"
msgstr ""
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom In"
msgstr ""
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
#: src/ui/app-menus.ui
msgid "Position"
msgstr ""
@@ -325,12 +425,6 @@ msgid "Refresh"
msgstr ""
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
-#: src/preferences.py
-msgid "Show tools names"
-msgstr ""
-
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/shortcuts.ui
-#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
msgid "Fullscreen"
msgstr ""
@@ -363,50 +457,59 @@ msgstr ""
msgid "Color application mode"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Normal"
msgstr ""
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Other modes"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Raw source color"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Highlight"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Difference"
msgstr ""
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
-msgid "Photo manipulation"
+msgid "Photo-oriented modes"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Hue only"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Saturation only"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Hue and saturation"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Luminosity only"
msgstr ""
@@ -416,17 +519,17 @@ msgid "Don't use the colors but…"
msgstr ""
#. To translators: this is a verb
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Blur"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Erase"
msgstr ""
-#: src/ui/app-menus.ui src/window.py
+#: src/ui/app-menus.ui
msgid "_Tools"
msgstr ""
@@ -434,6 +537,23 @@ msgstr ""
msgid "Previous tool"
msgstr ""
+#: src/ui/app-menus.ui
+msgid "Active tool"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Smaller width"
+msgstr ""
+
#: src/ui/app-menus.ui src/window.py
msgid "_Options"
msgstr ""
@@ -442,22 +562,28 @@ msgstr ""
msgid "_Help"
msgstr ""
+#. Context: open the index of all help pages
#: src/ui/app-menus.ui
msgid "Index"
msgstr ""
+#. Context: open the help page about general use of the app
#: src/ui/app-menus.ui
msgid "Basic help"
msgstr ""
+#. Context: open the help page about classic tools
#: src/ui/app-menus.ui
msgid "Help about tools"
msgstr ""
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
#: src/ui/app-menus.ui
msgid "Canvas and selection"
msgstr ""
+#. Context: open the help page about the selection
#: src/ui/app-menus.ui
msgid "Help about selection"
msgstr ""
@@ -471,20 +597,24 @@ msgstr ""
msgid "Open"
msgstr ""
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr ""
+
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Width"
msgstr ""
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Height"
msgstr ""
#: src/ui/new-image-dialog.ui
-msgid "Background color"
+msgid "Color"
msgstr ""
#: src/ui/new-image-dialog.ui
@@ -495,6 +625,8 @@ msgstr ""
msgid "100%"
msgstr ""
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
#: src/ui/properties.ui src/utilities.py
msgid "pixels"
msgstr ""
@@ -511,7 +643,7 @@ msgstr ""
msgid "Images"
msgstr ""
-#: src/ui/preferences.ui src/ui/shortcuts.ui
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "Tools"
msgstr ""
@@ -530,30 +662,22 @@ msgid "Unselect"
msgstr ""
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Crop"
msgstr ""
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scale"
msgstr ""
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotate"
msgstr ""
-#. In this context, "Skew" is the name of the tool changing rectangles
-#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
-#. "Stretch/Skew" dialog.
-#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_skew.py
-msgid "Skew"
-msgstr ""
-
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Filters"
msgstr ""
@@ -563,7 +687,7 @@ msgid "Open As New Image"
msgstr ""
#: src/ui/shortcuts.ui
-msgid "Keyboard"
+msgid "Keyboard Shortcuts"
msgstr ""
#: src/ui/shortcuts.ui
@@ -575,23 +699,19 @@ msgid "Main menu"
msgstr ""
#: src/ui/shortcuts.ui
-msgid "Editing"
-msgstr ""
-
-#: src/ui/shortcuts.ui
msgid "Image"
msgstr ""
-#: src/ui/shortcuts.ui
-msgid "Open a file"
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
msgstr ""
#: src/ui/shortcuts.ui
msgid "Reload image from disk"
msgstr ""
-#: src/ui/shortcuts.ui
-msgid "Save as"
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
msgstr ""
#: src/ui/shortcuts.ui
@@ -599,7 +719,7 @@ msgid "Close the active image"
msgstr ""
#: src/ui/shortcuts.ui
-msgid "Options menu"
+msgid "Open the tool options menu"
msgstr ""
#: src/ui/shortcuts.ui
@@ -607,57 +727,75 @@ msgid "Back to previous tool"
msgstr ""
#: src/ui/shortcuts.ui
-msgid "Colors"
+msgid "Apply a transformation"
+msgstr ""
+
+#: src/ui/shortcuts.ui
+msgid "History"
+msgstr ""
+
+#: src/ui/shortcuts.ui
+msgid "Selection"
msgstr ""
#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Edit the main color (left click)"
+msgid "Delete the selection"
msgstr ""
#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Edit the secondary color (right click)"
+msgid "Import a file as the selection"
msgstr ""
#: src/ui/shortcuts.ui
-msgid "Selection"
+msgid "Colors"
msgstr ""
#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Delete the selection"
+msgid "Edit the main color (left click)"
msgstr ""
#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Import a file as the selection"
+msgid "Edit the secondary color (right click)"
msgstr ""
#: src/ui/shortcuts.ui
msgid "Tabs"
msgstr ""
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
#: src/ui/shortcuts.ui
-msgid "Enter fullscreen mode"
+msgid "Navigation"
msgstr ""
#: src/ui/shortcuts.ui
-msgid "Exit fullscreen mode"
+msgid "Toggle the preview"
msgstr ""
#: src/ui/shortcuts.ui
-msgid "Navigation"
+msgid "Enter fullscreen mode"
msgstr ""
#: src/ui/shortcuts.ui
-msgid "Toggle the preview"
+msgid "Exit fullscreen mode"
+msgstr ""
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
msgstr ""
#: src/ui/win-menus.ui
msgid "Troubleshoot selection"
msgstr ""
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr ""
+
#: src/ui/window.ui
msgid "Error starting the application, please report this bug."
msgstr ""
@@ -672,6 +810,12 @@ msgstr ""
msgid "Redo %s"
msgstr ""
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr ""
+
#: src/image.py
msgid "Can't reload a never-saved file from the disk."
msgstr ""
@@ -680,15 +824,15 @@ msgstr ""
msgid "Unsaved file"
msgstr ""
-#: src/new_image_dialog.py src/utilities.py src/window.py
-#: src/tools/utilities_paths.py src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-crop.ui src/tools/ui/tool-filters.ui
-#: src/tools/ui/tool-rotate.ui src/tools/ui/tool-scale.ui
-#: src/tools/ui/tool-skew.ui
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
msgid "Cancel"
msgstr ""
@@ -697,18 +841,22 @@ msgstr ""
msgid "Create"
msgstr ""
+#. Description of a command line option
#: src/main.py
msgid "Show the app version"
msgstr ""
+#. Description of a command line option
#: src/main.py
msgid "Open a new window"
msgstr ""
+#. Description of a command line option
#: src/main.py
msgid "Open a new tab"
msgstr ""
+#. Description of a command line option
#: src/main.py
msgid "Edit the clipboard content"
msgstr ""
@@ -721,12 +869,14 @@ msgstr ""
msgid "Report bugs or ideas"
msgstr ""
-#. To tranlators: "translate" this by your name, it will be displayed
-#. in the "about" dialog
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
#: src/main.py
msgid "translator-credits"
msgstr ""
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
#: src/main.py
msgid "GNOME's \"Art Libre\" icon set authors"
msgstr ""
@@ -740,17 +890,23 @@ msgid "Official webpage"
msgstr ""
#: src/main.py
+msgid "Error opening this file."
+msgstr ""
+
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
#, python-format
-msgid "Error opening this file. Did you mean %s ?"
+msgid "Did you mean %s ?"
msgstr ""
-#. This displays the zoom level, %s will be replaced with a number, while
-#. %% is just the symbol '%'
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
#: src/minimap.py
#, python-format
msgid "%s%%"
msgstr ""
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "New images"
msgstr ""
@@ -763,10 +919,16 @@ msgstr ""
msgid "Default height"
msgstr ""
-#: src/preferences.py
-msgid "Default background"
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Default color"
msgstr ""
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Images saving"
msgstr ""
@@ -781,19 +943,23 @@ msgid ""
"transparent pixels?"
msgstr ""
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "White"
msgstr ""
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "Black"
msgstr ""
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
msgid "Checkboard"
msgstr ""
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
msgid "Nothing"
msgstr ""
@@ -806,13 +972,15 @@ msgid "You can zoom with Ctrl+scrolling, or only scrolling."
msgstr ""
#: src/preferences.py
-msgid "Using keyboard shortcuts or touch gestures is possible too."
+msgid "See the user help manual for explanations."
msgstr ""
#: src/preferences.py
msgid "Use 'Ctrl' to zoom"
msgstr ""
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
#: src/preferences.py
msgid "Appearance"
msgstr ""
@@ -821,6 +989,7 @@ msgstr ""
msgid "Use big icons"
msgstr ""
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Additional tools"
msgstr ""
@@ -831,31 +1000,51 @@ msgid ""
"not all enabled by default."
msgstr ""
-#. In the meaning "a rubber eraser"
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
#: src/preferences.py src/tools/classic_tools/tool_eraser.py
msgid "Eraser"
msgstr ""
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
#: src/preferences.py src/tools/classic_tools/tool_highlight.py
msgid "Highlighter"
msgstr ""
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr ""
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
#: src/preferences.py src/tools/selection_tools/select_free.py
msgid "Free selection"
msgstr ""
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
#: src/preferences.py src/tools/selection_tools/select_color.py
msgid "Color selection"
msgstr ""
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
#: src/preferences.py src/tools/classic_tools/tool_picker.py
msgid "Color Picker"
msgstr ""
+#. Context: the name of a tool to fill an area of one color with an other
#: src/preferences.py src/tools/classic_tools/tool_paint.py
msgid "Paint"
msgstr ""
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Advanced options"
msgstr ""
@@ -864,11 +1053,18 @@ msgstr ""
msgid "Preview size"
msgstr ""
+#. This label will not be displayed in the UI of stable versions
#: src/preferences.py
msgid "Development features"
msgstr ""
#: src/preferences.py
+msgid "Background color"
+msgstr ""
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
msgid "Layout"
msgstr ""
@@ -876,6 +1072,7 @@ msgstr ""
msgid "The recommended value is \"Automatic\"."
msgstr ""
+#. It has to match what's written in the previous string.
#: src/preferences.py
msgid "Automatic"
msgstr ""
@@ -895,7 +1092,8 @@ msgid "Legacy"
msgstr ""
#. "Legacy" is about the window layout, it means menubar+toolbar, you
-#. can translate it like if it was "Traditional"
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Legacy (symbolic icons)"
msgstr ""
@@ -908,6 +1106,7 @@ msgstr ""
msgid "Toolbar only"
msgstr ""
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Toolbar only (symbolic icons)"
msgstr ""
@@ -927,10 +1126,12 @@ msgstr ""
msgid "%s in"
msgstr ""
+#. Context: the path of the edited file
#: src/properties.py
msgid "Path"
msgstr ""
+#. Context: the file format of the edited file
#: src/properties.py
msgid "Format"
msgstr ""
@@ -939,10 +1140,68 @@ msgstr ""
msgid "Colorspace"
msgstr ""
+#. Context: an invalid colorspace format
#: src/properties.py
msgid "Invalid format"
msgstr ""
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr ""
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr ""
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr ""
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr ""
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Do you want to save anyway?"
+msgstr ""
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr ""
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr ""
+
#: src/utilities.py
msgid "Transparent"
msgstr ""
@@ -964,6 +1223,9 @@ msgstr ""
msgid "Brown"
msgstr ""
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
#: src/utilities.py
msgid "Probably brown"
msgstr ""
@@ -996,68 +1258,81 @@ msgstr ""
msgid "Cyan"
msgstr ""
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
#: src/utilities.py
-msgid "Probably turquoise"
+msgid "Probably teal"
msgstr ""
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
#: src/utilities.py
msgid "Unknown color name"
msgstr ""
#: src/utilities.py
-msgid "Replace"
-msgstr ""
-
-#: src/utilities.py
-msgid "This file format doesn't support transparent colors."
+msgid "All pictures"
msgstr ""
#: src/utilities.py
-msgid "You can save the image as a PNG file, or replace transparency with:"
+msgid "PNG images"
msgstr ""
#: src/utilities.py
-msgid "Replace transparency with:"
+msgid "JPEG images"
msgstr ""
#: src/utilities.py
-msgid "All pictures"
+msgid "BMP images"
msgstr ""
+#. To translators: it appears in tooltips over numerical inputs
#: src/utilities.py
-msgid "PNG images"
+msgid "percents"
msgstr ""
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
#: src/utilities.py
-msgid "JPEG images"
+msgid "degrees"
msgstr ""
#: src/utilities.py
-msgid "BMP images"
+#, python-format
+msgid "%s isn't an image."
msgstr ""
#: src/utilities.py
-msgid "percents"
+msgid "Sorry, WEBP images can't be loaded by this app."
msgstr ""
-#. To translators: it's the angle measure unit
+#. Context: an error message, %s is a file path
#: src/utilities.py
-msgid "degrees"
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
msgstr ""
+#. Context: an error message
#: src/window.py
#, python-format
msgid "Failed to load tool: %s"
msgstr ""
#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr ""
+
+#: src/window.py
msgid "Modifications will take effect in the next new window."
msgstr ""
#: src/window.py src/tools/abstract_tool.py
#: src/optionsbars/classic/optionsbar-classic.ui
#: src/tools/classic_tools/tool_eraser.py
-#: src/tools/classic_tools/tool_highlight.py
msgid "No options"
msgstr ""
@@ -1067,6 +1342,11 @@ msgstr ""
#: src/window.py
#, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr ""
+
+#: src/window.py
+#, python-format
msgid "Loading %s"
msgstr ""
@@ -1079,53 +1359,35 @@ msgstr ""
msgid "Discard changes"
msgstr ""
-#: src/window.py
-#, python-format
-msgid "There are unsaved modifications to %s."
-msgstr ""
-
+#. Context: %s will be replaced by the name of a file.
#: src/window.py
#, python-format
msgid "Where do you want to open %s?"
msgstr ""
-#: src/window.py
-msgid "Open a picture"
-msgstr ""
-
#. Context for translation:
#. "What do you want to do with *these files*?"
#: src/window.py
msgid "these files"
msgstr ""
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
#: src/window.py
#, python-format
msgid "What do you want to do with %s?"
msgstr ""
-#. else the exception was raised because an actual error occured, or
-#. the user clicked on "cancel"
#: src/window.py
-#, python-format
-msgid "Failed to save %s"
+msgid "Image copied to clipboard"
msgstr ""
#: src/window.py
-msgid "Untitled"
-msgstr ""
-
-#. Context: the sentence "There are unsaved modifications to %s."
-#: src/window.py
-msgid "this picture"
+msgid "The image changed on the disk, do you want to reload it?"
msgstr ""
#: src/window.py
-msgid "Discard"
-msgstr ""
-
-#: src/window.py
-msgid "Save picture as…"
+msgid "Reload"
msgstr ""
#: src/window.py
@@ -1136,6 +1398,12 @@ msgstr ""
msgid "Required tool is not available"
msgstr ""
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
+
#: src/tools/utilities_paths.py
msgid "Continue"
msgstr ""
@@ -1152,13 +1420,15 @@ msgstr ""
msgid "Do you want to abort the operation, or to let the tool struggle ?"
msgstr ""
+#. Context: fill a shape with the color of the left click
#: src/optionsbars/classic/optionsbar_color_popover.py
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Main color"
msgstr ""
-#. if state_as_string == 'secondary':
+#. Context: fill a shape with the color of the right click
#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Secondary color"
msgstr ""
@@ -1168,8 +1438,8 @@ msgid "Tool size"
msgstr ""
#: src/optionsbars/classic/optionsbar-classic.ui
-#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-filters.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
msgid "Preview"
msgstr ""
@@ -1190,160 +1460,174 @@ msgid "Use this editor by default"
msgstr ""
#: src/optionsbars/selection/optionsbar-selection.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "More actions"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
msgid "Apply"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr ""
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr ""
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr ""
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Select a filter…"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Saturation"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blur radius"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui
-msgid "Transparency"
-msgstr ""
-
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Change saturation"
msgstr ""
#. Context: a filter adding like a light veil on the image
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Veil"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
msgid "Add transparency"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Invert colors"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blurring"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Fast blur"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Slow blur"
msgstr ""
#. Context: a filter that censors the image with some kind of tiles
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-msgid "Pixelisation"
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Blur direction"
msgstr ""
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Horizontal"
msgstr ""
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Vertical"
msgstr ""
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "No direction"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle (degrees)"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate left"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate right"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip horizontally"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip vertically"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-scale.ui
-msgid "More options"
-msgstr ""
-
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Keep proportions"
msgstr ""
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Always [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Always"
msgstr ""
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "[Keep proportions only] when scaling from corners"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "When scaling from corners"
msgstr ""
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Never [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Never"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Horizontal deformation"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Vertical deformation"
msgstr ""
+#: src/tools/ui/selection.ui
+msgid "Transform"
+msgstr ""
+
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
msgid "Line shape"
msgstr ""
+#. Context: this is the name of a line shape
#. Default values
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
@@ -1351,79 +1635,161 @@ msgstr ""
msgid "Round"
msgstr ""
+#. Context: this is the name of a line shape
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Thin"
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
+msgid "Square"
msgstr ""
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Square"
+msgid "No arrow"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Double arrow"
msgstr ""
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-msgid "Use dashes"
+msgid "No dashes"
msgstr ""
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
-msgid "Arrow"
+#: src/tools/ui/tool-pencil.ui
+msgid "Simple dashes"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Long dashes"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Short dashes"
msgstr ""
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-shape.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
msgid "Antialiasing"
msgstr ""
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Dark text on light background"
+msgstr ""
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr ""
+
#: src/tools/ui/tool-line.ui
msgid "Color gradient"
msgstr ""
+#. Context: title for the list of the possible painting algorithms.
#: src/tools/ui/tool-paint.ui
msgid "Behavior"
msgstr ""
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
#: src/tools/ui/tool-paint.ui
msgid "Encircle and fill"
msgstr ""
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
#: src/tools/ui/tool-paint.ui
msgid "Erase and replace"
msgstr ""
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
#: src/tools/ui/tool-paint.ui
-msgid "Clipping"
+msgid "Entire image"
msgstr ""
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rectangle"
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+msgid "Remove color"
msgstr ""
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rounded rectangle"
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
msgstr ""
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Oval"
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Polygon"
+msgid "Solid outline"
msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Free shape"
+msgid "Dashed outline"
msgstr ""
+#. if state_as_string == 'none':
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Circle"
+msgid "No outline"
+msgstr ""
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Empty outline"
+msgid "Empty shape"
msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
@@ -1438,6 +1804,26 @@ msgstr ""
msgid "Radial gradient"
msgstr ""
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr ""
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr ""
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr ""
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr ""
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr ""
+
#: src/tools/ui/tool-shape.ui
msgid "Close shape"
msgstr ""
@@ -1451,6 +1837,10 @@ msgid "Font"
msgstr ""
#: src/tools/ui/tool-text.ui
+msgid "Select a font…"
+msgstr ""
+
+#: src/tools/ui/tool-text.ui
msgid "Italic"
msgstr ""
@@ -1458,34 +1848,31 @@ msgstr ""
msgid "Bold"
msgstr ""
+#. Context: the types of background behind the inserted text
#: src/tools/ui/tool-text.ui
msgid "Background"
msgstr ""
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "No background"
msgstr ""
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Shadow"
msgstr ""
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Outline"
msgstr ""
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Rectangle background"
msgstr ""
-#: src/tools/ui/selection.ui
-msgid "Edit"
-msgstr ""
-
-#: src/tools/ui/selection.ui
-msgid "Flip"
-msgstr ""
-
#: src/tools/classic_tools/tool_arc.py
msgid "Curve"
msgstr ""
@@ -1499,10 +1886,18 @@ msgid "Dashed arrow"
msgstr ""
#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr ""
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
#: src/tools/classic_tools/tool_pencil.py
msgid "Dashed"
msgstr ""
+#: src/tools/classic_tools/tool_highlight.py
+msgid "Highlighter options"
+msgstr ""
+
#: src/tools/classic_tools/tool_line.py
msgid "Line"
msgstr ""
@@ -1519,6 +1914,10 @@ msgstr ""
msgid "Click on an area to replace its color by transparency"
msgstr ""
+#: src/tools/classic_tools/tool_paint.py
+msgid "Click on the canvas to entirely paint it"
+msgstr ""
+
#: src/tools/classic_tools/tool_pencil.py
msgid "Pencil"
msgstr ""
@@ -1527,12 +1926,17 @@ msgstr ""
msgid "Pencil options"
msgstr ""
-#: src/tools/classic_tools/tool_shape.py
-msgid "Shape"
+#: src/tools/classic_tools/tool_points.py
+msgid "Points options"
+msgstr ""
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
msgstr ""
#: src/tools/classic_tools/tool_shape.py
-msgid "Empty"
+msgid "Shape"
msgstr ""
#: src/tools/classic_tools/tool_shape.py
@@ -1547,6 +1951,7 @@ msgstr ""
msgid "Text"
msgstr ""
+#. XXX use "text options" instead
#: src/tools/classic_tools/tool_text.py
msgid "Font options"
msgstr ""
@@ -1563,34 +1968,41 @@ msgstr ""
msgid "Rectangle selection"
msgstr ""
-#: src/tools/canvas_tools/abstract_canvas_tool.py
+#: src/tools/transform_tools/abstract_transform_tool.py
msgid "Error: invalid values"
msgstr ""
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the selection"
msgstr ""
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the canvas"
msgstr ""
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Click on the image to preview the selected filter"
msgstr ""
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the selection"
msgstr ""
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the canvas"
msgstr ""
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the selection"
msgstr ""
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the canvas"
msgstr ""
+
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr ""
diff --git a/po/es.po b/po/es.po
index 361f2bc3..5300aadd 100644
--- a/po/es.po
+++ b/po/es.po
@@ -1,22 +1,22 @@
# Spanish translation of drawing.
# Copyright (C) 2018-2020 Romain F. T.
# This file is distributed under the same license as the drawing package.
-# Adolfo Jayme Barrientos <fitojb@ubuntu.com>
+# Adolfo Jayme Barrientos <fitojb@ubuntu.com>, 2019-2020
# Xoán Sampaíño <xoansampainho@gmail.com>, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: drawing\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-15 19:07+0200\n"
-"PO-Revision-Date: 2019-12-10 13:57+0100\n"
-"Last-Translator: Xoán Sampaíño <xoansampainho@gmail.com>\n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
+"PO-Revision-Date: 2020-08-24 05:01-0500\n"
+"Last-Translator: Adolfo Jayme Barrientos <fitojb@ubuntu.com>\n"
"Language-Team: \n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.2.4\n"
+"X-Generator: Poedit 2.4.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: data/com.github.maoschanz.drawing.desktop.in
@@ -63,7 +63,7 @@ msgstr "Una aplicación de dibujo para el escritorio GNOME"
msgid ""
"\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types."
msgstr ""
-"«Drawing» es un editor de imagen básico con soporte para tipos de archivo "
+"«Drawing» es un editor de imagen básico compatible con los tipos de archivo "
"PNG, JPEG y BMP."
#: data/com.github.maoschanz.drawing.appdata.xml.in
@@ -80,9 +80,80 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+"La versión 0.6.4 presenta varias correcciones de errores menores y varias "
+"traducciones nuevas."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+"La versión 0.6.2 presenta varias correcciones de errores menores y varias "
+"traducciones nuevas."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"Version 0.6 is a major update, with various important changes. The app is "
"more robust and has more tools:"
msgstr ""
+"La versión 0.6 es una actualización importante que incluye cambios "
+"significativos. La aplicación es más robusta e incluye más herramientas:"
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
@@ -90,6 +161,9 @@ msgid ""
"'rotate' tool now supports any angle and handles horizontal or vertical "
"flipping."
msgstr ""
+"Las selecciones de rectángulo y a mano alzada son ahora herramientas "
+"distintas, y la herramienta «Girar» ahora admite cualquier ángulo y permite "
+"voltear horizontal y verticalmente."
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
@@ -98,11 +172,24 @@ msgid ""
"rectangle' and 'ellipse'. Their filling options now include various types of "
"gradients."
msgstr ""
+"Las diversas herramientas para crear formas (círculo, rectángulo, polígono…) "
+"se han combinado en una sola, «Forma», que funciona de manera más coherente, "
+"además de «Rectángulo redondeado» y «Elipse». Sus opciones de relleno ahora "
+"incluyen varios tipos de degradado."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+"La herramienta de texto ahora permite escribir con la mayoría de los tipos "
+"de letra del sistema, lo que a su vez permite utilizar caracteres complejos "
+"(como los asiáticos)."
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
-"with several types of blur, color inversion, pixelisation, saturation and "
+"with several types of blur, color inversion, pixelization, saturation and "
"transparency."
msgstr ""
"La herramienta «saturación» ha sido reemplazada por «filtros», una "
@@ -121,24 +208,37 @@ msgstr ""
"La característica nueva más destacada es la posibilidad de acercar (o "
"alejar) la imagen usando el minimapa, el panel táctil o la rueda del ratón."
-#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid ""
-"Version 0.4.8 features several minor bug fixes, and various new translations."
-msgstr ""
-"La versión 0.4.8 presenta varias correcciones de errores menores y varias "
-"traducciones nuevas."
-
#. This is just my name, do not translate it.
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid "Romain F. T."
msgstr "Romain F. T."
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr ""
+
#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
#: src/preferences.py
msgid "Preferences"
msgstr "Preferencias"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
msgid "Report a bug"
msgstr "Informar de un fallo"
@@ -169,37 +269,41 @@ msgstr "Abrir una imagen"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "New Blank Image"
-msgstr "Nueva imagen en blanco"
+msgstr "Imagen en blanco nueva"
#: src/ui/app-menus.ui src/ui/win-menus.ui src/new_image_dialog.py
msgid "New Image With Custom Size"
-msgstr "Nueva imagen de tamaño personalizado"
+msgstr "Imagen de tamaño personalizado nueva"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "New Image From Selection"
-msgstr "Desde la selección"
+msgstr "Imagen nueva desde selección"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "New Image From Clipboard"
-msgstr "Desde el portapapeles"
+msgstr "Imagen nueva desde portapapeles"
#: src/ui/app-menus.ui src/ui/win-menus.ui
msgid "Reload file"
msgstr "Recargar archivo"
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/properties.py
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
msgid "Image properties"
msgstr "Propiedades de imagen"
#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
-#: src/ui/win-menus.ui src/window.py
+#: src/ui/win-menus.ui src/saving_manager.py
msgid "Save"
msgstr "Guardar"
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+#, fuzzy
+msgid "Save without transparency"
+msgstr "Añadir transparencia"
+
#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
-#: src/utilities.py
+#: src/saving_manager.py
msgid "Save as…"
msgstr "Guardar como…"
@@ -208,7 +312,13 @@ msgstr "Guardar como…"
msgid "Export as…"
msgstr "Exportar como…"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
msgid "Print"
msgstr "Imprimir"
@@ -293,20 +403,25 @@ msgid "Optimal Zoom"
msgstr "Ampliación óptima"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom Out"
msgstr "Alejar"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Original Zoom"
msgstr "Ampliación original"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom In"
msgstr "Acercar"
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
#: src/ui/app-menus.ui
msgid "Position"
msgstr "Posición"
@@ -328,26 +443,18 @@ msgid "Go Right"
msgstr "Ir a la derecha"
#: src/ui/app-menus.ui src/ui/shortcuts.ui
-#, fuzzy
msgid "Tab at the left"
-msgstr "Volver a la paleta"
+msgstr "Pestaña a la izquierda"
#: src/ui/app-menus.ui src/ui/shortcuts.ui
-#, fuzzy
msgid "Tab at the right"
-msgstr "Girar a la derecha"
+msgstr "Pestaña a la derecha"
#: src/ui/app-menus.ui src/ui/win-menus.ui
msgid "Refresh"
msgstr "Actualizar"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
-#: src/preferences.py
-msgid "Show tools names"
-msgstr "Mostrar nombres de herramientas"
-
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/shortcuts.ui
-#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
msgid "Fullscreen"
msgstr "Pantalla completa"
@@ -360,19 +467,16 @@ msgid "_Colors"
msgstr "_Colores"
#: src/ui/app-menus.ui
-#, fuzzy
msgid "Edit Main Color…"
-msgstr "Color principal"
+msgstr "Editar color principal…"
#: src/ui/app-menus.ui
-#, fuzzy
msgid "Edit Secondary Color…"
-msgstr "Color secundario"
+msgstr "Editar color secundario…"
#: src/ui/app-menus.ui
-#, fuzzy
msgid "Use color editor by default"
-msgstr "Editor de colores predeterminado"
+msgstr "Utilizar editor de colores de manera predeterminada"
#: src/ui/app-menus.ui src/ui/shortcuts.ui
#: src/optionsbars/classic/optionsbar-classic.ui
@@ -380,81 +484,82 @@ msgid "Exchange colors"
msgstr "Intercambiar colores"
#: src/ui/app-menus.ui
-#, fuzzy
msgid "Color application mode"
-msgstr "Selección por color"
+msgstr "Modo de aplicación de color"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Normal"
-msgstr "Formato"
+msgstr "Normal"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Other modes"
-msgstr ""
+msgstr "Otros modos"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Raw source color"
-msgstr "Color de origen"
+msgstr "Color de origen en bruto"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Highlight"
-msgstr "Altura"
+msgstr "Resalte"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Difference"
msgstr "Diferencia"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
-msgid "Photo manipulation"
-msgstr ""
+msgid "Photo-oriented modes"
+msgstr "Modos orientados a la fotografía"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Hue only"
-msgstr "Solo barra de menús"
+msgstr "Solo matiz"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Saturation only"
-msgstr "Saturación"
+msgstr "Solo saturación"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Hue and saturation"
-msgstr "Saturación"
+msgstr "Matiz y saturación"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Luminosity only"
-msgstr ""
+msgstr "Solo luminosidad"
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Don't use the colors but…"
-msgstr ""
+msgstr "No utilizar los colores pero…"
#. To translators: this is a verb
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Blur"
-msgstr "Desenfoque"
+msgstr "Desenfocar"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Erase"
-msgstr "Borrador"
+msgstr "Borrar"
-#: src/ui/app-menus.ui src/window.py
+#: src/ui/app-menus.ui
msgid "_Tools"
msgstr "_Herramientas"
@@ -462,6 +567,25 @@ msgstr "_Herramientas"
msgid "Previous tool"
msgstr "Herramienta anterior"
+#: src/ui/app-menus.ui
+#, fuzzy
+msgid "Active tool"
+msgstr "Otras herramientas"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "Mostrar nombres de herramientas"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+#, fuzzy
+msgid "Smaller width"
+msgstr "Anchura predeterminada"
+
#: src/ui/app-menus.ui src/window.py
msgid "_Options"
msgstr "_Opciones"
@@ -470,22 +594,28 @@ msgstr "_Opciones"
msgid "_Help"
msgstr "Ay_uda"
+#. Context: open the index of all help pages
#: src/ui/app-menus.ui
msgid "Index"
msgstr "Índice"
+#. Context: open the help page about general use of the app
#: src/ui/app-menus.ui
msgid "Basic help"
msgstr "Ayuda básica"
+#. Context: open the help page about classic tools
#: src/ui/app-menus.ui
msgid "Help about tools"
msgstr "Ayuda acerca de las herramientas"
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
#: src/ui/app-menus.ui
msgid "Canvas and selection"
msgstr "Lienzo y selección"
+#. Context: open the help page about the selection
#: src/ui/app-menus.ui
msgid "Help about selection"
msgstr "Ayuda acerca de la selección"
@@ -499,21 +629,25 @@ msgstr "Acerca de Drawing"
msgid "Open"
msgstr "Abrir"
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr ""
+
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Width"
msgstr "Anchura"
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Height"
msgstr "Altura"
#: src/ui/new-image-dialog.ui
-msgid "Background color"
-msgstr "Color de fondo"
+msgid "Color"
+msgstr "Color"
#: src/ui/new-image-dialog.ui
msgid "Use these settings by default"
@@ -521,8 +655,10 @@ msgstr "Utilizar estos ajustes de manera predeterminada"
#: src/ui/minimap.ui
msgid "100%"
-msgstr "100%"
+msgstr "100 %"
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
#: src/ui/properties.ui src/utilities.py
msgid "pixels"
msgstr "píxeles"
@@ -539,14 +675,13 @@ msgstr "pulgadas"
msgid "Images"
msgstr "Imágenes"
-#: src/ui/preferences.ui src/ui/shortcuts.ui
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "Tools"
msgstr "Herramientas"
#: src/ui/preferences.ui
-#, fuzzy
msgid "Window"
-msgstr "Ventana nueva"
+msgstr "Ventana"
#: src/ui/selection-manager.ui
#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
@@ -559,30 +694,22 @@ msgid "Unselect"
msgstr "Deseleccionar"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Crop"
msgstr "Recortar"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scale"
msgstr "Escalar"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotate"
msgstr "Girar"
-#. In this context, "Skew" is the name of the tool changing rectangles
-#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
-#. "Stretch/Skew" dialog.
-#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_skew.py
-msgid "Skew"
-msgstr ""
-
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Filters"
msgstr "Filtros"
@@ -592,8 +719,8 @@ msgid "Open As New Image"
msgstr "Abrir como imagen nueva"
#: src/ui/shortcuts.ui
-msgid "Keyboard"
-msgstr "Teclado"
+msgid "Keyboard Shortcuts"
+msgstr "Atajos de teclado"
#: src/ui/shortcuts.ui
msgid "General"
@@ -604,31 +731,28 @@ msgid "Main menu"
msgstr "Menú principal"
#: src/ui/shortcuts.ui
-msgid "Editing"
-msgstr "Edición"
-
-#: src/ui/shortcuts.ui
msgid "Image"
msgstr "Imagen"
-#: src/ui/shortcuts.ui
-msgid "Open a file"
-msgstr "Abrir un archivo"
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "Abrir una imagen"
#: src/ui/shortcuts.ui
msgid "Reload image from disk"
-msgstr ""
+msgstr "Recargar imagen desde disco"
-#: src/ui/shortcuts.ui
-msgid "Save as"
-msgstr "Guardar como"
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "Guardar imagen como…"
#: src/ui/shortcuts.ui
msgid "Close the active image"
msgstr "Cerrar la imagen activa"
#: src/ui/shortcuts.ui
-msgid "Options menu"
+#, fuzzy
+msgid "Open the tool options menu"
msgstr "Menú de opciones"
#: src/ui/shortcuts.ui
@@ -636,18 +760,12 @@ msgid "Back to previous tool"
msgstr "Volver a la herramienta anterior"
#: src/ui/shortcuts.ui
-msgid "Colors"
-msgstr "Colores"
-
-#. Label displayed in the keyboard shortcuts dialog
-#: src/ui/shortcuts.ui
-msgid "Edit the main color (left click)"
-msgstr "Editar el color principal (botón principal del ratón)"
+msgid "Apply a transformation"
+msgstr ""
-#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Edit the secondary color (right click)"
-msgstr "Editar el color secundario (botón secundario del ratón)"
+msgid "History"
+msgstr "Historial"
#: src/ui/shortcuts.ui
msgid "Selection"
@@ -664,18 +782,26 @@ msgid "Import a file as the selection"
msgstr "Importar un archivo como selección"
#: src/ui/shortcuts.ui
-msgid "Tabs"
-msgstr ""
+msgid "Colors"
+msgstr "Colores"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Enter fullscreen mode"
-msgstr "Ingresar al modo de pantalla completa"
+msgid "Edit the main color (left click)"
+msgstr "Editar el color principal (botón principal del ratón)"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Exit fullscreen mode"
-msgstr "Salir del modo de pantalla completa"
+msgid "Edit the secondary color (right click)"
+msgstr "Editar el color secundario (botón secundario del ratón)"
#: src/ui/shortcuts.ui
+msgid "Tabs"
+msgstr "Pestañas"
+
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
+#: src/ui/shortcuts.ui
msgid "Navigation"
msgstr "Navegación"
@@ -683,10 +809,26 @@ msgstr "Navegación"
msgid "Toggle the preview"
msgstr "Conmutar previsualización"
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr "Ingresar al modo de pantalla completa"
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr "Salir del modo de pantalla completa"
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr "Gestos táctiles"
+
#: src/ui/win-menus.ui
msgid "Troubleshoot selection"
msgstr "Solución de problemas de la selección"
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr "Otras herramientas"
+
#: src/ui/window.ui
msgid "Error starting the application, please report this bug."
msgstr "Error al iniciar la aplicación; por favor, informe acerca del fallo."
@@ -701,23 +843,29 @@ msgstr "Deshacer %s"
msgid "Redo %s"
msgstr "Rehacer %s"
+#. Context: an error message
#: src/image.py
-msgid "Can't reload a never-saved file from the disk."
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
msgstr ""
+#: src/image.py
+msgid "Can't reload a never-saved file from the disk."
+msgstr "No se puede recargar del disco un archivo que nunca se guardó."
+
#: src/image.py src/properties.py
msgid "Unsaved file"
msgstr "Archivo no guardado"
-#: src/new_image_dialog.py src/utilities.py src/window.py
-#: src/tools/utilities_paths.py src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-crop.ui src/tools/ui/tool-filters.ui
-#: src/tools/ui/tool-rotate.ui src/tools/ui/tool-scale.ui
-#: src/tools/ui/tool-skew.ui
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
msgid "Cancel"
msgstr "Cancelar"
@@ -726,41 +874,47 @@ msgstr "Cancelar"
msgid "Create"
msgstr "Crear"
+#. Description of a command line option
#: src/main.py
msgid "Show the app version"
msgstr "Muestra la versión"
+#. Description of a command line option
#: src/main.py
msgid "Open a new window"
msgstr "Abre una ventana nueva"
+#. Description of a command line option
#: src/main.py
msgid "Open a new tab"
msgstr "Abre una pestaña nueva"
+#. Description of a command line option
#: src/main.py
msgid "Edit the clipboard content"
msgstr "Edita el contenido del portapapeles"
#: src/main.py
msgid "This version isn't stable!"
-msgstr ""
+msgstr "Esta versión no es estable."
#: src/main.py
msgid "Report bugs or ideas"
msgstr "Informar de fallos o proponer ideas"
-#. To tranlators: "translate" this by your name, it will be displayed
-#. in the "about" dialog
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
#: src/main.py
msgid "translator-credits"
msgstr ""
-"Xoán Sampaíño <xoansampainho@gmail.com>\n"
-"Adolfo Jayme Barrientos"
+"Xoán Sampaíño <xoansampainho@gmail.com>, 2019\n"
+"Adolfo Jayme Barrientos <fitojb@ubuntu.com>, 2019-2020"
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
#: src/main.py
msgid "GNOME's \"Art Libre\" icon set authors"
-msgstr ""
+msgstr "Autores del juego de iconos «Art Libre» de GNOME"
#: src/main.py
msgid "A drawing application for the GNOME desktop."
@@ -771,17 +925,24 @@ msgid "Official webpage"
msgstr "Sitio web oficial"
#: src/main.py
-#, python-format
-msgid "Error opening this file. Did you mean %s ?"
+#, fuzzy
+msgid "Error opening this file."
msgstr "Error al abrir el archivo. ¿Quizá quería decir %s?"
-#. This displays the zoom level, %s will be replaced with a number, while
-#. %% is just the symbol '%'
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr ""
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
#: src/minimap.py
#, python-format
msgid "%s%%"
-msgstr "%s%%"
+msgstr "%s %%"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "New images"
msgstr "Imágenes nuevas"
@@ -794,43 +955,51 @@ msgstr "Anchura predeterminada"
msgid "Default height"
msgstr "Altura predeterminada"
-#: src/preferences.py
-msgid "Default background"
-msgstr "Fondo predeterminado"
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Default color"
+msgstr "Color predeterminado"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Images saving"
msgstr "Guardado de imágenes"
#: src/preferences.py
msgid "JPEG and BMP images can't handle transparency."
-msgstr ""
+msgstr "Las imágenes JPEG y BMP no admiten la transparencia."
#: src/preferences.py
-#, fuzzy
msgid ""
"If you save your images in these formats, what do want to use to replace "
"transparent pixels?"
msgstr ""
-"Las imágenes en formato JPEG y BMP no soportan transparencia. Si guarda la "
-"imagen en alguno de estos formatos, ¿qué quiere utilizar para reemplazar los "
-"píxeles transparentes?"
+"Si guarda la imagen en alguno de estos formatos, ¿qué quiere utilizar para "
+"reemplazar los píxeles transparentes?"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "White"
msgstr "Blanco"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "Black"
msgstr "Negro"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
msgid "Checkboard"
-msgstr "Patrón de cuadrícula"
+msgstr "Tablero de ajedrez"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
msgid "Nothing"
-msgstr ""
+msgstr "Nada"
#: src/preferences.py
msgid "Ask before saving"
@@ -839,15 +1008,19 @@ msgstr "Preguntar antes de guardar"
#: src/preferences.py
msgid "You can zoom with Ctrl+scrolling, or only scrolling."
msgstr ""
+"Puede ampliar con Ctrl + la ruedecilla del ratón, o bien con solo la "
+"ruedecilla."
#: src/preferences.py
-msgid "Using keyboard shortcuts or touch gestures is possible too."
-msgstr ""
+msgid "See the user help manual for explanations."
+msgstr "Consulte el manual de operación para obtener explicaciones."
#: src/preferences.py
msgid "Use 'Ctrl' to zoom"
-msgstr ""
+msgstr "Utilizar Ctrl para ampliar"
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
#: src/preferences.py
msgid "Appearance"
msgstr "Apariencia"
@@ -856,6 +1029,7 @@ msgstr "Apariencia"
msgid "Use big icons"
msgstr "Usar iconos grandes"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Additional tools"
msgstr "Herramientas adicionales"
@@ -868,31 +1042,51 @@ msgstr ""
"Estas herramientas no son tan confiables y útiles como deberían ser, por lo "
"que no todas están habilitadas de forma predeterminada."
-#. In the meaning "a rubber eraser"
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
#: src/preferences.py src/tools/classic_tools/tool_eraser.py
msgid "Eraser"
msgstr "Borrador"
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
#: src/preferences.py src/tools/classic_tools/tool_highlight.py
msgid "Highlighter"
+msgstr "Rotulador"
+
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
msgstr ""
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
#: src/preferences.py src/tools/selection_tools/select_free.py
msgid "Free selection"
msgstr "Selección libre"
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
#: src/preferences.py src/tools/selection_tools/select_color.py
msgid "Color selection"
msgstr "Selección por color"
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
#: src/preferences.py src/tools/classic_tools/tool_picker.py
msgid "Color Picker"
msgstr "Selector de color"
+#. Context: the name of a tool to fill an area of one color with an other
#: src/preferences.py src/tools/classic_tools/tool_paint.py
msgid "Paint"
msgstr "Relleno"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Advanced options"
msgstr "Opciones avanzadas"
@@ -901,11 +1095,18 @@ msgstr "Opciones avanzadas"
msgid "Preview size"
msgstr "Tamaño de previsualización"
+#. This label will not be displayed in the UI of stable versions
#: src/preferences.py
msgid "Development features"
msgstr "Funcionalidades experimentales"
#: src/preferences.py
+msgid "Background color"
+msgstr "Color de fondo"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
msgid "Layout"
msgstr "Disposición"
@@ -913,6 +1114,7 @@ msgstr "Disposición"
msgid "The recommended value is \"Automatic\"."
msgstr "El valor recomendado es «Automático»."
+#. It has to match what's written in the previous string.
#: src/preferences.py
msgid "Automatic"
msgstr "Automático"
@@ -923,7 +1125,7 @@ msgstr "Compacto"
#: src/preferences.py
msgid "elementary OS"
-msgstr ""
+msgstr "elementary OS"
#. "Legacy" is about the window layout, it means menubar+toolbar, you
#. can translate it like if it was "Traditional"
@@ -932,7 +1134,8 @@ msgid "Legacy"
msgstr "Tradicional"
#. "Legacy" is about the window layout, it means menubar+toolbar, you
-#. can translate it like if it was "Traditional"
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Legacy (symbolic icons)"
msgstr "Tradicional (símbolos)"
@@ -945,29 +1148,32 @@ msgstr "Solo barra de menús"
msgid "Toolbar only"
msgstr "Solo barra de herramientas"
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Toolbar only (symbolic icons)"
-msgstr "Barra de herramientas (símbolos)"
+msgstr "Solo barra de herramientas (monocromático)"
#: src/properties.py
#, python-format
msgid "%s px"
-msgstr ""
+msgstr "%s px"
#: src/properties.py
#, python-format
msgid "%s cm"
-msgstr ""
+msgstr "%s cm"
#: src/properties.py
#, python-format
msgid "%s in"
-msgstr ""
+msgstr "%s in"
+#. Context: the path of the edited file
#: src/properties.py
msgid "Path"
msgstr "Ruta"
+#. Context: the file format of the edited file
#: src/properties.py
msgid "Format"
msgstr "Formato"
@@ -976,10 +1182,70 @@ msgstr "Formato"
msgid "Colorspace"
msgstr "Espacio de color"
+#. Context: an invalid colorspace format
#: src/properties.py
msgid "Invalid format"
msgstr "Formato no válido"
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "Error al guardar %s"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "Sin título"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "esta imagen"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "Descartar"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "Hay cambios no guardados en «%s»."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr ""
+
+#: src/saving_manager.py
+#, fuzzy
+msgid "Do you want to save anyway?"
+msgstr "¿Dónde quiere abrir «%s»?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr "Reemplazar"
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "Este formato de archivo no admite colores transparentes."
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr ""
+"Puede guardar la imagen como archivo PDF o reemplazar la transparencia por:"
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "Reemplazar la transparencia con:"
+
#: src/utilities.py
msgid "Transparent"
msgstr "Transparente"
@@ -987,7 +1253,7 @@ msgstr "Transparente"
#: src/utilities.py
#, python-format
msgid "%s%% transparent"
-msgstr "%s%% transparente"
+msgstr "%s %% transparente"
#: src/utilities.py
msgid "Grey"
@@ -1001,6 +1267,9 @@ msgstr "Naranja"
msgid "Brown"
msgstr "Marrón"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
#: src/utilities.py
msgid "Probably brown"
msgstr "Probablemente marrón"
@@ -1033,31 +1302,23 @@ msgstr "Morado"
msgid "Cyan"
msgstr "Cian"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
#: src/utilities.py
-msgid "Probably turquoise"
+msgid "Probably teal"
msgstr "Probablemente turquesa"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
#: src/utilities.py
msgid "Unknown color name"
msgstr "Nombre de color desconocido"
#: src/utilities.py
-msgid "Replace"
-msgstr ""
-
-#: src/utilities.py
-msgid "This file format doesn't support transparent colors."
-msgstr "Este formato de archivo no soporta colores transparentes."
-
-#: src/utilities.py
-msgid "You can save the image as a PNG file, or replace transparency with:"
-msgstr ""
-
-#: src/utilities.py
-msgid "Replace transparency with:"
-msgstr "Reemplazar la transparencia con:"
-
-#: src/utilities.py
msgid "All pictures"
msgstr "Todas las imágenes"
@@ -1073,29 +1334,49 @@ msgstr "Imágenes JPEG"
msgid "BMP images"
msgstr "Imágenes BMP"
+#. To translators: it appears in tooltips over numerical inputs
#: src/utilities.py
msgid "percents"
msgstr "porcentaje"
-#. To translators: it's the angle measure unit
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
#: src/utilities.py
-#, fuzzy
msgid "degrees"
-msgstr "Ángulo (grados)"
+msgstr "grados"
+
+#: src/utilities.py
+#, fuzzy, python-format
+msgid "%s isn't an image."
+msgstr "Abrir una imagen"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr ""
+
+#. Context: an error message
#: src/window.py
#, python-format
msgid "Failed to load tool: %s"
msgstr "Error al cargar la herramienta: %s"
#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr ""
+
+#: src/window.py
msgid "Modifications will take effect in the next new window."
msgstr "Los cambios tendrán efecto en la próxima ventana nueva."
#: src/window.py src/tools/abstract_tool.py
#: src/optionsbars/classic/optionsbar-classic.ui
#: src/tools/classic_tools/tool_eraser.py
-#: src/tools/classic_tools/tool_highlight.py
msgid "No options"
msgstr "Sin opciones"
@@ -1104,6 +1385,11 @@ msgid "Opened images"
msgstr "Imágenes abiertas"
#: src/window.py
+#, fuzzy, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "Error al iniciar la aplicación; por favor, informe acerca del fallo."
+
+#: src/window.py
#, python-format
msgid "Loading %s"
msgstr "Cargando %s"
@@ -1117,63 +1403,52 @@ msgstr "Pestaña nueva"
msgid "Discard changes"
msgstr "Descartar cambios"
-#: src/window.py
-#, python-format
-msgid "There are unsaved modifications to %s."
-msgstr "Hay cambios no guardados en «%s»."
-
+#. Context: %s will be replaced by the name of a file.
#: src/window.py
#, python-format
msgid "Where do you want to open %s?"
msgstr "¿Dónde quiere abrir «%s»?"
-#: src/window.py
-msgid "Open a picture"
-msgstr "Abrir una imagen"
-
#. Context for translation:
#. "What do you want to do with *these files*?"
#: src/window.py
msgid "these files"
msgstr "estos archivos"
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
#: src/window.py
#, python-format
msgid "What do you want to do with %s?"
msgstr "¿Qué quiere hacer con «%s»?"
-#. else the exception was raised because an actual error occured, or
-#. the user clicked on "cancel"
-#: src/window.py
-#, python-format
-msgid "Failed to save %s"
-msgstr "Error al guardar %s"
-
-#: src/window.py
-msgid "Untitled"
-msgstr "Sin título"
-
-#. Context: the sentence "There are unsaved modifications to %s."
#: src/window.py
-msgid "this picture"
-msgstr "esta imagen"
+#, fuzzy
+msgid "Image copied to clipboard"
+msgstr "Editar imagen del portapapeles"
#: src/window.py
-msgid "Discard"
-msgstr "Descartar"
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr ""
#: src/window.py
-msgid "Save picture as…"
-msgstr "Guardar imagen como…"
+#, fuzzy
+msgid "Reload"
+msgstr "Recargar archivo"
#: src/window.py
msgid "Import a picture"
msgstr "Importar una imagen"
#: src/window.py
-#, fuzzy
msgid "Required tool is not available"
-msgstr "Ahora está disponible un modo de pantalla completa."
+msgstr "La herramienta requerida no está disponible"
+
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
#: src/tools/utilities_paths.py
msgid "Continue"
@@ -1194,13 +1469,15 @@ msgid "Do you want to abort the operation, or to let the tool struggle ?"
msgstr ""
"¿Quiere cancelar la operación o permitir que la herramienta lo intente?"
+#. Context: fill a shape with the color of the left click
#: src/optionsbars/classic/optionsbar_color_popover.py
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Main color"
msgstr "Color principal"
-#. if state_as_string == 'secondary':
+#. Context: fill a shape with the color of the right click
#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Secondary color"
msgstr "Color secundario"
@@ -1210,14 +1487,14 @@ msgid "Tool size"
msgstr "Tamaño de herramienta"
#: src/optionsbars/classic/optionsbar-classic.ui
-#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-filters.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
msgid "Preview"
msgstr "Previsualización"
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "How the color will be applied to the existing pixels"
-msgstr ""
+msgstr "Cómo se aplicará el color en los píxeles existentes"
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Back to the palette"
@@ -1225,178 +1502,182 @@ msgstr "Volver a la paleta"
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Palette"
-msgstr ""
+msgstr "Paleta"
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Use this editor by default"
msgstr "Utilizar este editor de manera predeterminada"
#: src/optionsbars/selection/optionsbar-selection.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "More actions"
msgstr "Más acciones"
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
msgid "Apply"
msgstr "Aplicar"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "Más opciones"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr "Expandir con…"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "Transparencia"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Select a filter…"
msgstr "Seleccionar un filtro…"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Saturation"
msgstr "Saturación"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blur radius"
msgstr "Radio de desenfoque"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-msgid "Transparency"
-msgstr "Transparencia"
-
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Change saturation"
-msgstr "Saturación"
+msgstr "Cambiar saturación"
#. Context: a filter adding like a light veil on the image
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Veil"
-msgstr ""
+msgstr "Velar"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
msgid "Add transparency"
-msgstr "Transparencia"
+msgstr "Añadir transparencia"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Invert colors"
msgstr "Invertir colores"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#, fuzzy
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blurring"
msgstr "Desenfoque"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Fast blur"
-msgstr ""
+msgstr "Desenfoque rápido"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Slow blur"
-msgstr ""
+msgstr "Desenfoque lento"
#. Context: a filter that censors the image with some kind of tiles
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-msgid "Pixelisation"
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
msgstr "Pixelización"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Blur direction"
-msgstr "Selección por color"
+msgstr "Dirección de desenfique"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Horizontal"
-msgstr "Desenfoque horizontal"
+msgstr "Horizontal"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Vertical"
-msgstr "Desenfoque vertical"
+msgstr "Vertical"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "No direction"
-msgstr "Selección por color"
+msgstr "Sin dirección"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle (degrees)"
msgstr "Ángulo (grados)"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle"
msgstr "Ángulo"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate left"
msgstr "Girar a la izquierda"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate right"
msgstr "Girar a la derecha"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip horizontally"
msgstr "Voltear horizontalmente"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip vertically"
msgstr "Voltear verticalmente"
-#: src/optionsbars/canvas/optionsbar-scale.ui
-msgid "More options"
-msgstr "Más opciones"
-
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
-#, fuzzy
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Keep proportions"
-msgstr "Mantener proporción"
+msgstr "Mantener proporciones"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Always [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Always"
-msgstr ""
+msgstr "Siempre"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "[Keep proportions only] when scaling from corners"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "When scaling from corners"
-msgstr ""
+msgstr "Al escalar desde las esquinas"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Never [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Never"
-msgstr ""
+msgstr "Nunca"
-#: src/optionsbars/canvas/optionsbar-skew.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Horizontal deformation"
-msgstr "Degradado horizontal"
+msgstr "Deformación horizontal"
-#: src/optionsbars/canvas/optionsbar-skew.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Vertical deformation"
-msgstr "Degradado vertical"
+msgstr "Deformación vertical"
+
+#: src/tools/ui/selection.ui
+#, fuzzy
+msgid "Transform"
+msgstr "Transparente"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-#, fuzzy
msgid "Line shape"
-msgstr "Forma"
+msgstr "Forma de línea"
+#. Context: this is the name of a line shape
#. Default values
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
@@ -1404,81 +1685,171 @@ msgstr "Forma"
msgid "Round"
msgstr "Extremos redondeados"
+#. Context: this is the name of a line shape
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Thin"
-msgstr "Extremos apuntados"
-
-#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
msgid "Square"
msgstr "Extremos cuadrados"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "No arrow"
+msgstr "Flecha"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "Double arrow"
+msgstr "Flecha discontinua"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-msgid "Use dashes"
+#, fuzzy
+msgid "No dashes"
msgstr "Utilizar trazos"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
-msgid "Arrow"
-msgstr "Flecha"
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Simple dashes"
+msgstr "Utilizar trazos"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Long dashes"
+msgstr "Utilizar trazos"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-shape.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Short dashes"
+msgstr "Utilizar trazos"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
msgid "Antialiasing"
+msgstr "Antidistorsión"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Dark text on light background"
+msgstr "Fondo del rectángulo"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
msgstr ""
#: src/tools/ui/tool-line.ui
msgid "Color gradient"
-msgstr "Degradado"
+msgstr "Degradado de colores"
+#. Context: title for the list of the possible painting algorithms.
#: src/tools/ui/tool-paint.ui
msgid "Behavior"
msgstr "Comportamiento"
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
#: src/tools/ui/tool-paint.ui
msgid "Encircle and fill"
msgstr "Rodear y rellenar"
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
#: src/tools/ui/tool-paint.ui
msgid "Erase and replace"
msgstr "Borrar y reemplazar"
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
#: src/tools/ui/tool-paint.ui
-msgid "Clipping"
-msgstr "Recorte"
-
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rectangle"
-msgstr "Rectángulo"
+#, fuzzy
+msgid "Entire image"
+msgstr "Imágenes abiertas"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
#, fuzzy
-msgid "Rounded rectangle"
-msgstr "Rectángulo"
+msgid "Remove color"
+msgstr "Color de origen en bruto"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Oval"
-msgstr "Óvalo"
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "Círculo"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Polygon"
-msgstr "Polígono"
+msgid "Solid outline"
+msgstr "Contorno sólido"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Free shape"
-msgstr "Forma libre"
+msgid "Dashed outline"
+msgstr "Contorno discontinuo"
+#. if state_as_string == 'none':
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Circle"
-msgstr "Círculo"
+msgid "No outline"
+msgstr "Sin contorno"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr "Relleno"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Empty outline"
-msgstr "Sin relleno"
+msgid "Empty shape"
+msgstr "Forma vacía"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Horizontal gradient"
@@ -1492,6 +1863,26 @@ msgstr "Degradado vertical"
msgid "Radial gradient"
msgstr "Degradado radial"
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "Rectángulo"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr "Rectángulo redondeado"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "Óvalo"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "Polígono"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "Forma libre"
+
#: src/tools/ui/tool-shape.ui
msgid "Close shape"
msgstr "Cerrar forma"
@@ -1505,6 +1896,10 @@ msgid "Font"
msgstr "Tipo de letra"
#: src/tools/ui/tool-text.ui
+msgid "Select a font…"
+msgstr "Seleccionar un tipo de letra…"
+
+#: src/tools/ui/tool-text.ui
msgid "Italic"
msgstr "Cursiva"
@@ -1512,35 +1907,30 @@ msgstr "Cursiva"
msgid "Bold"
msgstr "Negrita"
+#. Context: the types of background behind the inserted text
#: src/tools/ui/tool-text.ui
msgid "Background"
msgstr "Fondo"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "No background"
msgstr "Sin fondo"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Shadow"
msgstr "Sombra"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
-#, fuzzy
msgid "Outline"
-msgstr "Sin relleno"
+msgstr "Contorno"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
-#, fuzzy
msgid "Rectangle background"
-msgstr "Fondo predeterminado"
-
-#: src/tools/ui/selection.ui
-msgid "Edit"
-msgstr "Editar"
-
-#: src/tools/ui/selection.ui
-msgid "Flip"
-msgstr "Voltear"
+msgstr "Fondo del rectángulo"
#: src/tools/classic_tools/tool_arc.py
msgid "Curve"
@@ -1555,10 +1945,19 @@ msgid "Dashed arrow"
msgstr "Flecha discontinua"
#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "Flecha"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
#: src/tools/classic_tools/tool_pencil.py
msgid "Dashed"
msgstr "Discontinua"
+#: src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Highlighter options"
+msgstr "Rotulador"
+
#: src/tools/classic_tools/tool_line.py
msgid "Line"
msgstr "Línea"
@@ -1573,7 +1972,12 @@ msgstr "Opciones de relleno"
#: src/tools/classic_tools/tool_paint.py
msgid "Click on an area to replace its color by transparency"
-msgstr "Haga clic en un área para reemplazar su color por transparencia"
+msgstr "Pulse en un área para reemplazar su color por transparencia"
+
+#: src/tools/classic_tools/tool_paint.py
+#, fuzzy
+msgid "Click on the canvas to entirely paint it"
+msgstr "Pulse en el primer punto de la forma para cerrarla."
#: src/tools/classic_tools/tool_pencil.py
msgid "Pencil"
@@ -1583,26 +1987,33 @@ msgstr "Lápiz"
msgid "Pencil options"
msgstr "Opciones de lápiz"
+#: src/tools/classic_tools/tool_points.py
+#, fuzzy
+msgid "Points options"
+msgstr "Opciones de tipo de letra"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr ""
+
#: src/tools/classic_tools/tool_shape.py
msgid "Shape"
msgstr "Forma"
#: src/tools/classic_tools/tool_shape.py
-msgid "Empty"
-msgstr "Vacío"
-
-#: src/tools/classic_tools/tool_shape.py
msgid "Shape options"
msgstr "Opciones de forma"
#: src/tools/classic_tools/tool_shape.py
msgid "Click on the shape's first point to close it."
-msgstr "Haga clic en el primer punto de la forma para cerrarla."
+msgstr "Pulse en el primer punto de la forma para cerrarla."
#: src/tools/classic_tools/tool_text.py
msgid "Text"
msgstr "Texto"
+#. XXX use "text options" instead
#: src/tools/classic_tools/tool_text.py
msgid "Font options"
msgstr "Opciones de tipo de letra"
@@ -1610,62 +2021,84 @@ msgstr "Opciones de tipo de letra"
#: src/tools/selection_tools/abstract_select.py
msgid "Drag the selection or right-click on the canvas"
msgstr ""
-"Arrastre la selección o haga clic con el botón secundario del ratón en el "
-"lienzo"
+"Arrastre la selección o pulse con el botón secundario del ratón en el lienzo"
#: src/tools/selection_tools/abstract_select.py
msgid "Select an area or right-click on the canvas"
msgstr ""
-"Seleccione un área o haga clic con el botón secundario del ratón en el lienzo"
+"Seleccione un área o pulse con el botón secundario del ratón en el lienzo"
#: src/tools/selection_tools/select_rect.py
msgid "Rectangle selection"
msgstr "Selección rectangular"
-#: src/tools/canvas_tools/abstract_canvas_tool.py
+#: src/tools/transform_tools/abstract_transform_tool.py
msgid "Error: invalid values"
-msgstr ""
+msgstr "Error: valores no válidos"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the selection"
msgstr "Recortando la selección"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the canvas"
msgstr "Recortando el lienzo"
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Click on the image to preview the selected filter"
msgstr ""
-"Haga clic en la imagen para obtener una vista previa del filtro seleccionado"
+"Pulse en la imagen para obtener una previsualización del filtro seleccionado"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the selection"
msgstr "Girando la selección"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the canvas"
msgstr "Girando el lienzo"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the selection"
msgstr "Escalando la selección"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the canvas"
msgstr "Escalando el lienzo"
-#~ msgid "Classic"
-#~ msgstr "Clásico"
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr "Inclinar"
+
+#~ msgid "Flip"
+#~ msgstr "Voltear"
-#~ msgid "Close"
-#~ msgstr "Cerrar"
+#, fuzzy
+#~ msgid "Add semi-transparency"
+#~ msgstr "Añadir transparencia"
+
+#~ msgid "Thin"
+#~ msgstr "Extremos apuntados"
+
+#~ msgid "Clipping"
+#~ msgstr "Recorte"
+
+#~ msgid "Edit"
+#~ msgstr "Editar"
-#~ msgid "Filling"
-#~ msgstr "Relleno"
+#~ msgid "Open a file"
+#~ msgstr "Abrir un archivo"
-#~ msgid "Selection type"
-#~ msgstr "Tipo de selección"
+#~ msgid "Save as"
+#~ msgstr "Guardar como"
+
+#~ msgid "Keyboard"
+#~ msgstr "Teclado"
+
+#~ msgid "Close"
+#~ msgstr "Cerrar"
#~ msgid "Freehand"
#~ msgstr "Mano alzada"
diff --git a/po/eu.po b/po/eu.po
new file mode 100644
index 00000000..6263d08e
--- /dev/null
+++ b/po/eu.po
@@ -0,0 +1,2082 @@
+# Basque translation of drawing.
+# Copyright (C) 2018-2020 Romain F. T.
+# This file is distributed under the same license as the drawing package.
+# Alexander Gabilondo <alexgabi@disroot.org>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: drawing\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
+"PO-Revision-Date: 2020-08-29 16:24+0200\n"
+"Last-Translator: Alexander Gabilondo <alexgabi@disroot.org>\n"
+"Language-Team: \n"
+"Language: eu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.3\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/com.github.maoschanz.drawing.desktop.in
+#: data/com.github.maoschanz.drawing.appdata.xml.in src/deco_manager.py
+#: src/main.py
+msgid "Drawing"
+msgstr "Drawing"
+
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "Simple drawing utility"
+msgstr "Marrazteko utilitate sinplea"
+
+#. Icon name, do not translate
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "com.github.maoschanz.drawing"
+msgstr "com.github.maoschanz.drawing"
+
+#. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons.
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "Paint;Sketch;Pencil;"
+msgstr "Paint;Zirriborroa;Arkatza;"
+
+#. Context: answer to "where do you want to open the image?"
+#: data/com.github.maoschanz.drawing.desktop.in src/ui/app-menus.ui
+#: src/ui/shortcuts.ui src/ui/win-menus.ui src/window.py
+msgid "New Window"
+msgstr "Leiho berria"
+
+#: data/com.github.maoschanz.drawing.desktop.in src/ui/app-menus.ui
+#: src/ui/headerbar.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/ui/window.ui
+msgid "New Image"
+msgstr "Irudi berria"
+
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "Edit Image in Clipboard"
+msgstr "Arbeleko irudia editatu"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "A drawing application for the GNOME desktop"
+msgstr "Marrazteko aplikazioa GNOME mahaigainerako"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types."
+msgstr ""
+"«Drawing» irudien oinarrizko editorea da, PNG, JPEG eta BMP formaturekin "
+"bateragarria."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It allows you to draw or edit pictures with tools such as pencil, line or "
+"arc (with various options), selection (cut/copy/paste/drag/…), shapes "
+"(rectangle, circle, polygon, …), text insertion, resizing, cropping, "
+"rotating, …"
+msgstr ""
+"Haren bidez irudiak marraztu edo editatu daitezke hainbat tresnen bidez, "
+"hala nola arkatza, marra edo arkua, hautatu (ebaki/kopiatu/itsatsi/"
+"arrastatu/...), formak (laukizuzena, zirkulua, poligonoa,...), testuaren "
+"txertaketa, tamaina aldaketa, , mozketa, biraketa, …"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+"0.6.4 bertsioak errore txiki batzuen zuzenketa eta itzulpen berriak biltzen "
+"ditu."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+"0.6.2 bertsioak errore txiki batzuen zuzenketa eta itzulpen berriak biltzen "
+"ditu."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6 is a major update, with various important changes. The app is "
+"more robust and has more tools:"
+msgstr ""
+"0.6 bertsioa pisuzko eguneraketa da, aldaketa esanguratsuak dakartzana. "
+"Aplikazioa egonkorragoa da eta tresna gehiago ditu:"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Rectangle selection and freehand selection are now distinct tools, and the "
+"'rotate' tool now supports any angle and handles horizontal or vertical "
+"flipping."
+msgstr ""
+"Laukizuzena hautatzea eta eskuzko hautaketa tresnak desberdinak dira orain, "
+"'biratu' tresnak edozein angelu onartzen du eta horizontalki edo bertikalki "
+"iraultzeko aukera ematen du."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The numerous tools producing shapes (circle, rectangle, polygon, …), have "
+"been merged into a single, more consistent 'shape' tool, along with 'rounded "
+"rectangle' and 'ellipse'. Their filling options now include various types of "
+"gradients."
+msgstr ""
+"Formak sortzen dituzten tresna ugariak (zirkulua, laukizuzena, "
+"poligonoa ...), \"forma\" tresna koherente bakar batera batu dira, gainera "
+"\"laukizuzen biribila\" eta \"elipsea\" gehitu dira. Orain betetzeko aukerek "
+"gradiente mota desberdinak ditu."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+"Testu tresnak sistemako letra gehienak erabiliz idatzi dezake, eta horrela, "
+"karaktere konplexuagoak erabil daitezke (adibidez, Asiako karaktereak)."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
+"with several types of blur, color inversion, pixelization, saturation and "
+"transparency."
+msgstr ""
+"'Saturatu' tresnaren ordez 'iragazkiak' tresna jarri da, lausoak, kolorearen "
+"alderantziketa, pixelizazioa, saturazioa eta gardentasuna tresna "
+"indartsuagoa."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "A fullscreen mode is now available."
+msgstr "Orain pantaila osoko modua erabili daiteke."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The most prominent new feature is the ability to zoom in (or out) on the "
+"image, using the minimap, the touchpad or the mouse wheel."
+msgstr ""
+"Ezaugarri berririk nabarmenena irudia handitzeko (edo txikitzeko) gaitasuna "
+"da, mapa txikia, ukipen-area edo saguaren gurpila erabiliz."
+
+#. This is just my name, do not translate it.
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Romain F. T."
+msgstr "Romain F. T."
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Preferences"
+msgstr "Hobespenak"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
+msgid "Report a bug"
+msgstr "Errore baten berri eman"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Shortcuts"
+msgstr "Laster-teklak"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Help"
+msgstr "Laguntza"
+
+#: src/ui/app-menus.ui
+msgid "About"
+msgstr "Honi buruz"
+
+#: src/ui/app-menus.ui
+msgid "Quit"
+msgstr "Irten"
+
+#: src/ui/app-menus.ui
+msgid "_File"
+msgstr "_Fitxategia"
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
+msgid "Open an image"
+msgstr "Ireki irudi bat"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "New Blank Image"
+msgstr "Irudi zuri berria"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/new_image_dialog.py
+msgid "New Image With Custom Size"
+msgstr "Tamaina pertsonalizatua duen irudi berria"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "New Image From Selection"
+msgstr "Irudi berria hautapenetik"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "New Image From Clipboard"
+msgstr "Irudi berri arbelatik"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Reload file"
+msgstr "Birkargatu fitxategia"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
+msgid "Image properties"
+msgstr "Irudiaren propietateak"
+
+#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
+#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui src/saving_manager.py
+msgid "Save"
+msgstr "Gorde"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+#, fuzzy
+msgid "Save without transparency"
+msgstr "Gehitu gardentasuna"
+
+#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
+#: src/saving_manager.py
+msgid "Save as…"
+msgstr "Gorde honela…"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/win-menus.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Export as…"
+msgstr "Esportatu honela…"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
+msgid "Print"
+msgstr "Inprimatu"
+
+#: src/ui/app-menus.ui
+msgid "Close Image"
+msgstr "Itxi irudia"
+
+#: src/ui/app-menus.ui
+msgid "Close Window"
+msgstr "Itxi leihoa"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Quit all windows"
+msgstr "Itxi leiho guztiak"
+
+#: src/ui/app-menus.ui
+msgid "_Edit"
+msgstr "_Editatu"
+
+#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
+#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui src/deco_manager.py
+msgid "Undo"
+msgstr "Desegin"
+
+#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
+#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui src/deco_manager.py
+msgid "Redo"
+msgstr "Berregin"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Rebuild from history"
+msgstr "Leheneratu historialetik"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Select all"
+msgstr "Hautatu guztia"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Cut"
+msgstr "Ebaki"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Copy"
+msgstr "Kopiatu"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Delete"
+msgstr "Ezabatu"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+msgid "Paste"
+msgstr "Itsatsi"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/window.py
+#: src/optionsbars/selection/optionsbar-selection.ui
+msgid "Import"
+msgstr "Inportatu"
+
+#: src/ui/app-menus.ui
+msgid "_View"
+msgstr "_Ikusi"
+
+#: src/ui/app-menus.ui
+msgid "Show the preview"
+msgstr "Erakutsi aurrebista"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/preferences.py
+msgid "Zoom"
+msgstr "Zoom"
+
+#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui
+msgid "Optimal Zoom"
+msgstr "Zoomik egokiena"
+
+#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Zoom Out"
+msgstr "Txikiagotu"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Original Zoom"
+msgstr "Jatorrizko tamaina"
+
+#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Zoom In"
+msgstr "Handiagotu"
+
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
+#: src/ui/app-menus.ui
+msgid "Position"
+msgstr "Kokapena"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Left"
+msgstr "Ezkerretara"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Up"
+msgstr "Gora"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Down"
+msgstr "Behera"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Right"
+msgstr "Eskuinera"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Tab at the left"
+msgstr "Ezkerreko fitxa"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Tab at the right"
+msgstr "Eskuineko fitxa"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Refresh"
+msgstr "Freskatu"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Fullscreen"
+msgstr "Pantaila osoa"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Exit fullscreen"
+msgstr "Irten pantaila osotik"
+
+#: src/ui/app-menus.ui
+msgid "_Colors"
+msgstr "_Koloreak"
+
+#: src/ui/app-menus.ui
+msgid "Edit Main Color…"
+msgstr "Editatu kolore nagusia…"
+
+#: src/ui/app-menus.ui
+msgid "Edit Secondary Color…"
+msgstr "Editatu bigarren kolorea…"
+
+#: src/ui/app-menus.ui
+msgid "Use color editor by default"
+msgstr "Erabili kolore editorea lehenespenez"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+#: src/optionsbars/classic/optionsbar-classic.ui
+msgid "Exchange colors"
+msgstr "Trukatu koloreak"
+
+#: src/ui/app-menus.ui
+msgid "Color application mode"
+msgstr "Koloreen aplikazio modua"
+
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Normal"
+msgstr "Normala"
+
+#. Context: possible ways to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Other modes"
+msgstr "Bestelako moduak"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Raw source color"
+msgstr "Jatorrizko kolorea"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Highlight"
+msgstr "Nabarmendu"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Difference"
+msgstr "Batuketa"
+
+#. Context: possible ways to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Photo-oriented modes"
+msgstr "Argazkira bideratutako moduak"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Hue only"
+msgstr "Ñabardura bakarrik"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Saturation only"
+msgstr "Saturazioa bakarrik"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Hue and saturation"
+msgstr "Ñabardura eta saturazioa"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Luminosity only"
+msgstr "Argitasuna bakarrik"
+
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Don't use the colors but…"
+msgstr "Ez erabili koloreak baina…"
+
+#. To translators: this is a verb
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Blur"
+msgstr "Lausotu"
+
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Erase"
+msgstr "Ezabatu"
+
+#: src/ui/app-menus.ui
+msgid "_Tools"
+msgstr "_Tresnak"
+
+#: src/ui/app-menus.ui
+msgid "Previous tool"
+msgstr "Aurreko tresna"
+
+#: src/ui/app-menus.ui
+#, fuzzy
+msgid "Active tool"
+msgstr "Beste tresnak"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "Erakutsi tresnen izenak"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+#, fuzzy
+msgid "Smaller width"
+msgstr "Zabalera lehenetsia"
+
+#: src/ui/app-menus.ui src/window.py
+msgid "_Options"
+msgstr "_Aukerak"
+
+#: src/ui/app-menus.ui
+msgid "_Help"
+msgstr "_Laguntza"
+
+#. Context: open the index of all help pages
+#: src/ui/app-menus.ui
+msgid "Index"
+msgstr "Aurkibidea"
+
+#. Context: open the help page about general use of the app
+#: src/ui/app-menus.ui
+msgid "Basic help"
+msgstr "Oinarrizko laguntza"
+
+#. Context: open the help page about classic tools
+#: src/ui/app-menus.ui
+msgid "Help about tools"
+msgstr "Tresnen gaineko laguntza"
+
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
+#: src/ui/app-menus.ui
+msgid "Canvas and selection"
+msgstr "Oihala eta aukeraketa"
+
+#. Context: open the help page about the selection
+#: src/ui/app-menus.ui
+msgid "Help about selection"
+msgstr "Hautaketaren gaineko laguntza"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "About Drawing"
+msgstr "Drawing-i buruz"
+
+#: src/ui/headerbar.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/window.py
+msgid "Open"
+msgstr "Ireki"
+
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr ""
+
+#: src/ui/new-image-dialog.ui src/ui/properties.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Width"
+msgstr "Zabalera"
+
+#: src/ui/new-image-dialog.ui src/ui/properties.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Height"
+msgstr "Altuera"
+
+#: src/ui/new-image-dialog.ui
+msgid "Color"
+msgstr "Kolorea"
+
+#: src/ui/new-image-dialog.ui
+msgid "Use these settings by default"
+msgstr "Erabili ezarpen hauek lehenespenez"
+
+#: src/ui/minimap.ui
+msgid "100%"
+msgstr "% 100"
+
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
+#: src/ui/properties.ui src/utilities.py
+msgid "pixels"
+msgstr "píxel"
+
+#: src/ui/properties.ui
+msgid "centimeters"
+msgstr "zentimetro"
+
+#: src/ui/properties.ui
+msgid "inches"
+msgstr "hazbete"
+
+#: src/ui/preferences.ui
+msgid "Images"
+msgstr "Irudiak"
+
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Tools"
+msgstr "Tresnak"
+
+#: src/ui/preferences.ui
+msgid "Window"
+msgstr "Leihoa"
+
+#: src/ui/selection-manager.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Close selection"
+msgstr "Itxi hautapena"
+
+#: src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Unselect"
+msgstr "Desautatu"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_crop.py
+msgid "Crop"
+msgstr "Moztu"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_scale.py
+msgid "Scale"
+msgstr "Eskalatu"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_rotate.py
+msgid "Rotate"
+msgstr "Biratu"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Filters"
+msgstr "Iragazkiak"
+
+#: src/ui/selection-manager.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Open As New Image"
+msgstr "Ireki irudi berri gisa"
+
+#: src/ui/shortcuts.ui
+msgid "Keyboard Shortcuts"
+msgstr "Laster-teklak"
+
+#: src/ui/shortcuts.ui
+msgid "General"
+msgstr "Orokorra"
+
+#: src/ui/shortcuts.ui
+msgid "Main menu"
+msgstr "Menu nagusia"
+
+#: src/ui/shortcuts.ui
+msgid "Image"
+msgstr "Irudia"
+
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "Ireki irudi bat"
+
+#: src/ui/shortcuts.ui
+msgid "Reload image from disk"
+msgstr "Birkargatu irudia diskotik"
+
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "Gorde irudia honela…"
+
+#: src/ui/shortcuts.ui
+msgid "Close the active image"
+msgstr "Itxi uneko irudia"
+
+#: src/ui/shortcuts.ui
+#, fuzzy
+msgid "Open the tool options menu"
+msgstr "Aukeren menua"
+
+#: src/ui/shortcuts.ui
+msgid "Back to previous tool"
+msgstr "Atzera aurreko tresnara"
+
+#: src/ui/shortcuts.ui
+msgid "Apply a transformation"
+msgstr ""
+
+#: src/ui/shortcuts.ui
+msgid "History"
+msgstr "Historiala"
+
+#: src/ui/shortcuts.ui
+msgid "Selection"
+msgstr "Hautapena"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Delete the selection"
+msgstr "Ezabatu hautapena"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Import a file as the selection"
+msgstr "Inportatu fitxategia hautapen gisa"
+
+#: src/ui/shortcuts.ui
+msgid "Colors"
+msgstr "Koloreak"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Edit the main color (left click)"
+msgstr "Editatu kolore nagusia (saguaren ezker klika)"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Edit the secondary color (right click)"
+msgstr "Editatu bigarren kolorea (saguaren eskuin klika)"
+
+#: src/ui/shortcuts.ui
+msgid "Tabs"
+msgstr "Fitxak"
+
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
+#: src/ui/shortcuts.ui
+msgid "Navigation"
+msgstr "Nabigazioa"
+
+#: src/ui/shortcuts.ui
+msgid "Toggle the preview"
+msgstr "Trukatu aurrebista"
+
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr "Pantaila osoko modura"
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr "Irten pantaila osotik"
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr "Ukipen keinuak"
+
+#: src/ui/win-menus.ui
+msgid "Troubleshoot selection"
+msgstr "Hautapen arazoak konpontzen"
+
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr "Beste tresnak"
+
+#: src/ui/window.ui
+msgid "Error starting the application, please report this bug."
+msgstr "Errorea aplikazioa abiaraztean, mesedez eman errorearen berri."
+
+#: src/deco_manager.py
+#, python-format
+msgid "Undo %s"
+msgstr "Desegin %s"
+
+#: src/deco_manager.py
+#, python-format
+msgid "Redo %s"
+msgstr "Berregin %s"
+
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr ""
+
+#: src/image.py
+msgid "Can't reload a never-saved file from the disk."
+msgstr "Ezin da birkargatu diskoan inoiz gorde ez den fitxategia."
+
+#: src/image.py src/properties.py
+msgid "Unsaved file"
+msgstr "Gorde gabeko fitxategia"
+
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
+msgid "Cancel"
+msgstr "Utzi"
+
+#. Context: Create a new image
+#: src/new_image_dialog.py
+msgid "Create"
+msgstr "Sortu"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Show the app version"
+msgstr "Erakutsi aplikazioaren bertsioa"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Open a new window"
+msgstr "Ireki leiho berria"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Open a new tab"
+msgstr "Ireki fitxa berria"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Edit the clipboard content"
+msgstr "Editatu arbelaren edukia"
+
+#: src/main.py
+msgid "This version isn't stable!"
+msgstr "Bertsio hau ez da egonkorra!"
+
+#: src/main.py
+msgid "Report bugs or ideas"
+msgstr "Errore edo ideien berri eman"
+
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
+#: src/main.py
+msgid "translator-credits"
+msgstr "AlexanderGabilondo <alexgabi@disroot.org>, 2020"
+
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
+#: src/main.py
+msgid "GNOME's \"Art Libre\" icon set authors"
+msgstr "GNOMEren \"Art Libre\" ikono bildumaren egileak"
+
+#: src/main.py
+msgid "A drawing application for the GNOME desktop."
+msgstr "Marrazteko aplikazioa GNOME mahaigainerako."
+
+#: src/main.py
+msgid "Official webpage"
+msgstr "Webgune ofiziala"
+
+#: src/main.py
+#, fuzzy
+msgid "Error opening this file."
+msgstr "Errorea fitxategia irekitzean. %s esan nahi zenuen?"
+
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr ""
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
+#: src/minimap.py
+#, python-format
+msgid "%s%%"
+msgstr "%s %%"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "New images"
+msgstr "Irudi berriak"
+
+#: src/preferences.py
+msgid "Default width"
+msgstr "Zabalera lehenetsia"
+
+#: src/preferences.py
+msgid "Default height"
+msgstr "Altuera lehenetsia"
+
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Default color"
+msgstr "Kolore lehenetsia"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "Images saving"
+msgstr "Irudiak gordetzen"
+
+#: src/preferences.py
+msgid "JPEG and BMP images can't handle transparency."
+msgstr "JPEG eta BMP irudiek ezin dute gardentasuna kudeatu."
+
+#: src/preferences.py
+msgid ""
+"If you save your images in these formats, what do want to use to replace "
+"transparent pixels?"
+msgstr ""
+"Irudia formatu horietako batean gordetzen baduzu, zer erabili nahi duzu "
+"pixel gardenen ordez?"
+
+#: src/preferences.py src/saving_manager.py src/utilities.py
+msgid "White"
+msgstr "Zuria"
+
+#: src/preferences.py src/saving_manager.py src/utilities.py
+msgid "Black"
+msgstr "Beltza"
+
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
+msgid "Checkboard"
+msgstr "Xake-taula"
+
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
+msgid "Nothing"
+msgstr "Ezer ez"
+
+#: src/preferences.py
+msgid "Ask before saving"
+msgstr "Galdetu gorde aurretik"
+
+#: src/preferences.py
+msgid "You can zoom with Ctrl+scrolling, or only scrolling."
+msgstr "Handiagotzeko Ktrl + saguaren gurpila edo gurpilaren bidez bakarrik."
+
+#: src/preferences.py
+msgid "See the user help manual for explanations."
+msgstr "Begiratu erabiltzailearen laguntza-eskuliburua azalpenetarako."
+
+#: src/preferences.py
+msgid "Use 'Ctrl' to zoom"
+msgstr "Erabili Ktrl handiagotzeko"
+
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
+#: src/preferences.py
+msgid "Appearance"
+msgstr "Itxura"
+
+#: src/preferences.py
+msgid "Use big icons"
+msgstr "Erabili ikono handiak"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "Additional tools"
+msgstr "Tresna gehigarriak"
+
+#: src/preferences.py
+msgid ""
+"These tools are not as reliable and useful as they should be, so they are "
+"not all enabled by default."
+msgstr ""
+"Tresna hauek ez dira behar beste fidagarriak eta erabilgarriak, horregatik "
+"ez daude berez aktibatuta."
+
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
+#: src/preferences.py src/tools/classic_tools/tool_eraser.py
+msgid "Eraser"
+msgstr "Borragoma"
+
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
+#: src/preferences.py src/tools/classic_tools/tool_highlight.py
+msgid "Highlighter"
+msgstr "Nabarmentzailea"
+
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr ""
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
+#: src/preferences.py src/tools/selection_tools/select_free.py
+msgid "Free selection"
+msgstr "Hautapen librea"
+
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
+#: src/preferences.py src/tools/selection_tools/select_color.py
+msgid "Color selection"
+msgstr "Kolore hautapena"
+
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
+#: src/preferences.py src/tools/classic_tools/tool_picker.py
+msgid "Color Picker"
+msgstr "Kolore-hautatzailea"
+
+#. Context: the name of a tool to fill an area of one color with an other
+#: src/preferences.py src/tools/classic_tools/tool_paint.py
+msgid "Paint"
+msgstr "Betegarria"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "Advanced options"
+msgstr "Aukera aurreratuak"
+
+#: src/preferences.py
+msgid "Preview size"
+msgstr "Aurrebistaren tamaina"
+
+#. This label will not be displayed in the UI of stable versions
+#: src/preferences.py
+msgid "Development features"
+msgstr "Garapen eginbideak"
+
+#: src/preferences.py
+msgid "Background color"
+msgstr "Atzeko planoaren kolorea"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
+msgid "Layout"
+msgstr "Diseinua"
+
+#: src/preferences.py
+msgid "The recommended value is \"Automatic\"."
+msgstr "Gomendatutako balioa \"Automatikoa\" da."
+
+#. It has to match what's written in the previous string.
+#: src/preferences.py
+msgid "Automatic"
+msgstr "Automatikoa"
+
+#: src/preferences.py
+msgid "Compact"
+msgstr "Trinkoa"
+
+#: src/preferences.py
+msgid "elementary OS"
+msgstr "elementary OS"
+
+#. "Legacy" is about the window layout, it means menubar+toolbar, you
+#. can translate it like if it was "Traditional"
+#: src/preferences.py
+msgid "Legacy"
+msgstr "Tradizionala"
+
+#. "Legacy" is about the window layout, it means menubar+toolbar, you
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
+#: src/preferences.py
+msgid "Legacy (symbolic icons)"
+msgstr "Tradizionala (ikur ikonoak)"
+
+#: src/preferences.py
+msgid "Menubar only"
+msgstr "Menu-barra bakarrik"
+
+#: src/preferences.py
+msgid "Toolbar only"
+msgstr "Tresna-barra bakarrik"
+
+#. Symbolic icons are monochrome icons.
+#: src/preferences.py
+msgid "Toolbar only (symbolic icons)"
+msgstr "Tresna-barra bakarrik (ikur ikonoak)"
+
+#: src/properties.py
+#, python-format
+msgid "%s px"
+msgstr "%s px"
+
+#: src/properties.py
+#, python-format
+msgid "%s cm"
+msgstr "%s cm"
+
+#: src/properties.py
+#, python-format
+msgid "%s in"
+msgstr "%s in"
+
+#. Context: the path of the edited file
+#: src/properties.py
+msgid "Path"
+msgstr "Bide-izena"
+
+#. Context: the file format of the edited file
+#: src/properties.py
+msgid "Format"
+msgstr "Formatua"
+
+#: src/properties.py
+msgid "Colorspace"
+msgstr "Kolore-eredua"
+
+#. Context: an invalid colorspace format
+#: src/properties.py
+msgid "Invalid format"
+msgstr "Formatu baliogabea"
+
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "Errorea %s gordetzean"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "Izenik gabe"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "irudi hau"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "Baztertu"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "%s fitxategian gorde gabeko aldaketak daude."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr ""
+
+#: src/saving_manager.py
+#, fuzzy
+msgid "Do you want to save anyway?"
+msgstr "Non ireki nahi duzu %s?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr "Ordeztu"
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "Fitxategi formatu honek ez du kolore gardenik onartzen."
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr "Irudia PDF formatuan gorde dezakezu edo gardentasunen ordez hau jarri:"
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "Gardentasunaren ordez hau jarri:"
+
+#: src/utilities.py
+msgid "Transparent"
+msgstr "Gardena"
+
+#: src/utilities.py
+#, python-format
+msgid "%s%% transparent"
+msgstr "%s %% garden"
+
+#: src/utilities.py
+msgid "Grey"
+msgstr "Grisa"
+
+#: src/utilities.py
+msgid "Orange"
+msgstr "Laranja"
+
+#: src/utilities.py
+msgid "Brown"
+msgstr "Marroia"
+
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
+#: src/utilities.py
+msgid "Probably brown"
+msgstr "Marroia seguruenik"
+
+#: src/utilities.py
+msgid "Red"
+msgstr "Gorria"
+
+#: src/utilities.py
+msgid "Green"
+msgstr "Berdea"
+
+#: src/utilities.py
+msgid "Blue"
+msgstr "Urdina"
+
+#: src/utilities.py
+msgid "Yellow"
+msgstr "Horia"
+
+#: src/utilities.py
+msgid "Magenta"
+msgstr "Magenta"
+
+#: src/utilities.py
+msgid "Purple"
+msgstr "Morea"
+
+#: src/utilities.py
+msgid "Cyan"
+msgstr "Ziana"
+
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
+#: src/utilities.py
+msgid "Probably teal"
+msgstr "Turkesa seguruenik"
+
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
+#: src/utilities.py
+msgid "Unknown color name"
+msgstr "Kolore izen ezezaguna"
+
+#: src/utilities.py
+msgid "All pictures"
+msgstr "Irudi guztiak"
+
+#: src/utilities.py
+msgid "PNG images"
+msgstr "PNG irudiak"
+
+#: src/utilities.py
+msgid "JPEG images"
+msgstr "JPEG irudiak"
+
+#: src/utilities.py
+msgid "BMP images"
+msgstr "IBMP irudiak"
+
+#. To translators: it appears in tooltips over numerical inputs
+#: src/utilities.py
+msgid "percents"
+msgstr "ehunekoak"
+
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
+#: src/utilities.py
+msgid "degrees"
+msgstr "graduak"
+
+#: src/utilities.py
+#, fuzzy, python-format
+msgid "%s isn't an image."
+msgstr "Ireki irudi bat"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr ""
+
+#. Context: an error message
+#: src/window.py
+#, python-format
+msgid "Failed to load tool: %s"
+msgstr "Errorea tresna kargatzean: %s"
+
+#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr ""
+
+#: src/window.py
+msgid "Modifications will take effect in the next new window."
+msgstr "Aldaketok hurrengo leiho berrian gauzatuko dira."
+
+#: src/window.py src/tools/abstract_tool.py
+#: src/optionsbars/classic/optionsbar-classic.ui
+#: src/tools/classic_tools/tool_eraser.py
+msgid "No options"
+msgstr "Aukerarik gabe"
+
+#: src/window.py
+msgid "Opened images"
+msgstr "Irudi irekiak"
+
+#: src/window.py
+#, fuzzy, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "Errorea aplikazioa abiaraztean, mesedez eman errorearen berri."
+
+#: src/window.py
+#, python-format
+msgid "Loading %s"
+msgstr "Kargatzen %s"
+
+#. Context: answer to "where do you want to open the image?"
+#: src/window.py
+msgid "New Tab"
+msgstr "Fitxa berria"
+
+#: src/window.py
+msgid "Discard changes"
+msgstr "Baztertu aldaketak"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/window.py
+#, python-format
+msgid "Where do you want to open %s?"
+msgstr "Non ireki nahi duzu %s?"
+
+#. Context for translation:
+#. "What do you want to do with *these files*?"
+#: src/window.py
+msgid "these files"
+msgstr "fitxategi hauek"
+
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
+#: src/window.py
+#, python-format
+msgid "What do you want to do with %s?"
+msgstr "Zer egin nahi duzu %s-rekin?"
+
+#: src/window.py
+#, fuzzy
+msgid "Image copied to clipboard"
+msgstr "Arbeleko irudia editatu"
+
+#: src/window.py
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr ""
+
+#: src/window.py
+#, fuzzy
+msgid "Reload"
+msgstr "Birkargatu fitxategia"
+
+#: src/window.py
+msgid "Import a picture"
+msgstr "Inportatu irudi bat"
+
+#: src/window.py
+msgid "Required tool is not available"
+msgstr "Eskatutako tresna ez dago erabilgarri"
+
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
+
+#: src/tools/utilities_paths.py
+msgid "Continue"
+msgstr "Jarraitu"
+
+#: src/tools/utilities_paths.py
+msgid "The area seems poorly delimited, or is very complex."
+msgstr "Area hori ongi zehaztu gabe dago, edo oso konplexua da."
+
+#: src/tools/utilities_paths.py
+msgid "This algorithm may not be able to manage the wanted area."
+msgstr "Algoritmo horrek agian ezin du eskatutako area kudeatu."
+
+#: src/tools/utilities_paths.py
+msgid "Do you want to abort the operation, or to let the tool struggle ?"
+msgstr "Nahi duzu ataza gelditu, edo tresna horrekin saiakera egin?"
+
+#. Context: fill a shape with the color of the left click
+#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Main color"
+msgstr "Kolore nagusia"
+
+#. Context: fill a shape with the color of the right click
+#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Secondary color"
+msgstr "Bigarren kolorea"
+
+#: src/optionsbars/classic/optionsbar-classic.ui
+msgid "Tool size"
+msgstr "Tresnaren tamaina"
+
+#: src/optionsbars/classic/optionsbar-classic.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
+msgid "Preview"
+msgstr "Aurrebista"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "How the color will be applied to the existing pixels"
+msgstr "Nola zabalduko da kolorea dauden pixeletan"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Back to the palette"
+msgstr "Atzera paletara"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Palette"
+msgstr "Paleta"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Use this editor by default"
+msgstr "Erabili editore hau lehenespenez"
+
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+msgid "More actions"
+msgstr "Ekintza gehiago"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+msgid "Apply"
+msgstr "Aplikatu"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "Aukera gehiago"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr "Zabaldu honekin…"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "Gardentasuna"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Select a filter…"
+msgstr "Aukeratu iragazkia…"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+msgid "Saturation"
+msgstr "Saturazioa"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+msgid "Blur radius"
+msgstr "Lausotze erradioa"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Change saturation"
+msgstr "Aldatu saturazioa"
+
+#. Context: a filter adding like a light veil on the image
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Veil"
+msgstr "Beloa"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
+msgid "Add transparency"
+msgstr "Gehitu gardentasuna"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Invert colors"
+msgstr "Trukatu koloreak"
+
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
+msgid "Blurring"
+msgstr "Lausotzea"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Fast blur"
+msgstr "Lausotze azkarra"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Slow blur"
+msgstr "Lausotze motela"
+
+#. Context: a filter that censors the image with some kind of tiles
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
+msgstr "Pixelizazioa"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "Blur direction"
+msgstr "Lausotzearen norabidea"
+
+#. Context: about the blur direction
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "Horizontal"
+msgstr "Horizontala"
+
+#. Context: about the blur direction
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "Vertical"
+msgstr "Bertikala"
+
+#. Context: about the blur direction
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "No direction"
+msgstr "Norabiderik gabe"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui
+msgid "Angle (degrees)"
+msgstr "Angelua (gradu)"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui
+msgid "Angle"
+msgstr "Angelua"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Rotate left"
+msgstr "Biratu ezkerrera"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Rotate right"
+msgstr "Biratu eskuinera"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Flip horizontally"
+msgstr "Irauli horizontalki"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Flip vertically"
+msgstr "Irauli bertikalki"
+
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "Keep proportions"
+msgstr "Mantendu proportzioak"
+
+#. Context: an item in a menu whose title is "Keep proportions"
+#. Context for translations: "Always [keep proportions]"
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "Always"
+msgstr "Beti"
+
+#. Context: an item in a menu whose title is "Keep proportions"
+#. Context for translations: "[Keep proportions only] when scaling from corners"
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "When scaling from corners"
+msgstr "Izkinatik eskalatzean"
+
+#. Context: an item in a menu whose title is "Keep proportions"
+#. Context for translations: "Never [keep proportions]"
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "Never"
+msgstr "Inoiz ez"
+
+#: src/optionsbars/transform/optionsbar-skew.ui
+msgid "Horizontal deformation"
+msgstr "Itxuraldaketa horizontala"
+
+#: src/optionsbars/transform/optionsbar-skew.ui
+msgid "Vertical deformation"
+msgstr "Itxuraldaketa bertikala"
+
+#: src/tools/ui/selection.ui
+#, fuzzy
+msgid "Transform"
+msgstr "Gardena"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Line shape"
+msgstr "Marraren forma"
+
+#. Context: this is the name of a line shape
+#. Default values
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
+#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+msgid "Round"
+msgstr "Mutur borobilduak"
+
+#. Context: this is the name of a line shape
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
+msgid "Square"
+msgstr "Mutur karratuak"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "No arrow"
+msgstr "Gezia"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "Double arrow"
+msgstr "Puntukako gezia"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "No dashes"
+msgstr "Erabili marratxoak"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Simple dashes"
+msgstr "Erabili marratxoak"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Long dashes"
+msgstr "Erabili marratxoak"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Short dashes"
+msgstr "Erabili marratxoak"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+msgid "Antialiasing"
+msgstr "Antialiasing-a"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Dark text on light background"
+msgstr "Betegarri laukizuzena"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr ""
+
+#: src/tools/ui/tool-line.ui
+msgid "Color gradient"
+msgstr "Kolore gradientea"
+
+#. Context: title for the list of the possible painting algorithms.
+#: src/tools/ui/tool-paint.ui
+msgid "Behavior"
+msgstr "Portaera"
+
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
+#: src/tools/ui/tool-paint.ui
+msgid "Encircle and fill"
+msgstr "Borobildu eta bete"
+
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
+#: src/tools/ui/tool-paint.ui
+msgid "Erase and replace"
+msgstr "Ezabatu eta ordeztu"
+
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
+#: src/tools/ui/tool-paint.ui
+#, fuzzy
+msgid "Entire image"
+msgstr "Irudi irekiak"
+
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+#, fuzzy
+msgid "Remove color"
+msgstr "Jatorrizko kolorea"
+
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "Zirkulua"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr ""
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Solid outline"
+msgstr "Ertz jarraia"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Dashed outline"
+msgstr "Ertz etena"
+
+#. if state_as_string == 'none':
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "No outline"
+msgstr "Ertzik gabe"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr "Betegarria"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Empty shape"
+msgstr "Forma hutsa"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Horizontal gradient"
+msgstr "Gradiente horizontala"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Vertical gradient"
+msgstr "Gradiente bertikala"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Radial gradient"
+msgstr "Gradiente erradiala"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "Laukizuzena"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr "Laukizuzen borobildua"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "Elipsea"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "Poligonoa"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "Forma librea"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Close shape"
+msgstr "Itxi forma"
+
+#: src/tools/ui/tool-text.ui
+msgid "Insert here"
+msgstr "Txertatu hemen"
+
+#: src/tools/ui/tool-text.ui
+msgid "Font"
+msgstr "Letra-mota"
+
+#: src/tools/ui/tool-text.ui
+msgid "Select a font…"
+msgstr "Hautatu letra-mota…"
+
+#: src/tools/ui/tool-text.ui
+msgid "Italic"
+msgstr "Etzana"
+
+#: src/tools/ui/tool-text.ui
+msgid "Bold"
+msgstr "Lodia"
+
+#. Context: the types of background behind the inserted text
+#: src/tools/ui/tool-text.ui
+msgid "Background"
+msgstr "Atzeko kolorea"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "No background"
+msgstr "Atzeko kolorerik gabe"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "Shadow"
+msgstr "Itzala"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "Outline"
+msgstr "Ertza"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "Rectangle background"
+msgstr "Betegarri laukizuzena"
+
+#: src/tools/classic_tools/tool_arc.py
+msgid "Curve"
+msgstr "Kurba"
+
+#: src/tools/classic_tools/tool_arc.py
+msgid "Curve options"
+msgstr "Kurbaren aukerak"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Dashed arrow"
+msgstr "Puntukako gezia"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "Gezia"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+msgid "Dashed"
+msgstr "Etena"
+
+#: src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Highlighter options"
+msgstr "Nabarmentzailea"
+
+#: src/tools/classic_tools/tool_line.py
+msgid "Line"
+msgstr "Marra"
+
+#: src/tools/classic_tools/tool_line.py
+msgid "Line options"
+msgstr "Marraren aukerak"
+
+#: src/tools/classic_tools/tool_paint.py
+msgid "Painting options"
+msgstr "Betegarriaren aukerak"
+
+#: src/tools/classic_tools/tool_paint.py
+msgid "Click on an area to replace its color by transparency"
+msgstr "Klikatu area batean kolorea kendu eta gardena uzteko"
+
+#: src/tools/classic_tools/tool_paint.py
+#, fuzzy
+msgid "Click on the canvas to entirely paint it"
+msgstr "Klikatu formaren lehenengo puntuan bera ixteko."
+
+#: src/tools/classic_tools/tool_pencil.py
+msgid "Pencil"
+msgstr "Arkatza"
+
+#: src/tools/classic_tools/tool_pencil.py
+msgid "Pencil options"
+msgstr "Arkatzaren aukerak"
+
+#: src/tools/classic_tools/tool_points.py
+#, fuzzy
+msgid "Points options"
+msgstr "Letra motaren aukerak"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr ""
+
+#: src/tools/classic_tools/tool_shape.py
+msgid "Shape"
+msgstr "Forma"
+
+#: src/tools/classic_tools/tool_shape.py
+msgid "Shape options"
+msgstr "Formaren aukerak"
+
+#: src/tools/classic_tools/tool_shape.py
+msgid "Click on the shape's first point to close it."
+msgstr "Klikatu formaren lehenengo puntuan bera ixteko."
+
+#: src/tools/classic_tools/tool_text.py
+msgid "Text"
+msgstr "Testua"
+
+#. XXX use "text options" instead
+#: src/tools/classic_tools/tool_text.py
+msgid "Font options"
+msgstr "Letra motaren aukerak"
+
+#: src/tools/selection_tools/abstract_select.py
+msgid "Drag the selection or right-click on the canvas"
+msgstr "Arrastatu hautapena edo oihalean eskuin klik egin"
+
+#: src/tools/selection_tools/abstract_select.py
+msgid "Select an area or right-click on the canvas"
+msgstr "Hautatu area bat edo oihalean eskuin klik egin"
+
+#: src/tools/selection_tools/select_rect.py
+msgid "Rectangle selection"
+msgstr "Laukizuzen formako hautapena"
+
+#: src/tools/transform_tools/abstract_transform_tool.py
+msgid "Error: invalid values"
+msgstr "Errorea: datu baliogabeak"
+
+#: src/tools/transform_tools/tool_crop.py
+msgid "Cropping the selection"
+msgstr "Hautapena mozten"
+
+#: src/tools/transform_tools/tool_crop.py
+msgid "Cropping the canvas"
+msgstr "Oihala mozten"
+
+#: src/tools/transform_tools/tool_filters.py
+msgid "Click on the image to preview the selected filter"
+msgstr "Klikatu irudia hautatutako iragazkia aurreikusteko"
+
+#: src/tools/transform_tools/tool_rotate.py
+msgid "Rotating the selection"
+msgstr "Hautapena biratzen"
+
+#: src/tools/transform_tools/tool_rotate.py
+msgid "Rotating the canvas"
+msgstr "Girando el lienzo"
+
+#: src/tools/transform_tools/tool_scale.py
+msgid "Scaling the selection"
+msgstr "Oihala biratzen"
+
+#: src/tools/transform_tools/tool_scale.py
+msgid "Scaling the canvas"
+msgstr "Oihala eskalatzen"
+
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr "Etzan"
+
+#~ msgid "Flip"
+#~ msgstr "Irauli"
+
+#, fuzzy
+#~ msgid "Add semi-transparency"
+#~ msgstr "Gehitu gardentasuna"
+
+#~ msgid "Thin"
+#~ msgstr "Mutur zorrotzak"
+
+#~ msgid "Clipping"
+#~ msgstr "Mozketa"
+
+#~ msgid "Edit"
+#~ msgstr "Editatu"
+
+#~ msgid "Open a file"
+#~ msgstr "Ireki fitxategia"
+
+#~ msgid "Save as"
+#~ msgstr "Gorde honela"
diff --git a/po/fi.po b/po/fi.po
index 267c8700..7597d076 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: drawing\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-15 19:07+0200\n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
"PO-Revision-Date: 2020-04-06 22:26+0300\n"
"Last-Translator: Kimmo Kujansuu <mrkujansuu@gmail.com>\n"
"Language-Team: suomi <>\n"
@@ -80,6 +80,73 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+"Versio 0.6.4 sisältää useita pieniä virhekorjauksia ja uusia käännöksiä."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+"Versio 0.6.2 sisältää useita pieniä virhekorjauksia ja uusia käännöksiä."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"Version 0.6 is a major update, with various important changes. The app is "
"more robust and has more tools:"
msgstr ""
@@ -110,8 +177,14 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
-"with several types of blur, color inversion, pixelisation, saturation and "
+"with several types of blur, color inversion, pixelization, saturation and "
"transparency."
msgstr ""
"'Kylläisyys' -työkalu on korvattu suodattimilla, tehokkaampi työkalu, jossa "
@@ -130,23 +203,37 @@ msgstr ""
"Näkyvin uusi ominaisuus on kyky suurentaa (tai pienentää) kuvaa käyttämällä "
"minimipistettä, kosketuslevyä tai hiiren pyörää."
-#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid ""
-"Version 0.4.8 features several minor bug fixes, and various new translations."
-msgstr ""
-"Versio 0.4.8 sisältää useita pieniä virhekorjauksia ja uusia käännöksiä."
-
#. This is just my name, do not translate it.
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid "Romain F. T."
msgstr "Romain F. T."
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr ""
+
#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
#: src/preferences.py
msgid "Preferences"
msgstr "Asetukset"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
msgid "Report a bug"
msgstr "Ilmoita virheestä"
@@ -195,19 +282,23 @@ msgstr "Uusi kuva leikepöydältä"
msgid "Reload file"
msgstr "Lataa uudelleen"
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/properties.py
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
msgid "Image properties"
msgstr "Kuvan ominaisuudet"
#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
-#: src/ui/win-menus.ui src/window.py
+#: src/ui/win-menus.ui src/saving_manager.py
msgid "Save"
msgstr "Tallenna"
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+#, fuzzy
+msgid "Save without transparency"
+msgstr "Lisää läpinäkyvyys"
+
#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
-#: src/utilities.py
+#: src/saving_manager.py
msgid "Save as…"
msgstr "Tallenna nimellä…"
@@ -216,7 +307,13 @@ msgstr "Tallenna nimellä…"
msgid "Export as…"
msgstr "Vie nimellä…"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
msgid "Print"
msgstr "Tulosta"
@@ -301,20 +398,25 @@ msgid "Optimal Zoom"
msgstr "Optimaalinen näkymä"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom Out"
msgstr "Loitontaa"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Original Zoom"
msgstr "Alkuperäinen koko"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom In"
msgstr "Lähennä"
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
#: src/ui/app-menus.ui
msgid "Position"
msgstr "Paikka"
@@ -350,12 +452,6 @@ msgid "Refresh"
msgstr "Virkistä"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
-#: src/preferences.py
-msgid "Show tools names"
-msgstr "Näytä työkalujen nimet"
-
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/shortcuts.ui
-#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
msgid "Fullscreen"
msgstr "Kokonäyttö"
@@ -388,55 +484,64 @@ msgstr "Vaihda värejä"
msgid "Color application mode"
msgstr "Värin sovellustila"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Normal"
msgstr "Normaali"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Other modes"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Raw source color"
msgstr "Lähdeväri"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Highlight"
msgstr "Korostekynä"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Difference"
msgstr "Eroavuus"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
-msgid "Photo manipulation"
+msgid "Photo-oriented modes"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Hue only"
msgstr "Vain valikkopalkki"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Saturation only"
msgstr "Kylläisyys"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Hue and saturation"
msgstr "Vaihda kylläisyys"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Luminosity only"
msgstr ""
@@ -446,17 +551,17 @@ msgid "Don't use the colors but…"
msgstr "Älä käytä värejä, mutta…"
#. To translators: this is a verb
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Blur"
msgstr "Sumeus"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Erase"
msgstr "Pyyhi"
-#: src/ui/app-menus.ui src/window.py
+#: src/ui/app-menus.ui
msgid "_Tools"
msgstr "_Työkalut"
@@ -464,6 +569,24 @@ msgstr "_Työkalut"
msgid "Previous tool"
msgstr "Edellinen työkalu"
+#: src/ui/app-menus.ui
+msgid "Active tool"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "Näytä työkalujen nimet"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+#, fuzzy
+msgid "Smaller width"
+msgstr "Oletusleveys"
+
#: src/ui/app-menus.ui src/window.py
msgid "_Options"
msgstr "_Valinnat"
@@ -472,22 +595,28 @@ msgstr "_Valinnat"
msgid "_Help"
msgstr "_Apua"
+#. Context: open the index of all help pages
#: src/ui/app-menus.ui
msgid "Index"
msgstr "Sisällysluettelo"
+#. Context: open the help page about general use of the app
#: src/ui/app-menus.ui
msgid "Basic help"
msgstr "Perusohjeet"
+#. Context: open the help page about classic tools
#: src/ui/app-menus.ui
msgid "Help about tools"
msgstr "Ohje työkaluista"
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
#: src/ui/app-menus.ui
msgid "Canvas and selection"
msgstr "Tausta ja valinta"
+#. Context: open the help page about the selection
#: src/ui/app-menus.ui
msgid "Help about selection"
msgstr "Ohje valinnasta"
@@ -501,21 +630,26 @@ msgstr "Tietoja ohjelmasta"
msgid "Open"
msgstr "Avaa"
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr ""
+
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Width"
msgstr "Leveys"
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Height"
msgstr "Korkeus"
#: src/ui/new-image-dialog.ui
-msgid "Background color"
-msgstr "Taustaväri"
+#, fuzzy
+msgid "Color"
+msgstr "Värit"
#: src/ui/new-image-dialog.ui
msgid "Use these settings by default"
@@ -525,6 +659,8 @@ msgstr "Käytä näitä asetuksia oletuksena"
msgid "100%"
msgstr "100%"
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
#: src/ui/properties.ui src/utilities.py
msgid "pixels"
msgstr "pikseliä"
@@ -541,7 +677,7 @@ msgstr "tuumaa"
msgid "Images"
msgstr "Kuvat"
-#: src/ui/preferences.ui src/ui/shortcuts.ui
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "Tools"
msgstr "Työkalut"
@@ -560,30 +696,22 @@ msgid "Unselect"
msgstr "Valitsematta"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Crop"
msgstr "Rajaa"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scale"
msgstr "Skaalaa"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotate"
msgstr "Kieritä"
-#. In this context, "Skew" is the name of the tool changing rectangles
-#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
-#. "Stretch/Skew" dialog.
-#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_skew.py
-msgid "Skew"
-msgstr "Vinossa"
-
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Filters"
msgstr "Suodattimet"
@@ -593,8 +721,9 @@ msgid "Open As New Image"
msgstr "Avaa uutena kuvana"
#: src/ui/shortcuts.ui
-msgid "Keyboard"
-msgstr "Näppäimistö"
+#, fuzzy
+msgid "Keyboard Shortcuts"
+msgstr "Pikakuvakkeet"
#: src/ui/shortcuts.ui
msgid "General"
@@ -605,31 +734,28 @@ msgid "Main menu"
msgstr "Päävalikko"
#: src/ui/shortcuts.ui
-msgid "Editing"
-msgstr "Muokata"
-
-#: src/ui/shortcuts.ui
msgid "Image"
msgstr "Kuva"
-#: src/ui/shortcuts.ui
-msgid "Open a file"
-msgstr "Avaa tiedosto"
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "Avaa kuva"
#: src/ui/shortcuts.ui
msgid "Reload image from disk"
msgstr "Lataa kuva levyltä"
-#: src/ui/shortcuts.ui
-msgid "Save as"
-msgstr "Tallenna nimellä"
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "Tallenna kuva nimellä…"
#: src/ui/shortcuts.ui
msgid "Close the active image"
msgstr "Sulje aktiivinen kuva"
#: src/ui/shortcuts.ui
-msgid "Options menu"
+#, fuzzy
+msgid "Open the tool options menu"
msgstr "Asetukset valikko"
#: src/ui/shortcuts.ui
@@ -637,18 +763,12 @@ msgid "Back to previous tool"
msgstr "Takaisin edelliseen työkaluun"
#: src/ui/shortcuts.ui
-msgid "Colors"
-msgstr "Värit"
-
-#. Label displayed in the keyboard shortcuts dialog
-#: src/ui/shortcuts.ui
-msgid "Edit the main color (left click)"
-msgstr "Muokkaa pääväriä (vasen napsautus)"
+msgid "Apply a transformation"
+msgstr ""
-#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Edit the secondary color (right click)"
-msgstr "Muokkaa seuraavaa väriä (napsauta hiiren oikealla painikkeella)"
+msgid "History"
+msgstr ""
#: src/ui/shortcuts.ui
msgid "Selection"
@@ -665,17 +785,25 @@ msgid "Import a file as the selection"
msgstr "Tuo tiedosto valintana"
#: src/ui/shortcuts.ui
-msgid "Tabs"
-msgstr ""
+msgid "Colors"
+msgstr "Värit"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Enter fullscreen mode"
-msgstr "Siirry koko näyttöön"
+msgid "Edit the main color (left click)"
+msgstr "Muokkaa pääväriä (vasen napsautus)"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Exit fullscreen mode"
-msgstr "Poistu koko näytöstä"
+msgid "Edit the secondary color (right click)"
+msgstr "Muokkaa seuraavaa väriä (napsauta hiiren oikealla painikkeella)"
+
+#: src/ui/shortcuts.ui
+msgid "Tabs"
+msgstr ""
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
#: src/ui/shortcuts.ui
msgid "Navigation"
msgstr "Navigaatio"
@@ -684,10 +812,26 @@ msgstr "Navigaatio"
msgid "Toggle the preview"
msgstr "Vaihda esikatseluun"
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr "Siirry koko näyttöön"
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr "Poistu koko näytöstä"
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr ""
+
#: src/ui/win-menus.ui
msgid "Troubleshoot selection"
msgstr "Vianmääritys"
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr ""
+
#: src/ui/window.ui
msgid "Error starting the application, please report this bug."
msgstr "Virhe sovelluksen käynnistämisessä, ilmoita tästä virheestä."
@@ -702,6 +846,12 @@ msgstr "Kumoa %s"
msgid "Redo %s"
msgstr "Uudelleen %s"
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr ""
+
#: src/image.py
#, fuzzy
msgid "Can't reload a never-saved file from the disk."
@@ -711,15 +861,15 @@ msgstr "Koskaan tallennettua tiedostoa ei voi ladata uudelleen levyltä."
msgid "Unsaved file"
msgstr "Tallentamaton tiedosto"
-#: src/new_image_dialog.py src/utilities.py src/window.py
-#: src/tools/utilities_paths.py src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-crop.ui src/tools/ui/tool-filters.ui
-#: src/tools/ui/tool-rotate.ui src/tools/ui/tool-scale.ui
-#: src/tools/ui/tool-skew.ui
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
msgid "Cancel"
msgstr "Peru"
@@ -728,18 +878,22 @@ msgstr "Peru"
msgid "Create"
msgstr "Luo"
+#. Description of a command line option
#: src/main.py
msgid "Show the app version"
msgstr "Näytä sovelluksen versio"
+#. Description of a command line option
#: src/main.py
msgid "Open a new window"
msgstr "Avaa uusi ikkuna"
+#. Description of a command line option
#: src/main.py
msgid "Open a new tab"
msgstr "Avaa uusi välilehti"
+#. Description of a command line option
#: src/main.py
msgid "Edit the clipboard content"
msgstr "Muokkaa leikepöydän sisältöä"
@@ -752,12 +906,14 @@ msgstr "Tämä versio ei ole vakaa!"
msgid "Report bugs or ideas"
msgstr "Ilmoita virheistä tai ideoita"
-#. To tranlators: "translate" this by your name, it will be displayed
-#. in the "about" dialog
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
#: src/main.py
msgid "translator-credits"
msgstr "Kimmo Kujansuu"
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
#: src/main.py
msgid "GNOME's \"Art Libre\" icon set authors"
msgstr "GNOMEn \"Art Libre\" -kuvakesarjan kirjoittajat"
@@ -771,17 +927,24 @@ msgid "Official webpage"
msgstr "Virallinen verkkosivu"
#: src/main.py
-#, python-format
-msgid "Error opening this file. Did you mean %s ?"
+#, fuzzy
+msgid "Error opening this file."
msgstr "Virhe avatessa tiedostoa. Tarkoititko %s ?"
-#. This displays the zoom level, %s will be replaced with a number, while
-#. %% is just the symbol '%'
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr ""
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
#: src/minimap.py
#, python-format
msgid "%s%%"
msgstr "%s%%"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "New images"
msgstr "Uusia kuvia"
@@ -794,10 +957,17 @@ msgstr "Oletusleveys"
msgid "Default height"
msgstr "Oletuskorkeus"
-#: src/preferences.py
-msgid "Default background"
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+#, fuzzy
+msgid "Default color"
msgstr "Oletustausta"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Images saving"
msgstr "Kuvien tallennus"
@@ -814,19 +984,23 @@ msgstr ""
"Jos tallennat kuvat näihin muotoihin, mitä haluat käyttää korvaamaan "
"läpinäkyvät pikselit?"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "White"
msgstr "Valkoinen"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "Black"
msgstr "Musta"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
msgid "Checkboard"
msgstr "Tarkistusalusta"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
msgid "Nothing"
msgstr "Mitään"
@@ -839,13 +1013,15 @@ msgid "You can zoom with Ctrl+scrolling, or only scrolling."
msgstr "Voit zoomata painamalla Ctrl+vieritys tai vain vieritys."
#: src/preferences.py
-msgid "Using keyboard shortcuts or touch gestures is possible too."
-msgstr "Pikanäppäinten tai kosketus eleiden käyttö on mahdollista."
+msgid "See the user help manual for explanations."
+msgstr ""
#: src/preferences.py
msgid "Use 'Ctrl' to zoom"
msgstr "Käytä 'Ctrl' zoomataksesi"
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
#: src/preferences.py
msgid "Appearance"
msgstr "Ulkomuoto"
@@ -854,6 +1030,7 @@ msgstr "Ulkomuoto"
msgid "Use big icons"
msgstr "Käytä suuria kuvakkeita"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Additional tools"
msgstr "Lisätyökalut"
@@ -866,31 +1043,51 @@ msgstr ""
"Nämä työkalut eivät ole niin luotettavia ja hyödyllisiä kuin niiden pitäisi "
"olla, joten ne eivät ole oletuksena käytössä."
-#. In the meaning "a rubber eraser"
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
#: src/preferences.py src/tools/classic_tools/tool_eraser.py
msgid "Eraser"
msgstr "Pyyhekumi"
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
#: src/preferences.py src/tools/classic_tools/tool_highlight.py
msgid "Highlighter"
msgstr "Korostekynä"
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr ""
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
#: src/preferences.py src/tools/selection_tools/select_free.py
msgid "Free selection"
msgstr "Vapaa valinta"
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
#: src/preferences.py src/tools/selection_tools/select_color.py
msgid "Color selection"
msgstr "Värin valinta"
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
#: src/preferences.py src/tools/classic_tools/tool_picker.py
msgid "Color Picker"
msgstr "Värin poiminta"
+#. Context: the name of a tool to fill an area of one color with an other
#: src/preferences.py src/tools/classic_tools/tool_paint.py
msgid "Paint"
msgstr "Maalaa"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Advanced options"
msgstr "Edistyneet asetukset"
@@ -899,11 +1096,18 @@ msgstr "Edistyneet asetukset"
msgid "Preview size"
msgstr "Esikatselun koko"
+#. This label will not be displayed in the UI of stable versions
#: src/preferences.py
msgid "Development features"
msgstr "Kehitysvaiheen ominaisuudet"
#: src/preferences.py
+msgid "Background color"
+msgstr "Taustaväri"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
msgid "Layout"
msgstr "Asettelu"
@@ -911,6 +1115,7 @@ msgstr "Asettelu"
msgid "The recommended value is \"Automatic\"."
msgstr "Suositeltu arvo on \"Automaattinen\"."
+#. It has to match what's written in the previous string.
#: src/preferences.py
msgid "Automatic"
msgstr "Automaattinen"
@@ -930,7 +1135,8 @@ msgid "Legacy"
msgstr "Perinteinen"
#. "Legacy" is about the window layout, it means menubar+toolbar, you
-#. can translate it like if it was "Traditional"
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Legacy (symbolic icons)"
msgstr "Perinteinen (symboliset kuvakkeet)"
@@ -943,6 +1149,7 @@ msgstr "Vain valikkopalkki"
msgid "Toolbar only"
msgstr "Vain työkalurivi"
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Toolbar only (symbolic icons)"
msgstr "Vain työkalurivi (symboliset kuvakkeet)"
@@ -962,10 +1169,12 @@ msgstr "%s cm"
msgid "%s in"
msgstr "%s in"
+#. Context: the path of the edited file
#: src/properties.py
msgid "Path"
msgstr "Polku"
+#. Context: the file format of the edited file
#: src/properties.py
msgid "Format"
msgstr "Muoto"
@@ -974,10 +1183,69 @@ msgstr "Muoto"
msgid "Colorspace"
msgstr "Värialue"
+#. Context: an invalid colorspace format
#: src/properties.py
msgid "Invalid format"
msgstr "Väärä muoto"
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "Kohteen %s tallentaminen epäonnistui"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "Nimetön"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "tämä kuva"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "Hylkää"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "Täällä on %s tallentamattomia muutoksia."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr ""
+
+#: src/saving_manager.py
+#, fuzzy
+msgid "Do you want to save anyway?"
+msgstr "Missä haluat avata %s?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr "Korvaa"
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "Tämä tiedostomuoto ei tue läpinäkyviä värejä."
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr "Voit tallentaa kuvan PNG-tiedostona tai korvata läpinäkyvyyden:"
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "Korvaa läpinäkyvyys seuraavilla:"
+
#: src/utilities.py
msgid "Transparent"
msgstr "Läpinäkyvä"
@@ -999,6 +1267,9 @@ msgstr "Oranssi"
msgid "Brown"
msgstr "Ruskea"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
#: src/utilities.py
msgid "Probably brown"
msgstr "Todennäköisesti ruskea"
@@ -1031,31 +1302,23 @@ msgstr "Violetti"
msgid "Cyan"
msgstr "Syaani"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
#: src/utilities.py
-msgid "Probably turquoise"
+msgid "Probably teal"
msgstr "Todennäköisesti turkoosi"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
#: src/utilities.py
msgid "Unknown color name"
msgstr "Tuntematon värin nimi"
#: src/utilities.py
-msgid "Replace"
-msgstr "Korvaa"
-
-#: src/utilities.py
-msgid "This file format doesn't support transparent colors."
-msgstr "Tämä tiedostomuoto ei tue läpinäkyviä värejä."
-
-#: src/utilities.py
-msgid "You can save the image as a PNG file, or replace transparency with:"
-msgstr "Voit tallentaa kuvan PNG-tiedostona tai korvata läpinäkyvyyden:"
-
-#: src/utilities.py
-msgid "Replace transparency with:"
-msgstr "Korvaa läpinäkyvyys seuraavilla:"
-
-#: src/utilities.py
msgid "All pictures"
msgstr "Kaikki kuvat"
@@ -1071,28 +1334,49 @@ msgstr "JPEG-kuvat"
msgid "BMP images"
msgstr "BMP-kuvat"
+#. To translators: it appears in tooltips over numerical inputs
#: src/utilities.py
msgid "percents"
msgstr "prosentit"
-#. To translators: it's the angle measure unit
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
#: src/utilities.py
msgid "degrees"
msgstr "astetta"
+#: src/utilities.py
+#, fuzzy, python-format
+msgid "%s isn't an image."
+msgstr "Avaa kuva"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr ""
+
+#. Context: an error message
#: src/window.py
#, python-format
msgid "Failed to load tool: %s"
msgstr "Työkalun lataus epäonnistui: %s"
#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr ""
+
+#: src/window.py
msgid "Modifications will take effect in the next new window."
msgstr "Muutokset tulevat voimaan seuraavassa uudessa ikkunassa."
#: src/window.py src/tools/abstract_tool.py
#: src/optionsbars/classic/optionsbar-classic.ui
#: src/tools/classic_tools/tool_eraser.py
-#: src/tools/classic_tools/tool_highlight.py
msgid "No options"
msgstr "Ei vaihtoehtoja"
@@ -1101,6 +1385,11 @@ msgid "Opened images"
msgstr "Avatut kuvat"
#: src/window.py
+#, fuzzy, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "Virhe sovelluksen käynnistämisessä, ilmoita tästä virheestä."
+
+#: src/window.py
#, python-format
msgid "Loading %s"
msgstr "Ladataan %s"
@@ -1114,54 +1403,38 @@ msgstr "Uusi välilehti"
msgid "Discard changes"
msgstr "Hylkää muutokset"
-#: src/window.py
-#, python-format
-msgid "There are unsaved modifications to %s."
-msgstr "Täällä on %s tallentamattomia muutoksia."
-
+#. Context: %s will be replaced by the name of a file.
#: src/window.py
#, python-format
msgid "Where do you want to open %s?"
msgstr "Missä haluat avata %s?"
-#: src/window.py
-msgid "Open a picture"
-msgstr "Avaa kuva"
-
#. Context for translation:
#. "What do you want to do with *these files*?"
#: src/window.py
msgid "these files"
msgstr "nämä tiedostot"
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
#: src/window.py
#, python-format
msgid "What do you want to do with %s?"
msgstr "Mitä haluat tehdä kohteen %s kanssa?"
-#. else the exception was raised because an actual error occured, or
-#. the user clicked on "cancel"
-#: src/window.py
-#, python-format
-msgid "Failed to save %s"
-msgstr "Kohteen %s tallentaminen epäonnistui"
-
-#: src/window.py
-msgid "Untitled"
-msgstr "Nimetön"
-
-#. Context: the sentence "There are unsaved modifications to %s."
#: src/window.py
-msgid "this picture"
-msgstr "tämä kuva"
+#, fuzzy
+msgid "Image copied to clipboard"
+msgstr "Muokkaa kuvaa leikepöydällä"
#: src/window.py
-msgid "Discard"
-msgstr "Hylkää"
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr ""
#: src/window.py
-msgid "Save picture as…"
-msgstr "Tallenna kuva nimellä…"
+#, fuzzy
+msgid "Reload"
+msgstr "Lataa uudelleen"
#: src/window.py
msgid "Import a picture"
@@ -1171,6 +1444,12 @@ msgstr "Tuo kuva"
msgid "Required tool is not available"
msgstr "Pakollinen työkalu ei ole käytettävissä"
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
+
#: src/tools/utilities_paths.py
msgid "Continue"
msgstr "Jatka"
@@ -1187,13 +1466,15 @@ msgstr "Tämä algoritmi ei ehkä pysty hallitsemaan haluttua aluetta."
msgid "Do you want to abort the operation, or to let the tool struggle ?"
msgstr "Haluatko keskeyttää toiminnan tai antaa työkalun taistella?"
+#. Context: fill a shape with the color of the left click
#: src/optionsbars/classic/optionsbar_color_popover.py
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Main color"
msgstr "Pääväri"
-#. if state_as_string == 'secondary':
+#. Context: fill a shape with the color of the right click
#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Secondary color"
msgstr "Seuraava väri"
@@ -1203,8 +1484,8 @@ msgid "Tool size"
msgstr "Työkalun koko"
#: src/optionsbars/classic/optionsbar-classic.ui
-#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-filters.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
msgid "Preview"
msgstr "Esikatselu"
@@ -1225,160 +1506,175 @@ msgid "Use this editor by default"
msgstr "Käytä tätä editoria oletuksena"
#: src/optionsbars/selection/optionsbar-selection.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "More actions"
msgstr "Lisää toimintoja"
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
msgid "Apply"
msgstr "Käytä"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "Lisää vaihtoehtoja"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr ""
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "Läpinäkyvyys"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Select a filter…"
msgstr "Valitse suodatin…"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Saturation"
msgstr "Kylläisyys"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blur radius"
msgstr "Hämärrä säde"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-msgid "Transparency"
-msgstr "Läpinäkyvyys"
-
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Change saturation"
msgstr "Vaihda kylläisyys"
#. Context: a filter adding like a light veil on the image
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Veil"
msgstr "Peittää"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
msgid "Add transparency"
msgstr "Lisää läpinäkyvyys"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Invert colors"
msgstr "Käännä värit"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blurring"
msgstr "Sumentaminen"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Fast blur"
msgstr "Nopea sumeus"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Slow blur"
msgstr "Hidas sumeus"
#. Context: a filter that censors the image with some kind of tiles
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-msgid "Pixelisation"
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
msgstr "Pikselöitymistä"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Blur direction"
msgstr "Sumennuksen suunta"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Horizontal"
msgstr "Vaaka"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Vertical"
msgstr "Pystysuora"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "No direction"
msgstr "Ei suuntaa"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle (degrees)"
msgstr "Kulma (astetta)"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle"
msgstr "Kulma"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate left"
msgstr "Kierrä vasemmalle"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate right"
msgstr "Kierrä oikealle"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip horizontally"
msgstr "Peilaa vaaka suunnassa"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip vertically"
msgstr "Peilaa pystysuunnassa"
-#: src/optionsbars/canvas/optionsbar-scale.ui
-msgid "More options"
-msgstr "Lisää vaihtoehtoja"
-
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Keep proportions"
msgstr "Pidä mittasuhteet"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Always [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Always"
msgstr "Aina"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "[Keep proportions only] when scaling from corners"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "When scaling from corners"
msgstr "Kulmista skaalattaessa"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Never [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Never"
msgstr "Koskaan"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Horizontal deformation"
msgstr "Vaakasuuntainen muodonmuutos"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Vertical deformation"
msgstr "Pystysuora muodonmuutos"
+#: src/tools/ui/selection.ui
+#, fuzzy
+msgid "Transform"
+msgstr "Läpinäkyvä"
+
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
msgid "Line shape"
msgstr "Viivan muoto"
+#. Context: this is the name of a line shape
#. Default values
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
@@ -1386,80 +1682,175 @@ msgstr "Viivan muoto"
msgid "Round"
msgstr "Pyöreä"
+#. Context: this is the name of a line shape
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Thin"
-msgstr "Ohut"
-
-#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
msgid "Square"
msgstr "Neliö"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "No arrow"
+msgstr "Nuoli"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "Double arrow"
+msgstr "Katkoviivattu nuoli"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-msgid "Use dashes"
+#, fuzzy
+msgid "No dashes"
msgstr "Käytä viivoja"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
-msgid "Arrow"
-msgstr "Nuoli"
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Simple dashes"
+msgstr "Käytä viivoja"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-shape.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Long dashes"
+msgstr "Käytä viivoja"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Short dashes"
+msgstr "Käytä viivoja"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
msgid "Antialiasing"
msgstr "Reunojen"
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Dark text on light background"
+msgstr "Suorakulmion tausta"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr ""
+
#: src/tools/ui/tool-line.ui
msgid "Color gradient"
msgstr "Värin liukuväri"
+#. Context: title for the list of the possible painting algorithms.
#: src/tools/ui/tool-paint.ui
msgid "Behavior"
msgstr "Käyttäytyminen"
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
#: src/tools/ui/tool-paint.ui
msgid "Encircle and fill"
msgstr "Ympäröi ja täytä"
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
#: src/tools/ui/tool-paint.ui
msgid "Erase and replace"
msgstr "Pyyhi ja korvaa"
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
#: src/tools/ui/tool-paint.ui
-msgid "Clipping"
-msgstr "Lehtileike"
+#, fuzzy
+msgid "Entire image"
+msgstr "Avatut kuvat"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rectangle"
-msgstr "Suorakulmio"
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+#, fuzzy
+msgid "Remove color"
+msgstr "Lähdeväri"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rounded rectangle"
-msgstr "Pyöristetty suorakulmio"
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr ""
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Oval"
-msgstr "Soikea"
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "Ympyrä"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Polygon"
-msgstr "Monikulmio"
+#, fuzzy
+msgid "Solid outline"
+msgstr "Tyhjä ääriviiva"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Free shape"
-msgstr "Vapaalla muodolla"
+#, fuzzy
+msgid "Dashed outline"
+msgstr "Katkoviivattu nuoli"
+#. if state_as_string == 'none':
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Circle"
-msgstr "Ympyrä"
+#, fuzzy
+msgid "No outline"
+msgstr "Ääriviiva"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Empty outline"
-msgstr "Tyhjä ääriviiva"
+#, fuzzy
+msgid "Empty shape"
+msgstr "Tyhjä"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Horizontal gradient"
@@ -1473,6 +1864,26 @@ msgstr "Pystysuora liukuväri"
msgid "Radial gradient"
msgstr "Säteinen liukuväri"
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "Suorakulmio"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr "Pyöristetty suorakulmio"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "Soikea"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "Monikulmio"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "Vapaalla muodolla"
+
#: src/tools/ui/tool-shape.ui
msgid "Close shape"
msgstr "Sulje muoto"
@@ -1486,6 +1897,11 @@ msgid "Font"
msgstr "Fontti"
#: src/tools/ui/tool-text.ui
+#, fuzzy
+msgid "Select a font…"
+msgstr "Valitse suodatin…"
+
+#: src/tools/ui/tool-text.ui
msgid "Italic"
msgstr "Kursivoitu"
@@ -1493,34 +1909,31 @@ msgstr "Kursivoitu"
msgid "Bold"
msgstr "Vahvennettu"
+#. Context: the types of background behind the inserted text
#: src/tools/ui/tool-text.ui
msgid "Background"
msgstr "Tausta"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "No background"
msgstr "Ei taustaa"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Shadow"
msgstr "Varjo"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Outline"
msgstr "Ääriviiva"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Rectangle background"
msgstr "Suorakulmion tausta"
-#: src/tools/ui/selection.ui
-msgid "Edit"
-msgstr "Muokkaa"
-
-#: src/tools/ui/selection.ui
-msgid "Flip"
-msgstr "Peilaa"
-
#: src/tools/classic_tools/tool_arc.py
msgid "Curve"
msgstr "Käyrä"
@@ -1534,10 +1947,19 @@ msgid "Dashed arrow"
msgstr "Katkoviivattu nuoli"
#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "Nuoli"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
#: src/tools/classic_tools/tool_pencil.py
msgid "Dashed"
msgstr "Katkoviiva"
+#: src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Highlighter options"
+msgstr "Korostekynä"
+
#: src/tools/classic_tools/tool_line.py
msgid "Line"
msgstr "Viiva"
@@ -1554,6 +1976,11 @@ msgstr "Maalauksen vaihtoehdot"
msgid "Click on an area to replace its color by transparency"
msgstr "Napsauta aluetta korvataksesi sen väri läpinäkyvyydellä"
+#: src/tools/classic_tools/tool_paint.py
+#, fuzzy
+msgid "Click on the canvas to entirely paint it"
+msgstr "Napsauta muodon ensimmäistä kohtaa sulkeaksesi sen."
+
#: src/tools/classic_tools/tool_pencil.py
msgid "Pencil"
msgstr "Lyijykynä"
@@ -1562,15 +1989,21 @@ msgstr "Lyijykynä"
msgid "Pencil options"
msgstr "Lyijykynän asetukset"
+#: src/tools/classic_tools/tool_points.py
+#, fuzzy
+msgid "Points options"
+msgstr "Fontin asetukset"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr ""
+
#: src/tools/classic_tools/tool_shape.py
msgid "Shape"
msgstr "Muoto"
#: src/tools/classic_tools/tool_shape.py
-msgid "Empty"
-msgstr "Tyhjä"
-
-#: src/tools/classic_tools/tool_shape.py
msgid "Shape options"
msgstr "Muodon asetukset"
@@ -1582,6 +2015,7 @@ msgstr "Napsauta muodon ensimmäistä kohtaa sulkeaksesi sen."
msgid "Text"
msgstr "Teksti"
+#. XXX use "text options" instead
#: src/tools/classic_tools/tool_text.py
msgid "Font options"
msgstr "Fontin asetukset"
@@ -1598,37 +2032,66 @@ msgstr "Valitse alue tai napsauta hiiren kakkospainikkeella alustaa"
msgid "Rectangle selection"
msgstr "Suorakulmion valinta"
-#: src/tools/canvas_tools/abstract_canvas_tool.py
+#: src/tools/transform_tools/abstract_transform_tool.py
msgid "Error: invalid values"
msgstr "Virhe: virheelliset arvot"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the selection"
msgstr "Rajaa valintaan"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the canvas"
msgstr "Alustan rajaaminen"
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Click on the image to preview the selected filter"
msgstr "Napsauttamalla kuvaa voit esikatsella valittua suodatinta"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the selection"
msgstr "Valinnan kääntäminen"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the canvas"
msgstr "Alustan kääntäminen"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the selection"
msgstr "Valinnan skaalaaminen"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the canvas"
msgstr "Alustan skaalaaminen"
-#~ msgid "Classic"
-#~ msgstr "Klassikko"
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr "Vinossa"
+
+#~ msgid "Flip"
+#~ msgstr "Peilaa"
+
+#, fuzzy
+#~ msgid "Add semi-transparency"
+#~ msgstr "Lisää läpinäkyvyys"
+
+#~ msgid "Thin"
+#~ msgstr "Ohut"
+
+#~ msgid "Clipping"
+#~ msgstr "Lehtileike"
+
+#~ msgid "Edit"
+#~ msgstr "Muokkaa"
+
+#~ msgid "Open a file"
+#~ msgstr "Avaa tiedosto"
+
+#~ msgid "Save as"
+#~ msgstr "Tallenna nimellä"
+
+#~ msgid "Keyboard"
+#~ msgstr "Näppäimistö"
diff --git a/po/fr.po b/po/fr.po
index 49c4b353..9b81026c 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.maoschanz.drawing 0.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-15 19:07+0200\n"
-"PO-Revision-Date: 2020-02-24 23:17+0100\n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
+"PO-Revision-Date: 2020-10-31 03:57+0100\n"
"Last-Translator: Romain F. T. <rrroschan@gmail.com>\n"
"Language-Team: French <aaaa@bbbb.com>\n"
"Language: fr\n"
@@ -15,7 +15,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-"X-Generator: Gtranslator 3.34.0\n"
+"X-Generator: Gtranslator 3.38.0\n"
#: data/com.github.maoschanz.drawing.desktop.in
#: data/com.github.maoschanz.drawing.appdata.xml.in src/deco_manager.py
@@ -78,6 +78,94 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+"La version 0.6.4 comporte plusieurs correctifs de bugs mineurs, et diverses "
+"nouvelles traductions."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+"La valeur de l'option \"utiliser l'anti-crénelage\" est maintenant restaurée "
+"au démarrage de l'application."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+"La version 0.6.3 améliore l'option pour dessiner des flèches : plusieurs "
+"problèmes ont été corrigés, et les flèches à double extrémité sont "
+"maintenant possibles."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr "Il y a également plus d'options pour dessiner en pointillés."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+"Cette version est enfin compatible avec les distributions plus anciennes "
+"(versions des bibliothèques GNOME plus anciennes que 3.30)."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+"La version 0.6.2 comporte plusieurs correctifs de bugs mineurs, et diverses "
+"nouvelles traductions."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+"L'outil « surligneur » fournit maintenant des options pour surligner du "
+"texte clair sur fond sombre."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+"Quand l'image a été enregistrée sans transparence, l'application suggère "
+"maintenant de recharger l'image depuis le disque. Aussi, la fonctionnalité "
+"\"recharger depuis le disque\" est maintenant accessible avec tous les "
+"environnements."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+"Une action pour copier l'image entière dans le presse-papier a été ajoutée."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+"Il est maintenant possible d'enlever la transparence lors de "
+"l'enregistrement pour les fichiers PNG aussi. Et il y a davantage de choix "
+"de couleurs pour replacer les pixels transparents."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+"Un outil additionnel, nommé \"Points\", a été ajouté. Il peut aider à "
+"légender des images."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr "Des bugs mineurs de l'outil 'pivoter' ont été corrigés."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"Version 0.6 is a major update, with various important changes. The app is "
"more robust and has more tools:"
msgstr ""
@@ -108,8 +196,17 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+"L'outil texte peut maintenant écrire en utilisant la plupart des polices du "
+"système, permettant ainsi l'utilisation de caractères plus complexes (tels "
+"que les caractères asiatiques)."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
-"with several types of blur, color inversion, pixelisation, saturation and "
+"with several types of blur, color inversion, pixelization, saturation and "
"transparency."
msgstr ""
"L'outil 'saturation' a été remplacé par 'filtres', un outil plus puissant "
@@ -129,24 +226,37 @@ msgstr ""
"(ou dézoomer) sur l'image, en utilisant l'aperçu miniature, le touchpad ou "
"la molette de souris."
-#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid ""
-"Version 0.4.8 features several minor bug fixes, and various new translations."
-msgstr ""
-"La version 0.4.8 comporte plusieurs correctifs de bugs mineurs, et diverses "
-"nouvelles traductions."
-
#. This is just my name, do not translate it.
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid "Romain F. T."
msgstr "Romain F. T."
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr "La fenêtre et son menu principal"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr "La sélection et les actions qui y sont associées"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr "Zoomer sur divers formes"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr "Le menu \"nouvelle image\" ouvert"
+
#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
#: src/preferences.py
msgid "Preferences"
msgstr "Préférences"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
msgid "Report a bug"
msgstr "Reporter un bug"
@@ -185,29 +295,32 @@ msgstr "Nouvelle image avec taille personnalisée"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "New Image From Selection"
-msgstr "À partir de la sélection"
+msgstr "Nouvelle image à partir de la sélection"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "New Image From Clipboard"
-msgstr "À partir du presse-papier"
+msgstr "Nouvelle image à partir du presse-papier"
#: src/ui/app-menus.ui src/ui/win-menus.ui
msgid "Reload file"
msgstr "Recharger le fichier"
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/properties.py
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
msgid "Image properties"
msgstr "Propriétés de l'image"
#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
-#: src/ui/win-menus.ui src/window.py
+#: src/ui/win-menus.ui src/saving_manager.py
msgid "Save"
msgstr "Enregistrer"
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Save without transparency"
+msgstr "Enregistrer sans transparence"
+
#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
-#: src/utilities.py
+#: src/saving_manager.py
msgid "Save as…"
msgstr "Enregistrer sous…"
@@ -216,7 +329,13 @@ msgstr "Enregistrer sous…"
msgid "Export as…"
msgstr "Exporter sous…"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr "Copier vers le presse-papier"
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
msgid "Print"
msgstr "Imprimer"
@@ -301,20 +420,25 @@ msgid "Optimal Zoom"
msgstr "Zoom optimal"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom Out"
msgstr "Diminuer le zoom"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Original Zoom"
msgstr "Zoom original"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom In"
msgstr "Augmenter le zoom"
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
#: src/ui/app-menus.ui
msgid "Position"
msgstr "Position"
@@ -348,12 +472,6 @@ msgid "Refresh"
msgstr "Actualiser"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
-#: src/preferences.py
-msgid "Show tools names"
-msgstr "Afficher le nom des outils"
-
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/shortcuts.ui
-#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
msgid "Fullscreen"
msgstr "Plein écran"
@@ -386,74 +504,79 @@ msgstr "Échanger les couleurs"
msgid "Color application mode"
msgstr "Mode d'application de la couleur"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Normal"
msgstr "Normal"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Other modes"
-msgstr ""
+msgstr "Autres modes"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Raw source color"
-msgstr "Couleur source"
+msgstr "Couleur source brute"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Highlight"
msgstr "Surligner"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Difference"
msgstr "Différence"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
-msgid "Photo manipulation"
-msgstr ""
+msgid "Photo-oriented modes"
+msgstr "Modes orientés photo"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Hue only"
-msgstr "Barre de menus"
+msgstr "Teinte seulement"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Saturation only"
-msgstr "Saturation"
+msgstr "Saturation seulement"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Hue and saturation"
-msgstr "Changer la saturation"
+msgstr "Teinte et saturation"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Luminosity only"
-msgstr ""
+msgstr "Luminosité seulement"
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Don't use the colors but…"
msgstr "Ne pas utiliser les couleurs mais…"
#. To translators: this is a verb
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Blur"
msgstr "Flouter"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Erase"
msgstr "Effacer"
-#: src/ui/app-menus.ui src/window.py
+#: src/ui/app-menus.ui
msgid "_Tools"
msgstr "Ou_tils"
@@ -461,30 +584,53 @@ msgstr "Ou_tils"
msgid "Previous tool"
msgstr "Outil précédent"
+#: src/ui/app-menus.ui
+msgid "Active tool"
+msgstr "Outil actif"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "Afficher le nom des outils"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr "Plus large"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Smaller width"
+msgstr "Moins large"
+
#: src/ui/app-menus.ui src/window.py
msgid "_Options"
msgstr "_Options"
#: src/ui/app-menus.ui
msgid "_Help"
-msgstr "_Aide"
+msgstr "A_ide"
+#. Context: open the index of all help pages
#: src/ui/app-menus.ui
msgid "Index"
msgstr "Sommaire"
+#. Context: open the help page about general use of the app
#: src/ui/app-menus.ui
msgid "Basic help"
msgstr "Aide basique"
+#. Context: open the help page about classic tools
#: src/ui/app-menus.ui
msgid "Help about tools"
msgstr "Aide sur les outils"
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
#: src/ui/app-menus.ui
msgid "Canvas and selection"
msgstr "Canevas et sélection"
+#. Context: open the help page about the selection
#: src/ui/app-menus.ui
msgid "Help about selection"
msgstr "Aide sur la sélection"
@@ -498,21 +644,25 @@ msgstr "À propos de Dessin"
msgid "Open"
msgstr "Ouvrir"
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr "Partager l'image"
+
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Width"
msgstr "Largeur"
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Height"
msgstr "Hauteur"
#: src/ui/new-image-dialog.ui
-msgid "Background color"
-msgstr "Couleur d'arrière-plan"
+msgid "Color"
+msgstr "Couleur"
#: src/ui/new-image-dialog.ui
msgid "Use these settings by default"
@@ -522,6 +672,8 @@ msgstr "Utiliser ces réglages par défaut"
msgid "100%"
msgstr "100%"
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
#: src/ui/properties.ui src/utilities.py
msgid "pixels"
msgstr "pixels"
@@ -538,7 +690,7 @@ msgstr "pouces"
msgid "Images"
msgstr "Images"
-#: src/ui/preferences.ui src/ui/shortcuts.ui
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "Tools"
msgstr "Outils"
@@ -557,30 +709,22 @@ msgid "Unselect"
msgstr "Déselectionner"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Crop"
msgstr "Recadrer"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scale"
msgstr "Redimensionner"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotate"
msgstr "Pivoter"
-#. In this context, "Skew" is the name of the tool changing rectangles
-#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
-#. "Stretch/Skew" dialog.
-#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_skew.py
-msgid "Skew"
-msgstr "Incliner"
-
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Filters"
msgstr "Filtres"
@@ -590,8 +734,8 @@ msgid "Open As New Image"
msgstr "Ouvrir comme nouvelle image"
#: src/ui/shortcuts.ui
-msgid "Keyboard"
-msgstr "Clavier"
+msgid "Keyboard Shortcuts"
+msgstr "Raccourcis clavier"
#: src/ui/shortcuts.ui
msgid "General"
@@ -602,50 +746,40 @@ msgid "Main menu"
msgstr "Menu principal"
#: src/ui/shortcuts.ui
-msgid "Editing"
-msgstr "Édition"
-
-#: src/ui/shortcuts.ui
msgid "Image"
msgstr "Image"
-#: src/ui/shortcuts.ui
-msgid "Open a file"
-msgstr "Ouvrir un fichier"
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "Ouvrir une image"
#: src/ui/shortcuts.ui
msgid "Reload image from disk"
msgstr "Recharger l'image depuis le disque"
-#: src/ui/shortcuts.ui
-msgid "Save as"
-msgstr "Enregistrer sous"
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "Enregistrer l'image sous…"
#: src/ui/shortcuts.ui
msgid "Close the active image"
msgstr "Fermer l'image active"
#: src/ui/shortcuts.ui
-msgid "Options menu"
-msgstr "Menu des options"
+msgid "Open the tool options menu"
+msgstr "Ouvrir le menu des options de l'outil"
#: src/ui/shortcuts.ui
msgid "Back to previous tool"
msgstr "Revenir à l'outil précédent"
#: src/ui/shortcuts.ui
-msgid "Colors"
-msgstr "Couleurs"
-
-#. Label displayed in the keyboard shortcuts dialog
-#: src/ui/shortcuts.ui
-msgid "Edit the main color (left click)"
-msgstr "Modifier la couleur principale (clic gauche)"
+msgid "Apply a transformation"
+msgstr "Appliquer une transformation"
-#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Edit the secondary color (right click)"
-msgstr "Modifier la couleur secondaire (clic droit)"
+msgid "History"
+msgstr "Historique"
#: src/ui/shortcuts.ui
msgid "Selection"
@@ -662,17 +796,25 @@ msgid "Import a file as the selection"
msgstr "Importer un fichier en tant que sélection"
#: src/ui/shortcuts.ui
-msgid "Tabs"
-msgstr ""
+msgid "Colors"
+msgstr "Couleurs"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Enter fullscreen mode"
-msgstr "Entrer en mode plein écran"
+msgid "Edit the main color (left click)"
+msgstr "Modifier la couleur principale (clic gauche)"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Exit fullscreen mode"
-msgstr "Quitter le mode plein écran"
+msgid "Edit the secondary color (right click)"
+msgstr "Modifier la couleur secondaire (clic droit)"
+
+#: src/ui/shortcuts.ui
+msgid "Tabs"
+msgstr "Onglets"
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
#: src/ui/shortcuts.ui
msgid "Navigation"
msgstr "Navigation"
@@ -681,10 +823,26 @@ msgstr "Navigation"
msgid "Toggle the preview"
msgstr "Afficher l'aperçu"
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr "Entrer en mode plein écran"
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr "Quitter le mode plein écran"
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr "Gestuelles tactiles"
+
#: src/ui/win-menus.ui
msgid "Troubleshoot selection"
msgstr "Débuggage de la sélection"
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr "Autres outils"
+
#: src/ui/window.ui
msgid "Error starting the application, please report this bug."
msgstr "Erreur au démarrage de l'application, veuillez reporter ce problème."
@@ -699,6 +857,12 @@ msgstr "Annuler %s"
msgid "Redo %s"
msgstr "Rétablir %s"
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr "Nouveau pixbuf vide, aucun changement appliqué à %s"
+
#: src/image.py
msgid "Can't reload a never-saved file from the disk."
msgstr "Impossible de recharger depuis le disque un fichier jamais enregistré."
@@ -707,15 +871,15 @@ msgstr "Impossible de recharger depuis le disque un fichier jamais enregistré."
msgid "Unsaved file"
msgstr "Fichier non enregistré"
-#: src/new_image_dialog.py src/utilities.py src/window.py
-#: src/tools/utilities_paths.py src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-crop.ui src/tools/ui/tool-filters.ui
-#: src/tools/ui/tool-rotate.ui src/tools/ui/tool-scale.ui
-#: src/tools/ui/tool-skew.ui
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
msgid "Cancel"
msgstr "Annuler"
@@ -724,18 +888,22 @@ msgstr "Annuler"
msgid "Create"
msgstr "Créer"
+#. Description of a command line option
#: src/main.py
msgid "Show the app version"
msgstr "Afficher la version de l'application"
+#. Description of a command line option
#: src/main.py
msgid "Open a new window"
msgstr "Ouvrir une nouvelle fenêtre"
+#. Description of a command line option
#: src/main.py
msgid "Open a new tab"
msgstr "Ouvrir un nouvel onglet"
+#. Description of a command line option
#: src/main.py
msgid "Edit the clipboard content"
msgstr "Éditer le contenu du presse-papier"
@@ -748,12 +916,14 @@ msgstr "Cette version n'est pas stable !"
msgid "Report bugs or ideas"
msgstr "Rapporter des bugs ou des idées"
-#. To tranlators: "translate" this by your name, it will be displayed
-#. in the "about" dialog
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
#: src/main.py
msgid "translator-credits"
msgstr "Romain F. T."
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
#: src/main.py
msgid "GNOME's \"Art Libre\" icon set authors"
msgstr "Les auteurs des icônes \"Art Libre\" de GNOME"
@@ -767,17 +937,23 @@ msgid "Official webpage"
msgstr "Page web officielle"
#: src/main.py
+msgid "Error opening this file."
+msgstr "Erreur à l'ouverture de ce fichier."
+
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
#, python-format
-msgid "Error opening this file. Did you mean %s ?"
-msgstr "Erreur à l'ouverture de ce fichier. Vouliez-vous faire %s ?"
+msgid "Did you mean %s ?"
+msgstr "Vouliez vous dire %s ?"
-#. This displays the zoom level, %s will be replaced with a number, while
-#. %% is just the symbol '%'
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
#: src/minimap.py
#, python-format
msgid "%s%%"
msgstr "%s%%"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "New images"
msgstr "Nouvelles images"
@@ -790,10 +966,16 @@ msgstr "Largeur par défaut"
msgid "Default height"
msgstr "Hauteur par défaut"
-#: src/preferences.py
-msgid "Default background"
-msgstr "Arrière-plan par défaut"
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Default color"
+msgstr "Couleur par défaut"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Images saving"
msgstr "Enregistrement des images"
@@ -810,19 +992,23 @@ msgstr ""
"Si vous enregistrez vos images dans ces formats, par quoi voulez-vous "
"replacer les pixels transparents ?"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "White"
msgstr "Blanc"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "Black"
msgstr "Noir"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
msgid "Checkboard"
msgstr "Damier"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
msgid "Nothing"
msgstr "Rien"
@@ -835,15 +1021,15 @@ msgid "You can zoom with Ctrl+scrolling, or only scrolling."
msgstr "Vous pouvez zoomer avec Ctrl+molette, ou juste avec la molette."
#: src/preferences.py
-msgid "Using keyboard shortcuts or touch gestures is possible too."
-msgstr ""
-"Utiliser des raccourcis clavier ou des gestuelles tactiles est également "
-"possible."
+msgid "See the user help manual for explanations."
+msgstr "Consultez le manuel d'aide pour plus d'explications."
#: src/preferences.py
msgid "Use 'Ctrl' to zoom"
msgstr "Utiliser 'Ctrl' pour zoomer"
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
#: src/preferences.py
msgid "Appearance"
msgstr "Apparence"
@@ -852,6 +1038,7 @@ msgstr "Apparence"
msgid "Use big icons"
msgstr "Utiliser de grosses icônes"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Additional tools"
msgstr "Outils additionnels"
@@ -864,31 +1051,51 @@ msgstr ""
"Ces outils ne sont pas aussi fiables et utiles qu'ils le devraient, ils ne "
"sont donc pas tous activés par défaut."
-#. In the meaning "a rubber eraser"
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
#: src/preferences.py src/tools/classic_tools/tool_eraser.py
msgid "Eraser"
msgstr "Gomme"
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
#: src/preferences.py src/tools/classic_tools/tool_highlight.py
msgid "Highlighter"
msgstr "Surligneur"
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr "Points"
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
#: src/preferences.py src/tools/selection_tools/select_free.py
msgid "Free selection"
msgstr "Sélection libre"
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
#: src/preferences.py src/tools/selection_tools/select_color.py
msgid "Color selection"
msgstr "Sélection par couleur"
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
#: src/preferences.py src/tools/classic_tools/tool_picker.py
msgid "Color Picker"
msgstr "Sélecteur de couleur"
+#. Context: the name of a tool to fill an area of one color with an other
#: src/preferences.py src/tools/classic_tools/tool_paint.py
msgid "Paint"
msgstr "Peinture"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Advanced options"
msgstr "Options avancées"
@@ -897,11 +1104,18 @@ msgstr "Options avancées"
msgid "Preview size"
msgstr "Taille de l'aperçu"
+#. This label will not be displayed in the UI of stable versions
#: src/preferences.py
msgid "Development features"
msgstr "Fonctionnalités de test"
#: src/preferences.py
+msgid "Background color"
+msgstr "Couleur d'arrière-plan"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
msgid "Layout"
msgstr "Organisation"
@@ -909,6 +1123,7 @@ msgstr "Organisation"
msgid "The recommended value is \"Automatic\"."
msgstr "La valeur recommandée est \"Automatique\"."
+#. It has to match what's written in the previous string.
#: src/preferences.py
msgid "Automatic"
msgstr "Automatique"
@@ -928,7 +1143,8 @@ msgid "Legacy"
msgstr "Traditionnelle"
#. "Legacy" is about the window layout, it means menubar+toolbar, you
-#. can translate it like if it was "Traditional"
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Legacy (symbolic icons)"
msgstr "Traditionnelle (icônes symb.)"
@@ -941,6 +1157,7 @@ msgstr "Barre de menus"
msgid "Toolbar only"
msgstr "Barre de boutons"
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Toolbar only (symbolic icons)"
msgstr "Boutons (icônes symboliques)"
@@ -960,10 +1177,12 @@ msgstr "%s cm"
msgid "%s in"
msgstr "%s in"
+#. Context: the path of the edited file
#: src/properties.py
msgid "Path"
msgstr "Chemin"
+#. Context: the file format of the edited file
#: src/properties.py
msgid "Format"
msgstr "Format"
@@ -972,10 +1191,72 @@ msgstr "Format"
msgid "Colorspace"
msgstr "Encodage des couleurs"
+#. Context: an invalid colorspace format
#: src/properties.py
msgid "Invalid format"
msgstr "Format invalide"
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "Erreur en enregistrant %s"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "Sans titre"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "cette image"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "Abandonner"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "Il y a des modifications non-enregistrées à %s."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+"Une partie de l'image est sélectionnée, et les pixels sous la sélection sont "
+"vides."
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr "Les modifications de l'outil actuel n'ont pas été appliquées."
+
+#: src/saving_manager.py
+msgid "Do you want to save anyway?"
+msgstr "Souhaitez-vous enregistrer malgré tout ?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr "Remplacer"
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "Ce format de fichier ne supporte pas les couleurs transparentes."
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr ""
+"Vous pouvez enregistrer l'image en tant que fichier PNG, ou bien y remplacer "
+"la transparence par :"
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "Remplacer la transparence par :"
+
#: src/utilities.py
msgid "Transparent"
msgstr "Transparent"
@@ -997,6 +1278,9 @@ msgstr "Orange"
msgid "Brown"
msgstr "Marron"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
#: src/utilities.py
msgid "Probably brown"
msgstr "Peut-être marron"
@@ -1029,33 +1313,23 @@ msgstr "Violet"
msgid "Cyan"
msgstr "Cyan"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
#: src/utilities.py
-msgid "Probably turquoise"
+msgid "Probably teal"
msgstr "Peut-être turquoise"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
#: src/utilities.py
msgid "Unknown color name"
msgstr "Nom de couleur inconnu"
#: src/utilities.py
-msgid "Replace"
-msgstr "Remplacer"
-
-#: src/utilities.py
-msgid "This file format doesn't support transparent colors."
-msgstr "Ce format de fichier ne supporte pas les couleurs transparentes."
-
-#: src/utilities.py
-msgid "You can save the image as a PNG file, or replace transparency with:"
-msgstr ""
-"Vous pouvez enregistrer l'image en tant que fichier PNG, ou bien y remplacer "
-"la transparence par :"
-
-#: src/utilities.py
-msgid "Replace transparency with:"
-msgstr "Remplacer la transparence par :"
-
-#: src/utilities.py
msgid "All pictures"
msgstr "Toutes les images"
@@ -1071,28 +1345,50 @@ msgstr "Images JPEG"
msgid "BMP images"
msgstr "Images BMP"
+#. To translators: it appears in tooltips over numerical inputs
#: src/utilities.py
msgid "percents"
msgstr "pourcents"
-#. To translators: it's the angle measure unit
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
#: src/utilities.py
msgid "degrees"
msgstr "degrés"
+#: src/utilities.py
+#, python-format
+msgid "%s isn't an image."
+msgstr "%s n'est pas une image"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+"Désolé, les images WEBP ne peuvent pas être chargées par cette application."
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr "Malgré son nom, %s est une image WEBP."
+
+#. Context: an error message
#: src/window.py
#, python-format
msgid "Failed to load tool: %s"
msgstr "Erreur en chargeant l'outil : %s"
#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr "Le presse-papier ne contient pas d'image."
+
+#: src/window.py
msgid "Modifications will take effect in the next new window."
msgstr "Les modifications prendront effet pour la prochaine nouvelle fenêtre."
#: src/window.py src/tools/abstract_tool.py
#: src/optionsbars/classic/optionsbar-classic.ui
#: src/tools/classic_tools/tool_eraser.py
-#: src/tools/classic_tools/tool_highlight.py
msgid "No options"
msgstr "Pas d'options"
@@ -1102,6 +1398,11 @@ msgstr "Images ouvertes"
#: src/window.py
#, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "Erreur : panneau invalide pour '%s', veuillez reporter ce problème."
+
+#: src/window.py
+#, python-format
msgid "Loading %s"
msgstr "Chargement de %s"
@@ -1114,54 +1415,36 @@ msgstr "Nouvel onglet"
msgid "Discard changes"
msgstr "Abandonner les modifications"
-#: src/window.py
-#, python-format
-msgid "There are unsaved modifications to %s."
-msgstr "Il y a des modifications non-enregistrées à %s."
-
+#. Context: %s will be replaced by the name of a file.
#: src/window.py
#, python-format
msgid "Where do you want to open %s?"
msgstr "Où souhaitez-vous ouvrir %s ?"
-#: src/window.py
-msgid "Open a picture"
-msgstr "Ouvrir une image"
-
#. Context for translation:
#. "What do you want to do with *these files*?"
#: src/window.py
msgid "these files"
msgstr "ces fichiers"
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
#: src/window.py
#, python-format
msgid "What do you want to do with %s?"
msgstr "Que souhaitez-vous faire avec %s ?"
-#. else the exception was raised because an actual error occured, or
-#. the user clicked on "cancel"
-#: src/window.py
-#, python-format
-msgid "Failed to save %s"
-msgstr "Erreur en enregistrant %s"
-
#: src/window.py
-msgid "Untitled"
-msgstr "Sans titre"
-
-#. Context: the sentence "There are unsaved modifications to %s."
-#: src/window.py
-msgid "this picture"
-msgstr "cette image"
+msgid "Image copied to clipboard"
+msgstr "Image copiée dans le presse-papier"
#: src/window.py
-msgid "Discard"
-msgstr "Abandonner"
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr "L'image a changé sur le disque, voulez-vous la recharger ?"
#: src/window.py
-msgid "Save picture as…"
-msgstr "Enregistrer l'image sous…"
+msgid "Reload"
+msgstr "Recharger"
#: src/window.py
msgid "Import a picture"
@@ -1171,6 +1454,13 @@ msgstr "Importer une image"
msgid "Required tool is not available"
msgstr "L'outil requis n'est pas disponible"
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
+"Opération impossible : mauvais id d'outil ('{0}' attendu, '{1}' obtenu)"
+
#: src/tools/utilities_paths.py
msgid "Continue"
msgstr "Continuer"
@@ -1188,13 +1478,15 @@ msgid "Do you want to abort the operation, or to let the tool struggle ?"
msgstr ""
"Souhaitez-vous abandonner cette opération, ou laisser l'outil galérer ?"
+#. Context: fill a shape with the color of the left click
#: src/optionsbars/classic/optionsbar_color_popover.py
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Main color"
msgstr "Couleur principale"
-#. if state_as_string == 'secondary':
+#. Context: fill a shape with the color of the right click
#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Secondary color"
msgstr "Couleur secondaire"
@@ -1204,8 +1496,8 @@ msgid "Tool size"
msgstr "Taille de l'outil"
#: src/optionsbars/classic/optionsbar-classic.ui
-#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-filters.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
msgid "Preview"
msgstr "Aperçu"
@@ -1226,160 +1518,174 @@ msgid "Use this editor by default"
msgstr "Utiliser cet éditeur par défaut"
#: src/optionsbars/selection/optionsbar-selection.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "More actions"
msgstr "Plus d'options"
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
msgid "Apply"
msgstr "Appliquer"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "Plus d'options"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr "Étendre avec…"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "Transparence"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Select a filter…"
msgstr "Sélectionner un filtre…"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Saturation"
msgstr "Saturation"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blur radius"
msgstr "Rayon de floutage"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-msgid "Transparency"
-msgstr "Transparence"
-
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Change saturation"
msgstr "Changer la saturation"
#. Context: a filter adding like a light veil on the image
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Veil"
msgstr "Voile"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
msgid "Add transparency"
msgstr "Ajouter de la transparence"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Invert colors"
msgstr "Inverser les couleurs"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blurring"
msgstr "Floutage"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Fast blur"
msgstr "Flou rapide"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Slow blur"
msgstr "Flou lent"
#. Context: a filter that censors the image with some kind of tiles
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-msgid "Pixelisation"
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
msgstr "Pixelisation"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Blur direction"
msgstr "Direction du flou"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Horizontal"
msgstr "Horizontale"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Vertical"
msgstr "Verticale"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "No direction"
msgstr "Pas de direction"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle (degrees)"
msgstr "Angle (degrés)"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle"
msgstr "Angle"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate left"
msgstr "Pivoter à gauche"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate right"
msgstr "Pivoter à droite"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip horizontally"
msgstr "Retourner horizontalement"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip vertically"
msgstr "Retourner verticalement"
-#: src/optionsbars/canvas/optionsbar-scale.ui
-msgid "More options"
-msgstr "Plus d'options"
-
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Keep proportions"
msgstr "Conserver les proportions"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Always [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Always"
msgstr "Toujours"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "[Keep proportions only] when scaling from corners"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "When scaling from corners"
msgstr "Seulement avec les coins"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Never [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Never"
msgstr "Jamais"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Horizontal deformation"
msgstr "Déformation horizontale"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Vertical deformation"
msgstr "Déformation verticale"
+#: src/tools/ui/selection.ui
+msgid "Transform"
+msgstr "Transformer"
+
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
msgid "Line shape"
msgstr "Forme de mine"
+#. Context: this is the name of a line shape
#. Default values
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
@@ -1387,80 +1693,162 @@ msgstr "Forme de mine"
msgid "Round"
msgstr "Ronde"
+#. Context: this is the name of a line shape
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Thin"
-msgstr "Fine"
-
-#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
msgid "Square"
msgstr "Carrée"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "No arrow"
+msgstr "Pas de flèche"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr "Flèche simple"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Double arrow"
+msgstr "Flèche double"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-msgid "Use dashes"
-msgstr "Utiliser des pointillés"
+msgid "No dashes"
+msgstr "Pas de pointillés"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
-msgid "Arrow"
-msgstr "Flèche"
+#: src/tools/ui/tool-pencil.ui
+msgid "Simple dashes"
+msgstr "Pointillés simples"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-shape.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Long dashes"
+msgstr "Pointillés longs"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Short dashes"
+msgstr "Pointillés courts"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr "Pointillés alternés"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
msgid "Antialiasing"
msgstr "Anti-crénelage"
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Dark text on light background"
+msgstr "Texte sombre sur arrière-plan clair"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr "Texte clair sur arrière-plan sombre"
+
#: src/tools/ui/tool-line.ui
msgid "Color gradient"
msgstr "Dégradé"
+#. Context: title for the list of the possible painting algorithms.
#: src/tools/ui/tool-paint.ui
msgid "Behavior"
msgstr "Comportement"
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
#: src/tools/ui/tool-paint.ui
msgid "Encircle and fill"
msgstr "Entourer et remplir"
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
#: src/tools/ui/tool-paint.ui
msgid "Erase and replace"
msgstr "Effacer et remplacer"
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
#: src/tools/ui/tool-paint.ui
-msgid "Clipping"
-msgstr "Détourage"
+msgid "Entire image"
+msgstr "Image entière"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rectangle"
-msgstr "Rectangle"
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+msgid "Remove color"
+msgstr "Retirer la couleur"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rounded rectangle"
-msgstr "Rectangle arrondi"
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr "Type de points"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Oval"
-msgstr "Ovale"
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "Cercle"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr "Croix"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr "Croix en forme de X"
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr "Inclure un numéro"
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr "Prochain numéro"
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr "Réinitialiser le numéro"
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr "Diminuer le numéro"
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr "Augmenter le numéro"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Polygon"
-msgstr "Polygone"
+msgid "Solid outline"
+msgstr "Contour continu"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Free shape"
-msgstr "Forme libre"
+msgid "Dashed outline"
+msgstr "Contour en pointillés"
+#. if state_as_string == 'none':
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Circle"
-msgstr "Cercle"
+msgid "No outline"
+msgstr "Pas de contour"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr "Remplissage"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Empty outline"
-msgstr "Contour vide"
+msgid "Empty shape"
+msgstr "Forme vide"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Horizontal gradient"
@@ -1474,6 +1862,26 @@ msgstr "Dégradé vertical"
msgid "Radial gradient"
msgstr "Dégradé radial"
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "Rectangle"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr "Rectangle arrondi"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "Ovale"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "Polygone"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "Forme libre"
+
#: src/tools/ui/tool-shape.ui
msgid "Close shape"
msgstr "Fermer la forme"
@@ -1487,6 +1895,10 @@ msgid "Font"
msgstr "Police"
#: src/tools/ui/tool-text.ui
+msgid "Select a font…"
+msgstr "Sélectionner une police…"
+
+#: src/tools/ui/tool-text.ui
msgid "Italic"
msgstr "Italique"
@@ -1494,34 +1906,31 @@ msgstr "Italique"
msgid "Bold"
msgstr "Gras"
+#. Context: the types of background behind the inserted text
#: src/tools/ui/tool-text.ui
msgid "Background"
msgstr "Arrière-plan"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "No background"
msgstr "Aucun arrière-plan"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Shadow"
msgstr "Ombre"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Outline"
msgstr "Contour"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Rectangle background"
msgstr "Arrière-plan rectangulaire"
-#: src/tools/ui/selection.ui
-msgid "Edit"
-msgstr "Éditer"
-
-#: src/tools/ui/selection.ui
-msgid "Flip"
-msgstr "Retourner"
-
#: src/tools/classic_tools/tool_arc.py
msgid "Curve"
msgstr "Courbe"
@@ -1535,10 +1944,18 @@ msgid "Dashed arrow"
msgstr "Flèche en pointillés"
#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "Flèche"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
#: src/tools/classic_tools/tool_pencil.py
msgid "Dashed"
msgstr "En pointillés"
+#: src/tools/classic_tools/tool_highlight.py
+msgid "Highlighter options"
+msgstr "Options du surligneur"
+
#: src/tools/classic_tools/tool_line.py
msgid "Line"
msgstr "Trait"
@@ -1555,6 +1972,10 @@ msgstr "Options de peinture"
msgid "Click on an area to replace its color by transparency"
msgstr "Cliquez sur une zone pour remplacer sa couleur par de la transparence"
+#: src/tools/classic_tools/tool_paint.py
+msgid "Click on the canvas to entirely paint it"
+msgstr "Cliquez sur le canevas pour le peindre entièrement"
+
#: src/tools/classic_tools/tool_pencil.py
msgid "Pencil"
msgstr "Crayon"
@@ -1563,15 +1984,20 @@ msgstr "Crayon"
msgid "Pencil options"
msgstr "Options du crayon"
+#: src/tools/classic_tools/tool_points.py
+msgid "Points options"
+msgstr "Options des points"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr "Prochain numéro : %s"
+
#: src/tools/classic_tools/tool_shape.py
msgid "Shape"
msgstr "Forme"
#: src/tools/classic_tools/tool_shape.py
-msgid "Empty"
-msgstr "Vide"
-
-#: src/tools/classic_tools/tool_shape.py
msgid "Shape options"
msgstr "Options de la forme"
@@ -1583,6 +2009,7 @@ msgstr "Cliquez sur le 1er point de la forme pour la refermer."
msgid "Text"
msgstr "Texte"
+#. XXX use "text options" instead
#: src/tools/classic_tools/tool_text.py
msgid "Font options"
msgstr "Options du texte"
@@ -1599,34 +2026,42 @@ msgstr "Sélectionner une zone ou faites un clic-droit sur le canevas"
msgid "Rectangle selection"
msgstr "Selection rectangulaire"
-#: src/tools/canvas_tools/abstract_canvas_tool.py
+#: src/tools/transform_tools/abstract_transform_tool.py
msgid "Error: invalid values"
msgstr "Erreur : valeurs invalides"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the selection"
msgstr "Recadrer la sélection"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the canvas"
msgstr "Recadrer le canevas"
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Click on the image to preview the selected filter"
msgstr "Cliquer sur l'image pour prévisualiser le filtre choisi"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the selection"
msgstr "Pivoter la sélection"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the canvas"
msgstr "Pivoter le canevas"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the selection"
msgstr "Redimensionner la sélection"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the canvas"
msgstr "Redimensionner le canevas"
+
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr "Incliner"
+
diff --git a/po/he.po b/po/he.po
index f02d8ce7..e24adf1b 100644
--- a/po/he.po
+++ b/po/he.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: drawing\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-15 19:07+0200\n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
"PO-Revision-Date: 2019-06-03 23:22+0300\n"
"Last-Translator: Shaked Ashkenazi <shaked.a21@gmail.com>\n"
"Language-Team: Hebrew <shaked.a21@gmail.com>\n"
@@ -76,6 +76,71 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"Version 0.6 is a major update, with various important changes. The app is "
"more robust and has more tools:"
msgstr ""
@@ -97,8 +162,14 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
-"with several types of blur, color inversion, pixelisation, saturation and "
+"with several types of blur, color inversion, pixelization, saturation and "
"transparency."
msgstr ""
@@ -112,14 +183,29 @@ msgid ""
"image, using the minimap, the touchpad or the mouse wheel."
msgstr ""
+#. This is just my name, do not translate it.
#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid ""
-"Version 0.4.8 features several minor bug fixes, and various new translations."
+msgid "Romain F. T."
msgstr ""
-#. This is just my name, do not translate it.
+#. Caption of a screenshot, for appstores
#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid "Romain F. T."
+msgid "The window and its primary menu"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
msgstr ""
#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
@@ -127,7 +213,7 @@ msgstr ""
msgid "Preferences"
msgstr "מאפיינים"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
msgid "Report a bug"
msgstr "דווח על באג"
@@ -180,19 +266,23 @@ msgstr "תמונה חדשה מהלוח"
msgid "Reload file"
msgstr "פתיחת קובץ"
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/properties.py
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
msgid "Image properties"
msgstr "מאפייני תמונה"
#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
-#: src/ui/win-menus.ui src/window.py
+#: src/ui/win-menus.ui src/saving_manager.py
msgid "Save"
msgstr "שמירה"
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+#, fuzzy
+msgid "Save without transparency"
+msgstr "שקיפות"
+
#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
-#: src/utilities.py
+#: src/saving_manager.py
msgid "Save as…"
msgstr "שמירה כ…"
@@ -201,7 +291,13 @@ msgstr "שמירה כ…"
msgid "Export as…"
msgstr "ייצוא כ…"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
msgid "Print"
msgstr "הדפסה"
@@ -290,25 +386,30 @@ msgid "Optimal Zoom"
msgstr "מרחק מיטבי"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
#, fuzzy
msgid "Zoom Out"
msgstr "התרחקות"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
#, fuzzy
msgid "Original Zoom"
msgstr "מרחק מקורי"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
#, fuzzy
msgid "Zoom In"
msgstr "התקרבות"
# Perhaps this should be renamed to "Editing"?
# I had a hard time understanding what this term was supposed to mean.
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
#: src/ui/app-menus.ui
#, fuzzy
msgid "Position"
@@ -349,12 +450,6 @@ msgid "Refresh"
msgstr "רענון"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
-#: src/preferences.py
-msgid "Show tools names"
-msgstr "הצג שמות כלים"
-
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/shortcuts.ui
-#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
msgid "Fullscreen"
msgstr ""
@@ -391,56 +486,65 @@ msgstr "החלף צבעים"
msgid "Color application mode"
msgstr "אפשרויות צבע"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Normal"
msgstr "תבנית"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Other modes"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Raw source color"
msgstr "צבע מקור"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Highlight"
msgstr "גובה"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Difference"
msgstr "שוני"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
-msgid "Photo manipulation"
+msgid "Photo-oriented modes"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Hue only"
msgstr "סרגל תפריט בלבד"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Saturation only"
msgstr "רוויה"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Hue and saturation"
msgstr "רוויה"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Luminosity only"
msgstr ""
@@ -450,18 +554,18 @@ msgid "Don't use the colors but…"
msgstr ""
#. To translators: this is a verb
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Blur"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Erase"
msgstr "מחק"
-#: src/ui/app-menus.ui src/window.py
+#: src/ui/app-menus.ui
msgid "_Tools"
msgstr "_כלים"
@@ -469,6 +573,24 @@ msgstr "_כלים"
msgid "Previous tool"
msgstr "כלי קודם"
+#: src/ui/app-menus.ui
+msgid "Active tool"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "הצג שמות כלים"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+#, fuzzy
+msgid "Smaller width"
+msgstr "רוחב ברירת מחדל"
+
#: src/ui/app-menus.ui src/window.py
msgid "_Options"
msgstr "_אפשרויות"
@@ -477,24 +599,30 @@ msgstr "_אפשרויות"
msgid "_Help"
msgstr "_עזרה"
+#. Context: open the index of all help pages
#: src/ui/app-menus.ui
msgid "Index"
msgstr ""
+#. Context: open the help page about general use of the app
#: src/ui/app-menus.ui
#, fuzzy
msgid "Basic help"
msgstr "בסיסי"
+#. Context: open the help page about classic tools
#: src/ui/app-menus.ui
msgid "Help about tools"
msgstr ""
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
#: src/ui/app-menus.ui
#, fuzzy
msgid "Canvas and selection"
msgstr "שינוי קנה מידה של הבחירה"
+#. Context: open the help page about the selection
#: src/ui/app-menus.ui
#, fuzzy
msgid "Help about selection"
@@ -509,22 +637,26 @@ msgstr "אודות ציור"
msgid "Open"
msgstr "פתיחה"
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr ""
+
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Width"
msgstr "רוחב"
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Height"
msgstr "גובה"
#: src/ui/new-image-dialog.ui
#, fuzzy
-msgid "Background color"
-msgstr "רקע אטום"
+msgid "Color"
+msgstr "צבעים"
#: src/ui/new-image-dialog.ui
#, fuzzy
@@ -535,6 +667,8 @@ msgstr "עשה שימוש בעורך זה בברירת המחדל"
msgid "100%"
msgstr ""
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
#: src/ui/properties.ui src/utilities.py
msgid "pixels"
msgstr "פיקסלים"
@@ -552,10 +686,9 @@ msgstr "אינצ'ים"
msgid "Images"
msgstr "תמונה"
-#: src/ui/preferences.ui src/ui/shortcuts.ui
-#, fuzzy
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "Tools"
-msgstr "_כלים"
+msgstr "כלים"
#: src/ui/preferences.ui
#, fuzzy
@@ -574,30 +707,22 @@ msgid "Unselect"
msgstr "בטל בחירה"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Crop"
msgstr "חיתוך"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scale"
msgstr "שינוי קנה מידה"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotate"
msgstr "סיבוב"
-#. In this context, "Skew" is the name of the tool changing rectangles
-#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
-#. "Stretch/Skew" dialog.
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_skew.py
-msgid "Skew"
-msgstr ""
-
-#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Filters"
msgstr ""
@@ -607,8 +732,9 @@ msgid "Open As New Image"
msgstr "פתח כתמונה חדשה"
#: src/ui/shortcuts.ui
-msgid "Keyboard"
-msgstr ""
+#, fuzzy
+msgid "Keyboard Shortcuts"
+msgstr "קיצורי דרך"
#: src/ui/shortcuts.ui
msgid "General"
@@ -618,35 +744,29 @@ msgstr "כללי"
msgid "Main menu"
msgstr "תפריט ראשי"
-# Perhaps this should be renamed to "Editing"?
-# I had a hard time understanding what this term was supposed to mean.
-#: src/ui/shortcuts.ui
-#, fuzzy
-msgid "Editing"
-msgstr "עריכה"
-
#: src/ui/shortcuts.ui
msgid "Image"
msgstr "תמונה"
-#: src/ui/shortcuts.ui
-msgid "Open a file"
-msgstr "פתיחת קובץ"
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "פתיחת תמונה"
#: src/ui/shortcuts.ui
msgid "Reload image from disk"
msgstr ""
-#: src/ui/shortcuts.ui
-msgid "Save as"
-msgstr "שמירה כ…"
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "שמירת תמונה כ…"
#: src/ui/shortcuts.ui
msgid "Close the active image"
msgstr "סגור תמונה נוכחית"
#: src/ui/shortcuts.ui
-msgid "Options menu"
+#, fuzzy
+msgid "Open the tool options menu"
msgstr "תפריט אפשרויות"
#: src/ui/shortcuts.ui
@@ -654,18 +774,12 @@ msgid "Back to previous tool"
msgstr "חזרה לכלי הקודם"
#: src/ui/shortcuts.ui
-msgid "Colors"
-msgstr "צבעים"
-
-#. Label displayed in the keyboard shortcuts dialog
-#: src/ui/shortcuts.ui
-msgid "Edit the main color (left click)"
-msgstr "ערוך את הצבע הראשי (לחיצה שמאלית)"
+msgid "Apply a transformation"
+msgstr ""
-#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Edit the secondary color (right click)"
-msgstr "ערוך את צבע המשנה (לחיצה שמאלית)"
+msgid "History"
+msgstr ""
#: src/ui/shortcuts.ui
msgid "Selection"
@@ -684,17 +798,25 @@ msgid "Import a file as the selection"
msgstr "סיבוב הבחירה"
#: src/ui/shortcuts.ui
-msgid "Tabs"
-msgstr ""
+msgid "Colors"
+msgstr "צבעים"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Enter fullscreen mode"
-msgstr ""
+msgid "Edit the main color (left click)"
+msgstr "ערוך את הצבע הראשי (לחיצה שמאלית)"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Exit fullscreen mode"
+msgid "Edit the secondary color (right click)"
+msgstr "ערוך את צבע המשנה (לחיצה שמאלית)"
+
+#: src/ui/shortcuts.ui
+msgid "Tabs"
msgstr ""
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
#: src/ui/shortcuts.ui
msgid "Navigation"
msgstr "ניווט"
@@ -704,11 +826,27 @@ msgstr "ניווט"
msgid "Toggle the preview"
msgstr "הצג/הסתר תצוגה מקדימה"
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr ""
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr ""
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr ""
+
#: src/ui/win-menus.ui
#, fuzzy
msgid "Troubleshoot selection"
msgstr "אפשרויות צבע"
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr ""
+
#: src/ui/window.ui
msgid "Error starting the application, please report this bug."
msgstr "שגיאה בפתיחת היישום, נא לדווח באג זה."
@@ -723,6 +861,12 @@ msgstr "ביטול פעולה %s"
msgid "Redo %s"
msgstr "חידוש פעולה %s"
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr ""
+
#: src/image.py
msgid "Can't reload a never-saved file from the disk."
msgstr ""
@@ -731,15 +875,15 @@ msgstr ""
msgid "Unsaved file"
msgstr "קובץ לא שמור"
-#: src/new_image_dialog.py src/utilities.py src/window.py
-#: src/tools/utilities_paths.py src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-crop.ui src/tools/ui/tool-filters.ui
-#: src/tools/ui/tool-rotate.ui src/tools/ui/tool-scale.ui
-#: src/tools/ui/tool-skew.ui
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
msgid "Cancel"
msgstr "ביטול"
@@ -748,19 +892,23 @@ msgstr "ביטול"
msgid "Create"
msgstr ""
+#. Description of a command line option
#: src/main.py
#, fuzzy
msgid "Show the app version"
msgstr "הצג תצוגה מקדימה"
+#. Description of a command line option
#: src/main.py
msgid "Open a new window"
msgstr "פתח חלון חדשה"
+#. Description of a command line option
#: src/main.py
msgid "Open a new tab"
msgstr "פתח לשונית חדשה"
+#. Description of a command line option
#: src/main.py
#, fuzzy
msgid "Edit the clipboard content"
@@ -774,12 +922,14 @@ msgstr ""
msgid "Report bugs or ideas"
msgstr "דווח באגים או רעיונות"
-#. To tranlators: "translate" this by your name, it will be displayed
-#. in the "about" dialog
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
#: src/main.py
msgid "translator-credits"
msgstr "moriel5"
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
#: src/main.py
msgid "GNOME's \"Art Libre\" icon set authors"
msgstr ""
@@ -793,20 +943,27 @@ msgid "Official webpage"
msgstr ""
#: src/main.py
-#, fuzzy, python-format
-msgid "Error opening this file. Did you mean %s ?"
+#, fuzzy
+msgid "Error opening this file."
msgstr ""
"שגיאה בפתיחת קובץ זה. האם התכוונת ל-\n"
"flatpak run --file-forwarding {0} @@ {1}\n"
"?"
-#. This displays the zoom level, %s will be replaced with a number, while
-#. %% is just the symbol '%'
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr ""
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
#: src/minimap.py
#, python-format
msgid "%s%%"
msgstr ""
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "New images"
msgstr "תמונות חדשות"
@@ -819,10 +976,17 @@ msgstr "רוחב ברירת מחדל"
msgid "Default height"
msgstr "גובה ברירת מחדל"
-#: src/preferences.py
-msgid "Default background"
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+#, fuzzy
+msgid "Default color"
msgstr "רקע ברירת מחדל"
+#. Context: title of a section of the preferences
#: src/preferences.py
#, fuzzy
msgid "Images saving"
@@ -838,19 +1002,23 @@ msgid ""
"transparent pixels?"
msgstr ""
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "White"
msgstr ""
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "Black"
msgstr ""
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
msgid "Checkboard"
msgstr ""
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
msgid "Nothing"
msgstr ""
@@ -863,13 +1031,15 @@ msgid "You can zoom with Ctrl+scrolling, or only scrolling."
msgstr ""
#: src/preferences.py
-msgid "Using keyboard shortcuts or touch gestures is possible too."
+msgid "See the user help manual for explanations."
msgstr ""
#: src/preferences.py
msgid "Use 'Ctrl' to zoom"
msgstr ""
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
#: src/preferences.py
msgid "Appearance"
msgstr ""
@@ -878,6 +1048,7 @@ msgstr ""
msgid "Use big icons"
msgstr ""
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Additional tools"
msgstr ""
@@ -888,31 +1059,51 @@ msgid ""
"not all enabled by default."
msgstr ""
-#. In the meaning "a rubber eraser"
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
#: src/preferences.py src/tools/classic_tools/tool_eraser.py
msgid "Eraser"
msgstr "מחק"
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
#: src/preferences.py src/tools/classic_tools/tool_highlight.py
msgid "Highlighter"
msgstr ""
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr ""
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
#: src/preferences.py src/tools/selection_tools/select_free.py
msgid "Free selection"
msgstr "בחירה חופשית"
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
#: src/preferences.py src/tools/selection_tools/select_color.py
msgid "Color selection"
msgstr "אפשרויות צבע"
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
#: src/preferences.py src/tools/classic_tools/tool_picker.py
msgid "Color Picker"
msgstr "בוחר צבעים"
+#. Context: the name of a tool to fill an area of one color with an other
#: src/preferences.py src/tools/classic_tools/tool_paint.py
msgid "Paint"
msgstr "צבע"
+#. Context: title of a section of the preferences
#: src/preferences.py
#, fuzzy
msgid "Advanced options"
@@ -922,11 +1113,19 @@ msgstr "אפשרויות קשת"
msgid "Preview size"
msgstr "גודל תצוגה מקדימה"
+#. This label will not be displayed in the UI of stable versions
#: src/preferences.py
msgid "Development features"
msgstr "תכונות פיתוח"
#: src/preferences.py
+#, fuzzy
+msgid "Background color"
+msgstr "רקע אטום"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
msgid "Layout"
msgstr "פריסה"
@@ -934,6 +1133,7 @@ msgstr "פריסה"
msgid "The recommended value is \"Automatic\"."
msgstr ""
+#. It has to match what's written in the previous string.
#: src/preferences.py
msgid "Automatic"
msgstr "אוטומטי"
@@ -953,7 +1153,8 @@ msgid "Legacy"
msgstr "מסורתיבש"
#. "Legacy" is about the window layout, it means menubar+toolbar, you
-#. can translate it like if it was "Traditional"
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Legacy (symbolic icons)"
msgstr ""
@@ -966,6 +1167,7 @@ msgstr "סרגל תפריט בלבד"
msgid "Toolbar only"
msgstr "סרגל כלים בלבד"
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
#, fuzzy
msgid "Toolbar only (symbolic icons)"
@@ -986,10 +1188,12 @@ msgstr ""
msgid "%s in"
msgstr ""
+#. Context: the path of the edited file
#: src/properties.py
msgid "Path"
msgstr "נתיב"
+#. Context: the file format of the edited file
#: src/properties.py
msgid "Format"
msgstr "תבנית"
@@ -999,10 +1203,69 @@ msgstr "תבנית"
msgid "Colorspace"
msgstr "צבעים"
+#. Context: an invalid colorspace format
#: src/properties.py
msgid "Invalid format"
msgstr "תבנית לא תקפה"
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr ""
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "חסר שם"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "תמונה זו"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "מחיקת שינויים"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "ישנם שינויים אשר לא שמורים ל%s."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr ""
+
+#: src/saving_manager.py
+#, fuzzy
+msgid "Do you want to save anyway?"
+msgstr "היכן ברצונך לפתוח את %s?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr ""
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr ""
+
#: src/utilities.py
#, fuzzy
msgid "Transparent"
@@ -1025,6 +1288,9 @@ msgstr ""
msgid "Brown"
msgstr ""
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
#: src/utilities.py
msgid "Probably brown"
msgstr ""
@@ -1058,31 +1324,23 @@ msgstr ""
msgid "Cyan"
msgstr ""
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
#: src/utilities.py
-msgid "Probably turquoise"
+msgid "Probably teal"
msgstr ""
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
#: src/utilities.py
msgid "Unknown color name"
msgstr ""
#: src/utilities.py
-msgid "Replace"
-msgstr ""
-
-#: src/utilities.py
-msgid "This file format doesn't support transparent colors."
-msgstr ""
-
-#: src/utilities.py
-msgid "You can save the image as a PNG file, or replace transparency with:"
-msgstr ""
-
-#: src/utilities.py
-msgid "Replace transparency with:"
-msgstr ""
-
-#: src/utilities.py
msgid "All pictures"
msgstr "כל התמונות"
@@ -1098,29 +1356,50 @@ msgstr "תמונות JPEG"
msgid "BMP images"
msgstr "תמונות BMP"
+#. To translators: it appears in tooltips over numerical inputs
#: src/utilities.py
msgid "percents"
msgstr ""
-#. To translators: it's the angle measure unit
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
#: src/utilities.py
#, fuzzy
msgid "degrees"
msgstr "זווית (מעלות)"
+#: src/utilities.py
+#, fuzzy, python-format
+msgid "%s isn't an image."
+msgstr "פתיחת תמונה"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr ""
+
+#. Context: an error message
#: src/window.py
#, python-format
msgid "Failed to load tool: %s"
msgstr ""
#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr ""
+
+#: src/window.py
msgid "Modifications will take effect in the next new window."
msgstr ""
#: src/window.py src/tools/abstract_tool.py
#: src/optionsbars/classic/optionsbar-classic.ui
#: src/tools/classic_tools/tool_eraser.py
-#: src/tools/classic_tools/tool_highlight.py
msgid "No options"
msgstr "אין אפשרויות"
@@ -1129,6 +1408,11 @@ msgid "Opened images"
msgstr "תמונות שנפתחו"
#: src/window.py
+#, fuzzy, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "שגיאה בפתיחת היישום, נא לדווח באג זה."
+
+#: src/window.py
#, python-format
msgid "Loading %s"
msgstr "טוען %s"
@@ -1142,20 +1426,12 @@ msgstr "לשונית חדשה"
msgid "Discard changes"
msgstr "בטל שינויים"
-#: src/window.py
-#, python-format
-msgid "There are unsaved modifications to %s."
-msgstr "ישנם שינויים אשר לא שמורים ל%s."
-
+#. Context: %s will be replaced by the name of a file.
#: src/window.py
#, python-format
msgid "Where do you want to open %s?"
msgstr "היכן ברצונך לפתוח את %s?"
-#: src/window.py
-msgid "Open a picture"
-msgstr "פתיחת תמונה"
-
#. Context for translation:
#. "What do you want to do with *these files*?"
#: src/window.py
@@ -1163,34 +1439,26 @@ msgstr "פתיחת תמונה"
msgid "these files"
msgstr "קובץ לא שמור"
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
#: src/window.py
#, fuzzy, python-format
msgid "What do you want to do with %s?"
msgstr "היכן ברצונך לפתוח את %s?"
-#. else the exception was raised because an actual error occured, or
-#. the user clicked on "cancel"
#: src/window.py
-#, python-format
-msgid "Failed to save %s"
-msgstr ""
-
-#: src/window.py
-msgid "Untitled"
-msgstr "חסר שם"
-
-#. Context: the sentence "There are unsaved modifications to %s."
-#: src/window.py
-msgid "this picture"
-msgstr "תמונה זו"
+#, fuzzy
+msgid "Image copied to clipboard"
+msgstr "עריכת תמונה מהלוח"
#: src/window.py
-msgid "Discard"
-msgstr "מחיקת שינויים"
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr ""
#: src/window.py
-msgid "Save picture as…"
-msgstr "שמירת תמונה כ…"
+#, fuzzy
+msgid "Reload"
+msgstr "פתיחת קובץ"
#: src/window.py
msgid "Import a picture"
@@ -1200,6 +1468,12 @@ msgstr "יבא תמונה"
msgid "Required tool is not available"
msgstr ""
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
+
#: src/tools/utilities_paths.py
msgid "Continue"
msgstr "המשך"
@@ -1216,13 +1490,15 @@ msgstr "לא בטוח שסדרה זו תוכל לנהל את האזור הרצו
msgid "Do you want to abort the operation, or to let the tool struggle ?"
msgstr "האם ברצונך לבטל את הפעולה, או לתת לכלי להיאבק?"
+#. Context: fill a shape with the color of the left click
#: src/optionsbars/classic/optionsbar_color_popover.py
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Main color"
msgstr "צבע ראשי"
-#. if state_as_string == 'secondary':
+#. Context: fill a shape with the color of the right click
#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Secondary color"
msgstr "צבע משנה"
@@ -1232,8 +1508,8 @@ msgid "Tool size"
msgstr "גודל כלי"
#: src/optionsbars/classic/optionsbar-classic.ui
-#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-filters.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
msgid "Preview"
msgstr "תצוגה מקדימה"
@@ -1254,177 +1530,192 @@ msgid "Use this editor by default"
msgstr "עשה שימוש בעורך זה בברירת המחדל"
#: src/optionsbars/selection/optionsbar-selection.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
#, fuzzy
msgid "More actions"
msgstr "אין אפשרויות"
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
msgid "Apply"
msgstr "יישום"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#, fuzzy
+msgid "More options"
+msgstr "אין אפשרויות"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr ""
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "שקיפות"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
#, fuzzy
msgid "Select a filter…"
msgstr "בחירה בהכל"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Saturation"
msgstr "רוויה"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blur radius"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui
-msgid "Transparency"
-msgstr "שקיפות"
-
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
#, fuzzy
msgid "Change saturation"
msgstr "רוויה"
#. Context: a filter adding like a light veil on the image
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Veil"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
#, fuzzy
msgid "Add transparency"
msgstr "שקיפות"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
#, fuzzy
msgid "Invert colors"
msgstr "החלף צבעים"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blurring"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Fast blur"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Slow blur"
msgstr ""
# Perhaps this should be renamed to "Editing"?
# I had a hard time understanding what this term was supposed to mean.
#. Context: a filter that censors the image with some kind of tiles
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
#, fuzzy
-msgid "Pixelisation"
+msgid "Pixelization"
msgstr "עריכה"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
#, fuzzy
msgid "Blur direction"
msgstr "אפשרויות צבע"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
#, fuzzy
msgid "Horizontal"
msgstr "הפוך אופקית"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
#, fuzzy
msgid "Vertical"
msgstr "בוחר צבעים"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
#, fuzzy
msgid "No direction"
msgstr "אפשרויות צבע"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle (degrees)"
msgstr "זווית (מעלות)"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate left"
msgstr "סובב שמאלה"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate right"
msgstr "סובב ימינה"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip horizontally"
msgstr "הפוך אופקית"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip vertically"
msgstr "הפוך אנכית"
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#, fuzzy
-msgid "More options"
-msgstr "אין אפשרויות"
-
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
#, fuzzy
msgid "Keep proportions"
msgstr "שמור יחסי קנה מידה"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Always [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Always"
msgstr ""
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "[Keep proportions only] when scaling from corners"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "When scaling from corners"
msgstr ""
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Never [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Never"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
#, fuzzy
msgid "Horizontal deformation"
msgstr "הפוך אופקית"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
#, fuzzy
msgid "Vertical deformation"
msgstr "בוחר צבעים"
+#: src/tools/ui/selection.ui
+#, fuzzy
+msgid "Transform"
+msgstr "הוסף שקיפות"
+
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
#, fuzzy
msgid "Line shape"
msgstr "צורת פס"
+#. Context: this is the name of a line shape
#. Default values
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
@@ -1432,82 +1723,172 @@ msgstr "צורת פס"
msgid "Round"
msgstr "עגול"
+#. Context: this is the name of a line shape
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Thin"
-msgstr "דק"
-
-#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
msgid "Square"
msgstr "מרובע"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "No arrow"
+msgstr "חץ"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Double arrow"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-msgid "Use dashes"
+#, fuzzy
+msgid "No dashes"
msgstr "השתמש בקווים מפרידים"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
-msgid "Arrow"
-msgstr "חץ"
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Simple dashes"
+msgstr "השתמש בקווים מפרידים"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Long dashes"
+msgstr "השתמש בקווים מפרידים"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Short dashes"
+msgstr "השתמש בקווים מפרידים"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-shape.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
msgid "Antialiasing"
msgstr ""
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Dark text on light background"
+msgstr "רקע ברירת מחדל"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr ""
+
#: src/tools/ui/tool-line.ui
#, fuzzy
msgid "Color gradient"
msgstr "בוחר צבעים"
+#. Context: title for the list of the possible painting algorithms.
#: src/tools/ui/tool-paint.ui
msgid "Behavior"
msgstr ""
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
#: src/tools/ui/tool-paint.ui
msgid "Encircle and fill"
msgstr "הקף ומלא"
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
#: src/tools/ui/tool-paint.ui
msgid "Erase and replace"
msgstr "מחק והחלף"
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
#: src/tools/ui/tool-paint.ui
-msgid "Clipping"
+#, fuzzy
+msgid "Entire image"
+msgstr "תמונות שנפתחו"
+
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+msgid "Remove color"
+msgstr "הסרת צבע"
+
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
msgstr ""
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rectangle"
-msgstr "מלבן"
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "עיגול"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-#, fuzzy
-msgid "Rounded rectangle"
-msgstr "מלבן"
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr ""
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Oval"
-msgstr "סגלגל"
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Polygon"
-msgstr "מצולע"
+msgid "Solid outline"
+msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Free shape"
-msgstr "צורה חופשית"
+msgid "Dashed outline"
+msgstr ""
+#. if state_as_string == 'none':
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Circle"
-msgstr "עיגול"
+#, fuzzy
+msgid "No outline"
+msgstr "אין אפשרויות"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr "מילוי"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Empty outline"
-msgstr ""
+#, fuzzy
+msgid "Empty shape"
+msgstr "ריק"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
#, fuzzy
@@ -1524,6 +1905,27 @@ msgstr "בוחר צבעים"
msgid "Radial gradient"
msgstr "בוחר צבעים"
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "מלבן"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+#, fuzzy
+msgid "Rounded rectangle"
+msgstr "מלבן"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "סגלגל"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "מצולע"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "צורה חופשית"
+
#: src/tools/ui/tool-shape.ui
#, fuzzy
msgid "Close shape"
@@ -1538,6 +1940,11 @@ msgid "Font"
msgstr "גופן"
#: src/tools/ui/tool-text.ui
+#, fuzzy
+msgid "Select a font…"
+msgstr "בחירה בהכל"
+
+#: src/tools/ui/tool-text.ui
msgid "Italic"
msgstr ""
@@ -1545,37 +1952,34 @@ msgstr ""
msgid "Bold"
msgstr ""
+#. Context: the types of background behind the inserted text
#: src/tools/ui/tool-text.ui
#, fuzzy
msgid "Background"
msgstr "רקע אטום"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
#, fuzzy
msgid "No background"
msgstr "רקע אטום"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Shadow"
msgstr ""
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Outline"
msgstr ""
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
#, fuzzy
msgid "Rectangle background"
msgstr "רקע ברירת מחדל"
-#: src/tools/ui/selection.ui
-msgid "Edit"
-msgstr "עריכה"
-
-#: src/tools/ui/selection.ui
-msgid "Flip"
-msgstr "הפיכה"
-
#: src/tools/classic_tools/tool_arc.py
msgid "Curve"
msgstr ""
@@ -1590,10 +1994,19 @@ msgid "Dashed arrow"
msgstr ""
#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "חץ"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
#: src/tools/classic_tools/tool_pencil.py
msgid "Dashed"
msgstr ""
+#: src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Highlighter options"
+msgstr "אפשרויות קו"
+
#: src/tools/classic_tools/tool_line.py
msgid "Line"
msgstr "קו"
@@ -1610,6 +2023,10 @@ msgstr "אפשרויות צביעה"
msgid "Click on an area to replace its color by transparency"
msgstr "לחץ על אזור כדי להחליף את צבעו לפי שקיפות"
+#: src/tools/classic_tools/tool_paint.py
+msgid "Click on the canvas to entirely paint it"
+msgstr ""
+
#: src/tools/classic_tools/tool_pencil.py
msgid "Pencil"
msgstr "עיפרון"
@@ -1618,15 +2035,21 @@ msgstr "עיפרון"
msgid "Pencil options"
msgstr "אפשרויות עיפרון"
+#: src/tools/classic_tools/tool_points.py
+#, fuzzy
+msgid "Points options"
+msgstr "אין אפשרויות"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr ""
+
#: src/tools/classic_tools/tool_shape.py
msgid "Shape"
msgstr "צורה"
#: src/tools/classic_tools/tool_shape.py
-msgid "Empty"
-msgstr "ריק"
-
-#: src/tools/classic_tools/tool_shape.py
msgid "Shape options"
msgstr "אפשרויות"
@@ -1638,6 +2061,7 @@ msgstr ""
msgid "Text"
msgstr "טקסט"
+#. XXX use "text options" instead
#: src/tools/classic_tools/tool_text.py
#, fuzzy
msgid "Font options"
@@ -1657,47 +2081,70 @@ msgstr "גרור את הבחירה או לחץ לחיצה שמאלית על לו
msgid "Rectangle selection"
msgstr "בחירה מלבנית"
-#: src/tools/canvas_tools/abstract_canvas_tool.py
+#: src/tools/transform_tools/abstract_transform_tool.py
msgid "Error: invalid values"
msgstr ""
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the selection"
msgstr "חיתוך הבחירה"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the canvas"
msgstr "חיתוך לוח הציור"
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Click on the image to preview the selected filter"
msgstr ""
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the selection"
msgstr "סיבוב הבחירה"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the canvas"
msgstr "סיבוב לוח הציור"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the selection"
msgstr "שינוי קנה מידה של הבחירה"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the canvas"
msgstr "שינוי קנה מידה של לוח הציור"
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr ""
+
+#~ msgid "Flip"
+#~ msgstr "הפיכה"
+
+#, fuzzy
+#~ msgid "Add semi-transparency"
+#~ msgstr "שקיפות"
+
+#~ msgid "Thin"
+#~ msgstr "דק"
+
+#~ msgid "Edit"
+#~ msgstr "עריכה"
+
+#~ msgid "Open a file"
+#~ msgstr "פתיחת קובץ"
+
+#~ msgid "Save as"
+#~ msgstr "שמירה כ…"
+
#~ msgid "Classic"
#~ msgstr "רגיל"
#~ msgid "Close"
#~ msgstr "סגירה"
-#~ msgid "Filling"
-#~ msgstr "מילוי"
-
#~ msgid "Selection type"
#~ msgstr "סוג בחירה"
@@ -1710,9 +2157,6 @@ msgstr "שינוי קנה מידה של לוח הציור"
#~ msgid "Selection options"
#~ msgstr "אפשרויות בחירה"
-#~ msgid "Remove color"
-#~ msgstr "הסרת צבע"
-
#~ msgid "Summary"
#~ msgstr "תקציר"
diff --git a/po/hr.po b/po/hr.po
index 8296eec7..73a68dae 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: drawing\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-15 19:07+0200\n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
"PO-Revision-Date: 2020-05-17 14:41+0200\n"
"Last-Translator: Milo Ivir <mail@milotype.de>\n"
"Language-Team: \n"
@@ -80,6 +80,75 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+"Verzija 0.6.4 sadrži nekoliko ispravki manjih programskih grešaka i razne "
+"nove prijevode."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+"Verzija 0.6.2 sadrži nekoliko ispravki manjih programskih grešaka i razne "
+"nove prijevode."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"Version 0.6 is a major update, with various important changes. The app is "
"more robust and has more tools:"
msgstr ""
@@ -110,8 +179,14 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
-"with several types of blur, color inversion, pixelisation, saturation and "
+"with several types of blur, color inversion, pixelization, saturation and "
"transparency."
msgstr ""
"Alat „zasićenost” zamijenjen je alatom „filtri”, moćnijim alatom za nekoliko "
@@ -129,24 +204,37 @@ msgstr ""
"Najistaknutija nova funkcija je mogućnost zumiranja slike pomoću mini-karte, "
"touchpada ili kotača miša."
-#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid ""
-"Version 0.4.8 features several minor bug fixes, and various new translations."
-msgstr ""
-"Verzija 0.4.8 sadrži nekoliko ispravki manjih programskih grešaka i razne "
-"nove prijevode."
-
#. This is just my name, do not translate it.
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid "Romain F. T."
msgstr "Romain F. T."
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr ""
+
#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
#: src/preferences.py
msgid "Preferences"
msgstr "Postavke"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
msgid "Report a bug"
msgstr "Prijavi grešku"
@@ -195,19 +283,23 @@ msgstr "Nova slika iz međuspremnika"
msgid "Reload file"
msgstr "Ponovo učitaj datoteku"
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/properties.py
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
msgid "Image properties"
msgstr "Svojstva slike"
#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
-#: src/ui/win-menus.ui src/window.py
+#: src/ui/win-menus.ui src/saving_manager.py
msgid "Save"
msgstr "Spremi"
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+#, fuzzy
+msgid "Save without transparency"
+msgstr "Dodaj prozirnost"
+
#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
-#: src/utilities.py
+#: src/saving_manager.py
msgid "Save as…"
msgstr "Spremi kao …"
@@ -216,7 +308,13 @@ msgstr "Spremi kao …"
msgid "Export as…"
msgstr "Izvezi kao …"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
msgid "Print"
msgstr "Ispiši"
@@ -301,20 +399,25 @@ msgid "Optimal Zoom"
msgstr "Optimalno zumiranje"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom Out"
msgstr "Smanji prikaz"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Original Zoom"
msgstr "Izvorno zumiranje"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom In"
msgstr "Povećaj prikaz"
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
#: src/ui/app-menus.ui
msgid "Position"
msgstr "Pozicija"
@@ -348,12 +451,6 @@ msgid "Refresh"
msgstr "Aktualiziraj"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
-#: src/preferences.py
-msgid "Show tools names"
-msgstr "Prikaži imena alata"
-
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/shortcuts.ui
-#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
msgid "Fullscreen"
msgstr "Cjeloekranski prikaz"
@@ -386,50 +483,59 @@ msgstr "Zamijeni boje"
msgid "Color application mode"
msgstr "Modus programa u boji"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Normal"
msgstr "Normalno"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Other modes"
msgstr "Drugi modusi"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Raw source color"
msgstr "Neobrađena izvorna boja"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Highlight"
msgstr "Isticanje"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Difference"
msgstr "Razlika"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
-msgid "Photo manipulation"
-msgstr "Obrada fotografija"
+msgid "Photo-oriented modes"
+msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Hue only"
msgstr "Samo nijansa"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Saturation only"
msgstr "Samo zasićenost"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Hue and saturation"
msgstr "Nijansa i zasićenost"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Luminosity only"
msgstr "Samo osvjetljenost"
@@ -439,17 +545,17 @@ msgid "Don't use the colors but…"
msgstr "Ne koristi boje, već …"
#. To translators: this is a verb
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Blur"
msgstr "Zamuti"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Erase"
msgstr "Izbriši"
-#: src/ui/app-menus.ui src/window.py
+#: src/ui/app-menus.ui
msgid "_Tools"
msgstr "_Alati"
@@ -457,6 +563,25 @@ msgstr "_Alati"
msgid "Previous tool"
msgstr "Prethodni alat"
+#: src/ui/app-menus.ui
+#, fuzzy
+msgid "Active tool"
+msgstr "Drugi modusi"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "Prikaži imena alata"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+#, fuzzy
+msgid "Smaller width"
+msgstr "Standardna širina"
+
#: src/ui/app-menus.ui src/window.py
msgid "_Options"
msgstr "_Opcije"
@@ -465,22 +590,28 @@ msgstr "_Opcije"
msgid "_Help"
msgstr "_Pomoć"
+#. Context: open the index of all help pages
#: src/ui/app-menus.ui
msgid "Index"
msgstr "Indeks"
+#. Context: open the help page about general use of the app
#: src/ui/app-menus.ui
msgid "Basic help"
msgstr "Osnovna pomoć"
+#. Context: open the help page about classic tools
#: src/ui/app-menus.ui
msgid "Help about tools"
msgstr "Pomoć za alate"
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
#: src/ui/app-menus.ui
msgid "Canvas and selection"
msgstr "Platno i odabir"
+#. Context: open the help page about the selection
#: src/ui/app-menus.ui
msgid "Help about selection"
msgstr "Pomoć za odabir"
@@ -494,21 +625,26 @@ msgstr "O programu Crtanje"
msgid "Open"
msgstr "Otvori"
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr ""
+
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Width"
msgstr "Širina"
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Height"
msgstr "Visina"
#: src/ui/new-image-dialog.ui
-msgid "Background color"
-msgstr "Boja pozadine"
+#, fuzzy
+msgid "Color"
+msgstr "Boje"
#: src/ui/new-image-dialog.ui
msgid "Use these settings by default"
@@ -518,6 +654,8 @@ msgstr "Standardno koristi ove postavke"
msgid "100%"
msgstr "100 %"
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
#: src/ui/properties.ui src/utilities.py
msgid "pixels"
msgstr "pikslova"
@@ -534,7 +672,7 @@ msgstr "inča"
msgid "Images"
msgstr "Slike"
-#: src/ui/preferences.ui src/ui/shortcuts.ui
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "Tools"
msgstr "Alati"
@@ -553,30 +691,22 @@ msgid "Unselect"
msgstr "Odznači odabir"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Crop"
msgstr "Odreži"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scale"
msgstr "Skaliraj"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotate"
msgstr "Okreni"
-#. In this context, "Skew" is the name of the tool changing rectangles
-#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
-#. "Stretch/Skew" dialog.
-#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_skew.py
-msgid "Skew"
-msgstr "Ukosi"
-
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Filters"
msgstr "Filtri"
@@ -586,8 +716,9 @@ msgid "Open As New Image"
msgstr "Otvori kao novu sliku"
#: src/ui/shortcuts.ui
-msgid "Keyboard"
-msgstr "Tipkovnica"
+#, fuzzy
+msgid "Keyboard Shortcuts"
+msgstr "Prečaci"
#: src/ui/shortcuts.ui
msgid "General"
@@ -598,31 +729,28 @@ msgid "Main menu"
msgstr "Glavni izbornik"
#: src/ui/shortcuts.ui
-msgid "Editing"
-msgstr "Uređivanje"
-
-#: src/ui/shortcuts.ui
msgid "Image"
msgstr "Slika"
-#: src/ui/shortcuts.ui
-msgid "Open a file"
-msgstr "Otvori datoteku"
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "Otvori jednu sliku"
#: src/ui/shortcuts.ui
msgid "Reload image from disk"
msgstr "Ponovo učitaj sliku s diska"
-#: src/ui/shortcuts.ui
-msgid "Save as"
-msgstr "Spremi kao"
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "Spremi sliku kao …"
#: src/ui/shortcuts.ui
msgid "Close the active image"
msgstr "Zatvori aktivnu sliku"
#: src/ui/shortcuts.ui
-msgid "Options menu"
+#, fuzzy
+msgid "Open the tool options menu"
msgstr "Izbornik opcija"
#: src/ui/shortcuts.ui
@@ -630,18 +758,12 @@ msgid "Back to previous tool"
msgstr "Natrag na prethodni alat"
#: src/ui/shortcuts.ui
-msgid "Colors"
-msgstr "Boje"
-
-#. Label displayed in the keyboard shortcuts dialog
-#: src/ui/shortcuts.ui
-msgid "Edit the main color (left click)"
-msgstr "Uredi glavnu boju (lijevi klik)"
+msgid "Apply a transformation"
+msgstr ""
-#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Edit the secondary color (right click)"
-msgstr "Uredi sporednu boju (desni klik)"
+msgid "History"
+msgstr ""
#: src/ui/shortcuts.ui
msgid "Selection"
@@ -658,18 +780,26 @@ msgid "Import a file as the selection"
msgstr "Uvezi datoteku kao odabir"
#: src/ui/shortcuts.ui
-msgid "Tabs"
-msgstr "Kartice"
+msgid "Colors"
+msgstr "Boje"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Enter fullscreen mode"
-msgstr "Otvori cjeloekranski prikaz"
+msgid "Edit the main color (left click)"
+msgstr "Uredi glavnu boju (lijevi klik)"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Exit fullscreen mode"
-msgstr "Zatvori cjeloekranski prikaz"
+msgid "Edit the secondary color (right click)"
+msgstr "Uredi sporednu boju (desni klik)"
#: src/ui/shortcuts.ui
+msgid "Tabs"
+msgstr "Kartice"
+
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
+#: src/ui/shortcuts.ui
msgid "Navigation"
msgstr "Navigacija"
@@ -677,10 +807,27 @@ msgstr "Navigacija"
msgid "Toggle the preview"
msgstr "Uključi/isključi pretprikaz"
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr "Otvori cjeloekranski prikaz"
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr "Zatvori cjeloekranski prikaz"
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr ""
+
#: src/ui/win-menus.ui
msgid "Troubleshoot selection"
msgstr "Ispravi problem s odabirom"
+#: src/ui/win-menus.ui
+#, fuzzy
+msgid "Other tools"
+msgstr "Drugi modusi"
+
#: src/ui/window.ui
msgid "Error starting the application, please report this bug."
msgstr "Greška pri pokretanju programa. Prijavi grešku."
@@ -695,6 +842,12 @@ msgstr "Poništi %s"
msgid "Redo %s"
msgstr "Ponovi %s"
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr ""
+
#: src/image.py
msgid "Can't reload a never-saved file from the disk."
msgstr ""
@@ -705,15 +858,15 @@ msgstr ""
msgid "Unsaved file"
msgstr "Nespremljena datoteka"
-#: src/new_image_dialog.py src/utilities.py src/window.py
-#: src/tools/utilities_paths.py src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-crop.ui src/tools/ui/tool-filters.ui
-#: src/tools/ui/tool-rotate.ui src/tools/ui/tool-scale.ui
-#: src/tools/ui/tool-skew.ui
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
msgid "Cancel"
msgstr "Odustani"
@@ -722,18 +875,22 @@ msgstr "Odustani"
msgid "Create"
msgstr "Stvori"
+#. Description of a command line option
#: src/main.py
msgid "Show the app version"
msgstr "Prikaži verziju programa"
+#. Description of a command line option
#: src/main.py
msgid "Open a new window"
msgstr "Otvori novi prozor"
+#. Description of a command line option
#: src/main.py
msgid "Open a new tab"
msgstr "Otvori novu karticu"
+#. Description of a command line option
#: src/main.py
msgid "Edit the clipboard content"
msgstr "Uredi sadržaj međuspremnika"
@@ -746,12 +903,14 @@ msgstr "Ovo nije stabilna verzija!"
msgid "Report bugs or ideas"
msgstr "Prijavi greške ili ideje"
-#. To tranlators: "translate" this by your name, it will be displayed
-#. in the "about" dialog
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
#: src/main.py
msgid "translator-credits"
msgstr "Milo Ivir <mail@milotype.de>, 2020."
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
#: src/main.py
msgid "GNOME's \"Art Libre\" icon set authors"
msgstr "Autori GNOME-ovog kompleta ikona „Art Libre”"
@@ -765,17 +924,24 @@ msgid "Official webpage"
msgstr "Službena web-stranica"
#: src/main.py
-#, python-format
-msgid "Error opening this file. Did you mean %s ?"
+#, fuzzy
+msgid "Error opening this file."
msgstr "Greška pri otvaranju datoteke. Možda misliš %s?"
-#. This displays the zoom level, %s will be replaced with a number, while
-#. %% is just the symbol '%'
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr ""
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
#: src/minimap.py
#, python-format
msgid "%s%%"
msgstr "%s %%"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "New images"
msgstr "Nove slike"
@@ -788,10 +954,17 @@ msgstr "Standardna širina"
msgid "Default height"
msgstr "Standardna visina"
-#: src/preferences.py
-msgid "Default background"
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+#, fuzzy
+msgid "Default color"
msgstr "Standardna pozadina"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Images saving"
msgstr "Spremanje slika"
@@ -808,19 +981,23 @@ msgstr ""
"Ako spremiš slike u ovim formatima, što želiš koristiti kao zamjenu za "
"prozirne pikslove?"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "White"
msgstr "Bijelu boju"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "Black"
msgstr "Crnu boju"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
msgid "Checkboard"
msgstr "Šahovnicu"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
msgid "Nothing"
msgstr "Ništa"
@@ -833,13 +1010,15 @@ msgid "You can zoom with Ctrl+scrolling, or only scrolling."
msgstr "Zumiraj pomoću Ctrl+klizanje ili samo klizanjem."
#: src/preferences.py
-msgid "Using keyboard shortcuts or touch gestures is possible too."
-msgstr "Moguće je koristiti i tipkovničke prečace ili dodirne geste."
+msgid "See the user help manual for explanations."
+msgstr ""
#: src/preferences.py
msgid "Use 'Ctrl' to zoom"
msgstr "Koristi „Ctrl” za zumiranje"
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
#: src/preferences.py
msgid "Appearance"
msgstr "Izgled"
@@ -848,6 +1027,7 @@ msgstr "Izgled"
msgid "Use big icons"
msgstr "Koristi velike ikone"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Additional tools"
msgstr "Dodatni alati"
@@ -860,31 +1040,51 @@ msgstr ""
"Ovi alati nisu pouzdani i korisni kao što bi trebali biti, stoga neki nisu "
"standardno aktivirani."
-#. In the meaning "a rubber eraser"
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
#: src/preferences.py src/tools/classic_tools/tool_eraser.py
msgid "Eraser"
msgstr "Gumica"
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
#: src/preferences.py src/tools/classic_tools/tool_highlight.py
msgid "Highlighter"
msgstr "Isticanje"
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr ""
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
#: src/preferences.py src/tools/selection_tools/select_free.py
msgid "Free selection"
msgstr "Prostoručni odabir"
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
#: src/preferences.py src/tools/selection_tools/select_color.py
msgid "Color selection"
msgstr "Odabir prema boji"
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
#: src/preferences.py src/tools/classic_tools/tool_picker.py
msgid "Color Picker"
msgstr "Kapaljka"
+#. Context: the name of a tool to fill an area of one color with an other
#: src/preferences.py src/tools/classic_tools/tool_paint.py
msgid "Paint"
msgstr "Bojanje"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Advanced options"
msgstr "Napredne opcije"
@@ -893,11 +1093,18 @@ msgstr "Napredne opcije"
msgid "Preview size"
msgstr "Veličina pretprikaza"
+#. This label will not be displayed in the UI of stable versions
#: src/preferences.py
msgid "Development features"
msgstr "Funkcije u razvoju"
#: src/preferences.py
+msgid "Background color"
+msgstr "Boja pozadine"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
msgid "Layout"
msgstr "Raspored"
@@ -905,6 +1112,7 @@ msgstr "Raspored"
msgid "The recommended value is \"Automatic\"."
msgstr "Preporučena vrijednost je „Automatski”."
+#. It has to match what's written in the previous string.
#: src/preferences.py
msgid "Automatic"
msgstr "Automatski"
@@ -924,7 +1132,8 @@ msgid "Legacy"
msgstr "Stari"
#. "Legacy" is about the window layout, it means menubar+toolbar, you
-#. can translate it like if it was "Traditional"
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Legacy (symbolic icons)"
msgstr "Stari (ikone sa simbolima)"
@@ -937,6 +1146,7 @@ msgstr "Samo traka izbornika"
msgid "Toolbar only"
msgstr "Samo traka alata"
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Toolbar only (symbolic icons)"
msgstr "Samo traka alata (ikone sa simbolima)"
@@ -956,10 +1166,12 @@ msgstr "%s cm"
msgid "%s in"
msgstr "%s in"
+#. Context: the path of the edited file
#: src/properties.py
msgid "Path"
msgstr "Staza"
+#. Context: the file format of the edited file
#: src/properties.py
msgid "Format"
msgstr "Format"
@@ -968,10 +1180,69 @@ msgstr "Format"
msgid "Colorspace"
msgstr "Prostor boje"
+#. Context: an invalid colorspace format
#: src/properties.py
msgid "Invalid format"
msgstr "Neispravan format"
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "Neuspjelo spremanje %s"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "Bezimeno"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "ovoj slici"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "Odbaci"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "Postoje nespremljene promjene u %s."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr ""
+
+#: src/saving_manager.py
+#, fuzzy
+msgid "Do you want to save anyway?"
+msgstr "Gdje želiš otvoriti %s?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr "Zamijeni"
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "Ovaj datotečni format ne podržava prozirne boje."
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr "Sliku možeš spremiti kao PNG datoteku ili zamijeni prozirnost s:"
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "Zamijeni prozirnost s:"
+
#: src/utilities.py
msgid "Transparent"
msgstr "Prozirno"
@@ -993,6 +1264,9 @@ msgstr "Narančasta"
msgid "Brown"
msgstr "Smeđa"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
#: src/utilities.py
msgid "Probably brown"
msgstr "Vjerojatno smeđa"
@@ -1025,31 +1299,23 @@ msgstr "Ljubičasta"
msgid "Cyan"
msgstr "Cijan"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
#: src/utilities.py
-msgid "Probably turquoise"
+msgid "Probably teal"
msgstr "Vjerojatno tirkizna"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
#: src/utilities.py
msgid "Unknown color name"
msgstr "Nepoznato ime boje"
#: src/utilities.py
-msgid "Replace"
-msgstr "Zamijeni"
-
-#: src/utilities.py
-msgid "This file format doesn't support transparent colors."
-msgstr "Ovaj datotečni format ne podržava prozirne boje."
-
-#: src/utilities.py
-msgid "You can save the image as a PNG file, or replace transparency with:"
-msgstr "Sliku možeš spremiti kao PNG datoteku ili zamijeni prozirnost s:"
-
-#: src/utilities.py
-msgid "Replace transparency with:"
-msgstr "Zamijeni prozirnost s:"
-
-#: src/utilities.py
msgid "All pictures"
msgstr "Sve slike"
@@ -1065,28 +1331,49 @@ msgstr "JPEG slike"
msgid "BMP images"
msgstr "BMP slike"
+#. To translators: it appears in tooltips over numerical inputs
#: src/utilities.py
msgid "percents"
msgstr "postoci"
-#. To translators: it's the angle measure unit
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
#: src/utilities.py
msgid "degrees"
msgstr "stupnjevi"
+#: src/utilities.py
+#, fuzzy, python-format
+msgid "%s isn't an image."
+msgstr "Otvori sliku"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr ""
+
+#. Context: an error message
#: src/window.py
#, python-format
msgid "Failed to load tool: %s"
msgstr "Neuspjelo učitavanje alata: %s"
#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr ""
+
+#: src/window.py
msgid "Modifications will take effect in the next new window."
msgstr "Promjene će stupiti na snagu u sljedećem novom prozoru."
#: src/window.py src/tools/abstract_tool.py
#: src/optionsbars/classic/optionsbar-classic.ui
#: src/tools/classic_tools/tool_eraser.py
-#: src/tools/classic_tools/tool_highlight.py
msgid "No options"
msgstr "Bez opcija"
@@ -1095,6 +1382,11 @@ msgid "Opened images"
msgstr "Otvorene slike"
#: src/window.py
+#, fuzzy, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "Greška pri pokretanju programa. Prijavi grešku."
+
+#: src/window.py
#, python-format
msgid "Loading %s"
msgstr "Učitava se %s"
@@ -1108,54 +1400,38 @@ msgstr "Nova kartica"
msgid "Discard changes"
msgstr "Odbaci promjene"
-#: src/window.py
-#, python-format
-msgid "There are unsaved modifications to %s."
-msgstr "Postoje nespremljene promjene u %s."
-
+#. Context: %s will be replaced by the name of a file.
#: src/window.py
#, python-format
msgid "Where do you want to open %s?"
msgstr "Gdje želiš otvoriti %s?"
-#: src/window.py
-msgid "Open a picture"
-msgstr "Otvori jednu sliku"
-
#. Context for translation:
#. "What do you want to do with *these files*?"
#: src/window.py
msgid "these files"
msgstr "ovim datotekama"
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
#: src/window.py
#, python-format
msgid "What do you want to do with %s?"
msgstr "Što želiš uraditi s %s?"
-#. else the exception was raised because an actual error occured, or
-#. the user clicked on "cancel"
-#: src/window.py
-#, python-format
-msgid "Failed to save %s"
-msgstr "Neuspjelo spremanje %s"
-
-#: src/window.py
-msgid "Untitled"
-msgstr "Bezimeno"
-
-#. Context: the sentence "There are unsaved modifications to %s."
#: src/window.py
-msgid "this picture"
-msgstr "ovoj slici"
+#, fuzzy
+msgid "Image copied to clipboard"
+msgstr "Uredi sliku u međuspremniku"
#: src/window.py
-msgid "Discard"
-msgstr "Odbaci"
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr ""
#: src/window.py
-msgid "Save picture as…"
-msgstr "Spremi sliku kao …"
+#, fuzzy
+msgid "Reload"
+msgstr "Ponovo učitaj datoteku"
#: src/window.py
msgid "Import a picture"
@@ -1165,6 +1441,12 @@ msgstr "Uvezi jednu sliku"
msgid "Required tool is not available"
msgstr "Potrebni alat nije dostupan"
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
+
#: src/tools/utilities_paths.py
msgid "Continue"
msgstr "Nastavi"
@@ -1183,13 +1465,15 @@ msgstr ""
"Želiš li prekinuti operaciju ili pustiti da se alat nastavi boriti sa "
"zadatkom?"
+#. Context: fill a shape with the color of the left click
#: src/optionsbars/classic/optionsbar_color_popover.py
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Main color"
msgstr "Glavna boja"
-#. if state_as_string == 'secondary':
+#. Context: fill a shape with the color of the right click
#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Secondary color"
msgstr "Sporedna boja"
@@ -1199,8 +1483,8 @@ msgid "Tool size"
msgstr "Veličina alata"
#: src/optionsbars/classic/optionsbar-classic.ui
-#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-filters.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
msgid "Preview"
msgstr "Pretprikaz"
@@ -1221,160 +1505,175 @@ msgid "Use this editor by default"
msgstr "Standardno koristi ovaj uređivač"
#: src/optionsbars/selection/optionsbar-selection.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "More actions"
msgstr "Daljnje radnje"
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
msgid "Apply"
msgstr "Primijeni"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "Daljnje opcije"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr ""
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "Prozirnost"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Select a filter…"
msgstr "Odaberi filtar …"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Saturation"
msgstr "Zasićenost"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blur radius"
msgstr "Radijus mutnoće"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-msgid "Transparency"
-msgstr "Prozirnost"
-
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Change saturation"
msgstr "Promijeni zasićenost"
#. Context: a filter adding like a light veil on the image
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Veil"
msgstr "Veo"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
msgid "Add transparency"
msgstr "Dodaj prozirnost"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Invert colors"
msgstr "Invertiraj boje"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blurring"
msgstr "Zamućivanje"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Fast blur"
msgstr "Brza mutnoća"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Slow blur"
msgstr "Spora mutnoća"
#. Context: a filter that censors the image with some kind of tiles
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-msgid "Pixelisation"
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
msgstr "Pikselizacija"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Blur direction"
msgstr "Smjer mutnoće"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Horizontal"
msgstr "Vodoravno"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Vertical"
msgstr "Okomito"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "No direction"
msgstr "Bez smjera"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle (degrees)"
msgstr "Kut (u stupnjevima)"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle"
msgstr "Kut"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate left"
msgstr "Okreni lijevo"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate right"
msgstr "Okreni desno"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip horizontally"
msgstr "Preokreni vodoravno"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip vertically"
msgstr "Preokreni okomito"
-#: src/optionsbars/canvas/optionsbar-scale.ui
-msgid "More options"
-msgstr "Daljnje opcije"
-
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Keep proportions"
msgstr "Zadrži omjer"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Always [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Always"
msgstr "Uvijek"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "[Keep proportions only] when scaling from corners"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "When scaling from corners"
msgstr "Pri skaliranju iz kutova"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Never [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Never"
msgstr "Nikada"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Horizontal deformation"
msgstr "Vodoravno izobličenje"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Vertical deformation"
msgstr "Okomito izobličenje"
+#: src/tools/ui/selection.ui
+#, fuzzy
+msgid "Transform"
+msgstr "Prozirno"
+
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
msgid "Line shape"
msgstr "Oblik crte"
+#. Context: this is the name of a line shape
#. Default values
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
@@ -1382,80 +1681,175 @@ msgstr "Oblik crte"
msgid "Round"
msgstr "Zaobljeno"
+#. Context: this is the name of a line shape
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Thin"
-msgstr "Tanko"
-
-#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
msgid "Square"
msgstr "Kvardatično"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "No arrow"
+msgstr "Strelica"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "Double arrow"
+msgstr "Iscrtkana strelica"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-msgid "Use dashes"
+#, fuzzy
+msgid "No dashes"
msgstr "Koristi crtice"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
-msgid "Arrow"
-msgstr "Strelica"
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Simple dashes"
+msgstr "Koristi crtice"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-shape.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Long dashes"
+msgstr "Koristi crtice"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Short dashes"
+msgstr "Koristi crtice"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
msgid "Antialiasing"
msgstr "Zaglađivanje rubova"
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Dark text on light background"
+msgstr "Pravokutna pozadina"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr ""
+
#: src/tools/ui/tool-line.ui
msgid "Color gradient"
msgstr "Gradijent u boji"
+#. Context: title for the list of the possible painting algorithms.
#: src/tools/ui/tool-paint.ui
msgid "Behavior"
msgstr "Način rada"
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
#: src/tools/ui/tool-paint.ui
msgid "Encircle and fill"
msgstr "Okruži i ispuni"
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
#: src/tools/ui/tool-paint.ui
msgid "Erase and replace"
msgstr "Izbriši i zamijeni"
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
#: src/tools/ui/tool-paint.ui
-msgid "Clipping"
-msgstr "Rezanje"
+#, fuzzy
+msgid "Entire image"
+msgstr "Otvorene slike"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rectangle"
-msgstr "Pravokutnik"
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+#, fuzzy
+msgid "Remove color"
+msgstr "Neobrađena izvorna boja"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rounded rectangle"
-msgstr "Obli pravokutnik"
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr ""
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Oval"
-msgstr "Oval"
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "Krug"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Polygon"
-msgstr "Mnogokut"
+#, fuzzy
+msgid "Solid outline"
+msgstr "Prazna kontura"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Free shape"
-msgstr "Prostoručni oblik"
+#, fuzzy
+msgid "Dashed outline"
+msgstr "Iscrtkana strelica"
+#. if state_as_string == 'none':
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Circle"
-msgstr "Krug"
+#, fuzzy
+msgid "No outline"
+msgstr "Kontura"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Empty outline"
-msgstr "Prazna kontura"
+#, fuzzy
+msgid "Empty shape"
+msgstr "Prazno"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Horizontal gradient"
@@ -1469,6 +1863,26 @@ msgstr "Okomiti gradijent"
msgid "Radial gradient"
msgstr "Kružni gradijent"
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "Pravokutnik"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr "Obli pravokutnik"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "Oval"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "Mnogokut"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "Prostoručni oblik"
+
#: src/tools/ui/tool-shape.ui
msgid "Close shape"
msgstr "Zatvori oblik"
@@ -1482,6 +1896,11 @@ msgid "Font"
msgstr "Font"
#: src/tools/ui/tool-text.ui
+#, fuzzy
+msgid "Select a font…"
+msgstr "Odaberi filtar …"
+
+#: src/tools/ui/tool-text.ui
msgid "Italic"
msgstr "Kurziv"
@@ -1489,34 +1908,31 @@ msgstr "Kurziv"
msgid "Bold"
msgstr "Podebljano"
+#. Context: the types of background behind the inserted text
#: src/tools/ui/tool-text.ui
msgid "Background"
msgstr "Pozadina"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "No background"
msgstr "Bez pozadine"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Shadow"
msgstr "Sjena"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Outline"
msgstr "Kontura"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Rectangle background"
msgstr "Pravokutna pozadina"
-#: src/tools/ui/selection.ui
-msgid "Edit"
-msgstr "Uredi"
-
-#: src/tools/ui/selection.ui
-msgid "Flip"
-msgstr "Preokreni"
-
#: src/tools/classic_tools/tool_arc.py
msgid "Curve"
msgstr "Krivulja"
@@ -1530,10 +1946,19 @@ msgid "Dashed arrow"
msgstr "Iscrtkana strelica"
#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "Strelica"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
#: src/tools/classic_tools/tool_pencil.py
msgid "Dashed"
msgstr "Iscrtkano"
+#: src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Highlighter options"
+msgstr "Isticanje"
+
#: src/tools/classic_tools/tool_line.py
msgid "Line"
msgstr "Crta"
@@ -1550,6 +1975,11 @@ msgstr "Opcije za crtanje"
msgid "Click on an area to replace its color by transparency"
msgstr "Klikni na područje čiju boju želiš zamijeniti s prozirnošću"
+#: src/tools/classic_tools/tool_paint.py
+#, fuzzy
+msgid "Click on the canvas to entirely paint it"
+msgstr "Za zatvaranje oblika, klikni na njegovu prvu točku."
+
#: src/tools/classic_tools/tool_pencil.py
msgid "Pencil"
msgstr "Olovka"
@@ -1558,15 +1988,21 @@ msgstr "Olovka"
msgid "Pencil options"
msgstr "Opcije za olovku"
+#: src/tools/classic_tools/tool_points.py
+#, fuzzy
+msgid "Points options"
+msgstr "Opcije za font"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr ""
+
#: src/tools/classic_tools/tool_shape.py
msgid "Shape"
msgstr "Oblik"
#: src/tools/classic_tools/tool_shape.py
-msgid "Empty"
-msgstr "Prazno"
-
-#: src/tools/classic_tools/tool_shape.py
msgid "Shape options"
msgstr "Opcije za oblik"
@@ -1578,6 +2014,7 @@ msgstr "Za zatvaranje oblika, klikni na njegovu prvu točku."
msgid "Text"
msgstr "Tekst"
+#. XXX use "text options" instead
#: src/tools/classic_tools/tool_text.py
msgid "Font options"
msgstr "Opcije za font"
@@ -1594,34 +2031,66 @@ msgstr "Odaberi područje ili klikni desnom tipkom na platno"
msgid "Rectangle selection"
msgstr "Pravokutni odabir"
-#: src/tools/canvas_tools/abstract_canvas_tool.py
+#: src/tools/transform_tools/abstract_transform_tool.py
msgid "Error: invalid values"
msgstr "Greška: nevaljane vrijednosti"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the selection"
msgstr "Rezanje odabira"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the canvas"
msgstr "Rezanje platna"
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Click on the image to preview the selected filter"
msgstr "Klikni na sliku za pretprikaz odabranog filtra"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the selection"
msgstr "Okretanje odabira"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the canvas"
msgstr "Okretanje platna"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the selection"
msgstr "Skaliranje odabira"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the canvas"
msgstr "Skaliranje platna"
+
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr "Ukosi"
+
+#~ msgid "Flip"
+#~ msgstr "Preokreni"
+
+#, fuzzy
+#~ msgid "Add semi-transparency"
+#~ msgstr "Dodaj prozirnost"
+
+#~ msgid "Thin"
+#~ msgstr "Tanko"
+
+#~ msgid "Clipping"
+#~ msgstr "Rezanje"
+
+#~ msgid "Edit"
+#~ msgstr "Uredi"
+
+#~ msgid "Open a file"
+#~ msgstr "Otvori datoteku"
+
+#~ msgid "Save as"
+#~ msgstr "Spremi kao"
+
+#~ msgid "Keyboard"
+#~ msgstr "Tipkovnica"
diff --git a/po/hu.po b/po/hu.po
index 5f7bedb1..0db2f849 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: drawing\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-15 19:07+0200\n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
"PO-Revision-Date: 2019-12-12 10:58+0100\n"
"Last-Translator: Kálmán „KAMI” Szalai <kami911@gmail.com>\n"
"Language-Team: \n"
@@ -79,6 +79,75 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+"A 0.6.4 verzió számos kisebb hibajavítást, és új felhasználói felület nyelvi "
+"fordításokat hozott."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+"A 0.6.2 verzió számos kisebb hibajavítást, és új felhasználói felület nyelvi "
+"fordításokat hozott."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"Version 0.6 is a major update, with various important changes. The app is "
"more robust and has more tools:"
msgstr ""
@@ -100,8 +169,14 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
-"with several types of blur, color inversion, pixelisation, saturation and "
+"with several types of blur, color inversion, pixelization, saturation and "
"transparency."
msgstr ""
"A „Telítettség” eszköz le lett cserélve a „Szűrők”-re, amely sokkal "
@@ -120,24 +195,37 @@ msgstr ""
"A legfontosabb újítás, hogy a minitérkép segítségével nagyítható (vagy "
"kicsinyíthető) a kép a érintőtábla és az egérgörgő segítségével."
-#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid ""
-"Version 0.4.8 features several minor bug fixes, and various new translations."
-msgstr ""
-"A 0.4.8 verzió számos kisebb hibajavítást, és új felhasználói felület nyelvi "
-"fordításokat hozott."
-
#. This is just my name, do not translate it.
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid "Romain F. T."
msgstr "Romain F. T."
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr ""
+
#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
#: src/preferences.py
msgid "Preferences"
msgstr "Beállítások"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
msgid "Report a bug"
msgstr "Hibajelentés küldése"
@@ -186,19 +274,23 @@ msgstr "Új kép készítése a vágólapról"
msgid "Reload file"
msgstr "Fájl újratöltése"
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/properties.py
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
msgid "Image properties"
msgstr "Képtulajdonságok"
#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
-#: src/ui/win-menus.ui src/window.py
+#: src/ui/win-menus.ui src/saving_manager.py
msgid "Save"
msgstr "Mentés"
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+#, fuzzy
+msgid "Save without transparency"
+msgstr "Átlátszóság"
+
#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
-#: src/utilities.py
+#: src/saving_manager.py
msgid "Save as…"
msgstr "Mentés másként…"
@@ -207,7 +299,13 @@ msgstr "Mentés másként…"
msgid "Export as…"
msgstr "Exportálás…"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
msgid "Print"
msgstr "Nyomtatás"
@@ -292,20 +390,25 @@ msgid "Optimal Zoom"
msgstr "Automatikus nagyítás"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom Out"
msgstr "Kicsinyítés"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Original Zoom"
msgstr "Eredeti nagyítás"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom In"
msgstr "Nagyítás"
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
#: src/ui/app-menus.ui
msgid "Position"
msgstr "Pozíció"
@@ -341,12 +444,6 @@ msgid "Refresh"
msgstr "Frissítés"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
-#: src/preferences.py
-msgid "Show tools names"
-msgstr "Eszközök neveinek megjelenítése"
-
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/shortcuts.ui
-#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
msgid "Fullscreen"
msgstr "Teljes képernyő"
@@ -383,56 +480,65 @@ msgstr "Színek megcserélése"
msgid "Color application mode"
msgstr "Színválasztó"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Normal"
msgstr "Formátum"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Other modes"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Raw source color"
msgstr "Forrás szín"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Highlight"
msgstr "Magasság"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Difference"
msgstr "Különbség"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
-msgid "Photo manipulation"
+msgid "Photo-oriented modes"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Hue only"
msgstr "Csak menüsor"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Saturation only"
msgstr "Telítettség"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Hue and saturation"
msgstr "Telítettség"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Luminosity only"
msgstr ""
@@ -442,18 +548,18 @@ msgid "Don't use the colors but…"
msgstr ""
#. To translators: this is a verb
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Blur"
msgstr "Elmosás"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Erase"
msgstr "Radír"
-#: src/ui/app-menus.ui src/window.py
+#: src/ui/app-menus.ui
msgid "_Tools"
msgstr "_Eszközök"
@@ -461,6 +567,24 @@ msgstr "_Eszközök"
msgid "Previous tool"
msgstr "Előző szeköz"
+#: src/ui/app-menus.ui
+msgid "Active tool"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "Eszközök neveinek megjelenítése"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+#, fuzzy
+msgid "Smaller width"
+msgstr "Alapértelmezett szélesség"
+
#: src/ui/app-menus.ui src/window.py
msgid "_Options"
msgstr "_Beállítások"
@@ -469,22 +593,28 @@ msgstr "_Beállítások"
msgid "_Help"
msgstr "_Súgó"
+#. Context: open the index of all help pages
#: src/ui/app-menus.ui
msgid "Index"
msgstr "Index"
+#. Context: open the help page about general use of the app
#: src/ui/app-menus.ui
msgid "Basic help"
msgstr "Súgó"
+#. Context: open the help page about classic tools
#: src/ui/app-menus.ui
msgid "Help about tools"
msgstr "Súgó az eszközökről"
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
#: src/ui/app-menus.ui
msgid "Canvas and selection"
msgstr "Rajzvászon és kijelölés"
+#. Context: open the help page about the selection
#: src/ui/app-menus.ui
msgid "Help about selection"
msgstr "Súgó a kiválasztásról"
@@ -498,21 +628,26 @@ msgstr "Rajzolás alkalmazás névjegye"
msgid "Open"
msgstr "Megnyitás"
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr ""
+
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Width"
msgstr "Szélesség"
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Height"
msgstr "Magasság"
#: src/ui/new-image-dialog.ui
-msgid "Background color"
-msgstr "Háttérszín"
+#, fuzzy
+msgid "Color"
+msgstr "Színek"
#: src/ui/new-image-dialog.ui
msgid "Use these settings by default"
@@ -522,6 +657,8 @@ msgstr "Ezek legyenek az alapértelmezett beállítások"
msgid "100%"
msgstr "100%"
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
#: src/ui/properties.ui src/utilities.py
msgid "pixels"
msgstr "képpont"
@@ -538,7 +675,7 @@ msgstr "hüvelyk"
msgid "Images"
msgstr "Képek"
-#: src/ui/preferences.ui src/ui/shortcuts.ui
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "Tools"
msgstr "Eszközök"
@@ -558,30 +695,22 @@ msgid "Unselect"
msgstr "Kijelölések megszüntetése"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Crop"
msgstr "Levágás"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scale"
msgstr "Méretezés"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotate"
msgstr "Forgatás"
-#. In this context, "Skew" is the name of the tool changing rectangles
-#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
-#. "Stretch/Skew" dialog.
-#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_skew.py
-msgid "Skew"
-msgstr ""
-
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Filters"
msgstr "Szűrők"
@@ -591,8 +720,9 @@ msgid "Open As New Image"
msgstr "Megnyitás új képként"
#: src/ui/shortcuts.ui
-msgid "Keyboard"
-msgstr "Billentyűzet"
+#, fuzzy
+msgid "Keyboard Shortcuts"
+msgstr "Gyorsbillentyűk"
#: src/ui/shortcuts.ui
msgid "General"
@@ -603,31 +733,28 @@ msgid "Main menu"
msgstr "Főmenü"
#: src/ui/shortcuts.ui
-msgid "Editing"
-msgstr "Szerkesztés"
-
-#: src/ui/shortcuts.ui
msgid "Image"
msgstr "Kép"
-#: src/ui/shortcuts.ui
-msgid "Open a file"
-msgstr "Fájl megnyitása"
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "Kép megnyitása"
#: src/ui/shortcuts.ui
msgid "Reload image from disk"
msgstr ""
-#: src/ui/shortcuts.ui
-msgid "Save as"
-msgstr "Mentés másként"
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "Kép mentése másként…"
#: src/ui/shortcuts.ui
msgid "Close the active image"
msgstr "Aktív képnézet bezárása"
#: src/ui/shortcuts.ui
-msgid "Options menu"
+#, fuzzy
+msgid "Open the tool options menu"
msgstr "Beállítások menü"
#: src/ui/shortcuts.ui
@@ -635,18 +762,12 @@ msgid "Back to previous tool"
msgstr "Vissza az előző eszközhöz"
#: src/ui/shortcuts.ui
-msgid "Colors"
-msgstr "Színek"
-
-#. Label displayed in the keyboard shortcuts dialog
-#: src/ui/shortcuts.ui
-msgid "Edit the main color (left click)"
-msgstr "Elsődleges szín szerkesztése (bal kattintás)"
+msgid "Apply a transformation"
+msgstr ""
-#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Edit the secondary color (right click)"
-msgstr "Másodlagos szín szerkesztése (jobb kattintás)"
+msgid "History"
+msgstr ""
#: src/ui/shortcuts.ui
msgid "Selection"
@@ -663,17 +784,25 @@ msgid "Import a file as the selection"
msgstr "Fájl importálása kijelölésként"
#: src/ui/shortcuts.ui
-msgid "Tabs"
-msgstr ""
+msgid "Colors"
+msgstr "Színek"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Enter fullscreen mode"
-msgstr "Belépés a teljes képernyős módba"
+msgid "Edit the main color (left click)"
+msgstr "Elsődleges szín szerkesztése (bal kattintás)"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Exit fullscreen mode"
-msgstr "Kilépés a teljes képernyős módból"
+msgid "Edit the secondary color (right click)"
+msgstr "Másodlagos szín szerkesztése (jobb kattintás)"
+
+#: src/ui/shortcuts.ui
+msgid "Tabs"
+msgstr ""
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
#: src/ui/shortcuts.ui
msgid "Navigation"
msgstr "Navigáció"
@@ -682,10 +811,26 @@ msgstr "Navigáció"
msgid "Toggle the preview"
msgstr "Előnézet megjelenítése"
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr "Belépés a teljes képernyős módba"
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr "Kilépés a teljes képernyős módból"
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr ""
+
#: src/ui/win-menus.ui
msgid "Troubleshoot selection"
msgstr "Hibakeresés"
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr ""
+
#: src/ui/window.ui
msgid "Error starting the application, please report this bug."
msgstr ""
@@ -702,6 +847,12 @@ msgstr "„%s” _visszavonása"
msgid "Redo %s"
msgstr "„%s” újra"
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr ""
+
#: src/image.py
msgid "Can't reload a never-saved file from the disk."
msgstr ""
@@ -710,15 +861,15 @@ msgstr ""
msgid "Unsaved file"
msgstr "Mentetlen fájl"
-#: src/new_image_dialog.py src/utilities.py src/window.py
-#: src/tools/utilities_paths.py src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-crop.ui src/tools/ui/tool-filters.ui
-#: src/tools/ui/tool-rotate.ui src/tools/ui/tool-scale.ui
-#: src/tools/ui/tool-skew.ui
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
msgid "Cancel"
msgstr "Mégse"
@@ -727,19 +878,23 @@ msgstr "Mégse"
msgid "Create"
msgstr "Létrehozás"
+#. Description of a command line option
#: src/main.py
#, fuzzy
msgid "Show the app version"
msgstr "Előnézet megjelenítése"
+#. Description of a command line option
#: src/main.py
msgid "Open a new window"
msgstr "Megnyitás új ablakban"
+#. Description of a command line option
#: src/main.py
msgid "Open a new tab"
msgstr "Új lap megnyitása"
+#. Description of a command line option
#: src/main.py
msgid "Edit the clipboard content"
msgstr "Kép szerkesztése a vágólapról"
@@ -753,12 +908,14 @@ msgstr ""
msgid "Report bugs or ideas"
msgstr "Hibajelentés küldése"
-#. To tranlators: "translate" this by your name, it will be displayed
-#. in the "about" dialog
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
#: src/main.py
msgid "translator-credits"
msgstr "Kálmán „KAMI” Szalai <kami911@gmail.com>, 2019"
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
#: src/main.py
msgid "GNOME's \"Art Libre\" icon set authors"
msgstr ""
@@ -772,18 +929,25 @@ msgid "Official webpage"
msgstr "Hivatalos weboldal"
#: src/main.py
-#, python-format
-msgid "Error opening this file. Did you mean %s ?"
+#, fuzzy
+msgid "Error opening this file."
msgstr ""
"Hiba történt a fájl megnyitása során. Próbálja meg a(z) %s fájlt megnyitni?"
-#. This displays the zoom level, %s will be replaced with a number, while
-#. %% is just the symbol '%'
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr ""
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
#: src/minimap.py
#, python-format
msgid "%s%%"
msgstr "%s%%"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "New images"
msgstr "Új képek"
@@ -796,10 +960,17 @@ msgstr "Alapértelmezett szélesség"
msgid "Default height"
msgstr "Alapértelmezett magasság"
-#: src/preferences.py
-msgid "Default background"
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+#, fuzzy
+msgid "Default color"
msgstr "Alapértelmezett háttér"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Images saving"
msgstr "Képek mentése"
@@ -818,19 +989,23 @@ msgstr ""
"ilyen formátumban menti a képeket, milyen színre legyenek lecserélve az "
"átlátszó képpontok?"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "White"
msgstr "Fehér"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "Black"
msgstr "Fekete"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
msgid "Checkboard"
msgstr "Kockás"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
msgid "Nothing"
msgstr ""
@@ -843,13 +1018,15 @@ msgid "You can zoom with Ctrl+scrolling, or only scrolling."
msgstr ""
#: src/preferences.py
-msgid "Using keyboard shortcuts or touch gestures is possible too."
+msgid "See the user help manual for explanations."
msgstr ""
#: src/preferences.py
msgid "Use 'Ctrl' to zoom"
msgstr ""
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
#: src/preferences.py
msgid "Appearance"
msgstr "Megjelenés"
@@ -858,6 +1035,7 @@ msgstr "Megjelenés"
msgid "Use big icons"
msgstr "Nagy ikonok"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Additional tools"
msgstr "További eszközök"
@@ -871,31 +1049,51 @@ msgstr ""
"amennyire lenniük kellene, ezért alapértelmezés szerint nincsenek "
"bekapcsolva."
-#. In the meaning "a rubber eraser"
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
#: src/preferences.py src/tools/classic_tools/tool_eraser.py
msgid "Eraser"
msgstr "Radír"
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
#: src/preferences.py src/tools/classic_tools/tool_highlight.py
msgid "Highlighter"
msgstr ""
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr ""
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
#: src/preferences.py src/tools/selection_tools/select_free.py
msgid "Free selection"
msgstr "Szabad kijelölés"
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
#: src/preferences.py src/tools/selection_tools/select_color.py
msgid "Color selection"
msgstr "Színválasztó"
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
#: src/preferences.py src/tools/classic_tools/tool_picker.py
msgid "Color Picker"
msgstr "Színpipetta"
+#. Context: the name of a tool to fill an area of one color with an other
#: src/preferences.py src/tools/classic_tools/tool_paint.py
msgid "Paint"
msgstr "Festés"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Advanced options"
msgstr "Haladó beállítások"
@@ -904,11 +1102,18 @@ msgstr "Haladó beállítások"
msgid "Preview size"
msgstr "Előnézet mérete"
+#. This label will not be displayed in the UI of stable versions
#: src/preferences.py
msgid "Development features"
msgstr "Fejlesztés"
#: src/preferences.py
+msgid "Background color"
+msgstr "Háttérszín"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
msgid "Layout"
msgstr "Elrendezés"
@@ -916,6 +1121,7 @@ msgstr "Elrendezés"
msgid "The recommended value is \"Automatic\"."
msgstr "Az ajánlott érték: „Automatikus”."
+#. It has to match what's written in the previous string.
#: src/preferences.py
msgid "Automatic"
msgstr "Automatikus"
@@ -935,7 +1141,8 @@ msgid "Legacy"
msgstr "Örökölt"
#. "Legacy" is about the window layout, it means menubar+toolbar, you
-#. can translate it like if it was "Traditional"
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Legacy (symbolic icons)"
msgstr "Örökölt (szimbolikus ikonok)"
@@ -948,6 +1155,7 @@ msgstr "Csak menüsor"
msgid "Toolbar only"
msgstr "Csak eszköztár"
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Toolbar only (symbolic icons)"
msgstr "Csak eszköztár (szimbolikus ikonok)"
@@ -967,10 +1175,12 @@ msgstr ""
msgid "%s in"
msgstr ""
+#. Context: the path of the edited file
#: src/properties.py
msgid "Path"
msgstr "Útvonal"
+#. Context: the file format of the edited file
#: src/properties.py
msgid "Format"
msgstr "Formátum"
@@ -979,10 +1189,69 @@ msgstr "Formátum"
msgid "Colorspace"
msgstr "Színtér"
+#. Context: an invalid colorspace format
#: src/properties.py
msgid "Invalid format"
msgstr "Érvénytelen formátuma"
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "%s mentése meghiúsult"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "Névtelen"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "ez a kép"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "Eldobás"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "Mentetlen változtatások vannak a következőhöz: %s."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr ""
+
+#: src/saving_manager.py
+#, fuzzy
+msgid "Do you want to save anyway?"
+msgstr "Hova kívánja megnyitni a(z) %s képfájlt?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr ""
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "Ez a fájlformátum nem támogatja az átlátszó „színt”."
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "Átlátszóság helyettesítése ezzel:"
+
#: src/utilities.py
msgid "Transparent"
msgstr "Átlátszó"
@@ -1004,6 +1273,9 @@ msgstr "Narancs"
msgid "Brown"
msgstr "Barna"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
#: src/utilities.py
msgid "Probably brown"
msgstr "Talán barna"
@@ -1036,31 +1308,23 @@ msgstr "Bíbor"
msgid "Cyan"
msgstr "Ciánkék"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
#: src/utilities.py
-msgid "Probably turquoise"
+msgid "Probably teal"
msgstr "Talán türkizkék"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
#: src/utilities.py
msgid "Unknown color name"
msgstr "Ismeretlen szín név"
#: src/utilities.py
-msgid "Replace"
-msgstr ""
-
-#: src/utilities.py
-msgid "This file format doesn't support transparent colors."
-msgstr "Ez a fájlformátum nem támogatja az átlátszó „színt”."
-
-#: src/utilities.py
-msgid "You can save the image as a PNG file, or replace transparency with:"
-msgstr ""
-
-#: src/utilities.py
-msgid "Replace transparency with:"
-msgstr "Átlátszóság helyettesítése ezzel:"
-
-#: src/utilities.py
msgid "All pictures"
msgstr "Minden kép"
@@ -1076,22 +1340,44 @@ msgstr "JPEG-képek"
msgid "BMP images"
msgstr "BMP-képek"
+#. To translators: it appears in tooltips over numerical inputs
#: src/utilities.py
msgid "percents"
msgstr "százalék"
-#. To translators: it's the angle measure unit
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
#: src/utilities.py
#, fuzzy
msgid "degrees"
msgstr "Szög (fok)"
+#: src/utilities.py
+#, fuzzy, python-format
+msgid "%s isn't an image."
+msgstr "Képfájl megnyitása"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr ""
+
+#. Context: an error message
#: src/window.py
#, python-format
msgid "Failed to load tool: %s"
msgstr "Nem sikerült betölteni az eszközt: %s"
#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr ""
+
+#: src/window.py
msgid "Modifications will take effect in the next new window."
msgstr ""
"A beállított módosítások a következő megnyitott új ablaknál jutnak érvényre."
@@ -1099,7 +1385,6 @@ msgstr ""
#: src/window.py src/tools/abstract_tool.py
#: src/optionsbars/classic/optionsbar-classic.ui
#: src/tools/classic_tools/tool_eraser.py
-#: src/tools/classic_tools/tool_highlight.py
msgid "No options"
msgstr "Nincs beállítás"
@@ -1108,6 +1393,13 @@ msgid "Opened images"
msgstr "Megnyitott képek"
#: src/window.py
+#, fuzzy, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr ""
+"Hiba lépett fel az alkalmazás elindítása során. Kérem jelentse be ezt a "
+"hibát a fejlesztőknek!"
+
+#: src/window.py
#, python-format
msgid "Loading %s"
msgstr "%s fájl betöltése"
@@ -1121,54 +1413,38 @@ msgstr "Új lap"
msgid "Discard changes"
msgstr "Módosítások elvetése"
-#: src/window.py
-#, python-format
-msgid "There are unsaved modifications to %s."
-msgstr "Mentetlen változtatások vannak a következőhöz: %s."
-
+#. Context: %s will be replaced by the name of a file.
#: src/window.py
#, python-format
msgid "Where do you want to open %s?"
msgstr "Hova kívánja megnyitni a(z) %s képfájlt?"
-#: src/window.py
-msgid "Open a picture"
-msgstr "Kép megnyitása"
-
#. Context for translation:
#. "What do you want to do with *these files*?"
#: src/window.py
msgid "these files"
msgstr "ezek a fájlok"
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
#: src/window.py
#, python-format
msgid "What do you want to do with %s?"
msgstr "Mit szeretne tenni a(z) %s képpel?"
-#. else the exception was raised because an actual error occured, or
-#. the user clicked on "cancel"
-#: src/window.py
-#, python-format
-msgid "Failed to save %s"
-msgstr "%s mentése meghiúsult"
-
-#: src/window.py
-msgid "Untitled"
-msgstr "Névtelen"
-
-#. Context: the sentence "There are unsaved modifications to %s."
#: src/window.py
-msgid "this picture"
-msgstr "ez a kép"
+#, fuzzy
+msgid "Image copied to clipboard"
+msgstr "Kép szerkesztése a vágólapról"
#: src/window.py
-msgid "Discard"
-msgstr "Eldobás"
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr ""
#: src/window.py
-msgid "Save picture as…"
-msgstr "Kép mentése másként…"
+#, fuzzy
+msgid "Reload"
+msgstr "Fájl újratöltése"
#: src/window.py
msgid "Import a picture"
@@ -1179,6 +1455,12 @@ msgstr "Kép importálása"
msgid "Required tool is not available"
msgstr "Teljes képernyős mód elérhető."
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
+
#: src/tools/utilities_paths.py
msgid "Continue"
msgstr "Tovább"
@@ -1198,13 +1480,15 @@ msgstr ""
"Meg kívánja szakítani a műveletet, vagy az eszköz próbálja meg legjobb "
"tudása szerint elvégezni a feladatot?"
+#. Context: fill a shape with the color of the left click
#: src/optionsbars/classic/optionsbar_color_popover.py
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Main color"
msgstr "Elsődleges szín"
-#. if state_as_string == 'secondary':
+#. Context: fill a shape with the color of the right click
#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Secondary color"
msgstr "Másodlagos szín"
@@ -1214,8 +1498,8 @@ msgid "Tool size"
msgstr "Eszközméret"
#: src/optionsbars/classic/optionsbar-classic.ui
-#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-filters.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
msgid "Preview"
msgstr "Előnézet"
@@ -1236,171 +1520,186 @@ msgid "Use this editor by default"
msgstr "Legyen ez az lapértelmezett szerkesztő"
#: src/optionsbars/selection/optionsbar-selection.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "More actions"
msgstr "További műveletek"
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
msgid "Apply"
msgstr "Alkalmaz"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "További lehetőségek"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr ""
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "Átlátszóság"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Select a filter…"
msgstr "Válassza ki a szűrőt…"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Saturation"
msgstr "Telítettség"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blur radius"
msgstr "Elmosás sugara"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-msgid "Transparency"
-msgstr "Átlátszóság"
-
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
#, fuzzy
msgid "Change saturation"
msgstr "Telítettség"
#. Context: a filter adding like a light veil on the image
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Veil"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
#, fuzzy
msgid "Add transparency"
msgstr "Átlátszóság"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Invert colors"
msgstr "Színek invertálása"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
#, fuzzy
msgid "Blurring"
msgstr "Elmosás"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Fast blur"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Slow blur"
msgstr ""
#. Context: a filter that censors the image with some kind of tiles
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-msgid "Pixelisation"
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
msgstr "Pixelesítés"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
#, fuzzy
msgid "Blur direction"
msgstr "Színválasztó"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
#, fuzzy
msgid "Horizontal"
msgstr "Vízszintes elmosás"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
#, fuzzy
msgid "Vertical"
msgstr "Függőleges elmosás"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
#, fuzzy
msgid "No direction"
msgstr "Színválasztó"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle (degrees)"
msgstr "Szög (fok)"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle"
msgstr "Szög"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate left"
msgstr "Forgatás balra"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate right"
msgstr "Forgatás jobbra"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip horizontally"
msgstr "Vízszintes tükrözés"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip vertically"
msgstr "Függőleges tükrözés"
-#: src/optionsbars/canvas/optionsbar-scale.ui
-msgid "More options"
-msgstr "További lehetőségek"
-
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
#, fuzzy
msgid "Keep proportions"
msgstr "Arányok megtartása"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Always [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Always"
msgstr ""
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "[Keep proportions only] when scaling from corners"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "When scaling from corners"
msgstr ""
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Never [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Never"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
#, fuzzy
msgid "Horizontal deformation"
msgstr "Vízszintes színátmenet"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
#, fuzzy
msgid "Vertical deformation"
msgstr "Függőleges színátmenet"
+#: src/tools/ui/selection.ui
+#, fuzzy
+msgid "Transform"
+msgstr "Átlátszó"
+
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
#, fuzzy
msgid "Line shape"
msgstr "Alakzat"
+#. Context: this is the name of a line shape
#. Default values
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
@@ -1408,82 +1707,176 @@ msgstr "Alakzat"
msgid "Round"
msgstr "Kerekítés"
+#. Context: this is the name of a line shape
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Thin"
-msgstr "Vékony"
-
-#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
msgid "Square"
msgstr "Négyzet"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "No arrow"
+msgstr "Nyíl"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "Double arrow"
+msgstr "Szaggatott nyíl"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-msgid "Use dashes"
+#, fuzzy
+msgid "No dashes"
msgstr "Vonalkázás"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
-msgid "Arrow"
-msgstr "Nyíl"
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Simple dashes"
+msgstr "Vonalkázás"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-shape.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Long dashes"
+msgstr "Vonalkázás"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Short dashes"
+msgstr "Vonalkázás"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
msgid "Antialiasing"
msgstr ""
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Dark text on light background"
+msgstr "Alapértelmezett háttér"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr ""
+
#: src/tools/ui/tool-line.ui
msgid "Color gradient"
msgstr "Színátmenet"
+#. Context: title for the list of the possible painting algorithms.
#: src/tools/ui/tool-paint.ui
msgid "Behavior"
msgstr "Viselkedés"
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
#: src/tools/ui/tool-paint.ui
msgid "Encircle and fill"
msgstr "Kitöltés"
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
#: src/tools/ui/tool-paint.ui
msgid "Erase and replace"
msgstr "Törlés és csere"
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
#: src/tools/ui/tool-paint.ui
-msgid "Clipping"
-msgstr "Vágás"
-
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rectangle"
-msgstr "Téglalap"
+#, fuzzy
+msgid "Entire image"
+msgstr "Megnyitott képek"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
#, fuzzy
-msgid "Rounded rectangle"
-msgstr "Téglalap"
+msgid "Remove color"
+msgstr "Forrás szín"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Oval"
-msgstr "Ovális"
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr ""
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Polygon"
-msgstr "Sokszög"
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "Kör"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Free shape"
-msgstr "Szabad alakzat"
+#, fuzzy
+msgid "Solid outline"
+msgstr "Nincs körvonal"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Circle"
-msgstr "Kör"
+#, fuzzy
+msgid "Dashed outline"
+msgstr "Szaggatott nyíl"
+#. if state_as_string == 'none':
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Empty outline"
+#, fuzzy
+msgid "No outline"
msgstr "Nincs körvonal"
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr "Kitöltés"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+#, fuzzy
+msgid "Empty shape"
+msgstr "Kiürítés"
+
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Horizontal gradient"
msgstr "Vízszintes színátmenet"
@@ -1496,6 +1889,27 @@ msgstr "Függőleges színátmenet"
msgid "Radial gradient"
msgstr "Sugaras színátmenet"
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "Téglalap"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+#, fuzzy
+msgid "Rounded rectangle"
+msgstr "Téglalap"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "Ovális"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "Sokszög"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "Szabad alakzat"
+
#: src/tools/ui/tool-shape.ui
msgid "Close shape"
msgstr "Alak bezárása"
@@ -1509,6 +1923,11 @@ msgid "Font"
msgstr "Betűkészlet"
#: src/tools/ui/tool-text.ui
+#, fuzzy
+msgid "Select a font…"
+msgstr "Válassza ki a szűrőt…"
+
+#: src/tools/ui/tool-text.ui
msgid "Italic"
msgstr "Dőlt"
@@ -1516,36 +1935,33 @@ msgstr "Dőlt"
msgid "Bold"
msgstr "Félkövér"
+#. Context: the types of background behind the inserted text
#: src/tools/ui/tool-text.ui
msgid "Background"
msgstr "Háttér"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "No background"
msgstr "Nincs háttér"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Shadow"
msgstr ""
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
#, fuzzy
msgid "Outline"
msgstr "Nincs körvonal"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
#, fuzzy
msgid "Rectangle background"
msgstr "Alapértelmezett háttér"
-#: src/tools/ui/selection.ui
-msgid "Edit"
-msgstr "Szerkesztés"
-
-#: src/tools/ui/selection.ui
-msgid "Flip"
-msgstr "Megfordítás"
-
#: src/tools/classic_tools/tool_arc.py
msgid "Curve"
msgstr "Görbe"
@@ -1559,10 +1975,19 @@ msgid "Dashed arrow"
msgstr "Szaggatott nyíl"
#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "Nyíl"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
#: src/tools/classic_tools/tool_pencil.py
msgid "Dashed"
msgstr "Szaggatott"
+#: src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Highlighter options"
+msgstr "Vonal beállítások"
+
#: src/tools/classic_tools/tool_line.py
msgid "Line"
msgstr "Vonal"
@@ -1579,6 +2004,11 @@ msgstr "Festés beállítások"
msgid "Click on an area to replace its color by transparency"
msgstr "Kattintson egy területre, hogy a színét átlátszóra cserélje"
+#: src/tools/classic_tools/tool_paint.py
+#, fuzzy
+msgid "Click on the canvas to entirely paint it"
+msgstr "Az alakzat bezárásához kattintson az első pontjára."
+
#: src/tools/classic_tools/tool_pencil.py
msgid "Pencil"
msgstr "Ceruza"
@@ -1587,15 +2017,21 @@ msgstr "Ceruza"
msgid "Pencil options"
msgstr "Ceruza beállítások"
+#: src/tools/classic_tools/tool_points.py
+#, fuzzy
+msgid "Points options"
+msgstr "Betűbeállítások"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr ""
+
#: src/tools/classic_tools/tool_shape.py
msgid "Shape"
msgstr "Alakzat"
#: src/tools/classic_tools/tool_shape.py
-msgid "Empty"
-msgstr "Kiürítés"
-
-#: src/tools/classic_tools/tool_shape.py
msgid "Shape options"
msgstr "Alakzat beállítások"
@@ -1607,6 +2043,7 @@ msgstr "Az alakzat bezárásához kattintson az első pontjára."
msgid "Text"
msgstr "Szöveg"
+#. XXX use "text options" instead
#: src/tools/classic_tools/tool_text.py
msgid "Font options"
msgstr "Betűbeállítások"
@@ -1625,47 +2062,73 @@ msgstr ""
msgid "Rectangle selection"
msgstr "Téglalap kijelölés"
-#: src/tools/canvas_tools/abstract_canvas_tool.py
+#: src/tools/transform_tools/abstract_transform_tool.py
msgid "Error: invalid values"
msgstr ""
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the selection"
msgstr "Kijelölés vágása"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the canvas"
msgstr "Rajzvászon vágása"
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Click on the image to preview the selected filter"
msgstr "Kattintson a képre a kiválasztott szűrő előnézetéhez"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the selection"
msgstr "Kijelölés forgatása"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the canvas"
msgstr "Rajzvászon forgatása"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the selection"
msgstr "Kijelölés átméretezése"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the canvas"
msgstr "Rajzvászon átméretezése"
-#~ msgid "Classic"
-#~ msgstr "Klasszikus"
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr ""
+
+#~ msgid "Flip"
+#~ msgstr "Megfordítás"
+
+#, fuzzy
+#~ msgid "Add semi-transparency"
+#~ msgstr "Átlátszóság"
+
+#~ msgid "Thin"
+#~ msgstr "Vékony"
+
+#~ msgid "Clipping"
+#~ msgstr "Vágás"
+
+#~ msgid "Edit"
+#~ msgstr "Szerkesztés"
+
+#~ msgid "Open a file"
+#~ msgstr "Fájl megnyitása"
+
+#~ msgid "Save as"
+#~ msgstr "Mentés másként"
+
+#~ msgid "Keyboard"
+#~ msgstr "Billentyűzet"
#~ msgid "Close"
#~ msgstr "Bezár"
-#~ msgid "Filling"
-#~ msgstr "Kitöltés"
-
#~ msgid "Freehand"
#~ msgstr "Szabadkézi"
diff --git a/po/id.po b/po/id.po
new file mode 100644
index 00000000..fbd95055
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,2031 @@
+# Indonesian translations for drawing package.
+# Copyright (C) 2020 THE drawing'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the drawing package.
+# Ghani Rafif <ghani.rafif.2112@gmail.com>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: drawing\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
+"PO-Revision-Date: 2020-10-25 01:41+0700\n"
+"Last-Translator: Ghani Rafif <ghani.rafif.2112@gmail.com>\n"
+"Language-Team: Indonesian\n"
+"Language: id\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Gtranslator 3.38.0\n"
+
+#: data/com.github.maoschanz.drawing.desktop.in
+#: data/com.github.maoschanz.drawing.appdata.xml.in src/deco_manager.py
+#: src/main.py
+msgid "Drawing"
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "Simple drawing utility"
+msgstr "Utilitas menggambar yang sederhana"
+
+#. Icon name, do not translate
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "com.github.maoschanz.drawing"
+msgstr "com.github.maoschanz.drawing"
+
+#. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons.
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "Paint;Sketch;Pencil;"
+msgstr "Paint;Sketsa;Pensil;"
+
+#. Context: answer to "where do you want to open the image?"
+#: data/com.github.maoschanz.drawing.desktop.in src/ui/app-menus.ui
+#: src/ui/shortcuts.ui src/ui/win-menus.ui src/window.py
+msgid "New Window"
+msgstr "Jendela Baru"
+
+#: data/com.github.maoschanz.drawing.desktop.in src/ui/app-menus.ui
+#: src/ui/headerbar.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/ui/window.ui
+msgid "New Image"
+msgstr "Gambar Baru"
+
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "Edit Image in Clipboard"
+msgstr "Sunting Gambar di papan klip"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "A drawing application for the GNOME desktop"
+msgstr "Aplikasi menggambar untuk destop GNOME"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types."
+msgstr ""
+"\"Drawing\" adalah pengolah gambar dasar yang mendukung tipe berkas PNG, "
+"JPEG, dan BMP."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It allows you to draw or edit pictures with tools such as pencil, line or "
+"arc (with various options), selection (cut/copy/paste/drag/…), shapes "
+"(rectangle, circle, polygon, …), text insertion, resizing, cropping, "
+"rotating, …"
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr "Aksi untuk menyalin seluruh gambar ke papan klip telah ditambahkan."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6 is a major update, with various important changes. The app is "
+"more robust and has more tools:"
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Rectangle selection and freehand selection are now distinct tools, and the "
+"'rotate' tool now supports any angle and handles horizontal or vertical "
+"flipping."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The numerous tools producing shapes (circle, rectangle, polygon, …), have "
+"been merged into a single, more consistent 'shape' tool, along with 'rounded "
+"rectangle' and 'ellipse'. Their filling options now include various types of "
+"gradients."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
+"with several types of blur, color inversion, pixelization, saturation and "
+"transparency."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "A fullscreen mode is now available."
+msgstr "Mode layar penuh sekarang telah tersedia."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The most prominent new feature is the ability to zoom in (or out) on the "
+"image, using the minimap, the touchpad or the mouse wheel."
+msgstr ""
+
+#. This is just my name, do not translate it.
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Romain F. T."
+msgstr "Romain F. T."
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Preferences"
+msgstr "Prefrensi"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
+msgid "Report a bug"
+msgstr "Laporkan kutu"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Shortcuts"
+msgstr "Pintasan"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Help"
+msgstr "Bantuan"
+
+#: src/ui/app-menus.ui
+msgid "About"
+msgstr "Tentang"
+
+#: src/ui/app-menus.ui
+msgid "Quit"
+msgstr "Keluar"
+
+#: src/ui/app-menus.ui
+msgid "_File"
+msgstr "_Berkas"
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
+msgid "Open an image"
+msgstr "Buka gambar"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "New Blank Image"
+msgstr "Gambar Kosong Baru"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/new_image_dialog.py
+msgid "New Image With Custom Size"
+msgstr "Gambar Baru Dengan Ukuran Khusus"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "New Image From Selection"
+msgstr "Gambar Baru Dari Seleksi"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "New Image From Clipboard"
+msgstr "Gambar Baru Dari Papan Klip"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Reload file"
+msgstr "Muat ulang berkas"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
+msgid "Image properties"
+msgstr "Properti gambar"
+
+#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
+#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui src/saving_manager.py
+msgid "Save"
+msgstr "Simpan"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Save without transparency"
+msgstr "Simpan tanpa transparansi"
+
+#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
+#: src/saving_manager.py
+msgid "Save as…"
+msgstr "Simpan sebagai..."
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/win-menus.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Export as…"
+msgstr "Ekspor sebagai..."
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr "Salin ke papan klip"
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
+msgid "Print"
+msgstr "Cetak"
+
+#: src/ui/app-menus.ui
+msgid "Close Image"
+msgstr "Tutup Gambar"
+
+#: src/ui/app-menus.ui
+msgid "Close Window"
+msgstr "Tutup Jendela"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Quit all windows"
+msgstr "Tinggalkan semua jendela"
+
+#: src/ui/app-menus.ui
+msgid "_Edit"
+msgstr "_Sunting"
+
+#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
+#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui src/deco_manager.py
+msgid "Undo"
+msgstr "Nirjadikan"
+
+#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
+#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui src/deco_manager.py
+msgid "Redo"
+msgstr "Jadikan lagi"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Rebuild from history"
+msgstr "Bangun ulang dari riwayat"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Select all"
+msgstr "Pilih semua"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Cut"
+msgstr "Potong"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Copy"
+msgstr "Salin"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Delete"
+msgstr "Hapus"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+msgid "Paste"
+msgstr "Tempel"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/window.py
+#: src/optionsbars/selection/optionsbar-selection.ui
+msgid "Import"
+msgstr "Impor"
+
+#: src/ui/app-menus.ui
+msgid "_View"
+msgstr "_Tampilan"
+
+#: src/ui/app-menus.ui
+msgid "Show the preview"
+msgstr "Tampilkan pratinjau"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/preferences.py
+msgid "Zoom"
+msgstr "Zum"
+
+#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui
+msgid "Optimal Zoom"
+msgstr "Zum Optimal"
+
+#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Zoom Out"
+msgstr "Perkecil"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Original Zoom"
+msgstr "Zum Asli"
+
+#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Zoom In"
+msgstr "Perbesar"
+
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
+#: src/ui/app-menus.ui
+msgid "Position"
+msgstr "Posisi"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Left"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Up"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Down"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Right"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Tab at the left"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Tab at the right"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Refresh"
+msgstr "Segarkan"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Fullscreen"
+msgstr "Layar penuh"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Exit fullscreen"
+msgstr "Keluar dari layar penuh"
+
+#: src/ui/app-menus.ui
+msgid "_Colors"
+msgstr "_Warna"
+
+#: src/ui/app-menus.ui
+msgid "Edit Main Color…"
+msgstr "Sunting Warna Utama..."
+
+#: src/ui/app-menus.ui
+msgid "Edit Secondary Color…"
+msgstr "Sunting Warna Sekunder..."
+
+#: src/ui/app-menus.ui
+msgid "Use color editor by default"
+msgstr "Gunakan penyunting warna secara bawaan"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+#: src/optionsbars/classic/optionsbar-classic.ui
+msgid "Exchange colors"
+msgstr "Tukar warna"
+
+#: src/ui/app-menus.ui
+msgid "Color application mode"
+msgstr ""
+
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Normal"
+msgstr "Normal"
+
+#. Context: possible ways to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Other modes"
+msgstr "Mode lain"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Raw source color"
+msgstr ""
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Highlight"
+msgstr "Sorot"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Difference"
+msgstr "Perbedaan"
+
+#. Context: possible ways to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Photo-oriented modes"
+msgstr ""
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Hue only"
+msgstr ""
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Saturation only"
+msgstr ""
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Hue and saturation"
+msgstr "Hue dan penjenuhan"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Luminosity only"
+msgstr ""
+
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Don't use the colors but…"
+msgstr ""
+
+#. To translators: this is a verb
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Blur"
+msgstr "Kabur"
+
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Erase"
+msgstr "Hapus"
+
+#: src/ui/app-menus.ui
+msgid "_Tools"
+msgstr "Per_kakas"
+
+#: src/ui/app-menus.ui
+msgid "Previous tool"
+msgstr "Alat sebelumnya"
+
+#: src/ui/app-menus.ui
+#, fuzzy
+msgid "Active tool"
+msgstr "Alat lainnya"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "Tampilkan nama alat"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr "Lebar yang lebih besar"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Smaller width"
+msgstr "Lebar yang lebih kecil"
+
+#: src/ui/app-menus.ui src/window.py
+msgid "_Options"
+msgstr "_Opsi"
+
+#: src/ui/app-menus.ui
+msgid "_Help"
+msgstr "Ba_ntuan"
+
+#. Context: open the index of all help pages
+#: src/ui/app-menus.ui
+msgid "Index"
+msgstr "Indeks"
+
+#. Context: open the help page about general use of the app
+#: src/ui/app-menus.ui
+msgid "Basic help"
+msgstr "Bantuan dasar"
+
+#. Context: open the help page about classic tools
+#: src/ui/app-menus.ui
+msgid "Help about tools"
+msgstr "Bantuan tentang perkakas"
+
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
+#: src/ui/app-menus.ui
+msgid "Canvas and selection"
+msgstr "Kanvas dan seleksi"
+
+#. Context: open the help page about the selection
+#: src/ui/app-menus.ui
+msgid "Help about selection"
+msgstr "Bantuan tentang seleksi"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "About Drawing"
+msgstr "Tentang Drawing"
+
+#: src/ui/headerbar.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/window.py
+msgid "Open"
+msgstr "Buka"
+
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr "Bagikan gambar"
+
+#: src/ui/new-image-dialog.ui src/ui/properties.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Width"
+msgstr "Lebar"
+
+#: src/ui/new-image-dialog.ui src/ui/properties.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Height"
+msgstr "Tinggi"
+
+#: src/ui/new-image-dialog.ui
+msgid "Color"
+msgstr "Warna"
+
+#: src/ui/new-image-dialog.ui
+msgid "Use these settings by default"
+msgstr "Gunakan pengaturan ini secara bawaan"
+
+#: src/ui/minimap.ui
+msgid "100%"
+msgstr "100%"
+
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
+#: src/ui/properties.ui src/utilities.py
+msgid "pixels"
+msgstr "piksel"
+
+#: src/ui/properties.ui
+msgid "centimeters"
+msgstr "sentimeter"
+
+#: src/ui/properties.ui
+msgid "inches"
+msgstr "inci"
+
+#: src/ui/preferences.ui
+msgid "Images"
+msgstr "Gambar"
+
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Tools"
+msgstr "Perkakas"
+
+#: src/ui/preferences.ui
+msgid "Window"
+msgstr "Jendela"
+
+#: src/ui/selection-manager.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Close selection"
+msgstr "Tutup seleksi"
+
+#: src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Unselect"
+msgstr "Nirpilih"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_crop.py
+msgid "Crop"
+msgstr "Pangkas"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_scale.py
+msgid "Scale"
+msgstr "Skalakan"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_rotate.py
+msgid "Rotate"
+msgstr "Putar"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Filters"
+msgstr "Penapis"
+
+#: src/ui/selection-manager.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Open As New Image"
+msgstr "Buka Sebagai Gambar Baru"
+
+#: src/ui/shortcuts.ui
+msgid "Keyboard Shortcuts"
+msgstr "Pintasan Papan Tik"
+
+#: src/ui/shortcuts.ui
+msgid "General"
+msgstr "Umum"
+
+#: src/ui/shortcuts.ui
+msgid "Main menu"
+msgstr "Menu utama"
+
+#: src/ui/shortcuts.ui
+msgid "Image"
+msgstr "Gambar"
+
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "Buka gambar"
+
+#: src/ui/shortcuts.ui
+msgid "Reload image from disk"
+msgstr "Muat gambar dari diska"
+
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "Simpan gambar sebagai..."
+
+#: src/ui/shortcuts.ui
+msgid "Close the active image"
+msgstr "Tutup gambar yang aktif"
+
+#: src/ui/shortcuts.ui
+msgid "Open the tool options menu"
+msgstr "Buka menu opsi alat"
+
+#: src/ui/shortcuts.ui
+msgid "Back to previous tool"
+msgstr "Kembali ke alat sebelumnya"
+
+#: src/ui/shortcuts.ui
+msgid "Apply a transformation"
+msgstr ""
+
+#: src/ui/shortcuts.ui
+msgid "History"
+msgstr "Riwayat"
+
+#: src/ui/shortcuts.ui
+msgid "Selection"
+msgstr "Seleksi"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Delete the selection"
+msgstr "Hapus seleksi"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Import a file as the selection"
+msgstr ""
+
+#: src/ui/shortcuts.ui
+msgid "Colors"
+msgstr "Warna"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Edit the main color (left click)"
+msgstr "Sunting warna utama (klik kiri)"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Edit the secondary color (right click)"
+msgstr "Sunting warna sekunder (klik kanan)"
+
+#: src/ui/shortcuts.ui
+msgid "Tabs"
+msgstr ""
+
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
+#: src/ui/shortcuts.ui
+msgid "Navigation"
+msgstr "Navigasi"
+
+#: src/ui/shortcuts.ui
+msgid "Toggle the preview"
+msgstr "Jungkitkan pratinjau"
+
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr "Masuk mode layar penuh"
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr "Keluar mode layar penuh"
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr ""
+
+#: src/ui/win-menus.ui
+msgid "Troubleshoot selection"
+msgstr ""
+
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr "Alat lainnya"
+
+#: src/ui/window.ui
+msgid "Error starting the application, please report this bug."
+msgstr "Kesalahan saat memulai aplikasi, silakan laporkan kutu ini."
+
+#: src/deco_manager.py
+#, python-format
+msgid "Undo %s"
+msgstr "Nirjadikan %s"
+
+#: src/deco_manager.py
+#, python-format
+msgid "Redo %s"
+msgstr "Jadikan %s lagi"
+
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr ""
+
+#: src/image.py
+msgid "Can't reload a never-saved file from the disk."
+msgstr "Tak bisa memuat ulang berkas dari diska yang tidak pernah disimpan."
+
+#: src/image.py src/properties.py
+msgid "Unsaved file"
+msgstr "Berkas tak tersimpan"
+
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
+msgid "Cancel"
+msgstr "Batalkan"
+
+#. Context: Create a new image
+#: src/new_image_dialog.py
+msgid "Create"
+msgstr "Buat"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Show the app version"
+msgstr "Tampilkan versi aplikasi"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Open a new window"
+msgstr "Buka jendela baru"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Open a new tab"
+msgstr "Buka tab baru"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Edit the clipboard content"
+msgstr "Sunting konten papan klip"
+
+#: src/main.py
+msgid "This version isn't stable!"
+msgstr "Versi ini tidak stabil!"
+
+#: src/main.py
+msgid "Report bugs or ideas"
+msgstr "Laporkan kutu atau ide"
+
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
+#: src/main.py
+msgid "translator-credits"
+msgstr "Ghani Rafif"
+
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
+#: src/main.py
+msgid "GNOME's \"Art Libre\" icon set authors"
+msgstr "Pembuat set ikon \"Art Libre\""
+
+#: src/main.py
+msgid "A drawing application for the GNOME desktop."
+msgstr "Aplikasi menggambar untuk destop GNOME."
+
+#: src/main.py
+msgid "Official webpage"
+msgstr "Laman web resmi"
+
+#: src/main.py
+#, fuzzy
+msgid "Error opening this file."
+msgstr "Tidak bisa membuka berkas. Apakah maksud anda %s ?"
+
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr ""
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
+#: src/minimap.py
+#, python-format
+msgid "%s%%"
+msgstr "%s%%"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "New images"
+msgstr "Gambar baru"
+
+#: src/preferences.py
+msgid "Default width"
+msgstr "Lebar bawaan"
+
+#: src/preferences.py
+msgid "Default height"
+msgstr "Tinggi bawaan"
+
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Default color"
+msgstr "Warna bawaan"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "Images saving"
+msgstr "Menyimpan gambar"
+
+#: src/preferences.py
+msgid "JPEG and BMP images can't handle transparency."
+msgstr "Gambar JPEG dan BMP tidak bisa menangani transparansi."
+
+#: src/preferences.py
+msgid ""
+"If you save your images in these formats, what do want to use to replace "
+"transparent pixels?"
+msgstr ""
+
+#: src/preferences.py src/saving_manager.py src/utilities.py
+msgid "White"
+msgstr "Putih"
+
+#: src/preferences.py src/saving_manager.py src/utilities.py
+msgid "Black"
+msgstr "Hitam"
+
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
+msgid "Checkboard"
+msgstr "Papan catur"
+
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
+msgid "Nothing"
+msgstr ""
+
+#: src/preferences.py
+msgid "Ask before saving"
+msgstr "Tanya sebelum menyimpan"
+
+#: src/preferences.py
+msgid "You can zoom with Ctrl+scrolling, or only scrolling."
+msgstr ""
+
+#: src/preferences.py
+msgid "See the user help manual for explanations."
+msgstr "Lihat panduan pengguna untuk penjelasan."
+
+#: src/preferences.py
+msgid "Use 'Ctrl' to zoom"
+msgstr ""
+
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
+#: src/preferences.py
+msgid "Appearance"
+msgstr "Tampilan"
+
+#: src/preferences.py
+msgid "Use big icons"
+msgstr "Gunakan ikon besar"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "Additional tools"
+msgstr "Perkakas lainnya"
+
+#: src/preferences.py
+msgid ""
+"These tools are not as reliable and useful as they should be, so they are "
+"not all enabled by default."
+msgstr ""
+
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
+#: src/preferences.py src/tools/classic_tools/tool_eraser.py
+msgid "Eraser"
+msgstr "Penghapus"
+
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
+#: src/preferences.py src/tools/classic_tools/tool_highlight.py
+msgid "Highlighter"
+msgstr "Stabilo"
+
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr "Ujung"
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
+#: src/preferences.py src/tools/selection_tools/select_free.py
+msgid "Free selection"
+msgstr "Seleksi bebas"
+
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
+#: src/preferences.py src/tools/selection_tools/select_color.py
+msgid "Color selection"
+msgstr "Seleksi warna"
+
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
+#: src/preferences.py src/tools/classic_tools/tool_picker.py
+msgid "Color Picker"
+msgstr "Pengambil Warna"
+
+#. Context: the name of a tool to fill an area of one color with an other
+#: src/preferences.py src/tools/classic_tools/tool_paint.py
+msgid "Paint"
+msgstr "Cat"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "Advanced options"
+msgstr "Opsi tingkat lanjut"
+
+#: src/preferences.py
+msgid "Preview size"
+msgstr "Ukuran pratinjau"
+
+#. This label will not be displayed in the UI of stable versions
+#: src/preferences.py
+msgid "Development features"
+msgstr "Fitur pengembangan"
+
+#: src/preferences.py
+msgid "Background color"
+msgstr "Warna latar belakang"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
+msgid "Layout"
+msgstr "Tata letak"
+
+#: src/preferences.py
+msgid "The recommended value is \"Automatic\"."
+msgstr "Nilai yang direkomendasikan adalah \"Otomatis\"."
+
+#. It has to match what's written in the previous string.
+#: src/preferences.py
+msgid "Automatic"
+msgstr "Otomatis"
+
+#: src/preferences.py
+msgid "Compact"
+msgstr "Kompak"
+
+#: src/preferences.py
+msgid "elementary OS"
+msgstr "elementary OS"
+
+#. "Legacy" is about the window layout, it means menubar+toolbar, you
+#. can translate it like if it was "Traditional"
+#: src/preferences.py
+msgid "Legacy"
+msgstr "Tampilan lama"
+
+#. "Legacy" is about the window layout, it means menubar+toolbar, you
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
+#: src/preferences.py
+msgid "Legacy (symbolic icons)"
+msgstr "Tampilan lama (ikon monokrom)"
+
+#: src/preferences.py
+msgid "Menubar only"
+msgstr "Hanya bilah menu"
+
+#: src/preferences.py
+msgid "Toolbar only"
+msgstr "Hanya bilah alat"
+
+#. Symbolic icons are monochrome icons.
+#: src/preferences.py
+msgid "Toolbar only (symbolic icons)"
+msgstr "Hanya bilah alat (ikon monokrom)"
+
+#: src/properties.py
+#, python-format
+msgid "%s px"
+msgstr "%s px"
+
+#: src/properties.py
+#, python-format
+msgid "%s cm"
+msgstr "%s cm"
+
+#: src/properties.py
+#, python-format
+msgid "%s in"
+msgstr "%s in"
+
+#. Context: the path of the edited file
+#: src/properties.py
+msgid "Path"
+msgstr "Lokasi"
+
+#. Context: the file format of the edited file
+#: src/properties.py
+msgid "Format"
+msgstr "Format"
+
+#: src/properties.py
+msgid "Colorspace"
+msgstr "Rentang warna"
+
+#. Context: an invalid colorspace format
+#: src/properties.py
+msgid "Invalid format"
+msgstr "Format tidak valid"
+
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "Gagal menyimpan %s"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "Tanpa judul"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "gambar ini"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "Buang"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "Terdapat modifikasi yang belum tersimpan ke %s."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr "Modifikasi dari alat saat ini belum diterapkan."
+
+#: src/saving_manager.py
+msgid "Do you want to save anyway?"
+msgstr "Apakah anda ingin tetap menyimpannya?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr "Ganti"
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "Format berkas ini tidak mendukung warna transparan."
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr ""
+"Anda bisa menyimpan gambar ini sebagai berkas PNG, atau mengganti "
+"transparansinya dengan:"
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "Ganti transparansi dengan:"
+
+#: src/utilities.py
+msgid "Transparent"
+msgstr "Transparan"
+
+#: src/utilities.py
+#, python-format
+msgid "%s%% transparent"
+msgstr "%s%% transparan"
+
+#: src/utilities.py
+msgid "Grey"
+msgstr "Kelabu"
+
+#: src/utilities.py
+msgid "Orange"
+msgstr "Oranye"
+
+#: src/utilities.py
+msgid "Brown"
+msgstr "Coklat"
+
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
+#: src/utilities.py
+msgid "Probably brown"
+msgstr ""
+
+#: src/utilities.py
+msgid "Red"
+msgstr "Merah"
+
+#: src/utilities.py
+msgid "Green"
+msgstr "Hijau"
+
+#: src/utilities.py
+msgid "Blue"
+msgstr "Biru"
+
+#: src/utilities.py
+msgid "Yellow"
+msgstr "Kuning"
+
+#: src/utilities.py
+msgid "Magenta"
+msgstr "Magenta"
+
+#: src/utilities.py
+msgid "Purple"
+msgstr "Ungu"
+
+#: src/utilities.py
+msgid "Cyan"
+msgstr "Cyan"
+
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
+#: src/utilities.py
+msgid "Probably teal"
+msgstr ""
+
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
+#: src/utilities.py
+msgid "Unknown color name"
+msgstr "Nama warna tak diketahui"
+
+#: src/utilities.py
+msgid "All pictures"
+msgstr "Semua gambar"
+
+#: src/utilities.py
+msgid "PNG images"
+msgstr "Gambar PNG"
+
+#: src/utilities.py
+msgid "JPEG images"
+msgstr "Gambar JPEG"
+
+#: src/utilities.py
+msgid "BMP images"
+msgstr "Gambar BMP"
+
+#. To translators: it appears in tooltips over numerical inputs
+#: src/utilities.py
+msgid "percents"
+msgstr "persen"
+
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
+#: src/utilities.py
+msgid "degrees"
+msgstr "derajat"
+
+#: src/utilities.py
+#, fuzzy, python-format
+msgid "%s isn't an image."
+msgstr "Buka gambar"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr ""
+
+#. Context: an error message
+#: src/window.py
+#, python-format
+msgid "Failed to load tool: %s"
+msgstr "Gagal memuat alat: %s"
+
+#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr ""
+
+#: src/window.py
+msgid "Modifications will take effect in the next new window."
+msgstr ""
+
+#: src/window.py src/tools/abstract_tool.py
+#: src/optionsbars/classic/optionsbar-classic.ui
+#: src/tools/classic_tools/tool_eraser.py
+msgid "No options"
+msgstr "Tidak ada opsi"
+
+#: src/window.py
+msgid "Opened images"
+msgstr "Gambar yang terbuka"
+
+#: src/window.py
+#, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr ""
+
+#: src/window.py
+#, python-format
+msgid "Loading %s"
+msgstr "Memuat %s"
+
+#. Context: answer to "where do you want to open the image?"
+#: src/window.py
+msgid "New Tab"
+msgstr "Tab baru"
+
+#: src/window.py
+msgid "Discard changes"
+msgstr "Buang perubahan"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/window.py
+#, python-format
+msgid "Where do you want to open %s?"
+msgstr "Di mana anda ingin membuka %s?"
+
+#. Context for translation:
+#. "What do you want to do with *these files*?"
+#: src/window.py
+msgid "these files"
+msgstr "berkas ini"
+
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
+#: src/window.py
+#, python-format
+msgid "What do you want to do with %s?"
+msgstr "Apa yang ingin anda lakukan dengan %s?"
+
+#: src/window.py
+msgid "Image copied to clipboard"
+msgstr "Gambar tersalin ke papan klip"
+
+#: src/window.py
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr "Gambar telah diubah pada diska, apakah anda ingin memuatnya ulang?"
+
+#: src/window.py
+msgid "Reload"
+msgstr "Muat ulang"
+
+#: src/window.py
+msgid "Import a picture"
+msgstr "Impor gambar"
+
+#: src/window.py
+msgid "Required tool is not available"
+msgstr "Alat yang dibutuhkan tidak tersedia"
+
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
+
+#: src/tools/utilities_paths.py
+msgid "Continue"
+msgstr "Lanjutkan"
+
+#: src/tools/utilities_paths.py
+msgid "The area seems poorly delimited, or is very complex."
+msgstr ""
+
+#: src/tools/utilities_paths.py
+msgid "This algorithm may not be able to manage the wanted area."
+msgstr "Algoritma mungkin tidak dapat menangani area yang diinginkan."
+
+#: src/tools/utilities_paths.py
+msgid "Do you want to abort the operation, or to let the tool struggle ?"
+msgstr ""
+
+#. Context: fill a shape with the color of the left click
+#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Main color"
+msgstr "Warna utama"
+
+#. Context: fill a shape with the color of the right click
+#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Secondary color"
+msgstr "Warna sekunder"
+
+#: src/optionsbars/classic/optionsbar-classic.ui
+msgid "Tool size"
+msgstr "Ukuran alat"
+
+#: src/optionsbars/classic/optionsbar-classic.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
+msgid "Preview"
+msgstr "Pratinjau"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "How the color will be applied to the existing pixels"
+msgstr ""
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Back to the palette"
+msgstr ""
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Palette"
+msgstr "Palet"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Use this editor by default"
+msgstr "Gunakan penyunting ini secara bawaan"
+
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+msgid "More actions"
+msgstr ""
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+msgid "Apply"
+msgstr "Terapkan"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "Lebih banyak opsi"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr ""
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "Transparansi"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Select a filter…"
+msgstr "Pilih penapis..."
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+msgid "Saturation"
+msgstr "Penjenuhan"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+msgid "Blur radius"
+msgstr "Radius pengaburan"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Change saturation"
+msgstr "Ubah penjenuhan"
+
+#. Context: a filter adding like a light veil on the image
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Veil"
+msgstr ""
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
+msgid "Add transparency"
+msgstr "Tambahkan transparansi"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Invert colors"
+msgstr "Balik warna"
+
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
+msgid "Blurring"
+msgstr "Pengaburan"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Fast blur"
+msgstr "Pengaburan cepat"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Slow blur"
+msgstr "Pengaburan lamban"
+
+#. Context: a filter that censors the image with some kind of tiles
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
+msgstr "Pikselisasi"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "Blur direction"
+msgstr "Arah pengaburan"
+
+#. Context: about the blur direction
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "Horizontal"
+msgstr "horisontal"
+
+#. Context: about the blur direction
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "Vertical"
+msgstr "Vertikal"
+
+#. Context: about the blur direction
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "No direction"
+msgstr "Tanpa arah"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui
+msgid "Angle (degrees)"
+msgstr "Sudut (derajat)"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui
+msgid "Angle"
+msgstr "Sudut"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Rotate left"
+msgstr "Putar ke kiri"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Rotate right"
+msgstr "Putar ke kanan"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Flip horizontally"
+msgstr "Balik secara horisontal"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Flip vertically"
+msgstr "Balik secara vertikal"
+
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "Keep proportions"
+msgstr "Jaga proporsi"
+
+#. Context: an item in a menu whose title is "Keep proportions"
+#. Context for translations: "Always [keep proportions]"
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "Always"
+msgstr "Selalu"
+
+#. Context: an item in a menu whose title is "Keep proportions"
+#. Context for translations: "[Keep proportions only] when scaling from corners"
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "When scaling from corners"
+msgstr "Saat menskalakan dari pojok"
+
+#. Context: an item in a menu whose title is "Keep proportions"
+#. Context for translations: "Never [keep proportions]"
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "Never"
+msgstr "Jangan pernah"
+
+#: src/optionsbars/transform/optionsbar-skew.ui
+msgid "Horizontal deformation"
+msgstr "Deformasi horisontal"
+
+#: src/optionsbars/transform/optionsbar-skew.ui
+msgid "Vertical deformation"
+msgstr "Deformasi vertikal"
+
+#: src/tools/ui/selection.ui
+msgid "Transform"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Line shape"
+msgstr "Bentuk garis"
+
+#. Context: this is the name of a line shape
+#. Default values
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
+#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+msgid "Round"
+msgstr "Cembung"
+
+#. Context: this is the name of a line shape
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
+msgid "Square"
+msgstr "Persegi"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "No arrow"
+msgstr "Panah"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "Double arrow"
+msgstr "Panah putus-putus"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "No dashes"
+msgstr "Gunakan garis putus-putus"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Simple dashes"
+msgstr "Gunakan garis putus-putus"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Long dashes"
+msgstr "Gunakan garis putus-putus"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Short dashes"
+msgstr "Gunakan garis putus-putus"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+msgid "Antialiasing"
+msgstr "Antialias"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Dark text on light background"
+msgstr "Teks gelap pada latar belakang terang"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr "Teks terang pada latar belakang gelap"
+
+#: src/tools/ui/tool-line.ui
+msgid "Color gradient"
+msgstr "Gradasi warna"
+
+#. Context: title for the list of the possible painting algorithms.
+#: src/tools/ui/tool-paint.ui
+msgid "Behavior"
+msgstr "Perilaku"
+
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
+#: src/tools/ui/tool-paint.ui
+msgid "Encircle and fill"
+msgstr ""
+
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
+#: src/tools/ui/tool-paint.ui
+msgid "Erase and replace"
+msgstr "Hilangkan dan ganti"
+
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
+#: src/tools/ui/tool-paint.ui
+msgid "Entire image"
+msgstr "Seluruh gambar"
+
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+msgid "Remove color"
+msgstr "Hilangkan warna"
+
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "Lingkaran"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr ""
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Solid outline"
+msgstr "Garis penuh"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Dashed outline"
+msgstr "Garis putus-putus"
+
+#. if state_as_string == 'none':
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "No outline"
+msgstr "Tanpa garis luar"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr "Pengisian"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Empty shape"
+msgstr "Bentuk kosong"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Horizontal gradient"
+msgstr "Gradasi horizontal"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Vertical gradient"
+msgstr "Gradasi vertikal"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Radial gradient"
+msgstr "Gradasi radial"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "Segiempat"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr "Segiempat cembung"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "Oval"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "Poligon"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "Bentuk bebas"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Close shape"
+msgstr "Tutup bentuk"
+
+#: src/tools/ui/tool-text.ui
+msgid "Insert here"
+msgstr "Sisipkan di sini"
+
+#: src/tools/ui/tool-text.ui
+msgid "Font"
+msgstr "Fonta"
+
+#: src/tools/ui/tool-text.ui
+msgid "Select a font…"
+msgstr "Pilih fonta..."
+
+#: src/tools/ui/tool-text.ui
+msgid "Italic"
+msgstr "Miring"
+
+#: src/tools/ui/tool-text.ui
+msgid "Bold"
+msgstr "Tebal"
+
+#. Context: the types of background behind the inserted text
+#: src/tools/ui/tool-text.ui
+msgid "Background"
+msgstr "Latar belakang"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "No background"
+msgstr "Tanpa latar belakang"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "Shadow"
+msgstr "Bayangan"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "Outline"
+msgstr "Garis luar"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "Rectangle background"
+msgstr "Latar belakang persegi"
+
+#: src/tools/classic_tools/tool_arc.py
+msgid "Curve"
+msgstr "Kurva"
+
+#: src/tools/classic_tools/tool_arc.py
+msgid "Curve options"
+msgstr "Opsi kurva"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Dashed arrow"
+msgstr "Panah putus-putus"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "Panah"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+msgid "Dashed"
+msgstr "Putus-putus"
+
+#: src/tools/classic_tools/tool_highlight.py
+msgid "Highlighter options"
+msgstr "Opsi stabilo"
+
+#: src/tools/classic_tools/tool_line.py
+msgid "Line"
+msgstr "Garis"
+
+#: src/tools/classic_tools/tool_line.py
+msgid "Line options"
+msgstr "Opsi garis"
+
+#: src/tools/classic_tools/tool_paint.py
+msgid "Painting options"
+msgstr "Opsi pengecatan"
+
+#: src/tools/classic_tools/tool_paint.py
+msgid "Click on an area to replace its color by transparency"
+msgstr "Klik pada area untuk mengganti warna dengan transparansi"
+
+#: src/tools/classic_tools/tool_paint.py
+msgid "Click on the canvas to entirely paint it"
+msgstr "Klik pada kanvas untuk mengecat seluruhnya"
+
+#: src/tools/classic_tools/tool_pencil.py
+msgid "Pencil"
+msgstr "Pensil"
+
+#: src/tools/classic_tools/tool_pencil.py
+msgid "Pencil options"
+msgstr "Opsi pensil"
+
+#: src/tools/classic_tools/tool_points.py
+#, fuzzy
+msgid "Points options"
+msgstr "Opsi teks"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr ""
+
+#: src/tools/classic_tools/tool_shape.py
+msgid "Shape"
+msgstr "Bentuk"
+
+#: src/tools/classic_tools/tool_shape.py
+msgid "Shape options"
+msgstr "Opsi bentuk"
+
+#: src/tools/classic_tools/tool_shape.py
+msgid "Click on the shape's first point to close it."
+msgstr ""
+
+#: src/tools/classic_tools/tool_text.py
+msgid "Text"
+msgstr "Teks"
+
+#. XXX use "text options" instead
+#: src/tools/classic_tools/tool_text.py
+msgid "Font options"
+msgstr "Opsi teks"
+
+#: src/tools/selection_tools/abstract_select.py
+msgid "Drag the selection or right-click on the canvas"
+msgstr "Seret seleksi atau klik kanan pada kanvas"
+
+#: src/tools/selection_tools/abstract_select.py
+msgid "Select an area or right-click on the canvas"
+msgstr "Pilih area atau klik kanan pada kanvas"
+
+#: src/tools/selection_tools/select_rect.py
+msgid "Rectangle selection"
+msgstr "Seleksi persegi"
+
+#: src/tools/transform_tools/abstract_transform_tool.py
+msgid "Error: invalid values"
+msgstr "Galat: nilai tidak valid"
+
+#: src/tools/transform_tools/tool_crop.py
+msgid "Cropping the selection"
+msgstr "Pangkas seleksi"
+
+#: src/tools/transform_tools/tool_crop.py
+msgid "Cropping the canvas"
+msgstr "Pangkas kanvas"
+
+#: src/tools/transform_tools/tool_filters.py
+msgid "Click on the image to preview the selected filter"
+msgstr "Klik gambar untuk melihat pratinjau penapis pilihan"
+
+#: src/tools/transform_tools/tool_rotate.py
+msgid "Rotating the selection"
+msgstr "Putar seleksi"
+
+#: src/tools/transform_tools/tool_rotate.py
+msgid "Rotating the canvas"
+msgstr "Putar kanvas"
+
+#: src/tools/transform_tools/tool_scale.py
+msgid "Scaling the selection"
+msgstr "Skalakan seleksi"
+
+#: src/tools/transform_tools/tool_scale.py
+msgid "Scaling the canvas"
+msgstr "Skalakan kanvas"
+
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr "Condongkan"
+
+#~ msgid "Flip"
+#~ msgstr "Balik"
+
+#, fuzzy
+#~ msgid "Add semi-transparency"
+#~ msgstr "Tambahkan transparansi"
+
+#~ msgid "Thin"
+#~ msgstr "Tipis"
diff --git a/po/it.po b/po/it.po
index 65957051..10f0d980 100644
--- a/po/it.po
+++ b/po/it.po
@@ -1,14 +1,14 @@
-# SOME DESCRIPTIVE TITLE.
+# ITALIAN TRANSLATION FOR DRAWING.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the drawing package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: drawing\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-15 19:07+0200\n"
-"PO-Revision-Date: 2020-29-02 19:45+0100\n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
+"PO-Revision-Date: 2020-10-25 21:15+0100\n"
"Last-Translator: Albano Battistella\n"
"Language-Team: Italian\n"
"Language: it\n"
@@ -78,6 +78,90 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+"La versione 0.6.4 presenta diverse correzioni di bug minori e varie nuove "
+"traduzioni. "
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+"La versione 0.6.3 migliora l'opzione per disegnare le frecce: diversi "
+"problemi sono stati corretti ed ora sono possibili frecce a doppia punta."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+"Questa versione è finalmente compatibile con le vecchie distribuzioni "
+"(versioni diLibrerie GNOME più vecchie di 3.30)."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+"La versione 0.6.2 presenta diverse correzioni di bug minori e varie nuove "
+"traduzioni. "
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+"Lo strumento \"evidenziatore\" ora fornisce opzioni per evidenziare il testo "
+"chiaro su un sfondo scuro."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+"Quando un'immagine è stata salvata senza la sua trasparenza, l'app ora "
+"suggerisce per ricaricare l'immagine dal disco. Inoltre, la funzione "
+"\"ricarica dal disco\" è ora disponibile con ogni possibile layout di "
+"finestra."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+"È stata aggiunta un'azione per copiare l'intera immagine negli appunti."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+"Ora è possibile rimuovere la trasparenza anche durante il salvataggio dei "
+"file PNG. E ci sono più opzioni di colore per sostituire i pixel trasparenti."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+"È stato aggiunto un nuovo strumento opzionale denominato \"Punti\", potrebbe "
+"essere utile per i sottotitoli immagini."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr "Sono stati corretti bug minori nello strumento \"ruota.\""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"Version 0.6 is a major update, with various important changes. The app is "
"more robust and has more tools:"
msgstr ""
@@ -108,8 +192,17 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+"Lo strumento di testo ora può scrivere utilizzando la maggior parte dei "
+"caratteri di sistema, consentendo così di piùcaratteri complessi da "
+"utilizzare (ad es. caratteri asiatici)."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
-"with several types of blur, color inversion, pixelisation, saturation and "
+"with several types of blur, color inversion, pixelization, saturation and "
"transparency."
msgstr ""
"Lo strumento 'saturare' è stato sostituito da 'filtri', uno strumento più "
@@ -129,24 +222,37 @@ msgstr ""
"ridurre) l'immagine, usando la minimappa, il touchpad o la rotellina del "
"mouse."
-#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid ""
-"Version 0.4.8 features several minor bug fixes, and various new translations."
-msgstr ""
-"La versione 0.4.8 presenta diverse correzioni di bug minori e varie nuove "
-"traduzioni. "
-
#. This is just my name, do not translate it.
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid "Romain F. T."
msgstr "Romain F. T."
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr "La finestra e il suo menu principale"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr "La selezione e le azioni ad essa associate"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr "Zoom in varie forme"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr "La \"nuova immagine\" menu aperto"
+
#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
#: src/preferences.py
msgid "Preferences"
msgstr "Preferenze"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
msgid "Report a bug"
msgstr "Invia una bug"
@@ -195,19 +301,22 @@ msgstr "Nuova Immagine dagli Appunti"
msgid "Reload file"
msgstr "Ricarica file"
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/properties.py
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
msgid "Image properties"
msgstr "Proprietà immagine"
#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
-#: src/ui/win-menus.ui src/window.py
+#: src/ui/win-menus.ui src/saving_manager.py
msgid "Save"
msgstr "Salva"
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Save without transparency"
+msgstr "Salva senza trasparenza"
+
#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
-#: src/utilities.py
+#: src/saving_manager.py
msgid "Save as…"
msgstr "Salva come…"
@@ -216,7 +325,13 @@ msgstr "Salva come…"
msgid "Export as…"
msgstr "Esporta come…"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr "Copia negli appunti"
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
msgid "Print"
msgstr "Stampa"
@@ -301,20 +416,25 @@ msgid "Optimal Zoom"
msgstr "Zoom Ottimale"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom Out"
msgstr "Rimpicciolisci"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Original Zoom"
msgstr "Zoom Originale"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom In"
msgstr "Ingrandisci"
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
#: src/ui/app-menus.ui
msgid "Position"
msgstr "Posizione"
@@ -336,26 +456,18 @@ msgid "Go Right"
msgstr "Sposta a destra"
#: src/ui/app-menus.ui src/ui/shortcuts.ui
-#, fuzzy
msgid "Tab at the left"
-msgstr "Ritorna alla tavolozza"
+msgstr "Scheda a sinistra"
#: src/ui/app-menus.ui src/ui/shortcuts.ui
-#, fuzzy
msgid "Tab at the right"
-msgstr "Ruota a destra"
+msgstr "Scheda a destra"
#: src/ui/app-menus.ui src/ui/win-menus.ui
msgid "Refresh"
msgstr "Aggiorna"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
-#: src/preferences.py
-msgid "Show tools names"
-msgstr "Mostra i nomi degli strumenti"
-
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/shortcuts.ui
-#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
msgid "Fullscreen"
msgstr "Schero Intero"
@@ -376,9 +488,8 @@ msgid "Edit Secondary Color…"
msgstr "Modifica colore secondario…"
#: src/ui/app-menus.ui
-#, fuzzy
msgid "Use color editor by default"
-msgstr "Usa colore dell' editor predefinito"
+msgstr "Usa colore dell'editor predefinito"
#: src/ui/app-menus.ui src/ui/shortcuts.ui
#: src/optionsbars/classic/optionsbar-classic.ui
@@ -389,75 +500,79 @@ msgstr "Scambia i colori"
msgid "Color application mode"
msgstr "Modalità applicazione colore"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Normal"
msgstr "Normale"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Other modes"
-msgstr ""
+msgstr "Altre modalità"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Raw source color"
msgstr "Colore sorgente"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Highlight"
msgstr "Evidenziatore"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Difference"
msgstr "Differenza"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
-msgid "Photo manipulation"
-msgstr ""
+msgid "Photo-oriented modes"
+msgstr "Modalità orientamento foto"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Hue only"
-msgstr "Solo la barra menu"
+msgstr "Solo tonalità"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Saturation only"
-msgstr "Saturazione"
+msgstr "Solo saturazione"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Hue and saturation"
-msgstr "Cambia saturazione"
+msgstr "Tonalità e saturazione"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Luminosity only"
-msgstr ""
+msgstr "Solo luminosità"
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Don't use the colors but…"
msgstr "Non usare i colori ma…"
#. To translators: this is a verb
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Blur"
msgstr "Sfocatura"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Erase"
msgstr "Cancella"
-#: src/ui/app-menus.ui src/window.py
+#: src/ui/app-menus.ui
msgid "_Tools"
msgstr "_Strumenti"
@@ -465,6 +580,23 @@ msgstr "_Strumenti"
msgid "Previous tool"
msgstr "Strumento precedente"
+#: src/ui/app-menus.ui
+msgid "Active tool"
+msgstr "Strumento attivo"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "Mostra i nomi degli strumenti"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr "Larghezza maggiore"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Smaller width"
+msgstr "Larghezza ridotta"
+
#: src/ui/app-menus.ui src/window.py
msgid "_Options"
msgstr "_Opzioni"
@@ -473,22 +605,28 @@ msgstr "_Opzioni"
msgid "_Help"
msgstr "_Aiuto"
+#. Context: open the index of all help pages
#: src/ui/app-menus.ui
msgid "Index"
msgstr "Indice"
+#. Context: open the help page about general use of the app
#: src/ui/app-menus.ui
msgid "Basic help"
msgstr "Aiuto generico"
+#. Context: open the help page about classic tools
#: src/ui/app-menus.ui
msgid "Help about tools"
msgstr "Aiuto sugli strumenti"
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
#: src/ui/app-menus.ui
msgid "Canvas and selection"
msgstr "Tela e selezione"
+#. Context: open the help page about the selection
#: src/ui/app-menus.ui
msgid "Help about selection"
msgstr "Aiuto sugli selezione"
@@ -502,21 +640,25 @@ msgstr "Informazioni su Drawing"
msgid "Open"
msgstr "Apri"
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr "Condividi l'immagine"
+
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Width"
msgstr "Larghezza"
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Height"
msgstr "Altezza"
#: src/ui/new-image-dialog.ui
-msgid "Background color"
-msgstr "Colore sfondo"
+msgid "Color"
+msgstr "Colore"
#: src/ui/new-image-dialog.ui
msgid "Use these settings by default"
@@ -526,6 +668,8 @@ msgstr "Utilizzare queste impostazioni come predefinita"
msgid "100%"
msgstr "100%"
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
#: src/ui/properties.ui src/utilities.py
msgid "pixels"
msgstr "pixel"
@@ -542,7 +686,7 @@ msgstr "pollici"
msgid "Images"
msgstr "Immagini"
-#: src/ui/preferences.ui src/ui/shortcuts.ui
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "Tools"
msgstr "Strumenti"
@@ -561,30 +705,22 @@ msgid "Unselect"
msgstr "Deseleziona"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Crop"
msgstr "Ritaglia"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scale"
msgstr "Scala"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotate"
msgstr "Ruota"
-#. In this context, "Skew" is the name of the tool changing rectangles
-#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
-#. "Stretch/Skew" dialog.
-#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_skew.py
-msgid "Skew"
-msgstr ""
-
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Filters"
msgstr "Filtri"
@@ -594,8 +730,8 @@ msgid "Open As New Image"
msgstr "Apri Come Nuova immagine"
#: src/ui/shortcuts.ui
-msgid "Keyboard"
-msgstr "Tastiera"
+msgid "Keyboard Shortcuts"
+msgstr "Scorciatoie da tastiera"
#: src/ui/shortcuts.ui
msgid "General"
@@ -606,50 +742,40 @@ msgid "Main menu"
msgstr "Menu principale"
#: src/ui/shortcuts.ui
-msgid "Editing"
-msgstr "Modifica"
-
-#: src/ui/shortcuts.ui
msgid "Image"
msgstr "Immagine"
-#: src/ui/shortcuts.ui
-msgid "Open a file"
-msgstr "Apri un file"
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "Apri un'immagine"
#: src/ui/shortcuts.ui
msgid "Reload image from disk"
msgstr "Ricarica l'immagine dal disco"
-#: src/ui/shortcuts.ui
-msgid "Save as"
-msgstr "Salve come"
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "Salva l'immagine come…"
#: src/ui/shortcuts.ui
msgid "Close the active image"
msgstr "Chiudi l'immagine attiva"
#: src/ui/shortcuts.ui
-msgid "Options menu"
-msgstr "Menu opzioni"
+msgid "Open the tool options menu"
+msgstr "Apri il menu delle opzioni dello strumento"
#: src/ui/shortcuts.ui
msgid "Back to previous tool"
msgstr "Ritorna allo strumento precedente"
#: src/ui/shortcuts.ui
-msgid "Colors"
-msgstr "Colori"
-
-#. Label displayed in the keyboard shortcuts dialog
-#: src/ui/shortcuts.ui
-msgid "Edit the main color (left click)"
-msgstr "Modifica il colore primario (click sinistro)"
+msgid "Apply a transformation"
+msgstr ""
-#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Edit the secondary color (right click)"
-msgstr "Modifica il colore secondario (click destro)"
+msgid "History"
+msgstr "Cronologia"
#: src/ui/shortcuts.ui
msgid "Selection"
@@ -666,17 +792,25 @@ msgid "Import a file as the selection"
msgstr "Importa un file come selezione"
#: src/ui/shortcuts.ui
-msgid "Tabs"
-msgstr ""
+msgid "Colors"
+msgstr "Colori"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Enter fullscreen mode"
-msgstr "Entra in modalità schermo intero"
+msgid "Edit the main color (left click)"
+msgstr "Modifica il colore primario (click sinistro)"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Exit fullscreen mode"
-msgstr "Esci dalla modalità schermo intero"
+msgid "Edit the secondary color (right click)"
+msgstr "Modifica il colore secondario (click destro)"
+
+#: src/ui/shortcuts.ui
+msgid "Tabs"
+msgstr "Schede"
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
#: src/ui/shortcuts.ui
msgid "Navigation"
msgstr "Navigazione"
@@ -685,10 +819,26 @@ msgstr "Navigazione"
msgid "Toggle the preview"
msgstr "Mostra/nascondi anteprima"
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr "Entra in modalità schermo intero"
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr "Esci dalla modalità schermo intero"
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr "Modalità touch"
+
#: src/ui/win-menus.ui
msgid "Troubleshoot selection"
msgstr "Risolvere i problemi di selezione"
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr "Altri strumenti"
+
#: src/ui/window.ui
msgid "Error starting the application, please report this bug."
msgstr "Errore nell'avvio dell'applicazione, invia una segnalazione."
@@ -703,8 +853,13 @@ msgstr "Annulla %s"
msgid "Redo %s"
msgstr "Ripeti %s"
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr "Nuovo pixbuf vuoto, nessuna modifica applicata a %s"
+
#: src/image.py
-#, fuzzy
msgid "Can't reload a never-saved file from the disk."
msgstr "Impossibile ricaricare un file mai salvato dal disco."
@@ -712,15 +867,15 @@ msgstr "Impossibile ricaricare un file mai salvato dal disco."
msgid "Unsaved file"
msgstr "File non salvato"
-#: src/new_image_dialog.py src/utilities.py src/window.py
-#: src/tools/utilities_paths.py src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-crop.ui src/tools/ui/tool-filters.ui
-#: src/tools/ui/tool-rotate.ui src/tools/ui/tool-scale.ui
-#: src/tools/ui/tool-skew.ui
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
msgid "Cancel"
msgstr "Annulla"
@@ -729,18 +884,22 @@ msgstr "Annulla"
msgid "Create"
msgstr "Crea"
+#. Description of a command line option
#: src/main.py
msgid "Show the app version"
msgstr "Mostra la versione dell'app"
+#. Description of a command line option
#: src/main.py
msgid "Open a new window"
msgstr "Apri una nuova finestra"
+#. Description of a command line option
#: src/main.py
msgid "Open a new tab"
msgstr "Apri una nuova scheda"
+#. Description of a command line option
#: src/main.py
msgid "Edit the clipboard content"
msgstr "Modifica il contenuto degli appunti"
@@ -753,17 +912,19 @@ msgstr "Questa versione non è stabile!"
msgid "Report bugs or ideas"
msgstr "Invia segnalazioni o idee"
-#. To tranlators: "translate" this by your name, it will be displayed
-#. in the "about" dialog
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
#: src/main.py
msgid "translator-credits"
msgstr ""
"Jimmy S.\n"
"Albano Battistella"
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
#: src/main.py
msgid "GNOME's \"Art Libre\" icon set authors"
-msgstr ""
+msgstr "Gli autori del set di icone \"Art Libre\" di GNOME"
#: src/main.py
msgid "A drawing application for the GNOME desktop."
@@ -774,17 +935,24 @@ msgid "Official webpage"
msgstr "Pagina Web Ufficiale"
#: src/main.py
-#, python-format
-msgid "Error opening this file. Did you mean %s ?"
+#, fuzzy
+msgid "Error opening this file."
msgstr "Errore nell'apertura del file. Intendevi %s ?"
-#. This displays the zoom level, %s will be replaced with a number, while
-#. %% is just the symbol '%'
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr ""
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
#: src/minimap.py
#, python-format
msgid "%s%%"
msgstr "%s%%"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "New images"
msgstr "Nuova immagini"
@@ -797,10 +965,16 @@ msgstr "Larghezza standard"
msgid "Default height"
msgstr "Altezza standard"
-#: src/preferences.py
-msgid "Default background"
-msgstr "Sfondo preimpostato"
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Default color"
+msgstr "Colore predefinito"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Images saving"
msgstr "Salvataggio immagini"
@@ -817,19 +991,23 @@ msgstr ""
"Se salvi le tue immagini in questi formati, cosa vuoi usare per sostituire "
"pixel trasparenti?"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "White"
msgstr "Bianco"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "Black"
msgstr "Nero"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
msgid "Checkboard"
msgstr "Scacchiera"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
msgid "Nothing"
msgstr "Niente"
@@ -842,13 +1020,15 @@ msgid "You can zoom with Ctrl+scrolling, or only scrolling."
msgstr "È possibile eseguire lo zoom con Ctrl + scrolling o solo scrolling."
#: src/preferences.py
-msgid "Using keyboard shortcuts or touch gestures is possible too."
-msgstr "È anche possibile usare scorciatoie da tastiera o gesti tattili."
+msgid "See the user help manual for explanations."
+msgstr "Vedere il manuale della guida utente per le spiegazioni."
#: src/preferences.py
msgid "Use 'Ctrl' to zoom"
msgstr "Usa 'Ctrl' per ingrandire"
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
#: src/preferences.py
msgid "Appearance"
msgstr "Aspetto"
@@ -857,6 +1037,7 @@ msgstr "Aspetto"
msgid "Use big icons"
msgstr "Usa icone grandi"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Additional tools"
msgstr "Strumenti aggiuntivi"
@@ -869,31 +1050,51 @@ msgstr ""
"Questi strumenti non sono così affidabili e utili come dovrebbero essere, "
"quindi non sonotutti abilitati per impostazione predefinita."
-#. In the meaning "a rubber eraser"
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
#: src/preferences.py src/tools/classic_tools/tool_eraser.py
msgid "Eraser"
msgstr "Gomma"
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
#: src/preferences.py src/tools/classic_tools/tool_highlight.py
msgid "Highlighter"
msgstr "Evidenziatore"
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr "Punti"
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
#: src/preferences.py src/tools/selection_tools/select_free.py
msgid "Free selection"
msgstr "Selezione libera"
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
#: src/preferences.py src/tools/selection_tools/select_color.py
msgid "Color selection"
msgstr "Selezione colore"
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
#: src/preferences.py src/tools/classic_tools/tool_picker.py
msgid "Color Picker"
msgstr "Selettore colore"
+#. Context: the name of a tool to fill an area of one color with an other
#: src/preferences.py src/tools/classic_tools/tool_paint.py
msgid "Paint"
msgstr "Dipingi"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Advanced options"
msgstr "Opzioni avanzate"
@@ -902,11 +1103,18 @@ msgstr "Opzioni avanzate"
msgid "Preview size"
msgstr "Dimensione anteprima"
+#. This label will not be displayed in the UI of stable versions
#: src/preferences.py
msgid "Development features"
msgstr "Funzionalità in sviluppo"
#: src/preferences.py
+msgid "Background color"
+msgstr "Colore sfondo"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
msgid "Layout"
msgstr "Livello"
@@ -914,6 +1122,7 @@ msgstr "Livello"
msgid "The recommended value is \"Automatic\"."
msgstr "Il valore consigliato è \"Automatico\"."
+#. It has to match what's written in the previous string.
#: src/preferences.py
msgid "Automatic"
msgstr "Automatico"
@@ -933,7 +1142,8 @@ msgid "Legacy"
msgstr "Classico"
#. "Legacy" is about the window layout, it means menubar+toolbar, you
-#. can translate it like if it was "Traditional"
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Legacy (symbolic icons)"
msgstr "Classico (icone simboliche)"
@@ -946,6 +1156,7 @@ msgstr "Solo la barra menu"
msgid "Toolbar only"
msgstr "Solo la barra strumenti"
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Toolbar only (symbolic icons)"
msgstr "Solo barra degli strumenti (icone simboliche)"
@@ -965,10 +1176,12 @@ msgstr "%s cm"
msgid "%s in"
msgstr "%s in"
+#. Context: the path of the edited file
#: src/properties.py
msgid "Path"
msgstr "Percorso"
+#. Context: the file format of the edited file
#: src/properties.py
msgid "Format"
msgstr "Formato"
@@ -977,10 +1190,69 @@ msgstr "Formato"
msgid "Colorspace"
msgstr "Spazio colore"
+#. Context: an invalid colorspace format
#: src/properties.py
msgid "Invalid format"
msgstr "Formato non valido"
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "Impossibile salvare %s"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "Senza titolo"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "questa immagine"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "Scarta"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "Ci sono modifiche non salvate in %s."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+"Una parte dell'immagine è selezionata e i pixel sotto la selezione sonovuoti."
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr "Le modifiche dallo strumento corrente non sono state applicate."
+
+#: src/saving_manager.py
+msgid "Do you want to save anyway?"
+msgstr "Vuoi salvare comunque?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr "Sostituisci"
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "Questo formato di file non supporta i colori trasparenti."
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr "Puoi salvare l'immagine come file PNG o sostituire la trasparenza con:"
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "Sostituisci la trasparenza con:"
+
#: src/utilities.py
msgid "Transparent"
msgstr "Trasparente"
@@ -1002,6 +1274,9 @@ msgstr "Arancio"
msgid "Brown"
msgstr "Marrone"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
#: src/utilities.py
msgid "Probably brown"
msgstr "Probabilmente marrone"
@@ -1034,31 +1309,23 @@ msgstr "Viola"
msgid "Cyan"
msgstr "Ciano"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
#: src/utilities.py
-msgid "Probably turquoise"
+msgid "Probably teal"
msgstr "Probabilmente turchese"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
#: src/utilities.py
msgid "Unknown color name"
msgstr "Nome colore sconosciuto"
#: src/utilities.py
-msgid "Replace"
-msgstr "Sostituisci"
-
-#: src/utilities.py
-msgid "This file format doesn't support transparent colors."
-msgstr "Questo formato di file non supporta i colori trasparenti."
-
-#: src/utilities.py
-msgid "You can save the image as a PNG file, or replace transparency with:"
-msgstr "Puoi salvare l'immagine come file PNG o sostituire la trasparenza con:"
-
-#: src/utilities.py
-msgid "Replace transparency with:"
-msgstr "Sostituisci la trasparenza con:"
-
-#: src/utilities.py
msgid "All pictures"
msgstr "Tutte le immagini"
@@ -1074,28 +1341,49 @@ msgstr "Immagini JPEG"
msgid "BMP images"
msgstr "Immagini BMP"
+#. To translators: it appears in tooltips over numerical inputs
#: src/utilities.py
msgid "percents"
msgstr "percentuali"
-#. To translators: it's the angle measure unit
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
#: src/utilities.py
msgid "degrees"
msgstr "gradi"
+#: src/utilities.py
+#, fuzzy, python-format
+msgid "%s isn't an image."
+msgstr "Apri un' immagine"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr ""
+
+#. Context: an error message
#: src/window.py
#, python-format
msgid "Failed to load tool: %s"
msgstr "Strumento di caricamento non riuscito: %s"
#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr ""
+
+#: src/window.py
msgid "Modifications will take effect in the next new window."
msgstr "Le modifiche avranno effetto dalla prossima nuova finestra."
#: src/window.py src/tools/abstract_tool.py
#: src/optionsbars/classic/optionsbar-classic.ui
#: src/tools/classic_tools/tool_eraser.py
-#: src/tools/classic_tools/tool_highlight.py
msgid "No options"
msgstr "Nessuna opzione"
@@ -1104,6 +1392,11 @@ msgid "Opened images"
msgstr "Immagini aperte"
#: src/window.py
+#, fuzzy, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "Errore nell'avvio dell'applicazione, invia una segnalazione."
+
+#: src/window.py
#, python-format
msgid "Loading %s"
msgstr "Caricamento %s"
@@ -1117,54 +1410,36 @@ msgstr "Nuova Scheda"
msgid "Discard changes"
msgstr "Scarta le modifiche"
-#: src/window.py
-#, python-format
-msgid "There are unsaved modifications to %s."
-msgstr "Ci sono modifiche non salvate in %s."
-
+#. Context: %s will be replaced by the name of a file.
#: src/window.py
#, python-format
msgid "Where do you want to open %s?"
msgstr "Dove vuoi aprire %s?"
-#: src/window.py
-msgid "Open a picture"
-msgstr "Apri un'immagine"
-
#. Context for translation:
#. "What do you want to do with *these files*?"
#: src/window.py
msgid "these files"
msgstr "questi file"
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
#: src/window.py
#, fuzzy, python-format
msgid "What do you want to do with %s?"
msgstr "Cosa vuoi fare con %s?"
-#. else the exception was raised because an actual error occured, or
-#. the user clicked on "cancel"
-#: src/window.py
-#, python-format
-msgid "Failed to save %s"
-msgstr "Impossibile salvare %s"
-
-#: src/window.py
-msgid "Untitled"
-msgstr "Senza titolo"
-
-#. Context: the sentence "There are unsaved modifications to %s."
#: src/window.py
-msgid "this picture"
-msgstr "questa immagine"
+msgid "Image copied to clipboard"
+msgstr "Immagine copiata negli appunti"
#: src/window.py
-msgid "Discard"
-msgstr "Scarta"
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr "L'immagine è cambiata sul disco, vuoi ricaricarla?"
#: src/window.py
-msgid "Save picture as…"
-msgstr "Salva l'immagine come…"
+msgid "Reload"
+msgstr "Ricarica"
#: src/window.py
msgid "Import a picture"
@@ -1174,6 +1449,14 @@ msgstr "Importa un'immagine"
msgid "Required tool is not available"
msgstr "Lo strumento richiesto non è disponibile"
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
+"Impossibile avviare l'operazione: ID strumento errato (previsto {0}, "
+"ottenuto {1})"
+
#: src/tools/utilities_paths.py
msgid "Continue"
msgstr "Continua"
@@ -1191,13 +1474,15 @@ msgstr ""
msgid "Do you want to abort the operation, or to let the tool struggle ?"
msgstr "Vuoi interrompere l'operazione o vuoi forzare lo strumento?"
+#. Context: fill a shape with the color of the left click
#: src/optionsbars/classic/optionsbar_color_popover.py
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Main color"
msgstr "Colore primario"
-#. if state_as_string == 'secondary':
+#. Context: fill a shape with the color of the right click
#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Secondary color"
msgstr "Colore secondario"
@@ -1207,8 +1492,8 @@ msgid "Tool size"
msgstr "Dimensione strumento"
#: src/optionsbars/classic/optionsbar-classic.ui
-#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-filters.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
msgid "Preview"
msgstr "Anteprima"
@@ -1229,165 +1514,174 @@ msgid "Use this editor by default"
msgstr "Usa questo editor come predefinito"
#: src/optionsbars/selection/optionsbar-selection.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "More actions"
msgstr "Più azioni"
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
msgid "Apply"
msgstr "Applica"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "Più opzioni"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr "Espandi con..."
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "Trasparenza"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Select a filter…"
msgstr "Seleziona un filtro…"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Saturation"
msgstr "Saturazione"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blur radius"
msgstr "Raggio di sfocatura"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-msgid "Transparency"
-msgstr "Trasparenza"
-
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Change saturation"
msgstr "Cambia saturazione"
#. Context: a filter adding like a light veil on the image
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Veil"
-msgstr ""
+msgstr "Velo"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
msgid "Add transparency"
msgstr "Aggiungi trasparenza"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Invert colors"
msgstr "Inverti i colori"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#, fuzzy
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blurring"
msgstr "Sfocatura"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Fast blur"
-msgstr ""
+msgstr "Sfocatura veloce"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Slow blur"
-msgstr ""
+msgstr "Sfocatura lenta"
#. Context: a filter that censors the image with some kind of tiles
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-msgid "Pixelisation"
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
msgstr "Pixelizzazione"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Blur direction"
-msgstr "Selezione colore"
+msgstr "Direzione sfocatura"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Horizontal"
-msgstr "Sfocatura orizzontalmente"
+msgstr "Orizzontale"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Vertical"
-msgstr "Sfocatura verticale"
+msgstr "Verticale"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "No direction"
-msgstr "Selezione colore"
+msgstr "Nessuna direzione"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle (degrees)"
msgstr "Angolo (gradi)"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle"
msgstr "Angolo"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate left"
msgstr "Ruota a sinistra"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate right"
msgstr "Ruota a destra"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip horizontally"
msgstr "Ribalta orizzontalmente"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip vertically"
msgstr "Ribalta verticalmente"
-#: src/optionsbars/canvas/optionsbar-scale.ui
-msgid "More options"
-msgstr "Più opzioni"
-
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Keep proportions"
msgstr "Mantieni proporzioni"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Always [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Always"
msgstr "Sempre"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "[Keep proportions only] when scaling from corners"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "When scaling from corners"
msgstr "Quando si esegue il ridimensionamento dagli angoli"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Never [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Never"
msgstr "Mai"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Horizontal deformation"
msgstr "Deformazione orizzontale"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Vertical deformation"
msgstr "Deformazione verticale"
+#: src/tools/ui/selection.ui
+msgid "Transform"
+msgstr "Trasforma"
+
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
msgid "Line shape"
msgstr "Forma della linea"
+#. Context: this is the name of a line shape
#. Default values
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
@@ -1395,80 +1689,162 @@ msgstr "Forma della linea"
msgid "Round"
msgstr "Tondo"
+#. Context: this is the name of a line shape
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Thin"
-msgstr "Sottile"
-
-#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
msgid "Square"
msgstr "Quadrato"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "No arrow"
+msgstr "Nessuna Freccia"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr "Freccia semplice"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Double arrow"
+msgstr "Doppia freccia"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-msgid "Use dashes"
-msgstr "Usa tratti"
+msgid "No dashes"
+msgstr "Nessun trattino"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
-msgid "Arrow"
-msgstr "Freccia"
+#: src/tools/ui/tool-pencil.ui
+msgid "Simple dashes"
+msgstr "Trattini semplici"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-shape.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Long dashes"
+msgstr "Trattini lunghi"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Short dashes"
+msgstr "Trattini piccoli"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr "Trattini alternati"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
msgid "Antialiasing"
msgstr "Antialiasing"
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Dark text on light background"
+msgstr "Testo scuro su sfondo chiaro"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr "Testo chiaro su sfondo scuro"
+
#: src/tools/ui/tool-line.ui
msgid "Color gradient"
msgstr "Gradiente di colore"
+#. Context: title for the list of the possible painting algorithms.
#: src/tools/ui/tool-paint.ui
msgid "Behavior"
msgstr "Comportamento"
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
#: src/tools/ui/tool-paint.ui
msgid "Encircle and fill"
msgstr "Accerchia e riempi"
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
#: src/tools/ui/tool-paint.ui
msgid "Erase and replace"
msgstr "Cancella e sostituisci"
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
#: src/tools/ui/tool-paint.ui
-msgid "Clipping"
-msgstr "Ritaglio"
+msgid "Entire image"
+msgstr "Immagine intera"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rectangle"
-msgstr "Rettangolo"
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+msgid "Remove color"
+msgstr "Rimuovi colore"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rounded rectangle"
-msgstr "Rettangolo arrotondato"
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr "Tipo di punti"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Oval"
-msgstr "Ovale"
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "Cerchio"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr "Croce"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr "Croce a forma di X"
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr "Includere un numero"
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr "Numero successivo"
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr "Reimposta numero"
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr "Decrementa numero"
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr "Incrementa numero"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Polygon"
-msgstr "Poligono"
+msgid "Solid outline"
+msgstr "Profilo solido"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Free shape"
-msgstr "Forma libera"
+msgid "Dashed outline"
+msgstr "Profilo tratteggiato"
+#. if state_as_string == 'none':
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Circle"
-msgstr "Cerchio"
+msgid "No outline"
+msgstr "Nessun contorno"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr "Riempimento"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Empty outline"
-msgstr "Contorno vuoto"
+msgid "Empty shape"
+msgstr "Forma vuota"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Horizontal gradient"
@@ -1482,6 +1858,26 @@ msgstr "Gradiente verticale"
msgid "Radial gradient"
msgstr "Gradiente radiale"
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "Rettangolo"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr "Rettangolo arrotondato"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "Ovale"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "Poligono"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "Forma libera"
+
#: src/tools/ui/tool-shape.ui
msgid "Close shape"
msgstr "Chiudi forma"
@@ -1495,6 +1891,10 @@ msgid "Font"
msgstr "Carattere"
#: src/tools/ui/tool-text.ui
+msgid "Select a font…"
+msgstr "Seleziona un font…"
+
+#: src/tools/ui/tool-text.ui
msgid "Italic"
msgstr "Italic"
@@ -1502,35 +1902,31 @@ msgstr "Italic"
msgid "Bold"
msgstr "Grassetto"
+#. Context: the types of background behind the inserted text
#: src/tools/ui/tool-text.ui
msgid "Background"
msgstr "Sfondo"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "No background"
msgstr "Nessuno sfondo"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Shadow"
msgstr "Ombra"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
-#, fuzzy
msgid "Outline"
-msgstr "Contorno vuoto"
+msgstr "Contorno"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Rectangle background"
msgstr "Rettangolo disfondo"
-#: src/tools/ui/selection.ui
-msgid "Edit"
-msgstr "Modifica"
-
-#: src/tools/ui/selection.ui
-msgid "Flip"
-msgstr "Ribalta"
-
#: src/tools/classic_tools/tool_arc.py
msgid "Curve"
msgstr "Curva"
@@ -1544,10 +1940,18 @@ msgid "Dashed arrow"
msgstr "Freccia tratteggiata"
#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "Freccia"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
#: src/tools/classic_tools/tool_pencil.py
msgid "Dashed"
msgstr "Tratteggiata"
+#: src/tools/classic_tools/tool_highlight.py
+msgid "Highlighter options"
+msgstr "Opzioni evidenziatore"
+
#: src/tools/classic_tools/tool_line.py
msgid "Line"
msgstr "Linea"
@@ -1564,6 +1968,10 @@ msgstr "Opzioni pittura"
msgid "Click on an area to replace its color by transparency"
msgstr "Clicca su un'area per sostituire il suo colore con la trasparenza"
+#: src/tools/classic_tools/tool_paint.py
+msgid "Click on the canvas to entirely paint it"
+msgstr "Fare clic sulla tela per dipingerla interamente"
+
#: src/tools/classic_tools/tool_pencil.py
msgid "Pencil"
msgstr "Matita"
@@ -1572,15 +1980,20 @@ msgstr "Matita"
msgid "Pencil options"
msgstr "Opzioni matita"
+#: src/tools/classic_tools/tool_points.py
+msgid "Points options"
+msgstr "Opzioni punti"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr "Numero successivo: %s"
+
#: src/tools/classic_tools/tool_shape.py
msgid "Shape"
msgstr "Forma"
#: src/tools/classic_tools/tool_shape.py
-msgid "Empty"
-msgstr "Vuoto"
-
-#: src/tools/classic_tools/tool_shape.py
msgid "Shape options"
msgstr "Opzioni forma"
@@ -1592,6 +2005,7 @@ msgstr "Fai clic sul primo punto della forma per chiuderla."
msgid "Text"
msgstr "Testo"
+#. XXX use "text options" instead
#: src/tools/classic_tools/tool_text.py
msgid "Font options"
msgstr "Opzioni di testo"
@@ -1608,47 +2022,57 @@ msgstr "Seleziona un'area o click destro sulla tela"
msgid "Rectangle selection"
msgstr "Selezione rettangolare"
-#: src/tools/canvas_tools/abstract_canvas_tool.py
+#: src/tools/transform_tools/abstract_transform_tool.py
msgid "Error: invalid values"
msgstr "Errore: valori non validi"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the selection"
msgstr "Ritaglia la selezione"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the canvas"
msgstr "Ritaglia la tela"
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Click on the image to preview the selected filter"
msgstr ""
"Fai clic sull'immagine per visualizzare l'anteprima del filtro selezionato"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the selection"
msgstr "Rotazione della selezione"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the canvas"
msgstr "Rotazione della tela"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the selection"
msgstr "Ridimensionamento della selezione"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the canvas"
msgstr "Ridimensionamento della tela"
-#~ msgid "Classic"
-#~ msgstr "Classico"
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr "Storto"
+
+#~ msgid "Flip"
+#~ msgstr "Ribalta"
+
+#~ msgid "Edit"
+#~ msgstr "Modifica"
-#~ msgid "Filling"
-#~ msgstr "Riempimento"
+#~ msgid "Save as"
+#~ msgstr "Salve come"
-#~ msgid "Freehand"
-#~ msgstr "Mano libera"
+#~ msgid "Keyboard"
+#~ msgstr "Tastiera"
#~ msgid "Similar color"
#~ msgstr "Color simile"
diff --git a/po/meson.build b/po/meson.build
index c6cf0d34..39f45e67 100644
--- a/po/meson.build
+++ b/po/meson.build
@@ -1 +1,3 @@
+
i18n.gettext('drawing', args: '--add-location=file', preset: 'glib')
+
diff --git a/po/nl.po b/po/nl.po
index a8f74d7a..74a073f7 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: drawing\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-15 19:07+0200\n"
-"PO-Revision-Date: 2020-05-24 17:22+0200\n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
+"PO-Revision-Date: 2020-10-18 18:23+0200\n"
"Last-Translator: Heimen Stoffels <vistausss@outlook.com>\n"
"Language-Team: Dutch <vistausss@outlook.com>\n"
"Language: nl_NL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.3.1\n"
+"X-Generator: Poedit 2.4.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: data/com.github.maoschanz.drawing.desktop.in
@@ -79,6 +79,88 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+"Versie 0.6.4 bevat verschillende kleine foutoplossingen en nieuwe "
+"vertalingen."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+"Versie 0.6.3 bevat verbeteringen omtrent het tekenen van pijlen. Er zijn "
+"verschillende pijlproblemen opgelost en er is een nieuwe soort: pijlen met "
+"dubbele uiteinden."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+"Versie 0.6.2 bevat verschillende kleine foutoplossingen en nieuwe "
+"vertalingen."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+"Het markeergereedschap bevat nu een optie om lichte tekst op een donkere "
+"achtergrond te markeren."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+"Als een afbeelding is opgeslagen zonder de doorzichtigheid, dan wordt er een "
+"scherm getoond om de afbeelding opnieuw in te lezen. Daarnaast is de optie "
+"'Opnieuw inlezen' nu beschikbaar in elke vensterindeling."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr "Nieuwe functie: gehele afbeelding kopiëren naar klembord."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+"Je kunt voortaan doorzichtigheid verwijderen tijdens het opslaan van png-"
+"bestanden. Ook zijn er meer kleuropties beschikbaar om doorzichtige pixels "
+"te vervangen."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+"Er is een nieuw gereedschap genaamd 'Punten', wat je kunt gebruiken om "
+"afbeeldingen te voorzien van bijschriften."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr "Kleine fouten opgelost m.b.t. het draaigereedschap."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"Version 0.6 is a major update, with various important changes. The app is "
"more robust and has more tools:"
msgstr ""
@@ -108,8 +190,16 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+"Het tekstgereedschap ondersteunt voortaan de meeste systeemlettertypen, "
+"waardoor ook complexere tekens kunnen worden gebruikt (bijv. Aziatische)."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
-"with several types of blur, color inversion, pixelisation, saturation and "
+"with several types of blur, color inversion, pixelization, saturation and "
"transparency."
msgstr ""
"'Verzadiging' is vervangen door 'Filters', een krachtiger gereedschap met "
@@ -128,24 +218,37 @@ msgstr ""
"De grootste verbetering is de mogelijkheid om in of uit te zoomen middels de "
"minikaart, het trackpad of muiswiel."
-#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid ""
-"Version 0.4.8 features several minor bug fixes, and various new translations."
-msgstr ""
-"Versie 0.4.8 bevat verschillende kleine foutoplossingen en nieuwe "
-"vertalingen."
-
#. This is just my name, do not translate it.
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid "Romain F. T."
msgstr "Romain F. T."
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr "Het venster en hoofdmenu"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr "De selectie en de bijbehorende acties"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr "Verschillende soorten zoom"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr "Het menu 'Nieuwe afbeelding'"
+
#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
#: src/preferences.py
msgid "Preferences"
msgstr "Voorkeuren"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
msgid "Report a bug"
msgstr "Meld een fout (bug)"
@@ -192,21 +295,24 @@ msgstr "Nieuwe afbeelding van klembord"
#: src/ui/app-menus.ui src/ui/win-menus.ui
msgid "Reload file"
-msgstr "Bestand herladen"
+msgstr "Bestand opnieuw inlezen"
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/properties.py
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
msgid "Image properties"
msgstr "Eigenschappen"
#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
-#: src/ui/win-menus.ui src/window.py
+#: src/ui/win-menus.ui src/saving_manager.py
msgid "Save"
msgstr "Opslaan"
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Save without transparency"
+msgstr "Opslaan zonder doorzichtigheid"
+
#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
-#: src/utilities.py
+#: src/saving_manager.py
msgid "Save as…"
msgstr "Opslaan als…"
@@ -215,7 +321,13 @@ msgstr "Opslaan als…"
msgid "Export as…"
msgstr "Exporteren als…"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr "Kopiëren naar klembord"
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
msgid "Print"
msgstr "Afdrukken"
@@ -289,7 +401,7 @@ msgstr "_Beeld"
#: src/ui/app-menus.ui
msgid "Show the preview"
-msgstr "Voorbeeld tonen"
+msgstr "Voorvertoning aan/uit"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/preferences.py
msgid "Zoom"
@@ -300,20 +412,25 @@ msgid "Optimal Zoom"
msgstr "Optimaal zoomen"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom Out"
msgstr "Uitzoomen"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Original Zoom"
msgstr "Oorspronkelijk zoomniveau"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom In"
msgstr "Inzoomen"
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
#: src/ui/app-menus.ui
msgid "Position"
msgstr "Positie"
@@ -347,12 +464,6 @@ msgid "Refresh"
msgstr "Verversen"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
-#: src/preferences.py
-msgid "Show tools names"
-msgstr "Gereedschapsnamen tonen"
-
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/shortcuts.ui
-#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
msgid "Fullscreen"
msgstr "Beeldvullend"
@@ -385,50 +496,59 @@ msgstr "Kleuren omwisselen"
msgid "Color application mode"
msgstr "Kleurmodus"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Normal"
msgstr "Normaal"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Other modes"
msgstr "Overige modi"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Raw source color"
msgstr "Bronkleur"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Highlight"
-msgstr "Markering"
+msgstr "Accenten"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Difference"
msgstr "Verschil"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
-msgid "Photo manipulation"
-msgstr "Fotobewerking"
+msgid "Photo-oriented modes"
+msgstr "Fotobewerkingsmodi"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Hue only"
msgstr "Alleen tint"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Saturation only"
msgstr "Alleen verzadiging"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Hue and saturation"
msgstr "Tint en verzadiging"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Luminosity only"
msgstr "Alleen helderheid"
@@ -438,17 +558,17 @@ msgid "Don't use the colors but…"
msgstr "Geen kleuren gebruiken…"
#. To translators: this is a verb
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Blur"
msgstr "Vervaging"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Erase"
msgstr "Wissen"
-#: src/ui/app-menus.ui src/window.py
+#: src/ui/app-menus.ui
msgid "_Tools"
msgstr "_Gereedschap"
@@ -456,6 +576,23 @@ msgstr "_Gereedschap"
msgid "Previous tool"
msgstr "Vorig gereedschap"
+#: src/ui/app-menus.ui
+msgid "Active tool"
+msgstr "Actief gereedschap"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "Gereedschapsnamen tonen"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr "Breder"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Smaller width"
+msgstr "Smaller"
+
#: src/ui/app-menus.ui src/window.py
msgid "_Options"
msgstr "_Opties"
@@ -464,59 +601,71 @@ msgstr "_Opties"
msgid "_Help"
msgstr "_Hulp"
+#. Context: open the index of all help pages
#: src/ui/app-menus.ui
msgid "Index"
msgstr "Index"
+#. Context: open the help page about general use of the app
#: src/ui/app-menus.ui
msgid "Basic help"
-msgstr "Basale hulp"
+msgstr "Algemene hulp"
+#. Context: open the help page about classic tools
#: src/ui/app-menus.ui
msgid "Help about tools"
-msgstr "Hulp over gereedschappen"
+msgstr "Hulp omtrent gereedschappen"
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
#: src/ui/app-menus.ui
msgid "Canvas and selection"
msgstr "Canvas en selectie"
+#. Context: open the help page about the selection
#: src/ui/app-menus.ui
msgid "Help about selection"
msgstr "Hulp omtrent selecties"
#: src/ui/app-menus.ui src/ui/win-menus.ui
msgid "About Drawing"
-msgstr "Over Drawing"
+msgstr "Over Tekenen"
#: src/ui/headerbar.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
#: src/ui/toolbar-symbolic.ui src/window.py
msgid "Open"
msgstr "Openen"
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr "Afbeelding delen"
+
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Width"
msgstr "Breedte"
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Height"
msgstr "Hoogte"
#: src/ui/new-image-dialog.ui
-msgid "Background color"
-msgstr "Achtergrondkleur"
+msgid "Color"
+msgstr "Kleur"
#: src/ui/new-image-dialog.ui
msgid "Use these settings by default"
-msgstr "Deze instellingen standaard gebruiken"
+msgstr "Instellingen onthouden"
#: src/ui/minimap.ui
msgid "100%"
msgstr "100%"
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
#: src/ui/properties.ui src/utilities.py
msgid "pixels"
msgstr "pixels"
@@ -533,7 +682,7 @@ msgstr "inch"
msgid "Images"
msgstr "Afbeeldingen"
-#: src/ui/preferences.ui src/ui/shortcuts.ui
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "Tools"
msgstr "Gereedschappen"
@@ -552,30 +701,22 @@ msgid "Unselect"
msgstr "Selectie ongedaan maken"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Crop"
msgstr "Bijsnijden"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scale"
msgstr "Grootte aanpassen"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotate"
msgstr "Draaien"
-#. In this context, "Skew" is the name of the tool changing rectangles
-#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
-#. "Stretch/Skew" dialog.
-#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_skew.py
-msgid "Skew"
-msgstr "Scheefheid"
-
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Filters"
msgstr "Filters"
@@ -585,8 +726,8 @@ msgid "Open As New Image"
msgstr "Openen als nieuwe afbeelding"
#: src/ui/shortcuts.ui
-msgid "Keyboard"
-msgstr "Toetsenbord"
+msgid "Keyboard Shortcuts"
+msgstr "Sneltoetsen"
#: src/ui/shortcuts.ui
msgid "General"
@@ -597,50 +738,40 @@ msgid "Main menu"
msgstr "Hoofdmenu"
#: src/ui/shortcuts.ui
-msgid "Editing"
-msgstr "Bewerking"
-
-#: src/ui/shortcuts.ui
msgid "Image"
msgstr "Afbeelding"
-#: src/ui/shortcuts.ui
-msgid "Open a file"
-msgstr "Bestand openen"
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "Afbeeldingen openen"
#: src/ui/shortcuts.ui
msgid "Reload image from disk"
msgstr "Afbeelding opnieuw inlezen"
-#: src/ui/shortcuts.ui
-msgid "Save as"
-msgstr "Opslaan als"
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "Afbeelding opslaan als…"
#: src/ui/shortcuts.ui
msgid "Close the active image"
msgstr "Huidige afbeelding sluiten"
#: src/ui/shortcuts.ui
-msgid "Options menu"
-msgstr "Optiemenu"
+msgid "Open the tool options menu"
+msgstr "Gereedschapsoptiemenu openen"
#: src/ui/shortcuts.ui
msgid "Back to previous tool"
msgstr "Terug naar vorig gereedschap"
#: src/ui/shortcuts.ui
-msgid "Colors"
-msgstr "Kleuren"
-
-#. Label displayed in the keyboard shortcuts dialog
-#: src/ui/shortcuts.ui
-msgid "Edit the main color (left click)"
-msgstr "Hoofdkleur bewerken (linkermuisknop)"
+msgid "Apply a transformation"
+msgstr ""
-#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Edit the secondary color (right click)"
-msgstr "Alternatieve kleur bewerken (rechtermuisknop)"
+msgid "History"
+msgstr "Geschiedenis"
#: src/ui/shortcuts.ui
msgid "Selection"
@@ -657,9 +788,33 @@ msgid "Import a file as the selection"
msgstr "Importeer een bestand als selectie"
#: src/ui/shortcuts.ui
+msgid "Colors"
+msgstr "Kleuren"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Edit the main color (left click)"
+msgstr "Hoofdkleur bewerken (linkermuisknop)"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Edit the secondary color (right click)"
+msgstr "Alternatieve kleur bewerken (rechtermuisknop)"
+
+#: src/ui/shortcuts.ui
msgid "Tabs"
msgstr "Tabbladen"
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
+#: src/ui/shortcuts.ui
+msgid "Navigation"
+msgstr "Navigatie"
+
+#: src/ui/shortcuts.ui
+msgid "Toggle the preview"
+msgstr "Voorvertoning aan/uit"
+
#: src/ui/shortcuts.ui
msgid "Enter fullscreen mode"
msgstr "Beeldvullende modus starten"
@@ -669,17 +824,17 @@ msgid "Exit fullscreen mode"
msgstr "Beeldvullende modus verlaten"
#: src/ui/shortcuts.ui
-msgid "Navigation"
-msgstr "Navigatie"
-
-#: src/ui/shortcuts.ui
-msgid "Toggle the preview"
-msgstr "Voorbeeld tonen/verbergen"
+msgid "Touch gestures"
+msgstr "Aanraakgebaren"
#: src/ui/win-menus.ui
msgid "Troubleshoot selection"
msgstr "Problemen oplossen met selecties"
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr "Overig gereedschap"
+
#: src/ui/window.ui
msgid "Error starting the application, please report this bug."
msgstr "Kan de toepassing niet starten. Meld deze bug."
@@ -694,6 +849,12 @@ msgstr "%s ongedaan maken"
msgid "Redo %s"
msgstr "%s opnieuw toepassen"
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr "De nieuwe pixbuf is leeg - er is niks toegepast op %s"
+
#: src/image.py
msgid "Can't reload a never-saved file from the disk."
msgstr "Niet-opgeslagen bestanden kunnen niet opnieuw worden ingelezen."
@@ -702,15 +863,15 @@ msgstr "Niet-opgeslagen bestanden kunnen niet opnieuw worden ingelezen."
msgid "Unsaved file"
msgstr "Niet-opgeslagen bestand"
-#: src/new_image_dialog.py src/utilities.py src/window.py
-#: src/tools/utilities_paths.py src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-crop.ui src/tools/ui/tool-filters.ui
-#: src/tools/ui/tool-rotate.ui src/tools/ui/tool-scale.ui
-#: src/tools/ui/tool-skew.ui
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
msgid "Cancel"
msgstr "Annuleren"
@@ -719,18 +880,22 @@ msgstr "Annuleren"
msgid "Create"
msgstr "Maken"
+#. Description of a command line option
#: src/main.py
msgid "Show the app version"
msgstr "Toepassingsversie tonen"
+#. Description of a command line option
#: src/main.py
msgid "Open a new window"
msgstr "Nieuw venster openen"
+#. Description of a command line option
#: src/main.py
msgid "Open a new tab"
msgstr "Nieuw tabblad openen"
+#. Description of a command line option
#: src/main.py
msgid "Edit the clipboard content"
msgstr "Klembordinhoud bewerken"
@@ -743,12 +908,14 @@ msgstr "Deze versie is instabiel!"
msgid "Report bugs or ideas"
msgstr "Meld bugs of deel ideëen"
-#. To tranlators: "translate" this by your name, it will be displayed
-#. in the "about" dialog
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
#: src/main.py
msgid "translator-credits"
msgstr "Heimen Stoffels"
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
#: src/main.py
msgid "GNOME's \"Art Libre\" icon set authors"
msgstr "De makers van GNOME's 'Art Libre'-pictogramset"
@@ -762,17 +929,24 @@ msgid "Official webpage"
msgstr "Officiële website"
#: src/main.py
-#, python-format
-msgid "Error opening this file. Did you mean %s ?"
+#, fuzzy
+msgid "Error opening this file."
msgstr "Kan dit bestand niet openen. Bedoelde je %s?"
-#. This displays the zoom level, %s will be replaced with a number, while
-#. %% is just the symbol '%'
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr ""
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
#: src/minimap.py
#, python-format
msgid "%s%%"
msgstr "%s%%"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "New images"
msgstr "Nieuwe afbeeldingen"
@@ -785,17 +959,23 @@ msgstr "Standaardbreedte"
msgid "Default height"
msgstr "Standaardhoogte"
-#: src/preferences.py
-msgid "Default background"
-msgstr "Standaardachtergrond"
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Default color"
+msgstr "Standaardkleur"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Images saving"
msgstr "Afbeeldingen opslaan"
#: src/preferences.py
msgid "JPEG and BMP images can't handle transparency."
-msgstr "JPEG- BMP-afbeeldingen kunnen niet omgaan met doorzichtigheid."
+msgstr "JPEG- en BMP-afbeeldingen kunnen niet omgaan met doorzichtigheid."
#: src/preferences.py
msgid ""
@@ -805,19 +985,23 @@ msgstr ""
"Als je afbeeldingen opslaat in deze formaten, wat wil je dan gebruiken om "
"doorzichtige pixels te vervangen?"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "White"
msgstr "Wit"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "Black"
msgstr "Zwart"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
msgid "Checkboard"
msgstr "Schaakbord"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
msgid "Nothing"
msgstr "Niets"
@@ -830,13 +1014,15 @@ msgid "You can zoom with Ctrl+scrolling, or only scrolling."
msgstr "Je kunt in-/uitzoomen met Ctrl+scrollen of alleen door te scrollen."
#: src/preferences.py
-msgid "Using keyboard shortcuts or touch gestures is possible too."
-msgstr "Daarnaast kun je ook sneltoetsen of aanraakgebaren gebruiken."
+msgid "See the user help manual for explanations."
+msgstr "Bekijk de handleiding voor meer informatie."
#: src/preferences.py
msgid "Use 'Ctrl' to zoom"
msgstr "'Ctrl' gebruiken om in/uit te zoomen"
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
#: src/preferences.py
msgid "Appearance"
msgstr "Uiterlijk"
@@ -845,6 +1031,7 @@ msgstr "Uiterlijk"
msgid "Use big icons"
msgstr "Grote pictogrammen gebruiken"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Additional tools"
msgstr "Extra gereedschappen"
@@ -857,44 +1044,71 @@ msgstr ""
"Deze gereedschappen zijn niet zo handig en betrouwbaar als zou moeten, dus "
"zijn ze niet allemaal ingeschakeld."
-#. In the meaning "a rubber eraser"
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
#: src/preferences.py src/tools/classic_tools/tool_eraser.py
msgid "Eraser"
msgstr "Gum"
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
#: src/preferences.py src/tools/classic_tools/tool_highlight.py
msgid "Highlighter"
msgstr "Markering"
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr "Punten"
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
#: src/preferences.py src/tools/selection_tools/select_free.py
msgid "Free selection"
msgstr "Vrije selectie"
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
#: src/preferences.py src/tools/selection_tools/select_color.py
msgid "Color selection"
msgstr "Kleurselectie"
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
#: src/preferences.py src/tools/classic_tools/tool_picker.py
msgid "Color Picker"
msgstr "Kleurkiezer"
+#. Context: the name of a tool to fill an area of one color with an other
#: src/preferences.py src/tools/classic_tools/tool_paint.py
msgid "Paint"
msgstr "Kwast"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Advanced options"
msgstr "Geavanceerde opties"
#: src/preferences.py
msgid "Preview size"
-msgstr "Voorbeeldgrootte"
+msgstr "Voorvertoningsgrootte"
+#. This label will not be displayed in the UI of stable versions
#: src/preferences.py
msgid "Development features"
msgstr "Experimentele functies"
#: src/preferences.py
+msgid "Background color"
+msgstr "Achtergrondkleur"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
msgid "Layout"
msgstr "Indeling"
@@ -902,6 +1116,7 @@ msgstr "Indeling"
msgid "The recommended value is \"Automatic\"."
msgstr "De aanbevolen instelling is 'Automatisch'."
+#. It has to match what's written in the previous string.
#: src/preferences.py
msgid "Automatic"
msgstr "Automatisch"
@@ -921,7 +1136,8 @@ msgid "Legacy"
msgstr "Klassiek"
#. "Legacy" is about the window layout, it means menubar+toolbar, you
-#. can translate it like if it was "Traditional"
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Legacy (symbolic icons)"
msgstr "Klassiek (symbolische pictogrammen)"
@@ -934,6 +1150,7 @@ msgstr "Alleen menubalk"
msgid "Toolbar only"
msgstr "Alleen werkbalk"
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Toolbar only (symbolic icons)"
msgstr "Werkbalk (symbolische pictogrammen)"
@@ -953,10 +1170,12 @@ msgstr "%s cm"
msgid "%s in"
msgstr "%s in"
+#. Context: the path of the edited file
#: src/properties.py
msgid "Path"
msgstr "Pad"
+#. Context: the file format of the edited file
#: src/properties.py
msgid "Format"
msgstr "Formaat"
@@ -965,10 +1184,72 @@ msgstr "Formaat"
msgid "Colorspace"
msgstr "Kleurruimte"
+#. Context: an invalid colorspace format
#: src/properties.py
msgid "Invalid format"
msgstr "Ongeldig formaat"
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "Kan %s niet opslaan"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "Naamloos"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "deze afbeelding"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "Verwerpen"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "%s bevat niet-opgeslagen aanpassingen."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+"Er is een deel van de afbeelding geselecteerd en de pixels eronder zijn "
+"blanco."
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr "De aangebrachte bewerkingen zijn nog niet toegepast."
+
+#: src/saving_manager.py
+msgid "Do you want to save anyway?"
+msgstr "Wil je het bestand tóch opslaan?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr "Vervangen"
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "Dit bestandsformaat ondersteunt geen doorzichtige kleuren."
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr ""
+"Je kunt de afbeelding opslaan als png-bestand of de doorzichtigheid "
+"vervangen door:"
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "Doorzichtigheid vervangen door:"
+
#: src/utilities.py
msgid "Transparent"
msgstr "Doorzichtig"
@@ -990,6 +1271,9 @@ msgstr "Oranje"
msgid "Brown"
msgstr "Bruin"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
#: src/utilities.py
msgid "Probably brown"
msgstr "Waarschijnlijk bruin"
@@ -1022,33 +1306,23 @@ msgstr "Paars"
msgid "Cyan"
msgstr "Groenblauw"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
#: src/utilities.py
-msgid "Probably turquoise"
+msgid "Probably teal"
msgstr "Waarschijnlijk turkoois"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
#: src/utilities.py
msgid "Unknown color name"
msgstr "Onbekende kleurnaam"
#: src/utilities.py
-msgid "Replace"
-msgstr "Vervangen"
-
-#: src/utilities.py
-msgid "This file format doesn't support transparent colors."
-msgstr "Dit bestandsformaat ondersteunt geen doorzichtige kleuren."
-
-#: src/utilities.py
-msgid "You can save the image as a PNG file, or replace transparency with:"
-msgstr ""
-"Je kunt de afbeelding opslaan als PNG-bestand of de doorzichtigheid "
-"vervangen door:"
-
-#: src/utilities.py
-msgid "Replace transparency with:"
-msgstr "Doorzichtigheid vervangen door:"
-
-#: src/utilities.py
msgid "All pictures"
msgstr "Alle afbeeldingen"
@@ -1064,28 +1338,49 @@ msgstr "JPEG-afbeeldingen"
msgid "BMP images"
msgstr "BMP-afbeeldingen"
+#. To translators: it appears in tooltips over numerical inputs
#: src/utilities.py
msgid "percents"
msgstr "procent"
-#. To translators: it's the angle measure unit
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
#: src/utilities.py
msgid "degrees"
msgstr "graden"
+#: src/utilities.py
+#, fuzzy, python-format
+msgid "%s isn't an image."
+msgstr "Afbeelding openen"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr ""
+
+#. Context: an error message
#: src/window.py
#, python-format
msgid "Failed to load tool: %s"
msgstr "Kan gereedschap niet laden: %s"
#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr ""
+
+#: src/window.py
msgid "Modifications will take effect in the next new window."
-msgstr "De wijzigingen worden toegepast na een herstart."
+msgstr "Herstart om de wijzigingen toe te passen."
#: src/window.py src/tools/abstract_tool.py
#: src/optionsbars/classic/optionsbar-classic.ui
#: src/tools/classic_tools/tool_eraser.py
-#: src/tools/classic_tools/tool_highlight.py
msgid "No options"
msgstr "Geen opties"
@@ -1095,6 +1390,11 @@ msgstr "Geopende afbeeldingen"
#: src/window.py
#, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "Fout: ongeldig paneel voor '%s'. Meld deze bug."
+
+#: src/window.py
+#, python-format
msgid "Loading %s"
msgstr "Bezig met laden van %s"
@@ -1107,54 +1407,36 @@ msgstr "Nieuw tabblad"
msgid "Discard changes"
msgstr "Wijzigingen verwerpen"
-#: src/window.py
-#, python-format
-msgid "There are unsaved modifications to %s."
-msgstr "%s bevat niet-opgeslagen wijzigingen."
-
+#. Context: %s will be replaced by the name of a file.
#: src/window.py
#, python-format
msgid "Where do you want to open %s?"
msgstr "Waar wil je %s openen?"
-#: src/window.py
-msgid "Open a picture"
-msgstr "Afbeeldingen openen"
-
#. Context for translation:
#. "What do you want to do with *these files*?"
#: src/window.py
msgid "these files"
msgstr "deze bestanden"
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
#: src/window.py
#, python-format
msgid "What do you want to do with %s?"
msgstr "Wat wil je doen met %s?"
-#. else the exception was raised because an actual error occured, or
-#. the user clicked on "cancel"
-#: src/window.py
-#, python-format
-msgid "Failed to save %s"
-msgstr "Kan %s niet opslaan"
-
-#: src/window.py
-msgid "Untitled"
-msgstr "Naamloos"
-
-#. Context: the sentence "There are unsaved modifications to %s."
#: src/window.py
-msgid "this picture"
-msgstr "deze afbeelding"
+msgid "Image copied to clipboard"
+msgstr "De afbeelding is gekopieerd naar het klembord"
#: src/window.py
-msgid "Discard"
-msgstr "Verwerpen"
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr "Het afbeeldingsbestand is gewijzigd. Wil je het opnieuw inlezen?"
#: src/window.py
-msgid "Save picture as…"
-msgstr "Afbeelding opslaan als…"
+msgid "Reload"
+msgstr "Opnieuw inlezen"
#: src/window.py
msgid "Import a picture"
@@ -1164,6 +1446,14 @@ msgstr "Afbeelding importeren"
msgid "Required tool is not available"
msgstr "Het vereiste gereedschap is niet beschikbaar"
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
+"De actie kan niet worden uitgevoerd: ongeldige gereedschapsid (verwacht: {0} "
+"- verkregen: {1})"
+
#: src/tools/utilities_paths.py
msgid "Continue"
msgstr "Doorgaan"
@@ -1181,13 +1471,15 @@ msgid "Do you want to abort the operation, or to let the tool struggle ?"
msgstr ""
"Wil je de handeling afbreken of het gereedschap tevergeefs laten doorgaan?"
+#. Context: fill a shape with the color of the left click
#: src/optionsbars/classic/optionsbar_color_popover.py
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Main color"
msgstr "Hoofdkleur"
-#. if state_as_string == 'secondary':
+#. Context: fill a shape with the color of the right click
#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Secondary color"
msgstr "Alternatieve kleur"
@@ -1197,10 +1489,10 @@ msgid "Tool size"
msgstr "Gereedschapsgrootte"
#: src/optionsbars/classic/optionsbar-classic.ui
-#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-filters.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
msgid "Preview"
-msgstr "Voorbeeld"
+msgstr "Voorvertoning"
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "How the color will be applied to the existing pixels"
@@ -1219,160 +1511,174 @@ msgid "Use this editor by default"
msgstr "Gebruik standaard deze bewerker"
#: src/optionsbars/selection/optionsbar-selection.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "More actions"
msgstr "Meer acties"
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
msgid "Apply"
msgstr "Toepassen"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "Meer opties"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr "Uitbreiden met…"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "Doorzichtigheid"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Select a filter…"
msgstr "Kies een filter…"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Saturation"
msgstr "Verzadiging"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blur radius"
msgstr "Vervaagstraal"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-msgid "Transparency"
-msgstr "Doorzichtigheid"
-
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Change saturation"
msgstr "Verzadiging aanpassen"
#. Context: a filter adding like a light veil on the image
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Veil"
msgstr "Sluier"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
msgid "Add transparency"
msgstr "Doorzichtigheid toevoegen"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Invert colors"
msgstr "Kleuren omdraaien"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blurring"
msgstr "Vervaging"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Fast blur"
msgstr "Snelle vervaging"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Slow blur"
msgstr "Langzame vervaging"
#. Context: a filter that censors the image with some kind of tiles
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-msgid "Pixelisation"
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
msgstr "Pixelvorming"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Blur direction"
msgstr "Vervaagrichting"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Horizontal"
msgstr "Horizontaal"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Vertical"
msgstr "Verticaal"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "No direction"
msgstr "Geen richting"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle (degrees)"
msgstr "Hoek (graden)"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle"
msgstr "Hoek"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate left"
msgstr "Naar links draaien"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate right"
msgstr "Naar rechts draaien"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip horizontally"
msgstr "Horizontaal spiegelen"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip vertically"
msgstr "Verticaal spiegelen"
-#: src/optionsbars/canvas/optionsbar-scale.ui
-msgid "More options"
-msgstr "Meer opties"
-
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Keep proportions"
msgstr "Afmetingen behouden"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Always [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Always"
msgstr "Altijd"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "[Keep proportions only] when scaling from corners"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "When scaling from corners"
msgstr "Bij aanpassen vanuit de hoeken"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Never [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Never"
msgstr "Nooit"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Horizontal deformation"
msgstr "Horizontaal verloop"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Vertical deformation"
msgstr "Verticaal verloop"
+#: src/tools/ui/selection.ui
+msgid "Transform"
+msgstr "Transformeren"
+
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
msgid "Line shape"
msgstr "Lijnvorm"
+#. Context: this is the name of a line shape
#. Default values
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
@@ -1380,80 +1686,162 @@ msgstr "Lijnvorm"
msgid "Round"
msgstr "Rond"
+#. Context: this is the name of a line shape
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Thin"
-msgstr "Dun"
-
-#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
msgid "Square"
msgstr "Vierkant"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "No arrow"
+msgstr "Geen pijl"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr "Eenvoudige pijl"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Double arrow"
+msgstr "Dubbele pijl"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-msgid "Use dashes"
-msgstr "Streepjes gebruiken"
+msgid "No dashes"
+msgstr "Geen streepjes"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
-msgid "Arrow"
-msgstr "Pijl"
+#: src/tools/ui/tool-pencil.ui
+msgid "Simple dashes"
+msgstr "Eenvoudige streepjes"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Long dashes"
+msgstr "Lange streepjes"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Short dashes"
+msgstr "Korte streepjes"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-shape.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr "Afwisselende streepjes"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
msgid "Antialiasing"
msgstr "Anti-kartelvorming"
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Dark text on light background"
+msgstr "Donkere tekst op lichte achtergrond"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr "Lichte tekst op donkere achtergrond"
+
#: src/tools/ui/tool-line.ui
msgid "Color gradient"
msgstr "Kleurverloop"
+#. Context: title for the list of the possible painting algorithms.
#: src/tools/ui/tool-paint.ui
msgid "Behavior"
msgstr "Gedrag"
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
#: src/tools/ui/tool-paint.ui
msgid "Encircle and fill"
msgstr "Omcirkelen en opvullen"
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
#: src/tools/ui/tool-paint.ui
msgid "Erase and replace"
msgstr "Wissen en vervangen"
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
#: src/tools/ui/tool-paint.ui
-msgid "Clipping"
-msgstr "Vasthouden"
+msgid "Entire image"
+msgstr "Gehele afbeelding"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rectangle"
-msgstr "Rechthoek"
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+msgid "Remove color"
+msgstr "Kleur verwijderen"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rounded rectangle"
-msgstr "Afgeronde rechthoek"
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr "Soort stippen"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Oval"
-msgstr "Ovaal"
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "Cirkel"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr "Kruis"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr "X-vormig kruis"
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr "Inclusief getal"
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr "Volgend getal"
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr "Standaardwaarde"
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr "Getal verlagen"
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr "Getal verhogen"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Polygon"
-msgstr "Polygoon"
+msgid "Solid outline"
+msgstr "Effen contour"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Free shape"
-msgstr "Vrije vorm"
+msgid "Dashed outline"
+msgstr "Gestreepte rand"
+#. if state_as_string == 'none':
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Circle"
-msgstr "Cirkel"
+msgid "No outline"
+msgstr "Geen randcontour"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr "Opvullen"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Empty outline"
-msgstr "Leeg contour"
+msgid "Empty shape"
+msgstr "Blanco vorm"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Horizontal gradient"
@@ -1467,6 +1855,26 @@ msgstr "Verticaal verloop"
msgid "Radial gradient"
msgstr "Straalverloop"
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "Rechthoek"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr "Afgeronde rechthoek"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "Ovaal"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "Polygoon"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "Vrije vorm"
+
#: src/tools/ui/tool-shape.ui
msgid "Close shape"
msgstr "Vorm sluiten"
@@ -1480,6 +1888,10 @@ msgid "Font"
msgstr "Lettertype"
#: src/tools/ui/tool-text.ui
+msgid "Select a font…"
+msgstr "Kies een lettertype…"
+
+#: src/tools/ui/tool-text.ui
msgid "Italic"
msgstr "Cursief"
@@ -1487,34 +1899,31 @@ msgstr "Cursief"
msgid "Bold"
msgstr "Vetgedrukt"
+#. Context: the types of background behind the inserted text
#: src/tools/ui/tool-text.ui
msgid "Background"
msgstr "Achtergrond"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "No background"
msgstr "Geen achtergrond"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Shadow"
msgstr "Kleurschaduw"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Outline"
msgstr "Contour"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Rectangle background"
msgstr "Rechthoekige achtergrond"
-#: src/tools/ui/selection.ui
-msgid "Edit"
-msgstr "Bewerken"
-
-#: src/tools/ui/selection.ui
-msgid "Flip"
-msgstr "Omdraaien"
-
#: src/tools/classic_tools/tool_arc.py
msgid "Curve"
msgstr "Boog"
@@ -1528,10 +1937,18 @@ msgid "Dashed arrow"
msgstr "Gestreepte pijl"
#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "Pijl"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
#: src/tools/classic_tools/tool_pencil.py
msgid "Dashed"
msgstr "Gestreept"
+#: src/tools/classic_tools/tool_highlight.py
+msgid "Highlighter options"
+msgstr "Markeeropties"
+
#: src/tools/classic_tools/tool_line.py
msgid "Line"
msgstr "Lijn"
@@ -1549,6 +1966,10 @@ msgid "Click on an area to replace its color by transparency"
msgstr ""
"Klik een gebied aan om de kleur ervan te vervangen door doorzichtigheid"
+#: src/tools/classic_tools/tool_paint.py
+msgid "Click on the canvas to entirely paint it"
+msgstr "Klik op het canvas om het op te vullen"
+
#: src/tools/classic_tools/tool_pencil.py
msgid "Pencil"
msgstr "Potlood"
@@ -1557,15 +1978,20 @@ msgstr "Potlood"
msgid "Pencil options"
msgstr "Potloodopties"
+#: src/tools/classic_tools/tool_points.py
+msgid "Points options"
+msgstr "Puntopties"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr "Volgend getal: %s"
+
#: src/tools/classic_tools/tool_shape.py
msgid "Shape"
msgstr "Vorm"
#: src/tools/classic_tools/tool_shape.py
-msgid "Empty"
-msgstr "Leeg"
-
-#: src/tools/classic_tools/tool_shape.py
msgid "Shape options"
msgstr "Vormopties"
@@ -1577,6 +2003,7 @@ msgstr "Klik op het eerste punt om te sluiten."
msgid "Text"
msgstr "Tekst"
+#. XXX use "text options" instead
#: src/tools/classic_tools/tool_text.py
msgid "Font options"
msgstr "Lettertype-opties"
@@ -1593,47 +2020,60 @@ msgstr "Selecteer een gebied of rechtsklik op het canvas"
msgid "Rectangle selection"
msgstr "Rechthoekselectie"
-#: src/tools/canvas_tools/abstract_canvas_tool.py
+#: src/tools/transform_tools/abstract_transform_tool.py
msgid "Error: invalid values"
msgstr "Fout: ongeldige waarden"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the selection"
msgstr "Bezig met bijsnijden van selectie"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the canvas"
msgstr "Bezig met bijsnijden van canvas"
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Click on the image to preview the selected filter"
msgstr "Klik op de afbeelding voor een voorvertoning van het gekozen filter"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the selection"
msgstr "Bezig met draaien van selectie"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the canvas"
msgstr "Bezig met draaien van canvas"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the selection"
msgstr "Bezig met wijzigen van selectiegrootte"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the canvas"
msgstr "Bezig met wijzigen van canvasgrootte"
-#~ msgid "Classic"
-#~ msgstr "Klassiek"
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr "Scheefheid"
+
+#~ msgid "Flip"
+#~ msgstr "Omdraaien"
+
+#~ msgid "Edit"
+#~ msgstr "Bewerken"
+
+#~ msgid "Save as"
+#~ msgstr "Opslaan als"
+
+#~ msgid "Keyboard"
+#~ msgstr "Toetsenbord"
#~ msgid "Close"
#~ msgstr "Sluiten"
-#~ msgid "Filling"
-#~ msgstr "Opvullen"
-
#~ msgid "Freehand"
#~ msgstr "Vrije vorm"
diff --git a/po/pl.po b/po/pl.po
index b2d596c4..d29fe87e 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -1,13 +1,13 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the drawing package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+# Piotr Komur <pkomur@gmail.com>, 2019-2020.
#
msgid ""
msgstr ""
"Project-Id-Version: drawing\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-15 19:07+0200\n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
"PO-Revision-Date: 2020-03-19 15:58+0100\n"
"Last-Translator: Piotr Komur <pkomur@gmail.com>\n"
"Language-Team: Piotr Komur\n"
@@ -80,6 +80,73 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+"Wersja 0.6.4 zawiera kilka drobnych poprawek błędów i nowe tłumaczenia."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+"Wersja 0.6.2 zawiera kilka drobnych poprawek błędów i nowe tłumaczenia."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"Version 0.6 is a major update, with various important changes. The app is "
"more robust and has more tools:"
msgstr ""
@@ -110,8 +177,14 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
-"with several types of blur, color inversion, pixelisation, saturation and "
+"with several types of blur, color inversion, pixelization, saturation and "
"transparency."
msgstr ""
"Narzędzie „nasycenia” zostało zastąpione przez „filtry”, bardziej wydajne "
@@ -130,23 +203,37 @@ msgstr ""
"Najważniejszą nową funkcją jest możliwość powiększania (lub zmniejszania) "
"obrazu za pomocą minimapy, touchpada lub kółka myszy."
-#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid ""
-"Version 0.4.8 features several minor bug fixes, and various new translations."
-msgstr ""
-"Wersja 0.4.8 zawiera kilka drobnych poprawek błędów i nowe tłumaczenia."
-
#. This is just my name, do not translate it.
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid "Romain F. T."
msgstr "Romain F. T."
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr ""
+
#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
#: src/preferences.py
msgid "Preferences"
msgstr "Preferencje"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
msgid "Report a bug"
msgstr "Zgłoś błąd"
@@ -195,19 +282,23 @@ msgstr "Nowy obraz ze schowka"
msgid "Reload file"
msgstr "Przeładuj plik"
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/properties.py
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
msgid "Image properties"
msgstr "Właściwości obrazu"
#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
-#: src/ui/win-menus.ui src/window.py
+#: src/ui/win-menus.ui src/saving_manager.py
msgid "Save"
msgstr "Zapisz"
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+#, fuzzy
+msgid "Save without transparency"
+msgstr "Dodaj przeźroczystość"
+
#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
-#: src/utilities.py
+#: src/saving_manager.py
msgid "Save as…"
msgstr "Zapisz jako…"
@@ -216,7 +307,13 @@ msgstr "Zapisz jako…"
msgid "Export as…"
msgstr "Eksportuj jako…"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
msgid "Print"
msgstr "Drukuj"
@@ -301,20 +398,25 @@ msgid "Optimal Zoom"
msgstr "Optymalne przybliżenie"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom Out"
msgstr "Oddal"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Original Zoom"
msgstr "Oryginalne powiększenie"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom In"
msgstr "Zbliż"
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
#: src/ui/app-menus.ui
msgid "Position"
msgstr "Położenie"
@@ -350,12 +452,6 @@ msgid "Refresh"
msgstr "Odśwież"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
-#: src/preferences.py
-msgid "Show tools names"
-msgstr "Pokaż nazwy narzędzi"
-
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/shortcuts.ui
-#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
msgid "Fullscreen"
msgstr "Pełny ekran"
@@ -388,55 +484,64 @@ msgstr "Zamień kolory"
msgid "Color application mode"
msgstr "Tryb aplikacji koloru"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Normal"
msgstr "Normalny"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Other modes"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Raw source color"
msgstr "Kolor źródłowy"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Highlight"
msgstr "Wyróżnij zakreślaczem"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Difference"
msgstr "Różnica"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
-msgid "Photo manipulation"
+msgid "Photo-oriented modes"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Hue only"
msgstr "Tylko pasek menu"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Saturation only"
msgstr "Nasycenie"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Hue and saturation"
msgstr "Zmiana nasycenia"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Luminosity only"
msgstr ""
@@ -446,17 +551,17 @@ msgid "Don't use the colors but…"
msgstr "Nie używaj kolorów, ale…"
#. To translators: this is a verb
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Blur"
msgstr "Rozmycie"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Erase"
msgstr "Wymaż"
-#: src/ui/app-menus.ui src/window.py
+#: src/ui/app-menus.ui
msgid "_Tools"
msgstr "_Narzędzia"
@@ -464,6 +569,24 @@ msgstr "_Narzędzia"
msgid "Previous tool"
msgstr "Poprzednie narzędzie"
+#: src/ui/app-menus.ui
+msgid "Active tool"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "Pokaż nazwy narzędzi"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+#, fuzzy
+msgid "Smaller width"
+msgstr "Domyślna szerokość"
+
#: src/ui/app-menus.ui src/window.py
msgid "_Options"
msgstr "_Opcje"
@@ -472,22 +595,28 @@ msgstr "_Opcje"
msgid "_Help"
msgstr "_Pomoc"
+#. Context: open the index of all help pages
#: src/ui/app-menus.ui
msgid "Index"
msgstr "Indeks"
+#. Context: open the help page about general use of the app
#: src/ui/app-menus.ui
msgid "Basic help"
msgstr "Podstawowa pomoc"
+#. Context: open the help page about classic tools
#: src/ui/app-menus.ui
msgid "Help about tools"
msgstr "Pomoc dla narzędzi"
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
#: src/ui/app-menus.ui
msgid "Canvas and selection"
msgstr "Płótno i zaznaczenie"
+#. Context: open the help page about the selection
#: src/ui/app-menus.ui
msgid "Help about selection"
msgstr "Pomoc dla zaznaczania"
@@ -501,21 +630,26 @@ msgstr "O programie"
msgid "Open"
msgstr "Otwórz"
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr ""
+
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Width"
msgstr "Szerokość"
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Height"
msgstr "Wysokość"
#: src/ui/new-image-dialog.ui
-msgid "Background color"
-msgstr "Kolor tła"
+#, fuzzy
+msgid "Color"
+msgstr "Kolory"
#: src/ui/new-image-dialog.ui
msgid "Use these settings by default"
@@ -525,6 +659,8 @@ msgstr "Użyj tych ustawień domyślnie"
msgid "100%"
msgstr "100%"
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
#: src/ui/properties.ui src/utilities.py
msgid "pixels"
msgstr "pikseli"
@@ -541,7 +677,7 @@ msgstr "cali"
msgid "Images"
msgstr "Obrazy"
-#: src/ui/preferences.ui src/ui/shortcuts.ui
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "Tools"
msgstr "Narzędzia"
@@ -560,30 +696,22 @@ msgid "Unselect"
msgstr "Odznacz"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Crop"
msgstr "Przycinanie"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scale"
msgstr "Zmiana rozmiaru"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotate"
msgstr "Obracanie"
-#. In this context, "Skew" is the name of the tool changing rectangles
-#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
-#. "Stretch/Skew" dialog.
-#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_skew.py
-msgid "Skew"
-msgstr "Zniekształcacz"
-
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Filters"
msgstr "Filtry"
@@ -593,8 +721,9 @@ msgid "Open As New Image"
msgstr "Otwórz jako nowy obraz"
#: src/ui/shortcuts.ui
-msgid "Keyboard"
-msgstr "Klawiatura"
+#, fuzzy
+msgid "Keyboard Shortcuts"
+msgstr "Skróty klawiszowe"
#: src/ui/shortcuts.ui
msgid "General"
@@ -605,31 +734,28 @@ msgid "Main menu"
msgstr "Menu główne"
#: src/ui/shortcuts.ui
-msgid "Editing"
-msgstr "Edycja"
-
-#: src/ui/shortcuts.ui
msgid "Image"
msgstr "Obraz"
-#: src/ui/shortcuts.ui
-msgid "Open a file"
-msgstr "Otwórz plik"
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "Otwórz zdjęcie"
#: src/ui/shortcuts.ui
msgid "Reload image from disk"
msgstr "Załaduj ponownie obraz z dysku"
-#: src/ui/shortcuts.ui
-msgid "Save as"
-msgstr "Zapisz jako"
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "Zapisz obraz jako…"
#: src/ui/shortcuts.ui
msgid "Close the active image"
msgstr "Zamknij bieżący obraz"
#: src/ui/shortcuts.ui
-msgid "Options menu"
+#, fuzzy
+msgid "Open the tool options menu"
msgstr "Menu opcji"
#: src/ui/shortcuts.ui
@@ -637,18 +763,12 @@ msgid "Back to previous tool"
msgstr "Powrót do poprzedniego narzędzia"
#: src/ui/shortcuts.ui
-msgid "Colors"
-msgstr "Kolory"
-
-#. Label displayed in the keyboard shortcuts dialog
-#: src/ui/shortcuts.ui
-msgid "Edit the main color (left click)"
-msgstr "Edytuj kolor podstawowy (lewy przycisk myszy)"
+msgid "Apply a transformation"
+msgstr ""
-#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Edit the secondary color (right click)"
-msgstr "Edytuj kolor dodatkowy (prawy przycisk myszy)"
+msgid "History"
+msgstr ""
#: src/ui/shortcuts.ui
msgid "Selection"
@@ -665,18 +785,26 @@ msgid "Import a file as the selection"
msgstr "Importuj plik jako zaznaczenie"
#: src/ui/shortcuts.ui
-msgid "Tabs"
-msgstr ""
+msgid "Colors"
+msgstr "Kolory"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Enter fullscreen mode"
-msgstr "Wejdź w tryb pełnoekranowy"
+msgid "Edit the main color (left click)"
+msgstr "Edytuj kolor podstawowy (lewy przycisk myszy)"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Exit fullscreen mode"
-msgstr "Opuść tryb pełnoekranowy"
+msgid "Edit the secondary color (right click)"
+msgstr "Edytuj kolor dodatkowy (prawy przycisk myszy)"
#: src/ui/shortcuts.ui
+msgid "Tabs"
+msgstr ""
+
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
+#: src/ui/shortcuts.ui
msgid "Navigation"
msgstr "Nawigacja"
@@ -684,10 +812,26 @@ msgstr "Nawigacja"
msgid "Toggle the preview"
msgstr "Przełącz podgląd"
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr "Wejdź w tryb pełnoekranowy"
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr "Opuść tryb pełnoekranowy"
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr ""
+
#: src/ui/win-menus.ui
msgid "Troubleshoot selection"
msgstr "Rozwiąż problemy z wyborem"
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr ""
+
#: src/ui/window.ui
msgid "Error starting the application, please report this bug."
msgstr "Wystąpił błąd podczas uruchamiania aplikacji, proszę zgłoś ten błąd."
@@ -702,6 +846,12 @@ msgstr "Cofnij %s"
msgid "Redo %s"
msgstr "Ponów %s"
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr ""
+
#: src/image.py
#, fuzzy
msgid "Can't reload a never-saved file from the disk."
@@ -711,15 +861,15 @@ msgstr "Nie można przeładować z dysku niezapisanego wcześniej pliku."
msgid "Unsaved file"
msgstr "Niezapisany plik"
-#: src/new_image_dialog.py src/utilities.py src/window.py
-#: src/tools/utilities_paths.py src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-crop.ui src/tools/ui/tool-filters.ui
-#: src/tools/ui/tool-rotate.ui src/tools/ui/tool-scale.ui
-#: src/tools/ui/tool-skew.ui
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
msgid "Cancel"
msgstr "Anuluj"
@@ -728,18 +878,22 @@ msgstr "Anuluj"
msgid "Create"
msgstr "Utwórz"
+#. Description of a command line option
#: src/main.py
msgid "Show the app version"
msgstr "Pokaż wersję aplikacji"
+#. Description of a command line option
#: src/main.py
msgid "Open a new window"
msgstr "Otwórz w nowym oknie"
+#. Description of a command line option
#: src/main.py
msgid "Open a new tab"
msgstr "Otwórz w nowej zakładce"
+#. Description of a command line option
#: src/main.py
msgid "Edit the clipboard content"
msgstr "Edytuj zawartość schowka"
@@ -752,12 +906,14 @@ msgstr "Ta wersja nie jest stabilna!"
msgid "Report bugs or ideas"
msgstr "Zgłoś błąd lub pomysł"
-#. To tranlators: "translate" this by your name, it will be displayed
-#. in the "about" dialog
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
#: src/main.py
msgid "translator-credits"
msgstr "Piotr Komur, Kacper Paczos"
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
#: src/main.py
msgid "GNOME's \"Art Libre\" icon set authors"
msgstr ""
@@ -771,17 +927,24 @@ msgid "Official webpage"
msgstr "Oficjalna witryna"
#: src/main.py
-#, python-format
-msgid "Error opening this file. Did you mean %s ?"
+#, fuzzy
+msgid "Error opening this file."
msgstr "Wystąpił problem podczas otwierania tego pliku. Czy chodziło ci o %s?"
-#. This displays the zoom level, %s will be replaced with a number, while
-#. %% is just the symbol '%'
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr ""
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
#: src/minimap.py
#, python-format
msgid "%s%%"
msgstr "%s%%"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "New images"
msgstr "Nowe obrazy"
@@ -794,10 +957,17 @@ msgstr "Domyślna szerokość"
msgid "Default height"
msgstr "Domyślna wysokość"
-#: src/preferences.py
-msgid "Default background"
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+#, fuzzy
+msgid "Default color"
msgstr "Domyślne tło"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Images saving"
msgstr "Zapisywanie obrazów"
@@ -814,19 +984,23 @@ msgstr ""
"Jeśli zapiszesz swój obraz w jednym z tych formatów, to co chcesz zrobić z "
"przeźroczystymi punktami obrazu?"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "White"
msgstr "Biały"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "Black"
msgstr "Czarny"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
msgid "Checkboard"
msgstr "Szachownica"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
msgid "Nothing"
msgstr "Nic"
@@ -840,13 +1014,15 @@ msgstr ""
"Możesz powiększać za pomocą Ctrl oraz kółka myszy lub samym kółkiem myszy."
#: src/preferences.py
-msgid "Using keyboard shortcuts or touch gestures is possible too."
-msgstr "Używanie skrótów klawiszowych lub gestów także jest możliwe."
+msgid "See the user help manual for explanations."
+msgstr ""
#: src/preferences.py
msgid "Use 'Ctrl' to zoom"
msgstr "Użyj „Ctrl”, aby przybliżyć"
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
#: src/preferences.py
msgid "Appearance"
msgstr "Wygląd"
@@ -855,6 +1031,7 @@ msgstr "Wygląd"
msgid "Use big icons"
msgstr "Użyj dużych ikon"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Additional tools"
msgstr "Dodatkowe narzędzia"
@@ -867,31 +1044,51 @@ msgstr ""
"Działanie poniższych narzędzi nie jest jeszcze dopracowane, więc nie "
"wszystkie są domyślnie włączone."
-#. In the meaning "a rubber eraser"
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
#: src/preferences.py src/tools/classic_tools/tool_eraser.py
msgid "Eraser"
msgstr "Gumka"
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
#: src/preferences.py src/tools/classic_tools/tool_highlight.py
msgid "Highlighter"
msgstr "Wyróżnij zakreślaczem"
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr ""
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
#: src/preferences.py src/tools/selection_tools/select_free.py
msgid "Free selection"
msgstr "Zaznaczanie (dowolne)"
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
#: src/preferences.py src/tools/selection_tools/select_color.py
msgid "Color selection"
msgstr "Zaznaczanie koloru"
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
#: src/preferences.py src/tools/classic_tools/tool_picker.py
msgid "Color Picker"
msgstr "Wybór koloru"
+#. Context: the name of a tool to fill an area of one color with an other
#: src/preferences.py src/tools/classic_tools/tool_paint.py
msgid "Paint"
msgstr "Malowanie"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Advanced options"
msgstr "Opcje zaawansowane"
@@ -900,11 +1097,18 @@ msgstr "Opcje zaawansowane"
msgid "Preview size"
msgstr "Rozmiar podglądu"
+#. This label will not be displayed in the UI of stable versions
#: src/preferences.py
msgid "Development features"
msgstr "Funkcje rozwojowe"
#: src/preferences.py
+msgid "Background color"
+msgstr "Kolor tła"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
msgid "Layout"
msgstr "Układ"
@@ -912,6 +1116,7 @@ msgstr "Układ"
msgid "The recommended value is \"Automatic\"."
msgstr "Zalecany układ to 'Automatyczny'."
+#. It has to match what's written in the previous string.
#: src/preferences.py
msgid "Automatic"
msgstr "Automatyczny"
@@ -931,7 +1136,8 @@ msgid "Legacy"
msgstr ""
#. "Legacy" is about the window layout, it means menubar+toolbar, you
-#. can translate it like if it was "Traditional"
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Legacy (symbolic icons)"
msgstr ""
@@ -944,6 +1150,7 @@ msgstr "Tylko pasek menu"
msgid "Toolbar only"
msgstr "Tylko pasek narzędzi"
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Toolbar only (symbolic icons)"
msgstr "Tylko pasek narzędzi (ikony symboliczne)"
@@ -963,10 +1170,12 @@ msgstr ""
msgid "%s in"
msgstr "%s cali"
+#. Context: the path of the edited file
#: src/properties.py
msgid "Path"
msgstr "Ścieżka"
+#. Context: the file format of the edited file
#: src/properties.py
msgid "Format"
msgstr "Format"
@@ -975,10 +1184,70 @@ msgstr "Format"
msgid "Colorspace"
msgstr "Przestrzeń kolorów"
+#. Context: an invalid colorspace format
#: src/properties.py
msgid "Invalid format"
msgstr "Niewłaściwy format"
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "Błąd zapisu %s"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "Bez tytułu"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "tę zdjęcię"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "Porzuć"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "Zmiany nie zostały zapisane dla %s."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr ""
+
+#: src/saving_manager.py
+#, fuzzy
+msgid "Do you want to save anyway?"
+msgstr "Gdzie chcesz otworzyć %s?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr "Zamień"
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "Ten format nie wspiera przeźroczystego koloru."
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr ""
+"Możesz zapisać swój obraz jako plik PNG albo zamienić przezroczystość na:"
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "Zastąp przeźroczystość:"
+
#: src/utilities.py
msgid "Transparent"
msgstr "Przeźroczysty"
@@ -1000,6 +1269,9 @@ msgstr "Pomarańczowy"
msgid "Brown"
msgstr "Brązowy"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
#: src/utilities.py
msgid "Probably brown"
msgstr "Prawdopodobnie brązowy"
@@ -1032,32 +1304,23 @@ msgstr "Purpurowy"
msgid "Cyan"
msgstr "Cyjan"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
#: src/utilities.py
-msgid "Probably turquoise"
+msgid "Probably teal"
msgstr "Prawdopodobnie turkusowy"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
#: src/utilities.py
msgid "Unknown color name"
msgstr "Nieznana nazwa koloru"
#: src/utilities.py
-msgid "Replace"
-msgstr "Zamień"
-
-#: src/utilities.py
-msgid "This file format doesn't support transparent colors."
-msgstr "Ten format nie wspiera przeźroczystego koloru."
-
-#: src/utilities.py
-msgid "You can save the image as a PNG file, or replace transparency with:"
-msgstr ""
-"Możesz zapisać swój obraz jako plik PNG albo zamienić przezroczystość na:"
-
-#: src/utilities.py
-msgid "Replace transparency with:"
-msgstr "Zastąp przeźroczystość:"
-
-#: src/utilities.py
msgid "All pictures"
msgstr "Wszystkie obrazy"
@@ -1073,28 +1336,49 @@ msgstr "Obrazy JPG"
msgid "BMP images"
msgstr "Obrazy BMP"
+#. To translators: it appears in tooltips over numerical inputs
#: src/utilities.py
msgid "percents"
msgstr "procent"
-#. To translators: it's the angle measure unit
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
#: src/utilities.py
msgid "degrees"
msgstr "kąt (w stopniach)"
+#: src/utilities.py
+#, fuzzy, python-format
+msgid "%s isn't an image."
+msgstr "Otwórz obraz"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr ""
+
+#. Context: an error message
#: src/window.py
#, python-format
msgid "Failed to load tool: %s"
msgstr "Niepowodzenie załadunku narzędzia: %s"
#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr ""
+
+#: src/window.py
msgid "Modifications will take effect in the next new window."
msgstr "Zmiana znajdzie zastosowanie w nowym oknie."
#: src/window.py src/tools/abstract_tool.py
#: src/optionsbars/classic/optionsbar-classic.ui
#: src/tools/classic_tools/tool_eraser.py
-#: src/tools/classic_tools/tool_highlight.py
msgid "No options"
msgstr "Brak opcji"
@@ -1103,6 +1387,11 @@ msgid "Opened images"
msgstr "Otwórz obrazy"
#: src/window.py
+#, fuzzy, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "Wystąpił błąd podczas uruchamiania aplikacji, proszę zgłoś ten błąd."
+
+#: src/window.py
#, python-format
msgid "Loading %s"
msgstr "Ładowanie %s"
@@ -1116,54 +1405,38 @@ msgstr "Nowa zakładka"
msgid "Discard changes"
msgstr "Porzuć zmiany"
-#: src/window.py
-#, python-format
-msgid "There are unsaved modifications to %s."
-msgstr "Zmiany nie zostały zapisane dla %s."
-
+#. Context: %s will be replaced by the name of a file.
#: src/window.py
#, python-format
msgid "Where do you want to open %s?"
msgstr "Gdzie chcesz otworzyć %s?"
-#: src/window.py
-msgid "Open a picture"
-msgstr "Otwórz zdjęcie"
-
#. Context for translation:
#. "What do you want to do with *these files*?"
#: src/window.py
msgid "these files"
msgstr "te pliki"
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
#: src/window.py
#, python-format
msgid "What do you want to do with %s?"
msgstr "Co chcesz zrobić z %s?"
-#. else the exception was raised because an actual error occured, or
-#. the user clicked on "cancel"
#: src/window.py
-#, python-format
-msgid "Failed to save %s"
-msgstr "Błąd zapisu %s"
-
-#: src/window.py
-msgid "Untitled"
-msgstr "Bez tytułu"
-
-#. Context: the sentence "There are unsaved modifications to %s."
-#: src/window.py
-msgid "this picture"
-msgstr "tę zdjęcię"
+#, fuzzy
+msgid "Image copied to clipboard"
+msgstr "Edytuj obraz ze schowka"
#: src/window.py
-msgid "Discard"
-msgstr "Porzuć"
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr ""
#: src/window.py
-msgid "Save picture as…"
-msgstr "Zapisz obraz jako…"
+#, fuzzy
+msgid "Reload"
+msgstr "Przeładuj plik"
#: src/window.py
msgid "Import a picture"
@@ -1173,6 +1446,12 @@ msgstr "Importuj obraz"
msgid "Required tool is not available"
msgstr "Wymagane narzędzie jest niedostępne"
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
+
#: src/tools/utilities_paths.py
msgid "Continue"
msgstr "Kontynuuj"
@@ -1190,13 +1469,15 @@ msgid "Do you want to abort the operation, or to let the tool struggle ?"
msgstr ""
"Czy chcesz przerwać operację czy pozwolić narzędziu się z tym zmierzyć?"
+#. Context: fill a shape with the color of the left click
#: src/optionsbars/classic/optionsbar_color_popover.py
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Main color"
msgstr "Wypełnienie"
-#. if state_as_string == 'secondary':
+#. Context: fill a shape with the color of the right click
#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Secondary color"
msgstr "Kontur z wypełnieniem"
@@ -1206,8 +1487,8 @@ msgid "Tool size"
msgstr "Rozmiar narządzia"
#: src/optionsbars/classic/optionsbar-classic.ui
-#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-filters.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
msgid "Preview"
msgstr "Podgląd"
@@ -1228,165 +1509,180 @@ msgid "Use this editor by default"
msgstr "Używaj tego edytora domyślnie"
#: src/optionsbars/selection/optionsbar-selection.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "More actions"
msgstr "Więcej poleceń"
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
msgid "Apply"
msgstr "Zastosuj"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "Więcej opcji"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr ""
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "Przeźroczystość"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Select a filter…"
msgstr "Wybierz filtr…"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Saturation"
msgstr "Nasycenie"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blur radius"
msgstr "Stopień rozmycia"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-msgid "Transparency"
-msgstr "Przeźroczystość"
-
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Change saturation"
msgstr "Zmiana nasycenia"
#. Context: a filter adding like a light veil on the image
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Veil"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
msgid "Add transparency"
msgstr "Dodaj przeźroczystość"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Invert colors"
msgstr "Odwrócenie koloru"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
#, fuzzy
msgid "Blurring"
msgstr "Rozmycie"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Fast blur"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Slow blur"
msgstr ""
#. Context: a filter that censors the image with some kind of tiles
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-msgid "Pixelisation"
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
msgstr "Pikselizacja"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
#, fuzzy
msgid "Blur direction"
msgstr "Zaznaczanie koloru"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
#, fuzzy
msgid "Horizontal"
msgstr "Rozmycie poziome"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
#, fuzzy
msgid "Vertical"
msgstr "Rozmycie pionowe"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
#, fuzzy
msgid "No direction"
msgstr "Zaznaczanie koloru"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle (degrees)"
msgstr "Kąt (stopnie)"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle"
msgstr "Kąt"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate left"
msgstr "Obróć w lewo"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate right"
msgstr "Obróć w prawo"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip horizontally"
msgstr "Odbij poziomo"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip vertically"
msgstr "Odbij pionowo"
-#: src/optionsbars/canvas/optionsbar-scale.ui
-msgid "More options"
-msgstr "Więcej opcji"
-
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Keep proportions"
msgstr "Zachowaj proporcję"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Always [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Always"
msgstr "Zawsze"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "[Keep proportions only] when scaling from corners"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "When scaling from corners"
msgstr "Podczas skalowania począwszy od narożników"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Never [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Never"
msgstr "Nigdy"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Horizontal deformation"
msgstr "Pozioma deformacja"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Vertical deformation"
msgstr "Pionowa deformacja"
+#: src/tools/ui/selection.ui
+#, fuzzy
+msgid "Transform"
+msgstr "Przeźroczysty"
+
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
msgid "Line shape"
msgstr "Kształt linii"
+#. Context: this is the name of a line shape
#. Default values
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
@@ -1394,80 +1690,175 @@ msgstr "Kształt linii"
msgid "Round"
msgstr "Okrągły"
+#. Context: this is the name of a line shape
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Thin"
-msgstr "Cienki"
-
-#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
msgid "Square"
msgstr "Kwadratowy"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "No arrow"
+msgstr "Strzałka"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "Double arrow"
+msgstr "Przerywana strzała"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-msgid "Use dashes"
+#, fuzzy
+msgid "No dashes"
msgstr "Kreskowanie"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
-msgid "Arrow"
-msgstr "Strzałka"
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Simple dashes"
+msgstr "Kreskowanie"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Long dashes"
+msgstr "Kreskowanie"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Short dashes"
+msgstr "Kreskowanie"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-shape.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
msgid "Antialiasing"
msgstr "Wygładzanie krawędzi"
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Dark text on light background"
+msgstr "Prostokątne tło"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr ""
+
#: src/tools/ui/tool-line.ui
msgid "Color gradient"
msgstr "Gradient koloru"
+#. Context: title for the list of the possible painting algorithms.
#: src/tools/ui/tool-paint.ui
msgid "Behavior"
msgstr "Zachowanie"
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
#: src/tools/ui/tool-paint.ui
msgid "Encircle and fill"
msgstr "Zakreśl i wypełnij"
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
#: src/tools/ui/tool-paint.ui
msgid "Erase and replace"
msgstr "Wymaż i zamień"
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
#: src/tools/ui/tool-paint.ui
-msgid "Clipping"
-msgstr "Wycinek"
+#, fuzzy
+msgid "Entire image"
+msgstr "Otwórz obrazy"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rectangle"
-msgstr "Prostokąt"
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+#, fuzzy
+msgid "Remove color"
+msgstr "Kolor źródłowy"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rounded rectangle"
-msgstr "Zaokrąglony prostokąt"
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr ""
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Oval"
-msgstr "Owal"
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "Koło"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Polygon"
-msgstr "Wielokąt"
+#, fuzzy
+msgid "Solid outline"
+msgstr "Bez wypełnienia"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Free shape"
-msgstr "Dowolny kształt"
+#, fuzzy
+msgid "Dashed outline"
+msgstr "Przerywana strzała"
+#. if state_as_string == 'none':
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Circle"
-msgstr "Koło"
+#, fuzzy
+msgid "No outline"
+msgstr "Kontur"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Empty outline"
-msgstr "Bez wypełnienia"
+#, fuzzy
+msgid "Empty shape"
+msgstr "Pusty"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Horizontal gradient"
@@ -1481,6 +1872,26 @@ msgstr "Pionowy gradient"
msgid "Radial gradient"
msgstr "Kołowy gradient"
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "Prostokąt"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr "Zaokrąglony prostokąt"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "Owal"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "Wielokąt"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "Dowolny kształt"
+
#: src/tools/ui/tool-shape.ui
msgid "Close shape"
msgstr "Zamknij"
@@ -1494,6 +1905,11 @@ msgid "Font"
msgstr "Czcionka"
#: src/tools/ui/tool-text.ui
+#, fuzzy
+msgid "Select a font…"
+msgstr "Wybierz filtr…"
+
+#: src/tools/ui/tool-text.ui
msgid "Italic"
msgstr "Pochylenie"
@@ -1501,34 +1917,31 @@ msgstr "Pochylenie"
msgid "Bold"
msgstr "Pogrubienie"
+#. Context: the types of background behind the inserted text
#: src/tools/ui/tool-text.ui
msgid "Background"
msgstr "Tło"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "No background"
msgstr "Brak"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Shadow"
msgstr "Cień"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Outline"
msgstr "Kontur"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Rectangle background"
msgstr "Prostokątne tło"
-#: src/tools/ui/selection.ui
-msgid "Edit"
-msgstr "Edytuj"
-
-#: src/tools/ui/selection.ui
-msgid "Flip"
-msgstr "Odbij"
-
#: src/tools/classic_tools/tool_arc.py
msgid "Curve"
msgstr "Krzywa"
@@ -1542,10 +1955,19 @@ msgid "Dashed arrow"
msgstr "Przerywana strzała"
#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "Strzałka"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
#: src/tools/classic_tools/tool_pencil.py
msgid "Dashed"
msgstr "Przerywane"
+#: src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Highlighter options"
+msgstr "Wyróżnij zakreślaczem"
+
#: src/tools/classic_tools/tool_line.py
msgid "Line"
msgstr "Linia"
@@ -1562,6 +1984,11 @@ msgstr "Opcje malowania"
msgid "Click on an area to replace its color by transparency"
msgstr "Kliknij obszar, aby zastąpić kolor przezroczystością"
+#: src/tools/classic_tools/tool_paint.py
+#, fuzzy
+msgid "Click on the canvas to entirely paint it"
+msgstr "Kliknij pierwszy punkt kształtu, aby zakończyć."
+
#: src/tools/classic_tools/tool_pencil.py
msgid "Pencil"
msgstr "Ołówek"
@@ -1570,15 +1997,21 @@ msgstr "Ołówek"
msgid "Pencil options"
msgstr "Opcje ołówka"
+#: src/tools/classic_tools/tool_points.py
+#, fuzzy
+msgid "Points options"
+msgstr "Opcje tekstu"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr ""
+
#: src/tools/classic_tools/tool_shape.py
msgid "Shape"
msgstr "Kształt"
#: src/tools/classic_tools/tool_shape.py
-msgid "Empty"
-msgstr "Pusty"
-
-#: src/tools/classic_tools/tool_shape.py
msgid "Shape options"
msgstr "Opcje kształtu"
@@ -1590,6 +2023,7 @@ msgstr "Kliknij pierwszy punkt kształtu, aby zakończyć."
msgid "Text"
msgstr "Tekst"
+#. XXX use "text options" instead
#: src/tools/classic_tools/tool_text.py
msgid "Font options"
msgstr "Opcje tekstu"
@@ -1606,37 +2040,66 @@ msgstr "Wybierz obszar lub kliknij obszar roboczy prawym przyciskiem myszy"
msgid "Rectangle selection"
msgstr "Zaznaczanie (prostokątem)"
-#: src/tools/canvas_tools/abstract_canvas_tool.py
+#: src/tools/transform_tools/abstract_transform_tool.py
msgid "Error: invalid values"
msgstr "Błąd: nieprawidłowe wartości"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the selection"
msgstr "Przycinanie zaznaczenia"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the canvas"
msgstr "Przycinanie płótna"
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Click on the image to preview the selected filter"
msgstr "Kliknij na obraz, aby podejrzeć działanie wybranego filtru"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the selection"
msgstr "Obracanie zaznaczenia"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the canvas"
msgstr "Obracanie płótna"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the selection"
msgstr "Skalowanie zaznaczenia"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the canvas"
msgstr "Skalowanie płótna"
-#~ msgid "Classic"
-#~ msgstr "Zwykły"
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr "Zniekształcacz"
+
+#~ msgid "Flip"
+#~ msgstr "Odbij"
+
+#, fuzzy
+#~ msgid "Add semi-transparency"
+#~ msgstr "Dodaj przeźroczystość"
+
+#~ msgid "Thin"
+#~ msgstr "Cienki"
+
+#~ msgid "Clipping"
+#~ msgstr "Wycinek"
+
+#~ msgid "Edit"
+#~ msgstr "Edytuj"
+
+#~ msgid "Open a file"
+#~ msgstr "Otwórz plik"
+
+#~ msgid "Save as"
+#~ msgstr "Zapisz jako"
+
+#~ msgid "Keyboard"
+#~ msgstr "Klawiatura"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index f2e6da24..0f9f8278 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -2,21 +2,22 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the drawing package.
# Antonio Hauren <haurenburu@protonmail.com>, 2019.
+# Arthur <arthurbacci64@gmail.com>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: drawing\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-15 19:07+0200\n"
-"PO-Revision-Date: 2019-07-31 11:08-0300\n"
-"Last-Translator: Luís Fernando Stürmer da Rosa <luisfsr@dismail.de>\n"
-"Language-Team: Portuguese - Brazil <none>\n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
+"PO-Revision-Date: 2020-09-03 11:30-0300\n"
+"Last-Translator: Arthur <arthurbacci64@gmail.com>\n"
+"Language-Team: Brazilian Portuguese <arthurbacci64@gmail.com>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-"X-Generator: Gtranslator 3.32.1\n"
+"X-Generator: Gtranslator 3.36.0\n"
#: data/com.github.maoschanz.drawing.desktop.in
#: data/com.github.maoschanz.drawing.appdata.xml.in src/deco_manager.py
@@ -52,7 +53,7 @@ msgstr "Nova Imagem"
#: data/com.github.maoschanz.drawing.desktop.in
msgid "Edit Image in Clipboard"
-msgstr "Editar imagem do clipboard"
+msgstr "Editar Imagem no Clipboard"
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid "A drawing application for the GNOME desktop"
@@ -79,9 +80,78 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+"A versão 0.6.4 apresenta diversas correções de erros e várias traduções."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+"A versão 0.6.2 apresenta diversas correções de erros e várias traduções."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"Version 0.6 is a major update, with various important changes. The app is "
"more robust and has more tools:"
msgstr ""
+"Versão 0.6 é uma maior atualização. com muitas mudanças importantes. Mais "
+"robusto e com mais ferramentas:"
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
@@ -89,6 +159,9 @@ msgid ""
"'rotate' tool now supports any angle and handles horizontal or vertical "
"flipping."
msgstr ""
+"Seleção retangular e seleção de mão agora são ferramentas distintas, e a "
+"Ferramenta 'rotacionar' agora suporta qualquer ângulo e inverção vertical e "
+"horizontal."
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
@@ -97,41 +170,73 @@ msgid ""
"rectangle' and 'ellipse'. Their filling options now include various types of "
"gradients."
msgstr ""
+"As numerosas ferramentas de produzir formatos (círculo, retângulo, polígono, "
+"…), foram unidas em uma única, chamada ferramenta de 'formato', e com "
+"funcionalidades como 'retângulo arredondado' e 'elipse'. As opções de "
+"preenchimento agora incluem vários tipos de gradientes."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+"A ferramenta de texto agora pode escrever usando fontes do sistema, "
+"permitindo caracteres mais complexos para serem utilizados (como caracteres "
+"asiáticos)."
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
-"with several types of blur, color inversion, pixelisation, saturation and "
+"with several types of blur, color inversion, pixelization, saturation and "
"transparency."
msgstr ""
+"A ferramenta 'saturar' foi substituída por 'filtros', uma ferramenta mais "
+"poderosa com diferentes tipos de borrado, cor, inversão, pixelização, "
+"saturação e transparência."
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid "A fullscreen mode is now available."
-msgstr ""
+msgstr "Um modo de tela cheia agora está disponível."
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
"The most prominent new feature is the ability to zoom in (or out) on the "
"image, using the minimap, the touchpad or the mouse wheel."
msgstr ""
-
-#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid ""
-"Version 0.4.8 features several minor bug fixes, and various new translations."
-msgstr ""
-"A versão 0.4.8 apresenta diversas correções de erros e várias traduções."
+"A funcionalidade mais proeminente é a habilidade de aumentar (ou diminuir) o "
+"zoom em uma imagem, usando o minimapa, o touchpad ou a rodinha do mouse."
#. This is just my name, do not translate it.
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid "Romain F. T."
msgstr "Romain F. T."
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr ""
+
#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
#: src/preferences.py
msgid "Preferences"
msgstr "Preferências"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
msgid "Report a bug"
msgstr "Reportar um bug"
@@ -165,9 +270,8 @@ msgid "New Blank Image"
msgstr "Nova imagem em branco"
#: src/ui/app-menus.ui src/ui/win-menus.ui src/new_image_dialog.py
-#, fuzzy
msgid "New Image With Custom Size"
-msgstr "Nova imagem da seleção"
+msgstr "Nova imagem com tamanho personalizado"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "New Image From Selection"
@@ -181,19 +285,23 @@ msgstr "Nova imagem do clipboard"
msgid "Reload file"
msgstr "Recarregar Arquivo"
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/properties.py
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
msgid "Image properties"
msgstr "Propiedades da imagem"
#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
-#: src/ui/win-menus.ui src/window.py
+#: src/ui/win-menus.ui src/saving_manager.py
msgid "Save"
msgstr "Salvar"
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+#, fuzzy
+msgid "Save without transparency"
+msgstr "Adicionar transparência"
+
#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
-#: src/utilities.py
+#: src/saving_manager.py
msgid "Save as…"
msgstr "Salvar como…"
@@ -202,19 +310,23 @@ msgstr "Salvar como…"
msgid "Export as…"
msgstr "Exportar como…"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
msgid "Print"
msgstr "Imprimir"
#: src/ui/app-menus.ui
-#, fuzzy
msgid "Close Image"
-msgstr "Nova imagem"
+msgstr "Fechar imagem"
#: src/ui/app-menus.ui
-#, fuzzy
msgid "Close Window"
-msgstr "Nova janela"
+msgstr "Fechar janela"
#: src/ui/app-menus.ui src/ui/shortcuts.ui
msgid "Quit all windows"
@@ -281,30 +393,33 @@ msgid "Show the preview"
msgstr "Mostrar preview"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/preferences.py
-#, fuzzy
msgid "Zoom"
-msgstr "Aumentar zoom"
+msgstr "Zoom"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui
-#, fuzzy
msgid "Optimal Zoom"
msgstr "Zoom ótico"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom Out"
msgstr "Reduzir zoom"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Original Zoom"
msgstr "Zoom original"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom In"
msgstr "Aumentar zoom"
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
#: src/ui/app-menus.ui
msgid "Position"
msgstr "Posição"
@@ -326,26 +441,18 @@ msgid "Go Right"
msgstr "Ir para direita"
#: src/ui/app-menus.ui src/ui/shortcuts.ui
-#, fuzzy
msgid "Tab at the left"
-msgstr "Voltar para a paleta"
+msgstr "Ir para a esquerda"
#: src/ui/app-menus.ui src/ui/shortcuts.ui
-#, fuzzy
msgid "Tab at the right"
-msgstr "Girar para direita"
+msgstr "Ir para a direita"
#: src/ui/app-menus.ui src/ui/win-menus.ui
msgid "Refresh"
msgstr "Atualizar"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
-#: src/preferences.py
-msgid "Show tools names"
-msgstr "Mostrar nome das ferramentas"
-
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/shortcuts.ui
-#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
msgid "Fullscreen"
msgstr "Tela cheia"
@@ -358,19 +465,16 @@ msgid "_Colors"
msgstr "_Cores"
#: src/ui/app-menus.ui
-#, fuzzy
msgid "Edit Main Color…"
-msgstr "Cor primária"
+msgstr "Editar cor primária"
#: src/ui/app-menus.ui
-#, fuzzy
msgid "Edit Secondary Color…"
-msgstr "Cor secundária"
+msgstr "Editar cor secundária"
#: src/ui/app-menus.ui
-#, fuzzy
msgid "Use color editor by default"
-msgstr "Cores padrão"
+msgstr "Usar editor de cores por padrão"
#: src/ui/app-menus.ui src/ui/shortcuts.ui
#: src/optionsbars/classic/optionsbar-classic.ui
@@ -378,81 +482,82 @@ msgid "Exchange colors"
msgstr "Trocar cores"
#: src/ui/app-menus.ui
-#, fuzzy
msgid "Color application mode"
-msgstr "Seleção de cor"
+msgstr "Modo de aplicação da cor"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Normal"
-msgstr "Formatar"
+msgstr "Normal"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Other modes"
-msgstr ""
+msgstr "Outros modos"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Raw source color"
msgstr "Cor de origem"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Highlight"
-msgstr "Altura"
+msgstr "Ênfase"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Difference"
msgstr "Diferença"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
-msgid "Photo manipulation"
-msgstr ""
+msgid "Photo-oriented modes"
+msgstr "Modos foto-orientados"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Hue only"
-msgstr "Apenas barra de menu"
+msgstr "Apenas hue"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Saturation only"
-msgstr "Saturação (%)"
+msgstr "Somente saturação"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Hue and saturation"
-msgstr "Saturação (%)"
+msgstr "Hue e saturação"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Luminosity only"
-msgstr ""
+msgstr "Somente luminosidade"
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Don't use the colors but…"
-msgstr ""
+msgstr "Não use cores, mas…"
#. To translators: this is a verb
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Blur"
-msgstr "Borrado"
+msgstr "Borrar"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
-#, fuzzy
msgid "Erase"
msgstr "Borracha"
-#: src/ui/app-menus.ui src/window.py
+#: src/ui/app-menus.ui
msgid "_Tools"
msgstr "_Ferramentas"
@@ -460,6 +565,25 @@ msgstr "_Ferramentas"
msgid "Previous tool"
msgstr "Ferramenta anterior"
+#: src/ui/app-menus.ui
+#, fuzzy
+msgid "Active tool"
+msgstr "Outras ferramentas"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "Mostrar nome das ferramentas"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+#, fuzzy
+msgid "Smaller width"
+msgstr "Largura padrão"
+
#: src/ui/app-menus.ui src/window.py
msgid "_Options"
msgstr "_Opções"
@@ -468,22 +592,28 @@ msgstr "_Opções"
msgid "_Help"
msgstr "_Ajuda"
+#. Context: open the index of all help pages
#: src/ui/app-menus.ui
msgid "Index"
msgstr "Índice"
+#. Context: open the help page about general use of the app
#: src/ui/app-menus.ui
msgid "Basic help"
msgstr "Ajuda básica"
+#. Context: open the help page about classic tools
#: src/ui/app-menus.ui
msgid "Help about tools"
msgstr "Ajuda sobre as ferramentas"
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
#: src/ui/app-menus.ui
msgid "Canvas and selection"
msgstr "Tela e seleção"
+#. Context: open the help page about the selection
#: src/ui/app-menus.ui
msgid "Help about selection"
msgstr "Ajuda sobre seleção"
@@ -497,32 +627,36 @@ msgstr "Sobre o drawing"
msgid "Open"
msgstr "Abrir"
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr ""
+
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Width"
msgstr "Largura"
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Height"
msgstr "Altura"
#: src/ui/new-image-dialog.ui
-#, fuzzy
-msgid "Background color"
-msgstr "Fundo"
+msgid "Color"
+msgstr "Cor"
#: src/ui/new-image-dialog.ui
-#, fuzzy
msgid "Use these settings by default"
-msgstr "Usar esse editor por padrão"
+msgstr "Usar essas opções por padrão"
#: src/ui/minimap.ui
msgid "100%"
-msgstr ""
+msgstr "100%"
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
#: src/ui/properties.ui src/utilities.py
msgid "pixels"
msgstr "Pixeis"
@@ -539,20 +673,18 @@ msgstr "Polegadas"
msgid "Images"
msgstr "Imagens"
-#: src/ui/preferences.ui src/ui/shortcuts.ui
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "Tools"
msgstr "Ferramentas"
#: src/ui/preferences.ui
-#, fuzzy
msgid "Window"
-msgstr "Nova janela"
+msgstr "Janela"
#: src/ui/selection-manager.ui
#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
-#, fuzzy
msgid "Close selection"
-msgstr "Seleção de cor"
+msgstr "Descartar seleção"
#: src/ui/selection-manager.ui src/ui/shortcuts.ui
#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
@@ -560,30 +692,22 @@ msgid "Unselect"
msgstr "Desselecionar"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Crop"
msgstr "Cortar"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scale"
msgstr "Escala"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotate"
msgstr "Rotacionar"
-#. In this context, "Skew" is the name of the tool changing rectangles
-#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
-#. "Stretch/Skew" dialog.
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_skew.py
-msgid "Skew"
-msgstr ""
-
-#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Filters"
msgstr "Filtros"
@@ -593,8 +717,8 @@ msgid "Open As New Image"
msgstr "Abrir como uma nova imagem"
#: src/ui/shortcuts.ui
-msgid "Keyboard"
-msgstr ""
+msgid "Keyboard Shortcuts"
+msgstr "Atalhos"
#: src/ui/shortcuts.ui
msgid "General"
@@ -605,32 +729,28 @@ msgid "Main menu"
msgstr "Menu principal"
#: src/ui/shortcuts.ui
-#, fuzzy
-msgid "Editing"
-msgstr "Edição"
-
-#: src/ui/shortcuts.ui
msgid "Image"
msgstr "Imagem"
-#: src/ui/shortcuts.ui
-msgid "Open a file"
-msgstr "Abrir um arquivo"
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "Abrir uma imagem"
#: src/ui/shortcuts.ui
msgid "Reload image from disk"
-msgstr ""
+msgstr "Recarregar imagem do disco"
-#: src/ui/shortcuts.ui
-msgid "Save as"
-msgstr "Salvar como"
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "Salvar imagem como…"
#: src/ui/shortcuts.ui
msgid "Close the active image"
msgstr "Fechar a imagem ativa"
#: src/ui/shortcuts.ui
-msgid "Options menu"
+#, fuzzy
+msgid "Open the tool options menu"
msgstr "Menu de opções"
#: src/ui/shortcuts.ui
@@ -638,18 +758,12 @@ msgid "Back to previous tool"
msgstr "Voltar para última ferramenta"
#: src/ui/shortcuts.ui
-msgid "Colors"
-msgstr "Cores"
-
-#. Label displayed in the keyboard shortcuts dialog
-#: src/ui/shortcuts.ui
-msgid "Edit the main color (left click)"
-msgstr "Mudar cor principal (clique esquerdo)"
+msgid "Apply a transformation"
+msgstr ""
-#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Edit the secondary color (right click)"
-msgstr "Mudar cor secundária (clique direito)"
+msgid "History"
+msgstr "Histórico"
#: src/ui/shortcuts.ui
msgid "Selection"
@@ -662,36 +776,57 @@ msgstr "Deletar seleção"
#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-#, fuzzy
msgid "Import a file as the selection"
-msgstr "Girar a seleção"
+msgstr "Importar um arquivo como a seleção"
#: src/ui/shortcuts.ui
-msgid "Tabs"
-msgstr ""
+msgid "Colors"
+msgstr "Cores"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-#, fuzzy
-msgid "Enter fullscreen mode"
-msgstr "Sair da tela cheia"
+msgid "Edit the main color (left click)"
+msgstr "Mudar cor principal (clique esquerdo)"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Edit the secondary color (right click)"
+msgstr "Mudar cor secundária (clique direito)"
#: src/ui/shortcuts.ui
-#, fuzzy
-msgid "Exit fullscreen mode"
-msgstr "Sair da tela cheia"
+msgid "Tabs"
+msgstr "Tabulações"
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
#: src/ui/shortcuts.ui
msgid "Navigation"
msgstr "Navegação"
#: src/ui/shortcuts.ui
msgid "Toggle the preview"
-msgstr "Alternar a pre visualização"
+msgstr "Alternar a pré-visualização"
+
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr "Entrar na tela cheia"
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr "Sair da tela cheia"
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr "Gestos de toque"
#: src/ui/win-menus.ui
msgid "Troubleshoot selection"
msgstr "Resolver problemas de seleção"
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr "Outras ferramentas"
+
#: src/ui/window.ui
msgid "Error starting the application, please report this bug."
msgstr "Erro ao iniciar o aplicativo, por favor reportar o bug."
@@ -706,64 +841,76 @@ msgstr "Desfazer %s"
msgid "Redo %s"
msgstr "Refazer %s"
+#. Context: an error message
#: src/image.py
-msgid "Can't reload a never-saved file from the disk."
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
msgstr ""
+#: src/image.py
+msgid "Can't reload a never-saved file from the disk."
+msgstr "Não é possível carregar uma imagem nunca salva do disco"
+
#: src/image.py src/properties.py
msgid "Unsaved file"
msgstr "Arquivo não salvo"
-#: src/new_image_dialog.py src/utilities.py src/window.py
-#: src/tools/utilities_paths.py src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-crop.ui src/tools/ui/tool-filters.ui
-#: src/tools/ui/tool-rotate.ui src/tools/ui/tool-scale.ui
-#: src/tools/ui/tool-skew.ui
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
msgid "Cancel"
msgstr "Cancelar"
#. Context: Create a new image
#: src/new_image_dialog.py
msgid "Create"
-msgstr ""
+msgstr "Criar"
+#. Description of a command line option
#: src/main.py
-#, fuzzy
msgid "Show the app version"
-msgstr "Mostrar versão"
+msgstr "Mostrar a versão do programa"
+#. Description of a command line option
#: src/main.py
msgid "Open a new window"
msgstr "Abrir uma nova janela"
+#. Description of a command line option
#: src/main.py
msgid "Open a new tab"
msgstr "Abrir uma nova aba"
+#. Description of a command line option
#: src/main.py
msgid "Edit the clipboard content"
msgstr "Editar conteúdo do clipboard"
#: src/main.py
msgid "This version isn't stable!"
-msgstr ""
+msgstr "Essa versão não é estável!"
#: src/main.py
msgid "Report bugs or ideas"
msgstr "Reportar bugs ou ideias"
-#. To tranlators: "translate" this by your name, it will be displayed
-#. in the "about" dialog
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
#: src/main.py
msgid "translator-credits"
msgstr ""
"Antonio Hauren\n"
-"Luís Fernando Stürmer da Rosa"
+"Luís Fernando Stürmer da Rosa\n"
+"Arthur Bacci"
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
#: src/main.py
msgid "GNOME's \"Art Libre\" icon set authors"
msgstr ""
@@ -777,17 +924,24 @@ msgid "Official webpage"
msgstr "Página oficial"
#: src/main.py
-#, python-format
-msgid "Error opening this file. Did you mean %s ?"
+#, fuzzy
+msgid "Error opening this file."
msgstr "Erro ao abrir este arquivo. Você quis dizer %s ?"
-#. This displays the zoom level, %s will be replaced with a number, while
-#. %% is just the symbol '%'
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr ""
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
#: src/minimap.py
#, python-format
msgid "%s%%"
-msgstr ""
+msgstr "%s%%"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "New images"
msgstr "Novas imagens"
@@ -800,57 +954,70 @@ msgstr "Largura padrão"
msgid "Default height"
msgstr "Altura padrão"
-#: src/preferences.py
-msgid "Default background"
-msgstr "Fundo padrão"
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Default color"
+msgstr "Cor padrão"
+#. Context: title of a section of the preferences
#: src/preferences.py
-#, fuzzy
msgid "Images saving"
-msgstr "Imagens"
+msgstr "Salvação de imagens"
#: src/preferences.py
msgid "JPEG and BMP images can't handle transparency."
-msgstr ""
+msgstr "Imagens JPEG e BMP não podem ter transparência"
#: src/preferences.py
msgid ""
"If you save your images in these formats, what do want to use to replace "
"transparent pixels?"
msgstr ""
+"Se você salvar suas imagem nesses formatos, o que quer que substitua os "
+"pixeis transparentes?"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "White"
-msgstr ""
+msgstr "Branco"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "Black"
-msgstr ""
+msgstr "Preto"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
msgid "Checkboard"
-msgstr ""
+msgstr "Tabuleiro"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
msgid "Nothing"
-msgstr ""
+msgstr "Nada"
#: src/preferences.py
msgid "Ask before saving"
-msgstr ""
+msgstr "Perguntar antes de salvar"
#: src/preferences.py
msgid "You can zoom with Ctrl+scrolling, or only scrolling."
-msgstr ""
+msgstr "Você pode dar zoom com Ctrl+scroll, ou somente scroll"
#: src/preferences.py
-msgid "Using keyboard shortcuts or touch gestures is possible too."
-msgstr ""
+msgid "See the user help manual for explanations."
+msgstr "Veja o manual de ajuda para explicações."
#: src/preferences.py
msgid "Use 'Ctrl' to zoom"
-msgstr ""
+msgstr "Use 'Ctrl' para zoom"
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
#: src/preferences.py
msgid "Appearance"
msgstr "Aparência"
@@ -859,6 +1026,7 @@ msgstr "Aparência"
msgid "Use big icons"
msgstr "Usar ícones grandes"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Additional tools"
msgstr "Mais ferramentas"
@@ -868,32 +1036,54 @@ msgid ""
"These tools are not as reliable and useful as they should be, so they are "
"not all enabled by default."
msgstr ""
+"Essas ferramentas não são tão úteis quanto deveriam ser, então elas nao são "
+"habilitadas por padrão."
-#. In the meaning "a rubber eraser"
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
#: src/preferences.py src/tools/classic_tools/tool_eraser.py
msgid "Eraser"
msgstr "Borracha"
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
#: src/preferences.py src/tools/classic_tools/tool_highlight.py
msgid "Highlighter"
+msgstr "Realçador"
+
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
msgstr ""
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
#: src/preferences.py src/tools/selection_tools/select_free.py
msgid "Free selection"
msgstr "Seleção livre"
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
#: src/preferences.py src/tools/selection_tools/select_color.py
msgid "Color selection"
msgstr "Seleção de cor"
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
#: src/preferences.py src/tools/classic_tools/tool_picker.py
msgid "Color Picker"
msgstr "Conta gotas"
+#. Context: the name of a tool to fill an area of one color with an other
#: src/preferences.py src/tools/classic_tools/tool_paint.py
msgid "Paint"
msgstr "Pintura"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Advanced options"
msgstr "Opções avançadas"
@@ -902,18 +1092,26 @@ msgstr "Opções avançadas"
msgid "Preview size"
msgstr "Previsualizar tamanho"
+#. This label will not be displayed in the UI of stable versions
#: src/preferences.py
msgid "Development features"
msgstr "Características de desenvolvimento"
#: src/preferences.py
+msgid "Background color"
+msgstr "Cor de fundo"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
msgid "Layout"
msgstr "Disposição"
#: src/preferences.py
msgid "The recommended value is \"Automatic\"."
-msgstr ""
+msgstr "O valor recomendado é \"Automático\"."
+#. It has to match what's written in the previous string.
#: src/preferences.py
msgid "Automatic"
msgstr "Automático"
@@ -924,7 +1122,7 @@ msgstr "Compacto"
#: src/preferences.py
msgid "elementary OS"
-msgstr ""
+msgstr "elementary OS"
#. "Legacy" is about the window layout, it means menubar+toolbar, you
#. can translate it like if it was "Traditional"
@@ -933,11 +1131,11 @@ msgid "Legacy"
msgstr "Tradicional"
#. "Legacy" is about the window layout, it means menubar+toolbar, you
-#. can translate it like if it was "Traditional"
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
-#, fuzzy
msgid "Legacy (symbolic icons)"
-msgstr "Tradicional (simples)"
+msgstr "Tradicional (ícones simbólicos)"
#: src/preferences.py
msgid "Menubar only"
@@ -947,121 +1145,174 @@ msgstr "Apenas barra de menu"
msgid "Toolbar only"
msgstr "Apenas barra de ferramentas"
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
-#, fuzzy
msgid "Toolbar only (symbolic icons)"
-msgstr "Barra de ferramentas (simples)"
+msgstr "Somente barra de ferramentas (ícones simbólicos)"
#: src/properties.py
#, python-format
msgid "%s px"
-msgstr ""
+msgstr "%s px"
#: src/properties.py
#, python-format
msgid "%s cm"
-msgstr ""
+msgstr "%s cm"
#: src/properties.py
#, python-format
msgid "%s in"
-msgstr ""
+msgstr "%s in"
+#. Context: the path of the edited file
#: src/properties.py
msgid "Path"
msgstr "Caminho"
+#. Context: the file format of the edited file
#: src/properties.py
msgid "Format"
msgstr "Formatar"
#: src/properties.py
-#, fuzzy
msgid "Colorspace"
-msgstr "Cores"
+msgstr "Espaço de cores"
+#. Context: an invalid colorspace format
#: src/properties.py
msgid "Invalid format"
msgstr "Formato inválido"
-#: src/utilities.py
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "Falha ao salvar: %s"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "Sem título"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "essa imagem"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "Descartar"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "Há mudancas não salvas em %s."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr ""
+
+#: src/saving_manager.py
#, fuzzy
+msgid "Do you want to save anyway?"
+msgstr "Onde você quer abrir %s?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr "Subtítuir"
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "Esse formato de arquivo não suporta cores transparentes"
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr "Você pode salvar a imagem como PNG, ou substituír a transparência com:"
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "Substituír transparência com:"
+
+#: src/utilities.py
msgid "Transparent"
-msgstr "Adicionar transparência"
+msgstr "Transparência"
#: src/utilities.py
-#, fuzzy, python-format
+#, python-format
msgid "%s%% transparent"
-msgstr "Adicionar transparência"
+msgstr "%s%% de transparência"
#: src/utilities.py
msgid "Grey"
-msgstr ""
+msgstr "Cinza"
#: src/utilities.py
msgid "Orange"
-msgstr ""
+msgstr "Laraja"
#: src/utilities.py
msgid "Brown"
-msgstr ""
+msgstr "Marrom"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
#: src/utilities.py
msgid "Probably brown"
-msgstr ""
+msgstr "Provavelmente marrom"
#: src/utilities.py
-#, fuzzy
msgid "Red"
-msgstr "Refazer"
+msgstr "Vermelho"
#: src/utilities.py
msgid "Green"
-msgstr ""
+msgstr "Verde"
#: src/utilities.py
msgid "Blue"
-msgstr ""
+msgstr "Azul"
#: src/utilities.py
msgid "Yellow"
-msgstr ""
+msgstr "Amarelo"
#: src/utilities.py
msgid "Magenta"
-msgstr ""
+msgstr "Magenta"
#: src/utilities.py
msgid "Purple"
-msgstr ""
+msgstr "Roxo"
#: src/utilities.py
msgid "Cyan"
-msgstr ""
+msgstr "Ciano"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
#: src/utilities.py
-msgid "Probably turquoise"
-msgstr ""
+msgid "Probably teal"
+msgstr "Provavelmente turquesa"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
#: src/utilities.py
msgid "Unknown color name"
-msgstr ""
-
-#: src/utilities.py
-msgid "Replace"
-msgstr ""
-
-#: src/utilities.py
-msgid "This file format doesn't support transparent colors."
-msgstr ""
-
-#: src/utilities.py
-msgid "You can save the image as a PNG file, or replace transparency with:"
-msgstr ""
-
-#: src/utilities.py
-msgid "Replace transparency with:"
-msgstr ""
+msgstr "Cor sem nome"
#: src/utilities.py
msgid "All pictures"
@@ -1079,29 +1330,49 @@ msgstr "Imagens JPEG"
msgid "BMP images"
msgstr "Imagens BMP"
+#. To translators: it appears in tooltips over numerical inputs
#: src/utilities.py
msgid "percents"
-msgstr ""
+msgstr "porcentagens"
-#. To translators: it's the angle measure unit
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
#: src/utilities.py
-#, fuzzy
msgid "degrees"
-msgstr "Ângulo (graus)"
+msgstr "graus"
+
+#: src/utilities.py
+#, fuzzy, python-format
+msgid "%s isn't an image."
+msgstr "Abrir uma imagem"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr ""
+#. Context: an error message
#: src/window.py
#, python-format
msgid "Failed to load tool: %s"
msgstr "Falha ao carregar a ferramenta: %s"
#: src/window.py
-msgid "Modifications will take effect in the next new window."
+msgid "The clipboard doesn't contain any image."
msgstr ""
+#: src/window.py
+msgid "Modifications will take effect in the next new window."
+msgstr "Modificações vão ter efeito na próxima janela"
+
#: src/window.py src/tools/abstract_tool.py
#: src/optionsbars/classic/optionsbar-classic.ui
#: src/tools/classic_tools/tool_eraser.py
-#: src/tools/classic_tools/tool_highlight.py
msgid "No options"
msgstr "Sem opções"
@@ -1110,6 +1381,11 @@ msgid "Opened images"
msgstr "Imagens abertas"
#: src/window.py
+#, fuzzy, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "Erro ao iniciar o aplicativo, por favor reportar o bug."
+
+#: src/window.py
#, python-format
msgid "Loading %s"
msgstr "Carregando %s"
@@ -1123,54 +1399,38 @@ msgstr "Nova aba"
msgid "Discard changes"
msgstr "Descartar alterações"
-#: src/window.py
-#, python-format
-msgid "There are unsaved modifications to %s."
-msgstr "Há mudancas não salvas em %s."
-
+#. Context: %s will be replaced by the name of a file.
#: src/window.py
#, python-format
msgid "Where do you want to open %s?"
msgstr "Onde você quer abrir %s?"
-#: src/window.py
-msgid "Open a picture"
-msgstr "Abrir uma imagem"
-
#. Context for translation:
#. "What do you want to do with *these files*?"
#: src/window.py
msgid "these files"
msgstr "estes arquivos"
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
#: src/window.py
#, python-format
msgid "What do you want to do with %s?"
msgstr "O quê você quer fazer com %s?"
-#. else the exception was raised because an actual error occured, or
-#. the user clicked on "cancel"
-#: src/window.py
-#, fuzzy, python-format
-msgid "Failed to save %s"
-msgstr "Falha ao carregar a ferramenta: %s"
-
#: src/window.py
-msgid "Untitled"
-msgstr "Sem título"
-
-#. Context: the sentence "There are unsaved modifications to %s."
-#: src/window.py
-msgid "this picture"
-msgstr "essa imagem"
+#, fuzzy
+msgid "Image copied to clipboard"
+msgstr "Editar Imagem no Clipboard"
#: src/window.py
-msgid "Discard"
-msgstr "Descartar"
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr ""
#: src/window.py
-msgid "Save picture as…"
-msgstr "Salvar imagem como…"
+#, fuzzy
+msgid "Reload"
+msgstr "Recarregar Arquivo"
#: src/window.py
msgid "Import a picture"
@@ -1178,6 +1438,12 @@ msgstr "Importar uma imagem"
#: src/window.py
msgid "Required tool is not available"
+msgstr "A ferramenta requerida não está disponível"
+
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
msgstr ""
#: src/tools/utilities_paths.py
@@ -1194,15 +1460,17 @@ msgstr "Esse algoritmo pode não ser capaz de gerir a area desejada."
#: src/tools/utilities_paths.py
msgid "Do you want to abort the operation, or to let the tool struggle ?"
-msgstr "Voce deseja cancelar essa operacao, ou deixar a ferramenta tentar ?"
+msgstr "Você deseja cancelar essa operacao, ou deixar a ferramenta tentar ?"
+#. Context: fill a shape with the color of the left click
#: src/optionsbars/classic/optionsbar_color_popover.py
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Main color"
msgstr "Cor primária"
-#. if state_as_string == 'secondary':
+#. Context: fill a shape with the color of the right click
#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Secondary color"
msgstr "Cor secundária"
@@ -1212,14 +1480,14 @@ msgid "Tool size"
msgstr "Ferramenta de tamanho"
#: src/optionsbars/classic/optionsbar-classic.ui
-#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-filters.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
msgid "Preview"
msgstr "Previsualizar"
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "How the color will be applied to the existing pixels"
-msgstr ""
+msgstr "Como a cor vai ser aplicada para os pixeis existentes"
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Back to the palette"
@@ -1227,186 +1495,182 @@ msgstr "Voltar para a paleta"
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Palette"
-msgstr ""
+msgstr "Paleta"
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Use this editor by default"
msgstr "Usar esse editor por padrão"
#: src/optionsbars/selection/optionsbar-selection.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "More actions"
msgstr "Mais ações"
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
msgid "Apply"
msgstr "Aplicar"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "Mais opções"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr "Expandir com…"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "Transparência"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Select a filter…"
-msgstr "Selecionar um filtro…"
+msgstr "Selecione um filtro…"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Saturation"
-msgstr "Saturação (%)"
+msgstr "Saturação"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blur radius"
-msgstr "Raio do borrão (pixels)"
-
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#, fuzzy
-msgid "Transparency"
-msgstr "Adicionar transparência"
+msgstr "Raio do borrado"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Change saturation"
-msgstr "Saturação (%)"
+msgstr "Alterar saturação"
#. Context: a filter adding like a light veil on the image
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Veil"
-msgstr ""
+msgstr "Véu"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
msgid "Add transparency"
msgstr "Adicionar transparência"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Invert colors"
-msgstr "Trocar cores"
+msgstr "Inverter cores"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#, fuzzy
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blurring"
-msgstr "Borrado"
+msgstr "Borrando"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Fast blur"
-msgstr ""
+msgstr "Borrado rápido"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Slow blur"
-msgstr ""
+msgstr "Mostrar borrado"
#. Context: a filter that censors the image with some kind of tiles
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-#, fuzzy
-msgid "Pixelisation"
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
msgstr "Pixelização"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Blur direction"
-msgstr "Seleção de cor"
+msgstr "Direção do borrado"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Horizontal"
-msgstr "Borrar horizontalmente"
+msgstr "horizontal"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Vertical"
-msgstr "Borrar verticalmente"
+msgstr "Vertical"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "No direction"
-msgstr "Seleção de cor"
+msgstr "Sem direão"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle (degrees)"
msgstr "Ângulo (graus)"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle"
msgstr "Ângulo"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate left"
msgstr "Girar para esquerda"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate right"
msgstr "Girar para direita"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip horizontally"
msgstr "Inverter horizontalmente"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip vertically"
msgstr "Inverter verticalmente"
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#, fuzzy
-msgid "More options"
-msgstr "Mais ações"
-
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
-#, fuzzy
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Keep proportions"
msgstr "Manter proporções"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Always [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Always"
-msgstr ""
+msgstr "Sempre"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "[Keep proportions only] when scaling from corners"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "When scaling from corners"
-msgstr ""
+msgstr "Quando aumentando de pontos"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Never [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Never"
-msgstr ""
+msgstr "Nunca"
-#: src/optionsbars/canvas/optionsbar-skew.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Horizontal deformation"
-msgstr "Borrar horizontalmente"
+msgstr "Deformação horizontal"
-#: src/optionsbars/canvas/optionsbar-skew.ui
-#, fuzzy
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Vertical deformation"
-msgstr "Borrar verticalmente"
+msgstr "Deformação vertical"
+
+#: src/tools/ui/selection.ui
+#, fuzzy
+msgid "Transform"
+msgstr "Transparência"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-#, fuzzy
msgid "Line shape"
-msgstr "Forma"
+msgstr "Forma de linha"
+#. Context: this is the name of a line shape
#. Default values
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
@@ -1414,101 +1678,207 @@ msgstr "Forma"
msgid "Round"
msgstr "Arredondada"
+#. Context: this is the name of a line shape
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Thin"
-msgstr "Fino"
-
-#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
msgid "Square"
msgstr "Quadrada"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "No arrow"
+msgstr "Flecha"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "Double arrow"
+msgstr "Seta traçada"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-msgid "Use dashes"
+#, fuzzy
+msgid "No dashes"
msgstr "Usar traços"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
-msgid "Arrow"
-msgstr "Flecha"
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Simple dashes"
+msgstr "Usar traços"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Long dashes"
+msgstr "Usar traços"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-shape.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Short dashes"
+msgstr "Usar traços"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
msgid "Antialiasing"
+msgstr "Antiserrilhado"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Dark text on light background"
+msgstr "Fundo retangular"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
msgstr ""
#: src/tools/ui/tool-line.ui
msgid "Color gradient"
msgstr "Gradiente de cor"
+#. Context: title for the list of the possible painting algorithms.
#: src/tools/ui/tool-paint.ui
msgid "Behavior"
msgstr "Comportamento"
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
#: src/tools/ui/tool-paint.ui
msgid "Encircle and fill"
msgstr "Cercar e preencher"
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
#: src/tools/ui/tool-paint.ui
msgid "Erase and replace"
msgstr "Apagar e substituir"
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
#: src/tools/ui/tool-paint.ui
-msgid "Clipping"
-msgstr "Recorte"
-
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rectangle"
-msgstr "Retângulo"
+#, fuzzy
+msgid "Entire image"
+msgstr "Imagens abertas"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
#, fuzzy
-msgid "Rounded rectangle"
-msgstr "Retângulo"
+msgid "Remove color"
+msgstr "Cor de origem"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Oval"
-msgstr "Oval"
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "Circulo"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Polygon"
-msgstr "Polígono"
+msgid "Solid outline"
+msgstr "Borda sólida"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Free shape"
-msgstr "Forma livre"
+msgid "Dashed outline"
+msgstr "Borda traçada"
+#. if state_as_string == 'none':
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Circle"
-msgstr "Circulo"
+msgid "No outline"
+msgstr "Sem borda"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr "Preenchimento"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Empty outline"
-msgstr ""
+msgid "Empty shape"
+msgstr "Forma vazia"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-#, fuzzy
msgid "Horizontal gradient"
-msgstr "Borrar horizontalmente"
+msgstr "Gradiente horizontal"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-#, fuzzy
msgid "Vertical gradient"
-msgstr "Borrar verticalmente"
+msgstr "Gradiente vertical"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-#, fuzzy
msgid "Radial gradient"
-msgstr "Gradiente de cor"
+msgstr "Gradiente radial"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "Retângulo"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr "Retângulo arrendondado"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "Oval"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "Polígono"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "Forma livre"
#: src/tools/ui/tool-shape.ui
-#, fuzzy
msgid "Close shape"
-msgstr "Nova imagem"
+msgstr "Descartar forma"
#: src/tools/ui/tool-text.ui
msgid "Insert here"
@@ -1519,6 +1889,10 @@ msgid "Font"
msgstr "Fonte"
#: src/tools/ui/tool-text.ui
+msgid "Select a font…"
+msgstr "Selecionar uma fonte…"
+
+#: src/tools/ui/tool-text.ui
msgid "Italic"
msgstr "Itálico"
@@ -1526,52 +1900,56 @@ msgstr "Itálico"
msgid "Bold"
msgstr "Negrito"
+#. Context: the types of background behind the inserted text
#: src/tools/ui/tool-text.ui
msgid "Background"
msgstr "Fundo"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "No background"
msgstr "Sem fundo"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Shadow"
msgstr "Sombra"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Outline"
-msgstr ""
+msgstr "Borda"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
-#, fuzzy
msgid "Rectangle background"
-msgstr "Fundo padrão"
-
-#: src/tools/ui/selection.ui
-msgid "Edit"
-msgstr "Editar"
-
-#: src/tools/ui/selection.ui
-msgid "Flip"
-msgstr "Virar"
+msgstr "Fundo retangular"
#: src/tools/classic_tools/tool_arc.py
msgid "Curve"
msgstr "Curva"
#: src/tools/classic_tools/tool_arc.py
-#, fuzzy
msgid "Curve options"
msgstr "Opções de curva"
#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
msgid "Dashed arrow"
-msgstr ""
+msgstr "Seta traçada"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "Flecha"
#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
#: src/tools/classic_tools/tool_pencil.py
msgid "Dashed"
-msgstr ""
+msgstr "Traçado"
+
+#: src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Highlighter options"
+msgstr "Realçador"
#: src/tools/classic_tools/tool_line.py
msgid "Line"
@@ -1589,6 +1967,11 @@ msgstr "Opções da pintura"
msgid "Click on an area to replace its color by transparency"
msgstr "Clique em uma área para substituir a cor por transparência"
+#: src/tools/classic_tools/tool_paint.py
+#, fuzzy
+msgid "Click on the canvas to entirely paint it"
+msgstr "Clique no primeiro ponto da forma para fechá-la"
+
#: src/tools/classic_tools/tool_pencil.py
msgid "Pencil"
msgstr "Lápis"
@@ -1597,15 +1980,21 @@ msgstr "Lápis"
msgid "Pencil options"
msgstr "Opções do lápis"
+#: src/tools/classic_tools/tool_points.py
+#, fuzzy
+msgid "Points options"
+msgstr "Opções de fonte"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr ""
+
#: src/tools/classic_tools/tool_shape.py
msgid "Shape"
msgstr "Forma"
#: src/tools/classic_tools/tool_shape.py
-msgid "Empty"
-msgstr "Vazio"
-
-#: src/tools/classic_tools/tool_shape.py
msgid "Shape options"
msgstr "Opções da forma"
@@ -1617,6 +2006,7 @@ msgstr "Clique no primeiro ponto da forma para fechá-la"
msgid "Text"
msgstr "Texto"
+#. XXX use "text options" instead
#: src/tools/classic_tools/tool_text.py
msgid "Font options"
msgstr "Opções de fonte"
@@ -1633,47 +2023,70 @@ msgstr "Selecione uma área ou botão direito na tela"
msgid "Rectangle selection"
msgstr "Seleção em retângulo"
-#: src/tools/canvas_tools/abstract_canvas_tool.py
+#: src/tools/transform_tools/abstract_transform_tool.py
msgid "Error: invalid values"
-msgstr ""
+msgstr "Erro: valores inválidos"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the selection"
msgstr "Recortar a seleção"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the canvas"
msgstr "Recortar a tela"
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Click on the image to preview the selected filter"
-msgstr ""
+msgstr "Clique na imagem para pré-visualizar o filtro selecionado"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the selection"
msgstr "Girar a seleção"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the canvas"
msgstr "Girando a tela"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the selection"
msgstr "Redimensionar a seleção"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the canvas"
msgstr "Redimensionar a tela"
-#~ msgid "Classic"
-#~ msgstr "Clássico"
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr "Entortar"
+
+#~ msgid "Flip"
+#~ msgstr "Virar"
+
+#, fuzzy
+#~ msgid "Add semi-transparency"
+#~ msgstr "Adicionar transparência"
+
+#~ msgid "Thin"
+#~ msgstr "Fino"
+
+#~ msgid "Clipping"
+#~ msgstr "Recorte"
+
+#~ msgid "Edit"
+#~ msgstr "Editar"
+
+#~ msgid "Open a file"
+#~ msgstr "Abrir um arquivo"
+
+#~ msgid "Save as"
+#~ msgstr "Salvar como"
#~ msgid "Close"
#~ msgstr "Fechar"
-#~ msgid "Filling"
-#~ msgstr "Preenchimento"
-
#~ msgid "Selection type"
#~ msgstr "Tipo de seleção"
diff --git a/po/ru.po b/po/ru.po
index 9d5aa2ce..aa28fb3b 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: drawing\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-15 19:07+0200\n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
"PO-Revision-Date: 2019-05-06 22:22+0300\n"
"Last-Translator: Artem Polishchuk <ego.cordatus@gmail.com>\n"
"Language-Team: \n"
@@ -74,6 +74,71 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"Version 0.6 is a major update, with various important changes. The app is "
"more robust and has more tools:"
msgstr ""
@@ -95,8 +160,14 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
-"with several types of blur, color inversion, pixelisation, saturation and "
+"with several types of blur, color inversion, pixelization, saturation and "
"transparency."
msgstr ""
@@ -110,14 +181,29 @@ msgid ""
"image, using the minimap, the touchpad or the mouse wheel."
msgstr ""
+#. This is just my name, do not translate it.
#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid ""
-"Version 0.4.8 features several minor bug fixes, and various new translations."
+msgid "Romain F. T."
msgstr ""
-#. This is just my name, do not translate it.
+#. Caption of a screenshot, for appstores
#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid "Romain F. T."
+msgid "The window and its primary menu"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
msgstr ""
#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
@@ -125,7 +211,7 @@ msgstr ""
msgid "Preferences"
msgstr "Параметры"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
msgid "Report a bug"
msgstr "Сообщить об ошибке"
@@ -178,19 +264,23 @@ msgstr ""
msgid "Reload file"
msgstr "Открыть файл"
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/properties.py
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
msgid "Image properties"
msgstr "Свойства изображения"
#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
-#: src/ui/win-menus.ui src/window.py
+#: src/ui/win-menus.ui src/saving_manager.py
msgid "Save"
msgstr "Сохранить"
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+#, fuzzy
+msgid "Save without transparency"
+msgstr "Добавить прозрачность"
+
#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
-#: src/utilities.py
+#: src/saving_manager.py
msgid "Save as…"
msgstr "Сохранить как…"
@@ -199,7 +289,13 @@ msgstr "Сохранить как…"
msgid "Export as…"
msgstr "Экспортировать как…"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
msgid "Print"
msgstr "Печать"
@@ -286,20 +382,25 @@ msgid "Optimal Zoom"
msgstr ""
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom Out"
msgstr ""
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Original Zoom"
msgstr ""
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom In"
msgstr ""
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
#: src/ui/app-menus.ui
#, fuzzy
msgid "Position"
@@ -336,12 +437,6 @@ msgid "Refresh"
msgstr "Обновить"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
-#: src/preferences.py
-msgid "Show tools names"
-msgstr "Показать названия инструментов"
-
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/shortcuts.ui
-#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
msgid "Fullscreen"
msgstr ""
@@ -378,56 +473,65 @@ msgstr "Поменять цвета"
msgid "Color application mode"
msgstr "Выбор цвета"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Normal"
msgstr "Формат"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Other modes"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Raw source color"
msgstr "Цвет источника"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Highlight"
msgstr "Высота"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Difference"
msgstr "Различия"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
-msgid "Photo manipulation"
+msgid "Photo-oriented modes"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Hue only"
msgstr "Только панель меню"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Saturation only"
msgstr "Насыщенность (%)"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Hue and saturation"
msgstr "Насыщенность (%)"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Luminosity only"
msgstr ""
@@ -437,18 +541,18 @@ msgid "Don't use the colors but…"
msgstr ""
#. To translators: this is a verb
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Blur"
msgstr ""
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
#, fuzzy
msgid "Erase"
msgstr "Ластик"
-#: src/ui/app-menus.ui src/window.py
+#: src/ui/app-menus.ui
msgid "_Tools"
msgstr "_Инструменты"
@@ -456,6 +560,24 @@ msgstr "_Инструменты"
msgid "Previous tool"
msgstr "Предыдущий инструмент"
+#: src/ui/app-menus.ui
+msgid "Active tool"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "Показать названия инструментов"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+#, fuzzy
+msgid "Smaller width"
+msgstr "Ширина по умолчанию"
+
#: src/ui/app-menus.ui src/window.py
msgid "_Options"
msgstr "_Опции"
@@ -464,23 +586,29 @@ msgstr "_Опции"
msgid "_Help"
msgstr "_Справка"
+#. Context: open the index of all help pages
#: src/ui/app-menus.ui
msgid "Index"
msgstr ""
+#. Context: open the help page about general use of the app
#: src/ui/app-menus.ui
msgid "Basic help"
msgstr ""
+#. Context: open the help page about classic tools
#: src/ui/app-menus.ui
msgid "Help about tools"
msgstr ""
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
#: src/ui/app-menus.ui
#, fuzzy
msgid "Canvas and selection"
msgstr "Масштабировать выделенное"
+#. Context: open the help page about the selection
#: src/ui/app-menus.ui
#, fuzzy
msgid "Help about selection"
@@ -495,22 +623,26 @@ msgstr "О Drawing"
msgid "Open"
msgstr "Открыть"
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr ""
+
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Width"
msgstr "Ширина"
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Height"
msgstr "Высота"
#: src/ui/new-image-dialog.ui
#, fuzzy
-msgid "Background color"
-msgstr "Фон по умолчанию"
+msgid "Color"
+msgstr "Цвета"
#: src/ui/new-image-dialog.ui
#, fuzzy
@@ -521,6 +653,8 @@ msgstr "Использовать этот редактор по умолчани
msgid "100%"
msgstr ""
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
#: src/ui/properties.ui src/utilities.py
msgid "pixels"
msgstr "пиксели"
@@ -538,7 +672,7 @@ msgstr "дюймы"
msgid "Images"
msgstr "Изображение"
-#: src/ui/preferences.ui src/ui/shortcuts.ui
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
#, fuzzy
msgid "Tools"
msgstr "_Инструменты"
@@ -560,30 +694,22 @@ msgid "Unselect"
msgstr "Снять выделение"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Crop"
msgstr "Обрезать"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scale"
msgstr "Масштаб"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotate"
msgstr "Повернуть"
-#. In this context, "Skew" is the name of the tool changing rectangles
-#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
-#. "Stretch/Skew" dialog.
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_skew.py
-msgid "Skew"
-msgstr ""
-
-#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Filters"
msgstr ""
@@ -594,8 +720,9 @@ msgid "Open As New Image"
msgstr "Новое изображение"
#: src/ui/shortcuts.ui
-msgid "Keyboard"
-msgstr ""
+#, fuzzy
+msgid "Keyboard Shortcuts"
+msgstr "Комбинации клавиш"
#: src/ui/shortcuts.ui
msgid "General"
@@ -606,32 +733,28 @@ msgid "Main menu"
msgstr "Главное меню"
#: src/ui/shortcuts.ui
-#, fuzzy
-msgid "Editing"
-msgstr "Издание"
-
-#: src/ui/shortcuts.ui
msgid "Image"
msgstr "Изображение"
-#: src/ui/shortcuts.ui
-msgid "Open a file"
-msgstr "Открыть файл"
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "Открыть изображение"
#: src/ui/shortcuts.ui
msgid "Reload image from disk"
msgstr ""
-#: src/ui/shortcuts.ui
-msgid "Save as"
-msgstr "Сохранить как"
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "Сохранить изображение как…"
#: src/ui/shortcuts.ui
msgid "Close the active image"
msgstr "Закрыть активное изображение"
#: src/ui/shortcuts.ui
-msgid "Options menu"
+#, fuzzy
+msgid "Open the tool options menu"
msgstr "Меню параметров"
#: src/ui/shortcuts.ui
@@ -639,18 +762,12 @@ msgid "Back to previous tool"
msgstr "Вернуться к предыдущему инструменту"
#: src/ui/shortcuts.ui
-msgid "Colors"
-msgstr "Цвета"
+msgid "Apply a transformation"
+msgstr ""
-#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Edit the main color (left click)"
-msgstr "Редактирование основного цвета (щелчок левой кнопкой мыши)"
-
-#. Label displayed in the keyboard shortcuts dialog
-#: src/ui/shortcuts.ui
-msgid "Edit the secondary color (right click)"
-msgstr "Редактирование вторичного цвета (щелчок правой кнопкой мыши)"
+msgid "History"
+msgstr ""
#: src/ui/shortcuts.ui
msgid "Selection"
@@ -669,17 +786,25 @@ msgid "Import a file as the selection"
msgstr "Повернуть выделенное"
#: src/ui/shortcuts.ui
-msgid "Tabs"
-msgstr ""
+msgid "Colors"
+msgstr "Цвета"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Enter fullscreen mode"
-msgstr ""
+msgid "Edit the main color (left click)"
+msgstr "Редактирование основного цвета (щелчок левой кнопкой мыши)"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Edit the secondary color (right click)"
+msgstr "Редактирование вторичного цвета (щелчок правой кнопкой мыши)"
#: src/ui/shortcuts.ui
-msgid "Exit fullscreen mode"
+msgid "Tabs"
msgstr ""
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
#: src/ui/shortcuts.ui
msgid "Navigation"
msgstr "Навигация"
@@ -688,11 +813,27 @@ msgstr "Навигация"
msgid "Toggle the preview"
msgstr "Переключить предварительный просмотр"
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr ""
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr ""
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr ""
+
#: src/ui/win-menus.ui
#, fuzzy
msgid "Troubleshoot selection"
msgstr "Выбор цвета"
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr ""
+
#: src/ui/window.ui
msgid "Error starting the application, please report this bug."
msgstr "Ошибка при запуске приложения, пожалуйста, сообщите об этой ошибке."
@@ -707,6 +848,12 @@ msgstr "Отменить"
msgid "Redo %s"
msgstr "Вернуть"
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr ""
+
#: src/image.py
msgid "Can't reload a never-saved file from the disk."
msgstr ""
@@ -715,15 +862,15 @@ msgstr ""
msgid "Unsaved file"
msgstr "Несохраненный файл"
-#: src/new_image_dialog.py src/utilities.py src/window.py
-#: src/tools/utilities_paths.py src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-crop.ui src/tools/ui/tool-filters.ui
-#: src/tools/ui/tool-rotate.ui src/tools/ui/tool-scale.ui
-#: src/tools/ui/tool-skew.ui
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
msgid "Cancel"
msgstr "Отмена"
@@ -732,19 +879,23 @@ msgstr "Отмена"
msgid "Create"
msgstr ""
+#. Description of a command line option
#: src/main.py
#, fuzzy
msgid "Show the app version"
msgstr "Предварительный просмотр"
+#. Description of a command line option
#: src/main.py
msgid "Open a new window"
msgstr "Открыть новое окно"
+#. Description of a command line option
#: src/main.py
msgid "Open a new tab"
msgstr "Открыть новую вкладку"
+#. Description of a command line option
#: src/main.py
msgid "Edit the clipboard content"
msgstr ""
@@ -757,12 +908,14 @@ msgstr ""
msgid "Report bugs or ideas"
msgstr "Сообщить об ошибках или идеях"
-#. To tranlators: "translate" this by your name, it will be displayed
-#. in the "about" dialog
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
#: src/main.py
msgid "translator-credits"
msgstr "Artem Polishchuk <ego.cordatus@gmail.com>, 2019."
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
#: src/main.py
msgid "GNOME's \"Art Libre\" icon set authors"
msgstr ""
@@ -776,20 +929,27 @@ msgid "Official webpage"
msgstr ""
#: src/main.py
-#, fuzzy, python-format
-msgid "Error opening this file. Did you mean %s ?"
+#, fuzzy
+msgid "Error opening this file."
msgstr ""
"Ошибка при открытии файла. Вы имели в виду\n"
"flatpak run --file-forwarding {0} @@ {1} @@\n"
"?"
-#. This displays the zoom level, %s will be replaced with a number, while
-#. %% is just the symbol '%'
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr ""
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
#: src/minimap.py
#, python-format
msgid "%s%%"
msgstr ""
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "New images"
msgstr "Новые изображения"
@@ -802,10 +962,17 @@ msgstr "Ширина по умолчанию"
msgid "Default height"
msgstr "Высота по умолчанию"
-#: src/preferences.py
-msgid "Default background"
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+#, fuzzy
+msgid "Default color"
msgstr "Фон по умолчанию"
+#. Context: title of a section of the preferences
#: src/preferences.py
#, fuzzy
msgid "Images saving"
@@ -821,19 +988,23 @@ msgid ""
"transparent pixels?"
msgstr ""
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "White"
msgstr ""
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "Black"
msgstr ""
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
msgid "Checkboard"
msgstr ""
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
msgid "Nothing"
msgstr ""
@@ -846,13 +1017,15 @@ msgid "You can zoom with Ctrl+scrolling, or only scrolling."
msgstr ""
#: src/preferences.py
-msgid "Using keyboard shortcuts or touch gestures is possible too."
+msgid "See the user help manual for explanations."
msgstr ""
#: src/preferences.py
msgid "Use 'Ctrl' to zoom"
msgstr ""
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
#: src/preferences.py
msgid "Appearance"
msgstr ""
@@ -861,6 +1034,7 @@ msgstr ""
msgid "Use big icons"
msgstr ""
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Additional tools"
msgstr ""
@@ -871,31 +1045,51 @@ msgid ""
"not all enabled by default."
msgstr ""
-#. In the meaning "a rubber eraser"
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
#: src/preferences.py src/tools/classic_tools/tool_eraser.py
msgid "Eraser"
msgstr "Ластик"
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
#: src/preferences.py src/tools/classic_tools/tool_highlight.py
msgid "Highlighter"
msgstr ""
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr ""
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
#: src/preferences.py src/tools/selection_tools/select_free.py
msgid "Free selection"
msgstr "Свободное выделение"
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
#: src/preferences.py src/tools/selection_tools/select_color.py
msgid "Color selection"
msgstr "Выбор цвета"
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
#: src/preferences.py src/tools/classic_tools/tool_picker.py
msgid "Color Picker"
msgstr "Выбор цвета"
+#. Context: the name of a tool to fill an area of one color with an other
#: src/preferences.py src/tools/classic_tools/tool_paint.py
msgid "Paint"
msgstr "Заливка"
+#. Context: title of a section of the preferences
#: src/preferences.py
#, fuzzy
msgid "Advanced options"
@@ -905,11 +1099,19 @@ msgstr "Варианты дуги"
msgid "Preview size"
msgstr "Размер предварительного просмотра"
+#. This label will not be displayed in the UI of stable versions
#: src/preferences.py
msgid "Development features"
msgstr ""
#: src/preferences.py
+#, fuzzy
+msgid "Background color"
+msgstr "Фон по умолчанию"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
msgid "Layout"
msgstr "Раскладка"
@@ -917,6 +1119,7 @@ msgstr "Раскладка"
msgid "The recommended value is \"Automatic\"."
msgstr ""
+#. It has to match what's written in the previous string.
#: src/preferences.py
msgid "Automatic"
msgstr "Автоматический"
@@ -936,7 +1139,8 @@ msgid "Legacy"
msgstr "Старый"
#. "Legacy" is about the window layout, it means menubar+toolbar, you
-#. can translate it like if it was "Traditional"
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Legacy (symbolic icons)"
msgstr ""
@@ -949,6 +1153,7 @@ msgstr "Только панель меню"
msgid "Toolbar only"
msgstr "Только панель инструментов"
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
#, fuzzy
msgid "Toolbar only (symbolic icons)"
@@ -969,10 +1174,12 @@ msgstr ""
msgid "%s in"
msgstr ""
+#. Context: the path of the edited file
#: src/properties.py
msgid "Path"
msgstr "Путь"
+#. Context: the file format of the edited file
#: src/properties.py
msgid "Format"
msgstr "Формат"
@@ -982,10 +1189,69 @@ msgstr "Формат"
msgid "Colorspace"
msgstr "Цвета"
+#. Context: an invalid colorspace format
#: src/properties.py
msgid "Invalid format"
msgstr "Неверный формат"
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr ""
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "Без названия"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "это изображение"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "Сбросить"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "Несохраненные изменения в %s."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr ""
+
+#: src/saving_manager.py
+#, fuzzy
+msgid "Do you want to save anyway?"
+msgstr "Где вы хотите открыть %s?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr ""
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr ""
+
#: src/utilities.py
#, fuzzy
msgid "Transparent"
@@ -1008,6 +1274,9 @@ msgstr ""
msgid "Brown"
msgstr ""
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
#: src/utilities.py
msgid "Probably brown"
msgstr ""
@@ -1041,31 +1310,23 @@ msgstr ""
msgid "Cyan"
msgstr ""
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
#: src/utilities.py
-msgid "Probably turquoise"
+msgid "Probably teal"
msgstr ""
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
#: src/utilities.py
msgid "Unknown color name"
msgstr ""
#: src/utilities.py
-msgid "Replace"
-msgstr ""
-
-#: src/utilities.py
-msgid "This file format doesn't support transparent colors."
-msgstr ""
-
-#: src/utilities.py
-msgid "You can save the image as a PNG file, or replace transparency with:"
-msgstr ""
-
-#: src/utilities.py
-msgid "Replace transparency with:"
-msgstr ""
-
-#: src/utilities.py
msgid "All pictures"
msgstr "Все изображения"
@@ -1081,29 +1342,50 @@ msgstr "Изображения JPEG"
msgid "BMP images"
msgstr "Изображения BMP"
+#. To translators: it appears in tooltips over numerical inputs
#: src/utilities.py
msgid "percents"
msgstr ""
-#. To translators: it's the angle measure unit
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
#: src/utilities.py
#, fuzzy
msgid "degrees"
msgstr "Угол (градусы)"
+#: src/utilities.py
+#, fuzzy, python-format
+msgid "%s isn't an image."
+msgstr "Открыть изображение"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr ""
+
+#. Context: an error message
#: src/window.py
#, python-format
msgid "Failed to load tool: %s"
msgstr ""
#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr ""
+
+#: src/window.py
msgid "Modifications will take effect in the next new window."
msgstr "Изменения вступят в силу в следующем новом окне."
#: src/window.py src/tools/abstract_tool.py
#: src/optionsbars/classic/optionsbar-classic.ui
#: src/tools/classic_tools/tool_eraser.py
-#: src/tools/classic_tools/tool_highlight.py
msgid "No options"
msgstr ""
@@ -1112,6 +1394,11 @@ msgid "Opened images"
msgstr "Открытые изображения"
#: src/window.py
+#, fuzzy, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "Ошибка при запуске приложения, пожалуйста, сообщите об этой ошибке."
+
+#: src/window.py
#, python-format
msgid "Loading %s"
msgstr "Загрузка %s"
@@ -1125,20 +1412,12 @@ msgstr "Новая вкладка"
msgid "Discard changes"
msgstr "Отменить изменения"
-#: src/window.py
-#, python-format
-msgid "There are unsaved modifications to %s."
-msgstr "Несохраненные изменения в %s."
-
+#. Context: %s will be replaced by the name of a file.
#: src/window.py
#, python-format
msgid "Where do you want to open %s?"
msgstr "Где вы хотите открыть %s?"
-#: src/window.py
-msgid "Open a picture"
-msgstr "Открыть изображение"
-
#. Context for translation:
#. "What do you want to do with *these files*?"
#: src/window.py
@@ -1146,34 +1425,25 @@ msgstr "Открыть изображение"
msgid "these files"
msgstr "Несохраненный файл"
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
#: src/window.py
#, fuzzy, python-format
msgid "What do you want to do with %s?"
msgstr "Где вы хотите открыть %s?"
-#. else the exception was raised because an actual error occured, or
-#. the user clicked on "cancel"
#: src/window.py
-#, python-format
-msgid "Failed to save %s"
+msgid "Image copied to clipboard"
msgstr ""
#: src/window.py
-msgid "Untitled"
-msgstr "Без названия"
-
-#. Context: the sentence "There are unsaved modifications to %s."
-#: src/window.py
-msgid "this picture"
-msgstr "это изображение"
-
-#: src/window.py
-msgid "Discard"
-msgstr "Сбросить"
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr ""
#: src/window.py
-msgid "Save picture as…"
-msgstr "Сохранить изображение как…"
+#, fuzzy
+msgid "Reload"
+msgstr "Открыть файл"
#: src/window.py
msgid "Import a picture"
@@ -1183,6 +1453,12 @@ msgstr "Импорт изображения"
msgid "Required tool is not available"
msgstr ""
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
+
#: src/tools/utilities_paths.py
msgid "Continue"
msgstr "Продолжить"
@@ -1199,13 +1475,15 @@ msgstr ""
msgid "Do you want to abort the operation, or to let the tool struggle ?"
msgstr ""
+#. Context: fill a shape with the color of the left click
#: src/optionsbars/classic/optionsbar_color_popover.py
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Main color"
msgstr "Основной цвет"
-#. if state_as_string == 'secondary':
+#. Context: fill a shape with the color of the right click
#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Secondary color"
msgstr "Вторичный цвет"
@@ -1215,8 +1493,8 @@ msgid "Tool size"
msgstr "Размер инструмента"
#: src/optionsbars/classic/optionsbar-classic.ui
-#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-filters.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
msgid "Preview"
msgstr "Предпросмотр"
@@ -1237,177 +1515,192 @@ msgid "Use this editor by default"
msgstr "Использовать этот редактор по умолчанию"
#: src/optionsbars/selection/optionsbar-selection.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
#, fuzzy
msgid "More actions"
msgstr "Варианты окружности"
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
msgid "Apply"
msgstr "Применить"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#, fuzzy
+msgid "More options"
+msgstr "Варианты окружности"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr ""
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+#, fuzzy
+msgid "Transparency"
+msgstr "Добавить прозрачность"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
#, fuzzy
msgid "Select a filter…"
msgstr "Выбрать все"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
#, fuzzy
msgid "Saturation"
msgstr "Насыщенность (%)"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blur radius"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#, fuzzy
-msgid "Transparency"
-msgstr "Добавить прозрачность"
-
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
#, fuzzy
msgid "Change saturation"
msgstr "Насыщенность (%)"
#. Context: a filter adding like a light veil on the image
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Veil"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
#, fuzzy
msgid "Add transparency"
msgstr "Добавить прозрачность"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
#, fuzzy
msgid "Invert colors"
msgstr "Поменять цвета"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blurring"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Fast blur"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Slow blur"
msgstr ""
#. Context: a filter that censors the image with some kind of tiles
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
#, fuzzy
-msgid "Pixelisation"
+msgid "Pixelization"
msgstr "Издание"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
#, fuzzy
msgid "Blur direction"
msgstr "Выбор цвета"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
#, fuzzy
msgid "Horizontal"
msgstr "Перевернуть по горизонтали"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
#, fuzzy
msgid "Vertical"
msgstr "Выбор цвета"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
#, fuzzy
msgid "No direction"
msgstr "Выбор цвета"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle (degrees)"
msgstr "Угол (градусы)"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate left"
msgstr "Повернуть влево"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate right"
msgstr "Повернуть вправо"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip horizontally"
msgstr "Перевернуть по горизонтали"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip vertically"
msgstr "Перевернуть по вертикали"
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#, fuzzy
-msgid "More options"
-msgstr "Варианты окружности"
-
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
#, fuzzy
msgid "Keep proportions"
msgstr "Сохранять пропорции"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Always [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Always"
msgstr ""
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "[Keep proportions only] when scaling from corners"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "When scaling from corners"
msgstr ""
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Never [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Never"
msgstr ""
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
#, fuzzy
msgid "Horizontal deformation"
msgstr "Перевернуть по горизонтали"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
#, fuzzy
msgid "Vertical deformation"
msgstr "Выбор цвета"
+#: src/tools/ui/selection.ui
+#, fuzzy
+msgid "Transform"
+msgstr "Добавить прозрачность"
+
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
#, fuzzy
msgid "Line shape"
msgstr "Свободная форма"
+#. Context: this is the name of a line shape
#. Default values
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
@@ -1415,83 +1708,173 @@ msgstr "Свободная форма"
msgid "Round"
msgstr "Круглый"
+#. Context: this is the name of a line shape
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Thin"
-msgstr "Тонкий"
-
-#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
msgid "Square"
msgstr "Квадратный"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "No arrow"
+msgstr "Указатель"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Double arrow"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-msgid "Use dashes"
+#, fuzzy
+msgid "No dashes"
msgstr "Использовать тире"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
-msgid "Arrow"
-msgstr "Указатель"
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Simple dashes"
+msgstr "Использовать тире"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Long dashes"
+msgstr "Использовать тире"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Short dashes"
+msgstr "Использовать тире"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-shape.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
msgid "Antialiasing"
msgstr ""
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Dark text on light background"
+msgstr "Фон по умолчанию"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr ""
+
#: src/tools/ui/tool-line.ui
#, fuzzy
msgid "Color gradient"
msgstr "Выбор цвета"
+#. Context: title for the list of the possible painting algorithms.
#: src/tools/ui/tool-paint.ui
msgid "Behavior"
msgstr ""
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
#: src/tools/ui/tool-paint.ui
msgid "Encircle and fill"
msgstr "Окружить и заполнить"
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
#: src/tools/ui/tool-paint.ui
msgid "Erase and replace"
msgstr "Стереть и заменить"
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
#: src/tools/ui/tool-paint.ui
-msgid "Clipping"
+#, fuzzy
+msgid "Entire image"
+msgstr "Открытые изображения"
+
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+#, fuzzy
+msgid "Remove color"
+msgstr "Цвет источника"
+
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
msgstr ""
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rectangle"
-msgstr "Прямоугольник"
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "Круг"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-#, fuzzy
-msgid "Rounded rectangle"
-msgstr "Прямоугольник"
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr ""
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Oval"
-msgstr "Овальный"
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr ""
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Polygon"
-msgstr "Полигон"
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Free shape"
-msgstr "Свободная форма"
+msgid "Solid outline"
+msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Circle"
-msgstr "Круг"
+msgid "Dashed outline"
+msgstr ""
+#. if state_as_string == 'none':
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Empty outline"
+msgid "No outline"
msgstr ""
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr "Заполнение"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+#, fuzzy
+msgid "Empty shape"
+msgstr "Пустой"
+
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
#, fuzzy
msgid "Horizontal gradient"
@@ -1507,6 +1890,27 @@ msgstr "Выбор цвета"
msgid "Radial gradient"
msgstr "Выбор цвета"
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "Прямоугольник"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+#, fuzzy
+msgid "Rounded rectangle"
+msgstr "Прямоугольник"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "Овальный"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "Полигон"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "Свободная форма"
+
#: src/tools/ui/tool-shape.ui
#, fuzzy
msgid "Close shape"
@@ -1521,6 +1925,11 @@ msgid "Font"
msgstr "Шрифт"
#: src/tools/ui/tool-text.ui
+#, fuzzy
+msgid "Select a font…"
+msgstr "Выбрать все"
+
+#: src/tools/ui/tool-text.ui
msgid "Italic"
msgstr ""
@@ -1528,37 +1937,34 @@ msgstr ""
msgid "Bold"
msgstr ""
+#. Context: the types of background behind the inserted text
#: src/tools/ui/tool-text.ui
#, fuzzy
msgid "Background"
msgstr "Фон по умолчанию"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
#, fuzzy
msgid "No background"
msgstr "Фон по умолчанию"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Shadow"
msgstr ""
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Outline"
msgstr ""
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
#, fuzzy
msgid "Rectangle background"
msgstr "Фон по умолчанию"
-#: src/tools/ui/selection.ui
-msgid "Edit"
-msgstr "Правка"
-
-#: src/tools/ui/selection.ui
-msgid "Flip"
-msgstr "Перевернуть"
-
#: src/tools/classic_tools/tool_arc.py
msgid "Curve"
msgstr ""
@@ -1573,10 +1979,19 @@ msgid "Dashed arrow"
msgstr ""
#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "Указатель"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
#: src/tools/classic_tools/tool_pencil.py
msgid "Dashed"
msgstr ""
+#: src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Highlighter options"
+msgstr "Варианты линии"
+
#: src/tools/classic_tools/tool_line.py
msgid "Line"
msgstr "Линия"
@@ -1593,6 +2008,10 @@ msgstr "Варианты рисования"
msgid "Click on an area to replace its color by transparency"
msgstr "Щелкните на область, чтобы заменить ее цвет прозрачностью"
+#: src/tools/classic_tools/tool_paint.py
+msgid "Click on the canvas to entirely paint it"
+msgstr ""
+
#: src/tools/classic_tools/tool_pencil.py
msgid "Pencil"
msgstr "Карандаш"
@@ -1601,15 +2020,21 @@ msgstr "Карандаш"
msgid "Pencil options"
msgstr "Варианты карандаша"
+#: src/tools/classic_tools/tool_points.py
+#, fuzzy
+msgid "Points options"
+msgstr "Варианты линии"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr ""
+
#: src/tools/classic_tools/tool_shape.py
msgid "Shape"
msgstr "Фигура"
#: src/tools/classic_tools/tool_shape.py
-msgid "Empty"
-msgstr "Пустой"
-
-#: src/tools/classic_tools/tool_shape.py
msgid "Shape options"
msgstr "Фарианты формы"
@@ -1621,6 +2046,7 @@ msgstr ""
msgid "Text"
msgstr "Текст"
+#. XXX use "text options" instead
#: src/tools/classic_tools/tool_text.py
#, fuzzy
msgid "Font options"
@@ -1638,47 +2064,67 @@ msgstr "Выберите область или щелкните правой к
msgid "Rectangle selection"
msgstr "Прямоугольное выделение"
-#: src/tools/canvas_tools/abstract_canvas_tool.py
+#: src/tools/transform_tools/abstract_transform_tool.py
msgid "Error: invalid values"
msgstr ""
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the selection"
msgstr "Обрезать выделенное"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the canvas"
msgstr "Обрезать холст"
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Click on the image to preview the selected filter"
msgstr ""
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the selection"
msgstr "Повернуть выделенное"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the canvas"
msgstr "Повернуть холст"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the selection"
msgstr "Масштабировать выделенное"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the canvas"
msgstr "Масштабировать холст"
-#~ msgid "Classic"
-#~ msgstr "Классический"
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr ""
+
+#~ msgid "Flip"
+#~ msgstr "Перевернуть"
+
+#, fuzzy
+#~ msgid "Add semi-transparency"
+#~ msgstr "Добавить прозрачность"
+
+#~ msgid "Thin"
+#~ msgstr "Тонкий"
+
+#~ msgid "Edit"
+#~ msgstr "Правка"
+
+#~ msgid "Open a file"
+#~ msgstr "Открыть файл"
+
+#~ msgid "Save as"
+#~ msgstr "Сохранить как"
#~ msgid "Close"
#~ msgstr "Закрыть"
-#~ msgid "Filling"
-#~ msgstr "Заполнение"
-
#~ msgid "Freehand"
#~ msgstr "Свободно"
diff --git a/po/sv.po b/po/sv.po
index 58b4ca4d..1aa7f43b 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,14 +1,14 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the drawing package.
-# Åke Engelbrektson <eson@svenskasprakfiler.se>, 2019, 2020.
+# Åke Engelbrektson <eson@svenskasprakfiler.se>, 2019-2020.
#
msgid ""
msgstr ""
"Project-Id-Version: drawing\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-15 19:07+0200\n"
-"PO-Revision-Date: 2020-05-17 16:20+0200\n"
+"POT-Creation-Date: 2020-11-28 10:07+0100\n"
+"PO-Revision-Date: 2020-11-23 15:35+0100\n"
"Last-Translator: Åke Engelbrektson <eson@svenskasprakfiler.se>\n"
"Language-Team: Svenska Språkfiler <contactform@svenskasprakfiler.se>\n"
"Language: sv\n"
@@ -78,6 +78,89 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+"Version 0.6.4 innehåller ett flertal mindre felkorrigeringar, och diverse "
+"nya översättningar."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+"Versionen 0.6.3 förbättrar alternativet att rita pilar. Flera problem har "
+"åtgärdats och dubbelsidiga pilar är nu möjliga."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr "Det finns också fler alternativ, för att rita med hjälp av streck."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+"Denna version är äntligen kompatibel med äldre distributioner (versioner av "
+"GNOME-bibliotek äldre än 3.30)."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+"Version 0.6.2 innehåller ett flertal mindre felkorrigeringar, och diverse "
+"nya översättningar."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+"Verktyget 'Markeringspenna' ger nu alternativ för att markera ljus text mot "
+"en mörk bakgrund."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+"När en bild har sparats utan dess transparens, föreslår programmet nu att "
+"läsa om bilden från disk. Funktionen \"Läs om bilden från disk\" är nu också "
+"tillgänglig vid varje möjlig fönsterlayout."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr "En åtgärd för att kopiera hela bilden till urklipp har lagts till."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+"Det är nu möjligt att ta bort transparens när PNG-filer sparas också. Det "
+"finns också fler färgalternativ att ersätta de transparenta bildpunkterna "
+"med."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+"Ett nytt tilläggsverktyg kallat \"Punkter\" har lagts till, det kan hjälpa "
+"till med att textsätta bilder."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr "Mindre fel i verktyget \"Rotera\" har fixats."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"Version 0.6 is a major update, with various important changes. The app is "
"more robust and has more tools:"
msgstr ""
@@ -108,12 +191,20 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+"Textverktyget kan nu skriva med de flesta systemteckensnitt, vilket gör att "
+"mer komplexa tecken kan användas (t.ex. asiatiska tecken)."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
-"with several types of blur, color inversion, pixelisation, saturation and "
+"with several types of blur, color inversion, pixelization, saturation and "
"transparency."
msgstr ""
"Mättnadsverktyget har ersatts av\"Filter\", ett mer kraftfullt verktyg med "
-"flera typer av oskärpa, färginversion, pixelisering, mättnad och transparens."
+"flera typer av oskärpa, färginversion, pixelering, mättnad och transparens."
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid "A fullscreen mode is now available."
@@ -127,24 +218,37 @@ msgstr ""
"Den mest framträdande nya funktionen är möjligheten att zooma in (eller ut) "
"i bilden, med hjälp av miniatyren, pekplattan eller mushjulet."
-#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid ""
-"Version 0.4.8 features several minor bug fixes, and various new translations."
-msgstr ""
-"Version 0.4.8 innehåller ett flertal mindre felkorrigeringar, och diverse "
-"nya översättningar."
-
#. This is just my name, do not translate it.
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid "Romain F. T."
msgstr "Romain F. T."
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr "Fönstret och dess primära meny"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr "Markeringen och de åtgärder som associeras med den."
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr "Zooma i olika figurer"
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr "Menyn \"Ny bild\" öppnas"
+
#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
#: src/preferences.py
msgid "Preferences"
msgstr "Inställningar"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
msgid "Report a bug"
msgstr "Rapportera ett fel"
@@ -193,19 +297,22 @@ msgstr "Ny bild från urklipp"
msgid "Reload file"
msgstr "Uppdatera fil"
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/properties.py
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
msgid "Image properties"
msgstr "Bildegenskaper"
#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
-#: src/ui/win-menus.ui src/window.py
+#: src/ui/win-menus.ui src/saving_manager.py
msgid "Save"
msgstr "Spara"
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Save without transparency"
+msgstr "Spara utan transparens"
+
#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
-#: src/utilities.py
+#: src/saving_manager.py
msgid "Save as…"
msgstr "Spara som…"
@@ -214,7 +321,13 @@ msgstr "Spara som…"
msgid "Export as…"
msgstr "Exportera som…"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr "Kopiera till urklipp"
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
msgid "Print"
msgstr "Skriv ut"
@@ -299,20 +412,25 @@ msgid "Optimal Zoom"
msgstr "Optimal zoom"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom Out"
msgstr "Zooma ut"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Original Zoom"
msgstr "Ursprunglig zoom"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom In"
msgstr "Zooma in"
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
#: src/ui/app-menus.ui
msgid "Position"
msgstr "Position"
@@ -346,12 +464,6 @@ msgid "Refresh"
msgstr "Uppdatera"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
-#: src/preferences.py
-msgid "Show tools names"
-msgstr "Visa verktygsnamn"
-
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/shortcuts.ui
-#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
msgid "Fullscreen"
msgstr "Fullskärm"
@@ -384,50 +496,59 @@ msgstr "Växla färger"
msgid "Color application mode"
msgstr "Färgapplikationsläge"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Normal"
msgstr "Normal"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Other modes"
msgstr "Andra lägen"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Raw source color"
msgstr "Rå källfärg"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Highlight"
msgstr "Markera"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Difference"
msgstr "Skillnad"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
-msgid "Photo manipulation"
-msgstr "Fotomanipulation"
+msgid "Photo-oriented modes"
+msgstr "Fotoorienterade lägen"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Hue only"
msgstr "Endast nyans"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Saturation only"
msgstr "Endast mättnad"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Hue and saturation"
msgstr "Nyans och mättnad"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Luminosity only"
msgstr "Endast ljusstyrka"
@@ -437,17 +558,17 @@ msgid "Don't use the colors but…"
msgstr "Använd inte dessa färger, men…"
#. To translators: this is a verb
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Blur"
msgstr "Oskärpa"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Erase"
msgstr "Sudda"
-#: src/ui/app-menus.ui src/window.py
+#: src/ui/app-menus.ui
msgid "_Tools"
msgstr "_Verktyg"
@@ -455,6 +576,23 @@ msgstr "_Verktyg"
msgid "Previous tool"
msgstr "Föregående verktyg"
+#: src/ui/app-menus.ui
+msgid "Active tool"
+msgstr "Aktivt verktyg"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "Visa verktygsnamn"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr "Större bredd"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Smaller width"
+msgstr "Mindre bredd"
+
#: src/ui/app-menus.ui src/window.py
msgid "_Options"
msgstr "A_lternativ"
@@ -463,22 +601,28 @@ msgstr "A_lternativ"
msgid "_Help"
msgstr "_Hjälp"
+#. Context: open the index of all help pages
#: src/ui/app-menus.ui
msgid "Index"
msgstr "Index"
+#. Context: open the help page about general use of the app
#: src/ui/app-menus.ui
msgid "Basic help"
msgstr "Grundläggande hjälp"
+#. Context: open the help page about classic tools
#: src/ui/app-menus.ui
msgid "Help about tools"
msgstr "Hjälp om verktyg"
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
#: src/ui/app-menus.ui
msgid "Canvas and selection"
msgstr "Arbetsyta och markering"
+#. Context: open the help page about the selection
#: src/ui/app-menus.ui
msgid "Help about selection"
msgstr "Hjälp om markering"
@@ -492,21 +636,25 @@ msgstr "Om Drawing"
msgid "Open"
msgstr "Öppna"
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr "Dela bilden"
+
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Width"
msgstr "Bredd"
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Height"
msgstr "Höjd"
#: src/ui/new-image-dialog.ui
-msgid "Background color"
-msgstr "Bakgrundsfärg"
+msgid "Color"
+msgstr "Färg"
#: src/ui/new-image-dialog.ui
msgid "Use these settings by default"
@@ -516,6 +664,8 @@ msgstr "Använd dessa inställningar som standard"
msgid "100%"
msgstr "100%"
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
#: src/ui/properties.ui src/utilities.py
msgid "pixels"
msgstr "pixlar"
@@ -532,7 +682,7 @@ msgstr "tum"
msgid "Images"
msgstr "Bilder"
-#: src/ui/preferences.ui src/ui/shortcuts.ui
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "Tools"
msgstr "Verktyg"
@@ -551,30 +701,22 @@ msgid "Unselect"
msgstr "Avmarkera"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Crop"
msgstr "Beskär"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scale"
msgstr "Skala"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotate"
msgstr "Rotera"
-#. In this context, "Skew" is the name of the tool changing rectangles
-#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
-#. "Stretch/Skew" dialog.
-#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_skew.py
-msgid "Skew"
-msgstr "Snedställ"
-
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Filters"
msgstr "Filter"
@@ -584,8 +726,8 @@ msgid "Open As New Image"
msgstr "Öppna som ny bild"
#: src/ui/shortcuts.ui
-msgid "Keyboard"
-msgstr "Tangentbord"
+msgid "Keyboard Shortcuts"
+msgstr "Tangentbordsgenvägar"
#: src/ui/shortcuts.ui
msgid "General"
@@ -596,50 +738,40 @@ msgid "Main menu"
msgstr "Huvudmeny"
#: src/ui/shortcuts.ui
-msgid "Editing"
-msgstr "Redigering"
-
-#: src/ui/shortcuts.ui
msgid "Image"
msgstr "Bild"
-#: src/ui/shortcuts.ui
-msgid "Open a file"
-msgstr "Öppna en fil"
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "Öppna en bild"
#: src/ui/shortcuts.ui
msgid "Reload image from disk"
msgstr "Läs om bilden från disk"
-#: src/ui/shortcuts.ui
-msgid "Save as"
-msgstr "Spara som"
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "Spara bild som…"
#: src/ui/shortcuts.ui
msgid "Close the active image"
msgstr "Stäng den aktiva bilden"
#: src/ui/shortcuts.ui
-msgid "Options menu"
-msgstr "Alternativmeny"
+msgid "Open the tool options menu"
+msgstr "Öppna verktygsalternativmeny"
#: src/ui/shortcuts.ui
msgid "Back to previous tool"
msgstr "Tillbaka till föregående verktyg"
#: src/ui/shortcuts.ui
-msgid "Colors"
-msgstr "Färger"
+msgid "Apply a transformation"
+msgstr "Tillämpa en omvandling"
-#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Edit the main color (left click)"
-msgstr "Redigera den primära färgen (vänsterklick)"
-
-#. Label displayed in the keyboard shortcuts dialog
-#: src/ui/shortcuts.ui
-msgid "Edit the secondary color (right click)"
-msgstr "Redigera den sekundära färgen (högerklick)"
+msgid "History"
+msgstr "Historik"
#: src/ui/shortcuts.ui
msgid "Selection"
@@ -656,17 +788,25 @@ msgid "Import a file as the selection"
msgstr "Importera en bildfil till markeringen"
#: src/ui/shortcuts.ui
-msgid "Tabs"
-msgstr "Flikar"
+msgid "Colors"
+msgstr "Färger"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Enter fullscreen mode"
-msgstr "Växla till fullskärmsläge"
+msgid "Edit the main color (left click)"
+msgstr "Redigera den primära färgen (vänsterklick)"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Exit fullscreen mode"
-msgstr "Avsluta fullskärmsläget"
+msgid "Edit the secondary color (right click)"
+msgstr "Redigera den sekundära färgen (högerklick)"
+
+#: src/ui/shortcuts.ui
+msgid "Tabs"
+msgstr "Flikar"
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
#: src/ui/shortcuts.ui
msgid "Navigation"
msgstr "Navigation"
@@ -675,10 +815,26 @@ msgstr "Navigation"
msgid "Toggle the preview"
msgstr "Visa/Dölj förhandsgranskningen"
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr "Växla till fullskärmsläge"
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr "Avsluta fullskärmsläget"
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr "Pekgester"
+
#: src/ui/win-menus.ui
msgid "Troubleshoot selection"
msgstr "Felsök markering"
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr "Andra verktyg"
+
#: src/ui/window.ui
msgid "Error starting the application, please report this bug."
msgstr "Kunde inte starta programmet. Vänligen, rapportera felet."
@@ -693,6 +849,12 @@ msgstr "Ångra %s"
msgid "Redo %s"
msgstr "Upprepa %s"
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr "Ny pixbuf tom, ingen ändring tillämpas på %s"
+
#: src/image.py
msgid "Can't reload a never-saved file from the disk."
msgstr "Kan inte läsa om en fil som aldrig sparats på disk."
@@ -701,15 +863,15 @@ msgstr "Kan inte läsa om en fil som aldrig sparats på disk."
msgid "Unsaved file"
msgstr "Osparad fil"
-#: src/new_image_dialog.py src/utilities.py src/window.py
-#: src/tools/utilities_paths.py src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-crop.ui src/tools/ui/tool-filters.ui
-#: src/tools/ui/tool-rotate.ui src/tools/ui/tool-scale.ui
-#: src/tools/ui/tool-skew.ui
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
msgid "Cancel"
msgstr "Avbryt"
@@ -718,18 +880,22 @@ msgstr "Avbryt"
msgid "Create"
msgstr "Skapa"
+#. Description of a command line option
#: src/main.py
msgid "Show the app version"
msgstr "Visa programversion"
+#. Description of a command line option
#: src/main.py
msgid "Open a new window"
msgstr "Öppna ett nytt fönster"
+#. Description of a command line option
#: src/main.py
msgid "Open a new tab"
msgstr "Öppna en ny flik"
+#. Description of a command line option
#: src/main.py
msgid "Edit the clipboard content"
msgstr "Redigera urklippsinnehållet"
@@ -742,12 +908,14 @@ msgstr "Denna version är inte stabil!"
msgid "Report bugs or ideas"
msgstr "Rapportera fel eller idéer"
-#. To tranlators: "translate" this by your name, it will be displayed
-#. in the "about" dialog
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
#: src/main.py
msgid "translator-credits"
msgstr "Åke Engelbrektson"
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
#: src/main.py
msgid "GNOME's \"Art Libre\" icon set authors"
msgstr "GNOME's \"Art Libre\" ikonset-utvecklare"
@@ -761,17 +929,23 @@ msgid "Official webpage"
msgstr "Officiell webbplats"
#: src/main.py
+msgid "Error opening this file."
+msgstr "Kunde inte öppna den här filen."
+
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
#, python-format
-msgid "Error opening this file. Did you mean %s ?"
-msgstr "Kunde inte öppna den här filen. Menade du %s ?"
+msgid "Did you mean %s ?"
+msgstr "Menade du %s?"
-#. This displays the zoom level, %s will be replaced with a number, while
-#. %% is just the symbol '%'
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
#: src/minimap.py
#, python-format
msgid "%s%%"
msgstr "%s%%"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "New images"
msgstr "Nya bilder"
@@ -784,10 +958,16 @@ msgstr "Standardbredd"
msgid "Default height"
msgstr "Standardhöjd"
-#: src/preferences.py
-msgid "Default background"
-msgstr "Standardbakgrund"
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Default color"
+msgstr "Standardfärg"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Images saving"
msgstr "Spara bilder"
@@ -804,19 +984,23 @@ msgstr ""
"Vad vill du använda för att ersätta transparenta bildpunkter med, om du "
"sparar dina bilder i dessa format?"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "White"
msgstr "Vit"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "Black"
msgstr "Svart"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
msgid "Checkboard"
msgstr "Schackrutigt"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
msgid "Nothing"
msgstr "Inget"
@@ -829,13 +1013,15 @@ msgid "You can zoom with Ctrl+scrolling, or only scrolling."
msgstr "Du kan zooma med Ctrl+mushjul eller bara skrolla."
#: src/preferences.py
-msgid "Using keyboard shortcuts or touch gestures is possible too."
-msgstr "Tangentbordsgenvägar eller pekgester går också att använda."
+msgid "See the user help manual for explanations."
+msgstr "Se bruksanvisningen för användare för förklaringar."
#: src/preferences.py
msgid "Use 'Ctrl' to zoom"
msgstr "Använd \"Ctrl\" för att zooma"
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
#: src/preferences.py
msgid "Appearance"
msgstr "Utseende"
@@ -844,6 +1030,7 @@ msgstr "Utseende"
msgid "Use big icons"
msgstr "Använd stora ikoner"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Additional tools"
msgstr "Ytterligare verktyg"
@@ -856,31 +1043,51 @@ msgstr ""
"Dessa verktyg är inte lika tillförlitliga och användbara som de skall vara, "
"så alla är inte aktiverade som standard."
-#. In the meaning "a rubber eraser"
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
#: src/preferences.py src/tools/classic_tools/tool_eraser.py
msgid "Eraser"
msgstr "Suddgummi"
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
#: src/preferences.py src/tools/classic_tools/tool_highlight.py
msgid "Highlighter"
msgstr "Markeringspenna"
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr "Punkter"
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
#: src/preferences.py src/tools/selection_tools/select_free.py
msgid "Free selection"
msgstr "Fri markering"
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
#: src/preferences.py src/tools/selection_tools/select_color.py
msgid "Color selection"
msgstr "Färgval"
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
#: src/preferences.py src/tools/classic_tools/tool_picker.py
msgid "Color Picker"
msgstr "Färgväljare"
+#. Context: the name of a tool to fill an area of one color with an other
#: src/preferences.py src/tools/classic_tools/tool_paint.py
msgid "Paint"
msgstr "Måla"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Advanced options"
msgstr "Avancerade alternativ"
@@ -889,11 +1096,18 @@ msgstr "Avancerade alternativ"
msgid "Preview size"
msgstr "Storlek på förhandsgranskning"
+#. This label will not be displayed in the UI of stable versions
#: src/preferences.py
msgid "Development features"
msgstr "Utvecklingsfunktioner"
#: src/preferences.py
+msgid "Background color"
+msgstr "Bakgrundsfärg"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
msgid "Layout"
msgstr "Layout"
@@ -901,6 +1115,7 @@ msgstr "Layout"
msgid "The recommended value is \"Automatic\"."
msgstr "Det rekommenderade värdet är \"Automatisk\"."
+#. It has to match what's written in the previous string.
#: src/preferences.py
msgid "Automatic"
msgstr "Automatisk"
@@ -920,7 +1135,8 @@ msgid "Legacy"
msgstr "Standard"
#. "Legacy" is about the window layout, it means menubar+toolbar, you
-#. can translate it like if it was "Traditional"
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Legacy (symbolic icons)"
msgstr "Standard (symboliska ikoner)"
@@ -933,6 +1149,7 @@ msgstr "Endast menyfält"
msgid "Toolbar only"
msgstr "Endast verktygsfält"
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Toolbar only (symbolic icons)"
msgstr "Endast verktygsfält (symboliska ikoner)"
@@ -952,10 +1169,12 @@ msgstr "%s cm"
msgid "%s in"
msgstr "%s in"
+#. Context: the path of the edited file
#: src/properties.py
msgid "Path"
msgstr "Sökväg"
+#. Context: the file format of the edited file
#: src/properties.py
msgid "Format"
msgstr "Format"
@@ -964,10 +1183,69 @@ msgstr "Format"
msgid "Colorspace"
msgstr "Färgrymd"
+#. Context: an invalid colorspace format
#: src/properties.py
msgid "Invalid format"
msgstr "Ogiltigt format"
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "Kunde inte spara %s"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "Namnlös"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "denna bild"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "Kassera"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "Det finns osparade ändringar i %s."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+"En del av bilden är markerad och bildpunkterna under markeringen är tomma."
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr "Ändringar från det aktuella verktyget har inte tillämpats."
+
+#: src/saving_manager.py
+msgid "Do you want to save anyway?"
+msgstr "Vill du spara i alla fall?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr "Ersätt"
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "Detta filformat stödjer inte transparenta färger."
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr "Du kan spara bilden som en PNG-fil, eller ersätta transparens med:"
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "Ersätt transparens med:"
+
#: src/utilities.py
msgid "Transparent"
msgstr "Transparent"
@@ -989,6 +1267,9 @@ msgstr "Orange"
msgid "Brown"
msgstr "Brun"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
#: src/utilities.py
msgid "Probably brown"
msgstr "Troligen brun"
@@ -1021,31 +1302,23 @@ msgstr "Lila"
msgid "Cyan"
msgstr "Cyan"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
#: src/utilities.py
-msgid "Probably turquoise"
+msgid "Probably teal"
msgstr "Troligen turkos"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
#: src/utilities.py
msgid "Unknown color name"
msgstr "Okänt färgnamn"
#: src/utilities.py
-msgid "Replace"
-msgstr "Ersätt"
-
-#: src/utilities.py
-msgid "This file format doesn't support transparent colors."
-msgstr "Detta filformat stödjer inte transparenta färger."
-
-#: src/utilities.py
-msgid "You can save the image as a PNG file, or replace transparency with:"
-msgstr "Du kan spara bilden som en PNG-fil, eller ersätta transparens med:"
-
-#: src/utilities.py
-msgid "Replace transparency with:"
-msgstr "Ersätt transparens med:"
-
-#: src/utilities.py
msgid "All pictures"
msgstr "Alla bilder"
@@ -1061,28 +1334,49 @@ msgstr "JPEG-bilder"
msgid "BMP images"
msgstr "BMP-bilder"
+#. To translators: it appears in tooltips over numerical inputs
#: src/utilities.py
msgid "percents"
msgstr "procent"
-#. To translators: it's the angle measure unit
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
#: src/utilities.py
msgid "degrees"
msgstr "grader"
+#: src/utilities.py
+#, python-format
+msgid "%s isn't an image."
+msgstr "%s är ingen bild."
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr "WEBP-bilder kan inte läsas av det här programmet."
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr "Trots namnet, så är %s en WEBP-fil."
+
+#. Context: an error message
#: src/window.py
#, python-format
msgid "Failed to load tool: %s"
msgstr "Kunde inte läsa in verktyg: %s"
#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr "Urklipp innehåller ingen bild."
+
+#: src/window.py
msgid "Modifications will take effect in the next new window."
msgstr "Ändringarna tillämpas i nästa nya fönster."
#: src/window.py src/tools/abstract_tool.py
#: src/optionsbars/classic/optionsbar-classic.ui
#: src/tools/classic_tools/tool_eraser.py
-#: src/tools/classic_tools/tool_highlight.py
msgid "No options"
msgstr "Inga alternativ"
@@ -1092,6 +1386,11 @@ msgstr "Öppna bilder"
#: src/window.py
#, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "Fel: Ogiltig panel för \"%s\". Rapportera felet."
+
+#: src/window.py
+#, python-format
msgid "Loading %s"
msgstr "Läser in %s"
@@ -1104,54 +1403,36 @@ msgstr "Ny flik"
msgid "Discard changes"
msgstr "Kassera ändringar"
-#: src/window.py
-#, python-format
-msgid "There are unsaved modifications to %s."
-msgstr "Det finns osparade ändringar i %s."
-
+#. Context: %s will be replaced by the name of a file.
#: src/window.py
#, python-format
msgid "Where do you want to open %s?"
msgstr "Var vill du öppna %s?"
-#: src/window.py
-msgid "Open a picture"
-msgstr "Öppna en bild"
-
#. Context for translation:
#. "What do you want to do with *these files*?"
#: src/window.py
msgid "these files"
msgstr "dessa filer"
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
#: src/window.py
#, python-format
msgid "What do you want to do with %s?"
msgstr "Vad vill du göra med %s?"
-#. else the exception was raised because an actual error occured, or
-#. the user clicked on "cancel"
#: src/window.py
-#, python-format
-msgid "Failed to save %s"
-msgstr "Kunde inte spara %s"
+msgid "Image copied to clipboard"
+msgstr "Bilden kopierad till urklipp"
#: src/window.py
-msgid "Untitled"
-msgstr "Namnlös"
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr "Bilden har ändrats på disk, vill du uppdatera den?"
-#. Context: the sentence "There are unsaved modifications to %s."
#: src/window.py
-msgid "this picture"
-msgstr "denna bild"
-
-#: src/window.py
-msgid "Discard"
-msgstr "Kassera"
-
-#: src/window.py
-msgid "Save picture as…"
-msgstr "Spara bild som…"
+msgid "Reload"
+msgstr "Uppdatera"
#: src/window.py
msgid "Import a picture"
@@ -1161,6 +1442,12 @@ msgstr "Importera en bild"
msgid "Required tool is not available"
msgstr "Det erforderliga verktyget är inte tillgängligt"
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr "Kan inte starta åtgärden: Fel verktygs-ID (förväntade {0}, fick {1})"
+
#: src/tools/utilities_paths.py
msgid "Continue"
msgstr "Fortsätt"
@@ -1177,13 +1464,15 @@ msgstr "Denna algoritm kanske inte kan hantera det önskade området."
msgid "Do you want to abort the operation, or to let the tool struggle ?"
msgstr "Vill du avbryta åtgärden eller låta verktyget kämpa?"
+#. Context: fill a shape with the color of the left click
#: src/optionsbars/classic/optionsbar_color_popover.py
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Main color"
msgstr "Primär färg"
-#. if state_as_string == 'secondary':
+#. Context: fill a shape with the color of the right click
#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Secondary color"
msgstr "Sekundär färg"
@@ -1193,8 +1482,8 @@ msgid "Tool size"
msgstr "Verktygsstorlek"
#: src/optionsbars/classic/optionsbar-classic.ui
-#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-filters.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
msgid "Preview"
msgstr "Förhandsgranska"
@@ -1215,160 +1504,174 @@ msgid "Use this editor by default"
msgstr "Använd denna redigerare som standard"
#: src/optionsbars/selection/optionsbar-selection.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "More actions"
msgstr "Fler åtgärder"
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
msgid "Apply"
msgstr "Tillämpa"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "Fler alternativ"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr "Expandera med…"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "Transparens"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Select a filter…"
msgstr "Välj ett filter…"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Saturation"
msgstr "Mättnad"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blur radius"
msgstr "Oskärperadie"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-msgid "Transparency"
-msgstr "Transparens"
-
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Change saturation"
msgstr "Ändra mättnad"
#. Context: a filter adding like a light veil on the image
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Veil"
msgstr "Slöja"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
msgid "Add transparency"
msgstr "Lägg till transparens"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Invert colors"
msgstr "Invertera färger"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blurring"
msgstr "Oskärpa"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Fast blur"
msgstr "Snabb oskärpa"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Slow blur"
msgstr "Långsam oskärpa"
#. Context: a filter that censors the image with some kind of tiles
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-msgid "Pixelisation"
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
msgstr "Pixelisering"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Blur direction"
msgstr "Oskärpans riktning"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Horizontal"
msgstr "Horisontellt"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Vertical"
msgstr "Vertikalt"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "No direction"
msgstr "Ingen riktning"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle (degrees)"
msgstr "Vinkel (grader)"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle"
msgstr "Vinkel"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate left"
msgstr "Rotera vänster"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate right"
msgstr "Rotera höger"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip horizontally"
msgstr "Vänd horisontellt"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip vertically"
msgstr "Vänd vertikalt"
-#: src/optionsbars/canvas/optionsbar-scale.ui
-msgid "More options"
-msgstr "Fler alternativ"
-
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Keep proportions"
msgstr "Bevara proportioner"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Always [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Always"
msgstr "Alltid"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "[Keep proportions only] when scaling from corners"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "When scaling from corners"
msgstr "Vid skalning från hörnen"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Never [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Never"
msgstr "Aldrig"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Horizontal deformation"
msgstr "Horisontell deformation"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Vertical deformation"
msgstr "Vertikal deformation"
+#: src/tools/ui/selection.ui
+msgid "Transform"
+msgstr "Omvandla"
+
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
msgid "Line shape"
msgstr "Linjeform"
+#. Context: this is the name of a line shape
#. Default values
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
@@ -1376,80 +1679,162 @@ msgstr "Linjeform"
msgid "Round"
msgstr "Rund"
+#. Context: this is the name of a line shape
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Thin"
-msgstr "Tunn"
-
-#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
msgid "Square"
msgstr "Kvadrat"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "No arrow"
+msgstr "Ingen pil"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr "Enkel pil"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Double arrow"
+msgstr "Dubbelpil"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-msgid "Use dashes"
-msgstr "Streckad"
+msgid "No dashes"
+msgstr "Inga streck"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
-msgid "Arrow"
-msgstr "Pil"
+#: src/tools/ui/tool-pencil.ui
+msgid "Simple dashes"
+msgstr "Enkla streck"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-shape.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Long dashes"
+msgstr "Långa streck"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Short dashes"
+msgstr "Korta streck"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr "Varierande streck"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
msgid "Antialiasing"
msgstr "Kantutjämning"
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Dark text on light background"
+msgstr "Mörk text på ljus bakgrund"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr "Ljus text på mörk bakgrund"
+
#: src/tools/ui/tool-line.ui
msgid "Color gradient"
msgstr "Färgtoning"
+#. Context: title for the list of the possible painting algorithms.
#: src/tools/ui/tool-paint.ui
msgid "Behavior"
msgstr "Beteende"
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
#: src/tools/ui/tool-paint.ui
msgid "Encircle and fill"
msgstr "Ringa in och fyll"
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
#: src/tools/ui/tool-paint.ui
msgid "Erase and replace"
msgstr "Sudda och ersätt"
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
#: src/tools/ui/tool-paint.ui
-msgid "Clipping"
-msgstr "Klippning"
+msgid "Entire image"
+msgstr "Hela bilden"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rectangle"
-msgstr "Rektangel"
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+msgid "Remove color"
+msgstr "Ta bort färg"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rounded rectangle"
-msgstr "Rundad rektangel"
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr "Punkttyp"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Oval"
-msgstr "Oval"
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "Cirkel"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr "Kryss"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr "X-formade kors"
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr "Inkludera ett nummer"
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr "Nästa nummer"
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr "Återställ nummer"
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr "Minska nummer"
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr "Öka nummer"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Polygon"
-msgstr "Polygon"
+msgid "Solid outline"
+msgstr "Solid kontur"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Free shape"
-msgstr "Fri figur"
+msgid "Dashed outline"
+msgstr "Streckad kontur"
+#. if state_as_string == 'none':
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Circle"
-msgstr "Cirkel"
+msgid "No outline"
+msgstr "Ingen kontur"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr "Fyllning"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Empty outline"
-msgstr "Tom disposition"
+msgid "Empty shape"
+msgstr "Tom figur"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Horizontal gradient"
@@ -1463,6 +1848,26 @@ msgstr "Vertikal toning"
msgid "Radial gradient"
msgstr "Radiell toning"
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "Rektangel"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr "Rundad rektangel"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "Oval"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "Polygon"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "Fri figur"
+
#: src/tools/ui/tool-shape.ui
msgid "Close shape"
msgstr "Stäng figur"
@@ -1476,6 +1881,10 @@ msgid "Font"
msgstr "Teckensnitt"
#: src/tools/ui/tool-text.ui
+msgid "Select a font…"
+msgstr "Välj ett teckensnitt…"
+
+#: src/tools/ui/tool-text.ui
msgid "Italic"
msgstr "Kursiv"
@@ -1483,34 +1892,31 @@ msgstr "Kursiv"
msgid "Bold"
msgstr "Fet"
+#. Context: the types of background behind the inserted text
#: src/tools/ui/tool-text.ui
msgid "Background"
msgstr "Bakgrund"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "No background"
msgstr "Ingen bakgrund"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Shadow"
msgstr "Skugga"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Outline"
msgstr "Kontur"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Rectangle background"
msgstr "Rektangelbakgrund"
-#: src/tools/ui/selection.ui
-msgid "Edit"
-msgstr "Redigera"
-
-#: src/tools/ui/selection.ui
-msgid "Flip"
-msgstr "Vänd"
-
#: src/tools/classic_tools/tool_arc.py
msgid "Curve"
msgstr "Kurva"
@@ -1524,10 +1930,18 @@ msgid "Dashed arrow"
msgstr "Streckad pil"
#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "Pil"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
#: src/tools/classic_tools/tool_pencil.py
msgid "Dashed"
msgstr "Streckad"
+#: src/tools/classic_tools/tool_highlight.py
+msgid "Highlighter options"
+msgstr "Markeringsalternativ"
+
#: src/tools/classic_tools/tool_line.py
msgid "Line"
msgstr "Linje"
@@ -1544,6 +1958,10 @@ msgstr "Målningsalternativ"
msgid "Click on an area to replace its color by transparency"
msgstr "Klicka på ett område för att byta ut färgen mot transparens"
+#: src/tools/classic_tools/tool_paint.py
+msgid "Click on the canvas to entirely paint it"
+msgstr "Klicka på arbetsytan för att färgsätta den."
+
#: src/tools/classic_tools/tool_pencil.py
msgid "Pencil"
msgstr "Penna"
@@ -1552,15 +1970,20 @@ msgstr "Penna"
msgid "Pencil options"
msgstr "Pennalternativ"
+#: src/tools/classic_tools/tool_points.py
+msgid "Points options"
+msgstr "Punktalternativ"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr "Nästa nummer: %s"
+
#: src/tools/classic_tools/tool_shape.py
msgid "Shape"
msgstr "Figur"
#: src/tools/classic_tools/tool_shape.py
-msgid "Empty"
-msgstr "Tom"
-
-#: src/tools/classic_tools/tool_shape.py
msgid "Shape options"
msgstr "Figuralternativ"
@@ -1572,6 +1995,7 @@ msgstr "Klicka på figurens första punkt för att stänga den."
msgid "Text"
msgstr "Text"
+#. XXX use "text options" instead
#: src/tools/classic_tools/tool_text.py
msgid "Font options"
msgstr "Teckensnittsalternativ"
@@ -1588,40 +2012,42 @@ msgstr "Markera ett område eller högerklicka på arbetsytan"
msgid "Rectangle selection"
msgstr "Rektangelmarkering"
-#: src/tools/canvas_tools/abstract_canvas_tool.py
+#: src/tools/transform_tools/abstract_transform_tool.py
msgid "Error: invalid values"
msgstr "Fel: Ogiltiga värden"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the selection"
msgstr "Beskär markeringen"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the canvas"
msgstr "Beskär arbetsytan"
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Click on the image to preview the selected filter"
msgstr "Klicka på bilden för att granska det valda filtret"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the selection"
msgstr "Roterar markering"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the canvas"
msgstr "Roterar arbetsytan"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the selection"
msgstr "Skalar markering"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the canvas"
msgstr "Skalar arbetsytan"
-#~ msgid "Classic"
-#~ msgstr "Klassisk"
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr "Snedställ"
-#~ msgid "Close"
-#~ msgstr "Stäng"
diff --git a/po/tr.po b/po/tr.po
index a486b9e1..331ecf0d 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: drawing\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-05-15 19:07+0200\n"
-"PO-Revision-Date: 2020-05-19 01:04+0300\n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
+"PO-Revision-Date: 2020-08-26 18:01+0300\n"
"Last-Translator: Serdar Sağlam <teknomobil@yandex.com>\n"
"Language-Team: Serdar Sağlam <teknomobil@yandex.com>\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.3\n"
+"X-Generator: Poedit 2.4.1\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: data/com.github.maoschanz.drawing.desktop.in
@@ -79,6 +79,75 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr ""
+"Sürüm 0.6.4, birkaç küçük hata düzeltmesi ve çeşitli yeni çeviriler "
+"içermektedir."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr ""
+"Sürüm 0.6.2, birkaç küçük hata düzeltmesi ve çeşitli yeni çeviriler "
+"içermektedir."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"Version 0.6 is a major update, with various important changes. The app is "
"more robust and has more tools:"
msgstr ""
@@ -109,8 +178,16 @@ msgstr ""
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+"Metin aracı artık çoğu sistem yazı tipini kullanarak yazabilir, böylece "
+"karmaşık karakterler kullanılabilir (örneğin, Asya karakterleri)."
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
-"with several types of blur, color inversion, pixelisation, saturation and "
+"with several types of blur, color inversion, pixelization, saturation and "
"transparency."
msgstr ""
"'Doygunluk' aracı, çeşitli bulanıklaştırma türleri, renk inversiyonu, "
@@ -130,24 +207,37 @@ msgstr ""
"tekerleğini kullanarak görüntü üzerinde yakınlaştırma (veya uzaklaştırma) "
"yeteneğidir."
-#: data/com.github.maoschanz.drawing.appdata.xml.in
-msgid ""
-"Version 0.4.8 features several minor bug fixes, and various new translations."
-msgstr ""
-"Sürüm 0.4.8, birkaç küçük hata düzeltmesi ve çeşitli yeni çeviriler "
-"içermektedir."
-
#. This is just my name, do not translate it.
#: data/com.github.maoschanz.drawing.appdata.xml.in
msgid "Romain F. T."
msgstr "Romain F. T."
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr ""
+
#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
#: src/preferences.py
msgid "Preferences"
msgstr "Tercihler"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
msgid "Report a bug"
msgstr "Hata bildir"
@@ -196,19 +286,23 @@ msgstr "Panodan Yeni Görüntü"
msgid "Reload file"
msgstr "Yeniden yükle"
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/properties.py
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
msgid "Image properties"
msgstr "Görüntü özellikleri"
#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
-#: src/ui/win-menus.ui src/window.py
+#: src/ui/win-menus.ui src/saving_manager.py
msgid "Save"
msgstr "Kaydet"
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+#, fuzzy
+msgid "Save without transparency"
+msgstr "Saydamlık ekle"
+
#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
-#: src/utilities.py
+#: src/saving_manager.py
msgid "Save as…"
msgstr "Farklı kaydet…"
@@ -217,7 +311,13 @@ msgstr "Farklı kaydet…"
msgid "Export as…"
msgstr "Farklı aktar…"
-#: src/ui/app-menus.ui src/ui/win-menus.ui
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
msgid "Print"
msgstr "Yazdır"
@@ -302,20 +402,25 @@ msgid "Optimal Zoom"
msgstr "İdeal Yakınlık"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom Out"
msgstr "Uzaklaştır"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Original Zoom"
msgstr "Orijinal Yakınlık"
#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
-#: src/ui/toolbar-symbolic.ui src/optionsbars/canvas/optionsbar-scale.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Zoom In"
msgstr "Yakınlaştır"
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
#: src/ui/app-menus.ui
msgid "Position"
msgstr "Konum"
@@ -349,12 +454,6 @@ msgid "Refresh"
msgstr "Yenile"
#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
-#: src/preferences.py
-msgid "Show tools names"
-msgstr "Araç adlarını göster"
-
-#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/shortcuts.ui
-#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
msgid "Fullscreen"
msgstr "Tam ekran"
@@ -387,50 +486,59 @@ msgstr "Renkleri değiş"
msgid "Color application mode"
msgstr "Renk uygulama kipi"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Normal"
msgstr "Normal"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Other modes"
msgstr "Diğer kipler"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Raw source color"
msgstr "Ham kaynak rengi"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Highlight"
msgstr "Vurgu"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Difference"
msgstr "Farklılık"
+#. Context: possible ways to apply the color to the canvas
#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
-msgid "Photo manipulation"
-msgstr "Fotoğraf hilesi"
+msgid "Photo-oriented modes"
+msgstr "Fotoğraf odaklı kipler"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Hue only"
msgstr "Sadece ton"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Saturation only"
msgstr "Sadece doygunluk"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Hue and saturation"
msgstr "Ton ve doygunluk"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Luminosity only"
msgstr "Sadece parlaklık"
@@ -440,17 +548,17 @@ msgid "Don't use the colors but…"
msgstr "Renkleri kullanmayın ama…"
#. To translators: this is a verb
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Blur"
msgstr "Bulanıklık"
-#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_classic.py
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
#: src/optionsbars/classic/optionsbar-color-popover.ui
msgid "Erase"
msgstr "Silgi"
-#: src/ui/app-menus.ui src/window.py
+#: src/ui/app-menus.ui
msgid "_Tools"
msgstr "_Araçlar"
@@ -458,6 +566,25 @@ msgstr "_Araçlar"
msgid "Previous tool"
msgstr "Önceki araç"
+#: src/ui/app-menus.ui
+#, fuzzy
+msgid "Active tool"
+msgstr "Diğer araçlar"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "Araç adlarını göster"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+#, fuzzy
+msgid "Smaller width"
+msgstr "Öntanımlı genişlik"
+
#: src/ui/app-menus.ui src/window.py
msgid "_Options"
msgstr "_Seçenekler"
@@ -466,22 +593,28 @@ msgstr "_Seçenekler"
msgid "_Help"
msgstr "_Yardım"
+#. Context: open the index of all help pages
#: src/ui/app-menus.ui
msgid "Index"
msgstr "İndeks"
+#. Context: open the help page about general use of the app
#: src/ui/app-menus.ui
msgid "Basic help"
msgstr "Basit yardım"
+#. Context: open the help page about classic tools
#: src/ui/app-menus.ui
msgid "Help about tools"
msgstr "Araçlar hakkında yardım"
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
#: src/ui/app-menus.ui
msgid "Canvas and selection"
msgstr "Tuval ve seçim"
+#. Context: open the help page about the selection
#: src/ui/app-menus.ui
msgid "Help about selection"
msgstr "Seçim hakkında yardım"
@@ -495,21 +628,25 @@ msgstr "Çizim Hakkında"
msgid "Open"
msgstr "Aç"
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr ""
+
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Width"
msgstr "Genişlik"
#: src/ui/new-image-dialog.ui src/ui/properties.ui
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
msgid "Height"
msgstr "Yükseklik"
#: src/ui/new-image-dialog.ui
-msgid "Background color"
-msgstr "Arkaplan rengi"
+msgid "Color"
+msgstr "Renk"
#: src/ui/new-image-dialog.ui
msgid "Use these settings by default"
@@ -519,6 +656,8 @@ msgstr "Bu ayarları varsayılan olarak kullan"
msgid "100%"
msgstr "%100"
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
#: src/ui/properties.ui src/utilities.py
msgid "pixels"
msgstr "piksel"
@@ -535,7 +674,7 @@ msgstr "inç"
msgid "Images"
msgstr "Görüntüler"
-#: src/ui/preferences.ui src/ui/shortcuts.ui
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
msgid "Tools"
msgstr "Araçlar"
@@ -554,30 +693,22 @@ msgid "Unselect"
msgstr "Seçimi kaldır"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Crop"
msgstr "Kırp"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scale"
msgstr "Ölçek"
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotate"
msgstr "Döndür"
-#. In this context, "Skew" is the name of the tool changing rectangles
-#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
-#. "Stretch/Skew" dialog.
-#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_skew.py
-msgid "Skew"
-msgstr "Eğrilik"
-
#: src/ui/selection-manager.ui src/tools/ui/selection.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Filters"
msgstr "Süzgeçler"
@@ -587,8 +718,8 @@ msgid "Open As New Image"
msgstr "Yeni Görüntü Olarak Aç"
#: src/ui/shortcuts.ui
-msgid "Keyboard"
-msgstr "Klavye"
+msgid "Keyboard Shortcuts"
+msgstr "Klavye Kısayolları"
#: src/ui/shortcuts.ui
msgid "General"
@@ -599,31 +730,28 @@ msgid "Main menu"
msgstr "Ana menü"
#: src/ui/shortcuts.ui
-msgid "Editing"
-msgstr "Düzenleniyor"
-
-#: src/ui/shortcuts.ui
msgid "Image"
msgstr "Görüntü"
-#: src/ui/shortcuts.ui
-msgid "Open a file"
-msgstr "Bir dosya aç"
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "Bir resim aç"
#: src/ui/shortcuts.ui
msgid "Reload image from disk"
msgstr "Resmi diskten yeniden yükle"
-#: src/ui/shortcuts.ui
-msgid "Save as"
-msgstr "Farklı kaydet"
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "Resmi farklı kaydet…"
#: src/ui/shortcuts.ui
msgid "Close the active image"
msgstr "Aktif resmi kapat"
#: src/ui/shortcuts.ui
-msgid "Options menu"
+#, fuzzy
+msgid "Open the tool options menu"
msgstr "Seçenekler menüsü"
#: src/ui/shortcuts.ui
@@ -631,18 +759,12 @@ msgid "Back to previous tool"
msgstr "Önceki araca dön"
#: src/ui/shortcuts.ui
-msgid "Colors"
-msgstr "Renkler"
-
-#. Label displayed in the keyboard shortcuts dialog
-#: src/ui/shortcuts.ui
-msgid "Edit the main color (left click)"
-msgstr "Ana rengi düzenle (sol tıkla)"
+msgid "Apply a transformation"
+msgstr ""
-#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Edit the secondary color (right click)"
-msgstr "İkincil rengi düzenle (sağ tıkla)"
+msgid "History"
+msgstr "Geçmiş"
#: src/ui/shortcuts.ui
msgid "Selection"
@@ -659,18 +781,26 @@ msgid "Import a file as the selection"
msgstr "Bir dosyayı seçim olarak al"
#: src/ui/shortcuts.ui
-msgid "Tabs"
-msgstr "Sekmeler"
+msgid "Colors"
+msgstr "Renkler"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Enter fullscreen mode"
-msgstr "Tam ekran kipine gir"
+msgid "Edit the main color (left click)"
+msgstr "Ana rengi düzenle (sol tıkla)"
+#. Label displayed in the keyboard shortcuts dialog
#: src/ui/shortcuts.ui
-msgid "Exit fullscreen mode"
-msgstr "Tam ekran kipinden çık"
+msgid "Edit the secondary color (right click)"
+msgstr "İkincil rengi düzenle (sağ tıkla)"
#: src/ui/shortcuts.ui
+msgid "Tabs"
+msgstr "Sekmeler"
+
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
+#: src/ui/shortcuts.ui
msgid "Navigation"
msgstr "Gezinti"
@@ -678,10 +808,26 @@ msgstr "Gezinti"
msgid "Toggle the preview"
msgstr "Önizlemeyi değiştir"
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr "Tam ekran kipine gir"
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr "Tam ekran kipinden çık"
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr "Dokunmatik hareketleri"
+
#: src/ui/win-menus.ui
msgid "Troubleshoot selection"
msgstr "Seçimle ilgili sorunları giderme"
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr "Diğer araçlar"
+
#: src/ui/window.ui
msgid "Error starting the application, please report this bug."
msgstr "Uygulama açılırken hata oldu, lütfen hatayı rapor edin."
@@ -696,6 +842,12 @@ msgstr "Geri al %s"
msgid "Redo %s"
msgstr "Yinele %s"
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr ""
+
#: src/image.py
msgid "Can't reload a never-saved file from the disk."
msgstr "Hiç kaydedilmemiş bir dosya diskten yeniden yüklenemiyor."
@@ -704,15 +856,15 @@ msgstr "Hiç kaydedilmemiş bir dosya diskten yeniden yüklenemiyor."
msgid "Unsaved file"
msgstr "Kaydedilmemiş dosya"
-#: src/new_image_dialog.py src/utilities.py src/window.py
-#: src/tools/utilities_paths.py src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-crop.ui src/tools/ui/tool-filters.ui
-#: src/tools/ui/tool-rotate.ui src/tools/ui/tool-scale.ui
-#: src/tools/ui/tool-skew.ui
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
msgid "Cancel"
msgstr "İptal"
@@ -721,18 +873,22 @@ msgstr "İptal"
msgid "Create"
msgstr "Oluştur"
+#. Description of a command line option
#: src/main.py
msgid "Show the app version"
msgstr "Uygulama sürümünü göster"
+#. Description of a command line option
#: src/main.py
msgid "Open a new window"
msgstr "Yeni bir pencere aç"
+#. Description of a command line option
#: src/main.py
msgid "Open a new tab"
msgstr "Yeni bir sekmede aç"
+#. Description of a command line option
#: src/main.py
msgid "Edit the clipboard content"
msgstr "Pano içeriğini düzenle"
@@ -745,12 +901,14 @@ msgstr "Bu sürüm kararlı değil!"
msgid "Report bugs or ideas"
msgstr "Hata veya fikir bildirin"
-#. To tranlators: "translate" this by your name, it will be displayed
-#. in the "about" dialog
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
#: src/main.py
msgid "translator-credits"
msgstr "Serdar Sağlam <teknomobil@yandex.com>"
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
#: src/main.py
msgid "GNOME's \"Art Libre\" icon set authors"
msgstr "GNOME'un \"Art Libre\" simge seti yazarları"
@@ -764,17 +922,24 @@ msgid "Official webpage"
msgstr "Resmi sayfa"
#: src/main.py
-#, python-format
-msgid "Error opening this file. Did you mean %s ?"
+#, fuzzy
+msgid "Error opening this file."
msgstr "Bu dosyayı açarken hata. %s demek mi istediniz?"
-#. This displays the zoom level, %s will be replaced with a number, while
-#. %% is just the symbol '%'
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr ""
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
#: src/minimap.py
#, python-format
msgid "%s%%"
msgstr "%s%%"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "New images"
msgstr "Yeni görüntüler"
@@ -787,10 +952,16 @@ msgstr "Öntanımlı genişlik"
msgid "Default height"
msgstr "Öntanımlı yükseklik"
-#: src/preferences.py
-msgid "Default background"
-msgstr "Öntanımlı arka plan"
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Default color"
+msgstr "Öntanımlı renk"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Images saving"
msgstr "Görüntüler kayediliyor"
@@ -807,19 +978,23 @@ msgstr ""
"Resimlerinizi bu biçimlerde kaydederseniz, saydam pikselleri değiştirmek "
"için ne kullanmak istersiniz?"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "White"
msgstr "Beyaz"
-#: src/preferences.py src/utilities.py
+#: src/preferences.py src/saving_manager.py src/utilities.py
msgid "Black"
msgstr "Siyah"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
msgid "Checkboard"
msgstr "Panoya yaz"
-#: src/preferences.py src/utilities.py
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
msgid "Nothing"
msgstr "Hiç"
@@ -833,14 +1008,15 @@ msgstr ""
"Ctrl+kaydırma ile veya yalnızca kaydırma ile yakınlaştırma yapabilirsiniz."
#: src/preferences.py
-msgid "Using keyboard shortcuts or touch gestures is possible too."
-msgstr ""
-"Klavye kısayollarını veya dokunma hareketlerini kullanmak da mümkündür."
+msgid "See the user help manual for explanations."
+msgstr "Açıklamalar için kullanıcı yardım kılavuzuna bakın."
#: src/preferences.py
msgid "Use 'Ctrl' to zoom"
msgstr "Yakınlaştırma için 'Ctrl' tuşunu kullan"
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
#: src/preferences.py
msgid "Appearance"
msgstr "Görünüm"
@@ -849,6 +1025,7 @@ msgstr "Görünüm"
msgid "Use big icons"
msgstr "Büyük simgeler kullan"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Additional tools"
msgstr "Ek araçlar"
@@ -861,31 +1038,51 @@ msgstr ""
"Bu araçlar olması gerektiği kadar güvenilir ve kullanışlı değildir, bu "
"nedenle hepsi varsayılan olarak etkin değildir."
-#. In the meaning "a rubber eraser"
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
#: src/preferences.py src/tools/classic_tools/tool_eraser.py
msgid "Eraser"
msgstr "Silgi"
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
#: src/preferences.py src/tools/classic_tools/tool_highlight.py
msgid "Highlighter"
msgstr "İşaretleyici"
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr ""
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
#: src/preferences.py src/tools/selection_tools/select_free.py
msgid "Free selection"
msgstr "Serbest seçim"
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
#: src/preferences.py src/tools/selection_tools/select_color.py
msgid "Color selection"
msgstr "Renk seçimi"
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
#: src/preferences.py src/tools/classic_tools/tool_picker.py
msgid "Color Picker"
msgstr "Renk Seçici"
+#. Context: the name of a tool to fill an area of one color with an other
#: src/preferences.py src/tools/classic_tools/tool_paint.py
msgid "Paint"
msgstr "Boya"
+#. Context: title of a section of the preferences
#: src/preferences.py
msgid "Advanced options"
msgstr "Gelişmiş seçenekler"
@@ -894,11 +1091,18 @@ msgstr "Gelişmiş seçenekler"
msgid "Preview size"
msgstr "Önizleme boyutu"
+#. This label will not be displayed in the UI of stable versions
#: src/preferences.py
msgid "Development features"
msgstr "Geliştirilmiş özellikler"
#: src/preferences.py
+msgid "Background color"
+msgstr "Arkaplan rengi"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
msgid "Layout"
msgstr "Düzen"
@@ -906,6 +1110,7 @@ msgstr "Düzen"
msgid "The recommended value is \"Automatic\"."
msgstr "Önerilen değer \"Otomatik\" tir."
+#. It has to match what's written in the previous string.
#: src/preferences.py
msgid "Automatic"
msgstr "Otomatik"
@@ -925,7 +1130,8 @@ msgid "Legacy"
msgstr "Eski"
#. "Legacy" is about the window layout, it means menubar+toolbar, you
-#. can translate it like if it was "Traditional"
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Legacy (symbolic icons)"
msgstr "Eski (sembolik simgeler)"
@@ -938,6 +1144,7 @@ msgstr "Sadece menü çubuğu"
msgid "Toolbar only"
msgstr "Sadece araç çubuğu"
+#. Symbolic icons are monochrome icons.
#: src/preferences.py
msgid "Toolbar only (symbolic icons)"
msgstr "Sadece araç çubuğu (sembolik simgeler)"
@@ -957,10 +1164,12 @@ msgstr "%s cm"
msgid "%s in"
msgstr "%s inç"
+#. Context: the path of the edited file
#: src/properties.py
msgid "Path"
msgstr "Yol"
+#. Context: the file format of the edited file
#: src/properties.py
msgid "Format"
msgstr "Biçim"
@@ -969,10 +1178,71 @@ msgstr "Biçim"
msgid "Colorspace"
msgstr "Renk boşluğu"
+#. Context: an invalid colorspace format
#: src/properties.py
msgid "Invalid format"
msgstr "Geçersiz biçim"
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "Kaydedilemedi %s"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "Başlıksız"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "bu resim"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "Yoksay"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "%s üstünde kaydedilmemiş değişiklikler."
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr ""
+
+#: src/saving_manager.py
+#, fuzzy
+msgid "Do you want to save anyway?"
+msgstr "Nerede açmak istiyorsunuz %s?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr "Değiştir"
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "Bu dosya biçimi saydam renkleri desteklemiyor."
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr ""
+"Görüntüyü PNG olarak kaydedebilir veya saydamlığı aşağıdakilerle "
+"değiştirebilirsiniz:"
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "Saydamlığı şununla değiştir:"
+
#: src/utilities.py
msgid "Transparent"
msgstr "Saydam"
@@ -994,6 +1264,9 @@ msgstr "Turuncu"
msgid "Brown"
msgstr "Kahverengi"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
#: src/utilities.py
msgid "Probably brown"
msgstr "Açık kahvarengi"
@@ -1026,33 +1299,23 @@ msgstr "Mor"
msgid "Cyan"
msgstr "Camgöbeği"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
#: src/utilities.py
-msgid "Probably turquoise"
+msgid "Probably teal"
msgstr "Açık turkuaz"
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
#: src/utilities.py
msgid "Unknown color name"
msgstr "Bilinmeyen renk adı"
#: src/utilities.py
-msgid "Replace"
-msgstr "Değiştir"
-
-#: src/utilities.py
-msgid "This file format doesn't support transparent colors."
-msgstr "Bu dosya biçimi saydam renkleri desteklemiyor."
-
-#: src/utilities.py
-msgid "You can save the image as a PNG file, or replace transparency with:"
-msgstr ""
-"Görüntüyü PNG olarak kaydedebilir veya saydamlığı aşağıdakilerle "
-"değiştirebilirsiniz:"
-
-#: src/utilities.py
-msgid "Replace transparency with:"
-msgstr "Saydamlığı şununla değiştir:"
-
-#: src/utilities.py
msgid "All pictures"
msgstr "Tüm resimler"
@@ -1068,28 +1331,49 @@ msgstr "JPEG görüntüler"
msgid "BMP images"
msgstr "BMP görüntüler"
+#. To translators: it appears in tooltips over numerical inputs
#: src/utilities.py
msgid "percents"
msgstr "yüzdeler"
-#. To translators: it's the angle measure unit
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
#: src/utilities.py
msgid "degrees"
msgstr "derece"
+#: src/utilities.py
+#, fuzzy, python-format
+msgid "%s isn't an image."
+msgstr "Bir görüntü aç"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr ""
+
+#. Context: an error message
#: src/window.py
#, python-format
msgid "Failed to load tool: %s"
msgstr "Araç yüklenemedi: %s"
#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr ""
+
+#: src/window.py
msgid "Modifications will take effect in the next new window."
msgstr "Değişiklikler bir sonraki yeni pencerede geçerli olacaktır."
#: src/window.py src/tools/abstract_tool.py
#: src/optionsbars/classic/optionsbar-classic.ui
#: src/tools/classic_tools/tool_eraser.py
-#: src/tools/classic_tools/tool_highlight.py
msgid "No options"
msgstr "Seçenek yok"
@@ -1098,6 +1382,11 @@ msgid "Opened images"
msgstr "Açılan görüntüler"
#: src/window.py
+#, fuzzy, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "Uygulama açılırken hata oldu, lütfen hatayı rapor edin."
+
+#: src/window.py
#, python-format
msgid "Loading %s"
msgstr "Yükleniyor %s"
@@ -1111,54 +1400,38 @@ msgstr "Yeni Sekme"
msgid "Discard changes"
msgstr "Değişiklikleri yoksay"
-#: src/window.py
-#, python-format
-msgid "There are unsaved modifications to %s."
-msgstr "%s üstünde kaydedilmemiş değişiklikler."
-
+#. Context: %s will be replaced by the name of a file.
#: src/window.py
#, python-format
msgid "Where do you want to open %s?"
msgstr "Nerede açmak istiyorsunuz %s?"
-#: src/window.py
-msgid "Open a picture"
-msgstr "Bir resim aç"
-
#. Context for translation:
#. "What do you want to do with *these files*?"
#: src/window.py
msgid "these files"
msgstr "bu dosyalar"
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
#: src/window.py
#, python-format
msgid "What do you want to do with %s?"
msgstr "%s ile ne yapmak istersin?"
-#. else the exception was raised because an actual error occured, or
-#. the user clicked on "cancel"
-#: src/window.py
-#, python-format
-msgid "Failed to save %s"
-msgstr "Kaydedilemedi %s"
-
-#: src/window.py
-msgid "Untitled"
-msgstr "Başlıksız"
-
-#. Context: the sentence "There are unsaved modifications to %s."
#: src/window.py
-msgid "this picture"
-msgstr "bu resim"
+#, fuzzy
+msgid "Image copied to clipboard"
+msgstr "Panodaki Resmi Düzenle"
#: src/window.py
-msgid "Discard"
-msgstr "Yoksay"
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr ""
#: src/window.py
-msgid "Save picture as…"
-msgstr "Resmi farklı kaydet…"
+#, fuzzy
+msgid "Reload"
+msgstr "Yeniden yükle"
#: src/window.py
msgid "Import a picture"
@@ -1168,6 +1441,12 @@ msgstr "Bir resmi içe aktar"
msgid "Required tool is not available"
msgstr "Gerekli araç kullanılamıyor"
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
+
#: src/tools/utilities_paths.py
msgid "Continue"
msgstr "Devam"
@@ -1185,13 +1464,15 @@ msgid "Do you want to abort the operation, or to let the tool struggle ?"
msgstr ""
"İşlemi iptal etmek mi yoksa aracın denemesine izin vermek mi istiyorsunuz?"
+#. Context: fill a shape with the color of the left click
#: src/optionsbars/classic/optionsbar_color_popover.py
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Main color"
msgstr "Ana renk"
-#. if state_as_string == 'secondary':
+#. Context: fill a shape with the color of the right click
#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Secondary color"
msgstr "İkincil renk"
@@ -1201,8 +1482,8 @@ msgid "Tool size"
msgstr "Araç boyutu"
#: src/optionsbars/classic/optionsbar-classic.ui
-#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/tool-text.ui
-#: src/tools/ui/tool-filters.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
msgid "Preview"
msgstr "Önizlenim"
@@ -1223,160 +1504,175 @@ msgid "Use this editor by default"
msgstr "Bu düzenleyiciyi varsayılan olarak kullan"
#: src/optionsbars/selection/optionsbar-selection.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "More actions"
msgstr "Daha fazla eylem"
-#: src/optionsbars/canvas/optionsbar-crop.ui
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/optionsbars/canvas/optionsbar-rotate.ui
-#: src/optionsbars/canvas/optionsbar-scale.ui
-#: src/optionsbars/canvas/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
msgid "Apply"
msgstr "Onayla"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "Daha fazla seçenek"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr "Şununla genişlet..."
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "Saydamlık"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Select a filter…"
msgstr "Bir süzgeç seç…"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Saturation"
msgstr "Doygunluk"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blur radius"
msgstr "Bulanıklık yarıçapı"
-#: src/optionsbars/canvas/optionsbar-filters.ui
-msgid "Transparency"
-msgstr "Saydamlık"
-
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Change saturation"
msgstr "Doygunluğu değiştir"
#. Context: a filter adding like a light veil on the image
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Veil"
msgstr "Maskele"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
msgid "Add transparency"
msgstr "Saydamlık ekle"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Invert colors"
msgstr "Renkleri ters çevir"
-#: src/optionsbars/canvas/optionsbar-filters.ui
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
msgid "Blurring"
msgstr "Bulanıklık"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Fast blur"
msgstr "Hızlı bulanıklık"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
msgid "Slow blur"
msgstr "Yavaş bulanıklık"
#. Context: a filter that censors the image with some kind of tiles
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
-#: src/tools/canvas_tools/tool_filters.py
-msgid "Pixelisation"
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
msgstr "Pikselleme"
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Blur direction"
msgstr "Bulanıklık yönü"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Horizontal"
msgstr "Yatay"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "Vertical"
msgstr "Dikey"
#. Context: about the blur direction
-#: src/optionsbars/canvas/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
msgid "No direction"
msgstr "Yön yok"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle (degrees)"
msgstr "Açı (derece)"
-#: src/optionsbars/canvas/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
msgid "Angle"
msgstr "Açı"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate left"
msgstr "Sola döndür"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Rotate right"
msgstr "Sağa döndür"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip horizontally"
msgstr "Yatay çevir"
-#: src/optionsbars/canvas/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
msgid "Flip vertically"
msgstr "Dikey çevir"
-#: src/optionsbars/canvas/optionsbar-scale.ui
-msgid "More options"
-msgstr "Daha fazla seçenek"
-
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Keep proportions"
msgstr "Oranları koru"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Always [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Always"
msgstr "Sürekli"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "[Keep proportions only] when scaling from corners"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "When scaling from corners"
msgstr "Köşe ölçeği yaparken"
-#. Context for translations: an item in a menu whose title is "Keep proportions"
+#. Context: an item in a menu whose title is "Keep proportions"
#. Context for translations: "Never [keep proportions]"
-#: src/optionsbars/canvas/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
msgid "Never"
msgstr "Asla"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Horizontal deformation"
msgstr "Yatay deformasyon"
-#: src/optionsbars/canvas/optionsbar-skew.ui
+#: src/optionsbars/transform/optionsbar-skew.ui
msgid "Vertical deformation"
msgstr "Dikey deformasyon"
+#: src/tools/ui/selection.ui
+#, fuzzy
+msgid "Transform"
+msgstr "Saydam"
+
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
msgid "Line shape"
msgstr "Fırça şekli"
+#. Context: this is the name of a line shape
#. Default values
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
@@ -1384,80 +1680,171 @@ msgstr "Fırça şekli"
msgid "Round"
msgstr "Yuvarlak"
+#. Context: this is the name of a line shape
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
-msgid "Thin"
-msgstr "İnce"
-
-#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
-#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
msgid "Square"
msgstr "Kare"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "No arrow"
+msgstr "Oklar"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "Double arrow"
+msgstr "Kesikli ok"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
#: src/tools/ui/tool-pencil.ui
-msgid "Use dashes"
+#, fuzzy
+msgid "No dashes"
msgstr "Kısa çizgiler"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
-msgid "Arrow"
-msgstr "Oklar"
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Simple dashes"
+msgstr "Kısa çizgiler"
#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
-#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-shape.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Long dashes"
+msgstr "Kısa çizgiler"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Short dashes"
+msgstr "Kısa çizgiler"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
msgid "Antialiasing"
msgstr "Düzgünleştir"
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Dark text on light background"
+msgstr "Dikdörtgen arka plan"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr ""
+
#: src/tools/ui/tool-line.ui
msgid "Color gradient"
msgstr "Geçiş rengi"
+#. Context: title for the list of the possible painting algorithms.
#: src/tools/ui/tool-paint.ui
msgid "Behavior"
msgstr "Davranış"
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
#: src/tools/ui/tool-paint.ui
msgid "Encircle and fill"
msgstr "Çevrele ve doldur"
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
#: src/tools/ui/tool-paint.ui
msgid "Erase and replace"
msgstr "Temizle ve değiştir"
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
#: src/tools/ui/tool-paint.ui
-msgid "Clipping"
-msgstr "Kırpma"
+#, fuzzy
+msgid "Entire image"
+msgstr "Açılan görüntüler"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rectangle"
-msgstr "Dikdörtgen"
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+#, fuzzy
+msgid "Remove color"
+msgstr "Ham kaynak rengi"
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Rounded rectangle"
-msgstr "Yuvarlanmış dikdörtgen"
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr ""
-#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Oval"
-msgstr "Oval"
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "Daire"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr ""
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Polygon"
-msgstr "Çokgen"
+msgid "Solid outline"
+msgstr "Düz anahat"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Free shape"
-msgstr "Serbest biçim"
+msgid "Dashed outline"
+msgstr "Kesikli anahat"
+#. if state_as_string == 'none':
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Circle"
-msgstr "Daire"
+msgid "No outline"
+msgstr "Anahat yok"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr "Dolgu"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
-msgid "Empty outline"
-msgstr "Boş anahat"
+msgid "Empty shape"
+msgstr "Boş şekil"
#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
msgid "Horizontal gradient"
@@ -1471,6 +1858,26 @@ msgstr "Dikey gradyan"
msgid "Radial gradient"
msgstr "Radyal gradyan"
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "Dikdörtgen"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr "Yuvarlanmış dikdörtgen"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "Oval"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "Çokgen"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "Serbest biçim"
+
#: src/tools/ui/tool-shape.ui
msgid "Close shape"
msgstr "Şekli kapat"
@@ -1484,6 +1891,10 @@ msgid "Font"
msgstr "Yazı tipi"
#: src/tools/ui/tool-text.ui
+msgid "Select a font…"
+msgstr "Bir yazı tipi seç…"
+
+#: src/tools/ui/tool-text.ui
msgid "Italic"
msgstr "Italic"
@@ -1491,34 +1902,31 @@ msgstr "Italic"
msgid "Bold"
msgstr "Kalın"
+#. Context: the types of background behind the inserted text
#: src/tools/ui/tool-text.ui
msgid "Background"
msgstr "Arkaplan"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "No background"
msgstr "Arkaplan yok"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Shadow"
msgstr "Gölge"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Outline"
msgstr "Dış çizgi"
+#. Context: a type of background behind the inserted text
#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
msgid "Rectangle background"
msgstr "Dikdörtgen arka plan"
-#: src/tools/ui/selection.ui
-msgid "Edit"
-msgstr "Düzenle"
-
-#: src/tools/ui/selection.ui
-msgid "Flip"
-msgstr "Çevir"
-
#: src/tools/classic_tools/tool_arc.py
msgid "Curve"
msgstr "Kavis"
@@ -1532,10 +1940,19 @@ msgid "Dashed arrow"
msgstr "Kesikli ok"
#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "Oklar"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
#: src/tools/classic_tools/tool_pencil.py
msgid "Dashed"
msgstr "Kesik"
+#: src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Highlighter options"
+msgstr "İşaretleyici"
+
#: src/tools/classic_tools/tool_line.py
msgid "Line"
msgstr "Çizgi"
@@ -1552,6 +1969,11 @@ msgstr "Boyama seçenekleri"
msgid "Click on an area to replace its color by transparency"
msgstr "Rengi saydamlıkla değiştirmek için bir alana tıkla"
+#: src/tools/classic_tools/tool_paint.py
+#, fuzzy
+msgid "Click on the canvas to entirely paint it"
+msgstr "Kapatmak için şeklin ilk noktasına tıklayın."
+
#: src/tools/classic_tools/tool_pencil.py
msgid "Pencil"
msgstr "Fırça"
@@ -1560,15 +1982,21 @@ msgstr "Fırça"
msgid "Pencil options"
msgstr "Fırça seçenekleri"
+#: src/tools/classic_tools/tool_points.py
+#, fuzzy
+msgid "Points options"
+msgstr "Yazıtipi seçenekleri"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr ""
+
#: src/tools/classic_tools/tool_shape.py
msgid "Shape"
msgstr "Şekil"
#: src/tools/classic_tools/tool_shape.py
-msgid "Empty"
-msgstr "Boş"
-
-#: src/tools/classic_tools/tool_shape.py
msgid "Shape options"
msgstr "Biçim seçenekleri"
@@ -1580,6 +2008,7 @@ msgstr "Kapatmak için şeklin ilk noktasına tıklayın."
msgid "Text"
msgstr "Metin"
+#. XXX use "text options" instead
#: src/tools/classic_tools/tool_text.py
msgid "Font options"
msgstr "Yazıtipi seçenekleri"
@@ -1596,47 +2025,73 @@ msgstr "Bir alan seç veya tuval üzerine sağ tıkla"
msgid "Rectangle selection"
msgstr "Dikdörtgen seçim"
-#: src/tools/canvas_tools/abstract_canvas_tool.py
+#: src/tools/transform_tools/abstract_transform_tool.py
msgid "Error: invalid values"
msgstr "Hata: geçersiz değerler"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the selection"
msgstr "Seçimi kırp"
-#: src/tools/canvas_tools/tool_crop.py
+#: src/tools/transform_tools/tool_crop.py
msgid "Cropping the canvas"
msgstr "Tuvali kırp"
-#: src/tools/canvas_tools/tool_filters.py
+#: src/tools/transform_tools/tool_filters.py
msgid "Click on the image to preview the selected filter"
msgstr "Seçilen süzgeci önizlemek için resme tıklayın"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the selection"
msgstr "Seçimi döndür"
-#: src/tools/canvas_tools/tool_rotate.py
+#: src/tools/transform_tools/tool_rotate.py
msgid "Rotating the canvas"
msgstr "Tuvali döndür"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the selection"
msgstr "Seçimi ölçeklendir"
-#: src/tools/canvas_tools/tool_scale.py
+#: src/tools/transform_tools/tool_scale.py
msgid "Scaling the canvas"
msgstr "Tuvali ölçeklendir"
-#~ msgid "Classic"
-#~ msgstr "Klasik"
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr "Eğrilik"
+
+#~ msgid "Flip"
+#~ msgstr "Çevir"
+
+#, fuzzy
+#~ msgid "Add semi-transparency"
+#~ msgstr "Saydamlık ekle"
+
+#~ msgid "Thin"
+#~ msgstr "İnce"
+
+#~ msgid "Clipping"
+#~ msgstr "Kırpma"
+
+#~ msgid "Edit"
+#~ msgstr "Düzenle"
+
+#~ msgid "Open a file"
+#~ msgstr "Bir dosya aç"
+
+#~ msgid "Save as"
+#~ msgstr "Farklı kaydet"
+
+#~ msgid "Keyboard"
+#~ msgstr "Klavye"
#~ msgid "Close"
#~ msgstr "Kapat"
-#~ msgid "Filling"
-#~ msgstr "Dolgu"
-
#~ msgid "Freehand"
#~ msgstr "Düzensiz"
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 00000000..8b3ae110
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,2066 @@
+# Chinese translations for drawing package.
+# Copyright (C) 2020 THE drawing'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the drawing package.
+# Automatically generated, 2020.
+# OverflowCat <overflowcat@gmail.com> 2020
+msgid ""
+msgstr ""
+"Project-Id-Version: drawing\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
+"PO-Revision-Date: 2020-07-21 17:29+0800\n"
+"Last-Translator: OverflowCat <overflowcat@gmail.com>\n"
+"Language-Team: none\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.3.1\n"
+
+#: data/com.github.maoschanz.drawing.desktop.in
+#: data/com.github.maoschanz.drawing.appdata.xml.in src/deco_manager.py
+#: src/main.py
+msgid "Drawing"
+msgstr "Drawing"
+
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "Simple drawing utility"
+msgstr "简单的绘图工具"
+
+#. Icon name, do not translate
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "com.github.maoschanz.drawing"
+msgstr ""
+
+#. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons.
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "Paint;Sketch;Pencil;"
+msgstr "Paint;素描;铅笔;"
+
+#. Context: answer to "where do you want to open the image?"
+#: data/com.github.maoschanz.drawing.desktop.in src/ui/app-menus.ui
+#: src/ui/shortcuts.ui src/ui/win-menus.ui src/window.py
+msgid "New Window"
+msgstr "新窗口"
+
+#: data/com.github.maoschanz.drawing.desktop.in src/ui/app-menus.ui
+#: src/ui/headerbar.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/ui/window.ui
+msgid "New Image"
+msgstr "新图像"
+
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "Edit Image in Clipboard"
+msgstr "在剪贴板中编辑图像"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "A drawing application for the GNOME desktop"
+msgstr "为 GNOME 桌面环境打造的画图应用"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types."
+msgstr "Drawing 是一个基础的图像编辑器,支持 PNG、JPEG 和 BMP 文件格式。"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It allows you to draw or edit pictures with tools such as pencil, line or "
+"arc (with various options), selection (cut/copy/paste/drag/…), shapes "
+"(rectangle, circle, polygon, …), text insertion, resizing, cropping, "
+"rotating, …"
+msgstr ""
+"借助本应用,你可以图画、编辑图片,并使用诸如铅笔、直线、弧线(多种选项)、选"
+"择(复制、粘贴、剪切、拖曳等)、形状(矩形、圆形、多边形等)、插入文本、调整"
+"大小、裁切、旋转、…"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr "0.6.4 版修复了一些小的错误,增加了新的翻译。"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr "0.6.2 版修复了一些小的错误,增加了新的翻译。"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6 is a major update, with various important changes. The app is "
+"more robust and has more tools:"
+msgstr "0.6 版是一次大更新。应用更强大而稳定,拥有更多工具:"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Rectangle selection and freehand selection are now distinct tools, and the "
+"'rotate' tool now supports any angle and handles horizontal or vertical "
+"flipping."
+msgstr ""
+"矩形选择和自由选择现在是不同的工具;「旋转」工具现在支持任何角度旋转及水平或"
+"垂直翻转。"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The numerous tools producing shapes (circle, rectangle, polygon, …), have "
+"been merged into a single, more consistent 'shape' tool, along with 'rounded "
+"rectangle' and 'ellipse'. Their filling options now include various types of "
+"gradients."
+msgstr ""
+"大量的形状工具(圆,矩形,多边形,…)已合并为一个单一的,更一致的「形状」工"
+"具,还另添加了圆角矩形和椭圆。填充选项现包括各种类型的渐变。"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
+"with several types of blur, color inversion, pixelization, saturation and "
+"transparency."
+msgstr ""
+"「滤镜」工具取代了「饱和度」,更为强大,支持模糊、反色、像素化、饱和度调整和"
+"透明度。"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "A fullscreen mode is now available."
+msgstr "现已提供全屏模式。"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The most prominent new feature is the ability to zoom in (or out) on the "
+"image, using the minimap, the touchpad or the mouse wheel."
+msgstr "最突出的新功能是使用小地图、触摸板或鼠标滚轮缩放图像。"
+
+#. This is just my name, do not translate it.
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Romain F. T."
+msgstr "罗曼 F. T."
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Preferences"
+msgstr "首选项"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
+msgid "Report a bug"
+msgstr "报告程序错误"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Shortcuts"
+msgstr "捷径"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Help"
+msgstr "帮助"
+
+#: src/ui/app-menus.ui
+msgid "About"
+msgstr "关于"
+
+#: src/ui/app-menus.ui
+msgid "Quit"
+msgstr "退出"
+
+#: src/ui/app-menus.ui
+msgid "_File"
+msgstr "文件(_F)"
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
+msgid "Open an image"
+msgstr "打开图像"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "New Blank Image"
+msgstr "新的空图像"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/new_image_dialog.py
+msgid "New Image With Custom Size"
+msgstr "自定义尺寸的新图像"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "New Image From Selection"
+msgstr "从选区创建新图像"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "New Image From Clipboard"
+msgstr "从剪贴版创建新图像"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Reload file"
+msgstr "重载文件"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
+msgid "Image properties"
+msgstr "图像属性"
+
+#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
+#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui src/saving_manager.py
+msgid "Save"
+msgstr "保存"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+#, fuzzy
+msgid "Save without transparency"
+msgstr "增加透明度"
+
+#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
+#: src/saving_manager.py
+msgid "Save as…"
+msgstr "另存为…"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/win-menus.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Export as…"
+msgstr "导出为…"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
+msgid "Print"
+msgstr "打印"
+
+#: src/ui/app-menus.ui
+msgid "Close Image"
+msgstr "关闭图像"
+
+#: src/ui/app-menus.ui
+msgid "Close Window"
+msgstr "关闭窗口"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Quit all windows"
+msgstr "退出所有窗口"
+
+#: src/ui/app-menus.ui
+msgid "_Edit"
+msgstr "编辑(_E)"
+
+#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
+#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui src/deco_manager.py
+msgid "Undo"
+msgstr "撤销"
+
+#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
+#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui src/deco_manager.py
+msgid "Redo"
+msgstr "重做"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Rebuild from history"
+msgstr "从历史记录重建"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Select all"
+msgstr "全选"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Cut"
+msgstr "剪切"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Copy"
+msgstr "复制"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Delete"
+msgstr "删除"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+msgid "Paste"
+msgstr "粘贴"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/window.py
+#: src/optionsbars/selection/optionsbar-selection.ui
+msgid "Import"
+msgstr "导入"
+
+#: src/ui/app-menus.ui
+msgid "_View"
+msgstr "视图(_V)"
+
+#: src/ui/app-menus.ui
+msgid "Show the preview"
+msgstr "显示预览"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/preferences.py
+msgid "Zoom"
+msgstr "缩放"
+
+#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui
+msgid "Optimal Zoom"
+msgstr "最佳大小"
+
+#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Zoom Out"
+msgstr "缩小"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Original Zoom"
+msgstr "原始大小"
+
+#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Zoom In"
+msgstr "放大"
+
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
+#: src/ui/app-menus.ui
+msgid "Position"
+msgstr "位置"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Left"
+msgstr "向左"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Up"
+msgstr "向上"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Down"
+msgstr "向下"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Right"
+msgstr "向右"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Tab at the left"
+msgstr "左侧的标签页"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Tab at the right"
+msgstr "右侧的标签页"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Refresh"
+msgstr "刷新"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Fullscreen"
+msgstr "全屏"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Exit fullscreen"
+msgstr "退出全屏"
+
+#: src/ui/app-menus.ui
+msgid "_Colors"
+msgstr "颜色(_C)"
+
+#: src/ui/app-menus.ui
+msgid "Edit Main Color…"
+msgstr "编辑主颜色…"
+
+#: src/ui/app-menus.ui
+msgid "Edit Secondary Color…"
+msgstr "编辑副颜色…"
+
+#: src/ui/app-menus.ui
+msgid "Use color editor by default"
+msgstr "默认使用颜色编辑器"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+#: src/optionsbars/classic/optionsbar-classic.ui
+msgid "Exchange colors"
+msgstr "交换颜色"
+
+#: src/ui/app-menus.ui
+msgid "Color application mode"
+msgstr "颜色应用模式"
+
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Normal"
+msgstr "默认"
+
+#. Context: possible ways to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Other modes"
+msgstr "其他模式"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Raw source color"
+msgstr "原始来源的颜色"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Highlight"
+msgstr "荧光笔"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Difference"
+msgstr "差异"
+
+#. Context: possible ways to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Photo-oriented modes"
+msgstr "匹配目标图片"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Hue only"
+msgstr "仅色相"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Saturation only"
+msgstr "仅饱和度"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Hue and saturation"
+msgstr "色相和饱和度"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Luminosity only"
+msgstr "仅发光度"
+
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Don't use the colors but…"
+msgstr "不要使用这些颜色,除非…"
+
+#. To translators: this is a verb
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Blur"
+msgstr "模糊"
+
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Erase"
+msgstr "擦除"
+
+#: src/ui/app-menus.ui
+msgid "_Tools"
+msgstr "工具(_T)"
+
+#: src/ui/app-menus.ui
+msgid "Previous tool"
+msgstr "先前的工具"
+
+#: src/ui/app-menus.ui
+#, fuzzy
+msgid "Active tool"
+msgstr "其他模式"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "显示工具名称"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+#, fuzzy
+msgid "Smaller width"
+msgstr "默认宽度"
+
+#: src/ui/app-menus.ui src/window.py
+msgid "_Options"
+msgstr "选项(_O)"
+
+#: src/ui/app-menus.ui
+msgid "_Help"
+msgstr "帮助(_H)"
+
+#. Context: open the index of all help pages
+#: src/ui/app-menus.ui
+msgid "Index"
+msgstr "编号"
+
+#. Context: open the help page about general use of the app
+#: src/ui/app-menus.ui
+msgid "Basic help"
+msgstr "基本"
+
+#. Context: open the help page about classic tools
+#: src/ui/app-menus.ui
+msgid "Help about tools"
+msgstr "关于工具的帮助"
+
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
+#: src/ui/app-menus.ui
+msgid "Canvas and selection"
+msgstr "画布和选区"
+
+#. Context: open the help page about the selection
+#: src/ui/app-menus.ui
+msgid "Help about selection"
+msgstr "关于选区的帮助"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "About Drawing"
+msgstr "关于 Drawing"
+
+#: src/ui/headerbar.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/window.py
+msgid "Open"
+msgstr "打开"
+
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr ""
+
+#: src/ui/new-image-dialog.ui src/ui/properties.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Width"
+msgstr "宽度"
+
+#: src/ui/new-image-dialog.ui src/ui/properties.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Height"
+msgstr "高度"
+
+#: src/ui/new-image-dialog.ui
+msgid "Color"
+msgstr "颜色"
+
+#: src/ui/new-image-dialog.ui
+msgid "Use these settings by default"
+msgstr "默认使用这些设置"
+
+#: src/ui/minimap.ui
+msgid "100%"
+msgstr "100%"
+
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
+#: src/ui/properties.ui src/utilities.py
+msgid "pixels"
+msgstr "像素"
+
+#: src/ui/properties.ui
+msgid "centimeters"
+msgstr "厘米"
+
+#: src/ui/properties.ui
+msgid "inches"
+msgstr "英寸"
+
+#: src/ui/preferences.ui
+msgid "Images"
+msgstr "图像"
+
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Tools"
+msgstr "工具"
+
+#: src/ui/preferences.ui
+msgid "Window"
+msgstr "窗口"
+
+#: src/ui/selection-manager.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Close selection"
+msgstr "关闭选区"
+
+#: src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Unselect"
+msgstr "取消选择"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_crop.py
+msgid "Crop"
+msgstr "裁切"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_scale.py
+msgid "Scale"
+msgstr "拉伸"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_rotate.py
+msgid "Rotate"
+msgstr "旋转"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Filters"
+msgstr "滤镜"
+
+#: src/ui/selection-manager.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Open As New Image"
+msgstr "以新图像打开"
+
+#: src/ui/shortcuts.ui
+#, fuzzy
+msgid "Keyboard Shortcuts"
+msgstr "捷径"
+
+#: src/ui/shortcuts.ui
+msgid "General"
+msgstr "通用"
+
+#: src/ui/shortcuts.ui
+msgid "Main menu"
+msgstr "主菜单"
+
+#: src/ui/shortcuts.ui
+msgid "Image"
+msgstr "图像"
+
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "打开图片"
+
+#: src/ui/shortcuts.ui
+msgid "Reload image from disk"
+msgstr "从磁盘中重载图像"
+
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "另存图片为…"
+
+#: src/ui/shortcuts.ui
+msgid "Close the active image"
+msgstr "关闭活动的图像"
+
+#: src/ui/shortcuts.ui
+#, fuzzy
+msgid "Open the tool options menu"
+msgstr "选项菜单"
+
+#: src/ui/shortcuts.ui
+msgid "Back to previous tool"
+msgstr "回到之前的工具"
+
+#: src/ui/shortcuts.ui
+msgid "Apply a transformation"
+msgstr ""
+
+#: src/ui/shortcuts.ui
+msgid "History"
+msgstr "历史记录"
+
+#: src/ui/shortcuts.ui
+msgid "Selection"
+msgstr "选区"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Delete the selection"
+msgstr "删除选区"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Import a file as the selection"
+msgstr "导入文件作为选区"
+
+#: src/ui/shortcuts.ui
+msgid "Colors"
+msgstr "颜色"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Edit the main color (left click)"
+msgstr "编辑主颜色(左键单击)"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Edit the secondary color (right click)"
+msgstr "编辑主颜色(右键单击)"
+
+#: src/ui/shortcuts.ui
+msgid "Tabs"
+msgstr "标签页"
+
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
+#: src/ui/shortcuts.ui
+msgid "Navigation"
+msgstr "导航"
+
+#: src/ui/shortcuts.ui
+msgid "Toggle the preview"
+msgstr "切换预览"
+
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr "进入全屏模式"
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr "退出全屏模式"
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr ""
+
+#: src/ui/win-menus.ui
+msgid "Troubleshoot selection"
+msgstr "对选区排查问题"
+
+#: src/ui/win-menus.ui
+#, fuzzy
+msgid "Other tools"
+msgstr "其他模式"
+
+#: src/ui/window.ui
+msgid "Error starting the application, please report this bug."
+msgstr "启动应用失败。请向我们报告这个问题。"
+
+#: src/deco_manager.py
+#, python-format
+msgid "Undo %s"
+msgstr "撤销 %s"
+
+#: src/deco_manager.py
+#, python-format
+msgid "Redo %s"
+msgstr "重做 %s"
+
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr ""
+
+#: src/image.py
+msgid "Can't reload a never-saved file from the disk."
+msgstr "无法重载尚未保存到磁盘的文件。"
+
+#: src/image.py src/properties.py
+msgid "Unsaved file"
+msgstr "未保存的文件"
+
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
+msgid "Cancel"
+msgstr "取消"
+
+#. Context: Create a new image
+#: src/new_image_dialog.py
+msgid "Create"
+msgstr "创建"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Show the app version"
+msgstr "显示应用版本"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Open a new window"
+msgstr "打开新窗口"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Open a new tab"
+msgstr "打开新标签页"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Edit the clipboard content"
+msgstr "编辑剪贴板内容"
+
+#: src/main.py
+msgid "This version isn't stable!"
+msgstr "该版本不是稳定版本!"
+
+#: src/main.py
+msgid "Report bugs or ideas"
+msgstr "提交意见或建议"
+
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
+#: src/main.py
+msgid "translator-credits"
+msgstr "译者贡献"
+
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
+#: src/main.py
+msgid "GNOME's \"Art Libre\" icon set authors"
+msgstr "GNOME 的 Art Libre 图标包作者"
+
+#: src/main.py
+msgid "A drawing application for the GNOME desktop."
+msgstr "为 GNOME 桌面环境打造的画图应用。"
+
+#: src/main.py
+msgid "Official webpage"
+msgstr "官方网页"
+
+#: src/main.py
+#, fuzzy
+msgid "Error opening this file."
+msgstr "打开此文件时发生错误。你在找 %s 吗?"
+
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr ""
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
+#: src/minimap.py
+#, python-format
+msgid "%s%%"
+msgstr "%s%%"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "New images"
+msgstr "新图像"
+
+#: src/preferences.py
+msgid "Default width"
+msgstr "默认宽度"
+
+#: src/preferences.py
+msgid "Default height"
+msgstr "默认高度"
+
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Default color"
+msgstr "默认颜色"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "Images saving"
+msgstr "图像保存"
+
+#: src/preferences.py
+msgid "JPEG and BMP images can't handle transparency."
+msgstr "保存为 JPEG 或 BMP 图像时透明度将会丢失。"
+
+#: src/preferences.py
+msgid ""
+"If you save your images in these formats, what do want to use to replace "
+"transparent pixels?"
+msgstr "存储为这些格式时,你想要用什么替换透明的像素?"
+
+#: src/preferences.py src/saving_manager.py src/utilities.py
+msgid "White"
+msgstr "白色"
+
+#: src/preferences.py src/saving_manager.py src/utilities.py
+msgid "Black"
+msgstr "黑色"
+
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
+msgid "Checkboard"
+msgstr "旗盘格"
+
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
+msgid "Nothing"
+msgstr "空"
+
+#: src/preferences.py
+msgid "Ask before saving"
+msgstr "保存前询问"
+
+#: src/preferences.py
+msgid "You can zoom with Ctrl+scrolling, or only scrolling."
+msgstr "你可以使用 Ctrl 滚动,或仅仅滚动。"
+
+#: src/preferences.py
+msgid "See the user help manual for explanations."
+msgstr ""
+
+#: src/preferences.py
+msgid "Use 'Ctrl' to zoom"
+msgstr "使用 Ctrl 键缩放"
+
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
+#: src/preferences.py
+msgid "Appearance"
+msgstr "外观"
+
+#: src/preferences.py
+msgid "Use big icons"
+msgstr "使用大图标"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "Additional tools"
+msgstr "附加工具"
+
+#: src/preferences.py
+msgid ""
+"These tools are not as reliable and useful as they should be, so they are "
+"not all enabled by default."
+msgstr "这些工具并不如应有的那样可靠和有用,所以它们在默认情况下并非全部启用。"
+
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
+#: src/preferences.py src/tools/classic_tools/tool_eraser.py
+msgid "Eraser"
+msgstr "橡皮擦"
+
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
+#: src/preferences.py src/tools/classic_tools/tool_highlight.py
+msgid "Highlighter"
+msgstr "荧光笔"
+
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr ""
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
+#: src/preferences.py src/tools/selection_tools/select_free.py
+msgid "Free selection"
+msgstr "自由选择"
+
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
+#: src/preferences.py src/tools/selection_tools/select_color.py
+msgid "Color selection"
+msgstr "颜色选择"
+
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
+#: src/preferences.py src/tools/classic_tools/tool_picker.py
+msgid "Color Picker"
+msgstr "取色器"
+
+#. Context: the name of a tool to fill an area of one color with an other
+#: src/preferences.py src/tools/classic_tools/tool_paint.py
+msgid "Paint"
+msgstr "笔刷"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "Advanced options"
+msgstr "高级选项"
+
+#: src/preferences.py
+msgid "Preview size"
+msgstr "预览大小"
+
+#. This label will not be displayed in the UI of stable versions
+#: src/preferences.py
+msgid "Development features"
+msgstr "开发中的功能"
+
+#: src/preferences.py
+msgid "Background color"
+msgstr "背景颜色"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
+msgid "Layout"
+msgstr "布局"
+
+#: src/preferences.py
+msgid "The recommended value is \"Automatic\"."
+msgstr "推荐的值为「自动」。"
+
+#. It has to match what's written in the previous string.
+#: src/preferences.py
+msgid "Automatic"
+msgstr "自动"
+
+#: src/preferences.py
+msgid "Compact"
+msgstr "紧凑"
+
+#: src/preferences.py
+msgid "elementary OS"
+msgstr "Elementary OS"
+
+#. "Legacy" is about the window layout, it means menubar+toolbar, you
+#. can translate it like if it was "Traditional"
+#: src/preferences.py
+msgid "Legacy"
+msgstr "旧昄界面"
+
+#. "Legacy" is about the window layout, it means menubar+toolbar, you
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
+#: src/preferences.py
+msgid "Legacy (symbolic icons)"
+msgstr "旧版界面(符号图标)"
+
+#: src/preferences.py
+msgid "Menubar only"
+msgstr "仅菜单"
+
+#: src/preferences.py
+msgid "Toolbar only"
+msgstr "仅工具栏"
+
+#. Symbolic icons are monochrome icons.
+#: src/preferences.py
+msgid "Toolbar only (symbolic icons)"
+msgstr "仅工具栏(符号图标)"
+
+#: src/properties.py
+#, python-format
+msgid "%s px"
+msgstr "%s 像素"
+
+#: src/properties.py
+#, python-format
+msgid "%s cm"
+msgstr "%s 厘米"
+
+#: src/properties.py
+#, python-format
+msgid "%s in"
+msgstr "%s 英寸"
+
+#. Context: the path of the edited file
+#: src/properties.py
+msgid "Path"
+msgstr "路径"
+
+#. Context: the file format of the edited file
+#: src/properties.py
+msgid "Format"
+msgstr "格式"
+
+#: src/properties.py
+msgid "Colorspace"
+msgstr "色彩空间"
+
+#. Context: an invalid colorspace format
+#: src/properties.py
+msgid "Invalid format"
+msgstr "无效格式"
+
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "保存 %s 失败"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "未命名"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "此图片"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "丢弃"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "%s 有未保存的修改。"
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr ""
+
+#: src/saving_manager.py
+#, fuzzy
+msgid "Do you want to save anyway?"
+msgstr "您想在哪里打开 %s?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr "替换"
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "这种文件格式不支持透明色。"
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr "可以将图像另存为PNG文件,或将透明部分替换为:"
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "将透明部分替换为:"
+
+#: src/utilities.py
+msgid "Transparent"
+msgstr "透明"
+
+#: src/utilities.py
+#, python-format
+msgid "%s%% transparent"
+msgstr "%s%% 透明"
+
+#: src/utilities.py
+msgid "Grey"
+msgstr "灰色"
+
+#: src/utilities.py
+msgid "Orange"
+msgstr "橘色"
+
+#: src/utilities.py
+msgid "Brown"
+msgstr "棕色"
+
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
+#: src/utilities.py
+msgid "Probably brown"
+msgstr "可能为棕色"
+
+#: src/utilities.py
+msgid "Red"
+msgstr "红色"
+
+#: src/utilities.py
+msgid "Green"
+msgstr "绿色"
+
+#: src/utilities.py
+msgid "Blue"
+msgstr "蓝色"
+
+#: src/utilities.py
+msgid "Yellow"
+msgstr "黄色"
+
+#: src/utilities.py
+msgid "Magenta"
+msgstr "品红"
+
+#: src/utilities.py
+msgid "Purple"
+msgstr "紫色"
+
+#: src/utilities.py
+msgid "Cyan"
+msgstr "青色"
+
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
+#: src/utilities.py
+msgid "Probably teal"
+msgstr "可能为绿松石色"
+
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
+#: src/utilities.py
+msgid "Unknown color name"
+msgstr "未知颜色"
+
+#: src/utilities.py
+msgid "All pictures"
+msgstr "所有图片"
+
+#: src/utilities.py
+msgid "PNG images"
+msgstr "PNG 图像"
+
+#: src/utilities.py
+msgid "JPEG images"
+msgstr "JPEG 图像"
+
+#: src/utilities.py
+msgid "BMP images"
+msgstr "BMP 图像"
+
+#. To translators: it appears in tooltips over numerical inputs
+#: src/utilities.py
+msgid "percents"
+msgstr "百分比"
+
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
+#: src/utilities.py
+msgid "degrees"
+msgstr "度"
+
+#: src/utilities.py
+#, fuzzy, python-format
+msgid "%s isn't an image."
+msgstr "打开图像"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr ""
+
+#. Context: an error message
+#: src/window.py
+#, python-format
+msgid "Failed to load tool: %s"
+msgstr "加载工具失败:%s"
+
+#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr ""
+
+#: src/window.py
+msgid "Modifications will take effect in the next new window."
+msgstr "修改将在下一个新窗口生效。"
+
+#: src/window.py src/tools/abstract_tool.py
+#: src/optionsbars/classic/optionsbar-classic.ui
+#: src/tools/classic_tools/tool_eraser.py
+msgid "No options"
+msgstr "无选项"
+
+#: src/window.py
+msgid "Opened images"
+msgstr "已打开的图像"
+
+#: src/window.py
+#, fuzzy, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "启动应用失败。请向我们报告这个问题。"
+
+#: src/window.py
+#, python-format
+msgid "Loading %s"
+msgstr "已加载 %s"
+
+#. Context: answer to "where do you want to open the image?"
+#: src/window.py
+msgid "New Tab"
+msgstr "新标签页"
+
+#: src/window.py
+msgid "Discard changes"
+msgstr "丢弃更改"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/window.py
+#, python-format
+msgid "Where do you want to open %s?"
+msgstr "您想在哪里打开 %s?"
+
+#. Context for translation:
+#. "What do you want to do with *these files*?"
+#: src/window.py
+msgid "these files"
+msgstr "这些文件"
+
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
+#: src/window.py
+#, python-format
+msgid "What do you want to do with %s?"
+msgstr "你想要对 %s 做什么?"
+
+#: src/window.py
+#, fuzzy
+msgid "Image copied to clipboard"
+msgstr "在剪贴板中编辑图像"
+
+#: src/window.py
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr ""
+
+#: src/window.py
+#, fuzzy
+msgid "Reload"
+msgstr "重载文件"
+
+#: src/window.py
+msgid "Import a picture"
+msgstr "导入图片"
+
+#: src/window.py
+msgid "Required tool is not available"
+msgstr "所需的工具不可用"
+
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
+
+#: src/tools/utilities_paths.py
+msgid "Continue"
+msgstr "继续"
+
+#: src/tools/utilities_paths.py
+msgid "The area seems poorly delimited, or is very complex."
+msgstr "该区域似乎很难划定边界,或者非常复杂。"
+
+#: src/tools/utilities_paths.py
+msgid "This algorithm may not be able to manage the wanted area."
+msgstr "该算法可能无法处理所需区域。"
+
+#: src/tools/utilities_paths.py
+msgid "Do you want to abort the operation, or to let the tool struggle ?"
+msgstr "您想要中止该操作吗?"
+
+#. Context: fill a shape with the color of the left click
+#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Main color"
+msgstr "主颜色"
+
+#. Context: fill a shape with the color of the right click
+#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Secondary color"
+msgstr "副颜色"
+
+#: src/optionsbars/classic/optionsbar-classic.ui
+msgid "Tool size"
+msgstr "工具大小"
+
+#: src/optionsbars/classic/optionsbar-classic.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
+msgid "Preview"
+msgstr "预览"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "How the color will be applied to the existing pixels"
+msgstr "颜色如何应用于现有像素"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Back to the palette"
+msgstr "返回调色板"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Palette"
+msgstr "调色板"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Use this editor by default"
+msgstr "默认使用此编辑器"
+
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+msgid "More actions"
+msgstr "更多操作"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+msgid "Apply"
+msgstr "应用"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "更多选项"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr "扩展…"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "透明度"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Select a filter…"
+msgstr "选择滤镜…"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+msgid "Saturation"
+msgstr "饱和度"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+msgid "Blur radius"
+msgstr "模糊半径"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Change saturation"
+msgstr "更改饱和度"
+
+#. Context: a filter adding like a light veil on the image
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Veil"
+msgstr "面纱"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
+msgid "Add transparency"
+msgstr "增加透明度"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Invert colors"
+msgstr "插入颜色"
+
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
+msgid "Blurring"
+msgstr "模糊"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Fast blur"
+msgstr "快速模糊"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Slow blur"
+msgstr "慢速模糊"
+
+#. Context: a filter that censors the image with some kind of tiles
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
+msgstr "像素化"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "Blur direction"
+msgstr "模糊方向"
+
+#. Context: about the blur direction
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "Horizontal"
+msgstr "水平"
+
+#. Context: about the blur direction
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "Vertical"
+msgstr "垂直"
+
+#. Context: about the blur direction
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "No direction"
+msgstr "无方向"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui
+msgid "Angle (degrees)"
+msgstr "角(角度)"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui
+msgid "Angle"
+msgstr "角"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Rotate left"
+msgstr "向左旋转"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Rotate right"
+msgstr "向右旋转"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Flip horizontally"
+msgstr "水平翻转"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Flip vertically"
+msgstr "垂直翻转"
+
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "Keep proportions"
+msgstr "保持纵横比"
+
+#. Context: an item in a menu whose title is "Keep proportions"
+#. Context for translations: "Always [keep proportions]"
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "Always"
+msgstr "总是"
+
+#. Context: an item in a menu whose title is "Keep proportions"
+#. Context for translations: "[Keep proportions only] when scaling from corners"
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "When scaling from corners"
+msgstr "从角落缩放时"
+
+#. Context: an item in a menu whose title is "Keep proportions"
+#. Context for translations: "Never [keep proportions]"
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "Never"
+msgstr "从不"
+
+#: src/optionsbars/transform/optionsbar-skew.ui
+msgid "Horizontal deformation"
+msgstr "水平变形"
+
+#: src/optionsbars/transform/optionsbar-skew.ui
+msgid "Vertical deformation"
+msgstr "垂直变形"
+
+#: src/tools/ui/selection.ui
+#, fuzzy
+msgid "Transform"
+msgstr "透明"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Line shape"
+msgstr "线形"
+
+#. Context: this is the name of a line shape
+#. Default values
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
+#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+msgid "Round"
+msgstr "圆形"
+
+#. Context: this is the name of a line shape
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
+msgid "Square"
+msgstr "方形"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "No arrow"
+msgstr "箭头"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "Double arrow"
+msgstr "虚线箭头"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "No dashes"
+msgstr "使用虚线"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Simple dashes"
+msgstr "使用虚线"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Long dashes"
+msgstr "使用虚线"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Short dashes"
+msgstr "使用虚线"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+msgid "Antialiasing"
+msgstr "抗锯齿"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Dark text on light background"
+msgstr "矩形背景"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr ""
+
+#: src/tools/ui/tool-line.ui
+msgid "Color gradient"
+msgstr "颜色渐变"
+
+#. Context: title for the list of the possible painting algorithms.
+#: src/tools/ui/tool-paint.ui
+msgid "Behavior"
+msgstr "行为"
+
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
+#: src/tools/ui/tool-paint.ui
+msgid "Encircle and fill"
+msgstr "包围并填充"
+
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
+#: src/tools/ui/tool-paint.ui
+msgid "Erase and replace"
+msgstr "擦除并替换"
+
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
+#: src/tools/ui/tool-paint.ui
+#, fuzzy
+msgid "Entire image"
+msgstr "已打开的图像"
+
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+#, fuzzy
+msgid "Remove color"
+msgstr "原始来源的颜色"
+
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "圆"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr ""
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Solid outline"
+msgstr "实心轮廓"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Dashed outline"
+msgstr "虚线轮廓"
+
+#. if state_as_string == 'none':
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "No outline"
+msgstr "无轮廓"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr "填充"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Empty shape"
+msgstr "空形状"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Horizontal gradient"
+msgstr "水平渐变"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Vertical gradient"
+msgstr "垂直渐变"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Radial gradient"
+msgstr "径向渐变"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "矩形"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr "圆角矩形"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "椭圆"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "多边形"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "自由形状"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Close shape"
+msgstr "关闭图形"
+
+#: src/tools/ui/tool-text.ui
+msgid "Insert here"
+msgstr "在这里插入"
+
+#: src/tools/ui/tool-text.ui
+msgid "Font"
+msgstr "字体"
+
+#: src/tools/ui/tool-text.ui
+#, fuzzy
+msgid "Select a font…"
+msgstr "选择滤镜…"
+
+#: src/tools/ui/tool-text.ui
+msgid "Italic"
+msgstr "斜体"
+
+#: src/tools/ui/tool-text.ui
+msgid "Bold"
+msgstr "粗体"
+
+#. Context: the types of background behind the inserted text
+#: src/tools/ui/tool-text.ui
+msgid "Background"
+msgstr "无背景"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "No background"
+msgstr "无背景"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "Shadow"
+msgstr "阴影"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "Outline"
+msgstr "大纲"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "Rectangle background"
+msgstr "矩形背景"
+
+#: src/tools/classic_tools/tool_arc.py
+msgid "Curve"
+msgstr "曲线"
+
+#: src/tools/classic_tools/tool_arc.py
+msgid "Curve options"
+msgstr "曲线选项"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Dashed arrow"
+msgstr "虚线箭头"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "箭头"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+msgid "Dashed"
+msgstr "虚线"
+
+#: src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Highlighter options"
+msgstr "荧光笔"
+
+#: src/tools/classic_tools/tool_line.py
+msgid "Line"
+msgstr "直线"
+
+#: src/tools/classic_tools/tool_line.py
+msgid "Line options"
+msgstr "直线选项"
+
+#: src/tools/classic_tools/tool_paint.py
+msgid "Painting options"
+msgstr "绘画选项"
+
+#: src/tools/classic_tools/tool_paint.py
+msgid "Click on an area to replace its color by transparency"
+msgstr "单击一个区域以用透明色替换其颜色"
+
+#: src/tools/classic_tools/tool_paint.py
+#, fuzzy
+msgid "Click on the canvas to entirely paint it"
+msgstr "单击形状的第一个节点以将其关闭。"
+
+#: src/tools/classic_tools/tool_pencil.py
+msgid "Pencil"
+msgstr "铅笔"
+
+#: src/tools/classic_tools/tool_pencil.py
+msgid "Pencil options"
+msgstr "铅笔选项"
+
+#: src/tools/classic_tools/tool_points.py
+#, fuzzy
+msgid "Points options"
+msgstr "字体选项"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr ""
+
+#: src/tools/classic_tools/tool_shape.py
+msgid "Shape"
+msgstr "形状"
+
+#: src/tools/classic_tools/tool_shape.py
+msgid "Shape options"
+msgstr "形状选项"
+
+#: src/tools/classic_tools/tool_shape.py
+msgid "Click on the shape's first point to close it."
+msgstr "单击形状的第一个节点以将其关闭。"
+
+#: src/tools/classic_tools/tool_text.py
+msgid "Text"
+msgstr "文本"
+
+#. XXX use "text options" instead
+#: src/tools/classic_tools/tool_text.py
+msgid "Font options"
+msgstr "字体选项"
+
+#: src/tools/selection_tools/abstract_select.py
+msgid "Drag the selection or right-click on the canvas"
+msgstr "拖动选区或者右键单击画布"
+
+#: src/tools/selection_tools/abstract_select.py
+msgid "Select an area or right-click on the canvas"
+msgstr "选择一个区域或者右键单击画布"
+
+#: src/tools/selection_tools/select_rect.py
+msgid "Rectangle selection"
+msgstr "矩形选区"
+
+#: src/tools/transform_tools/abstract_transform_tool.py
+msgid "Error: invalid values"
+msgstr "错误:值无效"
+
+#: src/tools/transform_tools/tool_crop.py
+msgid "Cropping the selection"
+msgstr "裁切选区"
+
+#: src/tools/transform_tools/tool_crop.py
+msgid "Cropping the canvas"
+msgstr "裁切画布"
+
+#: src/tools/transform_tools/tool_filters.py
+msgid "Click on the image to preview the selected filter"
+msgstr "点击图像以预览选择的滤镜"
+
+#: src/tools/transform_tools/tool_rotate.py
+msgid "Rotating the selection"
+msgstr "旋转选区"
+
+#: src/tools/transform_tools/tool_rotate.py
+msgid "Rotating the canvas"
+msgstr "旋转画布"
+
+#: src/tools/transform_tools/tool_scale.py
+msgid "Scaling the selection"
+msgstr "拉伸选区"
+
+#: src/tools/transform_tools/tool_scale.py
+msgid "Scaling the canvas"
+msgstr "拉伸画布"
+
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr "偏斜"
+
+#~ msgid "Flip"
+#~ msgstr "翻转"
+
+#, fuzzy
+#~ msgid "Add semi-transparency"
+#~ msgstr "增加透明度"
+
+#~ msgid "Thin"
+#~ msgstr "窄"
+
+#~ msgid "Clipping"
+#~ msgstr "剪裁"
+
+#~ msgid "Edit"
+#~ msgstr "编辑"
+
+#~ msgid "Open a file"
+#~ msgstr "打开文件"
+
+#~ msgid "Save as"
+#~ msgstr "另存为"
+
+#~ msgid "Keyboard"
+#~ msgstr "键盘"
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 00000000..079113c4
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,2059 @@
+# Chinese translations for drawing package.
+# Copyright (C) 2020 THE drawing'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the drawing package.
+# Automatically generated, 2020.
+# OverflowCat <overflowcat@gmail.com>, 2020.
+# Yi-Jyun Pan <pan93412@gmail.com>, 2020.
+# Hsiu-Ming Chang <cges30901@gmail.com>, 2020.
+msgid ""
+msgstr ""
+"Project-Id-Version: drawing\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-11-28 10:12+0100\n"
+"PO-Revision-Date: 2020-08-29 14:15+0800\n"
+"Last-Translator: Hsiu-Ming Chang <cges30901@gmail.com>\n"
+"Language-Team: none\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.4.1\n"
+"X-ZhConverter: 繁化姬 dict-7114b8ff-r945 @ 2020/07/24 01:45:33 | https://"
+"zhconvert.org\n"
+
+#: data/com.github.maoschanz.drawing.desktop.in
+#: data/com.github.maoschanz.drawing.appdata.xml.in src/deco_manager.py
+#: src/main.py
+msgid "Drawing"
+msgstr "Drawing"
+
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "Simple drawing utility"
+msgstr "簡單的繪圖工具"
+
+#. Icon name, do not translate
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "com.github.maoschanz.drawing"
+msgstr "com.github.maoschanz.drawing"
+
+#. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons.
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "Paint;Sketch;Pencil;"
+msgstr "Paint;素描;鉛筆;"
+
+#. Context: answer to "where do you want to open the image?"
+#: data/com.github.maoschanz.drawing.desktop.in src/ui/app-menus.ui
+#: src/ui/shortcuts.ui src/ui/win-menus.ui src/window.py
+msgid "New Window"
+msgstr "新視窗"
+
+#: data/com.github.maoschanz.drawing.desktop.in src/ui/app-menus.ui
+#: src/ui/headerbar.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui src/ui/window.ui
+msgid "New Image"
+msgstr "新影像"
+
+#: data/com.github.maoschanz.drawing.desktop.in
+msgid "Edit Image in Clipboard"
+msgstr "在剪貼簿中編輯影像"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "A drawing application for the GNOME desktop"
+msgstr "為 GNOME 桌面環境打造的繪圖應用程式"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types."
+msgstr "Drawing 是一個基礎的影像編輯器,支援 PNG、JPEG 和 BMP 檔案格式。"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It allows you to draw or edit pictures with tools such as pencil, line or "
+"arc (with various options), selection (cut/copy/paste/drag/…), shapes "
+"(rectangle, circle, polygon, …), text insertion, resizing, cropping, "
+"rotating, …"
+msgstr ""
+"借助本應用程式,你可以圖畫、編輯圖片,並使用諸如鉛筆、直線、弧線(多種選"
+"項)、選擇(複製、貼上、剪下、拖曳等)、形狀(矩形、圓形、多邊形等)、插入文"
+"字、調整大小、裁切、旋轉、…"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.4 features several minor bug fixes, and various new translations."
+msgstr "0.6.4 版修復了一些小的錯誤,增加了新的翻譯。"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The value of the \"use anti-aliasing\" option is now restored when the app "
+"starts."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The version 0.6.3 improves the option to draw arrows: several issues have "
+"been fixed and double-ended arrows are now possible."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "There is also more options to draw using dashes."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"This version is finally compatible with older distributions (versions of "
+"GNOME libraries older than 3.30)."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6.2 features several minor bug fixes, and various new translations."
+msgstr "0.6.2 版修復了一些小的錯誤,增加了新的翻譯。"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'highlighter' tool now provides options to highlight light text on a "
+"dark background."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"When an image has been saved without its transparency, the app now suggests "
+"to reload the image from the disk. Also, the 'reload from disk' feature is "
+"now available with every possible window layout."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "An action to copy the whole image to clipboard has been added."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"It's now possible to remove transparency when saving PNG files too. And "
+"there are more color options to replace the transparent pixels."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"A new optional tool named \"Points\" has been added, it may help captioning "
+"pictures."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Minors bugs to the 'rotate' tool have been fixed."
+msgstr ""
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Version 0.6 is a major update, with various important changes. The app is "
+"more robust and has more tools:"
+msgstr "0.6 版是一次大更新。應用程式更強大而穩定,擁有更多工具:"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"Rectangle selection and freehand selection are now distinct tools, and the "
+"'rotate' tool now supports any angle and handles horizontal or vertical "
+"flipping."
+msgstr ""
+"矩形選擇和自由選擇現在是不同的工具;「旋轉」工具現在支援任何角度旋轉及水平或"
+"垂直翻轉。"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The numerous tools producing shapes (circle, rectangle, polygon, …), have "
+"been merged into a single, more consistent 'shape' tool, along with 'rounded "
+"rectangle' and 'ellipse'. Their filling options now include various types of "
+"gradients."
+msgstr ""
+"大量的形狀工具(圓,矩形,多邊形,…)已合併為一個單一的,更一致的「形狀」工"
+"具,還加入了圓角矩形和橢圓。填充選項現包括各種類型的漸層。"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The text tool can now write using most system fonts, thus allowing more "
+"complex characters to be used (e.g. Asian characters)."
+msgstr ""
+"文字工具現在可以使用大多數的系統字型書寫,因此可以使用更多複雜的字元(例如亞"
+"洲文字)。"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The 'saturate' tool has been replaced by 'filters', a more powerful tool "
+"with several types of blur, color inversion, pixelization, saturation and "
+"transparency."
+msgstr ""
+"「濾鏡」工具取代了「飽和度」,更為強大,支援模糊、反色、像素化、飽和度調整和"
+"透明度。"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "A fullscreen mode is now available."
+msgstr "現已提供全螢幕模式。"
+
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid ""
+"The most prominent new feature is the ability to zoom in (or out) on the "
+"image, using the minimap, the touchpad or the mouse wheel."
+msgstr "最突出的新功能是使用小地圖、觸控板或滑鼠滾輪縮放影像。"
+
+#. This is just my name, do not translate it.
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Romain F. T."
+msgstr "Romain F. T."
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The window and its primary menu"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The selection and the actions associated with it"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "Zooming in various shapes"
+msgstr ""
+
+#. Caption of a screenshot, for appstores
+#: data/com.github.maoschanz.drawing.appdata.xml.in
+msgid "The \"new image\" menu opened"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/preferences.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Preferences"
+msgstr "偏好設定"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/ui/window.ui
+msgid "Report a bug"
+msgstr "報告程式錯誤"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Shortcuts"
+msgstr "捷徑"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Help"
+msgstr "說明"
+
+#: src/ui/app-menus.ui
+msgid "About"
+msgstr "關於"
+
+#: src/ui/app-menus.ui
+msgid "Quit"
+msgstr "結束"
+
+#: src/ui/app-menus.ui
+msgid "_File"
+msgstr "檔案(_F)"
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
+msgid "Open an image"
+msgstr "開啟影像"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "New Blank Image"
+msgstr "新的空影像"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/new_image_dialog.py
+msgid "New Image With Custom Size"
+msgstr "自訂尺寸的新影像"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "New Image From Selection"
+msgstr "從選擇區域建立新影像"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "New Image From Clipboard"
+msgstr "從剪貼簿建立新影像"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Reload file"
+msgstr "重新載入檔案"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui src/properties.py
+msgid "Image properties"
+msgstr "影像屬性"
+
+#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
+#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui src/saving_manager.py
+msgid "Save"
+msgstr "儲存"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+#, fuzzy
+msgid "Save without transparency"
+msgstr "增加透明度"
+
+#: src/ui/app-menus.ui src/ui/headerbar-eos.ui src/ui/win-menus.ui
+#: src/saving_manager.py
+msgid "Save as…"
+msgstr "另存為…"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/win-menus.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Export as…"
+msgstr "匯出為…"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/ui/win-menus.ui
+msgid "Copy to clipboard"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui
+msgid "Print"
+msgstr "列印"
+
+#: src/ui/app-menus.ui
+msgid "Close Image"
+msgstr "關閉影像"
+
+#: src/ui/app-menus.ui
+msgid "Close Window"
+msgstr "關閉視窗"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Quit all windows"
+msgstr "結束所有視窗"
+
+#: src/ui/app-menus.ui
+msgid "_Edit"
+msgstr "編輯(_E)"
+
+#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
+#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui src/deco_manager.py
+msgid "Undo"
+msgstr "復原"
+
+#: src/ui/app-menus.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui
+#: src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/ui/win-menus.ui src/deco_manager.py
+msgid "Redo"
+msgstr "重做"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Rebuild from history"
+msgstr "從歷史記錄重建"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Select all"
+msgstr "全選"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Cut"
+msgstr "剪下"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Copy"
+msgstr "複製"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Delete"
+msgstr "刪除"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/ui/toolbar.ui src/ui/toolbar-symbolic.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+msgid "Paste"
+msgstr "貼上"
+
+#: src/ui/app-menus.ui src/ui/selection-manager.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/window.py
+#: src/optionsbars/selection/optionsbar-selection.ui
+msgid "Import"
+msgstr "匯入"
+
+#: src/ui/app-menus.ui
+msgid "_View"
+msgstr "檢視(_V)"
+
+#: src/ui/app-menus.ui
+msgid "Show the preview"
+msgstr "顯示預覽"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/preferences.py
+msgid "Zoom"
+msgstr "縮放"
+
+#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui
+msgid "Optimal Zoom"
+msgstr "最佳大小"
+
+#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Zoom Out"
+msgstr "縮小"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Original Zoom"
+msgstr "原始大小"
+
+#: src/ui/app-menus.ui src/ui/minimap.ui src/ui/shortcuts.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Zoom In"
+msgstr "放大"
+
+#. Context: this submenu is about moving the view to the
+#. left/right/top/bottom
+#: src/ui/app-menus.ui
+msgid "Position"
+msgstr "位置"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Left"
+msgstr "向左"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Up"
+msgstr "向上"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Down"
+msgstr "向下"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Go Right"
+msgstr "向右"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Tab at the left"
+msgstr "左側的分頁"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Tab at the right"
+msgstr "右側的分頁"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Refresh"
+msgstr "重新整理"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Fullscreen"
+msgstr "全螢幕"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "Exit fullscreen"
+msgstr "結束全螢幕"
+
+#: src/ui/app-menus.ui
+msgid "_Colors"
+msgstr "色彩(_C)"
+
+#: src/ui/app-menus.ui
+msgid "Edit Main Color…"
+msgstr "編輯主色彩…"
+
+#: src/ui/app-menus.ui
+msgid "Edit Secondary Color…"
+msgstr "編輯副色彩…"
+
+#: src/ui/app-menus.ui
+msgid "Use color editor by default"
+msgstr "預設使用色彩編輯器"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+#: src/optionsbars/classic/optionsbar-classic.ui
+msgid "Exchange colors"
+msgstr "交換色彩"
+
+#: src/ui/app-menus.ui
+msgid "Color application mode"
+msgstr "色彩套用模式"
+
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Normal"
+msgstr "預設"
+
+#. Context: possible ways to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Other modes"
+msgstr "其他模式"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Raw source color"
+msgstr "原始來源的色彩"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Highlight"
+msgstr "螢光筆"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Difference"
+msgstr "差異"
+
+#. Context: possible ways to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Photo-oriented modes"
+msgstr "匹配目標圖片"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Hue only"
+msgstr "僅色相"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Saturation only"
+msgstr "僅飽和度"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Hue and saturation"
+msgstr "色相和飽和度"
+
+#. Context: a possible way to apply the color to the canvas
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Luminosity only"
+msgstr "僅發光度"
+
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Don't use the colors but…"
+msgstr "不要使用色彩,而是…"
+
+#. To translators: this is a verb
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Blur"
+msgstr "模糊"
+
+#: src/ui/app-menus.ui src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Erase"
+msgstr "擦除"
+
+#: src/ui/app-menus.ui
+msgid "_Tools"
+msgstr "工具(_T)"
+
+#: src/ui/app-menus.ui
+msgid "Previous tool"
+msgstr "先前的工具"
+
+#: src/ui/app-menus.ui
+#, fuzzy
+msgid "Active tool"
+msgstr "其他工具"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+#: src/preferences.py
+msgid "Show tools names"
+msgstr "顯示工具名稱"
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+msgid "Bigger width"
+msgstr ""
+
+#: src/ui/app-menus.ui src/ui/shortcuts.ui
+#, fuzzy
+msgid "Smaller width"
+msgstr "預設寬度"
+
+#: src/ui/app-menus.ui src/window.py
+msgid "_Options"
+msgstr "選項(_O)"
+
+#: src/ui/app-menus.ui
+msgid "_Help"
+msgstr "說明(_H)"
+
+#. Context: open the index of all help pages
+#: src/ui/app-menus.ui
+msgid "Index"
+msgstr "索引"
+
+#. Context: open the help page about general use of the app
+#: src/ui/app-menus.ui
+msgid "Basic help"
+msgstr "基本說明"
+
+#. Context: open the help page about classic tools
+#: src/ui/app-menus.ui
+msgid "Help about tools"
+msgstr "關於工具的說明"
+
+#. Context: open the help page about transformation tools (crop,
+#. scale, rotate, filters, ...
+#: src/ui/app-menus.ui
+msgid "Canvas and selection"
+msgstr "畫布和選擇區域說明"
+
+#. Context: open the help page about the selection
+#: src/ui/app-menus.ui
+msgid "Help about selection"
+msgstr "關於選擇區域的說明"
+
+#: src/ui/app-menus.ui src/ui/win-menus.ui
+msgid "About Drawing"
+msgstr "關於 Drawing"
+
+#: src/ui/headerbar.ui src/ui/headerbar-eos.ui src/ui/toolbar.ui
+#: src/ui/toolbar-symbolic.ui src/window.py
+msgid "Open"
+msgstr "開啟"
+
+#: src/ui/headerbar-eos.ui
+msgid "Share the image"
+msgstr ""
+
+#: src/ui/new-image-dialog.ui src/ui/properties.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Width"
+msgstr "寬度"
+
+#: src/ui/new-image-dialog.ui src/ui/properties.ui
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "Height"
+msgstr "高度"
+
+#: src/ui/new-image-dialog.ui
+msgid "Color"
+msgstr "色彩"
+
+#: src/ui/new-image-dialog.ui
+msgid "Use these settings by default"
+msgstr "預設使用這些設定"
+
+#: src/ui/minimap.ui
+msgid "100%"
+msgstr "100%"
+
+#. To translators: it's a measure unit, it appears in tooltips over
+#. numerical inputs
+#: src/ui/properties.ui src/utilities.py
+msgid "pixels"
+msgstr "像素"
+
+#: src/ui/properties.ui
+msgid "centimeters"
+msgstr "公分"
+
+#: src/ui/properties.ui
+msgid "inches"
+msgstr "英寸"
+
+#: src/ui/preferences.ui
+msgid "Images"
+msgstr "影像"
+
+#: src/ui/preferences.ui src/ui/shortcuts.ui src/ui/win-menus.ui
+msgid "Tools"
+msgstr "工具"
+
+#: src/ui/preferences.ui
+msgid "Window"
+msgstr "視窗"
+
+#: src/ui/selection-manager.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Close selection"
+msgstr "關閉選擇區域"
+
+#: src/ui/selection-manager.ui src/ui/shortcuts.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Unselect"
+msgstr "取消選擇"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_crop.py
+msgid "Crop"
+msgstr "裁切"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_scale.py
+msgid "Scale"
+msgstr "縮放"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_rotate.py
+msgid "Rotate"
+msgstr "旋轉"
+
+#: src/ui/selection-manager.ui src/tools/ui/selection.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Filters"
+msgstr "濾鏡"
+
+#: src/ui/selection-manager.ui
+#: src/optionsbars/selection/optionsbar-selection.ui src/tools/ui/selection.ui
+msgid "Open As New Image"
+msgstr "以新影像開啟"
+
+#: src/ui/shortcuts.ui
+msgid "Keyboard Shortcuts"
+msgstr "鍵盤捷徑"
+
+#: src/ui/shortcuts.ui
+msgid "General"
+msgstr "通用"
+
+#: src/ui/shortcuts.ui
+msgid "Main menu"
+msgstr "主選單"
+
+#: src/ui/shortcuts.ui
+msgid "Image"
+msgstr "影像"
+
+#: src/ui/shortcuts.ui src/window.py
+msgid "Open a picture"
+msgstr "開啟圖片"
+
+#: src/ui/shortcuts.ui
+msgid "Reload image from disk"
+msgstr "從磁碟中重新載入影像"
+
+#: src/ui/shortcuts.ui src/saving_manager.py
+msgid "Save picture as…"
+msgstr "另存圖片為…"
+
+#: src/ui/shortcuts.ui
+msgid "Close the active image"
+msgstr "關閉使用中的影像"
+
+#: src/ui/shortcuts.ui
+#, fuzzy
+msgid "Open the tool options menu"
+msgstr "選項選單"
+
+#: src/ui/shortcuts.ui
+msgid "Back to previous tool"
+msgstr "回到先前的工具"
+
+#: src/ui/shortcuts.ui
+msgid "Apply a transformation"
+msgstr ""
+
+#: src/ui/shortcuts.ui
+msgid "History"
+msgstr "歷史記錄"
+
+#: src/ui/shortcuts.ui
+msgid "Selection"
+msgstr "選擇區域"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Delete the selection"
+msgstr "刪除選擇區域"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Import a file as the selection"
+msgstr "匯入檔案作為選擇區域"
+
+#: src/ui/shortcuts.ui
+msgid "Colors"
+msgstr "色彩"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Edit the main color (left click)"
+msgstr "編輯主色彩(左鍵點選)"
+
+#. Label displayed in the keyboard shortcuts dialog
+#: src/ui/shortcuts.ui
+msgid "Edit the secondary color (right click)"
+msgstr "編輯副色彩(右鍵點選)"
+
+#: src/ui/shortcuts.ui
+msgid "Tabs"
+msgstr "分頁"
+
+#. Context: this section of the shortcuts window is about moving
+#. the view to the left/right/top/bottom
+#: src/ui/shortcuts.ui
+msgid "Navigation"
+msgstr "導航"
+
+#: src/ui/shortcuts.ui
+msgid "Toggle the preview"
+msgstr "切換預覽"
+
+#: src/ui/shortcuts.ui
+msgid "Enter fullscreen mode"
+msgstr "進入全螢幕模式"
+
+#: src/ui/shortcuts.ui
+msgid "Exit fullscreen mode"
+msgstr "結束全螢幕模式"
+
+#: src/ui/shortcuts.ui
+msgid "Touch gestures"
+msgstr "觸控手勢"
+
+#: src/ui/win-menus.ui
+msgid "Troubleshoot selection"
+msgstr "對選擇區域排查問題"
+
+#: src/ui/win-menus.ui
+msgid "Other tools"
+msgstr "其他工具"
+
+#: src/ui/window.ui
+msgid "Error starting the application, please report this bug."
+msgstr "啟動應用程式時發生錯誤。請向我們報告這個問題。"
+
+#: src/deco_manager.py
+#, python-format
+msgid "Undo %s"
+msgstr "復原 %s"
+
+#: src/deco_manager.py
+#, python-format
+msgid "Redo %s"
+msgstr "重做 %s"
+
+#. Context: an error message
+#: src/image.py
+#, python-format
+msgid "New pixbuf empty, no change applied to %s"
+msgstr ""
+
+#: src/image.py
+msgid "Can't reload a never-saved file from the disk."
+msgstr "無法重新載入尚未儲存到磁碟的檔案。"
+
+#: src/image.py src/properties.py
+msgid "Unsaved file"
+msgstr "未儲存的檔案"
+
+#: src/new_image_dialog.py src/saving_manager.py src/window.py
+#: src/tools/utilities_paths.py src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+#: src/tools/ui/tool-text.ui
+msgid "Cancel"
+msgstr "取消"
+
+#. Context: Create a new image
+#: src/new_image_dialog.py
+msgid "Create"
+msgstr "建立"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Show the app version"
+msgstr "顯示應用程式版本"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Open a new window"
+msgstr "開啟新視窗"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Open a new tab"
+msgstr "開啟新分頁"
+
+#. Description of a command line option
+#: src/main.py
+msgid "Edit the clipboard content"
+msgstr "編輯剪貼簿內容"
+
+#: src/main.py
+msgid "This version isn't stable!"
+msgstr "該版本不是穩定版本!"
+
+#: src/main.py
+msgid "Report bugs or ideas"
+msgstr "回報問題或提交意見"
+
+#. To tranlators: "translate" this by a list of your names (one name
+#. per line), they will be displayed in the "about" dialog
+#: src/main.py
+msgid "translator-credits"
+msgstr ""
+"OverflowCat <overflowcat@gmail.com>, 2020.\n"
+"Yi-Jyun Pan <pan93412@gmail.com>, 2020.\n"
+"Hsiu-Ming Chang <cges30901@gmail.com>, 2020."
+
+#. To translators: this is credits for the icons, consider that "Art
+#. Libre" is proper name
+#: src/main.py
+msgid "GNOME's \"Art Libre\" icon set authors"
+msgstr "GNOME 的 Art Libre 圖示包作者"
+
+#: src/main.py
+msgid "A drawing application for the GNOME desktop."
+msgstr "為 GNOME 桌面環境打造的繪圖應用程式。"
+
+#: src/main.py
+msgid "Official webpage"
+msgstr "官方網頁"
+
+#: src/main.py
+#, fuzzy
+msgid "Error opening this file."
+msgstr "開啟此檔案時發生錯誤。你在找 %s 嗎?"
+
+#. This is an error message, %s is a better command suggestion
+#: src/main.py
+#, python-format
+msgid "Did you mean %s ?"
+msgstr ""
+
+#. This string displays the zoom level: %s will be replaced with a
+#. number, while %% will be rendered as the symbol '%'
+#: src/minimap.py
+#, python-format
+msgid "%s%%"
+msgstr "%s%%"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "New images"
+msgstr "新影像"
+
+#: src/preferences.py
+msgid "Default width"
+msgstr "預設寬度"
+
+#: src/preferences.py
+msgid "Default height"
+msgstr "預設高度"
+
+#. Context: this is the label that describes the initial color of an
+#. image (as set in the preferences or in the "new image with custom
+#. size" dialog). This is displayed in the context of editing or
+#. saving the image, but not when creating it.
+#: src/preferences.py src/saving_manager.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Default color"
+msgstr "預設色彩"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "Images saving"
+msgstr "影像儲存"
+
+#: src/preferences.py
+msgid "JPEG and BMP images can't handle transparency."
+msgstr "儲存為 JPEG 或 BMP 影像時透明度將會遺失。"
+
+#: src/preferences.py
+msgid ""
+"If you save your images in these formats, what do want to use to replace "
+"transparent pixels?"
+msgstr "儲存為這些格式時,你想要用什麼取代透明的像素?"
+
+#: src/preferences.py src/saving_manager.py src/utilities.py
+msgid "White"
+msgstr "白色"
+
+#: src/preferences.py src/saving_manager.py src/utilities.py
+msgid "Black"
+msgstr "黑色"
+
+#. Context: replace transparent pixels with [checkboard]. This is a
+#. pattern of dark and light greys.
+#: src/preferences.py src/saving_manager.py
+msgid "Checkboard"
+msgstr "棋盤格"
+
+#. Context: replace transparent pixels with [nothing]. In practice it
+#. means the alpha channel is just removed.
+#: src/preferences.py src/saving_manager.py
+msgid "Nothing"
+msgstr "空"
+
+#: src/preferences.py
+msgid "Ask before saving"
+msgstr "儲存前詢問"
+
+#: src/preferences.py
+msgid "You can zoom with Ctrl+scrolling, or only scrolling."
+msgstr "你可以使用 Ctrl+捲動來縮放,或僅僅捲動來縮放。"
+
+#: src/preferences.py
+msgid "See the user help manual for explanations."
+msgstr "請參見使用者說明手冊。"
+
+#: src/preferences.py
+msgid "Use 'Ctrl' to zoom"
+msgstr "使用「Ctrl」鍵縮放"
+
+#. Context: title of a section of the preferences (appearance of the
+#. tools: big icons?, labels?)
+#: src/preferences.py
+msgid "Appearance"
+msgstr "外觀"
+
+#: src/preferences.py
+msgid "Use big icons"
+msgstr "使用大圖示"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "Additional tools"
+msgstr "附加工具"
+
+#: src/preferences.py
+msgid ""
+"These tools are not as reliable and useful as they should be, so they are "
+"not all enabled by default."
+msgstr "這些工具並不如應有的那樣可靠和有用,所以它們在預設情況下並非全部啟用。"
+
+#. Context: this is the name of a tool, in the meaning "a rubber eraser"
+#: src/preferences.py src/tools/classic_tools/tool_eraser.py
+msgid "Eraser"
+msgstr "橡皮擦"
+
+#. Context: this is the name of a tool, a thick pencil dedicated to
+#. highlight text, for example in screenshots
+#: src/preferences.py src/tools/classic_tools/tool_highlight.py
+msgid "Highlighter"
+msgstr "螢光筆"
+
+#. Context: this is the name of a tool to draw little circles, crosses,
+#. or squares at precise points of the image, for example to draw a vague
+#. graph, or to highlight something in an image.
+#. A number can be added on the cross/circle/square to help captioning
+#. the elements of an image.
+#: src/preferences.py src/tools/classic_tools/tool_points.py
+msgid "Points"
+msgstr ""
+
+#. Context: this is a tool to select an area according to a shape that
+#. can be freely defined by the user.
+#: src/preferences.py src/tools/selection_tools/select_free.py
+msgid "Free selection"
+msgstr "自由選擇"
+
+#. Context: this is a tool to "magically" select an area depending on its
+#. color. For example clicking on a white pixel will select the
+#. surrounding area made of white pixels.
+#: src/preferences.py src/tools/selection_tools/select_color.py
+msgid "Color selection"
+msgstr "色彩選擇"
+
+#. Context: this is a tool to pick a RGBA color in the image in order to
+#. use it to draw with other tools
+#: src/preferences.py src/tools/classic_tools/tool_picker.py
+msgid "Color Picker"
+msgstr "取色器"
+
+#. Context: the name of a tool to fill an area of one color with an other
+#: src/preferences.py src/tools/classic_tools/tool_paint.py
+msgid "Paint"
+msgstr "筆刷"
+
+#. Context: title of a section of the preferences
+#: src/preferences.py
+msgid "Advanced options"
+msgstr "進階選項"
+
+#: src/preferences.py
+msgid "Preview size"
+msgstr "預覽大小"
+
+#. This label will not be displayed in the UI of stable versions
+#: src/preferences.py
+msgid "Development features"
+msgstr "開發中的功能"
+
+#: src/preferences.py
+msgid "Background color"
+msgstr "背景色彩"
+
+#. Context: title of a section of the preferences. It corresponds to the
+#. window layout (header-bar? tool-bar? menu-bar?)
+#: src/preferences.py
+msgid "Layout"
+msgstr "布局"
+
+#: src/preferences.py
+msgid "The recommended value is \"Automatic\"."
+msgstr "推薦的值為「自動」。"
+
+#. It has to match what's written in the previous string.
+#: src/preferences.py
+msgid "Automatic"
+msgstr "自動"
+
+#: src/preferences.py
+msgid "Compact"
+msgstr "緊湊"
+
+#: src/preferences.py
+msgid "elementary OS"
+msgstr "elementary OS"
+
+#. "Legacy" is about the window layout, it means menubar+toolbar, you
+#. can translate it like if it was "Traditional"
+#: src/preferences.py
+msgid "Legacy"
+msgstr "舊版介面"
+
+#. "Legacy" is about the window layout, it means menubar+toolbar, you
+#. can translate it like if it was "Traditional".
+#. Symbolic icons are monochrome icons.
+#: src/preferences.py
+msgid "Legacy (symbolic icons)"
+msgstr "舊版介面(符號圖示)"
+
+#: src/preferences.py
+msgid "Menubar only"
+msgstr "僅選單"
+
+#: src/preferences.py
+msgid "Toolbar only"
+msgstr "僅工具列"
+
+#. Symbolic icons are monochrome icons.
+#: src/preferences.py
+msgid "Toolbar only (symbolic icons)"
+msgstr "僅工具列(符號圖示)"
+
+#: src/properties.py
+#, python-format
+msgid "%s px"
+msgstr "%s 像素"
+
+#: src/properties.py
+#, python-format
+msgid "%s cm"
+msgstr "%s 公分"
+
+#: src/properties.py
+#, python-format
+msgid "%s in"
+msgstr "%s 英寸"
+
+#. Context: the path of the edited file
+#: src/properties.py
+msgid "Path"
+msgstr "路徑"
+
+#. Context: the file format of the edited file
+#: src/properties.py
+msgid "Format"
+msgstr "格式"
+
+#: src/properties.py
+msgid "Colorspace"
+msgstr "色彩空間"
+
+#. Context: an invalid colorspace format
+#: src/properties.py
+msgid "Invalid format"
+msgstr "無效格式"
+
+#. Context: an error message
+#: src/saving_manager.py
+#, python-format
+msgid "Failed to save %s"
+msgstr "儲存 %s 失敗"
+
+#. Context: Untitled(.png) is the default name of a newly saved file
+#: src/saving_manager.py
+msgid "Untitled"
+msgstr "未命名"
+
+#. Context: the sentence "There are unsaved modifications to %s."
+#: src/saving_manager.py
+msgid "this picture"
+msgstr "此圖片"
+
+#: src/saving_manager.py
+msgid "Discard"
+msgstr "丟棄"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/saving_manager.py src/window.py
+#, python-format
+msgid "There are unsaved modifications to %s."
+msgstr "%s 有未儲存的修改。"
+
+#: src/saving_manager.py
+msgid ""
+"A part of the image is selected, and the pixels beneath the selection are "
+"blank."
+msgstr ""
+
+#: src/saving_manager.py
+msgid "Modifications from the current tool haven't been applied."
+msgstr ""
+
+#: src/saving_manager.py
+#, fuzzy
+msgid "Do you want to save anyway?"
+msgstr "您想在哪裡開啟 %s?"
+
+#. Context: confirm replacing transparent pixels with the selected color
+#: src/saving_manager.py
+msgid "Replace"
+msgstr "取代"
+
+#: src/saving_manager.py
+msgid "This file format doesn't support transparent colors."
+msgstr "這種檔案格式不支援透明色。"
+
+#: src/saving_manager.py
+msgid "You can save the image as a PNG file, or replace transparency with:"
+msgstr "可以將影像另存為 PNG 檔案,或將透明部分取代為:"
+
+#: src/saving_manager.py
+msgid "Replace transparency with:"
+msgstr "將透明部分取代為:"
+
+#: src/utilities.py
+msgid "Transparent"
+msgstr "透明"
+
+#: src/utilities.py
+#, python-format
+msgid "%s%% transparent"
+msgstr "%s%% 透明"
+
+#: src/utilities.py
+msgid "Grey"
+msgstr "灰色"
+
+#: src/utilities.py
+msgid "Orange"
+msgstr "橘色"
+
+#: src/utilities.py
+msgid "Brown"
+msgstr "棕色"
+
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably brown.
+#: src/utilities.py
+msgid "Probably brown"
+msgstr "可能為棕色"
+
+#: src/utilities.py
+msgid "Red"
+msgstr "紅色"
+
+#: src/utilities.py
+msgid "Green"
+msgstr "綠色"
+
+#: src/utilities.py
+msgid "Blue"
+msgstr "藍色"
+
+#: src/utilities.py
+msgid "Yellow"
+msgstr "黃色"
+
+#: src/utilities.py
+msgid "Magenta"
+msgstr "品紅"
+
+#: src/utilities.py
+msgid "Purple"
+msgstr "紫色"
+
+#: src/utilities.py
+msgid "Cyan"
+msgstr "青色"
+
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app thinks it's probably teal.
+#. You can translate "teal" with the name of approaching color, like
+#. turquoise or green-blue.
+#: src/utilities.py
+msgid "Probably teal"
+msgstr "可能為綠松石色"
+
+#. Context: the name of the current color is provided as a tooltip to
+#. help users with color blindness, but some color names don't have a
+#. clear definition. Here, the app can't find a corresponding color name.
+#: src/utilities.py
+msgid "Unknown color name"
+msgstr "未知色彩"
+
+#: src/utilities.py
+msgid "All pictures"
+msgstr "所有圖片"
+
+#: src/utilities.py
+msgid "PNG images"
+msgstr "PNG 影像"
+
+#: src/utilities.py
+msgid "JPEG images"
+msgstr "JPEG 影像"
+
+#: src/utilities.py
+msgid "BMP images"
+msgstr "BMP 影像"
+
+#. To translators: it appears in tooltips over numerical inputs
+#: src/utilities.py
+msgid "percents"
+msgstr "百分比"
+
+#. To translators: it's the angle measure unit, it appears in a tooltip
+#. over a numerical input
+#: src/utilities.py
+msgid "degrees"
+msgstr "度"
+
+#: src/utilities.py
+#, fuzzy, python-format
+msgid "%s isn't an image."
+msgstr "開啟影像"
+
+#: src/utilities.py
+msgid "Sorry, WEBP images can't be loaded by this app."
+msgstr ""
+
+#. Context: an error message, %s is a file path
+#: src/utilities.py
+#, python-format
+msgid "Despite its name, %s is a WEBP file."
+msgstr ""
+
+#. Context: an error message
+#: src/window.py
+#, python-format
+msgid "Failed to load tool: %s"
+msgstr "載入工具失敗:%s"
+
+#: src/window.py
+msgid "The clipboard doesn't contain any image."
+msgstr ""
+
+#: src/window.py
+msgid "Modifications will take effect in the next new window."
+msgstr "修改將在下一個新視窗生效。"
+
+#: src/window.py src/tools/abstract_tool.py
+#: src/optionsbars/classic/optionsbar-classic.ui
+#: src/tools/classic_tools/tool_eraser.py
+msgid "No options"
+msgstr "無選項"
+
+#: src/window.py
+msgid "Opened images"
+msgstr "已開啟的影像"
+
+#: src/window.py
+#, fuzzy, python-format
+msgid "Error: pane invalid for '%s', please report this bug."
+msgstr "啟動應用程式時發生錯誤。請向我們報告這個問題。"
+
+#: src/window.py
+#, python-format
+msgid "Loading %s"
+msgstr "正在載入 %s"
+
+#. Context: answer to "where do you want to open the image?"
+#: src/window.py
+msgid "New Tab"
+msgstr "新分頁"
+
+#: src/window.py
+msgid "Discard changes"
+msgstr "丟棄更改"
+
+#. Context: %s will be replaced by the name of a file.
+#: src/window.py
+#, python-format
+msgid "Where do you want to open %s?"
+msgstr "您想在哪裡開啟 %s?"
+
+#. Context for translation:
+#. "What do you want to do with *these files*?"
+#: src/window.py
+msgid "these files"
+msgstr "這些檔案"
+
+#. Context: %s will be replaced by the name of a file. The possible
+#. answers are "cancel", "open", and "import"
+#: src/window.py
+#, python-format
+msgid "What do you want to do with %s?"
+msgstr "你想要對 %s 做什麼?"
+
+#: src/window.py
+#, fuzzy
+msgid "Image copied to clipboard"
+msgstr "在剪貼簿中編輯影像"
+
+#: src/window.py
+msgid "The image changed on the disk, do you want to reload it?"
+msgstr ""
+
+#: src/window.py
+#, fuzzy
+msgid "Reload"
+msgstr "重新載入檔案"
+
+#: src/window.py
+msgid "Import a picture"
+msgstr "匯入圖片"
+
+#: src/window.py
+msgid "Required tool is not available"
+msgstr "所需的工具不可用"
+
+#. Context: an error message
+#: src/tools/abstract_tool.py
+#, python-brace-format
+msgid "Can't start operation: wrong tool id (expected {0}, got {1})"
+msgstr ""
+
+#: src/tools/utilities_paths.py
+msgid "Continue"
+msgstr "繼續"
+
+#: src/tools/utilities_paths.py
+msgid "The area seems poorly delimited, or is very complex."
+msgstr "該區域似乎很難劃定邊界,或者非常複雜。"
+
+#: src/tools/utilities_paths.py
+msgid "This algorithm may not be able to manage the wanted area."
+msgstr "該演算法可能無法處理所需區域。"
+
+#: src/tools/utilities_paths.py
+msgid "Do you want to abort the operation, or to let the tool struggle ?"
+msgstr "您想要中止該操作嗎?"
+
+#. Context: fill a shape with the color of the left click
+#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Main color"
+msgstr "主色彩"
+
+#. Context: fill a shape with the color of the right click
+#: src/optionsbars/classic/optionsbar_color_popover.py
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Secondary color"
+msgstr "副色彩"
+
+#: src/optionsbars/classic/optionsbar-classic.ui
+msgid "Tool size"
+msgstr "工具大小"
+
+#: src/optionsbars/classic/optionsbar-classic.ui
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-text.ui
+msgid "Preview"
+msgstr "預覽"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "How the color will be applied to the existing pixels"
+msgstr "色彩如何套用於現有像素"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Back to the palette"
+msgstr "返回調色板"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Palette"
+msgstr "調色板"
+
+#: src/optionsbars/classic/optionsbar-color-popover.ui
+msgid "Use this editor by default"
+msgstr "預設使用此編輯器"
+
+#: src/optionsbars/selection/optionsbar-selection.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+msgid "More actions"
+msgstr "更多操作"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/optionsbars/transform/optionsbar-rotate.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+#: src/optionsbars/transform/optionsbar-skew.ui src/tools/ui/tool-crop.ui
+#: src/tools/ui/tool-filters.ui src/tools/ui/tool-rotate.ui
+#: src/tools/ui/tool-scale.ui src/tools/ui/tool-skew.ui
+msgid "Apply"
+msgstr "套用"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-scale.ui
+msgid "More options"
+msgstr "更多選項"
+
+#: src/optionsbars/transform/optionsbar-crop.ui src/tools/ui/tool-crop.ui
+msgid "Expand with…"
+msgstr "擴展使用…"
+
+#: src/optionsbars/transform/optionsbar-crop.ui
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-crop.ui
+msgid "Transparency"
+msgstr "透明"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Select a filter…"
+msgstr "選擇濾鏡…"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+msgid "Saturation"
+msgstr "飽和度"
+
+#: src/optionsbars/transform/optionsbar-filters.ui
+msgid "Blur radius"
+msgstr "模糊半徑"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Change saturation"
+msgstr "更改飽和度"
+
+#. Context: a filter adding like a light veil on the image
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Veil"
+msgstr "面紗"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/ui/tool-highlight.ui src/tools/transform_tools/tool_filters.py
+msgid "Add transparency"
+msgstr "增加透明度"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Invert colors"
+msgstr "反轉色彩"
+
+#. Context: the title of the menu with various types of blurring
+#. filters and their options.
+#: src/optionsbars/transform/optionsbar-filters.ui
+msgid "Blurring"
+msgstr "模糊"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Fast blur"
+msgstr "快速模糊"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Slow blur"
+msgstr "慢速模糊"
+
+#. Context: a filter that censors the image with some kind of tiles
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+#: src/tools/transform_tools/tool_filters.py
+msgid "Pixelization"
+msgstr "像素化"
+
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "Blur direction"
+msgstr "模糊方向"
+
+#. Context: about the blur direction
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "Horizontal"
+msgstr "水平"
+
+#. Context: about the blur direction
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "Vertical"
+msgstr "垂直"
+
+#. Context: about the blur direction
+#: src/optionsbars/transform/optionsbar-filters.ui src/tools/ui/tool-filters.ui
+msgid "No direction"
+msgstr "無方向"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui
+msgid "Angle (degrees)"
+msgstr "角(角度)"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui
+msgid "Angle"
+msgstr "角"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Rotate left"
+msgstr "向左旋轉"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Rotate right"
+msgstr "向右旋轉"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Flip horizontally"
+msgstr "水平翻轉"
+
+#: src/optionsbars/transform/optionsbar-rotate.ui src/tools/ui/tool-rotate.ui
+msgid "Flip vertically"
+msgstr "垂直翻轉"
+
+#. Context: the title of a menu to chose how the image will be scaled
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "Keep proportions"
+msgstr "保持縱橫比"
+
+#. Context: an item in a menu whose title is "Keep proportions"
+#. Context for translations: "Always [keep proportions]"
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "Always"
+msgstr "總是"
+
+#. Context: an item in a menu whose title is "Keep proportions"
+#. Context for translations: "[Keep proportions only] when scaling from corners"
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "When scaling from corners"
+msgstr "從角落縮放時"
+
+#. Context: an item in a menu whose title is "Keep proportions"
+#. Context for translations: "Never [keep proportions]"
+#: src/optionsbars/transform/optionsbar-scale.ui src/tools/ui/tool-scale.ui
+msgid "Never"
+msgstr "從不"
+
+#: src/optionsbars/transform/optionsbar-skew.ui
+msgid "Horizontal deformation"
+msgstr "水平變形"
+
+#: src/optionsbars/transform/optionsbar-skew.ui
+msgid "Vertical deformation"
+msgstr "垂直變形"
+
+#: src/tools/ui/selection.ui
+#, fuzzy
+msgid "Transform"
+msgstr "透明"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Line shape"
+msgstr "線條形狀"
+
+#. Context: this is the name of a line shape
+#. Default values
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui src/tools/classic_tools/tool_arc.py
+#: src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_pencil.py
+msgid "Round"
+msgstr "圓形"
+
+#. Context: this is the name of a line shape
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui src/tools/ui/tool-points.ui
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+#: src/tools/classic_tools/tool_points.py
+msgid "Square"
+msgstr "方形"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "No arrow"
+msgstr "箭頭"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+msgid "Simple arrow"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#, fuzzy
+msgid "Double arrow"
+msgstr "虛線箭頭"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "No dashes"
+msgstr "使用虛線"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Simple dashes"
+msgstr "使用虛線"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Long dashes"
+msgstr "使用虛線"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+#, fuzzy
+msgid "Short dashes"
+msgstr "使用虛線"
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-line.ui
+#: src/tools/ui/tool-pencil.ui
+msgid "Alternated dashes"
+msgstr ""
+
+#: src/tools/ui/tool-arc.ui src/tools/ui/tool-highlight.ui
+#: src/tools/ui/tool-line.ui src/tools/ui/tool-pencil.ui
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+msgid "Antialiasing"
+msgstr "反鋸齒"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Dark text on light background"
+msgstr "矩形背景"
+
+#: src/tools/ui/tool-highlight.ui src/tools/classic_tools/tool_highlight.py
+msgid "Light text on dark background"
+msgstr ""
+
+#: src/tools/ui/tool-line.ui
+msgid "Color gradient"
+msgstr "色彩漸層"
+
+#. Context: title for the list of the possible painting algorithms.
+#: src/tools/ui/tool-paint.ui
+msgid "Behavior"
+msgstr "行為"
+
+#. Context: this is one of the possible painting algorithms. It
+#. tries to draw a shape around the area to paint, and fill it
+#. with the new color. The shape is approximative so it's not the
+#. default behavior of the tool.
+#: src/tools/ui/tool-paint.ui
+msgid "Encircle and fill"
+msgstr "包圍並填充"
+
+#. Context: this is one of the possible painting algorithms. It
+#. erases the color the user clicked, and then replace transparent
+#. pixels with the new color.
+#: src/tools/ui/tool-paint.ui
+msgid "Erase and replace"
+msgstr "擦除並取代"
+
+#. Context: this is one of the possible painting algorithms. It
+#. paints over the entire image, instead of following the shapes
+#. already drawn.
+#: src/tools/ui/tool-paint.ui
+#, fuzzy
+msgid "Entire image"
+msgstr "已開啟的影像"
+
+#. Context: this is one of the possible painting algorithms. It
+#. doesn't really paint, instead it erases the color the user
+#. clicked. For example to cut out an object from its white
+#. background.
+#: src/tools/ui/tool-paint.ui
+#, fuzzy
+msgid "Remove color"
+msgstr "原始來源的色彩"
+
+#: src/tools/ui/tool-points.ui
+msgid "Dots type"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/ui/tool-shape.ui
+#: src/tools/classic_tools/tool_points.py src/tools/classic_tools/tool_shape.py
+msgid "Circle"
+msgstr "圓"
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "Cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui src/tools/classic_tools/tool_points.py
+msgid "X-shaped cross"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Include a number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Next number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Reset number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Decrement number"
+msgstr ""
+
+#: src/tools/ui/tool-points.ui
+msgid "Increment number"
+msgstr ""
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Solid outline"
+msgstr "實心輪廓"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Dashed outline"
+msgstr "虛線輪廓"
+
+#. if state_as_string == 'none':
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "No outline"
+msgstr "無輪廓"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Filling"
+msgstr "填充"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Empty shape"
+msgstr "空形狀"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Horizontal gradient"
+msgstr "水平漸層"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Vertical gradient"
+msgstr "垂直漸層"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Radial gradient"
+msgstr "放射狀漸層"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rectangle"
+msgstr "矩形"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Rounded rectangle"
+msgstr "圓角矩形"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Oval"
+msgstr "橢圓"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Polygon"
+msgstr "多邊形"
+
+#: src/tools/ui/tool-shape.ui src/tools/classic_tools/tool_shape.py
+msgid "Free shape"
+msgstr "自由形狀"
+
+#: src/tools/ui/tool-shape.ui
+msgid "Close shape"
+msgstr "關閉圖形"
+
+#: src/tools/ui/tool-text.ui
+msgid "Insert here"
+msgstr "在這裡插入"
+
+#: src/tools/ui/tool-text.ui
+msgid "Font"
+msgstr "字型"
+
+#: src/tools/ui/tool-text.ui
+msgid "Select a font…"
+msgstr "選擇字型…"
+
+#: src/tools/ui/tool-text.ui
+msgid "Italic"
+msgstr "斜體"
+
+#: src/tools/ui/tool-text.ui
+msgid "Bold"
+msgstr "粗體"
+
+#. Context: the types of background behind the inserted text
+#: src/tools/ui/tool-text.ui
+msgid "Background"
+msgstr "背景"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "No background"
+msgstr "無背景"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "Shadow"
+msgstr "陰影"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "Outline"
+msgstr "邊框"
+
+#. Context: a type of background behind the inserted text
+#: src/tools/ui/tool-text.ui src/tools/classic_tools/tool_text.py
+msgid "Rectangle background"
+msgstr "矩形背景"
+
+#: src/tools/classic_tools/tool_arc.py
+msgid "Curve"
+msgstr "曲線"
+
+#: src/tools/classic_tools/tool_arc.py
+msgid "Curve options"
+msgstr "曲線選項"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Dashed arrow"
+msgstr "虛線箭頭"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+msgid "Arrow"
+msgstr "箭頭"
+
+#: src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_line.py
+#: src/tools/classic_tools/tool_pencil.py
+msgid "Dashed"
+msgstr "虛線"
+
+#: src/tools/classic_tools/tool_highlight.py
+#, fuzzy
+msgid "Highlighter options"
+msgstr "螢光筆"
+
+#: src/tools/classic_tools/tool_line.py
+msgid "Line"
+msgstr "直線"
+
+#: src/tools/classic_tools/tool_line.py
+msgid "Line options"
+msgstr "直線選項"
+
+#: src/tools/classic_tools/tool_paint.py
+msgid "Painting options"
+msgstr "繪畫選項"
+
+#: src/tools/classic_tools/tool_paint.py
+msgid "Click on an area to replace its color by transparency"
+msgstr "點選一個區域以用透明色取代其色彩"
+
+#: src/tools/classic_tools/tool_paint.py
+#, fuzzy
+msgid "Click on the canvas to entirely paint it"
+msgstr "點選形狀的第一個節點以將其關閉。"
+
+#: src/tools/classic_tools/tool_pencil.py
+msgid "Pencil"
+msgstr "鉛筆"
+
+#: src/tools/classic_tools/tool_pencil.py
+msgid "Pencil options"
+msgstr "鉛筆選項"
+
+#: src/tools/classic_tools/tool_points.py
+#, fuzzy
+msgid "Points options"
+msgstr "字型選項"
+
+#: src/tools/classic_tools/tool_points.py
+#, python-format
+msgid "Next number: %s"
+msgstr ""
+
+#: src/tools/classic_tools/tool_shape.py
+msgid "Shape"
+msgstr "形狀"
+
+#: src/tools/classic_tools/tool_shape.py
+msgid "Shape options"
+msgstr "形狀選項"
+
+#: src/tools/classic_tools/tool_shape.py
+msgid "Click on the shape's first point to close it."
+msgstr "點選形狀的第一個節點以將其關閉。"
+
+#: src/tools/classic_tools/tool_text.py
+msgid "Text"
+msgstr "文字"
+
+#. XXX use "text options" instead
+#: src/tools/classic_tools/tool_text.py
+msgid "Font options"
+msgstr "字型選項"
+
+#: src/tools/selection_tools/abstract_select.py
+msgid "Drag the selection or right-click on the canvas"
+msgstr "拖動選擇區域或者右鍵點選畫布"
+
+#: src/tools/selection_tools/abstract_select.py
+msgid "Select an area or right-click on the canvas"
+msgstr "選擇一個區域或者右鍵點選畫布"
+
+#: src/tools/selection_tools/select_rect.py
+msgid "Rectangle selection"
+msgstr "矩形選擇區域"
+
+#: src/tools/transform_tools/abstract_transform_tool.py
+msgid "Error: invalid values"
+msgstr "錯誤:數值無效"
+
+#: src/tools/transform_tools/tool_crop.py
+msgid "Cropping the selection"
+msgstr "裁切選擇區域"
+
+#: src/tools/transform_tools/tool_crop.py
+msgid "Cropping the canvas"
+msgstr "裁切畫布"
+
+#: src/tools/transform_tools/tool_filters.py
+msgid "Click on the image to preview the selected filter"
+msgstr "點選影像以預覽選擇的濾鏡"
+
+#: src/tools/transform_tools/tool_rotate.py
+msgid "Rotating the selection"
+msgstr "旋轉選擇區域"
+
+#: src/tools/transform_tools/tool_rotate.py
+msgid "Rotating the canvas"
+msgstr "旋轉畫布"
+
+#: src/tools/transform_tools/tool_scale.py
+msgid "Scaling the selection"
+msgstr "縮放選擇區域"
+
+#: src/tools/transform_tools/tool_scale.py
+msgid "Scaling the canvas"
+msgstr "縮放畫布"
+
+#. In this context, "Skew" is the name of the tool changing rectangles
+#. into parallelograms (= tilt, slant, bend). Named after MS Paint's
+#. "Stretch/Skew" dialog.
+#: src/tools/transform_tools/tool_skew.py
+msgid "Skew"
+msgstr "扭曲"
+
+#~ msgid "Flip"
+#~ msgstr "翻轉"
+
+#~ msgid "Edit"
+#~ msgstr "編輯"
+
+#~ msgid "Open a file"
+#~ msgstr "開啟檔案"
+
+#~ msgid "Save as"
+#~ msgstr "另存為"
diff --git a/src/deco_manager.py b/src/deco_manager.py
index c64c37ab..05b05fd9 100644
--- a/src/deco_manager.py
+++ b/src/deco_manager.py
@@ -42,10 +42,10 @@ class DrDecoManagerMenubar():
self._main_menu_btn.set_active(not self._main_menu_btn.get_active())
def set_undo_label(self, label):
- pass
+ pass # TODO update "undo" item in the menubar
def set_redo_label(self, label):
- pass
+ pass # TODO update "redo" item in the menubar
############################################################################
# Adaptability #############################################################
@@ -89,10 +89,12 @@ class DrDecoManagerHeaderbar(DrDecoManagerMenubar):
self._hidable_widget_1 = builder.get_object('hidable1')
self._hidable_widget_2 = builder.get_object('hidable2')
- # Used by other methods
+ # Mandatory widget name, used for the `win.main_menu` action
+ self._main_menu_btn = builder.get_object('main_menu_btn')
+
+ # History buttons whose tooltips depends on the last operation
self._undo_btn = builder.get_object('undo_btn')
self._redo_btn = builder.get_object('redo_btn')
- self._main_menu_btn = builder.get_object('main_menu_btn')
# Quite extreme as a precaution, will be more precise later
self._limit_size = 750
@@ -120,14 +122,16 @@ class DrDecoManagerHeaderbar(DrDecoManagerMenubar):
hidden here, and menus are shorter."""
self._short_primary_menu = builder.get_object('minimal-window-menu')
self._long_primary_menu = builder.get_object('short-window-menu')
- save_as_menubtn = builder.get_object('save_as_menubtn')
+ save_as_menubtn = builder.get_object('hidable1')
save_as_menubtn.set_menu_model(builder.get_object('save-section'))
+ share_menubtn = builder.get_object('hidable2')
+ share_menubtn.set_menu_model(builder.get_object('share-section'))
new_btn = builder.get_object('new_btn')
new_btn.set_menu_model(builder.get_object('new-image-menu'))
- self._manual_correction = 50
+ self._manual_correction = -50
def remove_from_ui(self):
- return False
+ return self._is_narrow
############################################################################
@@ -137,12 +141,14 @@ class DrDecoManagerHeaderbar(DrDecoManagerMenubar):
self._widget.set_subtitle(subtitle_label)
def set_undo_label(self, label):
+ super().set_undo_label(label)
if label is None:
self._undo_btn.set_tooltip_text(_("Undo"))
else:
self._undo_btn.set_tooltip_text(_("Undo %s") % label)
def set_redo_label(self, label):
+ super().set_redo_label(label)
if label is None:
self._redo_btn.set_tooltip_text(_("Redo"))
else:
@@ -163,6 +169,8 @@ class DrDecoManagerHeaderbar(DrDecoManagerMenubar):
widgets_width = widgets_width + self._manual_correction
self._limit_size = widgets_width * 2.5 # 100% arbitrary
# print(self._limit_size)
+ self.set_compact(True)
+ self.adapt_to_window_size()
def adapt_to_window_size(self):
can_expand = (self._widget.get_allocated_width() > self._limit_size)
@@ -205,9 +213,10 @@ class DrDecoManagerToolbar(DrDecoManagerMenubar):
window.toolbar_box.pack_start(self._widget, True, True, 0)
window.toolbar_box.show_all()
- # Mandatory widget name, used for the `win.main_menu` action.
+ # Mandatory widget name, used for the `win.main_menu` action
self._main_menu_btn = builder.get_object('main_menu_btn')
+ # History buttons whose tooltips depends on the last operation
# XXX maybe later
# self._undo_btn = builder.get_object('undo_btn')
# self._redo_btn = builder.get_object('redo_btn')
@@ -233,6 +242,20 @@ class DrDecoManagerToolbar(DrDecoManagerMenubar):
self._widget.destroy()
return False
+ # def set_undo_label(self, label):
+ # super().set_undo_label(label)
+ # if label is None:
+ # self._undo_btn.set_tooltip_text(_("Undo"))
+ # else:
+ # self._undo_btn.set_tooltip_text(_("Undo %s") % label)
+
+ # def set_redo_label(self, label):
+ # super().set_redo_label(label)
+ # if label is None:
+ # self._redo_btn.set_tooltip_text(_("Redo"))
+ # else:
+ # self._redo_btn.set_tooltip_text(_("Redo %s") % label)
+
############################################################################
################################################################################
diff --git a/src/drawing.gresource.xml b/src/drawing.gresource.xml
index 8fa05275..95ac5a03 100644
--- a/src/drawing.gresource.xml
+++ b/src/drawing.gresource.xml
@@ -32,17 +32,19 @@
<file>optionsbars/classic/optionsbar-classic.ui</file>
<file>optionsbars/classic/optionsbar-color-popover.ui</file>
<file>optionsbars/selection/optionsbar-selection.ui</file>
- <file>optionsbars/canvas/optionsbar-crop.ui</file>
- <file>optionsbars/canvas/optionsbar-filters.ui</file>
- <file>optionsbars/canvas/optionsbar-rotate.ui</file>
- <file>optionsbars/canvas/optionsbar-scale.ui</file>
- <file>optionsbars/canvas/optionsbar-skew.ui</file>
+ <file>optionsbars/transform/optionsbar-crop.ui</file>
+ <file>optionsbars/transform/optionsbar-filters.ui</file>
+ <file>optionsbars/transform/optionsbar-rotate.ui</file>
+ <file>optionsbars/transform/optionsbar-scale.ui</file>
+ <file>optionsbars/transform/optionsbar-skew.ui</file>
<file>tools/ui/tool-arc.ui</file>
<file>tools/ui/tool-experiment.ui</file>
<file>tools/ui/tool-line.ui</file>
+ <file>tools/ui/tool-highlight.ui</file>
<file>tools/ui/tool-paint.ui</file>
<file>tools/ui/tool-pencil.ui</file>
+ <file>tools/ui/tool-points.ui</file>
<file>tools/ui/tool-shape.ui</file>
<file>tools/ui/tool-text.ui</file>
@@ -66,8 +68,9 @@
<file>tools/icons/tool-line-symbolic.svg</file>
<file>tools/icons/tool-magic-symbolic.svg</file>
<file>tools/icons/tool-oval-symbolic.svg</file>
- <file>tools/icons/tool-pencil-symbolic.svg</file>
<file>tools/icons/tool-paint-symbolic.svg</file>
+ <file>tools/icons/tool-pencil-symbolic.svg</file>
+ <file>tools/icons/tool-points-symbolic.svg</file>
<file>tools/icons/tool-polygon-symbolic.svg</file>
<file>tools/icons/tool-rectangle-symbolic.svg</file>
<file>tools/icons/tool-roundedrect-symbolic.svg</file>
@@ -77,5 +80,11 @@
<file>tools/icons/tool-select-rect-symbolic.svg</file>
<file>tools/icons/tool-skew-symbolic.svg</file>
<file>tools/icons/tool-text-symbolic.svg</file>
+
+ <file>tools/icons/dash-none-symbolic.svg</file>
+ <file>tools/icons/dash-regular-symbolic.svg</file>
+ <file>tools/icons/dash-long-symbolic.svg</file>
+ <file>tools/icons/dash-dots-symbolic.svg</file>
+ <file>tools/icons/dash-alt-symbolic.svg</file>
</gresource>
</gresources>
diff --git a/src/gi_composites.py b/src/gi_composites.py
new file mode 100644
index 00000000..a683e332
--- /dev/null
+++ b/src/gi_composites.py
@@ -0,0 +1,265 @@
+#
+# Copyright 2015 Dustin Spicuzza <dustin@virtualroadside.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+# USA
+
+from os.path import abspath, join
+
+import inspect
+import warnings
+
+from gi.repository import Gio
+from gi.repository import GLib
+from gi.repository import GObject
+from gi.repository import Gtk
+
+__all__ = ['GtkTemplate']
+
+class GtkTemplateWarning(UserWarning):
+ pass
+
+def _connect_func(builder, obj, signal_name, handler_name,
+ connect_object, flags, cls):
+ '''Handles GtkBuilder signal connect events'''
+
+ if connect_object is None:
+ extra = ()
+ else:
+ extra = (connect_object,)
+
+ # The handler name refers to an attribute on the template instance,
+ # so ask GtkBuilder for the template instance
+ template_inst = builder.get_object(cls.__gtype_name__)
+
+ if template_inst is None: # This should never happen
+ errmsg = "Internal error: cannot find template instance! obj: %s; " \
+ "signal: %s; handler: %s; connect_obj: %s; class: %s" % \
+ (obj, signal_name, handler_name, connect_object, cls)
+ warnings.warn(errmsg, GtkTemplateWarning)
+ return
+
+ handler = getattr(template_inst, handler_name)
+
+ if flags == GObject.ConnectFlags.AFTER:
+ obj.connect_after(signal_name, handler, *extra)
+ else:
+ obj.connect(signal_name, handler, *extra)
+
+ template_inst.__connected_template_signals__.add(handler_name)
+
+
+def _register_template(cls, template_bytes):
+ '''Registers the template for the widget and hooks init_template'''
+
+ # This implementation won't work if there are nested templates, but
+ # we can't do that anyways due to PyGObject limitations so it's ok
+
+ if not hasattr(cls, 'set_template'):
+ raise TypeError("Requires PyGObject 3.13.2 or greater")
+
+ cls.set_template(template_bytes)
+
+ bound_methods = set()
+ bound_widgets = set()
+
+ # Walk the class, find marked callbacks and child attributes
+ for name in dir(cls):
+
+ o = getattr(cls, name, None)
+
+ if inspect.ismethod(o):
+ if hasattr(o, '_gtk_callback'):
+ bound_methods.add(name)
+ # Don't need to call this, as connect_func always gets called
+ #cls.bind_template_callback_full(name, o)
+ elif isinstance(o, _Child):
+ cls.bind_template_child_full(name, True, 0)
+ bound_widgets.add(name)
+
+ # Have to setup a special connect function to connect at template init
+ # because the methods are not bound yet
+ cls.set_connect_func(_connect_func, cls)
+
+ cls.__gtemplate_methods__ = bound_methods
+ cls.__gtemplate_widgets__ = bound_widgets
+
+ base_init_template = cls.init_template
+ cls.init_template = lambda s: _init_template(s, cls, base_init_template)
+
+
+def _init_template(self, cls, base_init_template):
+ '''This would be better as an override for Gtk.Widget'''
+
+ if self.__class__ is not cls:
+ raise TypeError("Inheritance from classes with @GtkTemplate decorators "
+ "is not allowed at this time")
+
+ connected_signals = set()
+ self.__connected_template_signals__ = connected_signals
+
+ base_init_template(self)
+
+ for name in self.__gtemplate_widgets__:
+ widget = self.get_template_child(cls, name)
+ self.__dict__[name] = widget
+
+ if widget is None:
+ # Bug: if you bind a template child, and one of them was
+ # not present, then the whole template is broken (and
+ # it's not currently possible for us to know which
+ # one is broken either -- but the stderr should show
+ # something useful with a Gtk-CRITICAL message)
+ raise AttributeError("A missing child widget was set using "
+ "GtkTemplate.Child and the entire "
+ "template is now broken (widgets: %s)" %
+ ', '.join(self.__gtemplate_widgets__))
+
+ for name in self.__gtemplate_methods__.difference(connected_signals):
+ errmsg = ("Signal '%s' was declared with @GtkTemplate.Callback " +
+ "but was not present in template") % name
+ warnings.warn(errmsg, GtkTemplateWarning)
+
+class _Child(object):
+ '''
+ Assign this to an attribute in your class definition and it will
+ be replaced with a widget defined in the UI file when init_template
+ is called
+ '''
+
+ __slots__ = []
+
+ @staticmethod
+ def widgets(count):
+ '''
+ Allows declaring multiple widgets with less typing::
+
+ button \
+ label1 \
+ label2 = GtkTemplate.Child.widgets(3)
+ '''
+ return [_Child() for _ in range(count)]
+
+
+class _GtkTemplate(object):
+ '''
+ Use this class decorator to signify that a class is a composite
+ widget which will receive widgets and connect to signals as
+ defined in a UI template. You must call init_template to
+ cause the widgets/signals to be initialized from the template::
+
+ @GtkTemplate(ui='foo.ui')
+ class Foo(Gtk.Box):
+
+ def __init__(self):
+ super(Foo, self).__init__()
+ self.init_template()
+
+ The 'ui' parameter can either be a file path or a GResource resource
+ path::
+
+ @GtkTemplate(ui='/org/example/foo.ui')
+ class Foo(Gtk.Box):
+ pass
+
+ To connect a signal to a method on your instance, do::
+
+ @GtkTemplate.Callback
+ def on_thing_happened(self, widget):
+ pass
+
+ To create a child attribute that is retrieved from your template,
+ add this to your class definition::
+
+ @GtkTemplate(ui='foo.ui')
+ class Foo(Gtk.Box):
+
+ widget = GtkTemplate.Child()
+
+
+ Note: This is implemented as a class decorator, but if it were
+ included with PyGI I suspect it might be better to do this
+ in the GObject metaclass (or similar) so that init_template
+ can be called automatically instead of forcing the user to do it.
+
+ .. note:: Due to limitations in PyGObject, you may not inherit from
+ python objects that use the GtkTemplate decorator.
+ '''
+
+ __ui_path__ = None
+
+ @staticmethod
+ def Callback(f):
+ '''
+ Decorator that designates a method to be attached to a signal from
+ the template
+ '''
+ f._gtk_callback = True
+ return f
+
+
+ Child = _Child
+
+ @staticmethod
+ def set_ui_path(*path):
+ '''
+ If using file paths instead of resources, call this *before*
+ loading anything that uses GtkTemplate, or it will fail to load
+ your template file
+
+ :param path: one or more path elements, will be joined together
+ to create the final path
+ '''
+ _GtkTemplate.__ui_path__ = abspath(join(*path))
+
+
+ def __init__(self, ui):
+ self.ui = ui
+
+ def __call__(self, cls):
+
+ if not issubclass(cls, Gtk.Widget):
+ raise TypeError("Can only use @GtkTemplate on Widgets")
+
+ # Nested templates don't work
+ if hasattr(cls, '__gtemplate_methods__'):
+ raise TypeError("Cannot nest template classes")
+
+ # Load the template either from a resource path or a file
+ # - Prefer the resource path first
+
+ try:
+ template_bytes = Gio.resources_lookup_data(self.ui, Gio.ResourceLookupFlags.NONE)
+ except GLib.GError:
+ ui = self.ui
+ if isinstance(ui, (list, tuple)):
+ ui = join(ui)
+
+ if _GtkTemplate.__ui_path__ is not None:
+ ui = join(_GtkTemplate.__ui_path__, ui)
+
+ with open(ui, 'rb') as fp:
+ template_bytes = GLib.Bytes.new(fp.read())
+
+ _register_template(cls, template_bytes)
+ return cls
+
+
+# Future shim support if this makes it into PyGI?
+#if hasattr(Gtk, 'GtkTemplate'):
+# GtkTemplate = lambda c: c
+#else:
+GtkTemplate = _GtkTemplate
+
diff --git a/src/history_manager.py b/src/history_manager.py
index 8c5f80b7..5c5230d1 100644
--- a/src/history_manager.py
+++ b/src/history_manager.py
@@ -15,7 +15,8 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-from gi.repository import Gdk, Gio, GdkPixbuf, GLib
+from gi.repository import Gdk, Gio, GdkPixbuf
+# from .abstract_tool import WrongToolIdException
################################################################################
@@ -28,42 +29,176 @@ class DrHistoryManager():
self._undo_history = []
self._redo_history = []
self._is_saved = True
- # TODO
- def add_operation(self, operation):
- pass # TODO
+ def get_saved(self):
+ # XXX undoing/redoing doesn't update the title so the "*" isn't visible
+ # in all situations around a saving
+ return self._is_saved
- def can_undo(self):
- pass # TODO
+ def empty_history(self):
+ """Probably useless way to explicitely 'forget' the objects. It doesn't
+ really free the memory, but it kinda helps i suppose."""
+ for op in self._undo_history:
+ self._delete_operation(op)
+ for op in self._redo_history:
+ self._delete_operation(op)
+ self._delete_operation(self.initial_operation)
- def try_undo(self):
- pass # TODO
+ def _delete_operation(self, op):
+ for key in op:
+ op[key] = None
+ op = {}
+ op = None
- def can_redo(self):
- pass # TODO
+ ############################################################################
+ # Controls accessed by DrImage #############################################
- def try_redo(self):
- pass # TODO
+ def try_undo(self):
+ if self._operation_is_ongoing():
+ self._image.active_tool().cancel_ongoing_operation()
+ return
+ if len(self._undo_history) > 0:
+ last_op = self._undo_history.pop()
+ self._redo_history.append(last_op)
+ self._rebuild_from_history()
def try_redo(self, *args):
operation = self._redo_history.pop()
if operation['tool_id'] is None:
- # L'odeur de la fuite mémoire
- self.try_redo()
+ self._undo_history.append(operation)
+ self._image.restore_first_pixbuf()
else:
self._get_tool(operation['tool_id']).apply_operation(operation)
+ def can_undo(self):
+ # XXX incorrect si ya des states et qu'on redo
+ return (len(self._undo_history) > 0) or self._operation_is_ongoing()
+ # rarely called while an operation is ongoing so that ^ is stupid
+
+ def can_redo(self):
+ # XXX incorrect si ya des states ?
+ return len(self._redo_history) > 0
+
+# def update_history_actions_labels(self):
+# """Update the current decoration manager "undo/redo" labels (tooltips,
+# menuitems, etc.) to fit the current content of the history."""
+# # l'appel est commenté aussi
+# undoable_action = self._undo_history[-1:]
+# redoable_action = self._redo_history[-1:]
+# undo_label = None
+# redo_label = None
+# # TODO store/get translatable labels instead of tool_ids (issue #42),
+# # but it'll doesn't work with pixbuf states anyway…
+# if self._operation_is_ongoing():
+# # XXX pointless: the method is called after applying the operation
+# undo_label = self._image.active_tool().tool_id
+# elif len(undoable_action) > 0:
+# undo_label = undoable_action[0]['tool_id']
+# if len(redoable_action) > 0:
+# redo_label = redoable_action[0]['tool_id']
+# self._image.window.update_history_actions_labels(undo_label, redo_label)
+
+ ############################################################################
+ # Serialized operations ####################################################
+
+ def add_operation(self, operation):
+ self._image.set_surface_as_stable_pixbuf()
+ # print('add_operation_to_history')
+ # print(operation['tool_id'])
+ # if 'select' in operation['tool_id']:
+ # print(operation['operation_type'])
+ # print('-----------------------------------')
+ self._is_saved = False
+ self._undo_history.append(operation)
+
+ ############################################################################
+ # Cached pixbufs ###########################################################
+
+ def set_initial_operation(self, rgba_array, pixbuf, width, height):
+ r = float(rgba_array[0])
+ g = float(rgba_array[1])
+ b = float(rgba_array[2])
+ a = float(rgba_array[3])
+ self.initial_operation = {
+ 'tool_id': None,
+ 'pixbuf': pixbuf,
+ 'red': r, 'green': g, 'blue': b, 'alpha': a,
+ 'width': width, 'height': height
+ }
+
+ def add_state(self, pixbuf):
+ if pixbuf is None:
+ # Context: an error message
+ raise Exception(_("Attempt to save an invalid state"))
+ self._undo_history.append({
+ 'tool_id': None,
+ 'pixbuf': pixbuf,
+ 'width': pixbuf.get_width(),
+ 'height': pixbuf.get_height()
+ })
+ self._is_saved = True
+
+ def has_initial_pixbuf(self):
+ return self.initial_operation['pixbuf'] is not None
+
+ def get_last_saved_state(self):
+ index = self._get_last_state_index(False)
+ if index == -1:
+ return self.initial_operation
+ else:
+ return self._undo_history[index]
+
+ def _get_last_state_index(self, allow_yeeting_states):
+ """Return the index of the last "state" operation (dict whose 'tool_id'
+ value is None) in the undo-history. If there is no such operation, the
+ returned index is -1 which means the only known state is the
+ self.initial_operation attribute."""
+
+ returned_index = -1
+ nbPixbufs = 0
+ for op in self._undo_history:
+ if op['tool_id'] is None:
+ last_saved_pixbuf_op = op
+ returned_index = self._undo_history.index(op)
+ nbPixbufs += 1
+
+ # TODO if there are too many pixbufs in the history, remove a few ones
+ # Issue #200, needs more design because saving can change the data
+
+ # print("returned_index : " + str(returned_index))
+ return returned_index
+
+ ############################################################################
+ # Other private methods ####################################################
+
+ def _rebuild_from_history(self):
+ """Rebuild the image according to the content of the current history."""
+ last_save_index = self._get_last_state_index(True)
+ self._image.restore_first_pixbuf()
+ history = self._undo_history.copy()
+ self._undo_history = []
+ for op in history:
+ if history.index(op) > last_save_index:
+ # print("do", op['tool_id'])
+ self._get_tool(op['tool_id']).simple_apply_operation(op)
+ else:
+ # print("skip", op['tool_id'])
+ self._undo_history.append(op)
+ self._image.update()
+ self._image.update_history_sensitivity()
+
+ def _operation_is_ongoing(self):
+ return self._image.active_tool().has_ongoing_operation()
+
def _get_tool(self, tool_id):
- all_tools = self.image.window.tools
+ all_tools = self._image.window.tools
if tool_id in all_tools:
return all_tools[tool_id]
else:
- # XXX throw something instead
- self.image.window.prompt_message(True, "Error: no tool " + tool_id)
-
- def add_save(self, pixbuf):
- pass # TODO
+ self._image.window.prompt_message(True, _("Error: no tool '%s'" % tool_id))
+ # no raise: this may happen normally if last_save_index is incorrect
############################################################################
################################################################################
+
diff --git a/src/image.py b/src/image.py
index fe3e6069..60a8241b 100644
--- a/src/image.py
+++ b/src/image.py
@@ -16,35 +16,64 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import cairo
-from gi.repository import Gtk, Gdk, Gio, GdkPixbuf, GLib, Pango
+from gi.repository import Gtk, Gdk, Gio, GdkPixbuf, Pango
+from .history_manager import DrHistoryManager
from .selection_manager import DrSelectionManager
from .properties import DrPropertiesDialog
+from .utilities import InvalidFileFormatException
+
+from .gi_composites import GtkTemplate
class DrMotionBehavior():
HOVER = 0
DRAW = 1
SLIP = 2
+ _LIMIT = 10
+ def is_moving(x1, x2, y1, y2):
+ # no `self` because it's static
+ moves_x = abs(x1 - x2) < DrMotionBehavior._LIMIT
+ moves_y = abs(y1 - y2) < DrMotionBehavior._LIMIT
+ return moves_x and moves_y
+
+class NoPixbufNoChangeException(Exception):
+ def __init__(self, pb_name):
+ # Context: an error message
+ message = _("New pixbuf empty, no change applied to %s")
+ super().__init__(message % pb_name)
+
################################################################################
-@Gtk.Template(resource_path='/com/github/maoschanz/drawing/ui/image.ui')
+@GtkTemplate(ui='/com/github/maoschanz/drawing/ui/image.ui')
class DrImage(Gtk.Box):
__gtype_name__ = 'DrImage'
- drawing_area = Gtk.Template.Child()
- h_scrollbar = Gtk.Template.Child()
- v_scrollbar = Gtk.Template.Child()
+ _drawing_area = GtkTemplate.Child()
+ _h_scrollbar = GtkTemplate.Child()
+ _v_scrollbar = GtkTemplate.Child()
- CLOSING_PRECISION = 10
+ SCALE_FACTOR = 1.0 # XXX doesn't work well enough to be anything else
def __init__(self, window, **kwargs):
super().__init__(**kwargs)
+ self.init_template()
self.window = window
self.gfile = None
self.filename = None
- self.drawing_area.add_events( \
+ self._init_drawing_area()
+
+ self._update_background_color()
+ self.window._settings.connect('changed::ui-background-rgba', \
+ self._update_background_color)
+
+ self._update_zoom_behavior()
+ self.window._settings.connect('changed::ctrl-zoom', \
+ self._update_zoom_behavior)
+
+ def _init_drawing_area(self):
+ self._drawing_area.add_events( \
Gdk.EventMask.BUTTON_PRESS_MASK | \
Gdk.EventMask.BUTTON_RELEASE_MASK | \
Gdk.EventMask.POINTER_MOTION_MASK | \
@@ -52,23 +81,34 @@ class DrImage(Gtk.Box):
Gdk.EventMask.ENTER_NOTIFY_MASK | \
Gdk.EventMask.LEAVE_NOTIFY_MASK)
# Using BUTTON_MOTION_MASK instead of POINTER_MOTION_MASK would be less
- # algorithmically complex but powerful enough.
+ # algorithmically complex but not "powerful" enough.
# For displaying things on the widget
- self.drawing_area.connect('draw', self.on_draw)
+ self._drawing_area.connect('draw', self.on_draw)
+
# For drawing with tools
- self.drawing_area.connect('motion-notify-event', self.on_motion_on_area)
- self.drawing_area.connect('button-press-event', self.on_press_on_area)
- self.drawing_area.connect('button-release-event', self.on_release_on_area)
+ self._drawing_area.connect('motion-notify-event', self.on_motion_on_area)
+ self._drawing_area.connect('button-press-event', self.on_press_on_area)
+ self._drawing_area.connect('button-release-event', self.on_release_on_area)
+
# For scrolling
- self.drawing_area.connect('scroll-event', self.on_scroll_on_area)
- self.h_scrollbar.connect('value-changed', self.on_scrollbar_value_change)
- self.v_scrollbar.connect('value-changed', self.on_scrollbar_value_change)
+ self._drawing_area.connect('scroll-event', self.on_scroll_on_area)
+ self._h_scrollbar.connect('value-changed', self.on_scrollbar_value_change)
+ self._v_scrollbar.connect('value-changed', self.on_scrollbar_value_change)
+
# For the cursor
- self.drawing_area.connect('enter-notify-event', self.on_enter_image)
- self.drawing_area.connect('leave-notify-event', self.on_leave_image)
+ self._drawing_area.connect('enter-notify-event', self.on_enter_image)
+ self._drawing_area.connect('leave-notify-event', self.on_leave_image)
- self.ctrl_to_zoom = self.window._settings.get_boolean('ctrl-zoom')
+ def _update_background_color(self, *args):
+ rgba = self.window._settings.get_strv('ui-background-rgba')
+ self._bg_rgba = (float(rgba[0]), float(rgba[1]), \
+ float(rgba[2]), float(rgba[3]))
+ # We remember this data here for performance, since it's used by the
+ # on_draw method which is called a lot.
+
+ def _update_zoom_behavior(self, *args):
+ self._ctrl_to_zoom = self.window._settings.get_boolean('ctrl-zoom')
############################################################################
# Image initialization #####################################################
@@ -79,9 +119,9 @@ class DrImage(Gtk.Box):
self._is_pressed = False
# Zoom and scroll initialization
- self.zoom_level = 1.0
self.scroll_x = 0
self.scroll_y = 0
+ self.set_zoom_level(100) # will do `self.zoom_level = 1.0`
self.motion_behavior = DrMotionBehavior.HOVER
self.press2_x = 0.0
self.press2_y = 0.0
@@ -92,85 +132,92 @@ class DrImage(Gtk.Box):
self.selection = DrSelectionManager(self)
# History initialization
- self.previous_pixbuf = None
- self.undo_history = []
- self.redo_history = []
- self._is_saved = True
+ self._history = DrHistoryManager(self)
self.set_action_sensitivity('undo', False)
self.set_action_sensitivity('redo', False)
def init_background(self, width, height, background_rgba):
- r = float(background_rgba[0])
- g = float(background_rgba[1])
- b = float(background_rgba[2])
- a = float(background_rgba[3])
- self.initial_operation = {
- 'tool_id': None,
- 'pixbuf': None,
- 'red': r, 'green': g, 'blue': b, 'alpha': a,
- 'width': width, 'height': height
- }
self.init_image_common()
+ self._history.set_initial_operation(background_rgba, None, width, height)
self.restore_first_pixbuf()
def try_load_pixbuf(self, pixbuf):
- if not pixbuf.get_has_alpha():
- pixbuf = pixbuf.add_alpha(False, 255, 255, 255)
- self.initial_operation = {
- 'tool_id': None,
- 'pixbuf': pixbuf,
- 'red': 0.0, 'green': 0.0, 'blue': 0.0, 'alpha': 0.0,
- 'width': pixbuf.get_width(), 'height': pixbuf.get_height()
- }
- self.main_pixbuf = pixbuf
self.init_image_common()
+ self._load_pixbuf_common(pixbuf)
self.restore_first_pixbuf()
self.update_title()
+ def _new_blank_pixbuf(self, w, h):
+ return GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, w, h)
+
def restore_first_pixbuf(self):
- """Set the first saved pixbuf as the main_pixbuf. This is used to
- rebuild the picture from its history."""
- pixbuf = self.initial_operation['pixbuf']
- width = self.initial_operation['width']
- height = self.initial_operation['height']
- self.temp_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 1, 1)
+ """Set the last saved pixbuf from the history as the main_pixbuf. This
+ is used to rebuild the picture from its history."""
+ last_saved_pixbuf_op = self._history.get_last_saved_state()
+
+ # restore the state found in the history
+ pixbuf = last_saved_pixbuf_op['pixbuf']
+ width = last_saved_pixbuf_op['width']
+ height = last_saved_pixbuf_op['height']
+ self.set_temp_pixbuf(self._new_blank_pixbuf(1, 1))
self.selection.init_pixbuf()
self.surface = cairo.ImageSurface(cairo.Format.ARGB32, width, height)
if pixbuf is None:
- r = self.initial_operation['red']
- g = self.initial_operation['green']
- b = self.initial_operation['blue']
- a = self.initial_operation['alpha']
- self.main_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, \
- True, 8, width, height)
+ # no pixbuf in the operation: the restored state is a blank one
+ r = last_saved_pixbuf_op['red']
+ g = last_saved_pixbuf_op['green']
+ b = last_saved_pixbuf_op['blue']
+ a = last_saved_pixbuf_op['alpha']
+ self.set_main_pixbuf(self._new_blank_pixbuf(width, height))
cairo_context = cairo.Context(self.surface)
cairo_context.set_source_rgba(r, g, b, a)
cairo_context.paint()
self.update()
self.set_surface_as_stable_pixbuf()
else:
- self.main_pixbuf = self.initial_operation['pixbuf'].copy()
+ self.set_main_pixbuf(last_saved_pixbuf_op['pixbuf'].copy())
self.use_stable_pixbuf()
############################################################################
+ def _load_pixbuf_common(self, pixbuf):
+ if not pixbuf.get_has_alpha():
+ pixbuf = pixbuf.add_alpha(False, 255, 255, 255)
+ background_rgba = self.window._settings.get_strv('default-rgba')
+ self._history.set_initial_operation(background_rgba, pixbuf, \
+ pixbuf.get_width(), pixbuf.get_height())
+ self.set_main_pixbuf(pixbuf)
+
def reload_from_disk(self):
- if not self.window.confirm_save_modifs():
- return
- """Safely reloads the image from the disk (asks if unsaved changes
- should be discarded or saved)."""
+ """Safely reloads the image from the disk."""
if self.gfile is None:
- self.window.prompt_message(True, \
- _("Can't reload a never-saved file from the disk."))
- return
- self.try_load_file(self.gfile)
+ # XXX no, the action shouldn't be active in the first place
+ isnt_saved = not self.window.saving_manager.confirm_save_modifs()
+ if isnt_saved or self.get_file_path() is None:
+ self.window.prompt_message(True, \
+ _("Can't reload a never-saved file from the disk."))
+ return
+ disk_pixbuf = GdkPixbuf.Pixbuf.new_from_file(self.get_file_path())
+ self._load_pixbuf_common(disk_pixbuf)
self.window.set_picture_title(self.update_title())
- # FIXME ne pas reset l'historique avec try_load_pixbuf
- self.update() # mdr pourquoi c'est pas déjà le cas avec le load ???
+ self.use_stable_pixbuf()
+ self.update()
+ self.remember_current_state()
def try_load_file(self, gfile):
- self.gfile = gfile
- pixbuf = GdkPixbuf.Pixbuf.new_from_file(self.get_file_path())
+ try:
+ self.gfile = gfile
+ pixbuf = GdkPixbuf.Pixbuf.new_from_file(self.get_file_path())
+ except Exception as ex:
+ if not ex.message:
+ ex.message = "[exception without a valid message]"
+ ex = InvalidFileFormatException(ex.message, gfile.get_path())
+ self.window.prompt_message(True, ex.message)
+ self.gfile = None
+ pixbuf = self._new_blank_pixbuf(100, 100)
+ # XXX dans l'idéal on devrait ne rien ouvrir non ? ou si besoin (si
+ # ya pas de fenêtre) ouvrir un truc respectant les settings, plutôt
+ # qu'un petit pixbuf corrompu
self.try_load_pixbuf(pixbuf)
############################################################################
@@ -208,7 +255,7 @@ class DrImage(Gtk.Box):
def update_title(self):
main_title = self.get_filename_for_display()
- if not self._is_saved:
+ if not self.is_saved():
main_title = "*" + main_title
self.set_tab_label(main_title)
return main_title
@@ -228,6 +275,7 @@ class DrImage(Gtk.Box):
self.selection.reset(False)
self.main_pixbuf = None
self.temp_pixbuf = None
+ self._history.empty_history()
return True
else:
return False
@@ -247,74 +295,38 @@ class DrImage(Gtk.Box):
############################################################################
# History management #######################################################
- def _operation_is_ongoing(self):
- return self.active_tool().has_ongoing_operation()
+ def try_undo(self):
+ self._history.try_undo()
- def try_undo(self, *args):
- if self._operation_is_ongoing():
- self.active_tool().cancel_ongoing_operation()
- return
- if len(self.undo_history) != 0:
- self.redo_history.append(self.undo_history.pop())
- if self.previous_pixbuf is not None:
- # TODO better pixbuf-based history
- self.main_pixbuf = self.previous_pixbuf
- self.previous_pixbuf = None
- self.use_stable_pixbuf()
- self.update()
- self.update_history_sensitivity()
- else:
- self.rebuild_from_history()
+ def try_redo(self):
+ self._history.try_redo()
- def try_redo(self, *args):
- operation = self.redo_history.pop()
- self.window.tools[operation['tool_id']].apply_operation(operation)
+ def is_saved(self):
+ return self._history.get_saved()
- def rebuild_from_history(self):
- self.restore_first_pixbuf()
- history = self.undo_history.copy()
- self.undo_history = []
- for op in history:
- # print(op)
- self.window.tools[op['tool_id']].simple_apply_operation(op)
- self.update()
- self.update_history_sensitivity()
+ def remember_current_state(self):
+ self._history.add_state(self.main_pixbuf.copy())
def update_history_sensitivity(self):
- # XXX never called while an operation is ongoing so that's stupid
- can_undo = (len(self.undo_history) != 0) or self._operation_is_ongoing()
- self.set_action_sensitivity('undo', can_undo)
- self.set_action_sensitivity('redo', len(self.redo_history) != 0)
+ self.set_action_sensitivity('undo', self._history.can_undo())
+ self.set_action_sensitivity('redo', self._history.can_redo())
# self.update_history_actions_labels()
- def update_history_actions_labels(self):
- undoable_action = self.undo_history[-1:]
- redoable_action = self.redo_history[-1:]
- undo_label = None
- redo_label = None
- # TODO store/get translatable labels instead of tool_ids (issue #42)
- if self._operation_is_ongoing():
- # XXX pointless: the method is called at application of the operation
- undo_label = self.active_tool().tool_id
- elif len(undoable_action) > 0:
- undo_label = undoable_action[0]['tool_id']
- if len(redoable_action) > 0:
- redo_label = redoable_action[0]['tool_id']
- self.window.update_history_actions_labels(undo_label, redo_label)
-
- def add_pixbuf_to_history(self):
- # self.previous_pixbuf = self.main_pixbuf.copy()
- pass # TODO
-
def add_to_history(self, operation):
- self.set_surface_as_stable_pixbuf()
- # print('add_operation_to_history')
- # print(operation['tool_id'])
- # if 'select' in operation['tool_id']:
- # print(operation['operation_type'])
- # print('-----------------------------------')
- self._is_saved = False
- self.undo_history.append(operation)
+ self._history.add_operation(operation)
+
+ def should_replace(self):
+ if self._history.can_undo():
+ return False
+ return not self._history.has_initial_pixbuf()
+
+ def get_initial_rgba(self):
+ operation = self._history.initial_operation
+ r = operation['red']
+ g = operation['green']
+ b = operation['blue']
+ a = operation['alpha']
+ return Gdk.RGBA(red=r, green=g, blue=b, alpha=a)
############################################################################
# Misc ? ###################################################################
@@ -323,7 +335,7 @@ class DrImage(Gtk.Box):
self.window.lookup_action(action_name).set_enabled(state)
def update_actions_state(self):
- # XXX à déléguer partiellement au selection_manager ?
+ # XXX shouldn't it be done by the selection_manager?
state = self.selection.is_active
self.set_action_sensitivity('unselect', state)
self.set_action_sensitivity('select_all', not state)
@@ -337,26 +349,31 @@ class DrImage(Gtk.Box):
def active_tool(self):
return self.window.active_tool()
- def should_replace(self):
- if len(self.undo_history) > 0:
- return False
- return self.initial_operation['pixbuf'] is None
-
############################################################################
# Drawing area, main pixbuf, and surface management ########################
def on_draw(self, area, cairo_context):
- """Signal callback. Executed when self.drawing_area is redrawn."""
+ """Signal callback. Executed when self._drawing_area is redrawn."""
+ # Background color
+ cairo_context.set_source_rgba(*self._bg_rgba)
+ cairo_context.paint()
+
+ # Zoom level
cairo_context.scale(self.zoom_level, self.zoom_level)
+
+ # TODO transform tools may appreciate to draw *before* the image
+
+ # Image (with scroll position)
cairo_context.set_source_surface(self.get_surface(), \
-1 * self.scroll_x, -1 * self.scroll_y)
cairo_context.paint()
+ # What the tool is painting
self.active_tool().on_draw(area, cairo_context)
def on_press_on_area(self, area, event):
"""Signal callback. Executed when a mouse button is pressed on
- self.drawing_area, if the button is the mouse wheel the colors are
+ self._drawing_area, if the button is the mouse wheel the colors are
exchanged, otherwise the signal is transmitted to the selected tool."""
if self._is_pressed:
return
@@ -374,18 +391,18 @@ class DrImage(Gtk.Box):
def on_motion_on_area(self, area, event):
"""Signal callback. Executed when the mouse pointer moves upon
- self.drawing_area, the signal is transmitted to the selected tool.
+ self._drawing_area, the signal is transmitted to the selected tool.
If a button (not the mouse wheel) is pressed, the tool's method should
have an effect on the image, otherwise it shouldn't change anything
except the mouse cursor icon for example."""
event_x, event_y = self.get_event_coords(event)
if self.motion_behavior == DrMotionBehavior.HOVER:
- # XXX ça apprécierait sans doute d'avoir direct les bonnes coordonnées ?
+ # TODO ça apprécierait sans doute d'avoir direct les bonnes coordonnées ?
self.active_tool().on_unclicked_motion_on_area(event, self.surface)
elif self.motion_behavior == DrMotionBehavior.DRAW:
# implicitely impossible if not self._is_pressed
self.active_tool().on_motion_on_area(event, self.surface, event_x, event_y)
- self.update() # TODO comment this for better perfs
+ self.update() # <<< comment this for better perfs
else: # self.motion_behavior == DrMotionBehavior.SLIP:
delta_x = int(self.drag_scroll_x - event_x)
delta_y = int(self.drag_scroll_y - event_y)
@@ -395,11 +412,11 @@ class DrImage(Gtk.Box):
def on_release_on_area(self, area, event):
"""Signal callback. Executed when a mouse button is released on
- self.drawing_area, if the button is not the signal is transmitted to the
- selected tool."""
+ self._drawing_area, if the button is not the signal is transmitted to
+ the selected tool."""
if self.motion_behavior == DrMotionBehavior.SLIP:
- if abs(self.press2_x - self.drag_scroll_x) < self.CLOSING_PRECISION \
- and abs(self.press2_y - self.drag_scroll_y) < self.CLOSING_PRECISION:
+ if DrMotionBehavior.is_moving(self.press2_x, self.drag_scroll_x, \
+ self.press2_y, self.drag_scroll_y):
self.window.options_manager.on_middle_click()
self.motion_behavior = DrMotionBehavior.HOVER
return
@@ -410,11 +427,11 @@ class DrImage(Gtk.Box):
self._is_pressed = False
def update(self):
- # print('image.py: drawing_area.queue_draw')
+ # print('image.py: _drawing_area.queue_draw')
# TODO immensément utilisée, mais qui ne scale pas : ça gêne clairement
# l'utilisation pour les trop grandes images, il faudrait n'update que
# la partie qui change, ou au pire que la partie affichée
- self.drawing_area.queue_draw()
+ self._drawing_area.queue_draw()
def get_surface(self):
return self.surface
@@ -426,7 +443,6 @@ class DrImage(Gtk.Box):
self.window.set_cursor(False)
def post_save(self):
- self._is_saved = True
self.use_stable_pixbuf()
self.update()
@@ -441,6 +457,7 @@ class DrImage(Gtk.Box):
# l'utilisation pour les trop grandes images, il faudrait n'update que
# la partie qui change, ou au pire que la partie affichée
self.surface = Gdk.cairo_surface_create_from_pixbuf(self.main_pixbuf, 0, None)
+ self.surface.set_device_scale(self.SCALE_FACTOR, self.SCALE_FACTOR)
def get_pixbuf_width(self):
return self.main_pixbuf.get_width()
@@ -448,11 +465,11 @@ class DrImage(Gtk.Box):
def get_pixbuf_height(self):
return self.main_pixbuf.get_height()
- # TODO utiliser ça en interne à image.py
def set_main_pixbuf(self, new_pixbuf):
+ """Safely set a pixbuf as the main one (not used everywhere internally
+ in image.py, but it's normal)."""
if new_pixbuf is None:
- # XXX maybe throw something instead
- print("new_pixbuf is None, no change to main_pixbuf will be applied")
+ raise NoPixbufNoChangeException('main_pixbuf')
else:
self.main_pixbuf = new_pixbuf
@@ -461,13 +478,12 @@ class DrImage(Gtk.Box):
def set_temp_pixbuf(self, new_pixbuf):
if new_pixbuf is None:
- # XXX maybe throw something instead
- print("new_pixbuf is None, no change to temp_pixbuf will be applied")
+ raise NoPixbufNoChangeException('temp_pixbuf')
else:
self.temp_pixbuf = new_pixbuf
def reset_temp(self):
- self.temp_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 1, 1)
+ self.set_temp_pixbuf(self._new_blank_pixbuf(1, 1))
self.use_stable_pixbuf()
self.update()
@@ -475,10 +491,10 @@ class DrImage(Gtk.Box):
# Interaction with the minimap #############################################
def get_widget_width(self):
- return self.drawing_area.get_allocated_width()
+ return self._drawing_area.get_allocated_width()
def get_widget_height(self):
- return self.drawing_area.get_allocated_height()
+ return self._drawing_area.get_allocated_height()
def get_mini_pixbuf(self, preview_size):
mpb_width = self.get_pixbuf_width()
@@ -527,7 +543,6 @@ class DrImage(Gtk.Box):
x1 = x1 - self.scroll_x
y1 = y1 - self.scroll_y
if with_selection:
- # FIXME ne comprends pas les deltas locaux du crop ni du scale
x1 += self.selection.selection_x
y1 += self.selection.selection_y
x2 = x1 + w
@@ -537,21 +552,37 @@ class DrImage(Gtk.Box):
x2 *= self.zoom_level
y1 *= self.zoom_level
y2 *= self.zoom_level
- # TODO use the same kind of transformation for the selection cursor when
- # the zoom is not 1.0
return x1, x2, y1, y2
+ def get_nineths_sizes(self, apply_to_selection, x1, y1):
+ """Returns the sizes of the 'nineths' of the image used for example by
+ 'scale' or 'crop' to decide the cursor they'll show."""
+ height = self.temp_pixbuf.get_height()
+ width = self.temp_pixbuf.get_width()
+ if not apply_to_selection:
+ x1 = 0
+ y1 = 0
+ # width_left, width_right, height_top, height_bottom
+ wl, wr, ht, hb = self.get_corrected_coords(x1, width, y1, height, \
+ apply_to_selection, True)
+ # FIXME using local deltas this way "works" but isn't mathematically
+ # correct: scaled selections have a "null" and excentred central nineth
+ wl += 0.4 * width * self.zoom_level
+ wr -= 0.4 * width * self.zoom_level
+ ht += 0.4 * height * self.zoom_level
+ hb -= 0.4 * height * self.zoom_level
+ return wl, wr, ht, hb
+
def on_scroll_on_area(self, area, event):
# TODO https://lazka.github.io/pgi-docs/index.html#Gdk-3.0/classes/EventScroll.html#Gdk.EventScroll
ctrl_is_used = (event.state & Gdk.ModifierType.CONTROL_MASK) == Gdk.ModifierType.CONTROL_MASK
- if ctrl_is_used == self.ctrl_to_zoom:
- event_x, event_y = self.get_event_coords(event)
- self.zoom_to_point(event.delta_x, event.delta_y, event.x, event.y)
+ if ctrl_is_used == self._ctrl_to_zoom:
+ self._zoom_to_point(event)
else:
self.add_deltas(event.delta_x, event.delta_y, 10)
def on_scrollbar_value_change(self, scrollbar):
- self.correct_coords(self.h_scrollbar.get_value(), self.v_scrollbar.get_value())
+ self.correct_coords(self._h_scrollbar.get_value(), self._v_scrollbar.get_value())
self.update()
def add_deltas(self, delta_x, delta_y, factor):
@@ -584,9 +615,9 @@ class DrImage(Gtk.Box):
def update_scrollbar(self, is_vertical, allocated_size, pixbuf_size, coord):
if is_vertical:
- scrollbar = self.v_scrollbar
+ scrollbar = self._v_scrollbar
else:
- scrollbar = self.h_scrollbar
+ scrollbar = self._h_scrollbar
scrollbar.set_visible(allocated_size / self.zoom_level < pixbuf_size)
scrollbar.set_range(0, pixbuf_size)
scrollbar.get_adjustment().set_page_size(allocated_size / self.zoom_level)
@@ -596,14 +627,39 @@ class DrImage(Gtk.Box):
else:
self.scroll_x = int(scrollbar.get_value())
- def zoom_to_point(self, delta_x, delta_y, x, y):
- zoom_delta = (delta_x + delta_y) * -5
+ def _zoom_to_point(self, event):
+ """Zoom in or out the image in a way such that the point under the
+ pointer stays as much as possible under the pointer."""
+ event_x, event_y = self.get_event_coords(event)
+
+ zoom_delta = (event.delta_x + event.delta_y) * -4 # Arbitrary
self.inc_zoom_level(zoom_delta)
- displayed_w = self.get_widget_width() / self.zoom_level
- displayed_h = self.get_widget_height() / self.zoom_level
- fake_delta_x = x - (displayed_w / 2)
- fake_delta_y = y - (displayed_h / 2)
- self.add_deltas(fake_delta_x, fake_delta_y, min(1, 1/self.zoom_level))
+
+ # Where the zoom event occurs, in terms of percentages, in the widget's
+ # reference frame. Like, "at 10% of the width, and 80% of the height".
+ proportion_w = event.x / self.get_widget_width()
+ proportion_h = event.y / self.get_widget_height()
+
+ # Size of the rectangle between the current scroll position (values of
+ # the self.scroll_* attributes) and the zoom event. Both are expressed
+ # in pixels in the reference frame of the pixbuf.
+ corner_w = event_x - self.scroll_x
+ corner_h = event_y - self.scroll_y
+
+ # Dark magic based on unsound experiments XXX
+ fake_delta_x = corner_w * (proportion_w - 0.5)
+ fake_delta_y = corner_h * (proportion_h - 0.5)
+ if zoom_delta > 0:
+ # Zooming in
+ fake_delta_x *= 0.5
+ fake_delta_y *= 0.5
+ else:
+ # Zooming out
+ fake_delta_x *= -0.1
+ fake_delta_y *= -0.1
+
+ # Updating the scroll position based on the values previously found
+ self.add_deltas(fake_delta_x, fake_delta_y, 1)
def inc_zoom_level(self, delta):
self.set_zoom_level((self.zoom_level * 100) + delta)
diff --git a/src/main.py b/src/main.py
index 6d5190b9..70fd738b 100644
--- a/src/main.py
+++ b/src/main.py
@@ -17,13 +17,15 @@
import sys, gi
gi.require_version('Gtk', '3.0')
+gi.require_version('PangoCairo', '1.0')
from gi.repository import Gtk, Gio, GLib, Gdk
from .window import DrWindow
from .preferences import DrPrefsWindow
+from .utilities import utilities_gfile_is_image
APP_ID = 'com.github.maoschanz.drawing'
APP_PATH = '/com/github/maoschanz/drawing'
-BUG_REPORT_URL = 'https://github.com/maoschanz/drawing/issues/new'
+BUG_REPORT_URL = 'https://github.com/maoschanz/drawing/issues/new/choose'
def main(version):
app = Application(version)
@@ -46,6 +48,7 @@ class Application(Gtk.Application):
GLib.set_prgname(APP_ID)
self._version = version
self.has_tools_in_menubar = False
+ self._runs_in_sandbox = False
self.connect('startup', self.on_startup)
self.register(None)
@@ -53,12 +56,16 @@ class Application(Gtk.Application):
self.connect('command-line', self.on_cli)
self.add_main_option('version', b'v', GLib.OptionFlags.NONE,
+ # Description of a command line option
GLib.OptionArg.NONE, _("Show the app version"), None)
self.add_main_option('new-window', b'n', GLib.OptionFlags.NONE,
+ # Description of a command line option
GLib.OptionArg.NONE, _("Open a new window"), None)
self.add_main_option('new-tab', b't', GLib.OptionFlags.NONE,
+ # Description of a command line option
GLib.OptionArg.NONE, _("Open a new tab"), None)
self.add_main_option('edit-clipboard', b'c', GLib.OptionFlags.NONE,
+ # Description of a command line option
GLib.OptionArg.NONE, _("Edit the clipboard content"), None)
icon_theme = Gtk.IconTheme.get_default()
@@ -86,7 +93,7 @@ class Application(Gtk.Application):
self.add_action_simple('help', self.on_help_index, ['F1'])
self.add_action_simple('help_main', self.on_help_main, None)
self.add_action_simple('help_tools', self.on_help_tools, None)
- self.add_action_simple('help_canvas', self.on_help_canvas, None)
+ self.add_action_simple('help_transform', self.on_help_transform, None)
self.add_action_simple('help_selection', self.on_help_selection, None)
self.add_action_simple('help_prefs', self.on_help_prefs, None)
self.add_action_simple('about', self.on_about, ['<Shift>F1'])
@@ -123,8 +130,9 @@ class Application(Gtk.Application):
# this will be ['/app/bin/drawing'] which has a length of 1.
arguments = args[1].get_arguments()
- # Possible options are 'version', 'new-window', and 'new-tab', in this
- # order: only one option can be applied, '-ntv' will be the same as '-v'.
+ # Possible options are 'version', 'edit-clipboard', 'new-tab', and
+ # 'new-window', in this order: only one option can be applied, '-ntvc'
+ # will be understood as '-v'.
options = args[1].get_options_dict()
if options.contains('version'):
@@ -132,39 +140,58 @@ class Application(Gtk.Application):
if self.is_beta():
print(_("This version isn't stable!"))
print()
- print(_("Report bugs or ideas") + ' 👉️ ' + BUG_REPORT_URL)
+ print(_("Report bugs or ideas") + " 👉️ " + BUG_REPORT_URL)
+
elif options.contains('edit-clipboard'):
- self.open_window_with_content(None, True)
+ win = self.props.active_window
+ if not win:
+ self.open_window_with_content(None, True)
+ else:
+ win.present()
+ self.props.active_window.build_image_from_clipboard()
- # If no file given as argument
- elif options.contains('new-window') and len(arguments) == 1:
- self.on_new_window()
elif options.contains('new-tab') and len(arguments) == 1:
+ # If '-t' but no file given as argument
win = self.props.active_window
if not win:
self.on_new_window()
else:
win.present()
self.props.active_window.build_new_image()
- elif len(arguments) == 1:
- self.on_activate()
elif options.contains('new-window'):
- self.on_new_window()
+ # it opens one new window per file given as argument, or just one
+ # new window if no argument is a valid enough file.
+ windows_counter = 0
for fpath in arguments:
f = self._get_valid_file(args[1], fpath)
- if f is not None:
+ # here f can be a GioFile or a boolea; True would mean the app
+ # should open a new blank image.
+ if f != False:
+ f = None if f == True else f
self.open_window_with_content(f, False)
- else: # giving files without '-n' is equivalent to giving files with '-t'
+ windows_counter = windows_counter + 1
+ if windows_counter == 0:
+ self.on_new_window()
+
+ elif len(arguments) == 1:
+ self.on_activate()
+
+ else:
+ # giving files without '-n' is equivalent to giving files with '-t'
for fpath in arguments:
f = self._get_valid_file(args[1], fpath)
- if f is not None:
+ # here f can be a GioFile or a boolea; True would mean the app
+ # should open a new blank image.
+ if f != False:
+ f = None if f == True else f
win = self.props.active_window
if not win:
self.open_window_with_content(f, False)
else:
win.present()
self.props.active_window.build_new_tab(gfile=f)
+
# I don't even know if i should return something
return 0
@@ -185,7 +212,7 @@ class Application(Gtk.Application):
if self.shortcuts_window is not None:
self.shortcuts_window.destroy()
builder = Gtk.Builder().new_from_resource(APP_PATH + '/ui/shortcuts.ui')
- self.shortcuts_window = builder.get_object('shortcuts')
+ self.shortcuts_window = builder.get_object('shortcuts-window')
self.shortcuts_window.present()
def on_prefs(self, *args):
@@ -211,10 +238,10 @@ class Application(Gtk.Application):
manual."""
self._show_help_page('/tools_classic')
- def on_help_canvas(self, *args):
- """Action callback, showing the 'canvas and selection tools' page of the
- user help manual."""
- self._show_help_page('/tools_canvas')
+ def on_help_transform(self, *args):
+ """Action callback, showing the 'transform tools' page of the user help
+ manual."""
+ self._show_help_page('/tools_transform')
def on_help_selection(self, *args):
"""Action callback, showing the 'selection tools' page of the user help
@@ -233,13 +260,14 @@ class Application(Gtk.Application):
def on_about(self, *args):
"""Action callback, showing the "about" dialog."""
about_dialog = Gtk.AboutDialog(transient_for=self.props.active_window,
- copyright="© 2018-2020 Romain F. T.", authors=["Romain F. T."],
- # To tranlators: "translate" this by your name, it will be displayed
- # in the "about" dialog
+ copyright="© 2018-2020 Romain F. T.",
+ authors=["Romain F. T.", "Fábio Colacio"],
+ # To tranlators: "translate" this by a list of your names (one name
+ # per line), they will be displayed in the "about" dialog
translator_credits=_("translator-credits"),
- # To translators: it's credits for the icons, consider that "Art
- # Libre" is proper name
artists=["Tobias Bernard", "Romain F. T.",
+ # To translators: this is credits for the icons, consider that "Art
+ # Libre" is proper name
_("GNOME's \"Art Libre\" icon set authors")],
comments=_("A drawing application for the GNOME desktop."),
license_type=Gtk.License.GPL_3_0,
@@ -299,21 +327,35 @@ class Application(Gtk.Application):
self.add_action(action)
def _get_valid_file(self, app, path):
- """Creates a GioFile object if the path corresponds to an image."""
+ """Creates a GioFile object if the path corresponds to an image. If no
+ GioFile can be created, it returns a boolean telling whether or not a
+ window should be opened anyway."""
+ if path == '/app/bin/drawing':
+ self._runs_in_sandbox = True
+ # when it's /app/bin/drawing, the situation is normal, and
+ # it tells the app it's running in a flatpak sandbox
+ return False
+
+ err = _("Error opening this file.") + ' '
try:
- f = app.create_file_for_arg(path)
- if 'image/' in f.query_info('standard::*', \
- Gio.FileQueryInfoFlags.NONE, None).get_content_type():
- return f
+ gfile = app.create_file_for_arg(path)
+ except Exception as excp:
+ if self._runs_in_sandbox:
+ command = "\n\tflatpak run --file-forwarding {0} @@ {1} @@\n"
+ command = command.format(APP_ID, path)
+ # This is an error message, %s is a better command suggestion
+ err = err + _("Did you mean %s ?") % command
else:
- return None # mainly when it's /app/bin/drawing
- except:
- err = _("Error opening this file. Did you mean %s ?")
- command = "\n\tflatpak run --file-forwarding {0} @@ {1} @@\n"
- # XXX can happen without flatpak
- command = command.format(APP_ID, path)
- print(err % command)
- return None
+ err = err + excp.message
+ print(err) # TODO show that message in an empty window
+ return False
+
+ is_image, err = utilities_gfile_is_image(gfile, err)
+ if is_image:
+ return gfile
+ else:
+ print(err) # TODO show that message in an empty window
+ return True
############################################################################
################################################################################
diff --git a/src/meson.build b/src/meson.build
index 6d144f1f..36578a5a 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -1,6 +1,6 @@
+
pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name())
moduledir = join_paths(pkgdatadir, meson.project_name())
-gnome = import('gnome')
gnome.compile_resources(meson.project_name(),
meson.project_name() + '.gresource.xml',
@@ -28,6 +28,7 @@ configure_file(
drawing_sources = [
'__init__.py',
'main.py',
+ 'gi_composites.py',
'window.py',
'deco_manager.py',
@@ -35,6 +36,8 @@ drawing_sources = [
'minimap.py',
'image.py',
+ 'history_manager.py',
+ 'saving_manager.py',
'selection_manager.py',
'utilities.py',
@@ -47,11 +50,11 @@ drawing_sources = [
'optionsbars/classic/optionsbar_classic.py',
'optionsbars/classic/optionsbar_color_popover.py',
'optionsbars/selection/optionsbar_selection.py',
- 'optionsbars/canvas/optionsbar_crop.py',
- 'optionsbars/canvas/optionsbar_filters.py',
- 'optionsbars/canvas/optionsbar_rotate.py',
- 'optionsbars/canvas/optionsbar_scale.py',
- 'optionsbars/canvas/optionsbar_skew.py',
+ 'optionsbars/transform/optionsbar_crop.py',
+ 'optionsbars/transform/optionsbar_filters.py',
+ 'optionsbars/transform/optionsbar_rotate.py',
+ 'optionsbars/transform/optionsbar_scale.py',
+ 'optionsbars/transform/optionsbar_skew.py',
'tools/abstract_tool.py',
'tools/utilities_blur.py',
@@ -67,6 +70,7 @@ drawing_sources = [
'tools/classic_tools/tool_paint.py',
'tools/classic_tools/tool_pencil.py',
'tools/classic_tools/tool_picker.py',
+ 'tools/classic_tools/tool_points.py',
'tools/classic_tools/tool_shape.py',
'tools/classic_tools/tool_text.py',
@@ -75,12 +79,12 @@ drawing_sources = [
'tools/selection_tools/select_free.py',
'tools/selection_tools/select_color.py',
- 'tools/canvas_tools/abstract_canvas_tool.py',
- 'tools/canvas_tools/tool_crop.py',
- 'tools/canvas_tools/tool_filters.py',
- 'tools/canvas_tools/tool_rotate.py',
- 'tools/canvas_tools/tool_scale.py',
- 'tools/canvas_tools/tool_skew.py'
+ 'tools/transform_tools/abstract_transform_tool.py',
+ 'tools/transform_tools/tool_crop.py',
+ 'tools/transform_tools/tool_filters.py',
+ 'tools/transform_tools/tool_rotate.py',
+ 'tools/transform_tools/tool_scale.py',
+ 'tools/transform_tools/tool_skew.py'
]
install_data(drawing_sources, install_dir: moduledir)
diff --git a/src/minimap.py b/src/minimap.py
index d1a1af20..6cbbb904 100644
--- a/src/minimap.py
+++ b/src/minimap.py
@@ -21,88 +21,87 @@ from .utilities_overlay import utilities_show_overlay_on_context
class DrMinimap(Gtk.Popover):
__gtype_name__ = 'DrMinimap'
- # TODO custom "move" cursor
- # TODO "on_motion" method?
+ # TODO custom "move" cursor and "on_motion" method?
def __init__(self, window, minimap_btn, **kwargs):
super().__init__(**kwargs)
- self.window = window
- self.preview_size = self.window._settings.get_int('preview-size')
+ self._window = window
+ self._preview_size = self._window._settings.get_int('preview-size')
self.mini_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 300, 300)
- self.mini_surface = cairo.ImageSurface(cairo.Format.ARGB32, 5, 5)
+ self._mini_surface = cairo.ImageSurface(cairo.Format.ARGB32, 5, 5)
builder = Gtk.Builder.new_from_resource( \
'/com/github/maoschanz/drawing/ui/minimap.ui')
box = builder.get_object('minimap_box')
- self.zoom_scale = builder.get_object('zoom_scale')
- self.zoom_scale.add_mark(100.0, Gtk.PositionType.TOP, None)
- self.zoom_scale.connect('value-changed', self.update_zoom_level)
+ self._zoom_scale = builder.get_object('_zoom_scale')
+ self._zoom_scale.add_mark(100.0, Gtk.PositionType.TOP, None)
+ self._zoom_scale.connect('value-changed', self._update_zoom_level)
- self.minimap_area = builder.get_object('minimap_area')
- self.minimap_area.set_size(200, 200)
- self.minimap_area.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | \
+ self._minimap_area = builder.get_object('_minimap_area')
+ self._minimap_area.set_size(200, 200)
+ self._minimap_area.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | \
Gdk.EventMask.BUTTON_RELEASE_MASK)
- self.minimap_area.connect('draw', self.on_minimap_draw)
- self.minimap_area.connect('button-press-event', self.on_minimap_press)
- self.minimap_area.connect('button-release-event', self.on_minimap_release)
+ self._minimap_area.connect('draw', self._on_mm_draw)
+ self._minimap_area.connect('button-press-event', self._on_mm_press)
+ self._minimap_area.connect('button-release-event', self._on_mm_release)
self.add(box)
- self.connect('closed', self.on_popover_dismissed)
+ self.connect('closed', self._on_popover_dismissed)
self.set_relative_to(minimap_btn)
- def update_zoom_level(self, *args):
- zoom_value = self.zoom_scale.get_value()
- self.window.get_active_image().zoom_level = zoom_value/100 # XXX superflu ?
- self.window.get_active_image().update() # XXX superflu ?
+ def _update_zoom_level(self, *args):
+ zoom_value = self._zoom_scale.get_value()
+ self._window.get_active_image().zoom_level = zoom_value/100
+ self._window.get_active_image().update() # XXX superflus ? <^
self.set_zoom_label(zoom_value)
def set_zoom_label(self, int_value):
- # This displays the zoom level, %s will be replaced with a number, while
- # %% is just the symbol '%'
+ # This string displays the zoom level: %s will be replaced with a
+ # number, while %% will be rendered as the symbol '%'
zoom_label = _("%s%%") % str(int(int_value))
- self.window.options_manager.set_minimap_label(zoom_label)
+ self._window.options_manager.set_minimap_label(zoom_label)
self.update_minimap(False)
def update_zoom_scale(self, value):
- self.zoom_scale.set_value(value * 100)
+ self._zoom_scale.set_value(value * 100)
- def on_popover_dismissed(self, *args):
+ def _on_popover_dismissed(self, *args):
"""Callback of the 'closed' signal, updating the state of the action."""
try:
self.get_relative_to().set_active(False)
except:
pass
- def on_minimap_draw(self, area, cairo_context):
+ def _on_mm_draw(self, area, cairo_context):
"""Callback of the 'draw' signal, painting the area with the surface."""
- cairo_context.set_source_surface(self.mini_surface, 0, 0)
+ cairo_context.set_source_surface(self._mini_surface, 0, 0)
cairo_context.paint()
- def on_minimap_press(self, area, event):
+ def _on_mm_press(self, area, event):
"""Callback of the 'button-press-event' signal."""
- self.old_x = event.x
- self.old_y = event.y
+ self._old_x = event.x
+ self._old_y = event.y
- def on_minimap_release(self, area, event):
+ def _on_mm_release(self, area, event):
"""Callback of the 'button-release-event' signal."""
- image = self.window.get_active_image()
+ image = self._window.get_active_image()
size_ratio = image.get_minimap_ratio(self.mini_pixbuf.get_width())
- delta_x = int((event.x - self.old_x) / size_ratio)
- delta_y = int((event.y - self.old_y) / size_ratio)
+ delta_x = int((event.x - self._old_x) / size_ratio)
+ delta_y = int((event.y - self._old_y) / size_ratio)
image.add_deltas(delta_x, delta_y, 1)
def update_minimap(self, force_update):
"""Update the overlay on the minimap, based on the scroll coordinates."""
if not self.get_visible() and not force_update:
return
- image = self.window.get_active_image()
- self.mini_pixbuf = image.get_mini_pixbuf(self.preview_size)
- self.mini_surface = Gdk.cairo_surface_create_from_pixbuf( \
+ image = self._window.get_active_image()
+ self.mini_pixbuf = image.get_mini_pixbuf(self._preview_size)
+ self._mini_surface = Gdk.cairo_surface_create_from_pixbuf( \
self.mini_pixbuf, 0, None)
pix_width = self.mini_pixbuf.get_width()
pix_height = self.mini_pixbuf.get_height()
- self.minimap_area.set_size_request(pix_width, pix_height)
+ self._minimap_area.set_size_request(pix_width, pix_height)
# TODO if possible, updating the overlay should be doable without first
# rebuilding the pixbuf and the surface. It's not very useful however
@@ -114,7 +113,7 @@ class DrMinimap(Gtk.Popover):
visible_width, visible_height = image.get_visible_size()
mini_width = int(visible_width * size_ratio)
mini_height = int(visible_height * size_ratio)
- mini_context = cairo.Context(self.mini_surface)
+ mini_context = cairo.Context(self._mini_surface)
mini_context.move_to(mini_x, mini_y)
mini_context.line_to(mini_x, mini_height + mini_y)
mini_context.line_to(mini_width + mini_x, mini_height + mini_y)
@@ -124,7 +123,7 @@ class DrMinimap(Gtk.Popover):
utilities_show_overlay_on_context(mini_context, mini_path, False)
# else:
# ???
- self.minimap_area.queue_draw()
+ self._minimap_area.queue_draw()
image.update()
############################################################################
diff --git a/src/new_image_dialog.py b/src/new_image_dialog.py
index 043135c5..46845c0e 100644
--- a/src/new_image_dialog.py
+++ b/src/new_image_dialog.py
@@ -51,7 +51,7 @@ class DrCustomImageDialog(Gtk.Dialog):
self._height_btn.set_value(default_h)
self._color_btn = builder.get_object('color_btn')
- background_rgba = self._app_settings.get_strv('background-rgba')
+ background_rgba = self._app_settings.get_strv('default-rgba')
r = float(background_rgba[0])
g = float(background_rgba[1])
b = float(background_rgba[2])
@@ -73,7 +73,7 @@ class DrCustomImageDialog(Gtk.Dialog):
if self._default_checkbtn.get_active():
self._app_settings.set_int('default-width', width)
self._app_settings.set_int('default-height', height)
- self._app_settings.set_strv('background-rgba', rgba)
+ self._app_settings.set_strv('default-rgba', rgba)
return width, height, rgba
############################################################################
diff --git a/src/options_manager.py b/src/options_manager.py
index b8aae671..c77dc946 100644
--- a/src/options_manager.py
+++ b/src/options_manager.py
@@ -24,7 +24,7 @@ class DrOptionsManager():
def __init__(self, window):
self.window = window
self._bottom_panes_dict = {}
- self._active_pane_id= None
+ self._active_pane_id = None
def _action_exists(self, name):
return self.window.lookup_action(name) is not None
@@ -46,7 +46,7 @@ class DrOptionsManager():
if not self._action_exists(name):
return
action = self.window.lookup_action(name)
- if action.get_state_type().dup_string() is 's':
+ if action.get_state_type().dup_string() == 's':
return action.get_state().get_string()
else:
return action.get_state()
@@ -93,6 +93,14 @@ class DrOptionsManager():
shape_name = self.get_value('shape_type')
self.window._settings.set_string('last-active-shape', shape_name)
+ font_fam_name = self.window.tools['text'].font_fam_name
+ self.window._settings.set_string('last-font-name', font_fam_name)
+
+ use_antialiasing = self.get_value('antialias')
+ self.window._settings.set_boolean('use-antialiasing', use_antialiasing)
+
+ # XXX more ?
+
############################################################################
# Bottom panes management ##################################################
@@ -176,6 +184,10 @@ class DrOptionsManager():
def get_tool_width(self):
return int(self.get_classic_tools_pane().thickness_spinbtn.get_value())
+ def update_tool_width(self, delta):
+ width = self.get_tool_width() + delta
+ self.get_classic_tools_pane().thickness_spinbtn.set_value(width)
+
def set_right_color(self, color):
return self.right_color_btn().color_widget.set_rgba(color)
@@ -189,8 +201,11 @@ class DrOptionsManager():
return self.left_color_btn().color_widget.get_rgba()
def get_operator(self):
- enum = self.get_classic_tools_pane()._operator_enum
- label = self.get_classic_tools_pane()._operator_label
+ # XXX répugnant, on duplique la donnée dans les 2 popovers, puis on
+ # hardcode qu'on prendra la donnée uniquement dans celui de droite, et
+ # tout ça sans respecter l'encapsulation
+ enum = self.get_classic_tools_pane()._color_r._operator_enum
+ label = self.get_classic_tools_pane()._color_r._operator_label
return enum, label
############################################################################
diff --git a/src/optionsbars/abstract_optionsbar.py b/src/optionsbars/abstract_optionsbar.py
index 936cf397..f1434346 100644
--- a/src/optionsbars/abstract_optionsbar.py
+++ b/src/optionsbars/abstract_optionsbar.py
@@ -39,7 +39,7 @@ class AbstractOptionsBar():
def build_options_menu(self, widget, model, label):
pass
- def update_for_new_tool(self, tool): # and the menu? TODO
+ def update_for_new_tool(self, tool):
pass
def get_minimap_btn(self):
diff --git a/src/optionsbars/classic/optionsbar-color-popover.ui b/src/optionsbars/classic/optionsbar-color-popover.ui
index caa3f630..71dc4cfb 100644
--- a/src/optionsbars/classic/optionsbar-color-popover.ui
+++ b/src/optionsbars/classic/optionsbar-color-popover.ui
@@ -203,42 +203,51 @@
<menu id="other-operators-menu">
<section>
+ <!-- Context: possible ways to apply the color to the canvas -->
<attribute name="label" translatable="yes">Other modes</attribute>
<item>
+ <!-- Context: a possible way to apply the color to the canvas -->
<attribute name="label" translatable="yes">Raw source color</attribute>
<attribute name="action">win.cairo_operator</attribute>
<attribute name="target">source</attribute>
</item>
<item>
+ <!-- Context: a possible way to apply the color to the canvas -->
<attribute name="label" translatable="yes">Highlight</attribute>
<attribute name="action">win.cairo_operator</attribute>
<attribute name="target">multiply</attribute>
</item>
<item>
+ <!-- Context: a possible way to apply the color to the canvas -->
<attribute name="label" translatable="yes">Difference</attribute>
<attribute name="action">win.cairo_operator</attribute>
<attribute name="target">difference</attribute>
</item>
- <!-- XXX and more? -->
+ <!-- and more...? -->
</section>
<submenu>
- <attribute name="label" translatable="yes">Photo manipulation</attribute>
+ <!-- Context: possible ways to apply the color to the canvas -->
+ <attribute name="label" translatable="yes">Photo-oriented modes</attribute>
<item>
+ <!-- Context: a possible way to apply the color to the canvas -->
<attribute name="label" translatable="yes">Hue only</attribute>
<attribute name="action">win.cairo_operator</attribute>
<attribute name="target">hsl-hue</attribute>
</item>
<item>
+ <!-- Context: a possible way to apply the color to the canvas -->
<attribute name="label" translatable="yes">Saturation only</attribute>
<attribute name="action">win.cairo_operator</attribute>
<attribute name="target">hsl-saturation</attribute>
</item>
<item>
+ <!-- Context: a possible way to apply the color to the canvas -->
<attribute name="label" translatable="yes">Hue and saturation</attribute>
<attribute name="action">win.cairo_operator</attribute>
<attribute name="target">hsl-color</attribute>
</item>
<item>
+ <!-- Context: a possible way to apply the color to the canvas -->
<attribute name="label" translatable="yes">Luminosity only</attribute>
<attribute name="action">win.cairo_operator</attribute>
<attribute name="target">hsl-luminosity</attribute>
diff --git a/src/optionsbars/classic/optionsbar_classic.py b/src/optionsbars/classic/optionsbar_classic.py
index fcdf041b..06426201 100644
--- a/src/optionsbars/classic/optionsbar_classic.py
+++ b/src/optionsbars/classic/optionsbar_classic.py
@@ -30,8 +30,6 @@ class OptionsBarClassic(AbstractOptionsBar):
self.window = window
builder = self.build_ui('optionsbars/classic/optionsbar-classic.ui')
- self._operator_enum = cairo.Operator.OVER
- self._operator_label = _("Normal")
self.color_box = builder.get_object('color_box')
self.color_menu_btn_r = builder.get_object('color_menu_btn_r')
self.color_menu_btn_l = builder.get_object('color_menu_btn_l')
@@ -111,41 +109,6 @@ class OptionsBarClassic(AbstractOptionsBar):
self._color_l.color_widget.set_rgba(self._color_r.color_widget.get_rgba())
self._color_r.color_widget.set_rgba(left_color)
- def _set_active_operator(self, op_as_string):
- if op_as_string == 'difference':
- self._operator_enum = cairo.Operator.DIFFERENCE
- self._operator_label = _("Difference")
- elif op_as_string == 'multiply':
- self._operator_enum = cairo.Operator.MULTIPLY
- self._operator_label = _("Highlight")
- elif op_as_string == 'source':
- self._operator_enum = cairo.Operator.SOURCE
- self._operator_label = _("Raw source color")
-
- elif op_as_string == 'hsl-hue':
- self._operator_enum = cairo.Operator.HSL_HUE
- self._operator_label = _("Hue only")
- elif op_as_string == 'hsl-saturation':
- self._operator_enum = cairo.Operator.HSL_SATURATION
- self._operator_label = _("Saturation only")
- elif op_as_string == 'hsl-color':
- self._operator_enum = cairo.Operator.HSL_COLOR
- self._operator_label = _("Hue and saturation")
- elif op_as_string == 'hsl-luminosity':
- self._operator_enum = cairo.Operator.HSL_LUMINOSITY
- self._operator_label = _("Luminosity only")
-
- elif op_as_string == 'clear':
- self._operator_enum = cairo.Operator.CLEAR
- self._operator_label = _("Erase")
- elif op_as_string == 'dest-in':
- self._operator_enum = cairo.Operator.DEST_IN
- self._operator_label = _("Blur")
-
- else:
- self._operator_enum = cairo.Operator.OVER
- self._operator_label = _("Normal")
-
def _build_color_buttons(self, builder):
"""Initialize the 2 color-buttons and popovers with the 2 previously
memorized RGBA values."""
@@ -179,7 +142,6 @@ class OptionsBarClassic(AbstractOptionsBar):
self._update_popovers(args[1].get_string())
def _update_popovers(self, op_as_string):
- self._set_active_operator(op_as_string)
self._color_r.adapt_to_operator(op_as_string)
self._color_l.adapt_to_operator(op_as_string)
diff --git a/src/optionsbars/classic/optionsbar_color_popover.py b/src/optionsbars/classic/optionsbar_color_popover.py
index 442a7bd6..119ad611 100644
--- a/src/optionsbars/classic/optionsbar_color_popover.py
+++ b/src/optionsbars/classic/optionsbar_color_popover.py
@@ -21,6 +21,40 @@ from .utilities import utilities_get_rgba_name
PREFIX = '/com/github/maoschanz/drawing/'
+CAIRO_OP_VALUES = {
+ 'over': cairo.Operator.OVER,
+
+ 'clear': cairo.Operator.CLEAR,
+ 'dest-in': cairo.Operator.DEST_IN,
+
+ 'difference': cairo.Operator.DIFFERENCE,
+ 'multiply': cairo.Operator.MULTIPLY,
+ 'source': cairo.Operator.SOURCE,
+
+ 'hsl-hue': cairo.Operator.HSL_HUE,
+ 'hsl-saturation': cairo.Operator.HSL_SATURATION,
+ 'hsl-color': cairo.Operator.HSL_COLOR,
+ 'hsl-luminosity': cairo.Operator.HSL_LUMINOSITY,
+}
+
+CAIRO_OP_LABELS = {
+ 'over': _("Normal"),
+
+ 'clear': _("Erase"),
+ 'dest-in': _("Blur"),
+
+ 'difference': _("Difference"),
+ 'multiply': _("Highlight"),
+ 'source': _("Raw source color"),
+
+ 'hsl-hue': _("Hue only"),
+ 'hsl-saturation': _("Saturation only"),
+ 'hsl-color': _("Hue and saturation"),
+ 'hsl-luminosity': _("Luminosity only"),
+}
+
+################################################################################
+
class OptionsBarClassicColorPopover(Gtk.Popover):
__gtype_name__ = 'OptionsBarClassicColorPopover'
@@ -37,6 +71,10 @@ class OptionsBarClassicColorPopover(Gtk.Popover):
self._thumbnail_image = thumbn
self._parent_bar = cl_bar
+ # These attributes are the same in both oppovers, but this may evolve
+ self._operator_enum = cairo.Operator.OVER
+ self._operator_label = _("Normal")
+
########################################################################
# Box at the top #######################################################
@@ -88,6 +126,9 @@ class OptionsBarClassicColorPopover(Gtk.Popover):
return not (op_as_string == 'clear' or op_as_string == 'dest-in')
def adapt_to_operator(self, op_as_string):
+ self._operator_enum = CAIRO_OP_VALUES[op_as_string]
+ self._operator_label = CAIRO_OP_LABELS[op_as_string]
+ # print("adapt to operator :", op_as_string)
supports_colors = self._operator_supports_color(op_as_string)
self._operator_menubtn.get_popover().popdown()
self.color_widget.set_sensitive(supports_colors)
@@ -128,13 +169,11 @@ class OptionsBarClassicColorPopover(Gtk.Popover):
# Set the tooltip of the button
tooltip_string = utilities_get_rgba_name(red, green, blue, alpha)
if not self._operator_supports_color(op_as_string):
- # FIXME not if the tool is the eraser
- tooltip_string = self._parent_bar._operator_label
+ tooltip_string = self._operator_label
elif op_as_string == 'over':
pass # Normal situation, no need to tell the user
else:
- # XXX shouldn't fail but is ugly
- tooltip_string = self._parent_bar._operator_label + ' — ' + tooltip_string
+ tooltip_string = self._operator_label + ' - ' + tooltip_string
self._button.set_tooltip_text(tooltip_string)
############################################################################
diff --git a/src/optionsbars/selection/optionsbar-selection.ui b/src/optionsbars/selection/optionsbar-selection.ui
index c320828b..39481e4f 100644
--- a/src/optionsbars/selection/optionsbar-selection.ui
+++ b/src/optionsbars/selection/optionsbar-selection.ui
@@ -184,3 +184,4 @@
</menu>
</interface>
+
diff --git a/src/optionsbars/canvas/optionsbar-crop.ui b/src/optionsbars/transform/optionsbar-crop.ui
index f8fbad2c..b7d09e97 100644
--- a/src/optionsbars/canvas/optionsbar-crop.ui
+++ b/src/optionsbars/transform/optionsbar-crop.ui
@@ -98,7 +98,7 @@
<child>
<object class="GtkButton" id="apply_btn">
- <property name="action_name">win.apply_canvas_tool</property>
+ <property name="action_name">win.apply_transform</property>
<property name="tooltip-text" translatable="yes">Apply</property>
<property name="visible">True</property>
<property name="valign">center</property>
@@ -117,5 +117,66 @@
</packing>
</child>
+ <child>
+ <object class="GtkMenuButton" id="options_btn">
+ <property name="tooltip-text" translatable="yes">More options</property>
+ <property name="menu-model">actions-menu</property>
+ <property name="valign">center</property>
+ <property name="halign">center</property>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">view-more-symbolic</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+
</object>
+
+ <!-- -->
+
+ <!-- Menu shown in the action bar (bottom-right) -->
+ <menu id="actions-menu">
+ <section>
+ <attribute name="label" translatable="yes">Expand with…</attribute>
+ <item>
+ <attribute name="label" translatable="yes">Transparency</attribute>
+ <attribute name="action">win.crop-expand</attribute>
+ <attribute name="target">alpha</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Default color</attribute>
+ <attribute name="action">win.crop-expand</attribute>
+ <attribute name="target">initial</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Secondary color</attribute>
+ <attribute name="action">win.crop-expand</attribute>
+ <attribute name="target">secondary</attribute>
+ </item>
+ </section>
+ <section>
+ <attribute name="display-hint">horizontal-buttons</attribute>
+ <item>
+ <attribute name="label" translatable="yes">Zoom Out</attribute>
+ <attribute name="action">win.zoom_out</attribute>
+ <attribute name="verb-icon">zoom-out-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Original Zoom</attribute>
+ <attribute name="action">win.zoom_100</attribute>
+ <attribute name="verb-icon">zoom-original-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Zoom In</attribute>
+ <attribute name="action">win.zoom_in</attribute>
+ <attribute name="verb-icon">zoom-in-symbolic</attribute>
+ </item>
+ </section>
+ </menu>
+
</interface>
diff --git a/src/optionsbars/canvas/optionsbar-filters.ui b/src/optionsbars/transform/optionsbar-filters.ui
index 85302f66..33d81c32 100644
--- a/src/optionsbars/canvas/optionsbar-filters.ui
+++ b/src/optionsbars/transform/optionsbar-filters.ui
@@ -131,7 +131,7 @@
<child>
<object class="GtkButton" id="apply_btn">
- <property name="action_name">win.apply_canvas_tool</property>
+ <property name="action_name">win.apply_transform</property>
<property name="tooltip-text" translatable="yes">Apply</property>
<property name="visible">True</property>
<property name="valign">center</property>
@@ -181,6 +181,8 @@
</item>
</section>
<section>
+ <!-- Context: the title of the menu with various types of blurring -->
+ <!-- filters and their options. -->
<attribute name="label" translatable="yes">Blurring</attribute>
<item>
<attribute name="label" translatable="yes">Fast blur</attribute>
@@ -199,7 +201,7 @@
<!-- </item> -->
<item>
<!-- Context: a filter that censors the image with some kind of tiles -->
- <attribute name="label" translatable="yes">Pixelisation</attribute>
+ <attribute name="label" translatable="yes">Pixelization</attribute>
<attribute name="action">win.filters_type</attribute>
<attribute name="target">tiles</attribute>
</item>
diff --git a/src/optionsbars/canvas/optionsbar-rotate.ui b/src/optionsbars/transform/optionsbar-rotate.ui
index 1262e2bb..4a92c42b 100644
--- a/src/optionsbars/canvas/optionsbar-rotate.ui
+++ b/src/optionsbars/transform/optionsbar-rotate.ui
@@ -148,7 +148,7 @@
<child>
<object class="GtkButton" id="apply_btn">
- <property name="action_name">win.apply_canvas_tool</property>
+ <property name="action_name">win.apply_transform</property>
<property name="tooltip-text" translatable="yes">Apply</property>
<property name="visible">True</property>
<property name="valign">center</property>
diff --git a/src/optionsbars/canvas/optionsbar-scale.ui b/src/optionsbars/transform/optionsbar-scale.ui
index 965a3461..24e50d5c 100644
--- a/src/optionsbars/canvas/optionsbar-scale.ui
+++ b/src/optionsbars/transform/optionsbar-scale.ui
@@ -99,7 +99,7 @@
<child>
<object class="GtkButton" id="apply_btn">
- <property name="action_name">win.apply_canvas_tool</property>
+ <property name="action_name">win.apply_transform</property>
<property name="tooltip-text" translatable="yes">Apply</property>
<property name="visible">True</property>
<property name="valign">center</property>
@@ -155,21 +155,22 @@
<!-- </item> -->
<!-- </section> -->
<section>
+ <!-- Context: the title of a menu to chose how the image will be scaled -->
<attribute name="label" translatable="yes">Keep proportions</attribute>
<item>
- <!-- Context for translations: an item in a menu whose title is "Keep proportions" -->
+ <!-- Context: an item in a menu whose title is "Keep proportions" -->
<attribute name="label" translatable="yes">Always</attribute>
<attribute name="action">win.scale-proportions</attribute>
<attribute name="target">always</attribute>
</item>
<item>
- <!-- Context for translations: an item in a menu whose title is "Keep proportions" -->
+ <!-- Context: an item in a menu whose title is "Keep proportions" -->
<attribute name="label" translatable="yes">When scaling from corners</attribute>
<attribute name="action">win.scale-proportions</attribute>
<attribute name="target">corners</attribute>
</item>
<item>
- <!-- Context for translations: an item in a menu whose title is "Keep proportions" -->
+ <!-- Context: an item in a menu whose title is "Keep proportions" -->
<attribute name="label" translatable="yes">Never</attribute>
<attribute name="action">win.scale-proportions</attribute>
<attribute name="target">never</attribute>
diff --git a/src/optionsbars/canvas/optionsbar-skew.ui b/src/optionsbars/transform/optionsbar-skew.ui
index dbc4b785..c2e7675b 100644
--- a/src/optionsbars/canvas/optionsbar-skew.ui
+++ b/src/optionsbars/transform/optionsbar-skew.ui
@@ -97,7 +97,7 @@
<child>
<object class="GtkButton" id="apply_btn">
- <property name="action_name">win.apply_canvas_tool</property>
+ <property name="action_name">win.apply_transform</property>
<property name="tooltip-text" translatable="yes">Apply</property>
<property name="visible">True</property>
<property name="valign">center</property>
diff --git a/src/optionsbars/canvas/optionsbar_crop.py b/src/optionsbars/transform/optionsbar_crop.py
index 125f38d1..63a0ecfa 100644
--- a/src/optionsbars/canvas/optionsbar_crop.py
+++ b/src/optionsbars/transform/optionsbar_crop.py
@@ -24,21 +24,31 @@ class OptionsBarCrop(AbstractOptionsBar):
def __init__(self):
super().__init__()
- builder = self.build_ui('optionsbars/canvas/optionsbar-crop.ui')
+ builder = self.build_ui('optionsbars/transform/optionsbar-crop.ui')
self.height_btn = builder.get_object('height_btn')
self.width_btn = builder.get_object('width_btn')
utilities_add_unit_to_spinbtn(self.height_btn, 4, 'px')
utilities_add_unit_to_spinbtn(self.width_btn, 4, 'px')
# XXX top/bottom/left/right ?
+ self.options_btn = builder.get_object('options_btn')
+
self.width_label = builder.get_object('width_label')
self.height_label = builder.get_object('height_label')
self.separator = builder.get_object('separator')
+ def toggle_options_menu(self):
+ if self.options_btn.get_visible():
+ self.options_btn.set_active(not self.options_btn.get_active())
+
+ def hide_options_menu(self):
+ self.options_btn.set_active(False)
+
def init_adaptability(self):
super().init_adaptability()
temp_limit_size = self.centered_box.get_preferred_width()[0] + \
self.cancel_btn.get_preferred_width()[0] + \
+ self.options_btn.get_preferred_width()[0] + \
self.apply_btn.get_preferred_width()[0]
self.set_limit_size(temp_limit_size)
diff --git a/src/optionsbars/canvas/optionsbar_filters.py b/src/optionsbars/transform/optionsbar_filters.py
index 11130f2c..1acc19a4 100644
--- a/src/optionsbars/canvas/optionsbar_filters.py
+++ b/src/optionsbars/transform/optionsbar_filters.py
@@ -26,7 +26,7 @@ class OptionsBarFilters(AbstractOptionsBar):
super().__init__()
self.window = window
self.filters_tool = filters_tool
- builder = self.build_ui('optionsbars/canvas/optionsbar-filters.ui')
+ builder = self.build_ui('optionsbars/transform/optionsbar-filters.ui')
self.menu_btn = builder.get_object('menu_btn')
self.menu_label = builder.get_object('menu_label')
self.menu_icon = builder.get_object('menu_icon')
diff --git a/src/optionsbars/canvas/optionsbar_rotate.py b/src/optionsbars/transform/optionsbar_rotate.py
index 40e6780c..109067f3 100644
--- a/src/optionsbars/canvas/optionsbar_rotate.py
+++ b/src/optionsbars/transform/optionsbar_rotate.py
@@ -26,7 +26,7 @@ class OptionsBarRotate(AbstractOptionsBar):
# knowing the tool is needed because the pane doesn't compact the same
# way if it's applied to the selection
self.rotate_tool = rotate_tool
- builder = self.build_ui('optionsbars/canvas/optionsbar-rotate.ui')
+ builder = self.build_ui('optionsbars/transform/optionsbar-rotate.ui')
self.angle_btn = builder.get_object('angle_btn')
utilities_add_unit_to_spinbtn(self.angle_btn, 3, '°')
self.more_btn = builder.get_object('more_btn')
diff --git a/src/optionsbars/canvas/optionsbar_scale.py b/src/optionsbars/transform/optionsbar_scale.py
index 3b1a9f4d..783e61f5 100644
--- a/src/optionsbars/canvas/optionsbar_scale.py
+++ b/src/optionsbars/transform/optionsbar_scale.py
@@ -27,7 +27,7 @@ class OptionsBarScale(AbstractOptionsBar):
# future possible improvement: the pane may not compact the same way if
# the manipulation concerns the selection.
#self.scale_tool = scale_tool
- builder = self.build_ui('optionsbars/canvas/optionsbar-scale.ui')
+ builder = self.build_ui('optionsbars/transform/optionsbar-scale.ui')
self.width_btn = builder.get_object('width_btn')
self.height_btn = builder.get_object('height_btn')
diff --git a/src/optionsbars/canvas/optionsbar_skew.py b/src/optionsbars/transform/optionsbar_skew.py
index 5aaa07bb..4131d4b5 100644
--- a/src/optionsbars/canvas/optionsbar_skew.py
+++ b/src/optionsbars/transform/optionsbar_skew.py
@@ -24,7 +24,7 @@ class OptionsBarSkew(AbstractOptionsBar):
def __init__(self):
super().__init__()
- builder = self.build_ui('optionsbars/canvas/optionsbar-skew.ui')
+ builder = self.build_ui('optionsbars/transform/optionsbar-skew.ui')
self.xy_label = builder.get_object('xy_label')
self.yx_label = builder.get_object('yx_label')
self.separator = builder.get_object('separator')
diff --git a/src/preferences.py b/src/preferences.py
index 8c837ce2..45c1de3d 100644
--- a/src/preferences.py
+++ b/src/preferences.py
@@ -15,23 +15,25 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-from gi.repository import Gtk, Gio, GLib, Gdk
+from gi.repository import Gtk, Gio, Gdk
from .utilities import utilities_add_unit_to_spinbtn
-@Gtk.Template(resource_path='/com/github/maoschanz/drawing/ui/preferences.ui')
+from .gi_composites import GtkTemplate
+
+@GtkTemplate(ui='/com/github/maoschanz/drawing/ui/preferences.ui')
class DrPrefsWindow(Gtk.Window):
__gtype_name__ = 'DrPrefsWindow'
- content_area = Gtk.Template.Child()
- stack = Gtk.Template.Child()
+ content_area = GtkTemplate.Child()
+ stack = GtkTemplate.Child()
- page_images = Gtk.Template.Child()
- page_tools = Gtk.Template.Child()
- page_advanced = Gtk.Template.Child()
+ page_images = GtkTemplate.Child()
+ page_tools = GtkTemplate.Child()
+ page_advanced = GtkTemplate.Child()
- adj_width = Gtk.Template.Child()
- adj_height = Gtk.Template.Child()
- adj_preview = Gtk.Template.Child()
+ adj_width = GtkTemplate.Child()
+ adj_height = GtkTemplate.Child()
+ adj_preview = GtkTemplate.Child()
_current_grid = None
_grid_attach_cpt = 0
@@ -39,12 +41,19 @@ class DrPrefsWindow(Gtk.Window):
def __init__(self, is_beta, wants_csd, **kwargs):
super().__init__(**kwargs)
+ self.init_template()
if wants_csd:
- header_bar = Gtk.HeaderBar(visible=True, title=_("Preferences"), \
- show_close_button=True)
+ header_bar = Gtk.HeaderBar(
+ visible=True, \
+ title=_("Preferences"), \
+ show_close_button=True \
+ )
self.set_titlebar(header_bar)
- stack_switcher = Gtk.StackSwitcher(visible=True, stack=self.stack, \
- halign=Gtk.Align.CENTER)
+ stack_switcher = Gtk.StackSwitcher(
+ visible=True, \
+ stack=self.stack, \
+ halign=Gtk.Align.CENTER \
+ )
header_bar.set_custom_title(stack_switcher)
self.set_default_size(480, 500)
else:
@@ -54,14 +63,17 @@ class DrPrefsWindow(Gtk.Window):
self.set_default_size(600, 400) # Not high enough but the golden
# ratio is more important than usability
+ if is_beta:
+ self.get_style_context().add_class('devel')
+
self.page_builder_images()
self.page_builder_tools()
self.page_builder_advanced(is_beta)
- # Each page_* attribute is a GtkGrid. The page_builder_* methods declare
- # their grid to be the currently filled one, and reset the counter.
- # Then, the page_builder_* methods will call the add_* methods, who will
- # build accurate widgets to be packed on the grid by the attach_* methods.
+ # Each `page_*` attribute is a GtkGrid. Each `page_builder_*` method declare
+ # its grid to be the currently filled one, and reset the counter.
+ # Then, each `page_builder_*` method will call the `add_*` methods, who will
+ # build accurate widgets to be packed on the grid by the `attach_*` methods.
############################################################################
@@ -78,29 +90,31 @@ class DrPrefsWindow(Gtk.Window):
"""Adds the widget to the grid of the 'images' page."""
self.set_current_grid(self.page_images)
+ # Context: title of a section of the preferences
self.add_section_title(_("New images"))
self.add_adj(_("Default width"), 'default-width', self.adj_width)
self.add_adj(_("Default height"), 'default-height', self.adj_height)
- bg_color_btn = Gtk.ColorButton(use_alpha=True)
- background_rgba = self._settings.get_strv('background-rgba')
- r = float(background_rgba[0])
- g = float(background_rgba[1])
- b = float(background_rgba[2])
- a = float(background_rgba[3])
- color = Gdk.RGBA(red=r, green=g, blue=b, alpha=a)
- bg_color_btn.set_rgba(color)
- bg_color_btn.connect('color-set', self.on_background_changed)
- self.add_row(_("Default background"), bg_color_btn)
+ self.add_colorbtn(_("Default color"), 'default-rgba')
self.add_section_separator()
+ # Context: title of a section of the preferences
self.add_section_title(_("Images saving"))
self.add_help(_("JPEG and BMP images can't handle transparency.") + \
" " + _("If you save your images in these formats, what " + \
"do want to use to replace transparent pixels?"))
alpha_dict = {
+ # Context: this is the label that describes the initial color of an
+ # image (as set in the preferences or in the "new image with custom
+ # size" dialog). This is displayed in the context of editing or
+ # saving the image, but not when creating it.
+ 'initial': _("Default color"),
'white': _("White"),
'black': _("Black"),
+ # Context: replace transparent pixels with [checkboard]. This is a
+ # pattern of dark and light greys.
'checkboard': _("Checkboard"),
+ # Context: replace transparent pixels with [nothing]. In practice it
+ # means the alpha channel is just removed.
'nothing': _("Nothing"),
'ask': _("Ask before saving")
}
@@ -109,7 +123,7 @@ class DrPrefsWindow(Gtk.Window):
self.add_section_separator()
self.add_section_title(_("Zoom"))
zoom_help = _("You can zoom with Ctrl+scrolling, or only scrolling.") + \
- " " + _("Using keyboard shortcuts or touch gestures is possible too.")
+ " " + _("See the user help manual for explanations.")
self.add_help(zoom_help)
self.add_switch(_("Use 'Ctrl' to zoom"), 'ctrl-zoom')
@@ -117,17 +131,21 @@ class DrPrefsWindow(Gtk.Window):
"""Adds the widget to the grid of the 'tools' page."""
self.set_current_grid(self.page_tools)
+ # Context: title of a section of the preferences (appearance of the
+ # tools: big icons?, labels?)
self.add_section_title(_("Appearance"))
self.add_switch(_("Show tools names"), 'show-labels')
self.add_switch(_("Use big icons"), 'big-icons')
self.add_section_separator()
+ # Context: title of a section of the preferences
self.add_section_title(_("Additional tools"))
self.add_help(_("These tools are not as reliable and useful as " + \
"they should be, so they are not all enabled by default."))
tools_dict = {
'eraser': _("Eraser"),
'highlight': _("Highlighter"),
+ 'points': _("Points"),
'free_select': _("Free selection"),
'color_select': _("Color selection"),
'picker': _("Color Picker"),
@@ -139,17 +157,26 @@ class DrPrefsWindow(Gtk.Window):
"""Adds the widget to the grid of the 'advanced' page."""
self.set_current_grid(self.page_advanced)
+ # Context: title of a section of the preferences
self.add_section_title(_("Advanced options"))
self.add_adj(_("Preview size"), 'preview-size', self.adj_preview)
if is_beta:
+ # This label will not be displayed in the UI of stable versions
self.add_switch(_("Development features"), 'devel-only')
else:
self._settings.set_boolean('devel-only', False)
+ self.add_colorbtn(_("Background color"), 'ui-background-rgba')
self.add_section_separator()
+ # Context: title of a section of the preferences. It corresponds to the
+ # window layout (header-bar? tool-bar? menu-bar?)
self.add_section_title(_("Layout"))
self.add_help(_("The recommended value is \"Automatic\"."))
+ # h = headerbar; g = gnome; e = elementary
+ # m = menubar; t = toolbar
+ # c = color; s = symbolic
layouts_dict = {
+ # It has to match what's written in the previous string.
'': _("Automatic"),
'hg': _("Compact"),
'he': _("elementary OS"),
@@ -157,10 +184,12 @@ class DrPrefsWindow(Gtk.Window):
# can translate it like if it was "Traditional"
'mtc': _("Legacy"),
# "Legacy" is about the window layout, it means menubar+toolbar, you
- # can translate it like if it was "Traditional"
+ # can translate it like if it was "Traditional".
+ # Symbolic icons are monochrome icons.
'mts': _("Legacy (symbolic icons)"),
'm': _("Menubar only"),
'tc': _("Toolbar only"),
+ # Symbolic icons are monochrome icons.
'ts': _("Toolbar only (symbolic icons)")
}
self.add_radio_flowbox('deco-type', layouts_dict)
@@ -203,6 +232,18 @@ class DrPrefsWindow(Gtk.Window):
switch.connect('notify::active', self.on_bool_changed, key)
self.add_row(label_text, switch)
+ def add_colorbtn(self, label_text, key):
+ color_btn = Gtk.ColorButton(use_alpha=True)
+ background_rgba = self._settings.get_strv(key)
+ r = float(background_rgba[0])
+ g = float(background_rgba[1])
+ b = float(background_rgba[2])
+ a = float(background_rgba[3])
+ color = Gdk.RGBA(red=r, green=g, blue=b, alpha=a)
+ color_btn.set_rgba(color)
+ color_btn.connect('color-set', self.on_colorbtn_changed, key)
+ self.add_row(label_text, color_btn)
+
def add_adj(self, label_text, key, adj):
spinbtn = Gtk.SpinButton(adjustment=adj)
spinbtn.set_value(self._settings.get_int(key))
@@ -262,13 +303,10 @@ class DrPrefsWindow(Gtk.Window):
if self._radio_are_active:
self._settings.set_string(key, btn_id)
- ############################################################################
- # Custom callbacks #########################################################
-
- def on_background_changed(self, color_btn):
+ def on_colorbtn_changed(self, color_btn, key):
c = color_btn.get_rgba()
color_array = [str(c.red), str(c.green), str(c.blue), str(c.alpha)]
- self._settings.set_strv('background-rgba', color_array)
+ self._settings.set_strv(key, color_array)
############################################################################
# Low-level packing ########################################################
diff --git a/src/properties.py b/src/properties.py
index e394a9c6..a98eef47 100644
--- a/src/properties.py
+++ b/src/properties.py
@@ -75,10 +75,12 @@ class DrPropertiesDialog(Gtk.Dialog):
(pb_format, w, h) = GdkPixbuf.Pixbuf.get_file_info(label_path)
label_file_format = pb_format.get_name()
+ # Context: the path of the edited file
self._add_grid_row(0, _("Path"), label_path)
+ # Context: the file format of the edited file
self._add_grid_row(1, _("Format"), label_file_format)
self._add_grid_row(2, _("Colorspace"), self._set_colorspace_label())
- # TODO display both the colorspace of the file and off the surface, with
+ # TODO display both the colorspace of the file and of the surface, with
# a warning if there might be a loss of data
def _add_grid_row(self, index, key, value):
@@ -101,6 +103,7 @@ class DrPropertiesDialog(Gtk.Dialog):
5: "RGB30",
}
cairo_format = self._image.get_surface().get_format()
+ # Context: an invalid colorspace format
colorspace_text = enum.get(cairo_format, _("Invalid format"))
return colorspace_text
diff --git a/src/saving_manager.py b/src/saving_manager.py
new file mode 100644
index 00000000..20a12267
--- /dev/null
+++ b/src/saving_manager.py
@@ -0,0 +1,262 @@
+# saving_manager.py
+#
+# Copyright 2020 Romain F. T.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from gi.repository import Gtk, GdkPixbuf, GLib
+from .message_dialog import DrMessageDialog
+from .utilities import utilities_add_filechooser_filters
+
+ALL_SUPPORTED_FORMAT = ['jpeg', 'jpg', 'jpe', 'png', 'tiff', 'ico', 'bmp']
+
+################################################################################
+
+class DrSavingManager():
+ __gtype_name__ = 'DrSavingManager'
+
+ def __init__(self, window):
+ self._window = window
+
+ def save_current_image(self, is_export, to_new, selection_only, allow_alpha):
+ """All parameters are booleans. Returns a boolean (true if success)."""
+ if not selection_only and not self._confirm_despite_ongoing_operation():
+ return False
+
+ if is_export:
+ to_new = True
+
+ image = self._window.get_active_image()
+
+ if image.get_file_path() is None or to_new or selection_only:
+ gfile = self._file_chooser_save()
+ else:
+ gfile = image.gfile
+
+ if gfile is None:
+ return False
+ file_path = gfile.get_path()
+ file_format = self._get_format(file_path)
+
+ if selection_only:
+ pixbuf = image.selection.get_pixbuf()
+ else:
+ pixbuf = image.main_pixbuf
+
+ try:
+ # Ask the user what to do concerning formats with no alpha channel
+ if not allow_alpha:
+ can_save_as = False
+ else:
+ can_save_as = not is_export
+ if file_format not in ['png'] or not allow_alpha:
+ replacement = self._window._settings.get_string('replace-alpha')
+ if replacement == 'ask':
+ replacement = self._ask_overwrite_alpha(allow_alpha, can_save_as)
+ pixbuf = self._replace_alpha(pixbuf, replacement, image)
+
+ # Actually save the pixbuf to the given file path
+ pixbuf.savev(file_path, file_format, [None], [])
+
+ # Update the image and the window objects
+ if not is_export:
+ image.gfile = gfile
+ image.remember_current_state()
+ image.post_save()
+ self._window.set_picture_title()
+ except Exception as e:
+ if not is_export and str(e) == '2': # exception has been raised
+ # because the user wants to save the file under an other format
+ return self.saving_manager.save_current_image(False, True, False, True)
+ # else the exception was raised because an actual error occured, or
+ # the user clicked on "cancel" XXX that's dumb
+ print(e)
+ # Context: an error message
+ self._window.prompt_message(True, _("Failed to save %s") % file_path)
+ return False
+
+ return True
+
+ ############################################################################
+ # Confirmation and file-chooser dialogs ####################################
+
+ def confirm_save_modifs(self):
+ """Return True if the image can be closed/overwritten (whether it's
+ saved or not), or False otherwise (usually if the user clicked 'cancel',
+ or if an error occurred)."""
+ image = self._window.get_active_image()
+ if image.is_saved():
+ return True
+ fn = image.get_file_path()
+ if fn is None:
+ unsaved_file_name = _("Untitled") + '.png'
+ # Context: the sentence "There are unsaved modifications to %s."
+ display_name = _("this picture")
+ else:
+ unsaved_file_name = fn.split('/')[-1]
+ display_name = image.get_filename_for_display()
+ dialog = DrMessageDialog(self._window)
+ discard_id = dialog.set_action(_("Discard"), 'destructive-action', False)
+ cancel_id = dialog.set_action(_("Cancel"), None, False)
+ save_id = dialog.set_action(_("Save"), None, True)
+ dialog.add_string( _("There are unsaved modifications to %s.") % display_name)
+ self._window.minimap.update_minimap(True)
+ image = Gtk.Image().new_from_pixbuf(self._window.minimap.mini_pixbuf)
+ frame = Gtk.Frame(valign=Gtk.Align.CENTER, halign=Gtk.Align.CENTER)
+ frame.add(image)
+ dialog.add_widget(frame)
+ result = dialog.run()
+ dialog.destroy()
+ if result == save_id:
+ return self._window.action_save()
+ elif result == discard_id:
+ return True
+ else: # cancel_id
+ return False
+
+ def _confirm_despite_ongoing_operation(self):
+ """Ask to the user whether or not the want to apply the operation of the
+ current tool (curve, shape, transform, selection) before saving."""
+ msg = None
+ if self._window.get_selection_tool().selection_is_active():
+ msg = _("A part of the image is selected, and the pixels " + \
+ "beneath the selection are blank.")
+ elif self._window.active_tool().has_ongoing_operation():
+ msg = _("Modifications from the current tool haven't been applied.")
+ if msg is None:
+ return True
+
+ dialog = DrMessageDialog(self._window)
+ cancel_id = dialog.set_action(_("Cancel"), None, True)
+ save_id = dialog.set_action(_("Save"), 'destructive-action', False)
+ dialog.add_string(msg)
+ dialog.add_string(_("Do you want to save anyway?"))
+ self._window.minimap.update_minimap(True)
+ image = Gtk.Image().new_from_pixbuf(self._window.minimap.mini_pixbuf)
+ frame = Gtk.Frame(valign=Gtk.Align.CENTER, halign=Gtk.Align.CENTER)
+ frame.add(image)
+ dialog.add_widget(frame)
+ result = dialog.run()
+ dialog.destroy()
+ if result == save_id:
+ return True
+ else: # cancel_id
+ return False
+
+ def _file_chooser_save(self):
+ """Opens an "save" file chooser dialog, and return a GioFile or None."""
+ gfile = None
+ file_chooser = Gtk.FileChooserNative.new(_("Save picture as…"),
+ self._window, Gtk.FileChooserAction.SAVE, _("Save"), _("Cancel"))
+ utilities_add_filechooser_filters(file_chooser)
+
+ images_dir = GLib.get_user_special_dir(GLib.USER_DIRECTORY_PICTURES)
+ if images_dir != None: # no idea why it sometimes fails
+ file_chooser.set_current_folder(images_dir)
+ # Context: Untitled(.png) is the default name of a newly saved file
+ default_file_name = str(_("Untitled") + '.png')
+ file_chooser.set_current_name(default_file_name)
+
+ response = file_chooser.run()
+ if response == Gtk.ResponseType.ACCEPT:
+ gfile = file_chooser.get_file()
+ file_chooser.destroy()
+ return gfile
+
+ ############################################################################
+ # Pixbuf transparency ######################################################
+
+ def _get_format(self, file_path):
+ """Build a short string which will be recognized as a file format by the
+ GdkPixbuf.Pixbuf.savev method."""
+ file_format = file_path.split('.')[-1]
+ file_format = file_format.lower()
+ if file_format in ['jpeg', 'jpg', 'jpe']:
+ file_format = 'jpeg'
+ elif file_format not in ALL_SUPPORTED_FORMAT:
+ file_format = 'png'
+ return file_format
+
+ def _ask_overwrite_alpha(self, allow_alpha, can_save_as):
+ """Warn the user about the replacement of the alpha channel for JPG or
+ BMP files, but it may quickly annoy users to see a dialog so it's an
+ option. Can be used on PNG files if 'allow_alpha' is false."""
+ dialog = DrMessageDialog(self._window)
+ cancel_id = dialog.set_action(_("Cancel"), None, False)
+ if can_save_as:
+ save_as_id = dialog.set_action(_("Save as…"), None, False)
+ # Context: confirm replacing transparent pixels with the selected color
+ replace_id = dialog.set_action(_("Replace"), None, True)
+
+ if allow_alpha:
+ dialog.add_string(_("This file format doesn't support transparent colors."))
+ if can_save_as:
+ dialog.add_string(_("You can save the image as a PNG file, or " \
+ "replace transparency with:"))
+ else:
+ dialog.add_string(_("Replace transparency with:"))
+
+ alpha_combobox = Gtk.ComboBoxText(halign=Gtk.Align.CENTER)
+ alpha_combobox.append('initial', _("Default color"))
+ alpha_combobox.append('white', _("White"))
+ alpha_combobox.append('black', _("Black"))
+ alpha_combobox.append('checkboard', _("Checkboard"))
+ alpha_combobox.append('nothing', _("Nothing"))
+ alpha_combobox.set_active_id('initial') # If we run the dialog, it often
+ # means the active preference is 'ask', so there is no way we can set
+ # the default value to something more pertinent.
+ dialog.add_widget(alpha_combobox)
+
+ result = dialog.run()
+ repl = alpha_combobox.get_active_id()
+ dialog.destroy()
+ if result != replace_id:
+ raise Exception(result)
+ return repl
+
+ def _replace_alpha(self, pixbuf, replacement, image):
+ if replacement == 'nothing':
+ return
+ width = pixbuf.get_width()
+ height = pixbuf.get_height()
+ if replacement == 'white':
+ pcolor1 = self._rgb_as_hexadecimal_int(255, 255, 255)
+ pcolor2 = self._rgb_as_hexadecimal_int(255, 255, 255)
+ elif replacement == 'initial':
+ initial_rgba = image.get_initial_rgba()
+ r = int(initial_rgba.red * 255)
+ g = int(initial_rgba.green * 255)
+ b = int(initial_rgba.blue * 255)
+ # the initial color has an alpha channel but it's not pertinent, and
+ # not possible anyway.
+ pcolor1 = self._rgb_as_hexadecimal_int(r, g, b)
+ pcolor2 = self._rgb_as_hexadecimal_int(r, g, b)
+ elif replacement == 'checkboard':
+ pcolor1 = self._rgb_as_hexadecimal_int(85, 85, 85)
+ pcolor2 = self._rgb_as_hexadecimal_int(170, 170, 170)
+ else: # if replacement == 'black':
+ pcolor1 = self._rgb_as_hexadecimal_int(0, 0, 0)
+ pcolor2 = self._rgb_as_hexadecimal_int(0, 0, 0)
+ return pixbuf.composite_color_simple(width, height,
+ GdkPixbuf.InterpType.TILES, 255, 8, pcolor1, pcolor2)
+
+ def _rgb_as_hexadecimal_int(self, r, g, b):
+ """The method `GdkPixbuf.Pixbuf.composite_color_simple` wants an
+ hexadecimal integer whose format is 0xaarrggbb so here are ugly binary
+ operators."""
+ return (r << 16) + (g << 8) + b
+
+ ############################################################################
+################################################################################
+
diff --git a/src/selection_manager.py b/src/selection_manager.py
index 1df5a517..ae396f40 100644
--- a/src/selection_manager.py
+++ b/src/selection_manager.py
@@ -20,11 +20,12 @@ from gi.repository import Gtk, Gdk, GdkPixbuf
class NoSelectionPixbufException(Exception):
def __init__(self, *args):
- super().__init__("Exception: the selection pixbuf is empty.")
+ # Context: an error message
+ super().__init__(_("The selection pixbuf is empty."))
class NoSelectionPathException(Exception):
def __init__(self, *args):
- super().__init__("Exception: the selection path is empty.")
+ super().__init__(_("The selection path is empty."))
################################################################################
@@ -34,6 +35,7 @@ class DrSelectionManager():
def __init__(self, image):
self.image = image
self.init_pixbuf()
+ self.reset_future_data()
builder = Gtk.Builder.new_from_resource( \
'/com/github/maoschanz/drawing/ui/selection-manager.ui')
@@ -63,6 +65,7 @@ class DrSelectionManager():
# Erase everything outside of the path
surface = Gdk.cairo_surface_create_from_pixbuf(main_pixbuf, 0, None)
+ surface.set_device_scale(self.image.SCALE_FACTOR, self.image.SCALE_FACTOR)
cairo_context = cairo.Context(surface)
cairo_context.set_operator(cairo.Operator.DEST_IN)
cairo_context.new_path()
@@ -88,10 +91,12 @@ class DrSelectionManager():
selection_height = int(ymax - ymin)
if selection_width > 0 and selection_height > 0:
# print('⇒ load pixbuf')
- self.selection_pixbuf = Gdk.pixbuf_get_from_surface(surface, \
- int(xmin), int(ymin), selection_width, selection_height)
- # XXX PAS_SOUHAITABLE ?? passer par set_pixbuf est-il plus sain ?
- # avec un try except déjà ce serait pas mal
+ pixbuf = Gdk.pixbuf_get_from_surface(surface, int(xmin), int(ymin),\
+ selection_width, selection_height)
+ if pixbuf is not None:
+ self.selection_pixbuf = pixbuf
+ # can't use `set_pixbuf` here ^ because it would replace the free
+ # path with a rectangle path
else:
self.reset(True)
self.image.update_actions_state()
@@ -122,12 +127,11 @@ class DrSelectionManager():
self.image.update()
def get_path_with_scroll(self, tool_dx, tool_dy):
- # le concept de cette méthode pue la merde
+ # The very concept of this method sucks
if self.selection_path is None:
raise NoSelectionPathException()
- # FIXME pas du tout bon avec le zoom ?
- delta_x = tool_dx - self.image.scroll_x + self.selection_x - self.temp_x # XXX UTILISATION DE TEMP
- delta_y = tool_dy - self.image.scroll_y + self.selection_y - self.temp_y # XXX UTILISATION DE TEMP
+ delta_x = tool_dx - self.image.scroll_x + self.selection_x - self.temp_x # XXX SHOULDN'T USE TEMP
+ delta_y = tool_dy - self.image.scroll_y + self.selection_y - self.temp_y # XXX SHOULDN'T USE TEMP
cairo_context = self._get_context_with_path(delta_x, delta_y)
cairo_context.close_path()
return cairo_context.copy_path()
@@ -177,12 +181,11 @@ class DrSelectionManager():
tested_y)" is in the path defining the selection. If such path doesn't
exist, it returns None."""
if not self.is_active:
- return True # TODO throw something goddammit
- if self.selection_path is None:
- raise NoSelectionPathException()
- delta_x = self.selection_x - self.temp_x # XXX UTILISATION DE TEMP
- delta_y = self.selection_y - self.temp_y # XXX UTILISATION DE TEMP
- cairo_context = self._get_context_with_path(delta_x, delta_y)
+ return True # shouldn't happen
+ scrolled_path = self.get_path_with_scroll(self.image.scroll_x, self.image.scroll_y)
+ cairo_context = self._get_context()
+ cairo_context.new_path()
+ cairo_context.append_path(scrolled_path)
return cairo_context.in_fill(tested_x, tested_y)
def _get_context(self):
@@ -191,7 +194,7 @@ class DrSelectionManager():
def _get_context_with_path(self, delta_x, delta_y):
cairo_context = self._get_context()
for pts in self.selection_path:
- if pts[1] is not ():
+ if pts[1] != ():
x = pts[1][0] + delta_x
y = pts[1][1] + delta_y
cairo_context.line_to(int(x), int(y))
@@ -201,6 +204,8 @@ class DrSelectionManager():
# Popover menus management methods #########################################
def set_popovers_position(self, x, y):
+ """Set the coords where the popover should be opened. These coords are
+ relative TO THE WIDGET, not to the pixbuf."""
rectangle = Gdk.Rectangle()
rectangle.x = int(x)
rectangle.y = int(y)
@@ -214,38 +219,62 @@ class DrSelectionManager():
self.menu_if_inactive.popdown()
def show_popover(self):
+ """Open the adequate popover at the previously set coords."""
if self.is_active:
self.menu_if_active.popup()
else:
- gdk_rect = self.menu_if_inactive.get_pointing_to()[1]
- # It's important to pre-set these coords as the selection coords,
- # because right-click → import/paste shouldn't use (0, 0) as coords.
- self.set_coords(True, gdk_rect.x, gdk_rect.y)
self.menu_if_inactive.popup()
############################################################################
+ # Future path/coords #######################################################
+
+ def reset_future_data(self):
+ self._future_x = 0
+ self._future_y = 0
+ self._future_path = None
+
+ def set_future_coords(self, x, y):
+ self._future_x = int(x)
+ self._future_y = int(y)
+
+ def get_future_coords(self):
+ return self._future_x, self._future_y
+
+ def set_future_path(self, path):
+ self._future_path = path
+
+ def get_future_path(self):
+ return self._future_path
+
+ def update_from_transform_tool(self, new_pixbuf, dx, dy):
+ self.set_pixbuf(new_pixbuf)
+ x = self.selection_x + dx
+ y = self.selection_y + dy
+ self.set_coords(False, x, y)
+ self.set_future_coords(self._future_x + dx, self._future_y + dy)
+
+ ############################################################################
# Debug ####################################################################
def print_values(self, *args):
- """Debug only. Is linked to the "troubleshoot selection" item in the
- short hamburger menu."""
- print("selection_x", self.selection_x)
- print("selection_y", self.selection_y)
- print("temp_x", self.temp_x)
- print("temp_y", self.temp_y)
- print("image.scroll_x", self.image.scroll_x)
- print("image.scroll_y", self.image.scroll_y)
+ """Development only: is linked to the "troubleshoot selection" item in
+ the short hamburger menu."""
+ print("selection coords", self.selection_x, self.selection_y)
+ print("temp coords", self.temp_x, self.temp_y)
+ print("image.scroll coords", self.image.scroll_x, self.image.scroll_y)
print("image.zoom_level", self.image.zoom_level)
print("selection_path with scroll & temp deltas")
delta_x = 0 - self.image.scroll_x + self.selection_x - self.temp_x
delta_y = 0 - self.image.scroll_y + self.selection_y - self.temp_y
for pts in self.selection_path:
- if pts[1] is not ():
+ if pts[1] != ():
x = pts[1][0] + delta_x
y = pts[1][1] + delta_y
print('\t', x, y)
+ print("future path", self._future_path)
+ print("future coords", self._future_x, self._future_y)
print("---------------------------------------------------------------")
############################################################################
diff --git a/src/tools/abstract_tool.py b/src/tools/abstract_tool.py
index b66d7f8f..512071bf 100644
--- a/src/tools/abstract_tool.py
+++ b/src/tools/abstract_tool.py
@@ -19,8 +19,17 @@ import cairo
from gi.repository import Gtk
from .utilities_overlay import utilities_show_overlay_on_context
+class WrongToolIdException(Exception):
+ def __init__(self, expected, actual):
+ # Context: an error message
+ msg = _("Can't start operation: wrong tool id (expected {0}, got {1})")
+ super().__init__(msg.format(expected, actual))
+
+################################################################################
+
class AbstractAbstractTool():
"""Super-class implemented and extended by all tools."""
+
__gtype_name__ = 'AbstractAbstractTool'
UI_PATH = '/com/github/maoschanz/drawing/tools/ui/'
@@ -43,12 +52,12 @@ class AbstractAbstractTool():
self.try_build_pane()
############################################################################
- # Actions for tool's options ###############################################
+ # Utilities managing actions for tool's options ############################
def add_tool_action_simple(self, action_name, callback):
"""Convenient wrapper method adding a stateless action to the window. It
will be named 'action_name' (string) and activating the action will
- trigger the method 'callback'.""" # XXX shortcut ?
+ trigger the method 'callback'.""" # XXX allow to set shortcuts ?
self.window.add_action_simple(action_name, callback, None)
def add_tool_action_boolean(self, action_name, default):
@@ -61,7 +70,7 @@ class AbstractAbstractTool():
return self.window.options_manager.get_value(action_name)
def set_action_sensitivity(self, action_name, state):
- self.get_image().set_action_sensitivity(action_name, state)
+ self.window.lookup_action(action_name).set_enabled(state)
def update_actions_state(self):
self.set_action_sensitivity('main_color', self.use_color)
@@ -73,17 +82,29 @@ class AbstractAbstractTool():
return self.window._settings
############################################################################
- # UI #######################################################################
+ # Various utilities ########################################################
def show_error(self, error_text):
self.window.prompt_message(True, error_text)
+ ############################################################################
+ # Bottom pane and menubar integration ######################################
+
def try_build_pane(self):
pass
def build_bottom_pane(self):
return None
+ def on_apply_temp_pixbuf_tool_operation(self, *args):
+ pass # implemented only by transform tools
+
+ def get_options_label(self):
+ return _("No options")
+
+ def adapt_to_window_size(self, available_width):
+ pass
+
def add_item_to_menu(self, tools_menu):
tools_menu.append(self.label, 'win.active_tool::' + self.id)
@@ -98,8 +119,8 @@ class AbstractAbstractTool():
def get_edition_status(self):
return self.label
- def get_options_label(self):
- return _("No options")
+ ############################################################################
+ # Side pane ################################################################
def build_row(self):
"""Build the GtkRadioButton for the sidebar. This method stores it as
@@ -108,7 +129,7 @@ class AbstractAbstractTool():
draw_indicator=False, valign=Gtk.Align.CENTER, \
tooltip_text=self.label)
self.row.set_detailed_action_name('win.active_tool::' + self.id)
- self.label_widget = Gtk.Label(label=self.label)
+ self.label_widget = Gtk.Label(label=self.label) #, use_underline=True)
if self.get_settings().get_boolean('big-icons'):
size = Gtk.IconSize.LARGE_TOOLBAR
else:
@@ -135,9 +156,6 @@ class AbstractAbstractTool():
size = Gtk.IconSize.SMALL_TOOLBAR
image.set_from_icon_name(self.icon_name, size)
- def adapt_to_window_size(self, available_width):
- pass
-
############################################################################
# Activation or not ########################################################
@@ -155,9 +173,6 @@ class AbstractAbstractTool():
self.non_destructive_show_modif()
self._ongoing_operation = False
- def has_ongoing_operation(self):
- return self._ongoing_operation
-
def give_back_control(self, preserve_selection):
self.restore_pixbuf()
self.non_destructive_show_modif()
@@ -165,12 +180,15 @@ class AbstractAbstractTool():
############################################################################
# History ##################################################################
+ def has_ongoing_operation(self):
+ return self._ongoing_operation
+
def do_tool_operation(self, operation):
pass
def start_tool_operation(self, operation):
if operation['tool_id'] != self.id:
- raise Exception("Can't apply operation: %s is an tool" % self.id)
+ raise WrongToolIdException(operation['tool_id'], self.id)
self.restore_pixbuf()
self._ongoing_operation = True
@@ -181,7 +199,10 @@ class AbstractAbstractTool():
def simple_apply_operation(self, operation):
"""Simpler apply_operation, for the 'rebuild from history' method."""
- self.do_tool_operation(operation)
+ try:
+ self.do_tool_operation(operation)
+ except Exception as e:
+ self.show_error(str(e))
self._ongoing_operation = False
self.get_image().add_to_history(operation)
self.non_destructive_show_modif()
@@ -207,6 +228,9 @@ class AbstractAbstractTool():
def get_surface(self):
return self.get_image().get_surface()
+ def scale_factor(self):
+ return self.get_image().SCALE_FACTOR
+
def get_context(self):
return cairo.Context(self.get_surface())
@@ -237,13 +261,13 @@ class AbstractAbstractTool():
def on_draw(self, area, cairo_context):
if not self.accept_selection:
return
- # Basic implementation, in fact never executed becaus tools needing it
- # will do it better to fit their needs
if not self.selection_is_active():
return
+ # Basic "wrong" implementation (wtf is "0, 0"), which is never executed
+ # because tools needing to draw an overlay will do it better to fit
+ # their needs.
self.get_selection().show_selection_on_surface(cairo_context, True, 0, 0)
dragged_path = self.get_selection().get_path_with_scroll(0, 0)
- # XXX non, pas "0, 0", mais ce code n'est jamais exécuté normalement
utilities_show_overlay_on_context(cairo_context, dragged_path, True)
############################################################################
diff --git a/src/tools/classic_tools/abstract_classic_tool.py b/src/tools/classic_tools/abstract_classic_tool.py
index 83d35d62..02393576 100644
--- a/src/tools/classic_tools/abstract_classic_tool.py
+++ b/src/tools/classic_tools/abstract_classic_tool.py
@@ -34,9 +34,11 @@ class AbstractClassicTool(AbstractAbstractTool):
self.main_color = None
self.secondary_color = None
self._fallback_operator = 'over'
- self._use_antialias = True
self.x_press = 0.0
self.y_press = 0.0
+ self._use_antialias = self.get_settings().get_boolean('use-antialiasing')
+ # FIXME honteusement sous-performant, il me faut au plus vite une
+ # méthode pour faire des actions à partir d'un gsettings
self.add_tool_action_boolean('antialias', self._use_antialias)
############################################################################
@@ -50,7 +52,6 @@ class AbstractClassicTool(AbstractAbstractTool):
return OptionsBarClassic(self.window)
def on_tool_selected(self):
- # XXX shouldn't i update the label/menu/size/sensitivity/etc. here?
pass
############################################################################
@@ -85,6 +86,36 @@ class AbstractClassicTool(AbstractAbstractTool):
context.set_antialias(antialias)
return context
+ def set_dashes_and_cap(self, cairo_context, lw, dashes_type, line_cap):
+ """Set a cairo dash pattern to the given context. The pattern we want
+ is described by its name as a string (`dashes_type`), but the actual
+ lengths that cairo wants depend also on the line width (`lw`) and the
+ `line_cap`. The line cap is also set here."""
+ cairo_context.set_line_cap(line_cap)
+ dashes_descriptor = []
+ if dashes_type == 'regular':
+ dashes_descriptor = [2, 2]
+ elif dashes_type == 'long':
+ dashes_descriptor = [3, 1]
+ elif dashes_type == 'dots':
+ dashes_descriptor = [1, 1]
+ elif dashes_type == 'alt':
+ dashes_descriptor = [3, 1, 1, 1]
+
+ i = 0
+ for length in dashes_descriptor:
+ if line_cap != cairo.LineCap.BUTT:
+ if i % 2 == 0:
+ length = length - 1
+ else:
+ length = length + 1
+ actual_length = length * lw
+ if length == 0:
+ actual_length = actual_length + 1
+ dashes_descriptor[i] = actual_length
+ i = i + 1
+ cairo_context.set_dash(dashes_descriptor)
+
def stroke_with_operator(self, operator, context, line_width, is_preview):
context.set_operator(operator)
is_blur = (operator == cairo.Operator.DEST_IN)
diff --git a/src/tools/classic_tools/tool_arc.py b/src/tools/classic_tools/tool_arc.py
index b90fc239..2c49352e 100644
--- a/src/tools/classic_tools/tool_arc.py
+++ b/src/tools/classic_tools/tool_arc.py
@@ -27,8 +27,8 @@ class ToolArc(AbstractClassicTool):
self.use_operator = True
self.add_tool_action_enum('line_shape', 'round')
- self.add_tool_action_boolean('use_dashes', False)
- self.add_tool_action_boolean('is_arrow', False)
+ self.add_tool_action_enum('dashes-type', 'none')
+ self.add_tool_action_enum('arrow-type', 'none')
# Default values
self._shape_label = _("Round")
@@ -36,7 +36,7 @@ class ToolArc(AbstractClassicTool):
self._1st_segment = None
self._use_dashes = False
- self._use_arrow = False
+ self._dashes_type = 'none'
def give_back_control(self, preserve_selection):
self._1st_segment = None
@@ -49,9 +49,6 @@ class ToolArc(AbstractClassicTool):
state_as_string = self.get_option_value('line_shape')
if state_as_string == 'thin':
self._cap_id = cairo.LineCap.BUTT
- self._shape_label = _("Thin")
- elif state_as_string == 'square':
- self._cap_id = cairo.LineCap.SQUARE
self._shape_label = _("Square")
else:
self._cap_id = cairo.LineCap.ROUND
@@ -61,15 +58,17 @@ class ToolArc(AbstractClassicTool):
return _("Curve options")
def get_edition_status(self):
- self._use_dashes = self.get_option_value('use_dashes')
- self._use_arrow = self.get_option_value('is_arrow')
+ self._dashes_type = self.get_option_value('dashes-type')
+ self._arrow_type = self.get_option_value('arrow-type')
self.set_active_shape()
+ is_arrow = self._arrow_type != 'none'
+ use_dashes = self._dashes_type != 'none'
label = self.label
- if self._use_arrow and self._use_dashes:
+ if is_arrow and use_dashes:
label = label + ' - ' + _("Dashed arrow")
- elif self._use_arrow:
+ elif is_arrow:
label = label + ' - ' + _("Arrow")
- elif self._use_dashes:
+ elif use_dashes:
label = label + ' - ' + _("Dashed")
return label
@@ -118,8 +117,8 @@ class ToolArc(AbstractClassicTool):
'operator': self._operator,
'line_width': self.tool_width,
'line_cap': self._cap_id,
- 'use_dashes': self._use_dashes,
- 'use_arrow': self._use_arrow,
+ 'dashes_type': self._dashes_type,
+ 'arrow_type': self._arrow_type,
'path': self._path,
'x_release': event_x,
'y_release': event_y,
@@ -130,25 +129,36 @@ class ToolArc(AbstractClassicTool):
def do_tool_operation(self, operation):
cairo_context = self.start_tool_operation(operation)
- cairo_context.set_line_cap(operation['line_cap'])
line_width = operation['line_width']
cairo_context.set_line_width(line_width)
rgba = operation['rgba']
cairo_context.set_source_rgba(rgba.red, rgba.green, rgba.blue, rgba.alpha)
- if operation['use_dashes']:
- cairo_context.set_dash([2 * line_width, 2 * line_width])
- cairo_context.append_path(operation['path'])
+ self.set_dashes_and_cap(cairo_context, line_width, \
+ operation['dashes_type'], operation['line_cap'])
+
+ if operation['arrow_type'] == 'double':
+ for pts in operation['path']:
+ # how to do without a for???
+ if(pts[0] == cairo.PathDataType.MOVE_TO):
+ x1 = pts[1][0]
+ y1 = pts[1][1]
+ else:
+ x2 = pts[1][0]
+ y2 = pts[1][1]
+ utilities_add_arrow_triangle(cairo_context, x1, y1, x2, y2, line_width)
- self.stroke_with_operator(operation['operator'], cairo_context, \
- line_width, operation['is_preview'])
+ cairo_context.append_path(operation['path'])
- if operation['use_arrow']:
+ if operation['arrow_type'] != 'none':
x1 = operation['x_press']
y1 = operation['y_press']
x2 = operation['x_release']
y2 = operation['y_release']
utilities_add_arrow_triangle(cairo_context, x2, y2, x1, y1, line_width)
+ self.stroke_with_operator(operation['operator'], cairo_context, \
+ line_width, operation['is_preview'])
+
############################################################################
################################################################################
diff --git a/src/tools/classic_tools/tool_eraser.py b/src/tools/classic_tools/tool_eraser.py
index e16bedb5..a8df1eaf 100644
--- a/src/tools/classic_tools/tool_eraser.py
+++ b/src/tools/classic_tools/tool_eraser.py
@@ -25,7 +25,7 @@ class ToolEraser(ToolPencil):
def __init__(self, window, **kwargs):
super().__init__(window)
- # In the meaning "a rubber eraser"
+ # Context: this is the name of a tool, in the meaning "a rubber eraser"
AbstractClassicTool.__init__(self, 'eraser', _("Eraser"), \
'tool-eraser-symbolic', window)
self.use_color = False
diff --git a/src/tools/classic_tools/tool_experiment.py b/src/tools/classic_tools/tool_experiment.py
index 837545d6..e150c1aa 100644
--- a/src/tools/classic_tools/tool_experiment.py
+++ b/src/tools/classic_tools/tool_experiment.py
@@ -81,22 +81,26 @@ class ToolExperiment(AbstractClassicTool):
cairo_context.move_to(50, 50)
cairo_context.line_to(100, 150)
cairo_context.line_to(150, 50)
- cairo_context.line_to(200, 150)
- cairo_context.line_to(250, 50)
- cairo_context.line_to(300, 150)
+ cairo_context.line_to(250, 250)
cairo_context.line_to(350, 50)
- cairo_context.line_to(375, 100)
- cairo_context.line_to(400, 50)
- cairo_context.line_to(425, 100)
+ cairo_context.line_to(375, 100) #
+ cairo_context.line_to(400, 50) # dents moins hautes
+ cairo_context.line_to(425, 100) #
cairo_context.line_to(450, 50)
cairo_context.line_to(500, 150)
cairo_context.line_to(550, 50)
+ cairo_context.line_to(570, 100) #
+ cairo_context.line_to(575, 100) # court palier
+ cairo_context.line_to(580, 100) #
+ cairo_context.line_to(600, 150)
+ cairo_context.line_to(650, 50)
self._path = cairo_context.copy_path()
self._macros_common()
def _macros_common(self):
self.set_common_values(1, 1, 1)
operation = self.build_operation()
+ operation['is_preview'] = False
self.apply_operation(operation)
############################################################################
@@ -104,7 +108,6 @@ class ToolExperiment(AbstractClassicTool):
def on_press_on_area(self, event, surface, event_x, event_y):
self._set_active_operator()
self._set_active_mode()
- # self._set_antialias()
self.x_press = event_x
self.y_press = event_y
self.set_common_values(event.button, event_x, event_y)
@@ -186,7 +189,13 @@ class ToolExperiment(AbstractClassicTool):
############################################################################
def op_dynamic(self, operation, cairo_context):
+ """Brush with speed-sensitive dynamic width, where the variation of
+ width is drawn by a succession of segments. The first segment is shit,
+ and it looks awful with semi-transparent colors."""
+
+ # mask intersections between segments when semi-transparency
cairo_context.set_operator(cairo.Operator.SOURCE)
+
SMOOTH = True
if SMOOTH:
utilities_smooth_path(cairo_context, operation['path'])
@@ -214,6 +223,10 @@ class ToolExperiment(AbstractClassicTool):
cairo_context.move_to(future_x, future_y)
def op_dynamic2(self, operation, cairo_context):
+ """Brush with speed-sensitive dynamic width, where the variation of
+ width is drawn by a superposition of segments. It doesn't really support
+ semi-transparent colors."""
+
# cairo_context.set_operator(operation['operator'])
SMOOTH = True
if SMOOTH:
@@ -231,6 +244,7 @@ class ToolExperiment(AbstractClassicTool):
widths = [base_width] * length
# Initializing widths (XXX faisable sans cairo_context) + factorisable
+ # TODO pas correct, la width a un "retard" sur la vitesse du tracé
i = 0
for pts in path:
i += 1
@@ -281,6 +295,10 @@ class ToolExperiment(AbstractClassicTool):
# cairo_context.append_path(path)
# cairo_context.stroke()
+ def op_dynamic2_mask(self, operation, cairo_context):
+ pass # TODO support operators and semi-transparency, using tricks like
+ # whatever the dest_in operator is doing to blur
+
def _add_segment(self, cairo_context, pts):
if pts[0] == cairo.PathDataType.CURVE_TO:
cairo_context.curve_to(pts[1][0], pts[1][1], pts[1][2], pts[1][3], \
diff --git a/src/tools/classic_tools/tool_highlight.py b/src/tools/classic_tools/tool_highlight.py
index 8ceabe3e..eefcc76c 100644
--- a/src/tools/classic_tools/tool_highlight.py
+++ b/src/tools/classic_tools/tool_highlight.py
@@ -25,14 +25,25 @@ class ToolHighlighter(ToolPencil):
def __init__(self, window, **kwargs):
super().__init__(window)
+ # Context: this is the name of a tool, a thick pencil dedicated to
+ # highlight text, for example in screenshots
AbstractClassicTool.__init__(self, 'highlight', _("Highlighter"), \
'tool-highlight-symbolic', window)
+ self.add_tool_action_enum('highlight-bg', 'light')
+ self.add_tool_action_boolean('highlight-alpha', True)
- def get_options_model(self):
- return None
+ def get_edition_status(self):
+ self._bg_type = self.get_option_value('highlight-bg')
+ self._force_alpha = self.get_option_value('highlight-alpha')
+ statut = self.label + " - "
+ if self._bg_type == 'light':
+ statut += _("Dark text on light background")
+ else:
+ statut += _("Light text on dark background")
+ return statut
def get_options_label(self):
- return _("No options")
+ return _("Highlighter options")
############################################################################
@@ -40,8 +51,10 @@ class ToolHighlighter(ToolPencil):
operation = {
'tool_id': self.id,
'rgba': self.main_color,
- 'line_width': self.tool_width,
- 'path': self._path
+ 'width': self.tool_width,
+ 'path': self._path,
+ 'bg-type': self._bg_type,
+ 'halpha': self._force_alpha
}
return operation
@@ -49,15 +62,21 @@ class ToolHighlighter(ToolPencil):
self.start_tool_operation(operation)
if operation['path'] is None:
return
- cairo_context = self.get_context()
- cairo_context.set_line_cap(cairo.LineCap.SQUARE)
- cairo_context.set_line_join(cairo.LineJoin.ROUND)
- line_width = operation['line_width']
+ ccontext = self.get_context()
+ ccontext.set_line_cap(cairo.LineCap.SQUARE)
+ ccontext.set_line_join(cairo.LineJoin.ROUND)
+ line_width = operation['width']
+ if operation['bg-type'] == 'light':
+ op = cairo.Operator.MULTIPLY
+ else:
+ op = cairo.Operator.SCREEN
rgba = operation['rgba']
- cairo_context.set_source_rgba(rgba.red, rgba.green, rgba.blue, 0.5)
- utilities_smooth_path(cairo_context, operation['path'])
- self.stroke_with_operator(cairo.Operator.MULTIPLY, cairo_context, \
- line_width, False)
+ if operation['halpha']:
+ ccontext.set_source_rgba(rgba.red, rgba.green, rgba.blue, 0.5)
+ else:
+ ccontext.set_source_rgba(rgba.red, rgba.green, rgba.blue, rgba.alpha)
+ utilities_smooth_path(ccontext, operation['path'])
+ self.stroke_with_operator(op, ccontext, line_width, False)
############################################################################
################################################################################
diff --git a/src/tools/classic_tools/tool_line.py b/src/tools/classic_tools/tool_line.py
index 78c0d2f8..1af04558 100644
--- a/src/tools/classic_tools/tool_line.py
+++ b/src/tools/classic_tools/tool_line.py
@@ -27,8 +27,8 @@ class ToolLine(AbstractClassicTool):
self.use_operator = True
self.add_tool_action_enum('line_shape', 'round')
- self.add_tool_action_boolean('use_dashes', False)
- self.add_tool_action_boolean('is_arrow', False)
+ self.add_tool_action_enum('dashes-type', 'none')
+ self.add_tool_action_enum('arrow-type', 'none')
self.add_tool_action_boolean('use_gradient', False)
self._set_options_attributes() # Not optimal but more readable
@@ -36,9 +36,6 @@ class ToolLine(AbstractClassicTool):
state_as_string = self.get_option_value('line_shape')
if state_as_string == 'thin':
self._cap_id = cairo.LineCap.BUTT
- self._shape_label = _("Thin")
- elif state_as_string == 'square':
- self._cap_id = cairo.LineCap.SQUARE
self._shape_label = _("Square")
else:
self._cap_id = cairo.LineCap.ROUND
@@ -48,19 +45,21 @@ class ToolLine(AbstractClassicTool):
return _("Line options")
def _set_options_attributes(self):
- self._use_dashes = self.get_option_value('use_dashes')
- self._use_arrow = self.get_option_value('is_arrow')
+ self._dashes_type = self.get_option_value('dashes-type')
+ self._arrow_type = self.get_option_value('arrow-type')
self._use_gradient = self.get_option_value('use_gradient')
self._set_active_shape()
def get_edition_status(self):
self._set_options_attributes()
+ is_arrow = self._arrow_type != 'none'
+ use_dashes = self._dashes_type != 'none'
label = self.label
- if self._use_arrow and self._use_dashes:
+ if is_arrow and use_dashes:
label = label + ' - ' + _("Dashed arrow")
- elif self._use_arrow:
+ elif is_arrow:
label = label + ' - ' + _("Arrow")
- elif self._use_dashes:
+ elif use_dashes:
label = label + ' - ' + _("Dashed")
return label
@@ -88,8 +87,8 @@ class ToolLine(AbstractClassicTool):
'operator': self._operator,
'line_width': self.tool_width,
'line_cap': self._cap_id,
- 'use_dashes': self._use_dashes,
- 'use_arrow': self._use_arrow,
+ 'dashes_type': self._dashes_type,
+ 'arrow_type': self._arrow_type,
'use_gradient': self._use_gradient,
'is_preview': is_preview,
'x_release': event_x,
@@ -102,7 +101,6 @@ class ToolLine(AbstractClassicTool):
def do_tool_operation(self, operation):
cairo_context = self.start_tool_operation(operation)
cairo_context.set_operator(operation['operator'])
- cairo_context.set_line_cap(operation['line_cap'])
line_width = operation['line_width']
cairo_context.set_line_width(line_width)
c1 = operation['rgba']
@@ -118,19 +116,24 @@ class ToolLine(AbstractClassicTool):
cairo_context.set_source(pattern)
else:
cairo_context.set_source_rgba(c1.red, c1.green, c1.blue, c1.alpha)
- if operation['use_dashes']:
- cairo_context.set_dash([2 * line_width, 2 * line_width])
+
+ self.set_dashes_and_cap(cairo_context, line_width, \
+ operation['dashes_type'], operation['line_cap'])
+
+ if operation['arrow_type'] == 'double':
+ utilities_add_arrow_triangle(cairo_context, x1, y1, x2, y2, line_width)
+
# We don't memorize the path because all coords are here anyway for the
- # linear grandient and/or the arrow.
+ # linear gradient and/or the arrow.
cairo_context.move_to(x1, y1)
cairo_context.line_to(x2, y2)
+ if operation['arrow_type'] != 'none':
+ utilities_add_arrow_triangle(cairo_context, x2, y2, x1, y1, line_width)
+
self.stroke_with_operator(operation['operator'], cairo_context, \
line_width, operation['is_preview'])
- if operation['use_arrow']:
- utilities_add_arrow_triangle(cairo_context, x2, y2, x1, y1, line_width)
-
############################################################################
################################################################################
diff --git a/src/tools/classic_tools/tool_paint.py b/src/tools/classic_tools/tool_paint.py
index f40910b3..7c3b435b 100644
--- a/src/tools/classic_tools/tool_paint.py
+++ b/src/tools/classic_tools/tool_paint.py
@@ -25,17 +25,21 @@ class ToolPaint(AbstractClassicTool):
__gtype_name__ = 'ToolPaint'
def __init__(self, window, **kwargs):
+ # Context: the name of a tool to fill an area of one color with an other
super().__init__('paint', _("Paint"), 'tool-paint-symbolic', window)
- self.magic_path = None
+ self._magic_path = None
self.use_size = False
- self.add_tool_action_enum('paint_algo', 'fill')
+ self.add_tool_action_enum('paint_algo', 'replace')
def get_options_label(self):
return _("Painting options")
def get_edition_status(self):
- if self.get_option_value('paint_algo') == 'clipping':
+ paint_algo = self.get_option_value('paint_algo')
+ if paint_algo == 'clipping':
return _("Click on an area to replace its color by transparency")
+ elif paint_algo == 'whole':
+ return _("Click on the canvas to entirely paint it")
else:
return self.label
@@ -52,11 +56,11 @@ class ToolPaint(AbstractClassicTool):
self.old_color = utilities_get_rgba_for_xy(surface, x, y)
if self.get_option_value('paint_algo') == 'fill':
- self.magic_path = utilities_get_magic_path(surface, x, y, self.window, 1)
+ self._magic_path = utilities_get_magic_path(surface, x, y, self.window, 1)
elif self.get_option_value('paint_algo') == 'replace':
- self.magic_path = utilities_get_magic_path(surface, x, y, self.window, 2)
+ self._magic_path = utilities_get_magic_path(surface, x, y, self.window, 2)
else:
- pass # == 'clipping'
+ pass # == 'clipping' or == 'whole'
operation = self.build_operation(x, y)
self.apply_operation(operation)
@@ -72,15 +76,17 @@ class ToolPaint(AbstractClassicTool):
'rgba': self.main_color,
'antialias': self._use_antialias,
'old_rgba': self.old_color,
- 'path': self.magic_path
+ 'path': self._magic_path
}
return operation
def do_tool_operation(self, operation):
- self.start_tool_operation(operation) # TODO antialiasing
+ self.start_tool_operation(operation) # XXX expose antialiasing option?
if operation['algo'] == 'replace':
self._op_replace(operation)
+ elif operation['algo'] == 'whole':
+ self._op_whole(operation)
elif operation['algo'] == 'fill':
self._op_fill(operation)
else: # == 'clipping'
@@ -88,68 +94,106 @@ class ToolPaint(AbstractClassicTool):
############################################################################
+ def _op_whole(self, operation):
+ """Paint the entire image regardless of existing pixels"""
+ cairo_context = self.get_context()
+ rgba = operation['rgba']
+ cairo_context.set_source_rgba(rgba.red, rgba.green, rgba.blue, rgba.alpha)
+ cairo_context.paint()
+
+ def _op_fill(self, operation):
+ """Simple but ugly, and it's relying on the precision of the provided
+ path whose creation is based on shitty heurisctics."""
+ if operation['path'] is None:
+ return
+ cairo_context = self.get_context()
+ rgba = operation['rgba']
+ cairo_context.set_source_rgba(rgba.red, rgba.green, rgba.blue, rgba.alpha)
+ cairo_context.append_path(operation['path'])
+ # can_fill = cairo_context.in_fill(operation['x'], operation['y'])
+ # print(can_fill)
+ # if not can_fill:
+ # cairo_context.set_fill_rule(cairo.FillRule.EVEN_ODD)
+ # XXX doesn't work as i expected
+ cairo_context.fill()
+
def _op_replace(self, operation):
- """Algorithmically less ugly than `_op_fill`, but doesn't handle (semi-)
- transparent colors correctly, even outside of the targeted area."""
- # FIXME
+ """Algorithmically less ugly than `_op_fill`, but the replacing strategy
+ itself doesn't handle (semi-) transparent colors correctly. Looks fine
+ when there is no alpha at all and the anti-aliasing is off."""
+ # In this example, the user paints in blue and clicks on X (red):
+ #
+ # rrrrrrrrrrrrrrrrrrrrrrrrr
+ # rrrgggggggggggggggggrrXrr
+ # rrrgaaaaaaaaaaaaaaagrrrrr
+ # rrrgaaaaaaaaaaaaaaagrrrrr
+ # rrrgggggggggggggggggrraaa
+ # rrrrrrrrrrrrrrrrrrrrrraaa
+ #
+ # All red pixels will be painted blue, but FIXME all the green ones too.
if operation['path'] is None:
return
- surf = self.get_surface()
- cairo_context = cairo.Context(surf)
+
+ # First, everything BUT the targeted area is erased
+ surface = self.get_surface()
+ cairo_context = cairo.Context(surface)
rgba = operation['rgba']
old_rgba = operation['old_rgba']
cairo_context.set_source_rgba(255, 255, 255, 1.0)
cairo_context.append_path(operation['path'])
cairo_context.set_operator(cairo.Operator.DEST_IN)
- cairo_context.fill_preserve()
-
- self.get_image().temp_pixbuf = Gdk.pixbuf_get_from_surface(surf, 0, 0, \
- surf.get_width(), surf.get_height())
-
- tolerance = 10 # XXX
- i = -1 * tolerance
- while i < tolerance:
+ cairo_context.set_line_width(4) # ptêt too much mdr
+ cairo_context.set_antialias(cairo.Antialias.NONE)
+ cairo_context.stroke_preserve()
+ # cairo_context.fill_preserve()
+
+ # The result is loaded as the temp pixbuf…
+ self.get_image().set_temp_pixbuf(Gdk.pixbuf_get_from_surface(surface, \
+ 0, 0, surface.get_width(), surface.get_height()))
+ # …where the targeted color is replaced by pure alpha
+ TOLERANCE = 10 # XXX uuugly
+ i = -1 * TOLERANCE
+ while i < TOLERANCE:
red = max(0, old_rgba[0]+i)
green = max(0, old_rgba[1]+i)
blue = max(0, old_rgba[2]+i)
- red = int( min(255, red) )
- green = int( min(255, green) )
- blue = int( min(255, blue) )
+ red = int(min(255, red))
+ green = int(min(255, green))
+ blue = int(min(255, blue))
self._replace_temp_with_alpha(red, green, blue)
i = i+1
+
+ # The main pixbuf is restored, since its alteration were a side effect
+ # of this highly stupid algorithm
self.restore_pixbuf()
+ # We get a context from it again
cairo_context2 = self.get_context()
+ # The content of the path is cleared
cairo_context2.append_path(operation['path'])
cairo_context2.set_operator(cairo.Operator.CLEAR)
cairo_context2.set_source_rgba(255, 255, 255, 1.0)
+ cairo_context2.set_line_width(3) # ptêt too much mdr
+ cairo_context.set_antialias(cairo.Antialias.NONE)
+ cairo_context2.stroke_preserve()
cairo_context2.fill()
- cairo_context2.set_operator(cairo.Operator.OVER)
+ # The temp pixbuf (where "only" the pixels around the outline which are
+ # not in the targeted color still exist) is shown on top of the image
+ cairo_context2.set_operator(cairo.Operator.OVER)
Gdk.cairo_set_source_pixbuf(cairo_context2, \
self.get_image().temp_pixbuf, 0, 0)
- cairo_context2.append_path(operation['path'])
cairo_context2.paint()
self.non_destructive_show_modif()
+
+ # The transparent pixels within the path are painted with the new color
cairo_context2.set_operator(cairo.Operator.DEST_OVER)
cairo_context2.set_source_rgba(rgba.red, rgba.green, rgba.blue, rgba.alpha)
- cairo_context2.paint()
-
- def _op_fill(self, operation):
- """Simple but ugly, and it's relying on the precision of the provided
- path whose creation is based on shitty heurisctics."""
- if operation['path'] is None:
- return
- cairo_context = self.get_context()
- rgba = operation['rgba']
- cairo_context.set_source_rgba(rgba.red, rgba.green, rgba.blue, rgba.alpha)
- cairo_context.append_path(operation['path'])
- # can_fill = cairo_context.in_fill(operation['x'], operation['y'])
- # print(can_fill)
- # if not can_fill:
- # cairo_context.set_fill_rule(cairo.FillRule.EVEN_ODD)
- # XXX doesn't work as i expected
- cairo_context.fill()
+ cairo_context2.append_path(operation['path'])
+ # cairo_context2.paint()
+ cairo_context2.set_line_width(3) # ptêt too much mdr
+ cairo_context2.stroke_preserve()
+ cairo_context2.fill()
def _op_clipping(self, operation):
"""Replace the color with transparency by adding an alpha channel."""
@@ -157,12 +201,14 @@ class ToolPaint(AbstractClassicTool):
r0 = old_rgba[0]
g0 = old_rgba[1]
b0 = old_rgba[2]
- # XXX and the alpha channel ? pas l'air possible en fait
- margin = 0 # TODO as an option ? is not elegant but is powerful
+ # ^ it's not possible to take into account the alpha channel
+ margin = 0 # XXX as an option ? is not elegant but it's powerful
self._clip_red(margin, r0, g0, b0)
self.restore_pixbuf()
self.non_destructive_show_modif()
+ ############################################################################
+
def _clip_red(self, margin, r0, g0, b0):
for i in range(-1 * margin, margin + 1):
r = r0 + i
diff --git a/src/tools/classic_tools/tool_pencil.py b/src/tools/classic_tools/tool_pencil.py
index 8b617581..ef892713 100644
--- a/src/tools/classic_tools/tool_pencil.py
+++ b/src/tools/classic_tools/tool_pencil.py
@@ -30,20 +30,16 @@ class ToolPencil(AbstractClassicTool):
self._shape_label = _("Round")
self._cap_id = cairo.LineCap.ROUND
self._join_id = cairo.LineCap.ROUND
- self._use_dashes = False
+ self._dashes_type = 'none'
self.add_tool_action_enum('line_shape', 'round')
- self.add_tool_action_boolean('use_dashes', self._use_dashes)
+ self.add_tool_action_enum('dashes-type', self._dashes_type)
def _set_active_shape(self, *args):
state_as_string = self.get_option_value('line_shape')
if state_as_string == 'thin':
self._cap_id = cairo.LineCap.BUTT
self._join_id = cairo.LineJoin.BEVEL
- self._shape_label = _("Thin")
- elif state_as_string == 'square':
- self._cap_id = cairo.LineCap.SQUARE
- self._join_id = cairo.LineJoin.MITER
self._shape_label = _("Square")
else:
self._cap_id = cairo.LineCap.ROUND
@@ -54,10 +50,11 @@ class ToolPencil(AbstractClassicTool):
return _("Pencil options")
def get_edition_status(self):
- self._use_dashes = self.get_option_value('use_dashes')
+ self._dashes_type = self.get_option_value('dashes-type')
+ use_dashes = self._dashes_type != 'none'
self._set_active_shape()
label = self.label
- if self._use_dashes:
+ if use_dashes:
label = label + ' - ' + _("Dashed")
return label
@@ -98,7 +95,7 @@ class ToolPencil(AbstractClassicTool):
'line_width': self.tool_width,
'line_cap': self._cap_id,
'line_join': self._join_id,
- 'use_dashes': self._use_dashes,
+ 'dashes_type': self._dashes_type,
'is_preview': True,
'path': self._path
}
@@ -108,13 +105,12 @@ class ToolPencil(AbstractClassicTool):
if operation['path'] is None:
return
cairo_context = self.start_tool_operation(operation)
- cairo_context.set_line_cap(operation['line_cap'])
- cairo_context.set_line_join(operation['line_join'])
+ cairo_context.set_line_join(operation['line_join']) # XXX useless?
line_width = operation['line_width']
rgba = operation['rgba']
cairo_context.set_source_rgba(rgba.red, rgba.green, rgba.blue, rgba.alpha)
- if operation['use_dashes']:
- cairo_context.set_dash([2*line_width, 2*line_width])
+ self.set_dashes_and_cap(cairo_context, line_width, \
+ operation['dashes_type'], operation['line_cap'])
utilities_smooth_path(cairo_context, operation['path'])
self.stroke_with_operator(operation['operator'], cairo_context, \
line_width, operation['is_preview'])
diff --git a/src/tools/classic_tools/tool_picker.py b/src/tools/classic_tools/tool_picker.py
index f84cc0bb..9ba23986 100644
--- a/src/tools/classic_tools/tool_picker.py
+++ b/src/tools/classic_tools/tool_picker.py
@@ -23,6 +23,8 @@ class ToolPicker(AbstractClassicTool):
__gtype_name__ = 'ToolPicker'
def __init__(self, window, **kwargs):
+ # Context: this is a tool to pick a RGBA color in the image in order to
+ # use it to draw with other tools
super().__init__('picker', _("Color Picker"), 'color-select-symbolic', window)
self.use_size = False
diff --git a/src/tools/classic_tools/tool_points.py b/src/tools/classic_tools/tool_points.py
new file mode 100644
index 00000000..a5250a15
--- /dev/null
+++ b/src/tools/classic_tools/tool_points.py
@@ -0,0 +1,166 @@
+# tool_points.py
+#
+# Copyright 2020 Romain F. T.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import cairo, math
+from .abstract_classic_tool import AbstractClassicTool
+
+class ToolPoints(AbstractClassicTool):
+ __gtype_name__ = 'ToolPoints'
+
+ def __init__(self, window, **kwargs):
+ # Context: this is the name of a tool to draw little circles, crosses,
+ # or squares at precise points of the image, for example to draw a vague
+ # graph, or to highlight something in an image.
+ # A number can be added on the cross/circle/square to help captioning
+ # the elements of an image.
+ super().__init__('points', _("Points"), 'tool-points-symbolic', window)
+
+ self.add_tool_action_enum('points_type', 'cross')
+ self.add_tool_action_boolean('points_number', False)
+ self.add_tool_action_simple('points_reset_num', self._reset_number)
+ self.add_tool_action_simple('points_inc_num', self._increment_number)
+ self.add_tool_action_simple('points_dec_num', self._decrement_number)
+
+ self._next_number = 1
+ self._set_active_type() # Not optimal but more readable
+
+ def _set_active_type(self):
+ state_as_string = self.get_option_value('points_type')
+ if state_as_string == 'cross':
+ self._shape_label = _("Cross")
+ elif state_as_string == 'x-cross':
+ self._shape_label = _("X-shaped cross")
+ elif state_as_string == 'square':
+ self._shape_label = _("Square")
+ else:
+ self._shape_label = _("Circle")
+ self._points_type = state_as_string
+
+ self._use_number = self.get_option_value('points_number')
+ self.set_action_sensitivity('points_reset_num', self._use_number)
+ self.set_action_sensitivity('points_inc_num', self._use_number)
+ self.set_action_sensitivity('points_dec_num', self._use_number)
+
+ def _reset_number(self, *args):
+ self._next_number = 1
+ self.window.set_picture_title()
+
+ def _increment_number(self, *args):
+ self._next_number += 1
+ self.window.set_picture_title()
+
+ def _decrement_number(self, *args):
+ self._next_number -= 1
+ self.window.set_picture_title()
+
+ def get_options_label(self):
+ return _("Points options")
+
+ def get_edition_status(self):
+ self._set_active_type()
+ label = self.label + ' - ' + self._shape_label
+ if self._use_number:
+ label = label + ' - ' + _("Next number: %s") % self._next_number
+ return label
+
+ ############################################################################
+
+ def on_press_on_area(self, event, surface, event_x, event_y):
+ self.set_common_values(event.button, event_x, event_y)
+
+ def on_motion_on_area(self, event, surface, event_x, event_y):
+ operation = self.build_operation(event_x, event_y)
+ self.do_tool_operation(operation)
+
+ def on_release_on_area(self, event, surface, event_x, event_y):
+ operation = self.build_operation(event_x, event_y)
+ self.apply_operation(operation)
+ if self._use_number:
+ self._increment_number()
+
+ ############################################################################
+
+ def build_operation(self, event_x, event_y):
+ if self._use_number:
+ number = self._next_number
+ else:
+ number = None
+ operation = {
+ 'tool_id': self.id,
+ 'rgba': self.main_color,
+ 'rgba2': self.secondary_color,
+ 'antialias': self._use_antialias,
+ 'line_width': self.tool_width,
+ 'point_type': self._points_type,
+ 'number': number,
+ 'x': int(event_x),
+ 'y': int(event_y),
+ }
+ return operation
+
+ def do_tool_operation(self, operation):
+ cairo_context = self.start_tool_operation(operation)
+ cairo_context.set_line_cap(cairo.LineCap.BUTT)
+
+ c1 = operation['rgba']
+ cairo_context.set_source_rgba(c1.red, c1.green, c1.blue, c1.alpha)
+ c2 = operation['rgba2'] # may be used for the font of the number
+
+ point_width = operation['line_width']
+ line_width = max(1, int(point_width / 4))
+ half_width = max(1, int(point_width / 2))
+ cairo_context.set_line_width(line_width)
+
+ x = operation['x']
+ y = operation['y']
+ number = operation['number']
+ num_x = x - line_width
+ num_y = y + line_width
+
+ point_type = operation['point_type']
+ if point_type == 'circle':
+ cairo_context.arc(x, y, half_width, 0.0, 2 * math.pi)
+ cairo_context.fill()
+ elif point_type == 'cross':
+ # Looks awful with small sizes, either with or without antialiasing
+ cairo_context.move_to(x, y - half_width)
+ cairo_context.line_to(x, y + half_width)
+ cairo_context.move_to(x - half_width, y)
+ cairo_context.line_to(x + half_width, y)
+ elif point_type == 'x-cross':
+ cairo_context.move_to(x - half_width, y - half_width)
+ cairo_context.line_to(x + half_width, y + half_width)
+ cairo_context.move_to(x + half_width, y - half_width)
+ cairo_context.line_to(x - half_width, y + half_width)
+ else: # if point_type == 'square':
+ cairo_context.set_line_width(point_width)
+ cairo_context.move_to(x, y - half_width)
+ cairo_context.line_to(x, y + half_width)
+
+ cairo_context.stroke() # without operator support because they don't
+ # make much sense, and the abstract method for it doesn't support
+ # changing the line width depending on the type like here.
+
+ if number is not None:
+ cairo_context.set_font_size(max(1, int(point_width * 0.8)))
+ cairo_context.set_source_rgba(c2.red, c2.green, c2.blue, c2.alpha)
+ cairo_context.move_to(num_x, num_y)
+ cairo_context.show_text(str(number))
+
+ ############################################################################
+################################################################################
+
diff --git a/src/tools/classic_tools/tool_shape.py b/src/tools/classic_tools/tool_shape.py
index b8ccd054..88439dde 100644
--- a/src/tools/classic_tools/tool_shape.py
+++ b/src/tools/classic_tools/tool_shape.py
@@ -30,9 +30,13 @@ class ToolShape(AbstractClassicTool):
self.add_tool_action_enum('shape_type', self._shape_id)
self._set_active_shape()
- self._style_id = 'empty'
- self._style_label = _("Empty")
- self.add_tool_action_enum('shape_filling', self._style_id)
+ self._filling_id = 'empty'
+ self._filling_label = _("Empty shape")
+ self.add_tool_action_enum('shape_filling', self._filling_id)
+
+ self._outline_id = 'solid'
+ self._outline_label = _("Solid outline")
+ self.add_tool_action_enum('shape_outline', self._outline_id)
self.add_tool_action_simple('shape_close', self._force_close_shape)
self.set_action_sensitivity('shape_close', False)
@@ -46,19 +50,32 @@ class ToolShape(AbstractClassicTool):
def _set_filling_style(self):
state_as_string = self.get_option_value('shape_filling')
- self._style_id = state_as_string
+ self._filling_id = state_as_string
if state_as_string == 'empty':
- self._style_label = _("Empty outline")
+ self._filling_label = _("Empty shape")
elif state_as_string == 'filled':
- self._style_label = _("Main color")
+ # Context: fill a shape with the color of the left click
+ self._filling_label = _("Main color")
elif state_as_string == 'h-gradient':
- self._style_label = _("Horizontal gradient")
+ self._filling_label = _("Horizontal gradient")
elif state_as_string == 'v-gradient':
- self._style_label = _("Vertical gradient")
+ self._filling_label = _("Vertical gradient")
elif state_as_string == 'r-gradient':
- self._style_label = _("Radial gradient")
+ self._filling_label = _("Radial gradient")
else: # if state_as_string == 'secondary':
- self._style_label = _("Secondary color")
+ pass
+ # Context: fill a shape with the color of the right click
+ self._filling_label = _("Secondary color")
+
+ def _set_outline_style(self):
+ state_as_string = self.get_option_value('shape_outline')
+ self._outline_id = state_as_string
+ if state_as_string == 'solid':
+ self._outline_label = _("Solid outline")
+ elif state_as_string == 'dashed':
+ self._outline_label = _("Dashed outline")
+ else: # if state_as_string == 'none':
+ self._outline_label = _("No outline")
def _set_active_shape(self, *args):
self._shape_id = self.get_option_value('shape_type')
@@ -86,13 +103,21 @@ class ToolShape(AbstractClassicTool):
def get_edition_status(self):
self._set_filling_style()
+ self._set_outline_style()
self._set_active_shape()
- label = self._shape_label + ' - ' + self._style_label
+
+ label = self._shape_label
+ if self._filling_id != 'empty':
+ label += ' - ' + self._filling_label
+ if self._outline_id != 'solid':
+ label += ' - ' + self._outline_label
+
if self._shape_id == 'polygon' or self._shape_id == 'freeshape':
instruction = _("Click on the shape's first point to close it.")
label = label + ' - ' + instruction
else:
self.set_action_sensitivity('shape_close', False)
+
return label
def give_back_control(self, preserve_selection):
@@ -234,10 +259,11 @@ class ToolShape(AbstractClassicTool):
'rgba_main': self.main_color,
'rgba_secd': self.secondary_color,
'antialias': self._use_antialias,
- 'operator': cairo.Operator.OVER, # self._operator, # XXX ne marche pas avec le blur
+ 'operator': cairo.Operator.OVER, # self._operator, # XXX ne marcherait pas avec le blur
'line_join': self._join_id,
'line_width': self.tool_width,
- 'filling': self._style_id,
+ 'filling': self._filling_id,
+ 'outline': self._outline_id,
'smooth': (self._shape_id == 'freeshape'),
'closed': True,
'path': cairo_path
@@ -258,24 +284,24 @@ class ToolShape(AbstractClassicTool):
# the 2 centers could be 2 distinct points
return pattern
- def fill_pattern(self, cairo_context, pattern, c1, c2):
- """Fill the shape defined by the context with a gradient from c1 to c2
+ def _fill_pattern(self, cairo_context, pattern, c1, c2):
+ """Fill the shape defined in the context with a gradient from c1 to c2
according to the given pattern."""
pattern.add_color_stop_rgba(0.1, c1.red, c1.green, c1.blue, c1.alpha)
pattern.add_color_stop_rgba(0.9, c2.red, c2.green, c2.blue, c2.alpha)
cairo_context.set_source(pattern)
- cairo_context.fill()
+ cairo_context.fill_preserve()
- def fill_secondary(self, cairo_context, c1, c2):
- cairo_context.set_source_rgba(c2.red, c2.green, c2.blue, c2.alpha)
+ def _fill_plain(self, cairo_context, c):
+ """Fill the shape defined in the context with the color c."""
+ cairo_context.set_source_rgba(c.red, c.green, c.blue, c.alpha)
cairo_context.fill_preserve()
- cairo_context.set_source_rgba(c1.red, c1.green, c1.blue, c1.alpha)
- cairo_context.stroke()
def do_tool_operation(self, operation):
cairo_context = self.start_tool_operation(operation)
cairo_context.set_operator(operation['operator'])
- cairo_context.set_line_width(operation['line_width'])
+ line_width = operation['line_width']
+ cairo_context.set_line_width(line_width)
cairo_context.set_line_join(operation['line_join'])
c1 = operation['rgba_main']
c2 = operation['rgba_secd']
@@ -288,15 +314,17 @@ class ToolShape(AbstractClassicTool):
filling = operation['filling']
if filling == 'secondary':
- self.fill_secondary(cairo_context, c1, c2)
+ self._fill_plain(cairo_context, c2)
+ elif filling == 'filled':
+ self._fill_plain(cairo_context, c1)
elif filling == 'h-gradient':
x1, y1, x2, y2 = cairo_context.path_extents()
pattern = self.get_pattern_h(x1, x2)
- self.fill_pattern(cairo_context, pattern, c1, c2)
+ self._fill_pattern(cairo_context, pattern, c1, c2)
elif filling == 'v-gradient':
x1, y1, x2, y2 = cairo_context.path_extents()
pattern = self.get_pattern_v(y1, y2)
- self.fill_pattern(cairo_context, pattern, c1, c2)
+ self._fill_pattern(cairo_context, pattern, c1, c2)
elif filling == 'r-gradient':
x1, y1, x2, y2 = cairo_context.path_extents()
ddx = abs(x1 - x2) / 2
@@ -305,13 +333,20 @@ class ToolShape(AbstractClassicTool):
center_y = min(y1, y2) + ddy
rad = max(ddx, ddy)
pattern = self.get_pattern_r(center_x, center_y, rad)
- self.fill_pattern(cairo_context, pattern, c1, c2)
- elif filling == 'filled':
- cairo_context.set_source_rgba(c1.red, c1.green, c1.blue, c1.alpha)
- cairo_context.fill()
+ self._fill_pattern(cairo_context, pattern, c1, c2)
else: # filling == 'empty':
- cairo_context.set_source_rgba(c1.red, c1.green, c1.blue, c1.alpha)
+ pass
+
+ outline = operation['outline']
+ cairo_context.set_source_rgba(c1.red, c1.green, c1.blue, c1.alpha)
+ if outline == 'dashed':
+ cairo_context.set_dash([2 * line_width, 2 * line_width])
+ if outline != 'none':
cairo_context.stroke()
+ # Reset the current path (maybe useful if no outline)
+ cairo_context.new_path()
+
############################################################################
################################################################################
+
diff --git a/src/tools/classic_tools/tool_text.py b/src/tools/classic_tools/tool_text.py
index c6a677e9..3e695377 100644
--- a/src/tools/classic_tools/tool_text.py
+++ b/src/tools/classic_tools/tool_text.py
@@ -16,7 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import cairo
-from gi.repository import Gtk, Gdk
+from gi.repository import Gtk, Gdk, Pango, PangoCairo
from .abstract_classic_tool import AbstractClassicTool
class ToolText(AbstractClassicTool):
@@ -28,14 +28,16 @@ class ToolText(AbstractClassicTool):
self._should_cancel = False
self._last_click_btn = 1
- self._font_fam = "Sans"
+ self.font_fam_name = self.window._settings.get_string('last-font-name')
self._bg_id = 'outline'
self._bg_label = _("Outline")
- self.add_tool_action_enum('text-font', self._font_fam)
+ self.add_tool_action_simple('text-set-font', self._set_font)
+ # TODO remember and restore the selected font and its options
self.add_tool_action_boolean('text-bold', False)
self.add_tool_action_boolean('text-italic', False)
self.add_tool_action_enum('text-background', self._bg_id)
+
# TODO actions sensitivity?
self.add_tool_action_simple('text-cancel', self._on_cancel)
self.add_tool_action_simple('text-preview', self._force_refresh)
@@ -52,17 +54,25 @@ class ToolText(AbstractClassicTool):
############################################################################
# Options ##################################################################
+ def _set_font(self, *args):
+ dialog = Gtk.FontChooserDialog(show_preview_entry=False)
+ dialog.set_level(Gtk.FontChooserLevel.FAMILY)
+ dialog.set_font(self.font_fam_name) # FIXME doesn't work
+
+ # for f in PangoCairo.font_map_get_default().list_families():
+ # print(f.get_name())
+ status = dialog.run()
+ if(status == Gtk.ResponseType.OK):
+ self.font_fam_name = dialog.get_font_family().get_name()
+ print(dialog.get_font()) # TODO changer les options (italic, bold)
+ # pour les adapter au contenu de cette ^ chaîne là
+ self._preview_text()
+ dialog.destroy()
+
def _set_font_options(self, *args):
- # TODO use the widget again. And cairo.ToyFontFace ?
- self._font_fam = self.get_option_value('text-font')
- if self.get_option_value('text-italic'):
- self._font_slant = cairo.FontSlant.ITALIC
- else:
- self._font_slant = cairo.FontSlant.NORMAL
- if self.get_option_value('text-bold'):
- self._font_weight = cairo.FontWeight.BOLD
- else:
- self._font_weight = cairo.FontWeight.NORMAL
+ # XXX incomplete? OBLIQUE exists
+ self._is_italic = self.get_option_value('text-italic')
+ self._is_bold = self.get_option_value('text-bold')
def _set_background_style(self, *args):
state_as_string = self.get_option_value('text-background')
@@ -77,12 +87,13 @@ class ToolText(AbstractClassicTool):
self._bg_label = _("Rectangle background")
def get_options_label(self):
+ # XXX use "text options" instead
return _("Font options")
def get_edition_status(self):
self._set_background_style()
self._set_font_options()
- label = self.label + ' - ' + self._font_fam + ' - ' + self._bg_label
+ label = self.label + ' - ' + self.font_fam_name + ' - ' + self._bg_label
return label
############################################################################
@@ -184,9 +195,9 @@ class ToolText(AbstractClassicTool):
'tool_id': self.id,
'rgba1': self.main_color,
'rgba2': self.secondary_color,
- 'font_fam': self._font_fam,
- 'font_slant': self._font_slant,
- 'font_weight': self._font_weight,
+ 'font_fam': self.font_fam_name,
+ 'is_italic': self._is_italic,
+ 'is_bold': self._is_bold,
'font_size': self.tool_width,
# 'antialias': self._use_antialias, # XXX ne marche pas ??
'x': self.x_press,
@@ -200,72 +211,77 @@ class ToolText(AbstractClassicTool):
cairo_context = self.start_tool_operation(operation)
font_fam = operation['font_fam']
- font_slant = operation['font_slant']
- font_weight = operation['font_weight']
- font_size = operation['font_size'] * 3 # totalement arbitraire
- cairo_context.select_font_face(font_fam, font_slant, font_weight)
- cairo_context.set_font_size(font_size)
-
- lines = operation['text'].split('\n')
+ font_size = operation['font_size'] * 2
+ entire_text = operation['text']
c1 = operation['rgba1']
c2 = operation['rgba2']
text_x = int(operation['x'])
text_y = int(operation['y'])
+ font_description_string = font_fam
+ if operation['is_italic']:
+ font_description_string += " Italic"
+ if operation['is_bold']:
+ font_description_string += " Bold"
+ font_description_string += " " + str(font_size)
+ font = Pango.FontDescription(font_description_string)
+ layout = PangoCairo.create_layout(cairo_context)
+ layout.set_font_description(font)
+
########################################################################
# Draw background for the line #########################################
- i = 0
- for line_text in lines:
- line_y = text_y + i * font_size
- if operation['background'] == 'rectangle':
- self._op_bg_rectangle(cairo_context, c2, font_size, i, text_x, \
- text_y, line_text)
- elif operation['background'] == 'shadow':
- self._op_bg_shadow(cairo_context, c2, font_size, text_x, \
- line_y, line_text)
- elif operation['background'] == 'outline':
- self._op_bg_outline(cairo_context, c2, font_size, text_x, \
- line_y, line_text)
- i = i + 1
+
+ if operation['background'] == 'rectangle':
+ lines = entire_text.split('\n')
+ line_y = text_y
+ for line_text in lines:
+ line_y = self._op_bg_rectangle(cairo_context, layout, c2, \
+ text_x, line_y, line_text)
+ elif operation['background'] == 'shadow':
+ dist = max(min(int(font_size/16), 4), 1)
+ cairo_context.set_source_rgba(c2.red, c2.green, c2.blue, c2.alpha)
+ self._show_text_with_options(cairo_context, layout, entire_text, \
+ text_x + dist, text_y + dist)
+ elif operation['background'] == 'outline':
+ cairo_context.set_source_rgba(c2.red, c2.green, c2.blue, c2.alpha)
+ dist = max(min(int(font_size/16), 8), 1)
+ for dx in range(-dist, dist):
+ for dy in range(-dist, dist):
+ self._show_text_with_options(cairo_context, layout, \
+ entire_text, text_x + dx, text_y + dy)
########################################################################
# Draw text for the line ###############################################
- i = 0
- for line_text in lines:
- line_y = text_y + i * font_size
- cairo_context.set_source_rgba(c1.red, c1.green, c1.blue, c1.alpha)
- cairo_context.move_to(text_x, line_y)
- cairo_context.show_text( line_text )
- i = i + 1
+
+ cairo_context.set_source_rgba(c1.red, c1.green, c1.blue, c1.alpha)
+ self._show_text_with_options(cairo_context, layout, entire_text, \
+ text_x, text_y)
self.non_destructive_show_modif()
- def _op_bg_shadow(self, context, color, font_size, text_x, text_y, line):
- context.set_source_rgba(color.red, color.green, color.blue, color.alpha)
- dist = max(min(int(font_size/18), 4), 1)
- context.move_to(text_x + dist, text_y + dist)
- context.show_text(line)
-
- def _op_bg_outline(self, context, color, font_size, text_x, text_y, line):
- context.set_source_rgba(color.red, color.green, color.blue, color.alpha)
- dist = max(min(int(font_size/18), 8), 1)
- for dx in range(-dist, dist):
- for dy in range(-dist, dist):
- context.move_to(text_x + dx, text_y + dy)
- context.show_text(line)
-
- def _op_bg_rectangle(self, context, color, font_size, i, text_x, text_y, line):
- # XXX i think cairo.Context.font_extents is supposed to help me
- context.set_source_rgba(0.0, 0.0, 0.0, 0.0)
- first_y = int(text_y + (i + 0.2) * font_size)
- context.move_to(text_x, first_y)
- context.show_text(line)
- context.rel_line_to(0, (-1) * font_size)
- context.line_to(text_x, int(text_y + (i - 0.8) * font_size))
- context.line_to(text_x, first_y)
- context.set_source_rgba(color.red, color.green, color.blue, color.alpha)
+ def _show_text_with_options(self, cc, pl, text, text_x, text_y):
+ cc.move_to(text_x, text_y)
+ pl.set_text(text, -1)
+ PangoCairo.update_layout(cc, pl)
+ PangoCairo.show_layout(cc, pl)
+
+ def _op_bg_rectangle(self, context, layout, c2, text_x, line_y, line_text):
+ # The text is first "displayed" in a transparent color…
+ context.set_source_rgba(0.0, 0.0, 0.0, 0.50)
+ self._show_text_with_options(context, layout, line_text, text_x, line_y)
+ # …so we can get the size of the displayed line…
+ ink_rect, logical_rect = layout.get_pixel_extents()
+ delta_y = logical_rect.height
+ # …and draw the background rectangle with the correct size.
+ context.rel_line_to(0, delta_y)
+ context.rel_line_to(logical_rect.width, 0)
+ context.rel_line_to(0, -1 * delta_y)
+ context.close_path()
+ context.set_source_rgba(c2.red, c2.green, c2.blue, c2.alpha)
context.fill()
context.stroke()
+ # The returned value will be used as the vertical coord of the next line
+ return line_y + delta_y
############################################################################
################################################################################
diff --git a/src/tools/icons/dash-alt-symbolic.svg b/src/tools/icons/dash-alt-symbolic.svg
new file mode 100644
index 00000000..87c9807c
--- /dev/null
+++ b/src/tools/icons/dash-alt-symbolic.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg version="1.1" width="16" height="16">
+ <path
+ d="M 0.95056377,-0.40305243 -0.46364963,1.0111611 3.7789904,5.2538017 5.1932044,3.8395881 Z M 6.6074184,5.2538019 5.1932044,6.6680155 6.6074184,8.0822291 8.0216324,6.6680155 Z m 2.828428,2.8284272 -1.414214,1.4142136 4.2426406,4.2426413 1.414214,-1.414214 z m 5.6568546,5.6568549 -1.414214,1.414214 1.414214,1.414214 1.414212,-1.414214 z"
+ fill="#474747" />
+</svg>
diff --git a/src/tools/icons/dash-dots-symbolic.svg b/src/tools/icons/dash-dots-symbolic.svg
new file mode 100644
index 00000000..1dee9ca2
--- /dev/null
+++ b/src/tools/icons/dash-dots-symbolic.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg version="1.1" width="16" height="16">
+ <path
+ d="M 0.92918094,-0.390862 -0.48503266,1.0233514 0.92918094,2.437565 2.3433951,1.0233514 Z M 3.7576071,2.437565 2.3433951,3.8517786 3.7576091,5.2659928 5.1718231,3.8517794 Z M 6.5860351,5.2659928 5.1718231,6.6802064 6.5860351,8.09442 8.0002491,6.6802064 Z M 9.4144631,8.09442 8.0002491,9.5086336 9.4144631,10.922848 10.828677,9.5086336 Z m 2.8284259,2.828428 -1.414212,1.414214 1.414212,1.414211 1.414215,-1.414211 z m 2.828429,2.828425 -1.414214,1.414214 1.414214,1.414214 1.414214,-1.414214 z"
+ fill="#474747" />
+</svg>
diff --git a/src/tools/icons/dash-long-symbolic.svg b/src/tools/icons/dash-long-symbolic.svg
new file mode 100644
index 00000000..515bf481
--- /dev/null
+++ b/src/tools/icons/dash-long-symbolic.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg version="1.1" width="16" height="16">
+ <path
+ d="M 0.85562244,-0.43926467 -0.55859161,0.97494898 3.6840504,5.2175904 5.0982644,3.8033768 Z M 6.5124784,5.2175904 5.0982644,6.631804 l 4.24264,4.242641 1.4142136,-1.414214 z m 5.6568546,5.6568546 -1.414215,1.414214 4.242641,4.24264 1.414214,-1.414214 z"
+ fill="#474747" />
+</svg>
diff --git a/src/tools/icons/dash-none-symbolic.svg b/src/tools/icons/dash-none-symbolic.svg
new file mode 100644
index 00000000..e11ab07b
--- /dev/null
+++ b/src/tools/icons/dash-none-symbolic.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg version="1.1" width="16" height="16">
+ <path
+ d="M -1.5390452,-0.17349675 15.431517,16.797067 16.845731,15.382853 -0.1248322,-1.5877104 Z"
+ fill="#474747" />
+</svg>
diff --git a/src/tools/icons/dash-regular-symbolic.svg b/src/tools/icons/dash-regular-symbolic.svg
new file mode 100644
index 00000000..506aa764
--- /dev/null
+++ b/src/tools/icons/dash-regular-symbolic.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg version="1.1" width="16" height="16">
+ <path
+ d="M 1.6397394,0.33615475 0.22552496,1.7503683 3.0539514,4.5787949 4.4681654,3.1645815 Z m 5.656852,5.65685375 -1.414212,1.4142136 2.828426,2.8284269 1.4142136,-1.4142135 z m 5.6568556,5.6568545 -1.414214,1.414214 2.828426,2.828426 1.414214,-1.414213 z"
+ fill="#474747" />
+</svg>
diff --git a/src/tools/icons/tool-line-symbolic.svg b/src/tools/icons/tool-line-symbolic.svg
index 1f74d513..f70cbb3b 100644
--- a/src/tools/icons/tool-line-symbolic.svg
+++ b/src/tools/icons/tool-line-symbolic.svg
@@ -1,4 +1,5 @@
-<svg width="16" height="16">
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg version="1.1" width="16" height="16">
<path
d="M 0.27222034,3.3777458 1.2737627,2.1708136 15.73139,13.442 14.850542,14.535339 Z"
fill="#474747" />
diff --git a/src/tools/icons/tool-points-symbolic.svg b/src/tools/icons/tool-points-symbolic.svg
new file mode 100644
index 00000000..af71e425
--- /dev/null
+++ b/src/tools/icons/tool-points-symbolic.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg width="16" height="16">
+ <g fill="#474747">
+ <path d="M 1,5 V 3 h 6 v 2 z" />
+ <path d="M 3,7 V 1 h 2 v 6 z"/>
+ </g>
+ <g
+ transform="translate(8,3)"
+ fill="#474747">
+ <path d="M 1,5 V 3 h 6 v 2 z" />
+ <path d="M 3,7 V 1 h 2 v 6 z"/>
+ </g>
+ <g
+ transform="translate(2,8)"
+ fill="#474747">
+ <path d="M 1,5 V 3 h 6 v 2 z" />
+ <path d="M 3,7 V 1 h 2 v 6 z"/>
+ </g>
+</svg>
diff --git a/src/tools/icons/tool-rotate-symbolic.svg b/src/tools/icons/tool-rotate-symbolic.svg
index 960886ba..b033bad0 100644
--- a/src/tools/icons/tool-rotate-symbolic.svg
+++ b/src/tools/icons/tool-rotate-symbolic.svg
@@ -1,5 +1,6 @@
-<svg width="16" height="16">
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg version="1.1" width="16" height="16">
<path
- d="M6.719 2c-.192.009-.372.035-.563.063a6.03 6.03 0 0 0-3.968 2.343C.206 7.048.764 10.831 3.405 12.813c2.642 1.98 6.425 1.422 8.406-1.22.123-.17.19-.382.188-.593v-1h-1a1.024 1.024 0 0 0-.813.406c-1.332 1.777-3.817 2.114-5.593.781-1.777-1.332-2.114-3.816-.782-5.593C5.146 3.817 7.63 3.48 9.407 4.812c.43.323.77.733 1.031 1.188H9a1 1 0 0 0-1 1v1h6V2h-1a1 1 0 0 0-1 1v1.688A5.966 5.966 0 0 0 6.719 2z"
- fill="#474747"/>
+ fill="#474747"
+ d="M 3.3066406 0.064453125 C 2.7610571 -0.031747965 2.2446386 0.3294165 2.1484375 0.875 L 0.064453125 12.693359 C -0.031747965 13.238943 0.3294165 13.755361 0.875 13.851562 L 12.693359 15.935547 C 13.238943 16.031748 13.755361 15.670583 13.851562 15.125 L 15.935547 3.3066406 C 16.031748 2.7610571 15.670583 2.2446386 15.125 2.1484375 L 3.3066406 0.064453125 z M 7.46875 2.9980469 A 5.5028303 5.4937896 0 0 1 12.154297 5.4609375 L 12.154297 3.9160156 A 0.92236512 0.91576632 0 0 1 13.078125 3 L 14 3 L 14 8.4941406 L 8.4648438 8.4941406 L 8.4648438 7.578125 A 0.92236512 0.91576632 0 0 1 9.3886719 6.6621094 L 10.714844 6.6621094 C 10.474106 6.2454355 10.160288 5.7467871 9.7636719 5.5742188 C 8.1246286 4.3733397 5.8329198 4.6636988 4.6015625 6.2910156 C 3.3665515 7.9183322 3.685176 10.194263 5.3242188 11.414062 C 6.9623393 12.615858 9.2538309 12.324583 10.482422 10.697266 A 0.94450187 0.9377447 0 0 1 11.232422 10.326172 L 12.154297 10.326172 L 12.154297 11.242188 C 12.156143 11.435412 11.980469 11.629475 11.980469 11.785156 C 10.153262 14.204611 6.6654041 14.715562 4.2285156 12.902344 C 1.7925491 11.087295 1.277341 7.6225795 3.1054688 5.203125 A 5.5618617 5.4937896 0 0 1 6.765625 3 L 7.2851562 3 L 7.3535156 3 A 5.5028303 5.4937896 0 0 1 7.46875 2.9980469 z " />
</svg>
diff --git a/src/tools/selection_tools/abstract_select.py b/src/tools/selection_tools/abstract_select.py
index 18e88be7..9a3b9664 100644
--- a/src/tools/selection_tools/abstract_select.py
+++ b/src/tools/selection_tools/abstract_select.py
@@ -20,31 +20,21 @@ from gi.repository import Gtk
from .abstract_tool import AbstractAbstractTool
from .optionsbar_selection import OptionsBarSelection
from .utilities_overlay import utilities_show_overlay_on_context
+from .selection_manager import NoSelectionPixbufException
class AbstractSelectionTool(AbstractAbstractTool):
__gtype_name__ = 'AbstractSelectionTool'
- # x_press = 0
- # y_press = 0
- # future_x = 0
- # future_y = 0
- future_path = None
- # future_pixbuf = None
- # operation_type = None # 'op-define'
def __init__(self, tool_id, label, icon_name, window, **kwargs):
super().__init__(tool_id, label, icon_name, window)
self.menu_id = 2
self.accept_selection = True
- # XXX ???????????? what should i do here
+ self._future_pixbuf = None
self.x_press = 0
self.y_press = 0
self.local_dx = 0
self.local_dy = 0
- self.future_x = 0
- self.future_y = 0
- # self.future_path = None
- self.future_pixbuf = None
self.operation_type = None # 'op-define'
############################################################################
@@ -84,7 +74,7 @@ class AbstractSelectionTool(AbstractAbstractTool):
# pass
def cancel_ongoing_operation(self):
- pass # TODO could cancel an unapplied dragging
+ pass # XXX really ?
def has_ongoing_operation(self):
return False
@@ -92,7 +82,7 @@ class AbstractSelectionTool(AbstractAbstractTool):
############################################################################
############################################################################
- def get_press_behavior(self, event):
+ def _get_press_behavior(self, event):
if event.button == 3:
return 'menu'
elif not self.selection_is_active():
@@ -111,17 +101,19 @@ class AbstractSelectionTool(AbstractAbstractTool):
def release_define(self, surface, event_x, event_y):
pass # implemented by actual tools
- def drag_to(self, event_x, event_y):
+ def _apply_drag_to(self, event_x, event_y):
x = self.get_selection().selection_x
y = self.get_selection().selection_y
- self.future_x = x + event_x - self.x_press
- self.future_y = y + event_y - self.y_press
+ fx = x + event_x - self.x_press
+ fy = y + event_y - self.y_press
+ self.get_selection().set_future_coords(fx, fy)
+
self.operation_type = 'op-drag'
operation = self.build_operation()
self.do_tool_operation(operation)
self.operation_type = 'op-define'
- def preview_drag_to(self, event_x, event_y):
+ def _preview_drag_to(self, event_x, event_y):
self.local_dx = event_x - self.x_press
self.local_dy = event_y - self.y_press
self.non_destructive_show_modif()
@@ -132,7 +124,7 @@ class AbstractSelectionTool(AbstractAbstractTool):
def on_press_on_area(self, event, surface, event_x, event_y):
self.x_press = event_x
self.y_press = event_y
- self.behavior = self.get_press_behavior(event)
+ self.behavior = self._get_press_behavior(event)
# print('press', self.behavior)
if self.behavior == 'drag':
self.cursor_name = 'grabbing'
@@ -148,11 +140,10 @@ class AbstractSelectionTool(AbstractAbstractTool):
if self.behavior == 'define':
self.motion_define(event_x, event_y)
elif self.behavior == 'drag':
- self.preview_drag_to(event_x, event_y)
+ self._preview_drag_to(event_x, event_y)
def on_unclicked_motion_on_area(self, event, surface):
- x = event.x + self.get_image().scroll_x
- y = event.y + self.get_image().scroll_y
+ x, y = self.get_image().get_event_coords(event)
if not self.selection_is_active():
self.cursor_name = 'cross'
elif self.get_selection().point_is_in_selection(x, y):
@@ -162,25 +153,26 @@ class AbstractSelectionTool(AbstractAbstractTool):
self.window.set_cursor(True)
def on_release_on_area(self, event, surface, event_x, event_y):
- self.get_selection().set_popovers_position(event.x, event.y)
if event.button == 3:
+ if not self.get_selection().is_active:
+ self.get_selection().set_coords(True, event_x, event_y)
+ self.get_selection().set_popovers_position(event.x, event.y)
self.get_selection().show_popover()
return
self.restore_pixbuf()
if self.behavior == 'define':
self.release_define(surface, event_x, event_y)
elif self.behavior == 'drag':
- self.drag_to(event_x, event_y)
+ self._apply_drag_to(event_x, event_y)
def on_draw(self, area, cairo_context):
if not self.selection_is_active():
return
self.get_selection().show_selection_on_surface(cairo_context, True, \
self.local_dx, self.local_dy)
- dragged_path = self.get_selection().get_path_with_scroll(self.local_dx, \
- self.local_dy) # TODO
- # i should give it something corresponding temporary selection_x/y when
- # the selection is moving. Method not really use elsewhere.
+ dragged_path = self.get_selection().get_path_with_scroll( \
+ self.local_dx, self.local_dy)
+ # Method not really use elsewhere.
utilities_show_overlay_on_context(cairo_context, dragged_path, True)
############################################################################
@@ -196,7 +188,7 @@ class AbstractSelectionTool(AbstractAbstractTool):
self.get_selection().show_popover()
def _build_rectangle_path(self, press_x, press_y, release_x, release_y):
- cairo_context = self.get_context()
+ # XXX could be in the selection manager
x0 = int( min(press_x, release_x) )
y0 = int( min(press_y, release_y) )
x1 = int( max(press_x, release_x) )
@@ -204,29 +196,30 @@ class AbstractSelectionTool(AbstractAbstractTool):
w = x1 - x0
h = y1 - y0
if w <= 0 or h <= 0:
- # AbstractSelectionTool.future_path = None
return
- self.future_x = x0
- self.future_y = y0
+ self.get_selection().set_future_coords(x0, y0)
+ cairo_context = self.get_context()
cairo_context.new_path()
cairo_context.move_to(x0, y0)
cairo_context.line_to(x1, y0)
cairo_context.line_to(x1, y1)
cairo_context.line_to(x0, y1)
cairo_context.close_path()
- AbstractSelectionTool.future_path = cairo_context.copy_path()
+ self.get_selection().set_future_path(cairo_context.copy_path())
def _set_future_coords_for_free_path(self):
- """..."""
+ """Convert selection manager's future_path coords from absolute to
+ relative ones, and sets future coords accordingly."""
+ # XXX could be in the selection manager
main_width = self.get_main_pixbuf().get_width()
main_height = self.get_main_pixbuf().get_height()
- xmin, ymin = main_width, main_height # TODO cairo_context.path_extents()
- for pts in AbstractSelectionTool.future_path:
- if pts[1] is not ():
+ xmin, ymin = main_width, main_height # TODO context.path_extents() ?
+ future_path = self.get_selection().get_future_path()
+ for pts in future_path:
+ if pts[1] != ():
xmin = min(pts[1][0], xmin)
ymin = min(pts[1][1], ymin)
- self.future_x = max(xmin, 0.0)
- self.future_y = max(ymin, 0.0)
+ self.get_selection().set_future_coords(max(xmin, 0.0), max(ymin, 0.0))
############################################################################
# Operations management methods ############################################
@@ -239,16 +232,24 @@ class AbstractSelectionTool(AbstractAbstractTool):
def import_selection(self, pixbuf):
self.unselect_and_apply()
- self.future_pixbuf = pixbuf
+ self._future_pixbuf = pixbuf
self.operation_type = 'op-import'
+
+ sx = self.get_selection().selection_x
+ sy = self.get_selection().selection_y
+ if sx == 0 and sy == 0 :
+ scroll_x = self.get_image().scroll_x + 2
+ scroll_y = self.get_image().scroll_y + 2
+ self.get_selection().set_future_coords(scroll_x, scroll_y)
+ self.get_selection().set_coords(False, scroll_x, scroll_y)
+ else:
+ self.get_selection().set_future_coords(sx, sy)
+
operation = self.build_operation()
self.apply_operation(operation)
self.operation_type = 'op-define'
def unselect_and_apply(self):
- if self.operation_type is None:
- print('none') # FIXME le bug des outils de sélection incompatibles entre eux
- return # TODO raise something goddammit
self.operation_type = 'op-apply'
operation = self.build_operation()
self.apply_operation(operation)
@@ -258,14 +259,18 @@ class AbstractSelectionTool(AbstractAbstractTool):
### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ###
- def _op_import(self, operation):
- if operation['pixbuf'] is None:
- return # TODO raise something goddammit
- self.get_selection().set_pixbuf(operation['pixbuf'].copy())
+ def _op_import(self, op):
+ if op['pixbuf'] is None:
+ raise NoSelectionPixbufException()
+ # XXX does it run cleanly after the "return" to the calling method?
+ # (compared to a more normal return)
+ self.get_selection().set_future_coords(op['pixb_x'], op['pixb_y'])
+ self.get_selection().set_coords(False, op['pixb_x'], op['pixb_y'])
+ self.get_selection().set_pixbuf(op['pixbuf'].copy())
def _op_clean(self, operation):
if operation['initial_path'] is None:
- return # TODO raise something goddammit
+ return # The user double-clicked: there is no path, and it's normal
cairo_context = self.get_context()
cairo_context.new_path()
cairo_context.append_path(operation['initial_path'])
@@ -280,7 +285,7 @@ class AbstractSelectionTool(AbstractAbstractTool):
def _op_define(self, op):
if op['initial_path'] is None:
- return # TODO raise something goddammit
+ return # The user double-clicked: there is no path, and it's normal
self.get_selection().set_coords(True, op['pixb_x'], op['pixb_y'])
self.get_selection().load_from_path(op['initial_path'])
@@ -289,24 +294,27 @@ class AbstractSelectionTool(AbstractAbstractTool):
self.get_selection().show_selection_on_surface(cairo_context, False, \
self.local_dx, self.local_dy)
self.get_selection().reset(True)
- # self.future_path = None
- AbstractSelectionTool.future_path = None
+ self.get_selection().reset_future_data()
############################################################################
# Operations management implementations ####################################
def build_operation(self):
- if self.future_pixbuf is None: # Cas normal
+ """Operation is built from the operation_type, the current tool's
+ 'future_pixbuf' attribute, and '_future_*' attributes from the
+ selection manager that were previously set."""
+ if self._future_pixbuf is None: # Usual case
pixbuf = None
- else: # Cas des importations uniquement
- pixbuf = self.future_pixbuf.copy()
+ else: # Case of importation only
+ pixbuf = self._future_pixbuf.copy()
+ self._future_pixbuf = None
operation = {
'tool_id': self.id,
'operation_type': self.operation_type,
- 'initial_path': AbstractSelectionTool.future_path,
+ 'initial_path': self.get_selection().get_future_path(),
'pixbuf': pixbuf,
- 'pixb_x': int(self.future_x),
- 'pixb_y': int(self.future_y)
+ 'pixb_x': self.get_selection().get_future_coords()[0],
+ 'pixb_y': self.get_selection().get_future_coords()[1]
}
return operation
@@ -348,3 +356,4 @@ class AbstractSelectionTool(AbstractAbstractTool):
############################################################################
################################################################################
+
diff --git a/src/tools/selection_tools/select_color.py b/src/tools/selection_tools/select_color.py
index cbcd83d8..e6972f1e 100644
--- a/src/tools/selection_tools/select_color.py
+++ b/src/tools/selection_tools/select_color.py
@@ -22,6 +22,9 @@ class ToolColorSelect(AbstractSelectionTool):
__gtype_name__ = 'ToolColorSelect'
def __init__(self, window, **kwargs):
+ # Context: this is a tool to "magically" select an area depending on its
+ # color. For example clicking on a white pixel will select the
+ # surrounding area made of white pixels.
super().__init__('color_select', _("Color selection"), 'tool-magic-symbolic', window)
def press_define(self, event_x, event_y):
@@ -30,10 +33,10 @@ class ToolColorSelect(AbstractSelectionTool):
def motion_define(self, event_x, event_y):
pass
- def release_define(self, surface, event_x, event_y):
- AbstractSelectionTool.future_path = utilities_get_magic_path(surface, \
- event_x, event_y, self.window, 1)
- if AbstractSelectionTool.future_path is None:
+ def release_define(self, surfc, event_x, event_y):
+ path = utilities_get_magic_path(surfc, event_x, event_y, self.window, 1)
+ self.get_selection().set_future_path(path)
+ if path is None:
return
self.operation_type = 'op-define'
self._set_future_coords_for_free_path()
diff --git a/src/tools/selection_tools/select_free.py b/src/tools/selection_tools/select_free.py
index d6de0330..c0cb4d97 100644
--- a/src/tools/selection_tools/select_free.py
+++ b/src/tools/selection_tools/select_free.py
@@ -22,6 +22,8 @@ class ToolFreeSelect(AbstractSelectionTool):
__gtype_name__ = 'ToolFreeSelect'
def __init__(self, window, **kwargs):
+ # Context: this is a tool to select an area according to a shape that
+ # can be freely defined by the user.
super().__init__('free_select', _("Free selection"), 'tool-select-free-symbolic', window)
self.closing_precision = 10
self.closing_x = 0.0
@@ -66,27 +68,27 @@ class ToolFreeSelect(AbstractSelectionTool):
cairo_context = self.get_context()
cairo_context.set_source_rgba(0.5, 0.5, 0.5, 0.5)
cairo_context.set_dash([3, 3])
- if AbstractSelectionTool.future_path is None:
+ if self.get_selection().get_future_path() is None:
self.closing_x = event_x
self.closing_y = event_y
cairo_context.move_to(event_x, event_y)
- AbstractSelectionTool.future_path = cairo_context.copy_path()
+ self.get_selection().set_future_path(cairo_context.copy_path())
return False
delta_x = max(event_x, self.closing_x) - min(event_x, self.closing_x)
delta_y = max(event_y, self.closing_y) - min(event_y, self.closing_y)
+ cairo_context.append_path(self.get_selection().get_future_path())
if (delta_x < self.closing_precision) and (delta_y < self.closing_precision):
- cairo_context.append_path(AbstractSelectionTool.future_path)
cairo_context.close_path()
cairo_context.stroke_preserve()
- AbstractSelectionTool.future_path = cairo_context.copy_path()
+ self.get_selection().set_future_path(cairo_context.copy_path())
return True
else:
- cairo_context.append_path(AbstractSelectionTool.future_path)
cairo_context.line_to(int(event_x), int(event_y))
cairo_context.stroke_preserve() # draw the line without closing the path
- AbstractSelectionTool.future_path = cairo_context.copy_path()
- self.non_destructive_show_modif() # XXX
+ self.get_selection().set_future_path(cairo_context.copy_path())
+ self.non_destructive_show_modif()
return False
############################################################################
################################################################################
+
diff --git a/src/tools/selection_tools/select_rect.py b/src/tools/selection_tools/select_rect.py
index 11af94ff..fd7bff99 100644
--- a/src/tools/selection_tools/select_rect.py
+++ b/src/tools/selection_tools/select_rect.py
@@ -31,8 +31,9 @@ class ToolRectSelect(AbstractSelectionTool):
self._build_rectangle_path(self.x_press, self.y_press, event_x, event_y)
self.restore_pixbuf()
cairo_context = self.get_context()
- utilities_show_overlay_on_context(cairo_context, \
- AbstractSelectionTool.future_path, True)
+ rect = self.get_selection().get_future_path()
+ if rect is not None:
+ utilities_show_overlay_on_context(cairo_context, rect, True)
def release_define(self, surface, event_x, event_y):
self._build_rectangle_path(self.x_press, self.y_press, event_x, event_y)
diff --git a/src/tools/canvas_tools/abstract_canvas_tool.py b/src/tools/transform_tools/abstract_transform_tool.py
index 65a2a255..5dab3b08 100644
--- a/src/tools/canvas_tools/abstract_canvas_tool.py
+++ b/src/tools/transform_tools/abstract_transform_tool.py
@@ -1,4 +1,4 @@
-# abstract_canvas_tool.py
+# abstract_transform_tool.py
#
# Copyright 2018-2020 Romain F. T.
#
@@ -56,10 +56,10 @@ class AbstractCanvasTool(AbstractAbstractTool):
self.do_tool_operation(operation)
def temp_preview(self, is_selection, local_dx, local_dy):
- """Part of the previewing methods shared by all canvas tools."""
- cairo_context = self.get_context()
+ """Part of the previewing methods shared by all transform tools."""
pixbuf = self.get_image().temp_pixbuf
if is_selection:
+ cairo_context = self.get_context()
cairo_context.set_source_surface(self.get_surface(), 0, 0)
cairo_context.paint()
x = self.get_selection().selection_x + local_dx
@@ -67,11 +67,14 @@ class AbstractCanvasTool(AbstractAbstractTool):
Gdk.cairo_set_source_pixbuf(cairo_context, pixbuf, x, y)
cairo_context.paint()
else:
- cairo_context.set_operator(cairo.Operator.CLEAR)
- cairo_context.paint()
- cairo_context.set_operator(cairo.Operator.OVER)
+ cairo_context = self.get_context()
+ # widget_surface = cairo.ImageSurface(cairo.Format.ARGB32, w, h)
+ # cairo_context = cairo.Context(widget_surface)
+ # TODO concerning the scale(/crop)/rotate/skew preview ^
+ cairo_context.set_operator(cairo.Operator.SOURCE)
Gdk.cairo_set_source_pixbuf(cairo_context, pixbuf, 0, 0)
cairo_context.paint()
+ cairo_context.set_operator(cairo.Operator.OVER)
self.get_image().update()
############################################################################
@@ -96,16 +99,10 @@ class AbstractCanvasTool(AbstractAbstractTool):
else:
self.apply_temp(op['is_selection'], op['local_dx'], op['local_dy'])
- def apply_temp(self, operation_is_selection, local_dx, local_dy):
+ def apply_temp(self, operation_is_selection, ldx, ldy):
new_pixbuf = self.get_image().temp_pixbuf.copy()
if operation_is_selection:
- # TODO déplacer le code qui suit dans selection_manager.py
- self.get_selection().set_pixbuf(new_pixbuf)
- x = self.get_selection().selection_x + local_dx
- y = self.get_selection().selection_y + local_dy
- self.get_selection().set_coords(True, x, y) # XXX si on reste sur
- # True, l'overlay s'en trouve décalée, mais avec False ça nique tout
- # au moment de la désélection
+ self.get_selection().update_from_transform_tool(new_pixbuf, ldx, ldy)
else:
self.get_image().set_main_pixbuf(new_pixbuf)
self.get_image().use_stable_pixbuf()
@@ -116,17 +113,12 @@ class AbstractCanvasTool(AbstractAbstractTool):
"""Return the name of the accurate cursor for tools such as `scale` or
`crop`, with or without an active selection, depending on the size and
position of the resized/cropped area."""
- height = self.get_image().temp_pixbuf.get_height()
- width = self.get_image().temp_pixbuf.get_width()
- w_left, w_right, h_top, h_bottom = self.get_image().get_corrected_coords(\
- 0, width, 0, height, self.apply_to_selection, True)
- # Comment to help the debug:
- h_top += 0.4 * height
- h_bottom -= 0.4 * height
- w_left += 0.4 * width
- w_right -= 0.4 * width
- # print("get_handle_cursor_name", w_left, w_right, h_top, h_bottom)
+ w_left, w_right, h_top, h_bottom = self.get_image().get_nineths_sizes( \
+ self.apply_to_selection, int(self._x), int(self._y))
+ # if we're transforming the selection from its top and/or left, coords
+ # to decide the direction depend on local deltas (self._x and self._y)
+ # print("get_handle_cursor_name", w_left, w_right, h_top, h_bottom)
cursor_name = ''
if event_y < h_top:
cursor_name = cursor_name + 'n'
@@ -156,7 +148,7 @@ class AbstractCanvasTool(AbstractAbstractTool):
normal_w = p_xx * source_w + p_xy * source_h + p_x0
normal_h = p_yx * source_w + p_yy * source_h + p_y0
w = max(normal_w, source_w + p_x0)
- h = max(normal_h, source_h + p_y0) # XXX bof, pas sûr
+ h = max(normal_h, source_h + p_y0) # XXX bof, pas sûr, c'est trop
new_surface = cairo.ImageSurface(cairo.Format.ARGB32, int(w), int(h))
cairo_context = cairo.Context(new_surface)
@@ -168,7 +160,6 @@ class AbstractCanvasTool(AbstractAbstractTool):
self.show_error(_("Error: invalid values"))
return source_surface
cairo_context.set_source_surface(source_surface, 0, 0)
- # FIXME scroll and zoom ?
cairo_context.paint()
return new_surface
diff --git a/src/tools/canvas_tools/tool_crop.py b/src/tools/transform_tools/tool_crop.py
index 9aa80196..c61348f3 100644
--- a/src/tools/canvas_tools/tool_crop.py
+++ b/src/tools/transform_tools/tool_crop.py
@@ -16,7 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from gi.repository import Gdk, GdkPixbuf
-from .abstract_canvas_tool import AbstractCanvasTool
+from .abstract_transform_tool import AbstractCanvasTool
from .optionsbar_crop import OptionsBarCrop
from .utilities_overlay import utilities_show_handles_on_context
@@ -29,6 +29,8 @@ class ToolCrop(AbstractCanvasTool):
self.x_press = 0
self.y_press = 0
self.unclicked = True
+ self.add_tool_action_enum('crop-expand', 'initial')
+ self._expansion_color = 0 # transparent black, will be updated later
def try_build_pane(self):
self.pane_id = 'crop'
@@ -48,7 +50,7 @@ class ToolCrop(AbstractCanvasTool):
else:
return _("Cropping the canvas")
-###################################################
+ ############################################################################
def on_tool_selected(self, *args):
super().on_tool_selected()
@@ -60,6 +62,7 @@ class ToolCrop(AbstractCanvasTool):
self.init_if_main()
self.width_btn.set_value(self.original_width)
self.height_btn.set_value(self.original_height)
+ self.set_action_sensitivity('crop-expand', not self.apply_to_selection)
self.build_and_do_op()
def init_if_selection(self):
@@ -76,6 +79,31 @@ class ToolCrop(AbstractCanvasTool):
############################################################################
+ def _update_expansion_color(self, event_btn=1):
+ """When the canvas grows, the color of the new pixels is parametrable"""
+ color_type = self.get_option_value('crop-expand')
+ if color_type == 'initial':
+ exp_rgba = self.get_image().get_initial_rgba()
+ elif color_type == 'secondary':
+ if event_btn == 1:
+ exp_rgba = self.window.options_manager.get_right_color()
+ if event_btn == 3:
+ exp_rgba = self.window.options_manager.get_left_color()
+ else: # color_type == 'alpha':
+ exp_rgba = Gdk.RGBA(red=1.0, green=1.0, blue=1.0, alpha=0.0)
+ self._expansion_color = self._rgba_as_hexa_int(exp_rgba)
+
+ def _rgba_as_hexa_int(self, gdk_rgba):
+ """The method GdkPixbuf.Pixbuf.fill wants an hexadecimal integer whose
+ format is 0xrrggbbaa so here are ugly binary operators."""
+ r = int(255 * gdk_rgba.red)
+ g = int(255 * gdk_rgba.green)
+ b = int(255 * gdk_rgba.blue)
+ a = int(255 * gdk_rgba.alpha)
+ return (((((r << 8) + g) << 8) + b) << 8) + a
+
+ ############################################################################
+
def get_width(self):
return self.width_btn.get_value_as_int()
@@ -111,13 +139,14 @@ class ToolCrop(AbstractCanvasTool):
self.window.set_cursor(True)
def on_press_on_area(self, event, surface, event_x, event_y):
- self.x_press = event.x
- self.y_press = event.y
+ self.x_press = event_x
+ self.y_press = event_y
self.unclicked = False
+ self._update_expansion_color(event.button)
def on_motion_on_area(self, event, surface, event_x, event_y):
- delta_x = event.x - self.x_press
- delta_y = event.y - self.y_press
+ delta_x = event_x - self.x_press
+ delta_y = event_y - self.y_press
if self.cursor_name == 'not-allowed':
return
@@ -136,8 +165,8 @@ class ToolCrop(AbstractCanvasTool):
self._x = max(0, self._x)
self._y = max(0, self._y)
- self.x_press = event.x
- self.y_press = event.y
+ self.x_press = event_x
+ self.y_press = event_y
# self.build_and_do_op() # better UX but slower to compute
if not self.apply_to_selection:
self.build_and_do_op()
@@ -161,9 +190,6 @@ class ToolCrop(AbstractCanvasTool):
x1, x2, y1, y2 = self.get_image().get_corrected_coords(x1, x2, y1, y2, \
self.apply_to_selection, False)
utilities_show_handles_on_context(cairo_context, x1, x2, y1, y2)
- # FIXME bien excepté les delta locaux : quand on rogne depuis le haut ou
- # la gauche, les coordonées de référence des poignées ne sont plus
- # correctes.
############################################################################
@@ -175,7 +201,8 @@ class ToolCrop(AbstractCanvasTool):
'local_dx': int(self._x),
'local_dy': int(self._y),
'width': self.get_width(),
- 'height': self.get_height()
+ 'height': self.get_height(),
+ 'rgba': self._expansion_color
}
return operation
@@ -185,17 +212,19 @@ class ToolCrop(AbstractCanvasTool):
y = operation['local_dy']
width = operation['width']
height = operation['height']
- if operation['is_selection']:
+ rgba = operation['rgba']
+ is_selection = operation['is_selection']
+ if is_selection:
source_pixbuf = self.get_selection_pixbuf()
else:
source_pixbuf = self.get_main_pixbuf()
self.get_image().set_temp_pixbuf(source_pixbuf.copy())
- self.crop_temp_pixbuf(x, y, width, height, operation['is_selection'])
+ self.crop_temp_pixbuf(x, y, width, height, is_selection, rgba)
self.common_end_operation(operation)
- def crop_temp_pixbuf(self, x, y, width, height, is_selection):
+ def crop_temp_pixbuf(self, x, y, width, height, is_selection, rgba):
new_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, width, height)
- new_pixbuf.fill(0)
+ new_pixbuf.fill(rgba)
src_x = max(x, 0)
src_y = max(y, 0)
if is_selection:
diff --git a/src/tools/canvas_tools/tool_filters.py b/src/tools/transform_tools/tool_filters.py
index 89334cd9..909b3f77 100644
--- a/src/tools/canvas_tools/tool_filters.py
+++ b/src/tools/transform_tools/tool_filters.py
@@ -17,7 +17,7 @@
import cairo
from gi.repository import Gdk, GdkPixbuf
-from .abstract_canvas_tool import AbstractCanvasTool
+from .abstract_transform_tool import AbstractCanvasTool
from .optionsbar_filters import OptionsBarFilters
from .utilities_blur import utilities_blur_surface, BlurType, BlurDirection
@@ -51,6 +51,9 @@ class ToolFilters(AbstractCanvasTool):
def _reset_type_values(self):
self.blur_algo = BlurType.INVALID
+ # The active filter is memorized using individual booleans because they
+ # make it easier to write conditionals, concerning both the panel and
+ # the tool operation.
self.saturate = False
self.pixelate = False
self.invert = False
@@ -76,7 +79,7 @@ class ToolFilters(AbstractCanvasTool):
self.type_label = _("Slow blur")
elif state_as_string == 'tiles':
self.blur_algo = BlurType.TILES
- self.type_label = _("Pixelisation")
+ self.type_label = _("Pixelization")
elif state_as_string == 'saturation':
self.saturate = True
self.type_label = _("Change saturation")
@@ -111,6 +114,7 @@ class ToolFilters(AbstractCanvasTool):
self.bar.menu_btn.set_active(True)
if self.blur_algo == BlurType.INVALID:
self.on_filter_preview()
+ # XXX great optimization but it displays shit
def on_press_on_area(self, event, surface, event_x, event_y):
self.on_filter_preview()
@@ -131,9 +135,9 @@ class ToolFilters(AbstractCanvasTool):
'local_dy': 0,
'saturation': self._get_saturation(),
'radius': self._get_blur_radius(),
- 'pixelate': self.pixelate, # XXX ces 4 booléens dégueulasses au lieu
- 'invert': self.invert, # de passer la valeur de l'action et de faire
- 'saturate': self.saturate, # le switch/case côté do_tool_operation??
+ 'pixelate': self.pixelate,
+ 'invert': self.invert,
+ 'saturate': self.saturate,
'use_transparency': self.transparency,
'transpercent': self._get_transparency(),
'blur_algo': self.blur_algo,
@@ -153,6 +157,7 @@ class ToolFilters(AbstractCanvasTool):
def op_transparency(self, source_pixbuf, percent):
surface = Gdk.cairo_surface_create_from_pixbuf(source_pixbuf, 0, None)
+ surface.set_device_scale(self.scale_factor(), self.scale_factor())
width = source_pixbuf.get_width()
height = source_pixbuf.get_height()
new_surface = cairo.ImageSurface(cairo.Format.ARGB32, width, height)
@@ -166,6 +171,7 @@ class ToolFilters(AbstractCanvasTool):
def op_blur(self, source_pixbuf, blur_algo, blur_direction, radius):
surface = Gdk.cairo_surface_create_from_pixbuf(source_pixbuf, 0, None)
+ surface.set_device_scale(self.scale_factor(), self.scale_factor())
bs = utilities_blur_surface(surface, radius, blur_algo, blur_direction)
bp = Gdk.pixbuf_get_from_surface(bs, 0, 0, bs.get_width(), bs.get_height())
self.get_image().set_temp_pixbuf(bp)
@@ -193,7 +199,7 @@ class ToolFilters(AbstractCanvasTool):
if operation['saturate']:
source_pixbuf.saturate_and_pixelate(temp, operation['saturation'], False)
elif operation['pixelate']:
- source_pixbuf.saturate_and_pixelate(temp, 1, operation['pixelate'])
+ source_pixbuf.saturate_and_pixelate(temp, 1, True)
self.common_end_operation(operation)
diff --git a/src/tools/canvas_tools/tool_rotate.py b/src/tools/transform_tools/tool_rotate.py
index 9b4419df..d6b3cb4c 100644
--- a/src/tools/canvas_tools/tool_rotate.py
+++ b/src/tools/transform_tools/tool_rotate.py
@@ -17,7 +17,7 @@
import math
from gi.repository import Gdk
-from .abstract_canvas_tool import AbstractCanvasTool
+from .abstract_transform_tool import AbstractCanvasTool
from .optionsbar_rotate import OptionsBarRotate
class ToolRotate(AbstractCanvasTool):
@@ -34,7 +34,6 @@ class ToolRotate(AbstractCanvasTool):
self.add_tool_action_simple('rotate-counter-cw', self.on_left_clicked)
self.add_tool_action_simple('rotate-flip-h', self.on_horizontal_clicked)
self.add_tool_action_simple('rotate-flip-v', self.on_vertical_clicked)
- # self.add_tool_action_enum('rotate-unit', 'degrees') # TODO ?
def try_build_pane(self):
self.pane_id = 'rotate'
@@ -155,16 +154,8 @@ class ToolRotate(AbstractCanvasTool):
# print('gdk_rotation:', gdk_rotation)
# print('cairo_rotation:', cairo_rotation)
- # Image rotation, using methods from both GdkPixbuf.Pixbuf and (if
- # needed) cairo.Context
+ # Image rotation, using the method from GdkPixbuf.Pixbuf
new_pixbuf = source_pixbuf.rotate_simple(gdk_rotation)
- if cairo_rotation != 0:
- surface0 = Gdk.cairo_surface_create_from_pixbuf(new_pixbuf, 0, None)
- coefs = self.get_rotation_matrix(cairo_rotation, \
- surface0.get_width(), surface0.get_height())
- new_surface = self.get_deformed_surface(surface0, coefs)
- new_pixbuf = Gdk.pixbuf_get_from_surface(new_surface, 0, 0, \
- new_surface.get_width(), new_surface.get_height())
# Image flipping (horizontal or vertical "mirroring")
if flip_h:
@@ -172,10 +163,20 @@ class ToolRotate(AbstractCanvasTool):
if flip_v:
new_pixbuf = new_pixbuf.flip(False)
+ # Image rotation, using methods from cairo.Context (only if needed)
+ if cairo_rotation != 0:
+ surface0 = Gdk.cairo_surface_create_from_pixbuf(new_pixbuf, 0, None)
+ surface0.set_device_scale(self.scale_factor(), self.scale_factor())
+ coefs = self._get_rotation_matrix(cairo_rotation, \
+ surface0.get_width(), surface0.get_height())
+ new_surface = self.get_deformed_surface(surface0, coefs)
+ new_pixbuf = Gdk.pixbuf_get_from_surface(new_surface, 0, 0, \
+ new_surface.get_width(), new_surface.get_height())
+
self.get_image().set_temp_pixbuf(new_pixbuf)
self.common_end_operation(operation)
- def get_rotation_matrix(self, angle, width, height):
+ def _get_rotation_matrix(self, angle, width, height):
"""Transform an angle (in degrees) to the xx/yx/xy/yy coefs expected by
cairo. Due to previously performed modifications to the data, the angle
will be between 0 (excluded) and 90 (excluded)."""
diff --git a/src/tools/canvas_tools/tool_scale.py b/src/tools/transform_tools/tool_scale.py
index 491cbc01..4e503438 100644
--- a/src/tools/canvas_tools/tool_scale.py
+++ b/src/tools/transform_tools/tool_scale.py
@@ -16,7 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from gi.repository import Gtk, GdkPixbuf
-from .abstract_canvas_tool import AbstractCanvasTool
+from .abstract_transform_tool import AbstractCanvasTool
from .optionsbar_scale import OptionsBarScale
from .utilities_overlay import utilities_show_handles_on_context
@@ -35,7 +35,7 @@ class ToolScale(AbstractCanvasTool):
self.x_press = 0
self.y_press = 0
self.add_tool_action_enum('scale-proportions', 'corners')
- # self.add_tool_action_enum('scale-unit', 'pixels') # TODO ?
+ # self.add_tool_action_enum('scale-unit', 'pixels') # TODO
def try_build_pane(self):
self.pane_id = 'scale'
@@ -124,8 +124,8 @@ class ToolScale(AbstractCanvasTool):
self.window.set_cursor(True)
def on_press_on_area(self, event, surface, event_x, event_y):
- self.x_press = event.x
- self.y_press = event.y
+ self.x_press = event_x
+ self.y_press = event_y
self._x2 = self._x + self.get_width()
self._y2 = self._y + self.get_height()
self.directions = self.cursor_name.replace('-resize', '')
@@ -134,10 +134,10 @@ class ToolScale(AbstractCanvasTool):
def on_motion_on_area(self, event, surface, event_x, event_y):
if self.cursor_name == 'not-allowed':
return
- delta_x = event.x - self.x_press
- delta_y = event.y - self.y_press
- self.x_press = event.x
- self.y_press = event.y
+ delta_x = event_x - self.x_press
+ delta_y = event_y - self.y_press
+ self.x_press = event_x
+ self.y_press = event_y
height = self.get_height()
width = self.get_width()
@@ -186,10 +186,6 @@ class ToolScale(AbstractCanvasTool):
x1, x2, y1, y2 = self.get_image().get_corrected_coords(x1, x2, y1, y2, \
self.apply_to_selection, False)
utilities_show_handles_on_context(cairo_context, x1, x2, y1, y2)
- # FIXME bien excepté les delta locaux : quand on rogne depuis le haut ou
- # la gauche, les coordonnées de référence des poignées ne sont plus
- # correctes.
- # Ça impacte aussi l'overlay après application des changements.
############################################################################
diff --git a/src/tools/canvas_tools/tool_skew.py b/src/tools/transform_tools/tool_skew.py
index 2bf1a470..11dbd57b 100644
--- a/src/tools/canvas_tools/tool_skew.py
+++ b/src/tools/transform_tools/tool_skew.py
@@ -16,7 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from gi.repository import Gdk
-from .abstract_canvas_tool import AbstractCanvasTool
+from .abstract_transform_tool import AbstractCanvasTool
from .optionsbar_skew import OptionsBarSkew
class ToolSkew(AbstractCanvasTool):
@@ -83,6 +83,7 @@ class ToolSkew(AbstractCanvasTool):
else:
source_pixbuf = self.get_main_pixbuf()
source_surface = Gdk.cairo_surface_create_from_pixbuf(source_pixbuf, 0, None)
+ source_surface.set_device_scale(self.scale_factor(), self.scale_factor())
xy = operation['xy']
x0 = 0.0
diff --git a/src/tools/ui/selection.ui b/src/tools/ui/selection.ui
index a96e50df..87eda0c0 100644
--- a/src/tools/ui/selection.ui
+++ b/src/tools/ui/selection.ui
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface domain="drawing">
+ <!-- for the menubar of any selection tool-->
<menu id="options-menu">
- <!-- for the menubar of all selection tools-->
<section>
<item>
<attribute name="label" translatable="yes">Select all</attribute>
@@ -36,15 +36,9 @@
</section>
<section>
<submenu>
- <attribute name="label" translatable="yes">Edit</attribute>
+ <attribute name="label" translatable="yes">Transform</attribute>
<!-- XXX inconsistent with the idea of additional tools -->
<item>
- <attribute name="label" translatable="yes">Flip</attribute>
- <attribute name="action">win.active_tool</attribute>
- <attribute name="target">flip</attribute>
- <attribute name="verb-icon">tool-flip-symbolic</attribute>
- </item>
- <item>
<attribute name="label" translatable="yes">Crop</attribute>
<attribute name="action">win.active_tool</attribute>
<attribute name="target">crop</attribute>
@@ -63,12 +57,6 @@
<attribute name="verb-icon">tool-rotate-symbolic</attribute>
</item>
<item>
- <attribute name="label" translatable="yes">Skew</attribute>
- <attribute name="action">win.active_tool</attribute>
- <attribute name="target">skew</attribute>
- <attribute name="verb-icon">tool-skew-symbolic</attribute>
- </item>
- <item>
<attribute name="label" translatable="yes">Filters</attribute>
<attribute name="action">win.active_tool</attribute>
<attribute name="target">filters</attribute>
@@ -89,3 +77,4 @@
</menu>
</interface>
+
diff --git a/src/tools/ui/tool-arc.ui b/src/tools/ui/tool-arc.ui
index 46e506ee..0cc0e946 100644
--- a/src/tools/ui/tool-arc.ui
+++ b/src/tools/ui/tool-arc.ui
@@ -9,26 +9,63 @@
<attribute name="target">round</attribute>
</item>
<item>
- <attribute name="label" translatable="yes">Thin</attribute>
+ <attribute name="label" translatable="yes">Square</attribute>
<attribute name="action">win.line_shape</attribute>
<attribute name="target">thin</attribute>
</item>
+ </section>
+ <section>
<item>
- <attribute name="label" translatable="yes">Square</attribute>
- <attribute name="action">win.line_shape</attribute>
- <attribute name="target">square</attribute>
+ <attribute name="label" translatable="yes">No arrow</attribute>
+ <attribute name="action">win.arrow-type</attribute>
+ <attribute name="target">none</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Simple arrow</attribute>
+ <attribute name="action">win.arrow-type</attribute>
+ <attribute name="target">simple</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Double arrow</attribute>
+ <attribute name="action">win.arrow-type</attribute>
+ <attribute name="target">double</attribute>
</item>
</section>
<section>
+ <attribute name="display-hint">horizontal-buttons</attribute>
<item>
- <attribute name="label" translatable="yes">Use dashes</attribute>
- <attribute name="action">win.use_dashes</attribute>
+ <attribute name="label" translatable="yes">No dashes</attribute>
+ <attribute name="action">win.dashes-type</attribute>
+ <attribute name="target">none</attribute>
+ <attribute name="verb-icon">dash-none-symbolic</attribute>
</item>
<item>
- <attribute name="label" translatable="yes">Arrow</attribute>
- <attribute name="action">win.is_arrow</attribute>
+ <attribute name="label" translatable="yes">Simple dashes</attribute>
+ <attribute name="action">win.dashes-type</attribute>
+ <attribute name="target">regular</attribute>
+ <attribute name="verb-icon">dash-regular-symbolic</attribute>
</item>
<item>
+ <attribute name="label" translatable="yes">Long dashes</attribute>
+ <attribute name="action">win.dashes-type</attribute>
+ <attribute name="target">long</attribute>
+ <attribute name="verb-icon">dash-long-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Short dashes</attribute>
+ <attribute name="action">win.dashes-type</attribute>
+ <attribute name="target">dots</attribute>
+ <attribute name="verb-icon">dash-dots-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Alternated dashes</attribute>
+ <attribute name="action">win.dashes-type</attribute>
+ <attribute name="target">alt</attribute>
+ <attribute name="verb-icon">dash-alt-symbolic</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
<attribute name="label" translatable="yes">Antialiasing</attribute>
<attribute name="action">win.antialias</attribute>
</item>
diff --git a/src/tools/ui/tool-crop.ui b/src/tools/ui/tool-crop.ui
index bd7d1c79..ae9b2a78 100644
--- a/src/tools/ui/tool-crop.ui
+++ b/src/tools/ui/tool-crop.ui
@@ -2,13 +2,31 @@
<interface domain="drawing">
<menu id="options-menu">
<section>
+ <attribute name="label" translatable="yes">Expand with…</attribute>
+ <item>
+ <attribute name="label" translatable="yes">Transparency</attribute>
+ <attribute name="action">win.crop-expand</attribute>
+ <attribute name="target">alpha</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Default color</attribute>
+ <attribute name="action">win.crop-expand</attribute>
+ <attribute name="target">initial</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Secondary color</attribute>
+ <attribute name="action">win.crop-expand</attribute>
+ <attribute name="target">secondary</attribute>
+ </item>
+ </section>
+ <section>
<item>
<attribute name="label" translatable="yes">Cancel</attribute>
<attribute name="action">win.force_selection</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Apply</attribute>
- <attribute name="action">win.apply_canvas_tool</attribute>
+ <attribute name="action">win.apply_transform</attribute>
</item>
</section>
</menu>
diff --git a/src/tools/ui/tool-filters.ui b/src/tools/ui/tool-filters.ui
index dab554a5..cde23338 100644
--- a/src/tools/ui/tool-filters.ui
+++ b/src/tools/ui/tool-filters.ui
@@ -41,7 +41,7 @@
<!-- <attribute name="target">blur_multi</attribute> -->
<!-- </item> -->
<item>
- <attribute name="label" translatable="yes">Pixelisation</attribute>
+ <attribute name="label" translatable="yes">Pixelization</attribute>
<attribute name="action">win.filters_type</attribute>
<attribute name="target">tiles</attribute>
</item>
@@ -77,7 +77,7 @@
</item>
<item>
<attribute name="label" translatable="yes">Apply</attribute>
- <attribute name="action">win.apply_canvas_tool</attribute>
+ <attribute name="action">win.apply_transform</attribute>
</item>
</section>
</menu>
diff --git a/src/tools/ui/tool-highlight.ui b/src/tools/ui/tool-highlight.ui
new file mode 100644
index 00000000..d0426905
--- /dev/null
+++ b/src/tools/ui/tool-highlight.ui
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface domain="drawing">
+ <menu id="options-menu">
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">Add transparency</attribute>
+ <attribute name="action">win.highlight-alpha</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">Dark text on light background</attribute>
+ <attribute name="action">win.highlight-bg</attribute>
+ <attribute name="target">light</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Light text on dark background</attribute>
+ <attribute name="action">win.highlight-bg</attribute>
+ <attribute name="target">dark</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">Antialiasing</attribute>
+ <attribute name="action">win.antialias</attribute>
+ </item>
+ </section>
+ </menu>
+</interface>
+
diff --git a/src/tools/ui/tool-line.ui b/src/tools/ui/tool-line.ui
index f01a3b5e..d9a77231 100644
--- a/src/tools/ui/tool-line.ui
+++ b/src/tools/ui/tool-line.ui
@@ -9,26 +9,63 @@
<attribute name="target">round</attribute>
</item>
<item>
- <attribute name="label" translatable="yes">Thin</attribute>
+ <attribute name="label" translatable="yes">Square</attribute>
<attribute name="action">win.line_shape</attribute>
<attribute name="target">thin</attribute>
</item>
+ </section>
+ <section>
+ <attribute name="display-hint">horizontal-buttons</attribute>
<item>
- <attribute name="label" translatable="yes">Square</attribute>
- <attribute name="action">win.line_shape</attribute>
- <attribute name="target">square</attribute>
+ <attribute name="label" translatable="yes">No dashes</attribute>
+ <attribute name="action">win.dashes-type</attribute>
+ <attribute name="target">none</attribute>
+ <attribute name="verb-icon">dash-none-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Simple dashes</attribute>
+ <attribute name="action">win.dashes-type</attribute>
+ <attribute name="target">regular</attribute>
+ <attribute name="verb-icon">dash-regular-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Long dashes</attribute>
+ <attribute name="action">win.dashes-type</attribute>
+ <attribute name="target">long</attribute>
+ <attribute name="verb-icon">dash-long-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Short dashes</attribute>
+ <attribute name="action">win.dashes-type</attribute>
+ <attribute name="target">dots</attribute>
+ <attribute name="verb-icon">dash-dots-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Alternated dashes</attribute>
+ <attribute name="action">win.dashes-type</attribute>
+ <attribute name="target">alt</attribute>
+ <attribute name="verb-icon">dash-alt-symbolic</attribute>
</item>
</section>
<section>
<item>
- <attribute name="label" translatable="yes">Use dashes</attribute>
- <attribute name="action">win.use_dashes</attribute>
+ <attribute name="label" translatable="yes">No arrow</attribute>
+ <attribute name="action">win.arrow-type</attribute>
+ <attribute name="target">none</attribute>
</item>
<item>
- <attribute name="label" translatable="yes">Arrow</attribute>
- <attribute name="action">win.is_arrow</attribute>
+ <attribute name="label" translatable="yes">Simple arrow</attribute>
+ <attribute name="action">win.arrow-type</attribute>
+ <attribute name="target">simple</attribute>
</item>
<item>
+ <attribute name="label" translatable="yes">Double arrow</attribute>
+ <attribute name="action">win.arrow-type</attribute>
+ <attribute name="target">double</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
<attribute name="label" translatable="yes">Color gradient</attribute>
<attribute name="action">win.use_gradient</attribute>
</item>
diff --git a/src/tools/ui/tool-paint.ui b/src/tools/ui/tool-paint.ui
index ce5697f0..8ac2e3ee 100644
--- a/src/tools/ui/tool-paint.ui
+++ b/src/tools/ui/tool-paint.ui
@@ -2,13 +2,21 @@
<interface domain="drawing">
<menu id="options-menu">
<section>
+ <!-- Context: title for the list of the possible painting algorithms. -->
<attribute name="label" translatable="yes">Behavior</attribute>
<item>
+ <!-- Context: this is one of the possible painting algorithms. It -->
+ <!-- tries to draw a shape around the area to paint, and fill it -->
+ <!-- with the new color. The shape is approximative so it's not the -->
+ <!-- default behavior of the tool. -->
<attribute name="label" translatable="yes">Encircle and fill</attribute>
<attribute name="action">win.paint_algo</attribute>
<attribute name="target">fill</attribute>
</item>
<item>
+ <!-- Context: this is one of the possible painting algorithms. It -->
+ <!-- erases the color the user clicked, and then replace transparent -->
+ <!-- pixels with the new color. -->
<attribute name="label" translatable="yes">Erase and replace</attribute>
<attribute name="action">win.paint_algo</attribute>
<attribute name="target">replace</attribute>
@@ -16,10 +24,25 @@
</section>
<section>
<item>
- <attribute name="label" translatable="yes">Clipping</attribute>
+ <!-- Context: this is one of the possible painting algorithms. It -->
+ <!-- paints over the entire image, instead of following the shapes -->
+ <!-- already drawn. -->
+ <attribute name="label" translatable="yes">Entire image</attribute>
+ <attribute name="action">win.paint_algo</attribute>
+ <attribute name="target">whole</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
+ <!-- Context: this is one of the possible painting algorithms. It -->
+ <!-- doesn't really paint, instead it erases the color the user -->
+ <!-- clicked. For example to cut out an object from its white -->
+ <!-- background. -->
+ <attribute name="label" translatable="yes">Remove color</attribute>
<attribute name="action">win.paint_algo</attribute>
<attribute name="target">clipping</attribute>
</item>
</section>
</menu>
</interface>
+
diff --git a/src/tools/ui/tool-pencil.ui b/src/tools/ui/tool-pencil.ui
index c261212c..ee6b7944 100644
--- a/src/tools/ui/tool-pencil.ui
+++ b/src/tools/ui/tool-pencil.ui
@@ -4,27 +4,53 @@
<section>
<attribute name="label" translatable="yes">Line shape</attribute>
<item>
+ <!-- Context: this is the name of a line shape -->
<attribute name="label" translatable="yes">Round</attribute>
<attribute name="action">win.line_shape</attribute>
<attribute name="target">round</attribute>
</item>
<item>
- <attribute name="label" translatable="yes">Thin</attribute>
- <attribute name="action">win.line_shape</attribute>
- <attribute name="target">thin</attribute>
- </item>
- <item>
+ <!-- Context: this is the name of a line shape -->
<attribute name="label" translatable="yes">Square</attribute>
<attribute name="action">win.line_shape</attribute>
- <attribute name="target">square</attribute>
+ <attribute name="target">thin</attribute>
</item>
</section>
<section>
+ <attribute name="display-hint">horizontal-buttons</attribute>
+ <item>
+ <attribute name="label" translatable="yes">No dashes</attribute>
+ <attribute name="action">win.dashes-type</attribute>
+ <attribute name="target">none</attribute>
+ <attribute name="verb-icon">dash-none-symbolic</attribute>
+ </item>
<item>
- <attribute name="label" translatable="yes">Use dashes</attribute>
- <attribute name="action">win.use_dashes</attribute>
+ <attribute name="label" translatable="yes">Simple dashes</attribute>
+ <attribute name="action">win.dashes-type</attribute>
+ <attribute name="target">regular</attribute>
+ <attribute name="verb-icon">dash-regular-symbolic</attribute>
</item>
<item>
+ <attribute name="label" translatable="yes">Long dashes</attribute>
+ <attribute name="action">win.dashes-type</attribute>
+ <attribute name="target">long</attribute>
+ <attribute name="verb-icon">dash-long-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Short dashes</attribute>
+ <attribute name="action">win.dashes-type</attribute>
+ <attribute name="target">dots</attribute>
+ <attribute name="verb-icon">dash-dots-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Alternated dashes</attribute>
+ <attribute name="action">win.dashes-type</attribute>
+ <attribute name="target">alt</attribute>
+ <attribute name="verb-icon">dash-alt-symbolic</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
<attribute name="label" translatable="yes">Antialiasing</attribute>
<attribute name="action">win.antialias</attribute>
</item>
diff --git a/src/tools/ui/tool-points.ui b/src/tools/ui/tool-points.ui
new file mode 100644
index 00000000..84df1338
--- /dev/null
+++ b/src/tools/ui/tool-points.ui
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface domain="drawing">
+ <menu id="options-menu">
+ <section>
+ <attribute name="label" translatable="yes">Dots type</attribute>
+ <item>
+ <attribute name="label" translatable="yes">Circle</attribute>
+ <attribute name="action">win.points_type</attribute>
+ <attribute name="target">circle</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Cross</attribute>
+ <attribute name="action">win.points_type</attribute>
+ <attribute name="target">cross</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">X-shaped cross</attribute>
+ <attribute name="action">win.points_type</attribute>
+ <attribute name="target">x-cross</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Square</attribute>
+ <attribute name="action">win.points_type</attribute>
+ <attribute name="target">square</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">Include a number</attribute>
+ <attribute name="action">win.points_number</attribute>
+ </item>
+ </section>
+ <section>
+ <attribute name="display-hint">horizontal-buttons</attribute>
+ <attribute name="label" translatable="yes">Next number</attribute>
+ <item>
+ <attribute name="label" translatable="yes">Reset number</attribute>
+ <attribute name="action">win.points_reset_num</attribute>
+ <attribute name="verb-icon">go-bottom-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Decrement number</attribute>
+ <attribute name="action">win.points_dec_num</attribute>
+ <attribute name="verb-icon">go-down-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Increment number</attribute>
+ <attribute name="action">win.points_inc_num</attribute>
+ <attribute name="verb-icon">go-up-symbolic</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">Antialiasing</attribute>
+ <attribute name="action">win.antialias</attribute>
+ </item>
+ </section>
+ </menu>
+</interface>
diff --git a/src/tools/ui/tool-rotate.ui b/src/tools/ui/tool-rotate.ui
index 6c8d2980..b99d2102 100644
--- a/src/tools/ui/tool-rotate.ui
+++ b/src/tools/ui/tool-rotate.ui
@@ -35,7 +35,7 @@
</item>
<item>
<attribute name="label" translatable="yes">Apply</attribute>
- <attribute name="action">win.apply_canvas_tool</attribute>
+ <attribute name="action">win.apply_transform</attribute>
</item>
</section>
</menu>
diff --git a/src/tools/ui/tool-scale.ui b/src/tools/ui/tool-scale.ui
index 4e74082a..d67bc0be 100644
--- a/src/tools/ui/tool-scale.ui
+++ b/src/tools/ui/tool-scale.ui
@@ -42,7 +42,7 @@
</item>
<item>
<attribute name="label" translatable="yes">Apply</attribute>
- <attribute name="action">win.apply_canvas_tool</attribute>
+ <attribute name="action">win.apply_transform</attribute>
</item>
</section>
</menu>
diff --git a/src/tools/ui/tool-shape.ui b/src/tools/ui/tool-shape.ui
index 82f9b629..32d7ea0d 100644
--- a/src/tools/ui/tool-shape.ui
+++ b/src/tools/ui/tool-shape.ui
@@ -2,49 +2,27 @@
<interface domain="drawing">
<menu id="options-menu">
<section>
- <!-- <attribute name="label" translatable="yes">Shape</attribute> -->
- <attribute name="display-hint">horizontal-buttons</attribute>
+ <!-- <attribute name="label" translatable="yes">Outline</attribute> -->
<item>
- <attribute name="label" translatable="yes">Rectangle</attribute>
- <attribute name="action">win.shape_type</attribute>
- <attribute name="target">rectangle</attribute>
- <attribute name="verb-icon">tool-rectangle-symbolic</attribute>
- </item>
- <item>
- <attribute name="label" translatable="yes">Rounded rectangle</attribute>
- <attribute name="action">win.shape_type</attribute>
- <attribute name="target">roundedrect</attribute>
- <attribute name="verb-icon">tool-roundedrect-symbolic</attribute>
+ <attribute name="label" translatable="yes">Solid outline</attribute>
+ <attribute name="action">win.shape_outline</attribute>
+ <attribute name="target">solid</attribute>
</item>
<item>
- <attribute name="label" translatable="yes">Oval</attribute>
- <attribute name="action">win.shape_type</attribute>
- <attribute name="target">oval</attribute>
- <attribute name="verb-icon">tool-oval-symbolic</attribute>
+ <attribute name="label" translatable="yes">Dashed outline</attribute>
+ <attribute name="action">win.shape_outline</attribute>
+ <attribute name="target">dashed</attribute>
</item>
<item>
- <attribute name="label" translatable="yes">Polygon</attribute>
- <attribute name="action">win.shape_type</attribute>
- <attribute name="target">polygon</attribute>
- <attribute name="verb-icon">tool-polygon-symbolic</attribute>
- </item>
- <item>
- <attribute name="label" translatable="yes">Free shape</attribute>
- <attribute name="action">win.shape_type</attribute>
- <attribute name="target">freeshape</attribute>
- <attribute name="verb-icon">tool-freeshape-symbolic</attribute>
- </item>
- <item>
- <attribute name="label" translatable="yes">Circle</attribute>
- <attribute name="action">win.shape_type</attribute>
- <attribute name="target">circle</attribute>
- <attribute name="verb-icon">tool-circle-symbolic</attribute>
+ <attribute name="label" translatable="yes">No outline</attribute>
+ <attribute name="action">win.shape_outline</attribute>
+ <attribute name="target">none</attribute>
</item>
</section>
<section>
- <!-- <attribute name="label" translatable="yes">Filling</attribute> -->
+ <attribute name="label" translatable="yes">Filling</attribute>
<item>
- <attribute name="label" translatable="yes">Empty outline</attribute>
+ <attribute name="label" translatable="yes">Empty shape</attribute>
<attribute name="action">win.shape_filling</attribute>
<attribute name="target">empty</attribute>
</item>
@@ -75,9 +53,42 @@
</item>
</section>
<section>
+ <attribute name="display-hint">horizontal-buttons</attribute>
<item>
- <attribute name="label" translatable="yes">Close shape</attribute>
- <attribute name="action">win.shape_close</attribute>
+ <attribute name="label" translatable="yes">Rectangle</attribute>
+ <attribute name="action">win.shape_type</attribute>
+ <attribute name="target">rectangle</attribute>
+ <attribute name="verb-icon">tool-rectangle-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Rounded rectangle</attribute>
+ <attribute name="action">win.shape_type</attribute>
+ <attribute name="target">roundedrect</attribute>
+ <attribute name="verb-icon">tool-roundedrect-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Oval</attribute>
+ <attribute name="action">win.shape_type</attribute>
+ <attribute name="target">oval</attribute>
+ <attribute name="verb-icon">tool-oval-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Polygon</attribute>
+ <attribute name="action">win.shape_type</attribute>
+ <attribute name="target">polygon</attribute>
+ <attribute name="verb-icon">tool-polygon-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Free shape</attribute>
+ <attribute name="action">win.shape_type</attribute>
+ <attribute name="target">freeshape</attribute>
+ <attribute name="verb-icon">tool-freeshape-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Circle</attribute>
+ <attribute name="action">win.shape_type</attribute>
+ <attribute name="target">circle</attribute>
+ <attribute name="verb-icon">tool-circle-symbolic</attribute>
</item>
</section>
<section>
@@ -85,6 +96,11 @@
<attribute name="label" translatable="yes">Antialiasing</attribute>
<attribute name="action">win.antialias</attribute>
</item>
+ <item>
+ <attribute name="label" translatable="yes">Close shape</attribute>
+ <attribute name="action">win.shape_close</attribute>
+ </item>
</section>
</menu>
</interface>
+
diff --git a/src/tools/ui/tool-skew.ui b/src/tools/ui/tool-skew.ui
index 28104f3e..bfb98be2 100644
--- a/src/tools/ui/tool-skew.ui
+++ b/src/tools/ui/tool-skew.ui
@@ -9,7 +9,7 @@
</item>
<item>
<attribute name="label" translatable="yes">Apply</attribute>
- <attribute name="action">win.apply_canvas_tool</attribute>
+ <attribute name="action">win.apply_transform</attribute>
</item>
</section>
</menu>
diff --git a/src/tools/ui/tool-text.ui b/src/tools/ui/tool-text.ui
index 55b48147..bfd236e5 100644
--- a/src/tools/ui/tool-text.ui
+++ b/src/tools/ui/tool-text.ui
@@ -75,23 +75,10 @@
<section>
<attribute name="label" translatable="yes">Font</attribute>
<item>
- <attribute name="label">Sans</attribute>
- <attribute name="action">win.text-font</attribute>
- <attribute name="target">Sans</attribute>
+ <attribute name="label" translatable="yes">Select a font…</attribute>
+ <attribute name="action">win.text-set-font</attribute>
</item>
<item>
- <attribute name="label">Serif</attribute>
- <attribute name="action">win.text-font</attribute>
- <attribute name="target">Serif</attribute>
- </item>
- <item>
- <attribute name="label">Mono</attribute>
- <attribute name="action">win.text-font</attribute>
- <attribute name="target">Mono</attribute>
- </item>
- </section>
- <section>
- <item>
<attribute name="label" translatable="yes">Italic</attribute>
<attribute name="action">win.text-italic</attribute>
</item>
@@ -101,31 +88,34 @@
</item>
</section>
<section>
- <submenu>
- <attribute name="label" translatable="yes">Background</attribute>
- <section>
- <item>
- <attribute name="label" translatable="yes">No background</attribute>
- <attribute name="action">win.text-background</attribute>
- <attribute name="target">none</attribute>
- </item>
- <item>
- <attribute name="label" translatable="yes">Shadow</attribute>
- <attribute name="action">win.text-background</attribute>
- <attribute name="target">shadow</attribute>
- </item>
- <item>
- <attribute name="label" translatable="yes">Outline</attribute>
- <attribute name="action">win.text-background</attribute>
- <attribute name="target">outline</attribute>
- </item>
- <item>
- <attribute name="label" translatable="yes">Rectangle background</attribute>
- <attribute name="action">win.text-background</attribute>
- <attribute name="target">rectangle</attribute>
- </item>
- </section>
- </submenu>
+ <!-- Context: the types of background behind the inserted text -->
+ <attribute name="label" translatable="yes">Background</attribute>
+ <section>
+ <item>
+ <!-- Context: a type of background behind the inserted text -->
+ <attribute name="label" translatable="yes">No background</attribute>
+ <attribute name="action">win.text-background</attribute>
+ <attribute name="target">none</attribute>
+ </item>
+ <item>
+ <!-- Context: a type of background behind the inserted text -->
+ <attribute name="label" translatable="yes">Shadow</attribute>
+ <attribute name="action">win.text-background</attribute>
+ <attribute name="target">shadow</attribute>
+ </item>
+ <item>
+ <!-- Context: a type of background behind the inserted text -->
+ <attribute name="label" translatable="yes">Outline</attribute>
+ <attribute name="action">win.text-background</attribute>
+ <attribute name="target">outline</attribute>
+ </item>
+ <item>
+ <!-- Context: a type of background behind the inserted text -->
+ <attribute name="label" translatable="yes">Rectangle background</attribute>
+ <attribute name="action">win.text-background</attribute>
+ <attribute name="target">rectangle</attribute>
+ </item>
+ </section>
</section>
<!-- <section> -->
<!-- <item> -->
diff --git a/src/tools/utilities_blur.py b/src/tools/utilities_blur.py
index 4a895395..e4716dc3 100644
--- a/src/tools/utilities_blur.py
+++ b/src/tools/utilities_blur.py
@@ -16,7 +16,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import cairo, threading
-from datetime import datetime # Not actually needed, just to measure perfs XXX
+# from datetime import datetime # Not actually needed, just to measure perfs
class BlurType(int):
INVALID = -1
@@ -41,8 +41,8 @@ def utilities_blur_surface(surface, radius, blur_type, blur_direction):
if radius < 1:
return surface
blurred_surface = None
- time0 = datetime.now()
- print('blurring begins, using algo ', blur_type, '-', blur_direction)
+ # time0 = datetime.now()
+ # print('blurring begins, using algo ', blur_type, '-', blur_direction)
if blur_type == BlurType.INVALID:
return surface
@@ -59,8 +59,8 @@ def utilities_blur_surface(surface, radius, blur_type, blur_direction):
elif blur_type == BlurType.TILES:
blurred_surface = _generic_tiled_blur(surface, radius, blur_direction)
- time1 = datetime.now()
- print('blurring ended, total time:', time1 - time0)
+ # time1 = datetime.now()
+ # print('blurring ended, total time:', time1 - time0)
return blurred_surface
################################################################################
@@ -81,7 +81,7 @@ def _generic_px_box_blur(surface, radius, blur_direction):
cairo_context = cairo.Context(original)
# cairo_context.set_operator(cairo.Operator.SOURCE)
cairo_context.set_source_surface(surface, 0, 0)
- cairo_context.paint() # XXX cette copie est-elle utile ?
+ cairo_context.paint() # XXX is this copy useful?
original.flush()
pixels = original.get_data()
@@ -282,8 +282,8 @@ def _generic_cairo_blur(surface, radius, blur_direction):
elif blur_direction == BlurDirection.VERTICAL:
surface = _cairo_directional_blur(surface, radius, True)
else:
- # XXX avec des grands radius ça se voit que c'est juste une séquence de
- # de 2 blurs directionnels au lieu d'être un vrai algo
+ # XXX with some big radius, it's visible that it's just a sequence of
+ # 2 directional blurs instead of an actual algorithm
surface = _cairo_directional_blur(surface, radius, True)
surface = _cairo_directional_blur(surface, radius, False)
return surface
@@ -301,7 +301,7 @@ def _cairo_directional_blur(surface, radius, is_vertical):
step = 1
alpha = min(0.9, (0.5 + step) / radius)
else:
- step = int(radius / 6) # pourquoi 6 ? mystère
+ step = int(radius / 6) # why 6? mystery
# cette optimisation donne de légers glitchs aux grands radius, qui ne
# sont de toutes manières pas beaux car on voit en partie à travers
alpha = min(0.9, (1 + step) / radius)
@@ -334,26 +334,32 @@ def _get_tiled_surface(surface, tile_width, tile_height):
h = surface.get_height()
channels = 4 # ARGB
pixels = surface.get_data()
- px_max = w * h * channels
+ pixel_max = w * h * channels
for x in range(0, w, tile_width):
for y in range(0, h, tile_height):
- current_px = (x + (w * y)) * channels
- if current_px >= px_max:
+ current_pixel = (x + (w * y)) * channels
+ if current_pixel >= pixel_max:
continue
- tile_b = pixels[current_px + 0]
- tile_g = pixels[current_px + 1]
- tile_r = pixels[current_px + 2]
- tile_a = pixels[current_px + 3]
+ tile_b = pixels[current_pixel + 0]
+ tile_g = pixels[current_pixel + 1]
+ tile_r = pixels[current_pixel + 2]
+ tile_a = pixels[current_pixel + 3]
for tx in range(0, tile_width):
for ty in range(0, tile_height):
- current_px = ((x + tx) + (w * (y + ty))) * channels
- if current_px >= px_max:
+ current_pixel = ((x + tx) + (w * (y + ty))) * channels
+ if current_pixel >= pixel_max:
continue
- pixels[current_px + 0] = tile_b
- pixels[current_px + 1] = tile_g
- pixels[current_px + 2] = tile_r
- pixels[current_px + 3] = tile_a
+ if current_pixel >= (w * (y + ty + 1)) * channels:
+ # the current tile is out of the surface, this guard
+ # clause avoids corrupting the next tile
+ continue
+ pixels[current_pixel + 0] = tile_b
+ pixels[current_pixel + 1] = tile_g
+ pixels[current_pixel + 2] = tile_r
+ pixels[current_pixel + 3] = tile_a
+ # end of one tile
+ # end of the "for each tile"
return surface
################################################################################
diff --git a/src/tools/utilities_overlay.py b/src/tools/utilities_overlay.py
index c55e4677..1f26eb88 100644
--- a/src/tools/utilities_overlay.py
+++ b/src/tools/utilities_overlay.py
@@ -17,6 +17,7 @@
import cairo, math
from gi.repository import Gdk, GdkPixbuf
+from .selection_manager import NoSelectionPathException
################################################################################
# Selection overlay ############################################################
@@ -25,7 +26,7 @@ def utilities_show_overlay_on_context(cairo_context, cairo_path, has_dashes):
"""Draw a blueish area on `cairo_context`, with or without dashes. This is
mainly used for the selection."""
if cairo_path is None:
- return # TODO throw an exception
+ raise NoSelectionPathException()
cairo_context.new_path()
cairo_context.set_line_width(1)
if has_dashes:
diff --git a/src/tools/utilities_paths.py b/src/tools/utilities_paths.py
index 1e453e0d..28d8352c 100644
--- a/src/tools/utilities_paths.py
+++ b/src/tools/utilities_paths.py
@@ -84,7 +84,7 @@ def utilities_get_magic_path(surface, x, y, window, coef):
if (new_x != -10):
cairo_context.line_to(x, y)
# else:
- # print('TENTATIVE ABUSIVE D\'AJOUT')
+ # print("TENTATIVE ABUSIVE D'AJOUT")
# should_stop = True
if (i > 10) and (first_x-5 < x < first_x+5) and (first_y-5 < y < first_y+5):
@@ -115,43 +115,64 @@ def launch_infinite_loop_dialog(window):
################################################################################
+# The coordinates of the corners of the triangle. These points are defined as if
+# the end of the arrow line is at "0, 0" and rotated by 0 degrees.
+ARROW_TRIANGLE = [
+ (0.0, 0.0),
+ (-2.747, 1.0),
+ (-2.747, -1.0),
+]
+
+MIN_ARROW_SCALE = 3
+
def utilities_add_arrow_triangle(cairo_context, x2, y2, x1, y1, line_width):
- cairo_context.new_path()
- cairo_context.set_line_width(line_width)
- cairo_context.set_dash([1, 0])
- cairo_context.move_to(x2, y2)
- x_length = max(x1, x2) - min(x1, x2)
- y_length = max(y1, y2) - min(y1, y2)
- line_length = math.sqrt( (x_length)**2 + (y_length)**2 )
- if line_length == 0:
- return
- arrow_width = math.log(line_length)
- if (x1 - x2) != 0:
- delta = (y1 - y2) / (x1 - x2)
+ """Adds a triangular head to the current path."""
+ if x1 == x2 and y1 == y2:
+ line_angle = 0
else:
- delta = 1.0
+ line_angle = math.atan2(y2 - y1, x2 - x1)
+ sin, cos = math.sin(line_angle), math.cos(line_angle)
+
+ # FIXME cases with very short last segment
+ # if scale == line_width, dashed arrow will look like shit
+ scale = max(line_width * 1.1, MIN_ARROW_SCALE)
+
+ # when the last segment of the line is very short, the head is scaled down
+ # last_segment_length = math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
+ # scale = min(scale, last_segment_length/line_width)
+ # ^XXX broken with dashes
+ # TODO ça peut ne plus être nécessaire si je décale la tête
+
+ head = []
+ # scale, rotate and translate the arrow triangle
+ for x, y in ARROW_TRIANGLE:
+ p = (x * scale, y * scale)
+ p = (p[0] * cos - p[1] * sin, p[0] * sin + p[1] * cos)
+ p = (p[0] + x2, p[1] + y2)
+ head.append(p)
+
+ # draw the arrow triangle
+ _draw_head(cairo_context, head, True)
+
+ # shameful hack to get a full head in cases where the line is dashed
+ if cairo_context.get_dash_count() > 0:
+ _draw_head(cairo_context, head, False)
+ _draw_head(cairo_context, head, False)
+ _draw_head(cairo_context, head, False)
+ _draw_head(cairo_context, head, False)
+
+ # XXX the path isn't filled because the path is opened by the first point of
+ # the line/curve and it can't be closed so easily
+ cairo_context.close_path()
+ # The stroke must be done afterwards, by the calling method
- x_backpoint = (x1 + x2)/2
- y_backpoint = (y1 + y2)/2
- i = 0
- while i < arrow_width:
- i = i + 2
- x_backpoint = (x_backpoint + x2)/2
- y_backpoint = (y_backpoint + y2)/2
-
- if delta < -1.5 or delta > 1.0:
- cairo_context.line_to(x_backpoint-arrow_width, y_backpoint)
- cairo_context.line_to(x_backpoint+arrow_width, y_backpoint)
- elif delta > -0.5 and delta <= 1.0:
- cairo_context.line_to(x_backpoint, y_backpoint-arrow_width)
- cairo_context.line_to(x_backpoint, y_backpoint+arrow_width)
+def _draw_head(cairo_context, head, first_try):
+ if first_try:
+ cairo_context.move_to(*head[0])
else:
- cairo_context.line_to(x_backpoint-arrow_width, y_backpoint-arrow_width)
- cairo_context.line_to(x_backpoint+arrow_width, y_backpoint+arrow_width)
-
- cairo_context.close_path()
- cairo_context.fill_preserve()
- cairo_context.stroke()
+ cairo_context.line_to(*head[0])
+ cairo_context.line_to(*head[1])
+ cairo_context.line_to(*head[2])
################################################################################
# Path smoothing ###############################################################
@@ -165,7 +186,7 @@ def utilities_smooth_path(cairo_context, cairo_path):
x3 = y3 = None
x4 = y4 = None
for pts in cairo_path:
- if pts[1] is ():
+ if pts[1] == ():
continue
x1, y1, x2, y2, x3, y3, x4, y4 = _next_arc(cairo_context, \
x2, y2, x3, y3, x4, y4, pts[1][0], pts[1][1])
diff --git a/src/ui/app-menus.ui b/src/ui/app-menus.ui
index 1b1e5dad..a265df8e 100644
--- a/src/ui/app-menus.ui
+++ b/src/ui/app-menus.ui
@@ -104,6 +104,11 @@
<attribute name="verb-icon">document-save-symbolic</attribute>
</item>
<item>
+ <attribute name="action">win.save_alphaless</attribute>
+ <attribute name="label" translatable="yes">Save without transparency</attribute>
+ <attribute name="hidden-when">action-missing</attribute>
+ </item>
+ <item>
<attribute name="label" translatable="yes">Save as…</attribute>
<attribute name="action">win.save_as</attribute>
<attribute name="verb-icon">document-save-as-symbolic</attribute>
@@ -114,7 +119,11 @@
<attribute name="verb-icon">document-save-as-symbolic</attribute>
</item>
</section>
- <section>
+ <section id="share-section">
+ <item>
+ <attribute name="action">win.to_clipboard</attribute>
+ <attribute name="label" translatable="yes">Copy to clipboard</attribute>
+ </item>
<item>
<attribute name="label" translatable="yes">Print</attribute>
<attribute name="action">win.print</attribute>
@@ -245,23 +254,29 @@
</section>
</submenu>
<submenu>
+ <!-- Context: this submenu is about moving the view to the -->
+ <!-- left/right/top/bottom -->
<attribute name="label" translatable="yes">Position</attribute>
<section>
<item>
<attribute name="label" translatable="yes">Go Left</attribute>
<attribute name="action">win.go_left</attribute>
+ <attribute name="verb-icon">pan-start-symbolic</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Go Up</attribute>
<attribute name="action">win.go_up</attribute>
+ <attribute name="verb-icon">pan-up-symbolic</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Go Down</attribute>
<attribute name="action">win.go_down</attribute>
+ <attribute name="verb-icon">pan-down-symbolic</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Go Right</attribute>
<attribute name="action">win.go_right</attribute>
+ <attribute name="verb-icon">pan-end-symbolic</attribute>
</item>
</section>
</submenu>
@@ -289,18 +304,14 @@
</section>
<section>
<item>
- <attribute name="label" translatable="yes">Show tools names</attribute>
- <attribute name="action">win.show_labels</attribute>
- </item>
- </section>
- <section>
- <item>
<attribute name="label" translatable="yes">Fullscreen</attribute>
<attribute name="action">win.fullscreen</attribute>
+ <attribute name="verb-icon">view-fullscreen-symbolic</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Exit fullscreen</attribute>
<attribute name="action">win.unfullscreen</attribute>
+ <attribute name="verb-icon">view-restore-symbolic</attribute>
</item>
</section>
</submenu>
@@ -367,7 +378,7 @@
<!-- </item> -->
</submenu>
<submenu>
- <attribute name="label" translatable="yes">Photo manipulation</attribute>
+ <attribute name="label" translatable="yes">Photo-oriented modes</attribute>
<item>
<attribute name="label" translatable="yes">Hue only</attribute>
<attribute name="action">win.cairo_operator</attribute>
@@ -408,18 +419,40 @@
<submenu id="tools-menu">
<attribute name="label" translatable="yes">_Tools</attribute>
<section>
- <!-- selection -->
+ <item>
+ <attribute name="label" translatable="yes">Previous tool</attribute>
+ <attribute name="action">win.back_to_previous</attribute>
+ <attribute name="verb-icon">go-previous-symbolic</attribute>
+ </item>
</section>
<section>
- <!-- classic -->
+ <submenu>
+ <attribute name="label" translatable="yes">Active tool</attribute>
+ <section>
+ <!-- selection -->
+ </section>
+ <section>
+ <!-- classic -->
+ </section>
+ <section>
+ <!-- transform -->
+ </section>
+ </submenu>
</section>
<section>
- <!-- canvas -->
+ <item>
+ <attribute name="label" translatable="yes">Show tools names</attribute>
+ <attribute name="action">win.show_labels</attribute>
+ </item>
</section>
<section>
<item>
- <attribute name="label" translatable="yes">Previous tool</attribute>
- <attribute name="action">win.back_to_previous</attribute>
+ <attribute name="label" translatable="yes">Bigger width</attribute>
+ <attribute name="action">win.size_more</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Smaller width</attribute>
+ <attribute name="action">win.size_less</attribute>
</item>
</section>
</submenu>
@@ -442,30 +475,38 @@
<attribute name="label" translatable="yes">Report a bug</attribute>
<attribute name="action">app.report_bug</attribute>
<attribute name="hidden-when">action-missing</attribute>
+ <attribute name="verb-icon">dialog-error-symbolic</attribute>
</item>
</section>
<section>
+ <!-- TODO change all these labels -->
<item>
+ <!-- Context: open the index of all help pages -->
<attribute name="label" translatable="yes">Index</attribute>
<attribute name="action">app.help</attribute>
<attribute name="verb-icon">help-faq-symbolic</attribute>
</item>
<item>
+ <!-- Context: open the help page about general use of the app -->
<attribute name="label" translatable="yes">Basic help</attribute>
<attribute name="action">app.help_main</attribute>
<attribute name="verb-icon">help-faq-symbolic</attribute>
</item>
<item>
+ <!-- Context: open the help page about classic tools -->
<attribute name="label" translatable="yes">Help about tools</attribute>
<attribute name="action">app.help_tools</attribute>
<attribute name="verb-icon">help-faq-symbolic</attribute>
</item>
<item>
+ <!-- Context: open the help page about transformation tools (crop, -->
+ <!-- scale, rotate, filters, ... -->
<attribute name="label" translatable="yes">Canvas and selection</attribute>
- <attribute name="action">app.help_canvas</attribute>
+ <attribute name="action">app.help_transform</attribute>
<attribute name="verb-icon">help-faq-symbolic</attribute>
</item>
<item>
+ <!-- Context: open the help page about the selection -->
<attribute name="label" translatable="yes">Help about selection</attribute>
<attribute name="action">app.help_selection</attribute>
<attribute name="verb-icon">help-faq-symbolic</attribute>
diff --git a/src/ui/headerbar-eos.ui b/src/ui/headerbar-eos.ui
index c49d284b..d29915fc 100644
--- a/src/ui/headerbar-eos.ui
+++ b/src/ui/headerbar-eos.ui
@@ -10,10 +10,9 @@
<property name="relief">none</property>
<property name="valign">center</property>
<property name="tooltip-text" translatable="yes">New Image</property>
- <!-- <child> -->
- <!-- <object class="GtkBox"> -->
- <!-- <property name="visible">True</property> -->
- <!-- <property name="spacing">6</property> -->
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
<child>
<object class="GtkImage">
<property name="icon-name">document-new</property>
@@ -21,14 +20,14 @@
<property name="visible">True</property>
</object>
</child>
- <!-- <child> -->
- <!-- <object class="GtkImage"> -->
- <!-- <property name="icon-name">pan-down</property> -->
- <!-- <property name="visible">True</property> -->
- <!-- </object> -->
- <!-- </child> -->
- <!-- </object> -->
- <!-- </child> -->
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">pan-down</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
</object>
</child>
@@ -87,23 +86,6 @@
</child>
<child>
- <object class="GtkButton" id="hidable1">
- <property name="visible">False</property>
- <property name="action-name">win.properties</property>
- <property name="relief">none</property>
- <property name="valign">center</property>
- <property name="tooltip-text" translatable="yes">Image properties</property>
- <child>
- <object class="GtkImage">
- <property name="icon-name">document-properties</property>
- <property name="pixel-size">24</property>
- <property name="visible">True</property>
- </object>
- </child>
- </object>
- </child>
-
- <child>
<object class="GtkMenuButton" id="main_menu_btn">
<property name="visible">True</property>
<property name="valign">center</property>
@@ -122,54 +104,49 @@
</child>
<child>
- <object class="GtkBox" id="save_long">
- <property name="visible">False</property>
-
+ <object class="GtkMenuButton" id="hidable1">
+ <property name="visible">True</property>
+ <property name="relief">none</property>
+ <property name="valign">center</property>
+ <property name="tooltip-text" translatable="yes">Save as…</property>
<child>
- <object class="GtkButton">
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="valign">center</property>
- <property name="relief">none</property>
- <property name="action-name">win.save</property>
- <property name="tooltip-text" translatable="yes">Save</property>
<child>
<object class="GtkImage">
- <property name="icon-name">document-save</property>
+ <property name="icon-name">document-save-as</property>
<property name="pixel-size">24</property>
<property name="visible">True</property>
</object>
</child>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">pan-down</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
</object>
</child>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="save_long">
+ <property name="visible">False</property>
+ <property name="valign">center</property>
+ <property name="relief">none</property>
+ <property name="action-name">win.save</property>
+ <property name="tooltip-text" translatable="yes">Save</property>
<child>
- <object class="GtkMenuButton" id="save_as_menubtn">
+ <object class="GtkImage">
+ <property name="icon-name">document-save</property>
+ <property name="pixel-size">24</property>
<property name="visible">True</property>
- <property name="relief">none</property>
- <property name="valign">center</property>
- <property name="tooltip-text" translatable="yes">Save as…</property>
- <!-- <child> -->
- <!-- <object class="GtkBox"> -->
- <!-- <property name="visible">True</property> -->
- <!-- <property name="spacing">6</property> -->
- <child>
- <object class="GtkImage">
- <property name="icon-name">document-save-as</property>
- <property name="pixel-size">24</property>
- <property name="visible">True</property>
- </object>
- </child>
- <!-- <child> -->
- <!-- <object class="GtkImage"> -->
- <!-- <property name="icon-name">pan-down</property> -->
- <!-- <property name="visible">True</property> -->
- <!-- </object> -->
- <!-- </child> -->
- <!-- </object> -->
- <!-- </child> -->
</object>
</child>
-
</object>
<packing>
<property name="pack-type">end</property>
@@ -177,6 +154,7 @@
</child>
<child>
+ <!-- identical to save_long in this implementation of the headerbar -->
<object class="GtkButton" id="save_short">
<property name="visible">True</property>
<property name="valign">center</property>
@@ -197,17 +175,27 @@
</child>
<child>
- <object class="GtkButton" id="hidable2">
- <property name="visible">False</property>
- <property name="action-name">win.fullscreen</property>
+ <object class="GtkMenuButton" id="hidable2">
+ <property name="visible">True</property>
<property name="relief">none</property>
<property name="valign">center</property>
- <property name="tooltip-text" translatable="yes">Fullscreen</property>
+ <property name="tooltip-text" translatable="yes">Share the image</property>
<child>
- <object class="GtkImage">
- <property name="icon-name">view-fullscreen</property>
- <property name="pixel-size">24</property>
+ <object class="GtkBox">
<property name="visible">True</property>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">send-to</property>
+ <property name="pixel-size">24</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">pan-down</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
</object>
</child>
</object>
diff --git a/src/ui/image.ui b/src/ui/image.ui
index 71c19028..bbefa6be 100644
--- a/src/ui/image.ui
+++ b/src/ui/image.ui
@@ -8,21 +8,21 @@
<property name="visible">True</property>
<property name="expand">True</property>
<child>
- <object class="GtkLayout" id="drawing_area">
+ <object class="GtkLayout" id="_drawing_area">
<property name="expand">True</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
- <object class="GtkHScrollbar" id="h_scrollbar">
+ <object class="GtkHScrollbar" id="_h_scrollbar">
<!-- <property name="visible">True</property> -->
</object>
</child>
</object>
</child>
<child>
- <object class="GtkVScrollbar" id="v_scrollbar">
+ <object class="GtkVScrollbar" id="_v_scrollbar">
<!-- <property name="visible">True</property> -->
</object>
</child>
diff --git a/src/ui/minimap.ui b/src/ui/minimap.ui
index efc1d29c..95765ca4 100644
--- a/src/ui/minimap.ui
+++ b/src/ui/minimap.ui
@@ -18,7 +18,7 @@
<object class="GtkFrame">
<property name="visible">True</property>
<child>
- <object class="GtkLayout" id="minimap_area">
+ <object class="GtkLayout" id="_minimap_area">
<property name="visible">True</property>
<property name="can_focus">True</property>
</object>
@@ -96,7 +96,7 @@
</object>
</child>
<child>
- <object class="GtkScale" id="zoom_scale">
+ <object class="GtkScale" id="_zoom_scale">
<property name="visible">True</property>
<property name="digits">0</property>
<property name="adjustment">zoom_adj</property>
diff --git a/src/ui/new-image-dialog.ui b/src/ui/new-image-dialog.ui
index 55821985..b5055283 100644
--- a/src/ui/new-image-dialog.ui
+++ b/src/ui/new-image-dialog.ui
@@ -63,7 +63,7 @@
<object class="GtkLabel">
<property name="visible">True</property>
<property name="halign">end</property>
- <property name="label" translatable="yes">Background color</property>
+ <property name="label" translatable="yes">Color</property>
</object>
<packing>
<property name="left-attach">0</property>
diff --git a/src/ui/selection-manager.ui b/src/ui/selection-manager.ui
index 20123f05..28cc7515 100644
--- a/src/ui/selection-manager.ui
+++ b/src/ui/selection-manager.ui
@@ -72,12 +72,12 @@
<attribute name="target">rotate</attribute>
<attribute name="verb-icon">tool-rotate-symbolic</attribute>
</item>
- <item>
- <attribute name="label" translatable="yes">Skew</attribute>
- <attribute name="action">win.active_tool</attribute>
- <attribute name="target">skew</attribute>
- <attribute name="verb-icon">tool-skew-symbolic</attribute>
- </item>
+ <!-- <item> -->
+ <!-- <attribute name="label" translatable="yes">Skew</attribute> -->
+ <!-- <attribute name="action">win.active_tool</attribute> -->
+ <!-- <attribute name="target">skew</attribute> -->
+ <!-- <attribute name="verb-icon">tool-skew-symbolic</attribute> -->
+ <!-- </item> -->
<item>
<attribute name="label" translatable="yes">Filters</attribute>
<attribute name="action">win.active_tool</attribute>
diff --git a/src/ui/shortcuts.ui b/src/ui/shortcuts.ui
index 2bff89df..9defbc0f 100644
--- a/src/ui/shortcuts.ui
+++ b/src/ui/shortcuts.ui
@@ -1,12 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface domain="drawing">
- <object class="GtkShortcutsWindow" id="shortcuts">
+ <object class="GtkShortcutsWindow" id="shortcuts-window">
<child>
<object class="GtkShortcutsSection">
<property name="visible">True</property>
<property name="section-name">shortcuts</property>
- <property name="title" translatable="yes">Keyboard</property>
+ <property name="title" translatable="yes">Keyboard Shortcuts</property>
<property name="max-height">9</property>
+ <!-- 9 is actually the minimum possible -->
<child>
<object class="GtkShortcutsGroup">
<property name="visible">True</property>
@@ -51,26 +52,6 @@
<child>
<object class="GtkShortcutsGroup">
<property name="visible">True</property>
- <property name="title" translatable="yes">Editing</property>
- <child>
- <object class="GtkShortcutsShortcut">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Undo</property>
- <property name="accelerator">&lt;Primary&gt;z</property>
- </object>
- </child>
- <child>
- <object class="GtkShortcutsShortcut">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Redo</property>
- <property name="accelerator">&lt;Primary&gt;&lt;Shift&gt;z</property>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkShortcutsGroup">
- <property name="visible">True</property>
<property name="title" translatable="yes">Image</property>
<child>
<object class="GtkShortcutsShortcut">
@@ -89,7 +70,7 @@
<child>
<object class="GtkShortcutsShortcut">
<property name="visible">True</property>
- <property name="title" translatable="yes">Open a file</property>
+ <property name="title" translatable="yes">Open a picture</property>
<property name="accelerator">&lt;Primary&gt;o</property>
</object>
</child>
@@ -97,7 +78,7 @@
<object class="GtkShortcutsShortcut">
<property name="visible">True</property>
<property name="title" translatable="yes">Reload image from disk</property>
- <property name="accelerator">F5</property>
+ <property name="accelerator">&lt;Primary&gt;r</property>
</object>
</child>
<child>
@@ -110,19 +91,27 @@
<child>
<object class="GtkShortcutsShortcut">
<property name="visible">True</property>
- <property name="title" translatable="yes">Save as</property>
+ <property name="title" translatable="yes">Save picture as…</property>
<property name="accelerator">&lt;Primary&gt;&lt;Shift&gt;s</property>
</object>
</child>
<child>
<object class="GtkShortcutsShortcut">
<property name="visible">True</property>
+ <property name="title" translatable="yes">Copy to clipboard</property>
+ <property name="accelerator">&lt;Primary&gt;&lt;Shift&gt;c</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
<property name="title" translatable="yes">Close the active image</property>
<property name="accelerator">&lt;Primary&gt;w</property>
</object>
</child>
</object>
</child>
+
<child>
<object class="GtkShortcutsGroup">
<property name="visible">True</property>
@@ -137,7 +126,7 @@
<child>
<object class="GtkShortcutsShortcut">
<property name="visible">True</property>
- <property name="title" translatable="yes">Options menu</property>
+ <property name="title" translatable="yes">Open the tool options menu</property>
<property name="accelerator">&lt;Primary&gt;F10</property>
</object>
</child>
@@ -148,37 +137,87 @@
<property name="accelerator">&lt;Primary&gt;b</property>
</object>
</child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Bigger width</property>
+ <property name="accelerator">&lt;Primary&gt;&lt;Shift&gt;Up</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Smaller width</property>
+ <property name="accelerator">&lt;Primary&gt;&lt;Shift&gt;Down</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Apply a transformation</property>
+ <property name="accelerator">&lt;Primary&gt;Return</property>
+ </object>
+ </child>
+ <!-- The "cancel transformation" button is linked to a -->
+ <!-- "force_selection" action so it wouldn't be pertinent to add -->
+ <!-- a shortcut for it in my opinion -->
</object>
</child>
<child>
<object class="GtkShortcutsGroup">
<property name="visible">True</property>
- <property name="title" translatable="yes">Colors</property>
+ <property name="title" translatable="yes">History</property>
<child>
<object class="GtkShortcutsShortcut">
<property name="visible">True</property>
- <!-- Label displayed in the keyboard shortcuts dialog -->
- <property name="title" translatable="yes">Edit the main color (left click)</property>
- <property name="accelerator">&lt;Primary&gt;l</property>
+ <property name="title" translatable="yes">Undo</property>
+ <property name="accelerator">&lt;Primary&gt;z</property>
</object>
</child>
<child>
<object class="GtkShortcutsShortcut">
<property name="visible">True</property>
- <!-- Label displayed in the keyboard shortcuts dialog -->
- <property name="title" translatable="yes">Edit the secondary color (right click)</property>
- <property name="accelerator">&lt;Primary&gt;r</property>
+ <property name="title" translatable="yes">Redo</property>
+ <property name="accelerator">&lt;Primary&gt;&lt;Shift&gt;z</property>
</object>
</child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsGroup">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Zoom</property>
<child>
<object class="GtkShortcutsShortcut">
<property name="visible">True</property>
- <property name="title" translatable="yes">Exchange colors</property>
- <property name="accelerator">&lt;Primary&gt;e</property>
+ <property name="title" translatable="yes">Optimal Zoom</property>
+ <property name="accelerator">&lt;Primary&gt;0</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Zoom Out</property>
+ <property name="accelerator">&lt;Primary&gt;minus</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Original Zoom</property>
+ <property name="accelerator">&lt;Primary&gt;1</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Zoom In</property>
+ <property name="accelerator">&lt;Primary&gt;plus</property>
</object>
</child>
</object>
</child>
+
<child>
<object class="GtkShortcutsGroup">
<property name="visible">True</property>
@@ -246,33 +285,28 @@
<child>
<object class="GtkShortcutsGroup">
<property name="visible">True</property>
- <property name="title" translatable="yes">Zoom</property>
- <child>
- <object class="GtkShortcutsShortcut">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Optimal Zoom</property>
- <property name="accelerator">&lt;Primary&gt;0</property>
- </object>
- </child>
+ <property name="title" translatable="yes">Colors</property>
<child>
<object class="GtkShortcutsShortcut">
<property name="visible">True</property>
- <property name="title" translatable="yes">Zoom Out</property>
- <property name="accelerator">&lt;Primary&gt;minus</property>
+ <!-- Label displayed in the keyboard shortcuts dialog -->
+ <property name="title" translatable="yes">Edit the main color (left click)</property>
+ <property name="accelerator">&lt;Primary&gt;&lt;Shift&gt;l</property>
</object>
</child>
<child>
<object class="GtkShortcutsShortcut">
<property name="visible">True</property>
- <property name="title" translatable="yes">Original Zoom</property>
- <property name="accelerator">&lt;Primary&gt;1</property>
+ <!-- Label displayed in the keyboard shortcuts dialog -->
+ <property name="title" translatable="yes">Edit the secondary color (right click)</property>
+ <property name="accelerator">&lt;Primary&gt;&lt;Shift&gt;r</property>
</object>
</child>
<child>
<object class="GtkShortcutsShortcut">
<property name="visible">True</property>
- <property name="title" translatable="yes">Zoom In</property>
- <property name="accelerator">&lt;Primary&gt;plus</property>
+ <property name="title" translatable="yes">Exchange colors</property>
+ <property name="accelerator">&lt;Primary&gt;e</property>
</object>
</child>
</object>
@@ -297,29 +331,12 @@
</child>
</object>
</child>
+
<child>
<object class="GtkShortcutsGroup">
<property name="visible">True</property>
- <property name="title" translatable="yes">Fullscreen</property>
- <child>
- <object class="GtkShortcutsShortcut">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Enter fullscreen mode</property>
- <property name="accelerator">F11</property>
- </object>
- </child>
- <child>
- <object class="GtkShortcutsShortcut">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Exit fullscreen mode</property>
- <property name="accelerator">Escape</property>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkShortcutsGroup">
- <property name="visible">True</property>
+ <!-- Context: this section of the shortcuts window is about moving -->
+ <!-- the view to the left/right/top/bottom -->
<property name="title" translatable="yes">Navigation</property>
<child>
<object class="GtkShortcutsShortcut">
@@ -358,48 +375,103 @@
</child>
</object>
</child>
+ <child>
+ <object class="GtkShortcutsGroup">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Fullscreen</property>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Enter fullscreen mode</property>
+ <property name="accelerator">F11</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Exit fullscreen mode</property>
+ <property name="accelerator">Escape</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <!-- ******************************************************************* -->
+
+ <child>
+ <object class="GtkShortcutsSection">
+ <property name="visible">True</property>
+ <property name="section-name">gestures</property>
+ <property name="title" translatable="yes">Touch gestures</property>
+ <property name="max-height">5</property>
+
+ <child>
+ <object class="GtkShortcutsGroup">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Zoom</property>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="shortcut-type">gesture-pinch</property>
+ <property name="title" translatable="yes">Zoom Out</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkShortcutsShortcut">
+ <property name="visible">True</property>
+ <property name="shortcut-type">gesture-stretch</property>
+ <property name="title" translatable="yes">Zoom In</property>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <!-- <child> -->
+ <!-- <object class="GtkShortcutsGroup"> -->
+ <!-- <property name="visible">True</property> -->
+ <!-- <property name="title" translatable="yes">Tabs</property> -->
+ <!-- <child> -->
+ <!-- <object class="GtkShortcutsShortcut"> -->
+ <!-- <property name="visible">True</property> -->
+ <!-- <property name="title" translatable="yes">Tab at the left</property> -->
+ <!-- <property name="shortcut-type">gesture-two-finger-swipe-left</property> -->
+ <!-- </object> -->
+ <!-- </child> -->
+ <!-- <child> -->
+ <!-- <object class="GtkShortcutsShortcut"> -->
+ <!-- <property name="visible">True</property> -->
+ <!-- <property name="title" translatable="yes">Tab at the right</property> -->
+ <!-- <property name="shortcut-type">gesture-two-finger-swipe-right</property> -->
+ <!-- </object> -->
+ <!-- </child> -->
+ <!-- </object> -->
+ <!-- </child> -->
+
+ <!-- <child> -->
+ <!-- <object class="GtkShortcutsGroup"> -->
+ <!-- <property name="visible">True</property> -->
+ <!-- <property name="title" translatable="yes">Selection</property> -->
+ <!-- <child> -->
+ <!-- <object class="GtkShortcutsShortcut"> -->
+ <!-- <property name="visible">True</property> -->
+ <!-- <property name="title" translatable="yes">Rotate clockwise</property> -->
+ <!-- <property name="shortcut-type">gesture-rotate-clockwise</property> -->
+ <!-- </object> -->
+ <!-- </child> -->
+ <!-- <child> -->
+ <!-- <object class="GtkShortcutsShortcut"> -->
+ <!-- <property name="visible">True</property> -->
+ <!-- <property name="title" translatable="yes">Rotate counter-clockwise</property> -->
+ <!-- <property name="shortcut-type">gesture-rotate-counterclockwise</property> -->
+ <!-- </object> -->
+ <!-- </child> -->
+ <!-- </object> -->
+ <!-- </child> -->
+
</object>
</child>
- <!-- <child> -->
- <!-- <object class="GtkShortcutsSection"> -->
- <!-- <property name="visible">True</property> -->
- <!-- <property name="section-name">gestures</property> -->
- <!-- <property name="title" translatable="yes">Touch gestures</property> -->
- <!-- <property name="max-height">9</property> -->
- <!-- <child> -->
- <!-- <object class="GtkShortcutsGroup"> -->
- <!-- <property name="visible">True</property> -->
- <!-- <property name="title" translatable="yes">Zoom</property> -->
- <!-- <child> -->
- <!-- <object class="GtkShortcutsShortcut"> -->
- <!-- <property name="visible">True</property> -->
- <!-- <property name="title" translatable="yes">Zoom</property> -->
- <!-- <property name="accelerator">XXX</property> -->
- <!-- </object> -->
- <!-- </child> -->
- <!-- </object> -->
- <!-- </child> -->
- <!-- <child> -->
- <!-- <object class="GtkShortcutsGroup"> -->
- <!-- <property name="visible">True</property> -->
- <!-- <property name="title" translatable="yes">Tabs</property> -->
- <!-- <child> -->
- <!-- <object class="GtkShortcutsShortcut"> -->
- <!-- <property name="visible">True</property> -->
- <!-- <property name="title" translatable="yes">Tab at the left</property> -->
- <!-- <property name="accelerator">XXX</property> -->
- <!-- </object> -->
- <!-- </child> -->
- <!-- <child> -->
- <!-- <object class="GtkShortcutsShortcut"> -->
- <!-- <property name="visible">True</property> -->
- <!-- <property name="title" translatable="yes">Tab at the right</property> -->
- <!-- <property name="accelerator">XXX</property> -->
- <!-- </object> -->
- <!-- </child> -->
- <!-- </object> -->
- <!-- </child> -->
- <!-- </object> -->
- <!-- </child> -->
</object>
</interface>
+
diff --git a/src/ui/toolbar-symbolic.ui b/src/ui/toolbar-symbolic.ui
index 7431dc8c..cf54d5f7 100644
--- a/src/ui/toolbar-symbolic.ui
+++ b/src/ui/toolbar-symbolic.ui
@@ -81,17 +81,6 @@
</packing>
</child>
<child>
- <object class="GtkToolButton">
- <property name="action-name">win.properties</property>
- <property name="icon-name">document-properties-symbolic</property>
- <property name="tooltip-text" translatable="yes">Image properties</property>
- <property name="label" translatable="yes">Image properties</property>
- </object>
- <packing>
- <property name="homogeneous">False</property>
- </packing>
- </child>
- <child>
<object class="GtkSeparatorToolItem" />
</child>
<child>
@@ -111,10 +100,21 @@
</child>
<child>
<object class="GtkToolButton">
- <property name="action-name">win.fullscreen</property>
- <property name="icon-name">view-fullscreen-symbolic</property>
- <property name="tooltip-text" translatable="yes">Fullscreen</property>
- <property name="label" translatable="yes">Fullscreen</property>
+ <property name="action-name">win.print</property>
+ <property name="icon-name">document-print-symbolic</property>
+ <property name="tooltip-text" translatable="yes">Print</property>
+ <property name="label" translatable="yes">Print</property>
+ </object>
+ <packing>
+ <property name="homogeneous">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolButton">
+ <property name="action-name">win.to_clipboard</property>
+ <property name="icon-name">send-to-symbolic</property>
+ <property name="tooltip-text" translatable="yes">Copy to clipboard</property>
+ <property name="label" translatable="yes">Copy to clipboard</property>
</object>
<packing>
<property name="homogeneous">False</property>
diff --git a/src/ui/toolbar.ui b/src/ui/toolbar.ui
index 3adbf35b..898dd43d 100644
--- a/src/ui/toolbar.ui
+++ b/src/ui/toolbar.ui
@@ -81,17 +81,6 @@
</packing>
</child>
<child>
- <object class="GtkToolButton">
- <property name="action-name">win.properties</property>
- <property name="icon-name">document-properties</property>
- <property name="tooltip-text" translatable="yes">Image properties</property>
- <property name="label" translatable="yes">Image properties</property>
- </object>
- <packing>
- <property name="homogeneous">False</property>
- </packing>
- </child>
- <child>
<object class="GtkSeparatorToolItem" />
</child>
<child>
@@ -111,10 +100,21 @@
</child>
<child>
<object class="GtkToolButton">
- <property name="action-name">win.fullscreen</property>
- <property name="icon-name">view-fullscreen</property>
- <property name="tooltip-text" translatable="yes">Fullscreen</property>
- <property name="label" translatable="yes">Fullscreen</property>
+ <property name="action-name">win.print</property>
+ <property name="icon-name">document-print</property>
+ <property name="tooltip-text" translatable="yes">Print</property>
+ <property name="label" translatable="yes">Print</property>
+ </object>
+ <packing>
+ <property name="homogeneous">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolButton">
+ <property name="action-name">win.to_clipboard</property>
+ <property name="icon-name">send-to</property>
+ <property name="tooltip-text" translatable="yes">Copy to clipboard</property>
+ <property name="label" translatable="yes">Copy to clipboard</property>
</object>
<packing>
<property name="homogeneous">False</property>
diff --git a/src/ui/win-menus.ui b/src/ui/win-menus.ui
index 8c300b32..9161e34b 100644
--- a/src/ui/win-menus.ui
+++ b/src/ui/win-menus.ui
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<interface domain="drawing">
-<!-- Hamburger menu for smartphone -->
+ <!-- Hamburger menu for smartphone -->
<menu id="long-window-menu">
<section>
<item>
@@ -56,7 +56,12 @@
<attribute name="verb-icon">view-fullscreen-symbolic</attribute>
</item>
</section>
- <section>
+ <section id="save-section">
+ <item>
+ <attribute name="action">win.save_alphaless</attribute>
+ <attribute name="label" translatable="yes">Save without transparency</attribute>
+ <attribute name="hidden-when">action-missing</attribute>
+ </item>
<item>
<attribute name="action">win.save_as</attribute>
<attribute name="label" translatable="yes">Save as…</attribute>
@@ -65,6 +70,12 @@
<attribute name="label" translatable="yes">Export as…</attribute>
<attribute name="action">win.export_as</attribute>
</item>
+ </section>
+ <section id="share-section">
+ <item>
+ <attribute name="action">win.to_clipboard</attribute>
+ <attribute name="label" translatable="yes">Copy to clipboard</attribute>
+ </item>
<item>
<attribute name="label" translatable="yes">Print</attribute>
<attribute name="action">win.print</attribute>
@@ -101,7 +112,7 @@
</section>
</menu>
-<!-- Hamburger menu for desktop -->
+ <!-- Hamburger menu for desktop -->
<menu id="short-window-menu">
<section>
<attribute name="display-hint">horizontal-buttons</attribute>
@@ -121,7 +132,12 @@
<attribute name="verb-icon">view-fullscreen-symbolic</attribute>
</item>
</section>
- <section id="save-section">
+ <section>
+ <item>
+ <attribute name="action">win.save_alphaless</attribute>
+ <attribute name="label" translatable="yes">Save without transparency</attribute>
+ <attribute name="hidden-when">action-missing</attribute>
+ </item>
<item>
<attribute name="action">win.save_as</attribute>
<attribute name="label" translatable="yes">Save as…</attribute>
@@ -130,13 +146,19 @@
<attribute name="label" translatable="yes">Export as…</attribute>
<attribute name="action">win.export_as</attribute>
</item>
+ </section>
+ <section id="share-section">
+ <item>
+ <attribute name="action">win.to_clipboard</attribute>
+ <attribute name="label" translatable="yes">Copy to clipboard</attribute>
+ </item>
<item>
<attribute name="label" translatable="yes">Print</attribute>
<attribute name="action">win.print</attribute>
</item>
</section>
<section>
- <!-- <attribute name="label" translatable="yes">Development features</attribute> -->
+ <!-- For debug purposes only -->
<item>
<attribute name="label" translatable="yes">Refresh</attribute>
<attribute name="action">win.restore_pixbuf</attribute>
@@ -184,16 +206,30 @@
</section>
</menu>
+ <!-- Hamburger menu for layouts with a more rich toolbar -->
<menu id="minimal-window-menu">
<section>
<item>
+ <attribute name="label" translatable="yes">Reload file</attribute>
+ <attribute name="action">win.reload_file</attribute>
+ <attribute name="verb-icon">view-refresh-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="label" translatable="yes">Image properties</attribute>
+ <attribute name="action">win.properties</attribute>
+ <attribute name="verb-icon">document-properties-symbolic</attribute>
+ </item>
+ <item>
+ <attribute name="action">win.fullscreen</attribute>
+ <attribute name="label" translatable="yes">Fullscreen</attribute>
+ <attribute name="verb-icon">view-fullscreen-symbolic</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
<attribute name="label" translatable="yes">Show tools names</attribute>
<attribute name="action">win.show_labels</attribute>
</item>
- <!-- <item> -->
- <!-- <attribute name="label" translatable="yes">Use antialising</attribute> -->
- <!-- <attribute name="action">win.antialiasing</attribute> -->
- <!-- </item> -->
<item>
<attribute name="label" translatable="yes">Preferences</attribute>
<attribute name="action">app.settings</attribute>
@@ -259,9 +295,14 @@
</item>
</section>
<section>
- <!-- here will be a submenu of tools -->
+ <attribute name="label" translatable="yes">Tools</attribute>
+ <!-- here will be a section of tools -->
+ <submenu>
+ <attribute name="label" translatable="yes">Other tools</attribute>
+ <!-- here will be 2 sections of tools -->
+ </submenu>
</section>
- <!-- here will be a list of tabs -->
+ <!-- here will be list of tabs -->
</menu>
</interface>
diff --git a/src/ui/window.ui b/src/ui/window.ui
index 0158664d..d23ff33b 100644
--- a/src/ui/window.ui
+++ b/src/ui/window.ui
@@ -45,6 +45,21 @@
</child>
</object>
</child>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkButton" id="info_action">
+ <property name="visible">True</property>
+ <property name="action-name">app.report_bug</property>
+ <property name="label" translatable="yes">Report a bug</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="ok">info_action</action-widget>
+ </action-widgets>
</object>
</child>
<child>
diff --git a/src/utilities.py b/src/utilities.py
index d0a29cfe..9ec6dc1b 100644
--- a/src/utilities.py
+++ b/src/utilities.py
@@ -15,8 +15,7 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-from gi.repository import Gtk, GdkPixbuf
-from .message_dialog import DrMessageDialog
+from gi.repository import Gtk, Gio
################################################################################
@@ -66,6 +65,9 @@ def utilities_get_rgba_name(red, green, blue, alpha):
elif rgb_percents[0] > 0.4 and rgb_percents[1] < 0.3 and rgb_percents[2] < 0.3:
if lumin < 0.7 and rgb_percents[0] < 0.7:
+ # Context: the name of the current color is provided as a tooltip to
+ # help users with color blindness, but some color names don't have a
+ # clear definition. Here, the app thinks it's probably brown.
color_string = _("Probably brown")
else:
color_string = _("Red")
@@ -88,9 +90,17 @@ def utilities_get_rgba_name(red, green, blue, alpha):
if lumin > 0.7:
color_string = _("Cyan")
else:
- color_string = _("Probably turquoise")
+ # Context: the name of the current color is provided as a tooltip to
+ # help users with color blindness, but some color names don't have a
+ # clear definition. Here, the app thinks it's probably teal.
+ # You can translate "teal" with the name of approaching color, like
+ # turquoise or green-blue.
+ color_string = _("Probably teal")
else:
+ # Context: the name of the current color is provided as a tooltip to
+ # help users with color blindness, but some color names don't have a
+ # clear definition. Here, the app can't find a corresponding color name.
color_string = _("Unknown color name")
# print(color_string)
@@ -98,83 +108,6 @@ def utilities_get_rgba_name(red, green, blue, alpha):
################################################################################
-def utilities_save_pixbuf_to(pixbuf, fpath, window, can_save_as):
- """Save pixbuf to a given path, with the file format corresponding to the
- end of the file name. Format with no support for alpha channel will be
- modified so transparent pixels get replaced by white."""
- # Build a short string which will be recognized as a file format by the
- # GdkPixbuf.Pixbuf.savev method
- file_format = fpath.split('.')[-1]
- if file_format in ['jpeg', 'jpg', 'jpe']:
- file_format = 'jpeg'
- elif file_format not in ['jpeg', 'jpg', 'jpe', 'png', 'tiff', 'ico', 'bmp']:
- file_format = 'png'
- # Ask the user what to do concerning formats with no alpha channel
- if file_format not in ['png']:
- replacement = window._settings.get_string('replace-alpha')
- if replacement == 'ask':
- replacement = _ask_overwrite_alpha(window, can_save_as)
- pixbuf = _replace_alpha(pixbuf, replacement)
- # Actually save the pixbuf to the given file path
- pixbuf.savev(fpath, file_format, [None], [])
-
-def _replace_alpha(pixbuf, replacement):
- if replacement == 'nothing':
- return
- width = pixbuf.get_width()
- height = pixbuf.get_height()
- if replacement == 'white':
- pcolor1 = _rgb_as_hexadecimal_int(255, 255, 255)
- pcolor2 = _rgb_as_hexadecimal_int(255, 255, 255)
- elif replacement == 'checkboard':
- pcolor1 = _rgb_as_hexadecimal_int(85, 85, 85)
- pcolor2 = _rgb_as_hexadecimal_int(170, 170, 170)
- else: # if replacement == 'black':
- pcolor1 = _rgb_as_hexadecimal_int(0, 0, 0)
- pcolor2 = _rgb_as_hexadecimal_int(0, 0, 0)
- return pixbuf.composite_color_simple(width, height,
- GdkPixbuf.InterpType.TILES, 255, 8, pcolor1, pcolor2)
-
-def _rgb_as_hexadecimal_int(r, g, b):
- """The method GdkPixbuf.Pixbuf.composite_color_simple wants an hexadecimal
- integer whose format is 0xaarrggbb so here are ugly binary operators."""
- return (r << 16) + (g << 8) + b
-
-def _ask_overwrite_alpha(window, can_save_as):
- """Warn the user about the replacement of the alpha channel for JPG or BMP
- files, but it will quickly annoy users to see a dialog so it's an option."""
- dialog = DrMessageDialog(window)
- cancel_id = dialog.set_action(_("Cancel"), None, False)
- if can_save_as:
- save_as_id = dialog.set_action(_("Save as…"), None, False)
- replace_id = dialog.set_action(_("Replace"), None, True)
-
- dialog.add_string(_("This file format doesn't support transparent colors."))
- if can_save_as:
- dialog.add_string(_("You can save the image as a PNG file, or " \
- "replace transparency with:"))
- else:
- dialog.add_string(_("Replace transparency with:"))
-
- alpha_combobox = Gtk.ComboBoxText(halign=Gtk.Align.CENTER)
- alpha_combobox.append('white', _("White"))
- alpha_combobox.append('black', _("Black"))
- alpha_combobox.append('checkboard', _("Checkboard"))
- alpha_combobox.append('nothing', _("Nothing"))
- alpha_combobox.set_active_id('white') # If we run the dialog, it means the
- # active preference is 'ask', so there is no way we can set the default
- # value to something pertinent.
- dialog.add_widget(alpha_combobox)
-
- result = dialog.run()
- repl = alpha_combobox.get_active_id()
- dialog.destroy()
- if result != replace_id:
- raise Exception(result)
- return repl
-
-################################################################################
-
def utilities_add_filechooser_filters(dialog):
"""Add file filters for images to file chooser dialogs."""
allPictures = Gtk.FileFilter()
@@ -205,11 +138,15 @@ def utilities_add_filechooser_filters(dialog):
def utilities_add_unit_to_spinbtn(spinbutton, width_chars, unit):
spinbutton.set_width_chars(width_chars + 3)
if unit == 'px':
+ # To translators: it's a measure unit, it appears in tooltips over
+ # numerical inputs
_add_spinbutton_icon(spinbutton, 'unit-pixels-symbolic', _("pixels"))
elif unit == '%':
+ # To translators: it appears in tooltips over numerical inputs
_add_spinbutton_icon(spinbutton, 'unit-percents-symbolic', _("percents"))
elif unit == '°':
- # To translators: it's the angle measure unit
+ # To translators: it's the angle measure unit, it appears in a tooltip
+ # over a numerical input
_add_spinbutton_icon(spinbutton, 'unit-degrees-symbolic', _("degrees"))
def _add_spinbutton_icon(spinbutton, icon, tooltip):
@@ -220,3 +157,41 @@ def _add_spinbutton_icon(spinbutton, icon, tooltip):
################################################################################
+def utilities_gfile_is_image(gfile, error_msg=""):
+ try:
+ infos = gfile.query_info('standard::*', Gio.FileQueryInfoFlags.NONE, None)
+ if 'image/' in infos.get_content_type():
+ # The exact file format of the image isn't validated here because i
+ # can't assume what gdkpixbuf is able to read (it's modular, and it
+ # evolves). An InvalidFileFormatException will be raised by DrImage
+ # if the file can't be loaded.
+ return True, error_msg
+ else:
+ error_msg = error_msg + _("%s isn't an image.") % gfile.get_path()
+ except Exception as err:
+ error_msg = error_msg + err.message
+ return False, error_msg
+
+class InvalidFileFormatException(Exception):
+ def __init__(self, initial_message, fpath):
+ self.message = initial_message
+ cpt = 0
+ with open(fpath, 'rb') as f:
+ riff_bytes = f.read(4)
+ size_bytes = f.read(4)
+ webp_bytes = f.read(4)
+ if riff_bytes == b'RIFF' and webp_bytes == b'WEBP':
+ msg = _("Sorry, WEBP images can't be loaded by this app.") + " 😢 "
+ if fpath[-5:] != '.webp':
+ # Context: an error message, %s is a file path
+ msg = msg + _("Despite its name, %s is a WEBP file.") % fpath
+ self.message = msg
+ super().__init__(self.message)
+ # This exception is meant to be raised when a file is detected as an image
+ # by Gio (see utility function above) BUT can't be loaded into a GdkPixbuf.
+ # It usually means the file is corrupted, or has a deceptive name (for
+ # example "xxx.jpeg" despite being a text file), or is just an image format
+ # not supported by the GdkPixbuf version installed by the user.
+
+################################################################################
+
diff --git a/src/window.py b/src/window.py
index 02660b24..1fca4873 100644
--- a/src/window.py
+++ b/src/window.py
@@ -19,6 +19,8 @@
import os
from gi.repository import Gtk, Gdk, Gio, GdkPixbuf, GLib
+from .gi_composites import GtkTemplate
+
# Import tools
from .tool_arc import ToolArc
from .tool_eraser import ToolEraser
@@ -28,6 +30,7 @@ from .tool_line import ToolLine
from .tool_paint import ToolPaint
from .tool_pencil import ToolPencil
from .tool_picker import ToolPicker
+from .tool_points import ToolPoints
from .tool_shape import ToolShape
from .tool_text import ToolText
@@ -35,7 +38,7 @@ from .tool_crop import ToolCrop
from .tool_filters import ToolFilters
from .tool_rotate import ToolRotate
from .tool_scale import ToolScale
-from .tool_skew import ToolSkew
+# from .tool_skew import ToolSkew
from .select_rect import ToolRectSelect
from .select_free import ToolFreeSelect
@@ -50,9 +53,10 @@ from .message_dialog import DrMessageDialog
from .deco_manager import DrDecoManagerMenubar, \
DrDecoManagerHeaderbar, \
DrDecoManagerToolbar
+from .saving_manager import DrSavingManager
-from .utilities import utilities_save_pixbuf_to, \
- utilities_add_filechooser_filters
+from .utilities import utilities_add_filechooser_filters
+from .utilities import utilities_gfile_is_image
UI_PATH = '/com/github/maoschanz/drawing/ui/'
@@ -72,26 +76,28 @@ DEFAULT_TOOL_ID = 'pencil'
################################################################################
-@Gtk.Template(resource_path=UI_PATH+'window.ui')
+@GtkTemplate(ui=UI_PATH+'window.ui')
class DrWindow(Gtk.ApplicationWindow):
__gtype_name__ = 'DrWindow'
_settings = Gio.Settings.new('com.github.maoschanz.drawing')
# Window empty widgets
- tools_flowbox = Gtk.Template.Child()
- toolbar_box = Gtk.Template.Child()
- info_bar = Gtk.Template.Child()
- info_label = Gtk.Template.Child()
- notebook = Gtk.Template.Child()
- bottom_panes_box = Gtk.Template.Child()
- tools_scrollable_box = Gtk.Template.Child()
- tools_nonscrollable_box = Gtk.Template.Child()
- fullscreen_btn = Gtk.Template.Child()
- fullscreen_icon = Gtk.Template.Child()
+ tools_flowbox = GtkTemplate.Child()
+ toolbar_box = GtkTemplate.Child()
+ info_bar = GtkTemplate.Child()
+ info_label = GtkTemplate.Child()
+ info_action = GtkTemplate.Child()
+ notebook = GtkTemplate.Child()
+ bottom_panes_box = GtkTemplate.Child()
+ tools_scrollable_box = GtkTemplate.Child()
+ tools_nonscrollable_box = GtkTemplate.Child()
+ fullscreen_btn = GtkTemplate.Child()
+ fullscreen_icon = GtkTemplate.Child()
def __init__(self, **kwargs):
super().__init__(**kwargs)
+ self.init_template()
self.app = kwargs['application']
self.fullscreened = False
@@ -99,6 +105,7 @@ class DrWindow(Gtk.ApplicationWindow):
# manage several tabs in a single window despite the
# notebook widget being pure shit
self.active_tool_id = None
+ self._is_tools_initialisation_finished = False
if self._settings.get_boolean('maximized'):
self.maximize()
@@ -114,75 +121,99 @@ class DrWindow(Gtk.ApplicationWindow):
self.tools = None
self.minimap = DrMinimap(self, None)
self.options_manager = DrOptionsManager(self)
+ self.saving_manager = DrSavingManager(self)
self.add_all_win_actions()
- if get_cb:
- self.build_image_from_clipboard()
- elif gfile is not None:
- self.build_new_tab(gfile=gfile)
- else:
- self.build_new_image()
- self.init_tools()
+ self._init_tools()
self.connect_signals()
+
+ # The picture is built as late as possible in the init process because
+ # reading files is too prone to exceptions that may fuck everything up,
+ # and i don't trust that catching them is enough to ensure the process
+ # can continue normally.
+ try:
+ if get_cb:
+ self.build_image_from_clipboard()
+ elif gfile is not None:
+ self.build_new_tab(gfile=gfile)
+ else:
+ self.build_new_image()
+ except Exception as excp:
+ self.prompt_message(True, excp.message)
+
+ self._enable_first_tool()
self.set_picture_title()
- def init_tools(self):
+ def _init_tools(self):
"""Initialize all tools, building the UI for them including the menubar,
and enable the default tool."""
- disabled_tools_ids = self._settings.get_strv('disabled-tools')
+ disabled_tools = self._settings.get_strv('disabled-tools')
dev = self._settings.get_boolean('devel-only')
self.tools = {}
self.prompt_message(False, 'window has started, now loading tools')
# The order might be improvable
- self.load_tool('pencil', ToolPencil, disabled_tools_ids, dev)
- self.load_tool('eraser', ToolEraser, disabled_tools_ids, dev)
- self.load_tool('highlight', ToolHighlighter, disabled_tools_ids, dev)
- self.load_tool('text', ToolText, disabled_tools_ids, dev)
- self.load_tool('rect_select', ToolRectSelect, disabled_tools_ids, dev)
- self.load_tool('free_select', ToolFreeSelect, disabled_tools_ids, dev)
- self.load_tool('line', ToolLine, disabled_tools_ids, dev)
- self.load_tool('arc', ToolArc, disabled_tools_ids, dev)
- self.load_tool('shape', ToolShape, disabled_tools_ids, dev)
- self.load_tool('picker', ToolPicker, disabled_tools_ids, dev)
- self.load_tool('color_select', ToolColorSelect, disabled_tools_ids, dev)
- self.load_tool('paint', ToolPaint, disabled_tools_ids, dev)
+ self._load_tool('pencil', ToolPencil, disabled_tools, dev)
+ self._load_tool('eraser', ToolEraser, disabled_tools, dev)
+ self._load_tool('highlight', ToolHighlighter, disabled_tools, dev)
+ self._load_tool('text', ToolText, disabled_tools, dev)
+ self._load_tool('points', ToolPoints, disabled_tools, dev)
+ self._load_tool('rect_select', ToolRectSelect, disabled_tools, dev)
+ self._load_tool('free_select', ToolFreeSelect, disabled_tools, dev)
+ self._load_tool('line', ToolLine, disabled_tools, dev)
+ self._load_tool('arc', ToolArc, disabled_tools, dev)
+ self._load_tool('shape', ToolShape, disabled_tools, dev)
+ self._load_tool('picker', ToolPicker, disabled_tools, dev)
+ self._load_tool('color_select', ToolColorSelect, disabled_tools, dev)
+ self._load_tool('paint', ToolPaint, disabled_tools, dev)
if dev:
- self.load_tool('experiment', ToolExperiment, disabled_tools_ids, dev)
- self.load_tool('crop', ToolCrop, disabled_tools_ids, dev)
- self.load_tool('scale', ToolScale, disabled_tools_ids, dev)
- self.load_tool('rotate', ToolRotate, disabled_tools_ids, dev)
- self.load_tool('skew', ToolSkew, disabled_tools_ids, dev)
- self.load_tool('filters', ToolFilters, disabled_tools_ids, dev)
+ self._load_tool('experiment', ToolExperiment, disabled_tools, dev)
+ self._load_tool('crop', ToolCrop, disabled_tools, dev)
+ self._load_tool('scale', ToolScale, disabled_tools, dev)
+ self._load_tool('rotate', ToolRotate, disabled_tools, dev)
+ # self._load_tool('skew', ToolSkew, disabled_tools, dev)
+ self._load_tool('filters', ToolFilters, disabled_tools, dev)
# Side pane buttons for tools, and their menubar items if they don't
- # exist yet
- self.build_tool_rows()
+ # exist yet (they're defined on the application level)
+ self._build_tool_rows()
if not self.app.has_tools_in_menubar:
self.build_menubar_tools_menu()
- # Initialisation of options and menus
+ # Initialisation of which tool is active
tool_id = self._settings.get_string('last-active-tool')
if tool_id not in self.tools:
tool_id = DEFAULT_TOOL_ID
self.active_tool_id = tool_id
self.former_tool_id = tool_id
- if tool_id == DEFAULT_TOOL_ID: # The "pencil" button is already active
- self.enable_tool(tool_id)
+ # the end of this process, implemented in the `_enable_first_tool`
+ # method, will be called later because it requires an active image,
+ # which doesn't exist yet at this point of the window init process.
+
+ def _enable_first_tool(self):
+ """Near the end of the window initialisation process, this method is
+ called once to make sure all things related to the active tool, mostly
+ its options' values, and the visibility of its optionsbar, are all
+ correctly loaded."""
+ if self.active_tool_id == DEFAULT_TOOL_ID:
+ # Special case of the "pencil" radio button, which is already active
+ self.enable_tool(self.active_tool_id)
else:
self.active_tool().row.set_active(True)
+ self._is_tools_initialisation_finished = True
- def load_tool(self, tool_id, tool_class, disabled_tools_ids, dev):
+ def _load_tool(self, tool_id, tool_class, disabled_tools, dev):
"""Given its id and its python class, this method tries to load a tool,
and show an error message if the tool initialization failed."""
if dev: # Simplest way to get an error stack
self.tools[tool_id] = tool_class(self)
- elif tool_id not in disabled_tools_ids:
+ elif tool_id not in disabled_tools:
try:
self.tools[tool_id] = tool_class(self)
except:
+ # Context: an error message
self.prompt_message(True, _("Failed to load tool: %s") % tool_id)
- def build_tool_rows(self):
+ def _build_tool_rows(self):
"""Adds each tool's button to the side pane."""
group = None
for tool_id in self.tools:
@@ -197,14 +228,24 @@ class DrWindow(Gtk.ApplicationWindow):
def build_menubar_tools_menu(self):
sections = [None, None, None]
- sections[2] = self.get_menubar_item([[True, 4], [False, 0]])
- sections[0] = self.get_menubar_item([[True, 4], [False, 1]])
- sections[1] = self.get_menubar_item([[True, 4], [False, 2]])
+ # the ids of the various kinds of tools don't match the index of their
+ # section in the submenu
+ sections[2] = self._get_menubar_tools_section(0)
+ sections[0] = self._get_menubar_tools_section(1)
+ sections[1] = self._get_menubar_tools_section(2)
for tool_id in self.tools:
tool = self.tools[tool_id]
tool.add_item_to_menu(sections[tool.menu_id])
self.app.has_tools_in_menubar = True
+ def _get_menubar_tools_section(self, section_index):
+ return self._get_menubar_item([
+ [True, 4],
+ [False, 1],
+ [True, 0],
+ [False, section_index]
+ ])
+
############################################################################
# TABS AND WINDOWS MANAGEMENT ##############################################
@@ -213,10 +254,9 @@ class DrWindow(Gtk.ApplicationWindow):
defined by user's settings."""
width = self._settings.get_int('default-width')
height = self._settings.get_int('default-height')
- rgba = self._settings.get_strv('background-rgba')
+ rgba = self._settings.get_strv('default-rgba')
self.build_new_tab(width=width, height=height, background_rgba=rgba)
- if self.active_tool_id is not None: # Tools might not be initialized yet
- self.set_picture_title()
+ self.set_picture_title()
def build_new_custom(self, *args):
"""Open a new tab with a drawable blank image using the custom values
@@ -234,7 +274,11 @@ class DrWindow(Gtk.ApplicationWindow):
empty, the new image will be blank."""
cb = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
pixbuf = cb.wait_for_image()
- self.build_new_tab(pixbuf=pixbuf)
+ if pixbuf is None:
+ self.prompt_message(True, _("The clipboard doesn't contain any image."))
+ self.build_new_image()
+ else:
+ self.build_new_tab(pixbuf=pixbuf)
def build_image_from_selection(self, *args):
"""Open a new tab with the image in the selection."""
@@ -251,21 +295,27 @@ class DrWindow(Gtk.ApplicationWindow):
new_image.try_load_file(gfile)
elif pixbuf is not None:
new_image.try_load_pixbuf(pixbuf)
+ # XXX dans l'idéal on devrait ne rien ouvrir non ? ou si besoin (si
+ # ya pas de fenêtre) ouvrir un truc respectant les settings, plutôt
+ # qu'un petit pixbuf rouge
else:
new_image.init_background(width, height, background_rgba)
self.update_tabs_visibility()
self.notebook.set_current_page(self.notebook.get_n_pages()-1)
def on_active_tab_changed(self, *args):
+ if not self._is_tools_initialisation_finished:
+ return
self.switch_to(self.active_tool_id, args[1])
- print("changement d'image")
- # On devrait être moins bourrin et conserver la sélection # XXX
+ # print("changement d'image")
self.set_picture_title(args[1].update_title())
self.minimap.set_zoom_label(args[1].zoom_level * 100)
+ args[1].update_history_sensitivity()
+ # On devrait être moins bourrin et conserver la sélection # TODO
def update_tabs_menu_section(self, *args):
action = self.lookup_action('active_tab')
- section = self.get_menubar_item([[True, 2], [False, 1]])
+ section = self._get_menubar_item([[True, 2], [False, 1]])
section.remove_all()
for page in self.notebook.get_children():
tab_title = page.update_title()
@@ -273,7 +323,7 @@ class DrWindow(Gtk.ApplicationWindow):
section.append(tab_title, 'win.active_tab(' + str(tab_index) + ')')
def action_tab_left(self, *args):
- # XXX (un)availability of this action, + touch gesture
+ # XXX (un)availability of this action
current_page = self.notebook.get_current_page()
if current_page == 0:
self.notebook.set_current_page(self.notebook.get_n_pages() - 1)
@@ -281,7 +331,7 @@ class DrWindow(Gtk.ApplicationWindow):
self.notebook.set_current_page(current_page - 1)
def action_tab_right(self, *args):
- # XXX (un)availability of this action, + touch gesture
+ # XXX (un)availability of this action
current_page = self.notebook.get_current_page()
if current_page == self.notebook.get_n_pages() - 1:
self.notebook.set_current_page(0)
@@ -291,9 +341,9 @@ class DrWindow(Gtk.ApplicationWindow):
def close_tab(self, tab):
"""Close a tab (after asking to save if needed)."""
index = self.notebook.page_num(tab)
- if not self.notebook.get_nth_page(index)._is_saved:
+ if not self.notebook.get_nth_page(index).is_saved():
self.notebook.set_current_page(index)
- is_saved = self.confirm_save_modifs()
+ is_saved = self.saving_manager.confirm_save_modifs()
if not is_saved:
return False
self.notebook.remove_page(index)
@@ -326,24 +376,35 @@ class DrWindow(Gtk.ApplicationWindow):
# GENERAL PURPOSE METHODS ##################################################
def connect_signals(self):
+ # Closing the info bar
self.info_bar.connect('close', self.hide_message)
self.info_bar.connect('response', self.hide_message)
+
+ # Closing the window
self.connect('delete-event', self.on_close)
+
+ # Resizing the window
self.connect('configure-event', self._adapt_to_window_size)
+
+ # When a setting changes
self._settings.connect('changed::show-labels', self.on_show_labels_setting_changed)
self._settings.connect('changed::deco-type', self.on_layout_changed)
self._settings.connect('changed::big-icons', self.on_icon_size_changed)
- # self._settings.connect('changed::*', self.show_info_settings)
- # Preview size? Dev-only features? Zoom level?
+ # self._settings.connect('changed::preview-size', self.show_info_settings)
+ # self._settings.connect('changed::devel-only', self.show_info_settings)
self._settings.connect('changed::disabled-tools', self.show_info_settings)
+ # Other settings are connected in DrImage
+
+ # What happens when the active image change
self.notebook.connect('switch-page', self.on_active_tab_changed)
+ # Managing drag-and-drop
self.notebook.drag_dest_set(Gtk.DestDefaults.ALL, [], Gdk.DragAction.MOVE)
self.notebook.connect('drag-data-received', self.on_data_dropped)
self.notebook.drag_dest_add_uri_targets()
# because drag_dest_add_image_targets doesn't work for files
- def get_menubar_item(self, path_description):
+ def _get_menubar_item(self, path_description):
"""Get an item of the app-wide menubar. The `path_description` object
is an array of [boolean, int] couples. The boolean means if we're
looking for a submenu, the int is an index."""
@@ -394,13 +455,15 @@ class DrWindow(Gtk.ApplicationWindow):
self.add_action_boolean('toggle_preview', False, self.action_toggle_preview)
self.app.set_accels_for_action('win.toggle_preview', ['<Ctrl>m'])
- self.add_action_boolean('show_labels', self._settings.get_boolean( \
- 'show-labels'), self.on_show_labels_action_changed)
+
+ show_labels = self._settings.get_boolean('show-labels')
+ self.add_action_boolean('show_labels', show_labels, self.action_show_labels)
self.app.set_accels_for_action('win.show_labels', ['F9'])
- self.add_action_simple('reload_file', self.action_reload, ['F5'])
- self.add_action_simple('properties', self.action_properties, None)
self.add_action_simple('fullscreen', self.action_fullscreen, ['F11'])
+
+ self.add_action_simple('reload_file', self.action_reload, ['<Ctrl>r'])
+ self.add_action_simple('properties', self.action_properties, None)
self.add_action_simple('unfullscreen', self.action_unfullscreen, ['Escape'])
self.add_action_simple('go_up', self.action_go_up, ['<Ctrl>Up'])
@@ -429,8 +492,10 @@ class DrWindow(Gtk.ApplicationWindow):
self.add_action_simple('redo', self.action_redo, ['<Ctrl><Shift>z'])
self.add_action_simple('save', self.action_save, ['<Ctrl>s'])
+ self.add_action_simple('save_alphaless', self.action_save_alphaless, None)
self.add_action_simple('save_as', self.action_save_as, ['<Ctrl><Shift>s'])
self.add_action_simple('export_as', self.action_export_as, None)
+ self.add_action_simple('to_clipboard', self.action_export_cb, ['<Ctrl><Shift>c'])
self.add_action_simple('print', self.action_print, None)
self.add_action_simple('import', self.action_import, ['<Ctrl>i'])
@@ -444,17 +509,20 @@ class DrWindow(Gtk.ApplicationWindow):
self.add_action_simple('back_to_previous', self.back_to_previous, ['<Ctrl>b'])
self.add_action_simple('force_selection', self.force_selection, None)
- self.add_action_simple('apply_canvas_tool', self.action_apply_canvas_tool, None)
+ self.add_action_simple('apply_transform', self.action_apply_transform, ['<Ctrl>Return'])
self.add_action_enum('active_tool', DEFAULT_TOOL_ID, self.on_change_active_tool)
- self.add_action_simple('main_color', self.action_color1, ['<Ctrl>l'])
- self.add_action_simple('secondary_color', self.action_color2, ['<Ctrl>r'])
+ self.add_action_simple('main_color', self.action_color1, ['<Ctrl><Shift>l'])
+ self.add_action_simple('secondary_color', self.action_color2, ['<Ctrl><Shift>r'])
self.add_action_simple('exchange_color', self.exchange_colors, ['<Ctrl>e'])
editor = self._settings.get_boolean('direct-color-edit')
self.app.add_action_boolean('use_editor', editor, self.action_use_editor)
+ self.add_action_simple('size_more', self.action_size_more, ['<Ctrl><Shift>Up'])
+ self.add_action_simple('size_less', self.action_size_less, ['<Ctrl><Shift>Down'])
+
if self._settings.get_boolean('devel-only'):
self.add_action_simple('restore_pixbuf', self.action_restore, None)
self.add_action_simple('rebuild_from_histo', self.action_rebuild, None)
@@ -478,10 +546,15 @@ class DrWindow(Gtk.ApplicationWindow):
# WINDOW DECORATIONS AND LAYOUTS ###########################################
def on_layout_changed(self, *args):
- is_narrow = self._decorations.remove_from_ui()
- self.set_ui_bars()
- self._decorations.set_compact(is_narrow)
- self.set_picture_title()
+ try:
+ is_narrow = self._decorations.remove_from_ui()
+ self.set_ui_bars()
+ self._decorations.set_compact(is_narrow)
+ self.set_picture_title()
+ except:
+ pass # Closed windows are not actually deleted from the array kept
+ # in main.py, so this can be called even after the window lost its
+ # data (and it will fail).
def show_info_settings(self, *args):
"""This is executed when a setting changed but the method to apply it
@@ -520,8 +593,6 @@ class DrWindow(Gtk.ApplicationWindow):
else:
return 'hg' # Use the GNOME layout if the desktop is unknown,
# because i don't know how the env variable is on mobile.
- # Since hipsterwm users love "ricing", they'll be happy to edit
- # preferences themselves if they hate CSD.
def set_ui_bars(self):
"""Set the UI "bars" (headerbar, menubar, titlebar, toolbar, whatever)
@@ -561,11 +632,20 @@ class DrWindow(Gtk.ApplicationWindow):
def set_fullscreen_menu(self):
builder = Gtk.Builder.new_from_resource(UI_PATH + 'win-menus.ui')
fullscreen_menu = builder.get_object('fullscreen-menu')
- tabs_list = self.get_menubar_item([[True, 2], [False, 1]])
+
+ tabs_list = self._get_menubar_item([[True, 2], [False, 1]])
fullscreen_menu.append_section(_("Opened images"), tabs_list)
- tools_menu = self.get_menubar_item([[True, 4]])
+
+ classic_tools_section = self._get_menubar_tools_section(1)
section = fullscreen_menu.get_item_link(3, Gio.MENU_LINK_SECTION)
- section.prepend_submenu(_("_Tools"), tools_menu)
+ section.prepend_section(None, classic_tools_section)
+
+ selection_tools_section = self._get_menubar_tools_section(0)
+ transform_tools_section = self._get_menubar_tools_section(2)
+ submenu = section.get_item_link(1, Gio.MENU_LINK_SUBMENU)
+ submenu.append_section(None, selection_tools_section)
+ submenu.append_section(None, transform_tools_section)
+
self.fullscreen_btn.set_menu_model(fullscreen_menu)
def action_main_menu(self, *args):
@@ -592,6 +672,8 @@ class DrWindow(Gtk.ApplicationWindow):
self._decorations.adapt_to_window_size()
available_width = self.bottom_panes_box.get_allocated_width()
+ if not self._is_tools_initialisation_finished:
+ return # there is no active pane nor active image yet
self.options_manager.adapt_to_window_size(available_width)
self.get_active_image().fake_scrollbar_update()
@@ -602,11 +684,20 @@ class DrWindow(Gtk.ApplicationWindow):
def prompt_message(self, show, label):
"""Update the content and the visibility of the info bar."""
self.info_bar.set_visible(show)
+ self.info_action.set_visible(False)
if show:
self.info_label.set_label(label)
- if self._settings.get_boolean('devel-only'):
+ if show or self._settings.get_boolean('devel-only'):
print('Drawing: ' + label)
+ def prompt_action(self, message, action_name, action_label):
+ """Update the content of the info bar, including its actionable button
+ which is set as visible."""
+ self.prompt_message(True, message)
+ self.info_action.set_visible(True)
+ self.info_action.set_action_name(action_name)
+ self.info_action.set_label(action_label)
+
def update_tabs_visibility(self):
should_show = (self.notebook.get_n_pages() > 1) and not self.fullscreened
self.notebook.set_show_tabs(should_show)
@@ -615,6 +706,7 @@ class DrWindow(Gtk.ApplicationWindow):
# FULLSCREEN ###############################################################
def action_unfullscreen(self, *args):
+ """Simple action, exiting fullscreen."""
# TODO connect to signals instead
self.unfullscreen()
self.set_fullscreen_state(False)
@@ -663,7 +755,7 @@ class DrWindow(Gtk.ApplicationWindow):
# TODO https://lazka.github.io/pgi-docs/Gio-2.0/classes/Settings.html#Gio.Settings.create_action
self.set_tools_labels_visibility(self._settings.get_boolean('show-labels'))
- def on_show_labels_action_changed(self, *args):
+ def action_show_labels(self, *args):
show_labels = not args[0].get_state()
self._settings.set_boolean('show-labels', show_labels)
args[0].set_state(GLib.Variant.new_boolean(show_labels))
@@ -714,10 +806,15 @@ class DrWindow(Gtk.ApplicationWindow):
def _update_bottom_pane(self):
"""Show the correct bottom pane, with the correct tool options menu."""
- self.options_manager.try_enable_pane(self.active_tool().pane_id)
- self.options_manager.update_pane(self.active_tool())
- self._build_options_menu()
- self._adapt_to_window_size()
+ try:
+ self.options_manager.try_enable_pane(self.active_tool().pane_id)
+ self.options_manager.update_pane(self.active_tool())
+ self._build_options_menu()
+ self._adapt_to_window_size()
+ except Exception as e:
+ self.prompt_message(True, _("Error: pane invalid for '%s', " + \
+ "please report this bug.") % self.active_tool_id)
+ print(e)
def _update_fullscreen_icon(self):
"""Show the icon of the currently active tool on the button managing
@@ -751,10 +848,7 @@ class DrWindow(Gtk.ApplicationWindow):
self.app.get_menubar().remove(5)
self.app.get_menubar().insert_submenu(5, _("_Options"), model)
pane = self.options_manager.get_active_pane()
- if pane is not None: # XXX try/except
- pane.build_options_menu(widget, model, label)
- else:
- self.prompt_message(False, 'Pane is none for label: ' + label)
+ pane.build_options_menu(widget, model, label)
def action_use_editor(self, *args):
use_editor = not args[0].get_state()
@@ -773,8 +867,11 @@ class DrWindow(Gtk.ApplicationWindow):
if self.active_tool().use_color:
self.options_manager.right_color_btn().open()
- def on_antialiasing_action_changed(self, *args):
- pass # TODO
+ def action_size_more(self, *args):
+ self.options_manager.update_tool_width(1)
+
+ def action_size_less(self, *args):
+ self.options_manager.update_tool_width(-1)
############################################################################
# IMAGE FILES MANAGEMENT ###################################################
@@ -790,9 +887,6 @@ class DrWindow(Gtk.ApplicationWindow):
else:
return self.pointer_to_current_page
- def get_file_path(self):
- return self.get_active_image().get_file_path()
-
def action_reload(self, *args):
self.get_active_image().reload_from_disk()
@@ -818,9 +912,11 @@ class DrWindow(Gtk.ApplicationWindow):
new_window_id = dialog.set_action(_("New Window"), None, False)
discard_id = dialog.set_action(_("Discard changes"), \
'destructive-action', False)
- if not self.get_active_image()._is_saved:
+ if not self.get_active_image().is_saved():
+ # Context: %s will be replaced by the name of a file.
dialog.add_string(_("There are unsaved modifications to %s.") % \
self.get_active_image().get_filename_for_display())
+ # Context: %s will be replaced by the name of a file.
dialog.add_string(_("Where do you want to open %s?") % file_name)
result = dialog.run()
dialog.destroy()
@@ -853,26 +949,40 @@ class DrWindow(Gtk.ApplicationWindow):
cancel_id = dialog.set_action(_("Cancel"), None, False)
open_id = dialog.set_action(_("Open"), None, False)
import_id = dialog.set_action(_("Import"), None, True)
+
uris = data.get_uris()
- if len(uris) == 1:
- label = uris[0].split('/')[-1]
+ gfiles = []
+ for uri in uris:
+ try:
+ gfile = Gio.File.new_for_uri(uri)
+ is_image, error_msg = utilities_gfile_is_image(gfile)
+ except Exception as excp:
+ is_image = False
+ error_msg = excp.message
+ if is_image:
+ gfiles.append(gfile)
+ else:
+ self.prompt_message(True, error_msg)
+
+ if len(gfiles) == 0:
+ return
+ elif len(gfiles) == 1:
+ label = gfiles[0].get_path().split('/')[-1]
else:
# Context for translation:
# "What do you want to do with *these files*?"
label = _("these files")
+ # Context: %s will be replaced by the name of a file. The possible
+ # answers are "cancel", "open", and "import"
dialog.add_string(_("What do you want to do with %s?") % label)
result = dialog.run()
dialog.destroy()
- for uri in uris:
- # print(uri)
- # valider l'URI TODO
- if result == import_id:
- f = Gio.File.new_for_uri(uri)
- self.import_from_path(f.get_path())
- return
- elif result == open_id:
- f = Gio.File.new_for_uri(uri)
+
+ if result == open_id:
+ for f in gfiles:
self.build_new_tab(gfile=f)
+ elif result == import_id:
+ self.import_from_path(gfiles[0].get_path())
def try_load_file(self, gfile):
if gfile is not None:
@@ -883,104 +993,31 @@ class DrWindow(Gtk.ApplicationWindow):
def action_save(self, *args):
"""Try to save the active image, and return True if the image has been
successfully saved."""
- if self.get_file_path() is None: # Newly created and never saved image
- gfile = self.file_chooser_save()
- else:
- gfile = self.get_active_image().gfile
- return self._save_current_tab_to_gfile(gfile)
+ return self.saving_manager.save_current_image(False, False, False, True)
def action_save_as(self, *args):
- gfile = self.file_chooser_save()
- self._save_current_tab_to_gfile(gfile)
+ return self.saving_manager.save_current_image(False, True, False, True)
- def _save_current_tab_to_gfile(self, gfile):
- """Do everything needed to save the currently active image's pixbuf to
- the Gio.File object given as argument."""
- if gfile is None:
- # The user pressed "cancel" or closed the file chooser dialog
- return False
- fn = gfile.get_path()
- try:
- pixb = self.get_active_image().main_pixbuf
- utilities_save_pixbuf_to(pixb, fn, self, True)
- self.get_active_image().gfile = gfile
- except Exception as e:
- if str(e) == '2': # exception has been raised because the user wants
- # to save the file under an other format (JPEG/BMP → PNG)
- self.action_save_as()
- return True
- # else the exception was raised because an actual error occured, or
- # the user clicked on "cancel"
- self.prompt_message(False, _("Failed to save %s") % fn)
- return False
- self.get_active_image().post_save()
- self.set_picture_title()
- return True
-
- def confirm_save_modifs(self):
- """Return True if the image can be closed/overwritten (whether it's
- saved or not), or False otherwise (usually if the user clicked 'cancel',
- or if an error occurred)."""
- if self.get_active_image()._is_saved:
- return True
- fn = self.get_file_path()
- if fn is None:
- unsaved_file_name = _("Untitled") + '.png'
- # Context: the sentence "There are unsaved modifications to %s."
- display_name = _("this picture")
- else:
- unsaved_file_name = fn.split('/')[-1]
- display_name = self.get_active_image().get_filename_for_display()
- dialog = DrMessageDialog(self)
- discard_id = dialog.set_action(_("Discard"), 'destructive-action', False)
- cancel_id = dialog.set_action(_("Cancel"), None, False)
- save_id = dialog.set_action(_("Save"), None, True)
- dialog.add_string( _("There are unsaved modifications to %s.") % display_name)
- self.minimap.update_minimap(True)
- image = Gtk.Image().new_from_pixbuf(self.minimap.mini_pixbuf)
- frame = Gtk.Frame(valign=Gtk.Align.CENTER, halign=Gtk.Align.CENTER)
- frame.add(image)
- dialog.add_widget(frame)
- result = dialog.run()
- dialog.destroy()
- if result == save_id:
- return self.action_save()
- elif result == discard_id:
+ def action_save_alphaless(self, *args):
+ if self.saving_manager.save_current_image(False, False, False, False):
+ self.ask_reload()
return True
- else: # cancel_id
- return False
-
- def file_chooser_save(self):
- """Opens an "save" file chooser dialog, and return a GioFile or None."""
- gfile = None
- file_chooser = Gtk.FileChooserNative.new(_("Save picture as…"), self,
- Gtk.FileChooserAction.SAVE, _("Save"), _("Cancel"))
- utilities_add_filechooser_filters(file_chooser)
-
- images_dir = GLib.get_user_special_dir(GLib.USER_DIRECTORY_PICTURES)
- if images_dir != None: # no idea why it sometimes fails
- file_chooser.set_current_folder(images_dir)
- default_file_name = str(_("Untitled") + '.png')
- file_chooser.set_current_name(default_file_name)
+ return False
- response = file_chooser.run()
- if response == Gtk.ResponseType.ACCEPT:
- gfile = file_chooser.get_file()
- file_chooser.destroy()
- return gfile
+ def action_export_as(self, *args):
+ return self.saving_manager.save_current_image(True, True, False, True)
def action_print(self, *args):
self.get_active_image().print_image()
- def action_export_as(self, *args):
- gfile = self.file_chooser_save()
- if gfile is None:
- return
- pixbuf = self.get_active_image().main_pixbuf
- try:
- utilities_save_pixbuf_to(pixbuf, gfile.get_path(), self, False)
- except:
- self.prompt_message(True, _("Failed to save %s") % gfile.get_path())
+ def action_export_cb(self, *args):
+ cb = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
+ cb.set_image(self.get_active_image().main_pixbuf)
+ self.prompt_message(True, _("Image copied to clipboard"))
+
+ def ask_reload(self):
+ self.prompt_action(_("The image changed on the disk, do you want " + \
+ "to reload it?"), 'win.reload_file', _("Reload"))
############################################################################
# SELECTION MANAGEMENT #####################################################
@@ -988,9 +1025,6 @@ class DrWindow(Gtk.ApplicationWindow):
def action_getvalues(self, *args):
"""Development only: helps debugging the selection."""
self.get_active_image().selection.print_values()
- # self.show_all()
- # print("Focused widget:", self.get_focus())
- # print(self.get_focus().get_path().to_string())
def action_select_all(self, *args):
self.force_selection()
@@ -1024,7 +1058,7 @@ class DrWindow(Gtk.ApplicationWindow):
self.force_selection()
self.get_selection_tool().import_selection(pixbuf)
else:
- string = cb.wait_for_text()
+ string = cb.wait_for_text()
if string is not None:
self.tools['text'].force_text_tool(string)
@@ -1047,14 +1081,7 @@ class DrWindow(Gtk.ApplicationWindow):
self.get_selection_tool().import_selection(pixbuf)
def action_selection_export(self, *args):
- # XXX very similar to action_export_as
- gfile = self.file_chooser_save()
- if gfile is not None:
- pixbuf = self.get_active_image().selection.get_pixbuf()
- try:
- utilities_save_pixbuf_to(pixbuf, gfile.get_path(), self, False)
- except:
- self.prompt_message(True, _("Failed to save %s") % gfile.get_path())
+ return self.saving_manager.save_current_image(True, True, True, True)
def get_selection_tool(self):
if 'rect_select' in self.tools:
@@ -1068,16 +1095,16 @@ class DrWindow(Gtk.ApplicationWindow):
return self.active_tool()
def force_selection(self, *args):
- self.get_selection_tool().row.set_active(True) # XXX appeler enable tool ?
+ self.get_selection_tool().row.set_active(True) # XXX not enable_tool?
- def action_apply_canvas_tool(self, *args):
+ def action_apply_transform(self, *args):
self.active_tool().on_apply_temp_pixbuf_tool_operation()
############################################################################
# HISTORY MANAGEMENT #######################################################
def action_undo(self, *args):
- # self.prompt_message(True, _("Undoing…")) # TODO forcer la mainloop ??
+ # self.prompt_message(True, _("Undoing…"))
self.get_active_image().try_undo()
# self.prompt_message(False, 'finished undoing')
@@ -1085,17 +1112,17 @@ class DrWindow(Gtk.ApplicationWindow):
self.get_active_image().try_redo()
def action_restore(self, *args):
+ """[Dev only] show the last saved pixbuf on the canvas."""
self.get_active_image().use_stable_pixbuf()
self.get_active_image().update()
def action_rebuild(self, *args):
- """Rebuild the image according to the history content."""
- self.get_active_image().rebuild_from_history()
+ """[Dev only] rebuild the image according to the history content."""
+ self.get_active_image()._history._rebuild_from_history()
def update_history_actions_labels(self, undo_label, redo_label):
self._decorations.set_undo_label(undo_label)
self._decorations.set_redo_label(redo_label)
- # TODO maybe update "undo" and "redo" items in the menubar too
############################################################################
# PREVIEW, NAVIGATION AND ZOOM ACTIONS #####################################