summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2014-02-08 19:12:21 +0000
committerJabiertxof <jtx@jtx.marker.es>2014-02-08 19:12:21 +0000
commit0912ab9a77d4b3f26975f3ca94e14ee72b63d6b6 (patch)
treec9342a4d89751b8157c9fe8f9cdd9404114aaae0
parentupdate to trunk (diff)
parentFix for Bug #879058 (Spray Single Path Mode includes original object). (diff)
downloadinkscape-0912ab9a77d4b3f26975f3ca94e14ee72b63d6b6.tar.gz
inkscape-0912ab9a77d4b3f26975f3ca94e14ee72b63d6b6.zip
update to trunk
(bzr r11950.1.250)
-rw-r--r--po/nl.po96
-rw-r--r--po/uk.po3851
-rwxr-xr-xshare/extensions/draw_from_triangle.py10
-rwxr-xr-xshare/extensions/foldablebox.py2
-rwxr-xr-xshare/extensions/grid_cartesian.py12
-rwxr-xr-xshare/extensions/grid_isometric.py6
-rwxr-xr-xshare/extensions/grid_polar.py11
-rwxr-xr-xshare/extensions/guides_creator.py4
-rwxr-xr-xshare/extensions/lindenmayer.py3
-rwxr-xr-xshare/extensions/render_alphabetsoup.py2
-rw-r--r--share/extensions/render_gear_rack.py6
-rw-r--r--share/extensions/render_gears.py2
-rwxr-xr-xshare/extensions/rtree.py4
-rwxr-xr-xshare/extensions/spirograph.py5
-rw-r--r--share/symbols/AigaSymbols.svg16
-rw-r--r--share/symbols/MapSymbols.svg6
-rw-r--r--src/CMakeLists.txt3
-rw-r--r--src/Makefile_insert3
-rw-r--r--src/display/canvas-arena.cpp8
-rw-r--r--src/display/drawing-context.cpp22
-rw-r--r--src/display/drawing-context.h6
-rw-r--r--src/display/drawing-group.cpp12
-rw-r--r--src/display/drawing-group.h4
-rw-r--r--src/display/drawing-image.cpp52
-rw-r--r--src/display/drawing-image.h2
-rw-r--r--src/display/drawing-item.cpp96
-rw-r--r--src/display/drawing-item.h10
-rw-r--r--src/display/drawing-shape.cpp54
-rw-r--r--src/display/drawing-shape.h4
-rw-r--r--src/display/drawing-surface.cpp24
-rw-r--r--src/display/drawing-surface.h2
-rw-r--r--src/display/drawing-text.cpp120
-rw-r--r--src/display/drawing-text.h8
-rw-r--r--src/display/drawing.cpp16
-rw-r--r--src/display/drawing.h2
-rw-r--r--src/display/nr-filter-image.cpp12
-rw-r--r--src/display/nr-filter-slot.cpp6
-rw-r--r--src/display/nr-filter-slot.h2
-rw-r--r--src/display/nr-filter.cpp4
-rw-r--r--src/display/nr-filter.h4
-rw-r--r--src/display/nr-style.cpp32
-rw-r--r--src/display/nr-style.h8
-rw-r--r--src/document.cpp12
-rw-r--r--src/extension/internal/emf-inout.cpp2
-rw-r--r--src/extension/internal/emf-inout.h1
-rw-r--r--src/extension/internal/emf-print.cpp40
-rw-r--r--src/extension/internal/emf-print.h3
-rw-r--r--src/extension/internal/image-resolution.cpp6
-rw-r--r--src/extension/internal/text_reassemble.c137
-rw-r--r--src/extension/internal/text_reassemble.h7
-rw-r--r--src/extension/internal/wmf-inout.cpp44
-rw-r--r--src/helper/pixbuf-ops.cpp4
-rw-r--r--src/helper/png-write.cpp12
-rw-r--r--src/libuemf/README6
-rw-r--r--src/libuemf/uemf_utf.c95
-rw-r--r--src/libuemf/uwmf.c22
-rw-r--r--src/marker.cpp267
-rw-r--r--src/marker.h15
-rw-r--r--src/sp-image.cpp347
-rw-r--r--src/sp-image.h14
-rw-r--r--src/sp-mesh-array.cpp4
-rw-r--r--src/sp-pattern.cpp67
-rw-r--r--src/sp-pattern.h6
-rw-r--r--src/sp-root.cpp327
-rw-r--r--src/sp-root.h15
-rw-r--r--src/sp-symbol.cpp234
-rw-r--r--src/sp-symbol.h15
-rw-r--r--src/ui/cache/svg_preview_cache.cpp4
-rw-r--r--src/ui/dialog/clonetiler.cpp4
-rw-r--r--src/ui/tools/flood-tool.cpp12
-rw-r--r--src/ui/tools/spray-tool.cpp2
-rw-r--r--src/uri-references.cpp13
-rw-r--r--src/viewbox.cpp277
-rw-r--r--src/viewbox.h66
-rw-r--r--src/widgets/icon.cpp4
75 files changed, 4191 insertions, 2445 deletions
diff --git a/po/nl.po b/po/nl.po
index 9bcb5d711..5be75b04b 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -59,7 +59,7 @@ msgstr ""
"Project-Id-Version: inkscape 0.49\n"
"Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n"
"POT-Creation-Date: 2014-01-19 16:41+0100\n"
-"PO-Revision-Date: 2014-01-19 22:01+0100\n"
+"PO-Revision-Date: 2014-02-05 19:58+0100\n"
"Last-Translator: Kris De Gussem <Kris.DeGussem@gmail.com>\n"
"Language-Team: Dutch\n"
"MIME-Version: 1.0\n"
@@ -3742,49 +3742,49 @@ msgstr "Tekstballonnen"
#: ../share/symbols/symbols.h:134
msgctxt "Symbol"
msgid "Thought Balloon"
-msgstr ""
+msgstr "Gedachtenballon"
#. Symbols: ./BalloonSymbols.svg
#: ../share/symbols/symbols.h:135
msgctxt "Symbol"
msgid "Dream Speaking"
-msgstr ""
+msgstr "Wensballon"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:136
msgctxt "Symbol"
msgid "Flow Chart Shapes"
-msgstr ""
+msgstr "Stroomdiagramvormen"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:137
msgctxt "Symbol"
msgid "Process"
-msgstr ""
+msgstr "Proces"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:138
msgctxt "Symbol"
msgid "Predefined Process"
-msgstr ""
+msgstr "Voorgedefinieerd proces"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:139
msgctxt "Symbol"
msgid "Alternate Process"
-msgstr ""
+msgstr "Alternatief proces"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:140
msgctxt "Symbol"
msgid "Extract"
-msgstr ""
+msgstr "Extraheren"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:141
msgctxt "Symbol"
msgid "Manual Input"
-msgstr ""
+msgstr "Manuele invoer"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:142
@@ -3796,25 +3796,25 @@ msgstr "Samenvoegen"
#: ../share/symbols/symbols.h:143
msgctxt "Symbol"
msgid "Delay"
-msgstr ""
+msgstr "Vertraging"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:144
msgctxt "Symbol"
msgid "Data I/O"
-msgstr ""
+msgstr "Data I/O"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:145
msgctxt "Symbol"
msgid "Internal Storage"
-msgstr ""
+msgstr "Interne opslag"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:146
msgctxt "Symbol"
msgid "Card"
-msgstr ""
+msgstr "Kaart"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:147
@@ -3826,49 +3826,49 @@ msgstr "Document"
#: ../share/symbols/symbols.h:148
msgctxt "Symbol"
msgid "Direct Access Storage"
-msgstr ""
+msgstr "Opslag met directe toegang"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:149
msgctxt "Symbol"
msgid "Stored Data"
-msgstr ""
+msgstr "Opgeslagen data"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:150
msgctxt "Symbol"
msgid "Magnetic Disk (Database)"
-msgstr ""
+msgstr "Magneetschijf (database)"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:151
msgctxt "Symbol"
msgid "Punched Tape"
-msgstr ""
+msgstr "Ponskaart"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:152
msgctxt "Symbol"
msgid "Terminator"
-msgstr ""
+msgstr "Terminator"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:153
msgctxt "Symbol"
msgid "Thick Arrow"
-msgstr ""
+msgstr "Dikke pijl"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:154
msgctxt "Symbol"
msgid "Transfer"
-msgstr ""
+msgstr "Transfer"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:155
msgctxt "Symbol"
msgid "Decision"
-msgstr ""
+msgstr "Beslissing"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:156
@@ -3892,19 +3892,19 @@ msgstr ""
#: ../share/symbols/symbols.h:159
msgctxt "Symbol"
msgid "Connector"
-msgstr ""
+msgstr "Verbinding"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:160
msgctxt "Symbol"
msgid "Logical Or"
-msgstr ""
+msgstr "Logische of"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:161
msgctxt "Symbol"
msgid "Logical And"
-msgstr ""
+msgstr "Logische en"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:162
@@ -3922,7 +3922,7 @@ msgstr "Voorbereiding"
#: ../share/symbols/symbols.h:164
msgctxt "Symbol"
msgid "Display"
-msgstr ""
+msgstr "Display"
#. Symbols: ./FlowSymbols.svg
#: ../share/symbols/symbols.h:165
@@ -3934,7 +3934,7 @@ msgstr "Sorteren"
#: ../share/symbols/symbols.h:166
msgctxt "Symbol"
msgid "Collate"
-msgstr ""
+msgstr "Vergelijken"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:167
@@ -3946,61 +3946,61 @@ msgstr "Logicasymbolen"
#: ../share/symbols/symbols.h:168
msgctxt "Symbol"
msgid "Xnor Gate"
-msgstr ""
+msgstr "Xnor-poort"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:169
msgctxt "Symbol"
msgid "Xor Gate"
-msgstr ""
+msgstr "Xor-poort"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:170
msgctxt "Symbol"
msgid "Nor Gate"
-msgstr ""
+msgstr "Nor-poort"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:171
msgctxt "Symbol"
msgid "Or Gate"
-msgstr ""
+msgstr "Of-poort"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:172
msgctxt "Symbol"
msgid "Nand Gate"
-msgstr ""
+msgstr "Nand-poort"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:173
msgctxt "Symbol"
msgid "And Gate"
-msgstr ""
+msgstr "En-poort"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:174
msgctxt "Symbol"
msgid "Buffer"
-msgstr ""
+msgstr "Buffer"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:175
msgctxt "Symbol"
msgid "Not Gate"
-msgstr ""
+msgstr "Not-poort"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:176
msgctxt "Symbol"
msgid "Buffer Small"
-msgstr ""
+msgstr "Buffer klein"
#. Symbols: ./LogicSymbols.svg
#: ../share/symbols/symbols.h:177
msgctxt "Symbol"
msgid "Not Gate Small"
-msgstr ""
+msgstr "Not-poort klein"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:178
@@ -4024,13 +4024,13 @@ msgstr "Jeugdhotel"
#: ../share/symbols/symbols.h:181
msgctxt "Symbol"
msgid "Shelter"
-msgstr ""
+msgstr "Onderdak"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:182
msgctxt "Symbol"
msgid "Motel"
-msgstr ""
+msgstr "Motel"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:183
@@ -4054,7 +4054,7 @@ msgstr "Chalet"
#: ../share/symbols/symbols.h:186
msgctxt "Symbol"
msgid "Caravan Park"
-msgstr ""
+msgstr "Camperplaats"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:187
@@ -4096,49 +4096,49 @@ msgstr "Bibliotheek"
#: ../share/symbols/symbols.h:193
msgctxt "Symbol"
msgid "Town Hall"
-msgstr "Stadshuis"
+msgstr "Stadhuis"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:194
msgctxt "Symbol"
msgid "Court"
-msgstr ""
+msgstr "Gerechtsgebouw"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:195
msgctxt "Symbol"
msgid "Fire Station / House"
-msgstr ""
+msgstr "Brandweer"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:196
msgctxt "Symbol"
msgid "Police Station"
-msgstr ""
+msgstr "Politiekantoor"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:197
msgctxt "Symbol"
msgid "Prison"
-msgstr ""
+msgstr "Gevangenis"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:198
msgctxt "Symbol"
msgid "Post Office"
-msgstr ""
+msgstr "Postkantoor"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:199
msgctxt "Symbol"
msgid "Public Building"
-msgstr ""
+msgstr "Publiek gebouw"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:200
msgctxt "Symbol"
msgid "Recycling"
-msgstr ""
+msgstr "Recyclage"
#. Symbols: ./MapSymbols.svg
#: ../share/symbols/symbols.h:201
@@ -26602,7 +26602,7 @@ msgstr "Selecteer een overgang voor het huidige kleurverloop"
#: ../src/widgets/gradient-toolbar.cpp:1162
msgid "Stops:"
-msgstr "Overgangen:"
+msgstr "Overgang:"
#. Label
#: ../src/widgets/gradient-toolbar.cpp:1174
diff --git a/po/uk.po b/po/uk.po
index 27ee4e328..59fdd68bd 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -3,17 +3,17 @@
# This file is distributed under the same license as the Inkscape package.
# Copyright (C) 2001, 2007, 2008, 2009 Free Software Foundation, Inc.
#
+#: ../share/filters/filters.svg.h:1
# Yuri Syrota <rasta@renome.rovno.ua>, 2000.
# Maxim Dziumanenko <dziumanenko@gmail.com>, 2004-2007.
# Alex <pilipchukap@rambler.ru>, 2005.
-# Yuri Chornoivan <yurchor@ukr.net>, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
-#: ../share/filters/filters.svg.h:1
+# Yuri Chornoivan <yurchor@ukr.net>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014.
msgid ""
msgstr ""
"Project-Id-Version: uk\n"
"Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2013-12-31 11:34+0200\n"
-"PO-Revision-Date: 2013-12-31 14:55+0200\n"
+"POT-Creation-Date: 2014-02-05 19:26+0200\n"
+"PO-Revision-Date: 2014-02-05 19:30+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <translation@linux.org.ua>\n"
"Language: uk\n"
@@ -1008,7 +1008,7 @@ msgstr "Чорне світло"
#: ../src/extension/internal/filter/transparency.h:345
#: ../src/filter-enums.cpp:67 ../src/ui/dialog/clonetiler.cpp:832
#: ../src/ui/dialog/clonetiler.cpp:983
-#: ../src/ui/dialog/document-properties.cpp:153
+#: ../src/ui/dialog/document-properties.cpp:154
#: ../share/extensions/color_blackandwhite.inx.h:2
#: ../share/extensions/color_brighter.inx.h:2
#: ../share/extensions/color_custom.inx.h:15
@@ -3296,6 +3296,1862 @@ msgstr "Сукно (растр)"
msgid "Old paint (bitmap)"
msgstr "Стара картина (растр)"
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:2
+msgctxt "Symbol"
+msgid "Flow Chart Shapes"
+msgstr "Форми блок-схем"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:3
+msgctxt "Symbol"
+msgid "Process"
+msgstr "Обробляти"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:4
+msgctxt "Symbol"
+msgid "Predefined Process"
+msgstr "Наперед визначений процес"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:5
+msgctxt "Symbol"
+msgid "Alternate Process"
+msgstr "Альтернативний процес"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:6
+msgctxt "Symbol"
+msgid "Extract"
+msgstr "Видобування"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:7
+msgctxt "Symbol"
+msgid "Manual Input"
+msgstr "Ручний ввід"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:8
+msgctxt "Symbol"
+msgid "Merge"
+msgstr "Об’єднання"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:9
+msgctxt "Symbol"
+msgid "Delay"
+msgstr "Затримка"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:10
+msgctxt "Symbol"
+msgid "Data I/O"
+msgstr "Введення-виведення даних"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:11
+msgctxt "Symbol"
+msgid "Internal Storage"
+msgstr "Внутрішня пам'ять"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:12
+msgctxt "Symbol"
+msgid "Card"
+msgstr "Картка"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:13
+msgctxt "Symbol"
+msgid "Document"
+msgstr "Документ"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:14
+msgctxt "Symbol"
+msgid "Direct Access Storage"
+msgstr "Сховище даних безпосереднього доступу"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:15
+msgctxt "Symbol"
+msgid "Stored Data"
+msgstr "Збережені дані"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:16
+msgctxt "Symbol"
+msgid "Magnetic Disk (Database)"
+msgstr "Магнітний диск (база даних)"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:17
+msgctxt "Symbol"
+msgid "Punched Tape"
+msgstr "Перфострічка"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:18
+msgctxt "Symbol"
+msgid "Terminator"
+msgstr "Завершення"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:19
+msgctxt "Symbol"
+msgid "Thick Arrow"
+msgstr "Товста стрілка"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:20
+msgctxt "Symbol"
+msgid "Transfer"
+msgstr "Передавання"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:21
+msgctxt "Symbol"
+msgid "Decision"
+msgstr "Рішення"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:22
+msgctxt "Symbol"
+msgid "Flow Arrow"
+msgstr "Стрілка потоку"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:23
+msgctxt "Symbol"
+msgid "Circle Arrow"
+msgstr "Кругова стрілка"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:24
+msgctxt "Symbol"
+msgid "Off-Page Connector"
+msgstr "З'єднання поза сторінкою"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:25
+msgctxt "Symbol"
+msgid "Connector"
+msgstr "З’єднання"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:26
+msgctxt "Symbol"
+msgid "Logical Or"
+msgstr "Логічне «АБО»"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:27
+msgctxt "Symbol"
+msgid "Logical And"
+msgstr "Логічне «ТА»"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:28
+msgctxt "Symbol"
+msgid "Manual Operation"
+msgstr "Ручна дія"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:29
+msgctxt "Symbol"
+msgid "Preparation"
+msgstr "Підготовка"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:30
+msgctxt "Symbol"
+msgid "Display"
+msgstr "Показ"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:31
+msgctxt "Symbol"
+msgid "Sort"
+msgstr "Упорядкування"
+
+#. Symbols: ./FlowSymbols.svg
+#: ../share/symbols/symbols.h:32
+msgctxt "Symbol"
+msgid "Collate"
+msgstr "Об’єднання"
+
+#. Symbols: ./BalloonSymbols.svg
+#: ../share/symbols/symbols.h:33
+msgctxt "Symbol"
+msgid "Word Balloons"
+msgstr "Мовні бульки"
+
+#. Symbols: ./BalloonSymbols.svg
+#: ../share/symbols/symbols.h:34
+msgctxt "Symbol"
+msgid "Thought Balloon"
+msgstr "Бульки думок"
+
+#. Symbols: ./BalloonSymbols.svg
+#: ../share/symbols/symbols.h:35
+msgctxt "Symbol"
+msgid "Dream Speaking"
+msgstr "Висловлення мрій"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:36
+msgctxt "Symbol"
+msgid "Map Symbols"
+msgstr "Символи карт"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:37
+msgctxt "Symbol"
+msgid "Bed and Breakfast"
+msgstr "Ночівля і сніданок"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:38
+msgctxt "Symbol"
+msgid "Youth Hostel"
+msgstr "Молодіжний гуртожиток"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:39
+msgctxt "Symbol"
+msgid "Shelter"
+msgstr "Притулок"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:40
+msgctxt "Symbol"
+msgid "Motel"
+msgstr "Мотель"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:41
+msgctxt "Symbol"
+msgid "Hotel"
+msgstr "Готель"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:42
+msgctxt "Symbol"
+msgid "Hostel"
+msgstr "Турбаза"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:43
+msgctxt "Symbol"
+msgid "Chalet"
+msgstr "Шале"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:44
+msgctxt "Symbol"
+msgid "Caravan Park"
+msgstr "Стоянка для фургонів"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:45
+msgctxt "Symbol"
+msgid "Camping"
+msgstr "Кемпінг"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:46
+msgctxt "Symbol"
+msgid "Alpine Hut"
+msgstr "Альпійська хижа"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:47
+msgctxt "Symbol"
+msgid "Bench or Park"
+msgstr "Лава або парк"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:48
+msgctxt "Symbol"
+msgid "Playground"
+msgstr "Ігровий майданчик"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:49
+msgctxt "Symbol"
+msgid "Fountain"
+msgstr "Фонтан"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:50
+msgctxt "Symbol"
+msgid "Library"
+msgstr "Бібліотека"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:51
+msgctxt "Symbol"
+msgid "Town Hall"
+msgstr "Ратуша"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:52
+msgctxt "Symbol"
+msgid "Court"
+msgstr "Суд"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:53
+msgctxt "Symbol"
+msgid "Fire Station / House"
+msgstr "Пожежна станція"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:54
+msgctxt "Symbol"
+msgid "Police Station"
+msgstr "Поліційна дільниця"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:55
+msgctxt "Symbol"
+msgid "Prison"
+msgstr "В’язниця"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:56
+msgctxt "Symbol"
+msgid "Post Office"
+msgstr "Поштове відділення"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:57
+msgctxt "Symbol"
+msgid "Public Building"
+msgstr "Громадська будівля"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:58
+msgctxt "Symbol"
+msgid "Recycling"
+msgstr "Пункт переробки"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:59
+msgctxt "Symbol"
+msgid "Survey Point"
+msgstr "Оглядовий майданчик"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:60
+msgctxt "Symbol"
+msgid "Toll Booth"
+msgstr "Будка"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:61
+msgctxt "Symbol"
+msgid "Lift Gate"
+msgstr "Підйомні ворота"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:62
+msgctxt "Symbol"
+msgid "Steps"
+msgstr "Сходи"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:63
+msgctxt "Symbol"
+msgid "Stile"
+msgstr "Турнікет"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:64
+msgctxt "Symbol"
+msgid "Kissing Gate"
+msgstr "Вузька хвіртка"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:65
+msgctxt "Symbol"
+msgid "Gate"
+msgstr "Ворота"
+
+#. Symbols: ./MapSymbols.svg
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:66 ../share/symbols/symbols.h:295
+#: ../share/symbols/symbols.h:296
+msgctxt "Symbol"
+msgid "Exit"
+msgstr "Вихід"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:67
+msgctxt "Symbol"
+msgid "Entrance"
+msgstr "Вхід"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:68
+msgctxt "Symbol"
+msgid "Cycle Barrier"
+msgstr "Круговий бар’єр"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:69
+msgctxt "Symbol"
+msgid "Cattle Grid"
+msgstr "Огорожа"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:70
+msgctxt "Symbol"
+msgid "Bollard"
+msgstr "Пал"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:71
+msgctxt "Symbol"
+msgid "University"
+msgstr "Університет"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:72
+msgctxt "Symbol"
+msgid "High/Secondary School"
+msgstr "Школа третього ступеня"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:73
+msgctxt "Symbol"
+msgid "School"
+msgstr "Школа"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:74
+msgctxt "Symbol"
+msgid "Kindergatten"
+msgstr "Дитячий садок"
+
+#. Symbols: ./MapSymbols.svg
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:75 ../share/symbols/symbols.h:229
+#: ../share/symbols/symbols.h:230
+msgctxt "Symbol"
+msgid "Nursery"
+msgstr "Ясла"
+
+#. Symbols: ./MapSymbols.svg
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:76 ../share/symbols/symbols.h:255
+#: ../share/symbols/symbols.h:256
+msgctxt "Symbol"
+msgid "Restaurant"
+msgstr "Ресторан"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:77
+msgctxt "Symbol"
+msgid "Pub"
+msgstr "Пив’ярня"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:78
+msgctxt "Symbol"
+msgid "Deserts/Cakes Shop"
+msgstr "Десерти та печиво"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:79
+msgctxt "Symbol"
+msgid "Fast Food"
+msgstr "Фастфуд"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:80
+msgctxt "Symbol"
+msgid "Public Tap/Water"
+msgstr "Соки і води"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:81
+msgctxt "Symbol"
+msgid "Cafe"
+msgstr "Кав’ярня"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:82
+msgctxt "Symbol"
+msgid "Beer Garden"
+msgstr "Пивний сад"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:83
+msgctxt "Symbol"
+msgid "Wine Bar"
+msgstr "Бар"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:84
+msgctxt "Symbol"
+msgid "Opticians/Eye Doctors"
+msgstr "Окуліст"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:85
+msgctxt "Symbol"
+msgid "Dentist"
+msgstr "Дантист"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:86
+msgctxt "Symbol"
+msgid "Veterinarian"
+msgstr "Ветеринарія"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:87
+msgctxt "Symbol"
+msgid "Drugs Dispensary"
+msgstr "Аптека"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:88
+msgctxt "Symbol"
+msgid "Pharmacy"
+msgstr "Аптека"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:89
+msgctxt "Symbol"
+msgid "Accident & Emergency"
+msgstr "Служби реагування на надзвичайні ситуації"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:90
+msgctxt "Symbol"
+msgid "Hospital"
+msgstr "Лікарня"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:91
+msgctxt "Symbol"
+msgid "Doctors"
+msgstr "Лікар"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:92
+msgctxt "Symbol"
+msgid "Scrub Land"
+msgstr "Чагарники"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:93
+msgctxt "Symbol"
+msgid "Swamp"
+msgstr "Болото"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:94
+msgctxt "Symbol"
+msgid "Hills"
+msgstr "Пагорби"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:95
+msgctxt "Symbol"
+msgid "Grass Land"
+msgstr "Луки"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:96
+msgctxt "Symbol"
+msgid "Deciduous Forest"
+msgstr "Листяний ліс"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:97
+msgctxt "Symbol"
+msgid "Mixed Forest"
+msgstr "Мішаний ліс"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:98
+msgctxt "Symbol"
+msgid "Coniferous Forest"
+msgstr "Хвойний ліс"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:99
+msgctxt "Symbol"
+msgid "Church or Place of Worship"
+msgstr "Церква або місце поклоніння"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:100
+msgctxt "Symbol"
+msgid "Bank"
+msgstr "Банк"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:101
+msgctxt "Symbol"
+msgid "Power Lines"
+msgstr "Лінії електропередачі"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:102
+msgctxt "Symbol"
+msgid "Watch Tower"
+msgstr "Спостережна вежа"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:103
+msgctxt "Symbol"
+msgid "Transmitter"
+msgstr "Радіопередавач"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:104
+msgctxt "Symbol"
+msgid "Village"
+msgstr "Село"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:105
+msgctxt "Symbol"
+msgid "Town"
+msgstr "Місто"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:106
+msgctxt "Symbol"
+msgid "Hamlet"
+msgstr "Хутір"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:107
+msgctxt "Symbol"
+msgid "City"
+msgstr "Місто"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:108
+msgctxt "Symbol"
+msgid "Peak"
+msgstr "Пік"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:109
+msgctxt "Symbol"
+msgid "Mountain Pass"
+msgstr "Ущелина"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:110
+msgctxt "Symbol"
+msgid "Mine"
+msgstr "Шахта"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:111
+msgctxt "Symbol"
+msgid "Military Complex"
+msgstr "Військовий комплекс"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:112
+msgctxt "Symbol"
+msgid "Embassy"
+msgstr "Посольство"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:113
+msgctxt "Symbol"
+msgid "Toy Shop"
+msgstr "Магазин іграшок"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:114
+msgctxt "Symbol"
+msgid "Supermarket"
+msgstr "Супермаркет"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:115
+msgctxt "Symbol"
+msgid "Jewlers"
+msgstr "Ювелірна крамниця"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:116
+msgctxt "Symbol"
+msgid "Hairdressers"
+msgstr "Перукарня"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:117
+msgctxt "Symbol"
+msgid "Greengrocer"
+msgstr "Овочевий магазин"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:118
+msgctxt "Symbol"
+msgid "Gift Shop"
+msgstr "Магазин подарунків"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:119
+msgctxt "Symbol"
+msgid "Garden Center"
+msgstr "Садовий центр"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:120
+msgctxt "Symbol"
+msgid "Florist"
+msgstr "Квіткова крамниця"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:121
+msgctxt "Symbol"
+msgid "Fish Monger"
+msgstr "Торгівля рибою"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:122
+msgctxt "Symbol"
+msgid "Real Estate"
+msgstr "Агенція нерухомості"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:123
+msgctxt "Symbol"
+msgid "Hardware / DIY"
+msgstr "Обладнання і торгівля запчастинами"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:124
+msgctxt "Symbol"
+msgid "Shop"
+msgstr "Крамниці"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:125
+msgctxt "Symbol"
+msgid "Confectioner"
+msgstr "Кондитерська"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:126
+msgctxt "Symbol"
+msgid "Computer Shop"
+msgstr "Комп’ютерна крамниця"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:127
+msgctxt "Symbol"
+msgid "Clothing"
+msgstr "Торгівля одягом"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:128
+msgctxt "Symbol"
+msgid "Mechanic"
+msgstr "Механічна майстерня"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:129
+msgctxt "Symbol"
+msgid "Car Dealer"
+msgstr "Продаж автомобілів"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:130
+msgctxt "Symbol"
+msgid "Butcher"
+msgstr "Торгівля м’ясом"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:131
+msgctxt "Symbol"
+msgid "Meat Shop"
+msgstr "М’ясні вироби"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:132
+msgctxt "Symbol"
+msgid "Bicycle Shop"
+msgstr "Велокрамниця"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:133
+msgctxt "Symbol"
+msgid "Baker"
+msgstr "Пекарня"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:134
+msgctxt "Symbol"
+msgid "Off License / Liquor Store"
+msgstr "Торгівля спиртними напоями"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:135
+msgctxt "Symbol"
+msgid "Wind Surfing"
+msgstr "Віндсерфінг"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:136
+msgctxt "Symbol"
+msgid "Tennis"
+msgstr "Теніс"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:137
+msgctxt "Symbol"
+msgid "Outdoor Pool"
+msgstr "Відкритий басейн"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:138
+msgctxt "Symbol"
+msgid "Indoor Pool"
+msgstr "Критий басейн"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:139
+msgctxt "Symbol"
+msgid "Skiing"
+msgstr "Катання на лижах"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:140
+msgctxt "Symbol"
+msgid "Sailing"
+msgstr "Парусний спорт"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:141
+msgctxt "Symbol"
+msgid "Leisure Center"
+msgstr "Центр дозвілля"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:142
+msgctxt "Symbol"
+msgid "Ice Skating"
+msgstr "Катання на ковзанах"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:143
+msgctxt "Symbol"
+msgid "Equine Sports"
+msgstr "Кінний спорт"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:144
+msgctxt "Symbol"
+msgid "Rock Climbing"
+msgstr "Скелелазання"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:145
+msgctxt "Symbol"
+msgid "Gym"
+msgstr "Тренажерна зала"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:146
+msgctxt "Symbol"
+msgid "Golf"
+msgstr "Гольф"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:147
+msgctxt "Symbol"
+msgid "Diving"
+msgstr "Пірнання"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:148
+msgctxt "Symbol"
+msgid "Archery"
+msgstr "Стрільба з лука"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:149
+msgctxt "Symbol"
+msgid "Zoo"
+msgstr "Зоопарк"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:150
+msgctxt "Symbol"
+msgid "Wreck"
+msgstr "Місце катастрофи"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:151
+msgctxt "Symbol"
+msgid "Water Wheel"
+msgstr "Водяне колесо"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:152
+msgctxt "Symbol"
+msgid "Point of Interest"
+msgstr "Цікаве місце"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:153
+msgctxt "Symbol"
+msgid "Theater"
+msgstr "Театр"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:154
+msgctxt "Symbol"
+msgid "Park / Picnic Area"
+msgstr "Парк і місця для пікніків"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:155
+msgctxt "Symbol"
+msgid "Monument"
+msgstr "Монумент"
+
+#. Symbols: ./MapSymbols.svg
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:156 ../share/symbols/symbols.h:235
+#: ../share/symbols/symbols.h:236
+msgctxt "Symbol"
+msgid "Information"
+msgstr "Довідкова служба"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:157
+msgctxt "Symbol"
+msgid "Beach"
+msgstr "Пляж"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:158
+msgctxt "Symbol"
+msgid "Battle Location"
+msgstr "Місце битви"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:159
+msgctxt "Symbol"
+msgid "Archaeology / Ruins"
+msgstr "Археологічна пам’ятка"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:160
+msgctxt "Symbol"
+msgid "Walking"
+msgstr "Піший маршрут"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:161
+msgctxt "Symbol"
+msgid "Train"
+msgstr "Потяг"
+
+#. Symbols: ./MapSymbols.svg
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:162 ../share/symbols/symbols.h:243
+#: ../share/symbols/symbols.h:244
+msgctxt "Symbol"
+msgid "Taxi"
+msgstr "Таксі"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:163
+msgctxt "Symbol"
+msgid "Underground Rail"
+msgstr "Метро"
+
+#. Symbols: ./MapSymbols.svg
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:164 ../share/symbols/symbols.h:253
+#: ../share/symbols/symbols.h:254
+msgctxt "Symbol"
+msgid "Car Rental"
+msgstr "Оренда автомобілів"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:165
+msgctxt "Symbol"
+msgid "Bike Rental"
+msgstr "Оренда велосипедів"
+
+#. Symbols: ./MapSymbols.svg
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:166 ../share/symbols/symbols.h:241
+#: ../share/symbols/symbols.h:242
+msgctxt "Symbol"
+msgid "Heliport"
+msgstr "Вертодром"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:167
+msgctxt "Symbol"
+msgid "Carpool"
+msgstr "Автостоп"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:168
+msgctxt "Symbol"
+msgid "Flood Gate"
+msgstr "Шлюз"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:169
+msgctxt "Symbol"
+msgid "Shipping"
+msgstr "Перевезення кораблем"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:170
+msgctxt "Symbol"
+msgid "Disabled Parking"
+msgstr "Паркування для осіб з обмеженими можливостями"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:171
+msgctxt "Symbol"
+msgid "Paid Parking"
+msgstr "Платний паркувальний майданчик"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:172
+msgctxt "Symbol"
+msgid "Bike Parking"
+msgstr "Велопаркінґ"
+
+#. Symbols: ./MapSymbols.svg
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:173 ../share/symbols/symbols.h:287
+#: ../share/symbols/symbols.h:288
+msgctxt "Symbol"
+msgid "Parking"
+msgstr "Паркувальний майданчик"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:174
+msgctxt "Symbol"
+msgid "Marina"
+msgstr "Пристань"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:175
+msgctxt "Symbol"
+msgid "Fuel Station"
+msgstr "Заправна станція"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:176
+msgctxt "Symbol"
+msgid "Bus Stop"
+msgstr "Автобусна зупинка"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:177
+msgctxt "Symbol"
+msgid "Bus Station"
+msgstr "Автостанція"
+
+#. Symbols: ./MapSymbols.svg
+#: ../share/symbols/symbols.h:178
+msgctxt "Symbol"
+msgid "Airport"
+msgstr "Аеропорт"
+
+#. Symbols: ./LogicSymbols.svg
+#: ../share/symbols/symbols.h:179
+msgctxt "Symbol"
+msgid "Logic Symbols"
+msgstr "Символи логіки"
+
+#. Symbols: ./LogicSymbols.svg
+#: ../share/symbols/symbols.h:180
+msgctxt "Symbol"
+msgid "Xnor Gate"
+msgstr "Ключ виключне заперечувальне АБО»"
+
+#. Symbols: ./LogicSymbols.svg
+#: ../share/symbols/symbols.h:181
+msgctxt "Symbol"
+msgid "Xor Gate"
+msgstr "Ключ виключне І"
+
+#. Symbols: ./LogicSymbols.svg
+#: ../share/symbols/symbols.h:182
+msgctxt "Symbol"
+msgid "Nor Gate"
+msgstr "Ключ АБО-НІ"
+
+#. Symbols: ./LogicSymbols.svg
+#: ../share/symbols/symbols.h:183
+msgctxt "Symbol"
+msgid "Or Gate"
+msgstr "Ключ АБО"
+
+#. Symbols: ./LogicSymbols.svg
+#: ../share/symbols/symbols.h:184
+msgctxt "Symbol"
+msgid "Nand Gate"
+msgstr "Ключ І-НІ"
+
+#. Symbols: ./LogicSymbols.svg
+#: ../share/symbols/symbols.h:185
+msgctxt "Symbol"
+msgid "And Gate"
+msgstr "Ключ І"
+
+#. Symbols: ./LogicSymbols.svg
+#: ../share/symbols/symbols.h:186
+msgctxt "Symbol"
+msgid "Buffer"
+msgstr "Буфер"
+
+#. Symbols: ./LogicSymbols.svg
+#: ../share/symbols/symbols.h:187
+msgctxt "Symbol"
+msgid "Not Gate"
+msgstr "Ключ НІ"
+
+#. Symbols: ./LogicSymbols.svg
+#: ../share/symbols/symbols.h:188
+msgctxt "Symbol"
+msgid "Buffer Small"
+msgstr "Малий буфер"
+
+#. Symbols: ./LogicSymbols.svg
+#: ../share/symbols/symbols.h:189
+msgctxt "Symbol"
+msgid "Not Gate Small"
+msgstr "Малий ключ НІ"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:190
+msgctxt "Symbol"
+msgid "AIGA Symbol Signs"
+msgstr "Знаки-символи AIGA"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:191 ../share/symbols/symbols.h:192
+msgctxt "Symbol"
+msgid "Telephone"
+msgstr "Телефон"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:193 ../share/symbols/symbols.h:194
+msgctxt "Symbol"
+msgid "Mail"
+msgstr "Пошта"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:195 ../share/symbols/symbols.h:196
+msgctxt "Symbol"
+msgid "Currency Exchange"
+msgstr "Обмін валют"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:197 ../share/symbols/symbols.h:198
+msgctxt "Symbol"
+msgid "Currency Exchange - Euro"
+msgstr "Обмін валют — євро"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:199 ../share/symbols/symbols.h:200
+msgctxt "Symbol"
+msgid "Cashier"
+msgstr "Каса"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:201 ../share/symbols/symbols.h:202
+msgctxt "Symbol"
+msgid "First Aid"
+msgstr "Перша допомога"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:203 ../share/symbols/symbols.h:204
+msgctxt "Symbol"
+msgid "Lost and Found"
+msgstr "Втрачено і знайдено"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:205 ../share/symbols/symbols.h:206
+msgctxt "Symbol"
+msgid "Coat Check"
+msgstr "Гардероб"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:207 ../share/symbols/symbols.h:208
+msgctxt "Symbol"
+msgid "Baggage Lockers"
+msgstr "Шафи для зберігання речей"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:209 ../share/symbols/symbols.h:210
+msgctxt "Symbol"
+msgid "Escalator"
+msgstr "Ескалатор"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:211 ../share/symbols/symbols.h:212
+msgctxt "Symbol"
+msgid "Escalator Down"
+msgstr "Ескалатор вниз"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:213 ../share/symbols/symbols.h:214
+msgctxt "Symbol"
+msgid "Escalator Up"
+msgstr "Ескалатор вгору"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:215 ../share/symbols/symbols.h:216
+msgctxt "Symbol"
+msgid "Stairs"
+msgstr "Сходи"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:217 ../share/symbols/symbols.h:218
+msgctxt "Symbol"
+msgid "Stairs Down"
+msgstr "Сходи вниз"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:219 ../share/symbols/symbols.h:220
+msgctxt "Symbol"
+msgid "Stairs Up"
+msgstr "Сходи вгору"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:221 ../share/symbols/symbols.h:222
+msgctxt "Symbol"
+msgid "Elevator"
+msgstr "Ліфт"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:223 ../share/symbols/symbols.h:224
+msgctxt "Symbol"
+msgid "Toilets - Men"
+msgstr "Чоловічий туалет"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:225 ../share/symbols/symbols.h:226
+msgctxt "Symbol"
+msgid "Toilets - Women"
+msgstr "Жіночий туалет"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:227 ../share/symbols/symbols.h:228
+msgctxt "Symbol"
+msgid "Toilets"
+msgstr "Туалети"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:231 ../share/symbols/symbols.h:232
+msgctxt "Symbol"
+msgid "Drinking Fountain"
+msgstr "Питний фонтанчик"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:233 ../share/symbols/symbols.h:234
+msgctxt "Symbol"
+msgid "Waiting Room"
+msgstr "Зала очікування"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:237 ../share/symbols/symbols.h:238
+msgctxt "Symbol"
+msgid "Hotel Information"
+msgstr "Інформація щодо готелів"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:239 ../share/symbols/symbols.h:240
+msgctxt "Symbol"
+msgid "Air Transportation"
+msgstr "Повітряний транспорт"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:245 ../share/symbols/symbols.h:246
+msgctxt "Symbol"
+msgid "Bus"
+msgstr "Автобус"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:247 ../share/symbols/symbols.h:248
+msgctxt "Symbol"
+msgid "Ground Transportation"
+msgstr "Наземний транспорт"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:249 ../share/symbols/symbols.h:250
+msgctxt "Symbol"
+msgid "Rail Transportation"
+msgstr "Залізничний транспорт"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:251 ../share/symbols/symbols.h:252
+msgctxt "Symbol"
+msgid "Water Transportation"
+msgstr "Водний транспорт"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:257 ../share/symbols/symbols.h:258
+msgctxt "Symbol"
+msgid "Coffeeshop"
+msgstr "Кав’ярня"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:259 ../share/symbols/symbols.h:260
+msgctxt "Symbol"
+msgid "Bar"
+msgstr "Бар"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:261 ../share/symbols/symbols.h:262
+msgctxt "Symbol"
+msgid "Shops"
+msgstr "Крамниці"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:263 ../share/symbols/symbols.h:264
+msgctxt "Symbol"
+msgid "Barber Shop - Beauty Salon"
+msgstr "Перукарня і салон краси"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:265 ../share/symbols/symbols.h:266
+msgctxt "Symbol"
+msgid "Barber Shop"
+msgstr "Перукарня"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:267 ../share/symbols/symbols.h:268
+msgctxt "Symbol"
+msgid "Beauty Salon"
+msgstr "Салон краси"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:269 ../share/symbols/symbols.h:270
+msgctxt "Symbol"
+msgid "Ticket Purchase"
+msgstr "Придбання квитків"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:271 ../share/symbols/symbols.h:272
+msgctxt "Symbol"
+msgid "Baggage Check In"
+msgstr "Приймання багажу"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:273 ../share/symbols/symbols.h:274
+msgctxt "Symbol"
+msgid "Baggage Claim"
+msgstr "Видача багажу"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:275 ../share/symbols/symbols.h:276
+msgctxt "Symbol"
+msgid "Customs"
+msgstr "Митні послуги"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:277 ../share/symbols/symbols.h:278
+msgctxt "Symbol"
+msgid "Immigration"
+msgstr "Міграційна служба"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:279 ../share/symbols/symbols.h:280
+msgctxt "Symbol"
+msgid "Departing Flights"
+msgstr "Відправлення"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:281 ../share/symbols/symbols.h:282
+msgctxt "Symbol"
+msgid "Arriving Flights"
+msgstr "Прибуття"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:283 ../share/symbols/symbols.h:284
+msgctxt "Symbol"
+msgid "Smoking"
+msgstr "Місце для куріння"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:285 ../share/symbols/symbols.h:286
+msgctxt "Symbol"
+msgid "No Smoking"
+msgstr "Куріння заборонено"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:289 ../share/symbols/symbols.h:290
+msgctxt "Symbol"
+msgid "No Parking"
+msgstr "Паркування заборонено"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:291 ../share/symbols/symbols.h:292
+msgctxt "Symbol"
+msgid "No Dogs"
+msgstr "Вигулювання собак заборонено"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:293 ../share/symbols/symbols.h:294
+msgctxt "Symbol"
+msgid "No Entry"
+msgstr "Вхід заборонено"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:297 ../share/symbols/symbols.h:298
+msgctxt "Symbol"
+msgid "Fire Extinguisher"
+msgstr "Вогнегасник"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:299 ../share/symbols/symbols.h:300
+msgctxt "Symbol"
+msgid "Right Arrow"
+msgstr "Стрілка праворуч"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:301 ../share/symbols/symbols.h:302
+msgctxt "Symbol"
+msgid "Forward and Right Arrow"
+msgstr "Стрілка вперед і праворуч"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:303 ../share/symbols/symbols.h:304
+msgctxt "Symbol"
+msgid "Up Arrow"
+msgstr "Стрілка вгору"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:305 ../share/symbols/symbols.h:306
+msgctxt "Symbol"
+msgid "Forward and Left Arrow"
+msgstr "Стрілка вперед і ліворуч"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:307 ../share/symbols/symbols.h:308
+msgctxt "Symbol"
+msgid "Left Arrow"
+msgstr "Стрілка ліворуч"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:309 ../share/symbols/symbols.h:310
+msgctxt "Symbol"
+msgid "Left and Down Arrow"
+msgstr "Стрілка ліворуч і вниз"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:311 ../share/symbols/symbols.h:312
+msgctxt "Symbol"
+msgid "Down Arrow"
+msgstr "Стрілка вниз"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:313 ../share/symbols/symbols.h:314
+msgctxt "Symbol"
+msgid "Right and Down Arrow"
+msgstr "Стрілка праворуч і вниз"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:315 ../share/symbols/symbols.h:316
+msgctxt "Symbol"
+msgid "NPS Wheelchair Accessible - 1996"
+msgstr "Візок NPS — 1996"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:317 ../share/symbols/symbols.h:318
+msgctxt "Symbol"
+msgid "NPS Wheelchair Accessible"
+msgstr "Візок NPS"
+
+#. Symbols: ./AigaSymbols.svg
+#: ../share/symbols/symbols.h:319 ../share/symbols/symbols.h:320
+msgctxt "Symbol"
+msgid "New Wheelchair Accessible"
+msgstr "Новий візок"
+
+#: ../share/templates/templates.h:1
+msgid "A4 Landscape Page"
+msgstr "Сторінка A4, альбомна орієнтація"
+
+#: ../share/templates/templates.h:1
+msgid "Empty A4 landscape sheet"
+msgstr "Порожній аркуш A4, альбомна орієнтація"
+
+#: ../share/templates/templates.h:1
+msgid "A4 paper sheet empty landscape"
+msgstr "Порожній аркуш A4, альбомна орієнтація"
+
+#: ../share/templates/templates.h:1
+msgid "A4 Page"
+msgstr "Сторінка A4"
+
+#: ../share/templates/templates.h:1
+msgid "Empty A4 sheet"
+msgstr "Порожній аркуш A4"
+
+#: ../share/templates/templates.h:1
+msgid "A4 paper sheet empty"
+msgstr "Порожній аркуш A4"
+
+#: ../share/templates/templates.h:1
+msgid "Black Opaque"
+msgstr "Чорна непрозора"
+
+#: ../share/templates/templates.h:1
+msgid "Empty black page"
+msgstr "Порожня чорна сторінка"
+
+#: ../share/templates/templates.h:1
+msgid "black opaque empty"
+msgstr "порожня чорна непрозора"
+
+#: ../share/templates/templates.h:1
+msgid "White Opaque"
+msgstr "Біла непрозора"
+
+#: ../share/templates/templates.h:1
+msgid "Empty white page"
+msgstr "Порожня біла сторінка"
+
+#: ../share/templates/templates.h:1
+msgid "white opaque empty"
+msgstr "порожня біла непрозора"
+
+#: ../share/templates/templates.h:1
+msgid "Business Card 85x54mm"
+msgstr "Візитівка 85⨯54 мм"
+
+#: ../share/templates/templates.h:1
+msgid "Empty business card template."
+msgstr "Шаблон порожньої візитівки."
+
+#: ../share/templates/templates.h:1
+msgid "business card empty 85x54"
+msgstr "порожня візитівка 85⨯54"
+
+#: ../share/templates/templates.h:1
+msgid "Business Card 90x50mm"
+msgstr "Візитівка 90⨯50 мм"
+
+#: ../share/templates/templates.h:1
+msgid "business card empty 90x50"
+msgstr "порожня візитівка 90⨯50"
+
+#: ../share/templates/templates.h:1
+msgid "CD Cover 300dpi"
+msgstr "Обкладинка для компакт-диска, 300 т/д"
+
+#: ../share/templates/templates.h:1
+msgid "Empty CD box cover."
+msgstr "Порожня обкладинка для коробки з-під компакт-диска."
+
+#: ../share/templates/templates.h:1
+msgid "CD cover disc disk 300dpi box"
+msgstr "Обкладинка для коробки з-під компакт-диска, 300 т/д"
+
+#: ../share/templates/templates.h:1
+msgid "CD Label 120x120 "
+msgstr "Наліпка на компакт-диск 120⨯120 "
+
+#: ../share/templates/templates.h:1
+msgid "Simple CD Label template with disc's pattern."
+msgstr "Простий шаблон наліпки на компакт диск з розміткою."
+
+#: ../share/templates/templates.h:1
+msgid "CD label 120x120 disc disk"
+msgstr "Наліпка на компакт-диск, 120⨯120"
+
+#: ../share/templates/templates.h:1
+msgid "DVD Cover Regular 300dpi "
+msgstr "Звичайна обкладинка для DVD, 300 т/д "
+
+#: ../share/templates/templates.h:1
+msgid "Template for both-sides DVD covers."
+msgstr "Шаблон для двобічних обкладинок для DVD."
+
+#: ../share/templates/templates.h:1
+msgid "DVD cover regular 300dpi"
+msgstr "Звичайна обкладинка для DVD, 300 т/д"
+
+#: ../share/templates/templates.h:1
+msgid "DVD Cover Slim 300dpi "
+msgstr "Обкладинка тонкої коробки для DVD, 300 т/д "
+
+#: ../share/templates/templates.h:1
+msgid "Template for both-sides DVD slim covers."
+msgstr "Шаблон для двобічних обкладинок тонких коробок для DVD."
+
+#: ../share/templates/templates.h:1
+msgid "DVD cover slim 300dpi"
+msgstr "Обкладинка тонкої коробки для DVD, 300 т/д "
+
+#: ../share/templates/templates.h:1
+msgid "DVD Cover Superslim 300dpi "
+msgstr "Обкладинка надтонкої коробки для DVD, 300 т/д "
+
+#: ../share/templates/templates.h:1
+msgid "Template for both-sides DVD superslim covers."
+msgstr "Шаблон для двобічних надтонких обкладинок для DVD."
+
+#: ../share/templates/templates.h:1
+msgid "DVD cover superslim 300dpi"
+msgstr "Обкладинка надтонкої коробки для DVD, 300 т/д"
+
+#: ../share/templates/templates.h:1
+msgid "DVD Cover Ultraslim 300dpi "
+msgstr "Обкладинка ультратонкої коробки для DVD, 300 т/д "
+
+#: ../share/templates/templates.h:1
+msgid "Template for both-sides DVD ultraslim covers."
+msgstr "Шаблон для двобічних обкладинок ультратонких коробок для DVD."
+
+#: ../share/templates/templates.h:1
+msgid "DVD cover ultraslim 300dpi"
+msgstr "Обкладинка ультратонкої коробки для DVD, 300 т/д"
+
+#: ../share/templates/templates.h:1
+msgid "Desktop 1024x768"
+msgstr "Стільниця 1024⨯768"
+
+#: ../share/templates/templates.h:1
+msgid "Empty desktop size sheet"
+msgstr "Порожній аркуш розміром із зображення стільниці"
+
+#: ../share/templates/templates.h:1
+msgid "desktop 1024x768 wallpaper"
+msgstr "шпалери для стільниці, 1024⨯768"
+
+#: ../share/templates/templates.h:1
+msgid "Desktop 1600x1200"
+msgstr "Стільниця 1600⨯1200"
+
+#: ../share/templates/templates.h:1
+msgid "desktop 1600x1200 wallpaper"
+msgstr "шпалери для стільниці, 1600⨯1200"
+
+#: ../share/templates/templates.h:1
+msgid "Desktop 640x480"
+msgstr "Стільниця 640⨯480"
+
+#: ../share/templates/templates.h:1
+msgid "desktop 640x480 wallpaper"
+msgstr "шпалери для стільниці, 640⨯480"
+
+#: ../share/templates/templates.h:1
+msgid "Desktop 800x600"
+msgstr "Стільниця 800⨯600"
+
+#: ../share/templates/templates.h:1
+msgid "desktop 800x600 wallpaper"
+msgstr "шпалери для стільниці, 800⨯600"
+
+#: ../share/templates/templates.h:1
+msgid "Fontforge Glyph"
+msgstr "Гліф Fontforge"
+
+#: ../share/templates/templates.h:1
+msgid "font fontforge glyph 1000x1000"
+msgstr "гліф шрифту fontforge, 1000⨯1000"
+
+#: ../share/templates/templates.h:1
+msgid "Icon 16x16"
+msgstr "Піктограма 16⨯16"
+
+#: ../share/templates/templates.h:1
+msgid "Small 16x16 icon template."
+msgstr "Шаблон малої піктограми 16⨯16."
+
+#: ../share/templates/templates.h:1
+msgid "icon 16x16 empty"
+msgstr "порожня піктограма 16⨯16"
+
+#: ../share/templates/templates.h:1
+msgid "Icon 32x32"
+msgstr "Піктограма 32⨯32"
+
+#: ../share/templates/templates.h:1
+msgid "32x32 icon template."
+msgstr "Шаблон піктограми 32⨯32."
+
+#: ../share/templates/templates.h:1
+msgid "icon 32x32 empty"
+msgstr "порожня піктограма 32⨯32"
+
+#: ../share/templates/templates.h:1
+msgid "Icon 48x48"
+msgstr "Піктограма 48⨯48"
+
+#: ../share/templates/templates.h:1
+msgid "48x48 icon template."
+msgstr "Шаблон піктограми 48⨯48."
+
+#: ../share/templates/templates.h:1
+msgid "icon 48x48 empty"
+msgstr "порожня піктограма 48⨯48"
+
+#: ../share/templates/templates.h:1
+msgid "Icon 64x64"
+msgstr "Піктограма 64⨯64"
+
+#: ../share/templates/templates.h:1
+msgid "64x64 icon template."
+msgstr "Шаблон піктограми 64⨯64."
+
+#: ../share/templates/templates.h:1
+msgid "icon 64x64 empty"
+msgstr "порожня піктограма 64⨯64"
+
+#: ../share/templates/templates.h:1
+msgid "Letter Landscape"
+msgstr "Лист (альбомна орієнтація)"
+
+#: ../share/templates/templates.h:1
+msgid "Standard letter landscape sheet - 792x612"
+msgstr "Стандартний аркуш листа, альбомна орієнтація — 792⨯612"
+
+#: ../share/templates/templates.h:1
+msgid "letter landscape 792x612 empty"
+msgstr "порожній лист, альбомна орієнтація, 792⨯612"
+
+#: ../share/templates/templates.h:1
+msgid "Letter"
+msgstr "Лист"
+
+#: ../share/templates/templates.h:1
+msgid "Standard letter sheet - 612x792"
+msgstr "Стандартний аркуш листа — 612⨯792"
+
+#: ../share/templates/templates.h:1
+msgid "letter 612x792 empty"
+msgstr "порожній лист 612⨯792"
+
+#: ../share/templates/templates.h:1
+msgid "No Borders"
+msgstr "Без рамки"
+
+#: ../share/templates/templates.h:1
+msgid "Empty sheet with no borders"
+msgstr "Порожній аркуш без рамки"
+
+#: ../share/templates/templates.h:1
+msgid "no borders empty"
+msgstr "порожній без рамки"
+
+#: ../share/templates/templates.h:1
+msgid "No Layers"
+msgstr "Без шарів"
+
+#: ../share/templates/templates.h:1
+msgid "Empty sheet with no layers"
+msgstr "Порожній аркуш без шарів"
+
+#: ../share/templates/templates.h:1
+msgid "no layers empty"
+msgstr "порожній без шарів"
+
+#: ../share/templates/templates.h:1
+msgid "Video HDTV 1920x1080"
+msgstr "Відео HDTV 1920⨯1080"
+
+#: ../share/templates/templates.h:1
+msgid "HDTV video template for 1920x1080 resolution."
+msgstr "Шаблон відео HDTV для роздільної здатності 1920⨯1080."
+
+#: ../share/templates/templates.h:1
+msgid "HDTV video empty 1920x1080"
+msgstr "порожній шаблон відео HDTV 1920⨯1080"
+
+#: ../share/templates/templates.h:1
+msgid "Video NTSC 720x486"
+msgstr "Відео NTSC 720⨯486"
+
+#: ../share/templates/templates.h:1
+msgid "NTSC video template for 720x486 resolution."
+msgstr "Шаблон відео NTSC для роздільної здатності 720⨯486."
+
+#: ../share/templates/templates.h:1
+msgid "NTSC video empty 720x486"
+msgstr "Порожнє відео NTSC 720⨯486"
+
+#: ../share/templates/templates.h:1
+msgid "Video PAL 728x576"
+msgstr "Відео PAL 728⨯576"
+
+#: ../share/templates/templates.h:1
+msgid "PAL video template for 728x576 resolution."
+msgstr "Шаблон відео PAL для роздільної здатності 728⨯576."
+
+#: ../share/templates/templates.h:1
+msgid "PAL video empty 728x576"
+msgstr "Порожнє відео PAL 728⨯576"
+
+#: ../share/templates/templates.h:1
+msgid "Web Banner 468x60"
+msgstr "Інтернет-банер 468⨯60"
+
+#: ../share/templates/templates.h:1
+msgid "Empty 468x60 web banner template."
+msgstr "Шаблон порожнього інтернет-банера 468⨯60."
+
+#: ../share/templates/templates.h:1
+msgid "web banner 468x60 empty"
+msgstr "порожній інтернет-банер 468⨯60"
+
+#: ../share/templates/templates.h:1
+msgid "Web Banner 728x90"
+msgstr "Інтернет-банер 728⨯90"
+
+#: ../share/templates/templates.h:1
+msgid "Empty 728x90 web banner template."
+msgstr "Порожній шаблон інтернет-банера, 728⨯90."
+
+#: ../share/templates/templates.h:1
+msgid "web banner 728x90 empty"
+msgstr "порожній інтернет-банер 728⨯90"
+
+#: ../share/templates/templates.h:1
+msgid "LaTeX Beamer"
+msgstr "Beamer, LaTeX"
+
+#: ../share/templates/templates.h:1
+msgid "LaTeX beamer template with helping grid."
+msgstr "Шаблон beamer LaTeX з допоміжною сіткою."
+
+#: ../share/templates/templates.h:1
+msgid "LaTex LaTeX latex grid beamer"
+msgstr "Сітка LaTeX beamer"
+
+#: ../share/templates/templates.h:1
+msgid "Typography Canvas"
+msgstr "Типографічне полотно"
+
+#: ../share/templates/templates.h:1
+msgid "Empty typography canvas with helping guidelines."
+msgstr "Порожнє типографічне полотно з допоміжними напрямними."
+
+#: ../share/templates/templates.h:1
+msgid "guidelines typography canvas"
+msgstr "типографічне полотно з напрямними"
+
#. 3D box
#: ../src/box3d.cpp:259 ../src/box3d.cpp:1329
#: ../src/ui/dialog/inkscape-preferences.cpp:398
@@ -3313,7 +5169,7 @@ msgstr "(некоректний рядок UTF-8)"
#: ../src/color-profile.cpp:911 ../src/filter-enums.cpp:119
#: ../src/live_effects/lpe-ruler.cpp:32
-#: ../src/ui/dialog/filter-effects-dialog.cpp:518
+#: ../src/ui/dialog/filter-effects-dialog.cpp:549
#: ../src/ui/dialog/inkscape-preferences.cpp:332
#: ../src/ui/dialog/inkscape-preferences.cpp:641
#: ../src/ui/dialog/inkscape-preferences.cpp:1259
@@ -3346,11 +5202,11 @@ msgstr ""
"<b>Поточний рівень заблоковано</b>. Розблокуйте його, щоб мати можливість "
"креслити у ньому."
-#: ../src/desktop.cpp:852
+#: ../src/desktop.cpp:859
msgid "No previous zoom."
msgstr "Немає попереднього масштабу."
-#: ../src/desktop.cpp:873
+#: ../src/desktop.cpp:880
msgid "No next zoom."
msgstr "Немає наступного масштабу."
@@ -3362,12 +5218,12 @@ msgstr "Створити напрямну"
msgid "Move guide"
msgstr "Пересунути напрямну"
-#: ../src/desktop-events.cpp:477 ../src/desktop-events.cpp:535
+#: ../src/desktop-events.cpp:477 ../src/desktop-events.cpp:536
#: ../src/ui/dialog/guides.cpp:144
msgid "Delete guide"
msgstr "Вилучити напрямну"
-#: ../src/desktop-events.cpp:515
+#: ../src/desktop-events.cpp:516
#, c-format
msgid "<b>Guideline</b>: %s"
msgstr "<b>Напрямна</b>: %s"
@@ -3737,21 +5593,21 @@ msgstr "Кратність проміжку між лініями сітки"
msgid " to "
msgstr " у "
-#: ../src/document.cpp:507
+#: ../src/document.cpp:546
#, c-format
msgid "New document %d"
msgstr "Новий документ %d"
-#: ../src/document.cpp:512
+#: ../src/document.cpp:551
#, c-format
msgid "Memory document %d"
msgstr "Документ у пам'яті %d"
-#: ../src/document.cpp:541
+#: ../src/document.cpp:580
msgid "Memory document %1"
msgstr "Документ у пам'яті %1"
-#: ../src/document.cpp:752
+#: ../src/document.cpp:792
#, c-format
msgid "Unnamed document %d"
msgstr "Документ без назви %d"
@@ -3954,10 +5810,7 @@ msgstr "Ширина:"
msgid "Height:"
msgstr "Висота:"
-#. Label
#: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:43
-#: ../src/widgets/gradient-toolbar.cpp:1174
-#: ../src/widgets/gradient-vector.cpp:926
#: ../share/extensions/printing_marks.inx.h:12
msgid "Offset:"
msgstr "Зсув:"
@@ -4015,8 +5868,8 @@ msgstr "Додати шум"
#: ../src/extension/internal/filter/color.h:1585
#: ../src/extension/internal/filter/distort.h:69
#: ../src/extension/internal/filter/morphology.h:60 ../src/rdf.cpp:244
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2627
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2706
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2833
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2907
#: ../src/ui/dialog/object-attributes.cpp:49
#: ../share/extensions/jessyInk_effects.inx.h:5
#: ../share/extensions/jessyInk_export.inx.h:3
@@ -4068,7 +5921,7 @@ msgstr "Розмиття"
#: ../src/extension/internal/bitmap/oilPaint.cpp:39
#: ../src/extension/internal/bitmap/sharpen.cpp:40
#: ../src/extension/internal/bitmap/unsharpmask.cpp:43
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2684
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2885
msgid "Radius:"
msgstr "Радіус:"
@@ -4404,7 +6257,7 @@ msgid "Opacity"
msgstr "Непрозорість"
#: ../src/extension/internal/bitmap/opacity.cpp:40
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2674
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2875
#: ../src/widgets/dropper-toolbar.cpp:107
msgid "Opacity:"
msgstr "Непрозорість:"
@@ -4587,100 +6440,100 @@ msgid "PostScript"
msgstr "PostScript"
#: ../src/extension/internal/cairo-ps-out.cpp:329
-#: ../src/extension/internal/cairo-ps-out.cpp:370
+#: ../src/extension/internal/cairo-ps-out.cpp:368
msgid "Restrict to PS level:"
msgstr "Обмежувати рівень PS:"
#: ../src/extension/internal/cairo-ps-out.cpp:330
-#: ../src/extension/internal/cairo-ps-out.cpp:371
+#: ../src/extension/internal/cairo-ps-out.cpp:369
msgid "PostScript level 3"
msgstr "PostScript рівень 3"
-#: ../src/extension/internal/cairo-ps-out.cpp:332
-#: ../src/extension/internal/cairo-ps-out.cpp:373
+#: ../src/extension/internal/cairo-ps-out.cpp:331
+#: ../src/extension/internal/cairo-ps-out.cpp:370
msgid "PostScript level 2"
msgstr "PostScript level 2"
-#: ../src/extension/internal/cairo-ps-out.cpp:335
-#: ../src/extension/internal/cairo-ps-out.cpp:376
+#: ../src/extension/internal/cairo-ps-out.cpp:333
+#: ../src/extension/internal/cairo-ps-out.cpp:372
#: ../src/extension/internal/cairo-renderer-pdf-out.cpp:250
-#: ../src/extension/internal/emf-inout.cpp:3551
-#: ../src/extension/internal/wmf-inout.cpp:3236
+#: ../src/extension/internal/emf-inout.cpp:3520
+#: ../src/extension/internal/wmf-inout.cpp:3088
msgid "Convert texts to paths"
msgstr "Перетворити текст на контури"
-#: ../src/extension/internal/cairo-ps-out.cpp:336
+#: ../src/extension/internal/cairo-ps-out.cpp:334
msgid "PS+LaTeX: Omit text in PS, and create LaTeX file"
msgstr "PS+LaTeX: пропустити текст у PS і створити файл LaTeX"
-#: ../src/extension/internal/cairo-ps-out.cpp:337
-#: ../src/extension/internal/cairo-ps-out.cpp:378
+#: ../src/extension/internal/cairo-ps-out.cpp:335
+#: ../src/extension/internal/cairo-ps-out.cpp:374
#: ../src/extension/internal/cairo-renderer-pdf-out.cpp:252
msgid "Rasterize filter effects"
msgstr "Растеризувати ефекти фільтрування"
-#: ../src/extension/internal/cairo-ps-out.cpp:338
-#: ../src/extension/internal/cairo-ps-out.cpp:379
+#: ../src/extension/internal/cairo-ps-out.cpp:336
+#: ../src/extension/internal/cairo-ps-out.cpp:375
#: ../src/extension/internal/cairo-renderer-pdf-out.cpp:253
msgid "Resolution for rasterization (dpi):"
msgstr "Роздільна здатність для растеризації (у точках на дюйм):"
-#: ../src/extension/internal/cairo-ps-out.cpp:339
-#: ../src/extension/internal/cairo-ps-out.cpp:380
+#: ../src/extension/internal/cairo-ps-out.cpp:337
+#: ../src/extension/internal/cairo-ps-out.cpp:376
msgid "Output page size"
msgstr "Розмір сторінки-результату"
-#: ../src/extension/internal/cairo-ps-out.cpp:340
-#: ../src/extension/internal/cairo-ps-out.cpp:381
+#: ../src/extension/internal/cairo-ps-out.cpp:338
+#: ../src/extension/internal/cairo-ps-out.cpp:377
#: ../src/extension/internal/cairo-renderer-pdf-out.cpp:255
msgid "Use document's page size"
msgstr "Використовувати розмір сторінки документа"
-#: ../src/extension/internal/cairo-ps-out.cpp:341
-#: ../src/extension/internal/cairo-ps-out.cpp:382
+#: ../src/extension/internal/cairo-ps-out.cpp:339
+#: ../src/extension/internal/cairo-ps-out.cpp:378
#: ../src/extension/internal/cairo-renderer-pdf-out.cpp:256
msgid "Use exported object's size"
msgstr "Використати розмір експортованого об’єкта"
-#: ../src/extension/internal/cairo-ps-out.cpp:343
+#: ../src/extension/internal/cairo-ps-out.cpp:341
#: ../src/extension/internal/cairo-renderer-pdf-out.cpp:258
msgid "Bleed/margin (mm):"
msgstr "Випуск під обрізання (у мм):"
-#: ../src/extension/internal/cairo-ps-out.cpp:344
-#: ../src/extension/internal/cairo-ps-out.cpp:385
+#: ../src/extension/internal/cairo-ps-out.cpp:342
+#: ../src/extension/internal/cairo-ps-out.cpp:381
#: ../src/extension/internal/cairo-renderer-pdf-out.cpp:259
msgid "Limit export to the object with ID:"
msgstr "Обмежити експорт об'єктом з вказаним ідентифікатором:"
-#: ../src/extension/internal/cairo-ps-out.cpp:348
+#: ../src/extension/internal/cairo-ps-out.cpp:346
#: ../share/extensions/ps_input.inx.h:2
msgid "PostScript (*.ps)"
msgstr "PostScript (*.ps)"
-#: ../src/extension/internal/cairo-ps-out.cpp:349
+#: ../src/extension/internal/cairo-ps-out.cpp:347
msgid "PostScript File"
msgstr "Файл Postscript"
-#: ../src/extension/internal/cairo-ps-out.cpp:368
+#: ../src/extension/internal/cairo-ps-out.cpp:366
#: ../share/extensions/eps_input.inx.h:3
msgid "Encapsulated PostScript"
msgstr "Інкапсульований PostScript"
-#: ../src/extension/internal/cairo-ps-out.cpp:377
+#: ../src/extension/internal/cairo-ps-out.cpp:373
msgid "EPS+LaTeX: Omit text in EPS, and create LaTeX file"
msgstr "EPS+LaTeX: пропустити текст у EPS і створити файл LaTeX"
-#: ../src/extension/internal/cairo-ps-out.cpp:384
+#: ../src/extension/internal/cairo-ps-out.cpp:380
msgid "Bleed/margin (mm)"
msgstr "Випуск/Поле під обрізання (у мм)"
-#: ../src/extension/internal/cairo-ps-out.cpp:389
+#: ../src/extension/internal/cairo-ps-out.cpp:385
#: ../share/extensions/eps_input.inx.h:2
msgid "Encapsulated PostScript (*.eps)"
msgstr "Інкапсульований PostScript (*.eps)"
-#: ../src/extension/internal/cairo-ps-out.cpp:390
+#: ../src/extension/internal/cairo-ps-out.cpp:386
msgid "Encapsulated PostScript File"
msgstr "Інкапсульований файл PostScript"
@@ -4773,71 +6626,75 @@ msgstr "Файли обміну презентаціями Corel DRAW (*.cmx)"
msgid "Open presentation exchange files saved in Corel DRAW"
msgstr "Відкрити файли обміну презентаціями, збережені за допомогою Corel DRAW"
-#: ../src/extension/internal/emf-inout.cpp:3535
+#: ../src/extension/internal/emf-inout.cpp:3504
msgid "EMF Input"
msgstr "Імпорт EMF"
-#: ../src/extension/internal/emf-inout.cpp:3540
+#: ../src/extension/internal/emf-inout.cpp:3509
msgid "Enhanced Metafiles (*.emf)"
msgstr "Розширений метафайл (*.emf)"
-#: ../src/extension/internal/emf-inout.cpp:3541
+#: ../src/extension/internal/emf-inout.cpp:3510
msgid "Enhanced Metafiles"
msgstr "Розширені метафайли"
-#: ../src/extension/internal/emf-inout.cpp:3549
+#: ../src/extension/internal/emf-inout.cpp:3518
msgid "EMF Output"
msgstr "Експорт до EMF"
-#: ../src/extension/internal/emf-inout.cpp:3552
-#: ../src/extension/internal/wmf-inout.cpp:3237
+#: ../src/extension/internal/emf-inout.cpp:3521
+#: ../src/extension/internal/wmf-inout.cpp:3089
msgid "Map Unicode to Symbol font"
msgstr "Пов’язати Unicode зі шрифтом Symbol"
-#: ../src/extension/internal/emf-inout.cpp:3553
-#: ../src/extension/internal/wmf-inout.cpp:3238
+#: ../src/extension/internal/emf-inout.cpp:3522
+#: ../src/extension/internal/wmf-inout.cpp:3090
msgid "Map Unicode to Wingdings"
msgstr "Пов’язати Unicode з Wingdings"
-#: ../src/extension/internal/emf-inout.cpp:3554
-#: ../src/extension/internal/wmf-inout.cpp:3239
+#: ../src/extension/internal/emf-inout.cpp:3523
+#: ../src/extension/internal/wmf-inout.cpp:3091
msgid "Map Unicode to Zapf Dingbats"
msgstr "Пов’язати Unicode з Zapf Dingbats"
-#: ../src/extension/internal/emf-inout.cpp:3555
-#: ../src/extension/internal/wmf-inout.cpp:3240
+#: ../src/extension/internal/emf-inout.cpp:3524
+#: ../src/extension/internal/wmf-inout.cpp:3092
msgid "Use MS Unicode PUA (0xF020-0xF0FF) for converted characters"
msgstr ""
"Використовувати для перетворених символів MS Unicode PUA (0xF020-0xF0FF)"
-#: ../src/extension/internal/emf-inout.cpp:3556
-#: ../src/extension/internal/wmf-inout.cpp:3241
+#: ../src/extension/internal/emf-inout.cpp:3525
+#: ../src/extension/internal/wmf-inout.cpp:3093
msgid "Compensate for PPT font bug"
msgstr "Компенсувати ваду щодо шрифтів у PPT"
-#: ../src/extension/internal/emf-inout.cpp:3557
-#: ../src/extension/internal/wmf-inout.cpp:3242
+#: ../src/extension/internal/emf-inout.cpp:3526
+#: ../src/extension/internal/wmf-inout.cpp:3094
msgid "Convert dashed/dotted lines to single lines"
msgstr "Перетворювати штрихову та пунктир у одну лінію"
-#: ../src/extension/internal/emf-inout.cpp:3558
-#: ../src/extension/internal/wmf-inout.cpp:3243
+#: ../src/extension/internal/emf-inout.cpp:3527
+#: ../src/extension/internal/wmf-inout.cpp:3095
msgid "Convert gradients to colored polygon series"
msgstr "Перетворити градієнти на послідовність кольорових багатокутників"
-#: ../src/extension/internal/emf-inout.cpp:3559
+#: ../src/extension/internal/emf-inout.cpp:3528
+msgid "Use native rectangular linear gradients"
+msgstr "Використовувати природні прямокутні лінійні градієнти"
+
+#: ../src/extension/internal/emf-inout.cpp:3529
msgid "Map all fill patterns to standard EMF hatches"
msgstr "Пов’язати усі заповнення візерунками зі стандартними шаблонами EMF"
-#: ../src/extension/internal/emf-inout.cpp:3560
+#: ../src/extension/internal/emf-inout.cpp:3530
msgid "Ignore image rotations"
msgstr "Ігнорувати обертання зображення"
-#: ../src/extension/internal/emf-inout.cpp:3564
+#: ../src/extension/internal/emf-inout.cpp:3534
msgid "Enhanced Metafile (*.emf)"
msgstr "Розширений метафайл (*.emf)"
-#: ../src/extension/internal/emf-inout.cpp:3565
+#: ../src/extension/internal/emf-inout.cpp:3535
msgid "Enhanced Metafile"
msgstr "Розширений метафайл"
@@ -4922,6 +6779,7 @@ msgstr "Колір підсвічення"
#: ../src/extension/internal/filter/transparency.h:214
#: ../src/extension/internal/filter/transparency.h:287
#: ../src/extension/internal/filter/transparency.h:349
+#, c-format
msgid "Filters"
msgstr "Фільтри"
@@ -5109,7 +6967,7 @@ msgstr "Ерозія"
#: ../src/extension/internal/filter/blurs.h:336
#: ../src/extension/internal/filter/color.h:1205
#: ../src/extension/internal/filter/color.h:1317
-#: ../src/ui/dialog/document-properties.cpp:111
+#: ../src/ui/dialog/document-properties.cpp:112
msgid "Background color"
msgstr "Колір тла"
@@ -5275,13 +7133,13 @@ msgstr "Параметри віддаленого джерела"
#: ../src/extension/internal/filter/bumps.h:110
#: ../src/extension/internal/filter/bumps.h:332
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1001
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1195
msgid "Azimuth"
msgstr "Азимут"
#: ../src/extension/internal/filter/bumps.h:111
#: ../src/extension/internal/filter/bumps.h:333
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1002
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1196
msgid "Elevation"
msgstr "Висота"
@@ -5502,11 +7360,13 @@ msgstr "Тотожність"
#: ../src/extension/internal/filter/color.h:428
#: ../src/extension/internal/filter/paint.h:498 ../src/filter-enums.cpp:108
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1050
msgid "Table"
msgstr "Табличний"
#: ../src/extension/internal/filter/color.h:429
#: ../src/extension/internal/filter/paint.h:499 ../src/filter-enums.cpp:109
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1053
msgid "Discrete"
msgstr "Дискретний"
@@ -5700,6 +7560,7 @@ msgstr "Тіні"
#: ../src/extension/internal/filter/paint.h:356 ../src/filter-enums.cpp:32
#: ../src/live_effects/effect.cpp:97 ../src/live_effects/lpe-offset.cpp:31
#: ../src/live_effects/lpe-parallel.cpp:50
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1047
#: ../src/widgets/gradient-toolbar.cpp:1174
msgid "Offset"
msgstr "Зміщення"
@@ -5986,8 +7847,8 @@ msgid "Detect:"
msgstr "Позначити:"
#: ../src/extension/internal/filter/image.h:52
-#: ../src/ui/dialog/template-load-tab.cpp:104
-#: ../src/ui/dialog/template-load-tab.cpp:141
+#: ../src/ui/dialog/template-load-tab.cpp:105
+#: ../src/ui/dialog/template-load-tab.cpp:142
msgid "All"
msgstr "Всі"
@@ -6264,7 +8125,7 @@ msgstr ""
#: ../src/extension/internal/filter/paint.h:331
#: ../src/ui/dialog/align-and-distribute.cpp:1004
-#: ../src/widgets/desktop-widget.cpp:2007
+#: ../src/widgets/desktop-widget.cpp:1998
msgid "Drawing"
msgstr "Малюнок"
@@ -6552,7 +8413,7 @@ msgid "Background"
msgstr "Тло"
#: ../src/extension/internal/filter/transparency.h:59
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2624
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2830
#: ../src/ui/dialog/input.cpp:1088 ../src/widgets/eraser-toolbar.cpp:123
#: ../src/widgets/pencil-toolbar.cpp:156 ../src/widgets/spray-toolbar.cpp:198
#: ../src/widgets/tweak-toolbar.cpp:268 ../share/extensions/extrude.inx.h:2
@@ -6607,20 +8468,24 @@ msgid "%s bitmap image import"
msgstr "Імпортування растрового зображення %s"
#: ../src/extension/internal/gdkpixbuf-input.cpp:176
+#, c-format
msgid "Link or embed image:"
msgstr "Пов'язати або вбудувати зображення:"
#: ../src/extension/internal/gdkpixbuf-input.cpp:177
#: ../src/ui/dialog/inkscape-preferences.cpp:1445
+#, c-format
msgid "Embed"
msgstr "Вбудувати"
#: ../src/extension/internal/gdkpixbuf-input.cpp:178 ../src/sp-anchor.cpp:119
#: ../src/ui/dialog/inkscape-preferences.cpp:1445
+#, c-format
msgid "Link"
msgstr "Пов'язати"
#: ../src/extension/internal/gdkpixbuf-input.cpp:180
+#, c-format
msgid ""
"Embed results in stand-alone, larger SVG files. Link references a file "
"outside this SVG document and all files must be moved together."
@@ -6629,25 +8494,30 @@ msgstr ""
"документом SVG і всі файли буде об'єднано у єдиному документі."
#: ../src/extension/internal/gdkpixbuf-input.cpp:182
+#, c-format
msgid "Scale image preference (image-rendering):"
msgstr "Режим масштабування зображень (обробки зображення):"
#: ../src/extension/internal/gdkpixbuf-input.cpp:183
#: ../src/ui/dialog/inkscape-preferences.cpp:1452
+#, c-format
msgid "None (auto)"
msgstr "Немає (автоматично)"
#: ../src/extension/internal/gdkpixbuf-input.cpp:184
#: ../src/ui/dialog/inkscape-preferences.cpp:1452
+#, c-format
msgid "Smooth (optimizeQuality)"
msgstr "Згладжування (оптимальна якість)"
#: ../src/extension/internal/gdkpixbuf-input.cpp:185
#: ../src/ui/dialog/inkscape-preferences.cpp:1452
+#, c-format
msgid "Blocky (optimizeSpeed)"
msgstr "Блоками (оптимальна швидкість)"
#: ../src/extension/internal/gdkpixbuf-input.cpp:187
+#, c-format
msgid ""
"When an image is upscaled, apply smoothing or keep blocky (pixelated). (Will "
"not work in all browsers.)"
@@ -6657,11 +8527,13 @@ msgstr ""
"(Працює не в усіх засобах перегляду.)"
#: ../src/extension/internal/gdkpixbuf-input.cpp:189
+#, c-format
msgid "Hide the dialog next time and always apply the same actions."
msgstr ""
"Не показувати це вікно наступного разу і завжди виконувати ті самі дії."
#: ../src/extension/internal/gdkpixbuf-input.cpp:189
+#, c-format
msgid "Don't ask again"
msgstr "Більше не питати"
@@ -6731,7 +8603,7 @@ msgid "Render"
msgstr "Відтворення"
#: ../src/extension/internal/grid.cpp:221
-#: ../src/ui/dialog/document-properties.cpp:151
+#: ../src/ui/dialog/document-properties.cpp:152
#: ../src/ui/dialog/inkscape-preferences.cpp:776
#: ../src/widgets/toolbox.cpp:1825
msgid "Grids"
@@ -7052,33 +8924,33 @@ msgstr "Імпорт з VSDX"
msgid "Microsoft Visio 2013 drawing (*.vsdx)"
msgstr "Малюнок Microsoft Visio 2013 (*.vsdx)"
-#: ../src/extension/internal/wmf-inout.cpp:3220
+#: ../src/extension/internal/wmf-inout.cpp:3072
msgid "WMF Input"
msgstr "Імпорт WMF"
-#: ../src/extension/internal/wmf-inout.cpp:3225
+#: ../src/extension/internal/wmf-inout.cpp:3077
msgid "Windows Metafiles (*.wmf)"
msgstr "Метафайл Windows (*.wmf)"
-#: ../src/extension/internal/wmf-inout.cpp:3226
+#: ../src/extension/internal/wmf-inout.cpp:3078
msgid "Windows Metafiles"
msgstr "Метафайл Windows"
-#: ../src/extension/internal/wmf-inout.cpp:3234
+#: ../src/extension/internal/wmf-inout.cpp:3086
msgid "WMF Output"
msgstr "Експорт до WMF"
-#: ../src/extension/internal/wmf-inout.cpp:3244
+#: ../src/extension/internal/wmf-inout.cpp:3096
msgid "Map all fill patterns to standard WMF hatches"
msgstr "Пов’язати усі заповнення візерунками зі стандартними шаблонами WMF"
-#: ../src/extension/internal/wmf-inout.cpp:3248
+#: ../src/extension/internal/wmf-inout.cpp:3100
#: ../share/extensions/wmf_input.inx.h:2
#: ../share/extensions/wmf_output.inx.h:2
msgid "Windows Metafile (*.wmf)"
msgstr "Метафайл Windows (*.wmf)"
-#: ../src/extension/internal/wmf-inout.cpp:3249
+#: ../src/extension/internal/wmf-inout.cpp:3101
msgid "Windows Metafile"
msgstr "Метафайл Windows (WMF)"
@@ -7114,7 +8986,7 @@ msgstr "типовий.svg"
msgid "Broken links have been changed to point to existing files."
msgstr "Помилкові посилання змінено так, щоб вони вказували на поточні файли."
-#: ../src/file.cpp:331 ../src/file.cpp:1259
+#: ../src/file.cpp:331 ../src/file.cpp:1247
#, c-format
msgid "Failed to load the requested file %s"
msgstr "Не вдається завантажити потрібний файл %s"
@@ -7125,28 +8997,27 @@ msgstr ""
"Документ ще не був збережений. Неможливо повернутись до попереднього стану."
#: ../src/file.cpp:363
-#, c-format
-msgid "Changes will be lost! Are you sure you want to reload document %s?"
+msgid "Changes will be lost! Are you sure you want to reload document %1?"
msgstr ""
-"Зміни будуть втрачені! Ви впевнені, що бажаєте завантажити документ %s знову?"
+"Зміни буде втрачено! Ви впевнені, що бажаєте перезавантажити документ %1?"
-#: ../src/file.cpp:392
+#: ../src/file.cpp:389
msgid "Document reverted."
msgstr "Документ повернутий до попереднього стану."
-#: ../src/file.cpp:394
+#: ../src/file.cpp:391
msgid "Document not reverted."
msgstr "Документ не повернутий до попереднього стану."
-#: ../src/file.cpp:544
+#: ../src/file.cpp:541
msgid "Select file to open"
msgstr "Виберіть файл"
-#: ../src/file.cpp:626
+#: ../src/file.cpp:623
msgid "Clean up document"
msgstr "Очистити документ"
-#: ../src/file.cpp:633
+#: ../src/file.cpp:630
#, c-format
msgid "Removed <b>%i</b> unused definition in &lt;defs&gt;."
msgid_plural "Removed <b>%i</b> unused definitions in &lt;defs&gt;."
@@ -7154,11 +9025,11 @@ msgstr[0] "Вилучено <b>%i</b> непотрібний елемент у &
msgstr[1] "Вилучено <b>%i</b> непотрібні елементи у &lt;defs&gt;."
msgstr[2] "Вилучено <b>%i</b> непотрібних елементів у &lt;defs&gt;."
-#: ../src/file.cpp:638
+#: ../src/file.cpp:635
msgid "No unused definitions in &lt;defs&gt;."
msgstr "Немає непотрібних елементів у &lt;defs&gt;."
-#: ../src/file.cpp:670
+#: ../src/file.cpp:667
#, c-format
msgid ""
"No Inkscape extension found to save document (%s). This may have been "
@@ -7167,12 +9038,12 @@ msgstr ""
"Не знайдено модуль збереження документа (%s). Можливо, невідомий суфікс "
"назви файла."
-#: ../src/file.cpp:671 ../src/file.cpp:679 ../src/file.cpp:687
-#: ../src/file.cpp:693 ../src/file.cpp:698
+#: ../src/file.cpp:668 ../src/file.cpp:676 ../src/file.cpp:684
+#: ../src/file.cpp:690 ../src/file.cpp:695
msgid "Document not saved."
msgstr "Документ не збережено."
-#: ../src/file.cpp:678
+#: ../src/file.cpp:675
#, c-format
msgid ""
"File %s is write protected. Please remove write protection and try again."
@@ -7180,61 +9051,59 @@ msgstr ""
"Файл %s захищено від запису. Будь ласка, зніміть захист від запису і "
"повторіть спробу."
-#: ../src/file.cpp:686
+#: ../src/file.cpp:683
#, c-format
msgid "File %s could not be saved."
msgstr "Файл %s неможливо зберегти."
-#: ../src/file.cpp:716 ../src/file.cpp:718
+#: ../src/file.cpp:713 ../src/file.cpp:715
msgid "Document saved."
msgstr "Документ збережено."
#. We are saving for the first time; create a unique default filename
-#: ../src/file.cpp:866 ../src/file.cpp:1422
-#, c-format
-msgid "drawing%s"
-msgstr "рисунок%s"
+#: ../src/file.cpp:858
+msgid "drawing"
+msgstr "рисунок"
-#: ../src/file.cpp:872
-#, c-format
-msgid "drawing-%d%s"
-msgstr "рисунок-%d%s"
+#: ../src/file.cpp:863
+msgid "drawing-%1"
+msgstr "рисунок-%1"
-#: ../src/file.cpp:876
-#, c-format
-msgid "%s"
-msgstr "%s"
-
-#: ../src/file.cpp:891
+#: ../src/file.cpp:880
msgid "Select file to save a copy to"
msgstr "Оберіть файл для збереження копії"
-#: ../src/file.cpp:893
+#: ../src/file.cpp:882
msgid "Select file to save to"
msgstr "Виберіть файл для збереження"
-#: ../src/file.cpp:999 ../src/file.cpp:1001
+#: ../src/file.cpp:987 ../src/file.cpp:989
msgid "No changes need to be saved."
msgstr "Файл не було змінено. Збереження непотрібне."
-#: ../src/file.cpp:1020
+#: ../src/file.cpp:1008
msgid "Saving document..."
msgstr "Збереження документа…"
-#: ../src/file.cpp:1256 ../src/ui/dialog/inkscape-preferences.cpp:1439
-#: ../src/ui/dialog/ocaldialogs.cpp:1245
+#: ../src/file.cpp:1244 ../src/ui/dialog/inkscape-preferences.cpp:1439
+#: ../src/ui/dialog/ocaldialogs.cpp:1246
msgid "Import"
msgstr "Імпорт"
-#: ../src/file.cpp:1306
+#: ../src/file.cpp:1294
msgid "Select file to import"
msgstr "Виберіть файл для імпорту"
-#: ../src/file.cpp:1444
+#: ../src/file.cpp:1410
+#, c-format
+msgid "drawing%s"
+msgstr "рисунок%s"
+
+#: ../src/file.cpp:1432
msgid "Select file to export to"
msgstr "Оберіть файл для експорту"
-#: ../src/file.cpp:1697
+#: ../src/file.cpp:1685
msgid "Import Clip Art"
msgstr "Імпортування шаблонів"
@@ -7401,7 +9270,7 @@ msgstr "Світліше"
msgid "Arithmetic"
msgstr "Арифметичний"
-#: ../src/filter-enums.cpp:117 ../src/selection-chemistry.cpp:533
+#: ../src/filter-enums.cpp:117 ../src/selection-chemistry.cpp:534
msgid "Duplicate"
msgstr "Дублювати"
@@ -7441,7 +9310,7 @@ msgstr "Інвертувати кольори градієнта"
msgid "Reverse gradient"
msgstr "Обернути градієнт"
-#: ../src/gradient-chemistry.cpp:1608 ../src/widgets/gradient-selector.cpp:228
+#: ../src/gradient-chemistry.cpp:1608 ../src/widgets/gradient-selector.cpp:245
msgid "Delete swatch"
msgstr "Вилучити зразок"
@@ -7691,6 +9560,12 @@ msgstr ""
"\n"
"Файл вже існує у «%s». Заміна призведе до перезапису його вмісту."
+#: ../src/interface.cpp:1395 ../src/ui/dialog/export.cpp:1298
+#: ../src/widgets/desktop-widget.cpp:1127
+#: ../src/widgets/desktop-widget.cpp:1189
+msgid "_Cancel"
+msgstr "_Скасувати"
+
#: ../src/interface.cpp:1396 ../share/extensions/web-set-att.inx.h:21
#: ../share/extensions/web-transmit-att.inx.h:19
msgid "Replace"
@@ -7706,7 +9581,7 @@ msgid "Enter group #%1"
msgstr "Увійти до групи №%1"
#. Item dialog
-#: ../src/interface.cpp:1644 ../src/verbs.cpp:2851
+#: ../src/interface.cpp:1644 ../src/verbs.cpp:2853
msgid "_Object Properties..."
msgstr "В_ластивості об'єкта…"
@@ -7844,12 +9719,12 @@ msgid "_Fill and Stroke..."
msgstr "_Заповнення та штрих"
#. Edit Text dialog
-#: ../src/interface.cpp:2183 ../src/verbs.cpp:2833
+#: ../src/interface.cpp:2183 ../src/verbs.cpp:2835
msgid "_Text and Font..."
msgstr "_Текст та шрифт…"
#. Spellcheck dialog
-#: ../src/interface.cpp:2189 ../src/verbs.cpp:2841
+#: ../src/interface.cpp:2189 ../src/verbs.cpp:2843
msgid "Check Spellin_g..."
msgstr "Перевірити п_равопис…"
@@ -8104,9 +9979,9 @@ msgstr ""
#: ../src/libgdl/gdl-dock-notebook.c:132
#: ../src/ui/dialog/align-and-distribute.cpp:1003
-#: ../src/ui/dialog/document-properties.cpp:149
+#: ../src/ui/dialog/document-properties.cpp:150
#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1551
-#: ../src/widgets/desktop-widget.cpp:2003
+#: ../src/widgets/desktop-widget.cpp:1994
#: ../share/extensions/voronoi2svg.inx.h:9
msgid "Page"
msgstr "Сторінка"
@@ -8118,7 +9993,7 @@ msgstr "Індекс поточної сторінки"
#: ../src/libgdl/gdl-dock-object.c:125
#: ../src/ui/dialog/inkscape-preferences.cpp:1495
#: ../src/ui/widget/page-sizer.cpp:258
-#: ../src/widgets/gradient-selector.cpp:157
+#: ../src/widgets/gradient-selector.cpp:158
#: ../src/widgets/sp-xmlview-attr-list.cpp:54
msgid "Name"
msgstr "Назва"
@@ -8424,7 +10299,7 @@ msgstr "Лінійка"
msgid "Power stroke"
msgstr "Потужний штрих"
-#: ../src/live_effects/effect.cpp:124 ../src/selection-chemistry.cpp:2790
+#: ../src/live_effects/effect.cpp:124 ../src/selection-chemistry.cpp:2797
msgid "Clone original path"
msgstr "Клонувати початковий контур"
@@ -8451,12 +10326,12 @@ msgstr ""
"Будь ласка, вкажіть параметр контуру для геометричних побудов «%s» за "
"допомогою %d клацань мишею"
-#: ../src/live_effects/effect.cpp:632
+#: ../src/live_effects/effect.cpp:626
#, c-format
msgid "Editing parameter <b>%s</b>."
msgstr "Редагування параметра <b>%s</b>."
-#: ../src/live_effects/effect.cpp:637
+#: ../src/live_effects/effect.cpp:631
msgid "None of the applied path effect's parameters can be edited on-canvas."
msgstr ""
"Жоден із застосованих параметрів ефекту контуру не можна редагувати на "
@@ -8487,11 +10362,13 @@ msgid "Specifies the right end of the bisector"
msgstr "Визначає довжину правої частини бісектриси"
#: ../src/live_effects/lpe-angle_bisector.cpp:86
+#: ../src/live_effects/lpe-perp_bisector.cpp:159
msgid "Adjust the \"left\" end of the bisector"
msgstr "Коригувати розташування «лівого» кінця бісектриси"
#: ../src/live_effects/lpe-angle_bisector.cpp:92
-msgid "Adjust the \"right\" of the bisector"
+#: ../src/live_effects/lpe-perp_bisector.cpp:165
+msgid "Adjust the \"right\" end of the bisector"
msgstr "Коригувати розташування «правого» кінця бісектриси"
#: ../src/live_effects/lpe-bendpath.cpp:53
@@ -8936,60 +10813,60 @@ msgstr ""
"контуру траєкторії."
#. initialise your parameters here:
-#: ../src/live_effects/lpe-knot.cpp:347
+#: ../src/live_effects/lpe-knot.cpp:350
msgid "Fi_xed width:"
msgstr "_Фіксована ширина:"
-#: ../src/live_effects/lpe-knot.cpp:347
+#: ../src/live_effects/lpe-knot.cpp:350
msgid "Size of hidden region of lower string"
msgstr "Розмір схованого фрагмента нижнього рядка"
-#: ../src/live_effects/lpe-knot.cpp:348
+#: ../src/live_effects/lpe-knot.cpp:351
msgid "_In units of stroke width"
msgstr "_У одиницях товщини штриха"
-#: ../src/live_effects/lpe-knot.cpp:348
+#: ../src/live_effects/lpe-knot.cpp:351
msgid "Consider 'Interruption width' as a ratio of stroke width"
msgstr "Обчислювати «ширину проміжку» відносно товщини штриха"
-#: ../src/live_effects/lpe-knot.cpp:349
+#: ../src/live_effects/lpe-knot.cpp:352
msgid "St_roke width"
msgstr "Тов_щина штриха"
-#: ../src/live_effects/lpe-knot.cpp:349
+#: ../src/live_effects/lpe-knot.cpp:352
msgid "Add the stroke width to the interruption size"
msgstr "Додати ширину штриха до розміру проміжку"
-#: ../src/live_effects/lpe-knot.cpp:350
+#: ../src/live_effects/lpe-knot.cpp:353
msgid "_Crossing path stroke width"
msgstr "Товщина штриха _контуру перетинання"
-#: ../src/live_effects/lpe-knot.cpp:350
+#: ../src/live_effects/lpe-knot.cpp:353
msgid "Add crossed stroke width to the interruption size"
msgstr "Додати ширину перпендикулярного штриха до розміру проміжку"
-#: ../src/live_effects/lpe-knot.cpp:351
+#: ../src/live_effects/lpe-knot.cpp:354
msgid "S_witcher size:"
msgstr "Розм_ір перемикача:"
-#: ../src/live_effects/lpe-knot.cpp:351
+#: ../src/live_effects/lpe-knot.cpp:354
msgid "Orientation indicator/switcher size"
msgstr "Розмір індикатора/перемикача орієнтації"
-#: ../src/live_effects/lpe-knot.cpp:352
+#: ../src/live_effects/lpe-knot.cpp:355
msgid "Crossing Signs"
msgstr "Знаки перехресть"
-#: ../src/live_effects/lpe-knot.cpp:352
+#: ../src/live_effects/lpe-knot.cpp:355
msgid "Crossings signs"
msgstr "Знаки перехресть"
-#: ../src/live_effects/lpe-knot.cpp:617
+#: ../src/live_effects/lpe-knot.cpp:620
msgid "Drag to select a crossing, click to flip it"
msgstr "Перетягніть, щоб вибрати перехрестя, клацніть, щоб віддзеркалити його"
#. / @todo Is this the right verb?
-#: ../src/live_effects/lpe-knot.cpp:655
+#: ../src/live_effects/lpe-knot.cpp:658
msgid "Change knot crossing"
msgstr "Змінити перехрестя у вузлі"
@@ -9193,7 +11070,7 @@ msgstr "Скоригувати «правий» кінець паралельн
#: ../src/live_effects/lpe-path_length.cpp:26
#: ../src/live_effects/lpe-sketch.cpp:58
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2668
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2869
#: ../share/extensions/render_alphabetsoup.inx.h:3
msgid "Scale:"
msgstr "Масштаб:"
@@ -9322,14 +11199,6 @@ msgid "Fuse ends closer than this number. 0 means don't fuse."
msgstr ""
"Об'єднувати кінці, ближчі за вказане значення. 0 означає «не об'єднувати»."
-#: ../src/live_effects/lpe-perp_bisector.cpp:159
-msgid "Adjust the bisector's \"left\" end"
-msgstr "Скоригувати «лівий» кінець бісектриси"
-
-#: ../src/live_effects/lpe-perp_bisector.cpp:165
-msgid "Adjust the bisector's \"right\" end"
-msgstr "Скоригувати «правий» кінець бісектриси"
-
#. initialise your parameters here:
#: ../src/live_effects/lpe-perspective_path.cpp:47
msgid "Scale x"
@@ -10058,12 +11927,12 @@ msgstr "Змінити булівський параметр"
msgid "Change enumeration parameter"
msgstr "Зміна параметра нумерації"
-#: ../src/live_effects/parameter/originalpath.cpp:70
-#: ../src/live_effects/parameter/path.cpp:194
+#: ../src/live_effects/parameter/originalpath.cpp:71
+#: ../src/live_effects/parameter/path.cpp:195
msgid "Link to path"
msgstr "Пов'язати з контуром"
-#: ../src/live_effects/parameter/originalpath.cpp:82
+#: ../src/live_effects/parameter/originalpath.cpp:83
msgid "Select original"
msgstr "Позначити оригінал"
@@ -10071,23 +11940,23 @@ msgstr "Позначити оригінал"
msgid "Change scalar parameter"
msgstr "Змінити скалярний параметр"
-#: ../src/live_effects/parameter/path.cpp:164
+#: ../src/live_effects/parameter/path.cpp:165
msgid "Edit on-canvas"
msgstr "Редагувати на полотні"
-#: ../src/live_effects/parameter/path.cpp:174
+#: ../src/live_effects/parameter/path.cpp:175
msgid "Copy path"
msgstr "Копіювати контур"
-#: ../src/live_effects/parameter/path.cpp:184
+#: ../src/live_effects/parameter/path.cpp:185
msgid "Paste path"
msgstr "Вставити контур"
-#: ../src/live_effects/parameter/path.cpp:437
+#: ../src/live_effects/parameter/path.cpp:438
msgid "Paste path parameter"
msgstr "Вставити параметр контуру"
-#: ../src/live_effects/parameter/path.cpp:469
+#: ../src/live_effects/parameter/path.cpp:470
msgid "Link path parameter to path"
msgstr "Пов'язати параметр контуру з контуром"
@@ -10434,7 +12303,7 @@ msgstr "ІД-ОБ'ЄКТА"
msgid "Start Inkscape in interactive shell mode."
msgstr "Запустити Inkscape у режимі інтерактивної оболонки."
-#: ../src/main.cpp:868 ../src/main.cpp:1267
+#: ../src/main.cpp:871 ../src/main.cpp:1270
msgid ""
"[OPTIONS...] [FILE...]\n"
"\n"
@@ -10987,17 +12856,17 @@ msgstr "XML-фрагмент RDF-розділу «Ліцензія»"
msgid "Fixup broken links"
msgstr "Виправлення помилкових посилань"
-#: ../src/selection-chemistry.cpp:394
+#: ../src/selection-chemistry.cpp:395
msgid "Delete text"
msgstr "Вилучити текст"
-#: ../src/selection-chemistry.cpp:402
+#: ../src/selection-chemistry.cpp:403
msgid "<b>Nothing</b> was deleted."
msgstr "<b>Нічого</b> не було вилучено."
-#: ../src/selection-chemistry.cpp:421
+#: ../src/selection-chemistry.cpp:422
#: ../src/ui/dialog/calligraphic-profile-rename.cpp:75
-#: ../src/ui/dialog/swatches.cpp:278 ../src/ui/tools/text-tool.cpp:994
+#: ../src/ui/dialog/swatches.cpp:278 ../src/ui/tools/text-tool.cpp:995
#: ../src/widgets/eraser-toolbar.cpp:110
#: ../src/widgets/gradient-toolbar.cpp:1196
#: ../src/widgets/gradient-toolbar.cpp:1210
@@ -11006,249 +12875,249 @@ msgstr "<b>Нічого</b> не було вилучено."
msgid "Delete"
msgstr "Вилучити"
-#: ../src/selection-chemistry.cpp:449
+#: ../src/selection-chemistry.cpp:450
msgid "Select <b>object(s)</b> to duplicate."
msgstr "Позначте <b>об'єкт(и)</b> для дублювання."
-#: ../src/selection-chemistry.cpp:558
+#: ../src/selection-chemistry.cpp:559
msgid "Delete all"
msgstr "Вилучити все"
-#: ../src/selection-chemistry.cpp:748
+#: ../src/selection-chemistry.cpp:749
msgid "Select <b>some objects</b> to group."
msgstr "Позначте <b>два або більше об'єктів</b> для групування."
-#: ../src/selection-chemistry.cpp:763 ../src/sp-item-group.cpp:331
+#: ../src/selection-chemistry.cpp:764 ../src/sp-item-group.cpp:331
msgid "Group"
msgstr "Згрупувати"
-#: ../src/selection-chemistry.cpp:772
+#: ../src/selection-chemistry.cpp:773
msgid "Select a <b>group</b> to ungroup."
msgstr "Позначте <b>групу</b> для розгрупування."
-#: ../src/selection-chemistry.cpp:815
+#: ../src/selection-chemistry.cpp:816
msgid "<b>No groups</b> to ungroup in the selection."
msgstr "У позначеному <b>немає груп</b>."
-#: ../src/selection-chemistry.cpp:821 ../src/sp-item-group.cpp:564
+#: ../src/selection-chemistry.cpp:822 ../src/sp-item-group.cpp:564
msgid "Ungroup"
msgstr "Розгрупувати"
-#: ../src/selection-chemistry.cpp:902
+#: ../src/selection-chemistry.cpp:903
msgid "Select <b>object(s)</b> to raise."
msgstr "Оберіть <b>об'єкт(и)</b> для підняття."
-#: ../src/selection-chemistry.cpp:908 ../src/selection-chemistry.cpp:964
-#: ../src/selection-chemistry.cpp:992 ../src/selection-chemistry.cpp:1053
+#: ../src/selection-chemistry.cpp:909 ../src/selection-chemistry.cpp:965
+#: ../src/selection-chemistry.cpp:993 ../src/selection-chemistry.cpp:1054
msgid ""
"You cannot raise/lower objects from <b>different groups</b> or <b>layers</b>."
msgstr ""
"Не можна піднімати/опускати об'єкти з <b>різних груп</b> чи <b>шарів</b>."
#. TRANSLATORS: "Raise" means "to raise an object" in the undo history
-#: ../src/selection-chemistry.cpp:948
+#: ../src/selection-chemistry.cpp:949
msgctxt "Undo action"
msgid "Raise"
msgstr "підняття"
-#: ../src/selection-chemistry.cpp:956
+#: ../src/selection-chemistry.cpp:957
msgid "Select <b>object(s)</b> to raise to top."
msgstr "Позначте <b>об'єкт(и)</b> для піднімання нагору."
-#: ../src/selection-chemistry.cpp:979
+#: ../src/selection-chemistry.cpp:980
msgid "Raise to top"
msgstr "Підняти на передній план"
-#: ../src/selection-chemistry.cpp:986
+#: ../src/selection-chemistry.cpp:987
msgid "Select <b>object(s)</b> to lower."
msgstr "Позначте <b>об'єкт(и)</b> для опускання."
#. TRANSLATORS: "Lower" means "to lower an object" in the undo history
-#: ../src/selection-chemistry.cpp:1037
+#: ../src/selection-chemistry.cpp:1038
msgctxt "Undo action"
msgid "Lower"
msgstr "опускання"
-#: ../src/selection-chemistry.cpp:1045
+#: ../src/selection-chemistry.cpp:1046
msgid "Select <b>object(s)</b> to lower to bottom."
msgstr "Позначте <b>об'єкт(и)</b> для опускання на низ."
-#: ../src/selection-chemistry.cpp:1080
+#: ../src/selection-chemistry.cpp:1081
msgid "Lower to bottom"
msgstr "Опустити на задній план"
-#: ../src/selection-chemistry.cpp:1087
+#: ../src/selection-chemistry.cpp:1091
msgid "Nothing to undo."
msgstr "Немає операцій, що можна скасувати."
-#: ../src/selection-chemistry.cpp:1095
+#: ../src/selection-chemistry.cpp:1102
msgid "Nothing to redo."
msgstr "Немає операцій, що можна вернути."
-#: ../src/selection-chemistry.cpp:1162
+#: ../src/selection-chemistry.cpp:1169
msgid "Paste"
msgstr "Вставити"
-#: ../src/selection-chemistry.cpp:1170
+#: ../src/selection-chemistry.cpp:1177
msgid "Paste style"
msgstr "Вставити стиль"
-#: ../src/selection-chemistry.cpp:1180
+#: ../src/selection-chemistry.cpp:1187
msgid "Paste live path effect"
msgstr "Вставити ефект динамічного контуру"
-#: ../src/selection-chemistry.cpp:1202
+#: ../src/selection-chemistry.cpp:1209
msgid "Select <b>object(s)</b> to remove live path effects from."
msgstr "Оберіть <b>об'єкт(и)</b> для вилучення анімованих ефектів контурів."
-#: ../src/selection-chemistry.cpp:1214
+#: ../src/selection-chemistry.cpp:1221
msgid "Remove live path effect"
msgstr "Вилучити анімований ефект контуру"
-#: ../src/selection-chemistry.cpp:1225
+#: ../src/selection-chemistry.cpp:1232
msgid "Select <b>object(s)</b> to remove filters from."
msgstr "Виберіть <b>об'єкт(и)</b>, з яких слід вилучити фільтри."
-#: ../src/selection-chemistry.cpp:1235
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1462
+#: ../src/selection-chemistry.cpp:1242
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1669
msgid "Remove filter"
msgstr "Вилучити фільтр"
-#: ../src/selection-chemistry.cpp:1244
+#: ../src/selection-chemistry.cpp:1251
msgid "Paste size"
msgstr "Вставити розмір"
-#: ../src/selection-chemistry.cpp:1253
+#: ../src/selection-chemistry.cpp:1260
msgid "Paste size separately"
msgstr "Вставити розмір окремо"
-#: ../src/selection-chemistry.cpp:1263
+#: ../src/selection-chemistry.cpp:1270
msgid "Select <b>object(s)</b> to move to the layer above."
msgstr "Позначте <b>об'єкти</b> для переміщення на шар вище."
-#: ../src/selection-chemistry.cpp:1289
+#: ../src/selection-chemistry.cpp:1296
msgid "Raise to next layer"
msgstr "Піднятися на наступний шар"
-#: ../src/selection-chemistry.cpp:1296
+#: ../src/selection-chemistry.cpp:1303
msgid "No more layers above."
msgstr "Більше немає вищих шарів."
-#: ../src/selection-chemistry.cpp:1308
+#: ../src/selection-chemistry.cpp:1315
msgid "Select <b>object(s)</b> to move to the layer below."
msgstr "Позначте <b>об'єкти</b> для переміщення на шар нижче."
-#: ../src/selection-chemistry.cpp:1334
+#: ../src/selection-chemistry.cpp:1341
msgid "Lower to previous layer"
msgstr "Опуститися на попередній шар"
-#: ../src/selection-chemistry.cpp:1341
+#: ../src/selection-chemistry.cpp:1348
msgid "No more layers below."
msgstr "Немає нижчого шару."
-#: ../src/selection-chemistry.cpp:1353
+#: ../src/selection-chemistry.cpp:1360
msgid "Select <b>object(s)</b> to move."
msgstr "Позначте <b>об'єкти</b> для пересування."
-#: ../src/selection-chemistry.cpp:1370 ../src/verbs.cpp:2581
+#: ../src/selection-chemistry.cpp:1377 ../src/verbs.cpp:2581
msgid "Move selection to layer"
msgstr "Пересунути позначене до шару"
-#: ../src/selection-chemistry.cpp:1594
+#: ../src/selection-chemistry.cpp:1601
msgid "Remove transform"
msgstr "Прибрати трансформацію"
-#: ../src/selection-chemistry.cpp:1697
+#: ../src/selection-chemistry.cpp:1704
msgid "Rotate 90&#176; CCW"
msgstr "Обернути на 90&#176; проти годинникової стрілки"
-#: ../src/selection-chemistry.cpp:1697
+#: ../src/selection-chemistry.cpp:1704
msgid "Rotate 90&#176; CW"
msgstr "Обернути на 90&#176; за годинниковою стрілкою"
-#: ../src/selection-chemistry.cpp:1718 ../src/seltrans.cpp:468
-#: ../src/ui/dialog/transformation.cpp:893
+#: ../src/selection-chemistry.cpp:1725 ../src/seltrans.cpp:468
+#: ../src/ui/dialog/transformation.cpp:894
msgid "Rotate"
msgstr "Обертати"
-#: ../src/selection-chemistry.cpp:2097
+#: ../src/selection-chemistry.cpp:2104
msgid "Rotate by pixels"
msgstr "Обертати поточково"
-#: ../src/selection-chemistry.cpp:2127 ../src/seltrans.cpp:465
-#: ../src/ui/dialog/transformation.cpp:868
+#: ../src/selection-chemistry.cpp:2134 ../src/seltrans.cpp:465
+#: ../src/ui/dialog/transformation.cpp:869
#: ../share/extensions/interp_att_g.inx.h:12
msgid "Scale"
msgstr "Масштабувати"
-#: ../src/selection-chemistry.cpp:2152
+#: ../src/selection-chemistry.cpp:2159
msgid "Scale by whole factor"
msgstr "Масштабувати за повним коефіцієнтом"
-#: ../src/selection-chemistry.cpp:2167
+#: ../src/selection-chemistry.cpp:2174
msgid "Move vertically"
msgstr "Перемістити вертикально"
-#: ../src/selection-chemistry.cpp:2170
+#: ../src/selection-chemistry.cpp:2177
msgid "Move horizontally"
msgstr "Перемістити горизонтально"
-#: ../src/selection-chemistry.cpp:2173 ../src/selection-chemistry.cpp:2199
+#: ../src/selection-chemistry.cpp:2180 ../src/selection-chemistry.cpp:2206
#: ../src/seltrans.cpp:462 ../src/ui/dialog/transformation.cpp:807
msgid "Move"
msgstr "Перемістити"
-#: ../src/selection-chemistry.cpp:2193
+#: ../src/selection-chemistry.cpp:2200
msgid "Move vertically by pixels"
msgstr "Перемістити вертикально поточково"
-#: ../src/selection-chemistry.cpp:2196
+#: ../src/selection-chemistry.cpp:2203
msgid "Move horizontally by pixels"
msgstr "Перемістити горизонтально поточково"
-#: ../src/selection-chemistry.cpp:2328
+#: ../src/selection-chemistry.cpp:2335
msgid "The selection has no applied path effect."
msgstr "Обране не має застосованого ефекту контуру."
-#: ../src/selection-chemistry.cpp:2497 ../src/ui/dialog/clonetiler.cpp:2218
+#: ../src/selection-chemistry.cpp:2504 ../src/ui/dialog/clonetiler.cpp:2218
msgid "Select an <b>object</b> to clone."
msgstr "Позначте <b>об'єкт</b> для клонування."
-#: ../src/selection-chemistry.cpp:2533
+#: ../src/selection-chemistry.cpp:2540
msgctxt "Action"
msgid "Clone"
msgstr "Клонувати"
-#: ../src/selection-chemistry.cpp:2549
+#: ../src/selection-chemistry.cpp:2556
msgid "Select <b>clones</b> to relink."
msgstr "Позначте <b>клон</b> для перез'єднання."
-#: ../src/selection-chemistry.cpp:2556
+#: ../src/selection-chemistry.cpp:2563
msgid "Copy an <b>object</b> to clipboard to relink clones to."
msgstr ""
"Копіювати <b>об'єкт</b> до буфера обміну інформації для перез'єднання клонів."
-#: ../src/selection-chemistry.cpp:2580
+#: ../src/selection-chemistry.cpp:2587
msgid "<b>No clones to relink</b> in the selection."
msgstr "У позначеному <b>немає клонів для перез'єднання</b>."
-#: ../src/selection-chemistry.cpp:2583
+#: ../src/selection-chemistry.cpp:2590
msgid "Relink clone"
msgstr "Перез'єднати клон"
-#: ../src/selection-chemistry.cpp:2597
+#: ../src/selection-chemistry.cpp:2604
msgid "Select <b>clones</b> to unlink."
msgstr "Позначте <b>клон</b> для від'єднання."
-#: ../src/selection-chemistry.cpp:2651
+#: ../src/selection-chemistry.cpp:2658
msgid "<b>No clones to unlink</b> in the selection."
msgstr "У позначеному <b>немає клонів</b>."
-#: ../src/selection-chemistry.cpp:2655
+#: ../src/selection-chemistry.cpp:2662
msgid "Unlink clone"
msgstr "Від'єднати клон"
-#: ../src/selection-chemistry.cpp:2668
+#: ../src/selection-chemistry.cpp:2675
msgid ""
"Select a <b>clone</b> to go to its original. Select a <b>linked offset</b> "
"to go to its source. Select a <b>text on path</b> to go to the path. Select "
@@ -11258,7 +13127,7 @@ msgstr ""
"перейти до її контуру; <b>текст вздовж контуру</b>, щоб перейти до його "
"контуру. Позначте <b>текст у рамці</b>, щоб перейти до рамки."
-#: ../src/selection-chemistry.cpp:2701
+#: ../src/selection-chemistry.cpp:2708
msgid ""
"<b>Cannot find</b> the object to select (orphaned clone, offset, textpath, "
"flowed text?)"
@@ -11266,7 +13135,7 @@ msgstr ""
"<b>Не вдається знайти</b> об'єкт, що позначається (осиротілий клон, втяжка, "
"текст вздовж контуру чи текст у рамці?)"
-#: ../src/selection-chemistry.cpp:2707
+#: ../src/selection-chemistry.cpp:2714
msgid ""
"The object you're trying to select is <b>not visible</b> (it is in &lt;"
"defs&gt;)"
@@ -11274,135 +13143,135 @@ msgstr ""
"Об'єкт, який ви намагаєтесь позначити, є <b>невидимим</b> (знаходиться у &lt;"
"defs&gt;)"
-#: ../src/selection-chemistry.cpp:2752
+#: ../src/selection-chemistry.cpp:2759
msgid "Select <b>one</b> path to clone."
msgstr "Позначте <b>один</b> контур для клонування."
-#: ../src/selection-chemistry.cpp:2756
+#: ../src/selection-chemistry.cpp:2763
msgid "Select one <b>path</b> to clone."
msgstr "Позначте один <b>контур</b> для клонування."
-#: ../src/selection-chemistry.cpp:2811
+#: ../src/selection-chemistry.cpp:2819
msgid "Select <b>object(s)</b> to convert to marker."
msgstr "Позначте <b>об'єкт(и)</b> для перетворення у маркер."
-#: ../src/selection-chemistry.cpp:2879
+#: ../src/selection-chemistry.cpp:2886
msgid "Objects to marker"
msgstr "Об'єкти у маркер"
-#: ../src/selection-chemistry.cpp:2903
+#: ../src/selection-chemistry.cpp:2910
msgid "Select <b>object(s)</b> to convert to guides."
msgstr "Позначте <b>об'єкт(и)</b> для перетворення у напрямні."
-#: ../src/selection-chemistry.cpp:2926
+#: ../src/selection-chemistry.cpp:2933
msgid "Objects to guides"
msgstr "Об'єкти у напрямні"
-#: ../src/selection-chemistry.cpp:2945
+#: ../src/selection-chemistry.cpp:2952
msgid "Select <b>groups</b> to convert to symbols."
msgstr "Позначте <b>групи</b> для перетворення на символи."
-#: ../src/selection-chemistry.cpp:2965
+#: ../src/selection-chemistry.cpp:2972
msgid "No <b>groups</b> converted to symbols."
msgstr "На символи не перетвореною жодної <b>групи</b>."
#. Group just disappears, nothing to select.
-#: ../src/selection-chemistry.cpp:2972
+#: ../src/selection-chemistry.cpp:2979
msgid "Group to symbol"
msgstr "Групу у символ"
-#: ../src/selection-chemistry.cpp:3038
+#: ../src/selection-chemistry.cpp:3045
msgid "Select a <b>symbol</b> to extract objects from."
msgstr "Позначте <b>символ</b> для видобування з нього об’єктів."
-#: ../src/selection-chemistry.cpp:3047
+#: ../src/selection-chemistry.cpp:3054
msgid "Select only one <b>symbol</b> to convert to group."
msgstr "Позначте лише один <b>символ</b> для перетворення на групу."
-#: ../src/selection-chemistry.cpp:3088
+#: ../src/selection-chemistry.cpp:3096
msgid "Group from symbol"
msgstr "Група з символу"
-#: ../src/selection-chemistry.cpp:3105
+#: ../src/selection-chemistry.cpp:3114
msgid "Select <b>object(s)</b> to convert to pattern."
msgstr "Позначте <b>об'єкт(и)</b> для перетворення у візерунок."
-#: ../src/selection-chemistry.cpp:3195
+#: ../src/selection-chemistry.cpp:3204
msgid "Objects to pattern"
msgstr "Об'єкти у візерунок"
-#: ../src/selection-chemistry.cpp:3211
+#: ../src/selection-chemistry.cpp:3220
msgid "Select an <b>object with pattern fill</b> to extract objects from."
msgstr ""
"Позначте <b>об'єкт із заповненням візерунком</b> для витягування об'єктів з "
"нього."
-#: ../src/selection-chemistry.cpp:3266
+#: ../src/selection-chemistry.cpp:3275
msgid "<b>No pattern fills</b> in the selection."
msgstr "У позначеному <b>немає заповнення візерунком</b>."
-#: ../src/selection-chemistry.cpp:3269
+#: ../src/selection-chemistry.cpp:3278
msgid "Pattern to objects"
msgstr "Візерунок у об'єкти"
-#: ../src/selection-chemistry.cpp:3360
+#: ../src/selection-chemistry.cpp:3369
msgid "Select <b>object(s)</b> to make a bitmap copy."
msgstr "Позначте <b>об'єкти</b> для створення їхньої растрової копії."
-#: ../src/selection-chemistry.cpp:3364
+#: ../src/selection-chemistry.cpp:3373
msgid "Rendering bitmap..."
msgstr "Показ растрового зображення…"
-#: ../src/selection-chemistry.cpp:3543
+#: ../src/selection-chemistry.cpp:3552
msgid "Create bitmap"
msgstr "Створення растрового зображення"
-#: ../src/selection-chemistry.cpp:3575
+#: ../src/selection-chemistry.cpp:3584
msgid "Select <b>object(s)</b> to create clippath or mask from."
msgstr ""
"Оберіть <b>об'єкт(и)</b> для створення з них контуру вирізання або маски."
-#: ../src/selection-chemistry.cpp:3578
+#: ../src/selection-chemistry.cpp:3587
msgid "Select mask object and <b>object(s)</b> to apply clippath or mask to."
msgstr ""
"Оберіть об'єкт-маску та <b>об'єкт(и)</b> для застосування вирізання або "
"маскування."
-#: ../src/selection-chemistry.cpp:3761
+#: ../src/selection-chemistry.cpp:3770
msgid "Set clipping path"
msgstr "Задати контур вирізання"
-#: ../src/selection-chemistry.cpp:3763
+#: ../src/selection-chemistry.cpp:3772
msgid "Set mask"
msgstr "Задати маску"
-#: ../src/selection-chemistry.cpp:3778
+#: ../src/selection-chemistry.cpp:3787
msgid "Select <b>object(s)</b> to remove clippath or mask from."
msgstr ""
"Оберіть <b>об'єкт(и)</b> для вилучення контуру вирізання або маскування."
-#: ../src/selection-chemistry.cpp:3889
+#: ../src/selection-chemistry.cpp:3898
msgid "Release clipping path"
msgstr "Від'єднати закріплений контур"
-#: ../src/selection-chemistry.cpp:3891
+#: ../src/selection-chemistry.cpp:3900
msgid "Release mask"
msgstr "Маску знято"
-#: ../src/selection-chemistry.cpp:3910
+#: ../src/selection-chemistry.cpp:3919
msgid "Select <b>object(s)</b> to fit canvas to."
msgstr "Оберіть <b>об'єкт(и)</b> для підбирання їхніх розмірів під полотно."
#. Fit Page
-#: ../src/selection-chemistry.cpp:3930 ../src/verbs.cpp:2907
+#: ../src/selection-chemistry.cpp:3939 ../src/verbs.cpp:2909
msgid "Fit Page to Selection"
msgstr "Підігнати полотно до позначеної області"
-#: ../src/selection-chemistry.cpp:3959 ../src/verbs.cpp:2909
+#: ../src/selection-chemistry.cpp:3968 ../src/verbs.cpp:2911
msgid "Fit Page to Drawing"
msgstr "Підігнати полотно під намальоване"
-#: ../src/selection-chemistry.cpp:3980 ../src/verbs.cpp:2911
+#: ../src/selection-chemistry.cpp:3989 ../src/verbs.cpp:2913
msgid "Fit Page to Selection or Drawing"
msgstr "Підігнати полотно під позначену область чи область креслення"
@@ -11493,7 +13362,7 @@ msgstr[0] "; <i>%d фільтрований об'єкт</i> "
msgstr[1] "; <i>%d фільтровані об'єкти</i> "
msgstr[2] "; <i>%d фільтрованих об'єктів</i> "
-#: ../src/seltrans.cpp:471 ../src/ui/dialog/transformation.cpp:981
+#: ../src/seltrans.cpp:471 ../src/ui/dialog/transformation.cpp:982
msgid "Skew"
msgstr "Нахил"
@@ -11647,7 +13516,7 @@ msgid "Linked Flowed Text"
msgstr "Пов’язаний контурний текст"
#: ../src/sp-flowtext.cpp:298 ../src/sp-text.cpp:357
-#: ../src/ui/tools/text-tool.cpp:1599
+#: ../src/ui/tools/text-tool.cpp:1600
msgid " [truncated]"
msgstr " (обрізано)"
@@ -12067,15 +13936,15 @@ msgstr "У позначеному <b>немає тексту на контурі
msgid "Remove text from path"
msgstr "Зняти текст з контуру"
-#: ../src/text-chemistry.cpp:261 ../src/text-chemistry.cpp:282
+#: ../src/text-chemistry.cpp:262 ../src/text-chemistry.cpp:283
msgid "Select <b>text(s)</b> to remove kerns from."
msgstr "Позначте <b>текст</b> для вилучення ручного міжлітерного інтервалу."
-#: ../src/text-chemistry.cpp:285
+#: ../src/text-chemistry.cpp:286
msgid "Remove manual kerns"
msgstr "Вилучити ручний міжлітерний інтервал"
-#: ../src/text-chemistry.cpp:305
+#: ../src/text-chemistry.cpp:306
msgid ""
"Select <b>a text</b> and one or more <b>paths or shapes</b> to flow text "
"into frame."
@@ -12083,31 +13952,31 @@ msgstr ""
"Позначте <b>текст</b> та <b>контур чи фігуру</b> для розміщення тексту у "
"рамку."
-#: ../src/text-chemistry.cpp:375
+#: ../src/text-chemistry.cpp:376
msgid "Flow text into shape"
msgstr "Верстання тексту у фігуру"
-#: ../src/text-chemistry.cpp:397
+#: ../src/text-chemistry.cpp:398
msgid "Select <b>a flowed text</b> to unflow it."
msgstr "Позначте <b>текст у рамці</b>, щоб вийняти його з рамки."
-#: ../src/text-chemistry.cpp:471
+#: ../src/text-chemistry.cpp:472
msgid "Unflow flowed text"
msgstr "Зробити текст неконтурним"
-#: ../src/text-chemistry.cpp:483
+#: ../src/text-chemistry.cpp:484
msgid "Select <b>flowed text(s)</b> to convert."
msgstr "Оберіть <b>контурний текст(и)</b> для перетворення."
-#: ../src/text-chemistry.cpp:501
+#: ../src/text-chemistry.cpp:502
msgid "The flowed text(s) must be <b>visible</b> in order to be converted."
msgstr "Для перетворення Текст-вздовж-контуру має бути <b>видимим</b>."
-#: ../src/text-chemistry.cpp:529
+#: ../src/text-chemistry.cpp:530
msgid "Convert flowed text to text"
msgstr "Перетворення контурного тексту на звичайний"
-#: ../src/text-chemistry.cpp:534
+#: ../src/text-chemistry.cpp:535
msgid "<b>No flowed text(s)</b> to convert in the selection."
msgstr "У позначеному <b>немає контурного тексту(ів)</b> для перетворення."
@@ -12207,7 +14076,7 @@ msgstr ""
"напрямної, <b>Клавіші-стрілки</b> — налаштування товщини (ліворуч/праворуч) "
"і кута (вгору/вниз)."
-#: ../src/tools-switch.cpp:103 ../src/ui/tools/text-tool.cpp:1626
+#: ../src/tools-switch.cpp:103 ../src/ui/tools/text-tool.cpp:1627
msgid ""
"<b>Click</b> to select or create text, <b>drag</b> to create flowed text; "
"then type."
@@ -12493,53 +14362,53 @@ msgid "_Treat selection as group: "
msgstr "Вва_жати вибране групою: "
#. Align
-#: ../src/ui/dialog/align-and-distribute.cpp:877 ../src/verbs.cpp:2939
-#: ../src/verbs.cpp:2940
+#: ../src/ui/dialog/align-and-distribute.cpp:877 ../src/verbs.cpp:2941
+#: ../src/verbs.cpp:2942
msgid "Align right edges of objects to the left edge of the anchor"
msgstr "Вирівняти праві краї об'єктів до лівого краю якоря"
-#: ../src/ui/dialog/align-and-distribute.cpp:880 ../src/verbs.cpp:2941
-#: ../src/verbs.cpp:2942
+#: ../src/ui/dialog/align-and-distribute.cpp:880 ../src/verbs.cpp:2943
+#: ../src/verbs.cpp:2944
msgid "Align left edges"
msgstr "Вирівняти ліві сторони"
-#: ../src/ui/dialog/align-and-distribute.cpp:883 ../src/verbs.cpp:2943
-#: ../src/verbs.cpp:2944
+#: ../src/ui/dialog/align-and-distribute.cpp:883 ../src/verbs.cpp:2945
+#: ../src/verbs.cpp:2946
msgid "Center on vertical axis"
msgstr "Центрувати за вертикальною віссю"
-#: ../src/ui/dialog/align-and-distribute.cpp:886 ../src/verbs.cpp:2945
-#: ../src/verbs.cpp:2946
+#: ../src/ui/dialog/align-and-distribute.cpp:886 ../src/verbs.cpp:2947
+#: ../src/verbs.cpp:2948
msgid "Align right sides"
msgstr "Вирівняти праві сторони"
-#: ../src/ui/dialog/align-and-distribute.cpp:889 ../src/verbs.cpp:2947
-#: ../src/verbs.cpp:2948
+#: ../src/ui/dialog/align-and-distribute.cpp:889 ../src/verbs.cpp:2949
+#: ../src/verbs.cpp:2950
msgid "Align left edges of objects to the right edge of the anchor"
msgstr "Вирівняти ліві краї об'єктів до правого краю якоря"
-#: ../src/ui/dialog/align-and-distribute.cpp:892 ../src/verbs.cpp:2949
-#: ../src/verbs.cpp:2950
+#: ../src/ui/dialog/align-and-distribute.cpp:892 ../src/verbs.cpp:2951
+#: ../src/verbs.cpp:2952
msgid "Align bottom edges of objects to the top edge of the anchor"
msgstr "Вирівняти нижні краї об'єктів до верхнього краю якоря"
-#: ../src/ui/dialog/align-and-distribute.cpp:895 ../src/verbs.cpp:2951
-#: ../src/verbs.cpp:2952
+#: ../src/ui/dialog/align-and-distribute.cpp:895 ../src/verbs.cpp:2953
+#: ../src/verbs.cpp:2954
msgid "Align top edges"
msgstr "Вирівняти верхні сторони"
-#: ../src/ui/dialog/align-and-distribute.cpp:898 ../src/verbs.cpp:2953
-#: ../src/verbs.cpp:2954
+#: ../src/ui/dialog/align-and-distribute.cpp:898 ../src/verbs.cpp:2955
+#: ../src/verbs.cpp:2956
msgid "Center on horizontal axis"
msgstr "Центрувати на горизонтальній осі"
-#: ../src/ui/dialog/align-and-distribute.cpp:901 ../src/verbs.cpp:2955
-#: ../src/verbs.cpp:2956
+#: ../src/ui/dialog/align-and-distribute.cpp:901 ../src/verbs.cpp:2957
+#: ../src/verbs.cpp:2958
msgid "Align bottom edges"
msgstr "Вирівняти нижні сторони"
-#: ../src/ui/dialog/align-and-distribute.cpp:904 ../src/verbs.cpp:2957
-#: ../src/verbs.cpp:2958
+#: ../src/ui/dialog/align-and-distribute.cpp:904 ../src/verbs.cpp:2959
+#: ../src/verbs.cpp:2960
msgid "Align top edges of objects to the bottom edge of the anchor"
msgstr "Вирівняти верхні краї об'єктів до нижнього краю якоря"
@@ -12661,7 +14530,7 @@ msgstr "Найменший об'єкт"
#: ../src/ui/dialog/align-and-distribute.cpp:1005
#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1555 ../src/verbs.cpp:175
-#: ../src/widgets/desktop-widget.cpp:2011
+#: ../src/widgets/desktop-widget.cpp:2002
#: ../share/extensions/printing_marks.inx.h:18
msgid "Selection"
msgstr "позначене"
@@ -13455,57 +15324,57 @@ msgid "Release log messages"
msgstr "Вимкнути повідомлення журналу"
#: ../src/ui/dialog/document-metadata.cpp:88
-#: ../src/ui/dialog/document-properties.cpp:155
+#: ../src/ui/dialog/document-properties.cpp:156
msgid "Metadata"
msgstr "Метадані"
#: ../src/ui/dialog/document-metadata.cpp:89
-#: ../src/ui/dialog/document-properties.cpp:156
+#: ../src/ui/dialog/document-properties.cpp:157
msgid "License"
msgstr "Ліцензія"
#: ../src/ui/dialog/document-metadata.cpp:126
-#: ../src/ui/dialog/document-properties.cpp:966
+#: ../src/ui/dialog/document-properties.cpp:1002
msgid "<b>Dublin Core Entities</b>"
msgstr "<b>Пункти Dublin Core</b>"
#: ../src/ui/dialog/document-metadata.cpp:168
-#: ../src/ui/dialog/document-properties.cpp:1028
+#: ../src/ui/dialog/document-properties.cpp:1064
msgid "<b>License</b>"
msgstr "<b>Ліцензія</b>"
#. ---------------------------------------------------------------
-#: ../src/ui/dialog/document-properties.cpp:108
+#: ../src/ui/dialog/document-properties.cpp:109
msgid "Show page _border"
msgstr "Показувати _рамку полотна"
-#: ../src/ui/dialog/document-properties.cpp:108
+#: ../src/ui/dialog/document-properties.cpp:109
msgid "If set, rectangular page border is shown"
msgstr "У разі встановлення буде показано прямокутну рамку сторінки"
-#: ../src/ui/dialog/document-properties.cpp:109
+#: ../src/ui/dialog/document-properties.cpp:110
msgid "Border on _top of drawing"
msgstr "Рамка полотна завжди _над малюнком"
-#: ../src/ui/dialog/document-properties.cpp:109
+#: ../src/ui/dialog/document-properties.cpp:110
msgid "If set, border is always on top of the drawing"
msgstr "У разі встановлення над малюнком завжди буде рамка полотна"
-#: ../src/ui/dialog/document-properties.cpp:110
+#: ../src/ui/dialog/document-properties.cpp:111
msgid "_Show border shadow"
msgstr "_Показувати тінь від рамки"
-#: ../src/ui/dialog/document-properties.cpp:110
+#: ../src/ui/dialog/document-properties.cpp:111
msgid "If set, page border shows a shadow on its right and lower side"
msgstr ""
"У разі встановлення границі сторінок відбиватимуть тіні на правій та нижній "
"сторонах"
-#: ../src/ui/dialog/document-properties.cpp:111
+#: ../src/ui/dialog/document-properties.cpp:112
msgid "Back_ground color:"
msgstr "Ко_лір тла:"
-#: ../src/ui/dialog/document-properties.cpp:111
+#: ../src/ui/dialog/document-properties.cpp:112
msgid ""
"Color of the page background. Note: transparency setting ignored while "
"editing but used when exporting to bitmap."
@@ -13513,80 +15382,80 @@ msgstr ""
"Колір тла сторінки. Зауваження: параметр прозорості буде проігноровано під "
"час редагування, але враховано під час експортування до растра."
-#: ../src/ui/dialog/document-properties.cpp:112
+#: ../src/ui/dialog/document-properties.cpp:113
msgid "Border _color:"
msgstr "_Колір рамки:"
-#: ../src/ui/dialog/document-properties.cpp:112
+#: ../src/ui/dialog/document-properties.cpp:113
msgid "Page border color"
msgstr "Колір рамки полотна"
-#: ../src/ui/dialog/document-properties.cpp:112
+#: ../src/ui/dialog/document-properties.cpp:113
msgid "Color of the page border"
msgstr "Колір рамки полотна"
-#: ../src/ui/dialog/document-properties.cpp:113
+#: ../src/ui/dialog/document-properties.cpp:114
msgid "Default _units:"
msgstr "Типові о_диниці:"
#. ---------------------------------------------------------------
#. General snap options
-#: ../src/ui/dialog/document-properties.cpp:117
+#: ../src/ui/dialog/document-properties.cpp:118
msgid "Show _guides"
msgstr "Показувати _напрямні"
-#: ../src/ui/dialog/document-properties.cpp:117
+#: ../src/ui/dialog/document-properties.cpp:118
msgid "Show or hide guides"
msgstr "Показати/сховати напрямні"
-#: ../src/ui/dialog/document-properties.cpp:118
+#: ../src/ui/dialog/document-properties.cpp:119
msgid "Guide co_lor:"
msgstr "Ко_лір напрямних:"
-#: ../src/ui/dialog/document-properties.cpp:118
+#: ../src/ui/dialog/document-properties.cpp:119
msgid "Guideline color"
msgstr "Колір напрямних"
-#: ../src/ui/dialog/document-properties.cpp:118
+#: ../src/ui/dialog/document-properties.cpp:119
msgid "Color of guidelines"
msgstr "Колір напрямних"
-#: ../src/ui/dialog/document-properties.cpp:119
+#: ../src/ui/dialog/document-properties.cpp:120
msgid "_Highlight color:"
msgstr "Колір _підсвічення:"
-#: ../src/ui/dialog/document-properties.cpp:119
+#: ../src/ui/dialog/document-properties.cpp:120
msgid "Highlighted guideline color"
msgstr "Колір підсвіченої напрямної"
-#: ../src/ui/dialog/document-properties.cpp:119
+#: ../src/ui/dialog/document-properties.cpp:120
msgid "Color of a guideline when it is under mouse"
msgstr "Колір напрямної при наведенні на неї миші"
#. ---------------------------------------------------------------
-#: ../src/ui/dialog/document-properties.cpp:121
+#: ../src/ui/dialog/document-properties.cpp:122
msgid "Snap _distance"
msgstr "_Відстань для прилипання"
-#: ../src/ui/dialog/document-properties.cpp:121
+#: ../src/ui/dialog/document-properties.cpp:122
msgid "Snap only when _closer than:"
msgstr "Прилипати на відстані, _меншій за:"
-#: ../src/ui/dialog/document-properties.cpp:121
-#: ../src/ui/dialog/document-properties.cpp:126
-#: ../src/ui/dialog/document-properties.cpp:131
+#: ../src/ui/dialog/document-properties.cpp:122
+#: ../src/ui/dialog/document-properties.cpp:127
+#: ../src/ui/dialog/document-properties.cpp:132
msgid "Always snap"
msgstr "Повсюдне прилипання"
-#: ../src/ui/dialog/document-properties.cpp:122
+#: ../src/ui/dialog/document-properties.cpp:123
msgid "Snapping distance, in screen pixels, for snapping to objects"
msgstr "Дистанція прилипання до об'єктів, у точках"
-#: ../src/ui/dialog/document-properties.cpp:122
+#: ../src/ui/dialog/document-properties.cpp:123
msgid "Always snap to objects, regardless of their distance"
msgstr "Повсюдне прилипання до об'єктів, незалежно від відстані"
-#: ../src/ui/dialog/document-properties.cpp:123
+#: ../src/ui/dialog/document-properties.cpp:124
msgid ""
"If set, objects only snap to another object when it's within the range "
"specified below"
@@ -13595,23 +15464,23 @@ msgstr ""
"знаходитимуться на відстані заданій нижче"
#. Options for snapping to grids
-#: ../src/ui/dialog/document-properties.cpp:126
+#: ../src/ui/dialog/document-properties.cpp:127
msgid "Snap d_istance"
msgstr "_Відстань для прилипання"
-#: ../src/ui/dialog/document-properties.cpp:126
+#: ../src/ui/dialog/document-properties.cpp:127
msgid "Snap only when c_loser than:"
msgstr "Прилипати на відстані, м_еншій за:"
-#: ../src/ui/dialog/document-properties.cpp:127
+#: ../src/ui/dialog/document-properties.cpp:128
msgid "Snapping distance, in screen pixels, for snapping to grid"
msgstr "Дистанція прилипання до сітки, у точках"
-#: ../src/ui/dialog/document-properties.cpp:127
+#: ../src/ui/dialog/document-properties.cpp:128
msgid "Always snap to grids, regardless of the distance"
msgstr "Повсюдне прилипання до сітки, незалежно від відстані"
-#: ../src/ui/dialog/document-properties.cpp:128
+#: ../src/ui/dialog/document-properties.cpp:129
msgid ""
"If set, objects only snap to a grid line when it's within the range "
"specified below"
@@ -13620,23 +15489,23 @@ msgstr ""
"знаходитимуться на заданій нижче відстані"
#. Options for snapping to guides
-#: ../src/ui/dialog/document-properties.cpp:131
+#: ../src/ui/dialog/document-properties.cpp:132
msgid "Snap dist_ance"
msgstr "В_ідстань для прилипання"
-#: ../src/ui/dialog/document-properties.cpp:131
+#: ../src/ui/dialog/document-properties.cpp:132
msgid "Snap only when close_r than:"
msgstr "Прилипати на відстані, ме_ншій за:"
-#: ../src/ui/dialog/document-properties.cpp:132
+#: ../src/ui/dialog/document-properties.cpp:133
msgid "Snapping distance, in screen pixels, for snapping to guides"
msgstr "Дистанція прилипання до напрямних, у точках"
-#: ../src/ui/dialog/document-properties.cpp:132
+#: ../src/ui/dialog/document-properties.cpp:133
msgid "Always snap to guides, regardless of the distance"
msgstr "Повсюдне прилипання до напрямних, незалежно від відстані"
-#: ../src/ui/dialog/document-properties.cpp:133
+#: ../src/ui/dialog/document-properties.cpp:134
msgid ""
"If set, objects only snap to a guide when it's within the range specified "
"below"
@@ -13645,106 +15514,106 @@ msgstr ""
"знаходитимуться на заданій нижче відстані"
#. ---------------------------------------------------------------
-#: ../src/ui/dialog/document-properties.cpp:136
+#: ../src/ui/dialog/document-properties.cpp:137
msgid "Snap to clip paths"
msgstr "Прилипання до контурів обрізання"
-#: ../src/ui/dialog/document-properties.cpp:136
+#: ../src/ui/dialog/document-properties.cpp:137
msgid "When snapping to paths, then also try snapping to clip paths"
msgstr "Намагатися виконати прилипання до контурів обрізання"
-#: ../src/ui/dialog/document-properties.cpp:137
+#: ../src/ui/dialog/document-properties.cpp:138
msgid "Snap to mask paths"
msgstr "Прилипання до контурів масок"
-#: ../src/ui/dialog/document-properties.cpp:137
+#: ../src/ui/dialog/document-properties.cpp:138
msgid "When snapping to paths, then also try snapping to mask paths"
msgstr "Намагатися виконати прилипання до контурів масок"
-#: ../src/ui/dialog/document-properties.cpp:138
+#: ../src/ui/dialog/document-properties.cpp:139
msgid "Snap perpendicularly"
msgstr "Перпендикулярне прилипання"
-#: ../src/ui/dialog/document-properties.cpp:138
+#: ../src/ui/dialog/document-properties.cpp:139
msgid ""
"When snapping to paths or guides, then also try snapping perpendicularly"
msgstr ""
"Намагатися під час прилипання виконувати і прилипання у перпендикулярному "
"напрямку"
-#: ../src/ui/dialog/document-properties.cpp:139
+#: ../src/ui/dialog/document-properties.cpp:140
msgid "Snap tangentially"
msgstr "Дотичне прилипання"
-#: ../src/ui/dialog/document-properties.cpp:139
+#: ../src/ui/dialog/document-properties.cpp:140
msgid "When snapping to paths or guides, then also try snapping tangentially"
msgstr ""
"Намагатися під час прилипання виконувати і прилипання у дотичному напрямку"
-#: ../src/ui/dialog/document-properties.cpp:142
+#: ../src/ui/dialog/document-properties.cpp:143
msgctxt "Grid"
msgid "_New"
msgstr "_Створити"
-#: ../src/ui/dialog/document-properties.cpp:142
+#: ../src/ui/dialog/document-properties.cpp:143
msgid "Create new grid."
msgstr "Створити нову напрямну."
-#: ../src/ui/dialog/document-properties.cpp:143
+#: ../src/ui/dialog/document-properties.cpp:144
msgctxt "Grid"
msgid "_Remove"
msgstr "Ви_лучити"
-#: ../src/ui/dialog/document-properties.cpp:143
+#: ../src/ui/dialog/document-properties.cpp:144
msgid "Remove selected grid."
msgstr "Вилучити вибрану сітку."
-#: ../src/ui/dialog/document-properties.cpp:150
+#: ../src/ui/dialog/document-properties.cpp:151
#: ../src/widgets/toolbox.cpp:1834
msgid "Guides"
msgstr "Напрямні"
-#: ../src/ui/dialog/document-properties.cpp:152 ../src/verbs.cpp:2748
+#: ../src/ui/dialog/document-properties.cpp:153 ../src/verbs.cpp:2748
msgid "Snap"
msgstr "Прилипання"
-#: ../src/ui/dialog/document-properties.cpp:154
+#: ../src/ui/dialog/document-properties.cpp:155
msgid "Scripting"
msgstr "Запис сценаріїв"
-#: ../src/ui/dialog/document-properties.cpp:317
+#: ../src/ui/dialog/document-properties.cpp:318
msgid "<b>General</b>"
msgstr "<b>Загальні</b>"
-#: ../src/ui/dialog/document-properties.cpp:319
+#: ../src/ui/dialog/document-properties.cpp:320
msgid "<b>Color</b>"
msgstr "<b>Колір</b>"
-#: ../src/ui/dialog/document-properties.cpp:321
+#: ../src/ui/dialog/document-properties.cpp:322
msgid "<b>Border</b>"
msgstr "<b>Рамка</b>"
-#: ../src/ui/dialog/document-properties.cpp:323
+#: ../src/ui/dialog/document-properties.cpp:324
msgid "<b>Page Size</b>"
msgstr "<b>Розмір сторінки</b>"
-#: ../src/ui/dialog/document-properties.cpp:356
+#: ../src/ui/dialog/document-properties.cpp:357
msgid "<b>Guides</b>"
msgstr "<b>Напрямні</b>"
-#: ../src/ui/dialog/document-properties.cpp:374
+#: ../src/ui/dialog/document-properties.cpp:375
msgid "<b>Snap to objects</b>"
msgstr "<b>Прилипання до об'єктів</b>"
-#: ../src/ui/dialog/document-properties.cpp:376
+#: ../src/ui/dialog/document-properties.cpp:377
msgid "<b>Snap to grids</b>"
msgstr "<b>Прилипання до сітки</b>"
-#: ../src/ui/dialog/document-properties.cpp:378
+#: ../src/ui/dialog/document-properties.cpp:379
msgid "<b>Snap to guides</b>"
msgstr "<b>Прилипання до напрямних</b>"
-#: ../src/ui/dialog/document-properties.cpp:380
+#: ../src/ui/dialog/document-properties.cpp:381
msgid "<b>Miscellaneous</b>"
msgstr "<b>Інше</b>"
@@ -13752,135 +15621,135 @@ msgstr "<b>Інше</b>"
#. Inkscape::GC::release(defsRepr);
#. inform the document, so we can undo
#. Color Management
-#: ../src/ui/dialog/document-properties.cpp:493 ../src/verbs.cpp:2923
+#: ../src/ui/dialog/document-properties.cpp:494 ../src/verbs.cpp:2925
msgid "Link Color Profile"
msgstr "Пов'язати профіль кольорів"
-#: ../src/ui/dialog/document-properties.cpp:594
+#: ../src/ui/dialog/document-properties.cpp:595
msgid "Remove linked color profile"
msgstr "Вилучити пов'язаний профіль кольорів"
-#: ../src/ui/dialog/document-properties.cpp:607
+#: ../src/ui/dialog/document-properties.cpp:608
msgid "<b>Linked Color Profiles:</b>"
msgstr "<b>Пов'язані профілі кольорів:</b>"
-#: ../src/ui/dialog/document-properties.cpp:609
+#: ../src/ui/dialog/document-properties.cpp:610
msgid "<b>Available Color Profiles:</b>"
msgstr "<b>Доступні профілі кольорів:</b>"
-#: ../src/ui/dialog/document-properties.cpp:611
+#: ../src/ui/dialog/document-properties.cpp:612
msgid "Link Profile"
msgstr "Пов'язати з профілем"
-#: ../src/ui/dialog/document-properties.cpp:614
+#: ../src/ui/dialog/document-properties.cpp:621
msgid "Unlink Profile"
msgstr "Від'єднати від профілю"
-#: ../src/ui/dialog/document-properties.cpp:692
+#: ../src/ui/dialog/document-properties.cpp:705
msgid "Profile Name"
msgstr "Назва профілю"
-#: ../src/ui/dialog/document-properties.cpp:728
+#: ../src/ui/dialog/document-properties.cpp:741
msgid "External scripts"
msgstr "Зовнішні скрипти"
-#: ../src/ui/dialog/document-properties.cpp:729
+#: ../src/ui/dialog/document-properties.cpp:742
msgid "Embedded scripts"
msgstr "Вбудовані скрипти"
-#: ../src/ui/dialog/document-properties.cpp:734
+#: ../src/ui/dialog/document-properties.cpp:747
msgid "<b>External script files:</b>"
msgstr "<b>Файли зовнішніх скриптів:</b>"
-#: ../src/ui/dialog/document-properties.cpp:736
+#: ../src/ui/dialog/document-properties.cpp:749
msgid "Add the current file name or browse for a file"
msgstr "Додайте назву поточного файла або вкажіть якийсь файл"
-#: ../src/ui/dialog/document-properties.cpp:739
-#: ../src/ui/dialog/document-properties.cpp:817
+#: ../src/ui/dialog/document-properties.cpp:758
+#: ../src/ui/dialog/document-properties.cpp:847
#: ../src/ui/widget/selected-style.cpp:339
msgid "Remove"
msgstr "Вилучити"
-#: ../src/ui/dialog/document-properties.cpp:804
+#: ../src/ui/dialog/document-properties.cpp:828
msgid "Filename"
msgstr "Назва файла"
-#: ../src/ui/dialog/document-properties.cpp:812
+#: ../src/ui/dialog/document-properties.cpp:836
msgid "<b>Embedded script files:</b>"
msgstr "<b>Файли вбудованих скриптів:</b>"
-#: ../src/ui/dialog/document-properties.cpp:814
+#: ../src/ui/dialog/document-properties.cpp:838
msgid "New"
msgstr "Створити"
-#: ../src/ui/dialog/document-properties.cpp:881
+#: ../src/ui/dialog/document-properties.cpp:917
msgid "Script id"
msgstr "Ід. скрипту"
-#: ../src/ui/dialog/document-properties.cpp:887
+#: ../src/ui/dialog/document-properties.cpp:923
msgid "<b>Content:</b>"
msgstr "<b>Вміст:</b>"
-#: ../src/ui/dialog/document-properties.cpp:1004
+#: ../src/ui/dialog/document-properties.cpp:1040
msgid "_Save as default"
msgstr "З_берегти як типові"
-#: ../src/ui/dialog/document-properties.cpp:1005
+#: ../src/ui/dialog/document-properties.cpp:1041
msgid "Save this metadata as the default metadata"
msgstr "Зберегти ці метадані як типові метадані"
-#: ../src/ui/dialog/document-properties.cpp:1006
+#: ../src/ui/dialog/document-properties.cpp:1042
msgid "Use _default"
msgstr "Використовувати _типові"
-#: ../src/ui/dialog/document-properties.cpp:1007
+#: ../src/ui/dialog/document-properties.cpp:1043
msgid "Use the previously saved default metadata here"
msgstr "Скористатися тут раніше збереженими типовими метаданими"
#. inform the document, so we can undo
-#: ../src/ui/dialog/document-properties.cpp:1080
+#: ../src/ui/dialog/document-properties.cpp:1116
msgid "Add external script..."
msgstr "Додати зовнішній скрипт…"
-#: ../src/ui/dialog/document-properties.cpp:1119
+#: ../src/ui/dialog/document-properties.cpp:1155
msgid "Select a script to load"
msgstr "Виберіть скрипт для завантаження"
#. inform the document, so we can undo
-#: ../src/ui/dialog/document-properties.cpp:1147
+#: ../src/ui/dialog/document-properties.cpp:1183
msgid "Add embedded script..."
msgstr "Додати вбудований скрипт…"
#. inform the document, so we can undo
-#: ../src/ui/dialog/document-properties.cpp:1178
+#: ../src/ui/dialog/document-properties.cpp:1214
msgid "Remove external script"
msgstr "Вилучити зовнішній скрипт"
#. inform the document, so we can undo
-#: ../src/ui/dialog/document-properties.cpp:1212
+#: ../src/ui/dialog/document-properties.cpp:1248
msgid "Remove embedded script"
msgstr "Вилучити вбудований скрипт"
#. TODO repr->set_content(_EmbeddedContent.get_buffer()->get_text());
#. inform the document, so we can undo
-#: ../src/ui/dialog/document-properties.cpp:1312
+#: ../src/ui/dialog/document-properties.cpp:1348
msgid "Edit embedded script"
msgstr "Редагувати вбудований скрипт"
-#: ../src/ui/dialog/document-properties.cpp:1395
+#: ../src/ui/dialog/document-properties.cpp:1431
msgid "<b>Creation</b>"
msgstr "<b>Створення</b>"
-#: ../src/ui/dialog/document-properties.cpp:1396
+#: ../src/ui/dialog/document-properties.cpp:1432
msgid "<b>Defined grids</b>"
msgstr "<b>Визначені сітки</b>"
-#: ../src/ui/dialog/document-properties.cpp:1639
+#: ../src/ui/dialog/document-properties.cpp:1675
msgid "Remove grid"
msgstr "Вилучити сітку"
-#: ../src/ui/dialog/document-properties.cpp:1707
+#: ../src/ui/dialog/document-properties.cpp:1743
msgid "Changed document unit"
msgstr "Змінено одиницю виміру у документі"
@@ -14079,6 +15948,11 @@ msgstr "Малюнок експортовано до <b>%s</b>."
msgid "Export aborted."
msgstr "Експорт перервано."
+#: ../src/ui/dialog/export.cpp:1299 ../src/ui/dialog/input.cpp:1082
+#: ../src/verbs.cpp:2361 ../src/widgets/desktop-widget.cpp:1128
+msgid "_Save"
+msgstr "З_берегти"
+
#: ../src/ui/dialog/extension-editor.cpp:81
msgid "Information"
msgstr "Інформація"
@@ -14103,7 +15977,7 @@ msgstr "Інформація"
#: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:17
#: ../share/extensions/gcodetools_tools_library.inx.h:12
#: ../share/extensions/generate_voronoi.inx.h:5
-#: ../share/extensions/gimp_xcf.inx.h:6
+#: ../share/extensions/gimp_xcf.inx.h:7
#: ../share/extensions/interp_att_g.inx.h:27
#: ../share/extensions/jessyInk_autoTexts.inx.h:8
#: ../share/extensions/jessyInk_effects.inx.h:13
@@ -14286,7 +16160,7 @@ msgid "Stroke st_yle"
msgstr "С_тиль штриха"
#. TRANSLATORS: this dialog is accessible via menu Filters - Filter editor
-#: ../src/ui/dialog/filter-effects-dialog.cpp:515
+#: ../src/ui/dialog/filter-effects-dialog.cpp:546
msgid ""
"This matrix determines a linear transform on color space. Each line affects "
"one of the color components. Each column determines how much of each color "
@@ -14299,38 +16173,58 @@ msgstr ""
"не залежить від вхідних кольорів, отже, може бути використаний для "
"визначення сталого значення у компоненті."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:625
+#: ../src/ui/dialog/filter-effects-dialog.cpp:656
msgid "Image File"
msgstr "Файл зображення"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:628
+#: ../src/ui/dialog/filter-effects-dialog.cpp:659
msgid "Selected SVG Element"
msgstr "Вибраний елемент SVG"
#. TODO: any image, not just svg
-#: ../src/ui/dialog/filter-effects-dialog.cpp:698
+#: ../src/ui/dialog/filter-effects-dialog.cpp:729
msgid "Select an image to be used as feImage input"
msgstr "Оберіть зображення, що буде використано як вхідні дані feImage"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:790
+#: ../src/ui/dialog/filter-effects-dialog.cpp:821
msgid "This SVG filter effect does not require any parameters."
msgstr "Цей примітив ефекту SVG не потребує параметрів."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:796
+#: ../src/ui/dialog/filter-effects-dialog.cpp:827
msgid "This SVG filter effect is not yet implemented in Inkscape."
msgstr "Цей фільтр ефекту SVG ще не реалізовано у Inkscape."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:984
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1041
+msgid "Slope"
+msgstr "Перспектива"
+
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1042
+msgid "Intercept"
+msgstr "Перетин"
+
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1045
+msgid "Amplitude"
+msgstr "Амплітуда"
+
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1046
+msgid "Exponent"
+msgstr "Експонента"
+
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1143
+msgid "New transfer function type"
+msgstr "Тип нової функції перенесення"
+
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1178
msgid "Light Source:"
msgstr "Джерело світла:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1001
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1195
msgid "Direction angle for the light source on the XY plane, in degrees"
msgstr ""
"Кут напрямку, під яким джерело світла знаходиться відносно площини XY (у "
"градусах)"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1002
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1196
msgid "Direction angle for the light source on the YZ plane, in degrees"
msgstr ""
"Кут напрямку, під яким джерело світла знаходиться відносно площини YZ (у "
@@ -14339,47 +16233,47 @@ msgstr ""
#. default x:
#. default y:
#. default z:
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1005
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1008
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1199
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1202
msgid "Location:"
msgstr "Розташування:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1005
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1008
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1011
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1199
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1202
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1205
msgid "X coordinate"
msgstr "Координата X"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1005
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1008
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1011
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1199
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1202
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1205
msgid "Y coordinate"
msgstr "Координата Y"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1005
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1008
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1011
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1199
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1202
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1205
msgid "Z coordinate"
msgstr "Координата Z"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1011
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1205
msgid "Points At"
msgstr "Вказує на"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1012
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1206
msgid "Specular Exponent"
msgstr "Степінь відбиття"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1012
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1206
msgid "Exponent value controlling the focus for the light source"
msgstr "Показник експоненти, що керує фокусом джерела світла"
#. TODO: here I have used 100 degrees as default value. But spec says that if not specified, no limiting cone is applied. So, there should be a way for the user to set a "no limiting cone" option.
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1014
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1208
msgid "Cone Angle"
msgstr "Кут конуса"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1014
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1208
msgid ""
"This is the angle between the spot light axis (i.e. the axis between the "
"light source and the point to which it is pointing at) and the spot light "
@@ -14389,111 +16283,111 @@ msgstr ""
"світла і точку, на яку його спрямовано) і конусом прожектора. За межі конуса "
"світло не проектується."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1077
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1274
msgid "New light source"
msgstr "Нове джерело світла"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1118
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1325
msgid "_Duplicate"
msgstr "_Дублювати"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1152
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1359
msgid "_Filter"
msgstr "_Фільтр"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1174
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1381
msgid "R_ename"
msgstr "Пере_йменувати"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1304
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1511
msgid "Rename filter"
msgstr "Перейменувати фільтр"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1349
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1556
msgid "Apply filter"
msgstr "Застосувати фільтр"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1419
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1626
msgid "filter"
msgstr "фільтрувати"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1426
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1633
msgid "Add filter"
msgstr "Додати фільтр"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1478
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1685
msgid "Duplicate filter"
msgstr "Дублювати фільтр"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1577
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1784
msgid "_Effect"
msgstr "_Ефект"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1587
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1794
msgid "Connections"
msgstr "З'єднання"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:1725
+#: ../src/ui/dialog/filter-effects-dialog.cpp:1932
msgid "Remove filter primitive"
msgstr "Вилучити примітив фільтра"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2313
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2520
msgid "Remove merge node"
msgstr "Вилучити вузол об'єднання"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2433
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2640
msgid "Reorder filter primitive"
msgstr "Зміна порядку примітивів фільтра"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2513
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2720
msgid "Add Effect:"
msgstr "Додати ефект:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2514
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2721
msgid "No effect selected"
msgstr "Не вибрано жодного ефекту"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2515
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2722
msgid "No filter selected"
msgstr "Не вибрано жодного фільтра"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2561
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2767
msgid "Effect parameters"
msgstr "Параметри ефекту"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2562
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2768
msgid "Filter General Settings"
msgstr "Загальні параметри фільтра"
#. default x:
#. default y:
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2620
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2826
msgid "Coordinates:"
msgstr "Координати:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2620
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2826
msgid "X coordinate of the left corners of filter effects region"
msgstr "Координата X лівих кутів області дії ефектів фільтра"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2620
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2826
msgid "Y coordinate of the upper corners of filter effects region"
msgstr "Координата X верхніх кутів області дії ефектів фільтра"
#. default width:
#. default height:
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2621
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2827
msgid "Dimensions:"
msgstr "Розміри:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2621
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2827
msgid "Width of filter effects region"
msgstr "Ширина області дії ефектів фільтра"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2621
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2827
msgid "Height of filter effects region"
msgstr "Висота області дії ефектів фільтра"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2627
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2833
msgid ""
"Indicates the type of matrix operation. The keyword 'matrix' indicates that "
"a full 5x4 matrix of values will be provided. The other keywords represent "
@@ -14504,23 +16398,40 @@ msgstr ""
"матрицю значень розміром 5×4. Інші варіанти — це простий спосіб виконати "
"найпростіші операції без визначення всієї матриці вручну."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2628
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2834
msgid "Value(s):"
msgstr "Значення:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2643
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2683
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2838
+msgid "R:"
+msgstr "Ч:"
+
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2839
+#: ../src/widgets/sp-color-icc-selector.cpp:359
+msgid "G:"
+msgstr "З:"
+
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2840
+msgid "B:"
+msgstr "С:"
+
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2841
+msgid "A:"
+msgstr "П:"
+
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2844
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2884
msgid "Operator:"
msgstr "Оператор:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2644
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2845
msgid "K1:"
msgstr "K1:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2644
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2645
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2646
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2647
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2845
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2846
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2847
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2848
msgid ""
"If the arithmetic operation is chosen, each result pixel is computed using "
"the formula k1*i1*i2 + k2*i1 + k3*i2 + k4 where i1 and i2 are the pixel "
@@ -14530,38 +16441,38 @@ msgstr ""
"за формулою k1*i1*i2 + k2*i1 + k3*i2 + k4, де i1 і i2 — значення пікселів "
"першого і другого вхідних значень відповідно."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2645
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2846
msgid "K2:"
msgstr "K2:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2646
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2847
msgid "K3:"
msgstr "K3:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2647
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2848
msgid "K4:"
msgstr "K4:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2650
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2851
msgid "Size:"
msgstr "Розмір:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2650
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2851
msgid "width of the convolve matrix"
msgstr "ширина матриці згортки"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2650
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2851
msgid "height of the convolve matrix"
msgstr "висота матриці згортки"
#. default x:
#. default y:
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2651
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2852
#: ../src/ui/dialog/object-attributes.cpp:48
msgid "Target:"
msgstr "Target:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2651
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2852
msgid ""
"X coordinate of the target point in the convolve matrix. The convolution is "
"applied to pixels around this point."
@@ -14569,7 +16480,7 @@ msgstr ""
"Координата X кінцевої точки матриці згортки. Згортка застосовується до "
"пікселів навколо цієї точки."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2651
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2852
msgid ""
"Y coordinate of the target point in the convolve matrix. The convolution is "
"applied to pixels around this point."
@@ -14578,11 +16489,11 @@ msgstr ""
"пікселів навколо цієї точки."
#. TRANSLATORS: for info on "Kernel", see http://en.wikipedia.org/wiki/Kernel_(matrix)
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2653
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2854
msgid "Kernel:"
msgstr "Ядро:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2653
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2854
msgid ""
"This matrix describes the convolve operation that is applied to the input "
"image in order to calculate the pixel colors at the output. Different "
@@ -14597,11 +16508,11 @@ msgstr ""
"у той час, як матриця, заповнена сталим ненульовим значенням дасть звичайний "
"ефект розмивання."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2655
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2856
msgid "Divisor:"
msgstr "Дільник:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2655
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2856
msgid ""
"After applying the kernelMatrix to the input image to yield a number, that "
"number is divided by divisor to yield the final destination color value. A "
@@ -14613,11 +16524,11 @@ msgstr ""
"кольору. Дільник, що є сумою всіх значень матриці, приглушує загальну "
"інтенсивність кольорів остаточного зображення."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2656
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2857
msgid "Bias:"
msgstr "Зміщення:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2656
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2857
msgid ""
"This value is added to each component. This is useful to define a constant "
"value as the zero response of the filter."
@@ -14625,11 +16536,11 @@ msgstr ""
"Це значення додається до кожного компонента. Корисно для задання сталої, як "
"нульового відгуку фільтра."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2657
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2858
msgid "Edge Mode:"
msgstr "Режим країв:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2657
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2858
msgid ""
"Determines how to extend the input image as necessary with color values so "
"that the matrix operations can be applied when the kernel is positioned at "
@@ -14639,31 +16550,31 @@ msgstr ""
"щоб матричні операції могли працювати з ядром, розташованим на краю "
"зображення або поблизу нього."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2658
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2859
msgid "Preserve Alpha"
msgstr "Зберігати α-канал"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2658
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2859
msgid "If set, the alpha channel won't be altered by this filter primitive."
msgstr "Якщо встановлено, α-канал не буде змінено цим примітивом фільтра."
#. default: white
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2661
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2862
msgid "Diffuse Color:"
msgstr "Колір дифузії:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2661
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2694
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2862
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2895
msgid "Defines the color of the light source"
msgstr "Визначає колір джерела світла"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2662
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2695
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2863
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2896
msgid "Surface Scale:"
msgstr "Масштаб поверхні:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2662
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2695
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2863
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2896
msgid ""
"This value amplifies the heights of the bump map defined by the input alpha "
"channel"
@@ -14671,59 +16582,59 @@ msgstr ""
"Це значення визначає множник висоти карти рельєфу, що задається вхідним α-"
"каналом"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2663
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2696
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2864
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2897
msgid "Constant:"
msgstr "Константа:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2663
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2696
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2864
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2897
msgid "This constant affects the Phong lighting model."
msgstr "Ця стала стосується моделі освітлення Фонга"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2664
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2698
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2865
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2899
msgid "Kernel Unit Length:"
msgstr "Одиниця довжини у ядрі:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2668
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2869
msgid "This defines the intensity of the displacement effect."
msgstr "Ця величина визначає інтенсивність ефекту зміщення."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2669
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2870
msgid "X displacement:"
msgstr "Зміщення за X:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2669
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2870
msgid "Color component that controls the displacement in the X direction"
msgstr "Компонент кольору, що керує зміщенням у напрямку осі X"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2670
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2871
msgid "Y displacement:"
msgstr "Зміщення за Y:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2670
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2871
msgid "Color component that controls the displacement in the Y direction"
msgstr "Компонент кольору, що керує зміщенням у напрямку осі Y"
#. default: black
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2673
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2874
msgid "Flood Color:"
msgstr "Колір заливки:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2673
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2874
msgid "The whole filter region will be filled with this color."
msgstr "Всю область дії фільтра буде залито цим кольором."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2677
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2878
msgid "Standard Deviation:"
msgstr "Стандартне відхилення:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2677
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2878
msgid "The standard deviation for the blur operation."
msgstr "Стандартне відхилення під час виконання операції розмивання"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2683
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2884
msgid ""
"Erode: performs \"thinning\" of input image.\n"
"Dilate: performs \"fattenning\" of input image."
@@ -14731,41 +16642,41 @@ msgstr ""
"Ерозія: виконує «витончення» вхідного зображення\n"
"Розтягування: «потовщує» вхідне зображення"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2687
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2888
msgid "Source of Image:"
msgstr "Джерело зображення:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2690
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2891
msgid "Delta X:"
msgstr "Крок за X:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2690
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2891
msgid "This is how far the input image gets shifted to the right"
msgstr "Визначає як далеко вхідне зображення зміщується праворуч"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2691
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2892
msgid "Delta Y:"
msgstr "Крок за Y:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2691
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2892
msgid "This is how far the input image gets shifted downwards"
msgstr "Визначає як далеко вхідне зображення зміщується донизу"
#. default: white
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2694
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2895
msgid "Specular Color:"
msgstr "Колір відбиття:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2697
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2898
#: ../share/extensions/interp.inx.h:2
msgid "Exponent:"
msgstr "Експонента:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2697
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2898
msgid "Exponent for specular term, larger is more \"shiny\"."
msgstr "Степінь відбиття: більше значення дає «яскравіше»."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2706
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2907
msgid ""
"Indicates whether the filter primitive should perform a noise or turbulence "
"function."
@@ -14773,27 +16684,27 @@ msgstr ""
"Позначає чи повинен примітив виконувати функцію створення турбулентності або "
"шуму."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2707
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2908
msgid "Base Frequency:"
msgstr "Опорна частота:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2708
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2909
msgid "Octaves:"
msgstr "Октави:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2709
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2910
msgid "Seed:"
msgstr "Випадкове значення:"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2709
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2910
msgid "The starting number for the pseudo random number generator."
msgstr "Початкове число для генератора псевдовипадкових чисел."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2721
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2922
msgid "Add filter primitive"
msgstr "Додати примітив фільтра"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2738
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2939
msgid ""
"The <b>feBlend</b> filter primitive provides 4 image blending modes: screen, "
"multiply, darken and lighten."
@@ -14801,7 +16712,7 @@ msgstr ""
"Примітив фільтра <b>feBlend</b> надає можливість використовувати 4 режими "
"змішування: просвічування, множення, темнішання та світлішання."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2742
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2943
msgid ""
"The <b>feColorMatrix</b> filter primitive applies a matrix transformation to "
"color of each rendered pixel. This allows for effects like turning object to "
@@ -14811,7 +16722,7 @@ msgstr ""
"кольору до кожної відображеної точки. Все це включає до себе перетворення "
"об'єкта до півтонів сірого, зміну насиченості кольору і зміну відтінку."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2746
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2947
msgid ""
"The <b>feComponentTransfer</b> filter primitive manipulates the input's "
"color components (red, green, blue, and alpha) according to particular "
@@ -14823,7 +16734,7 @@ msgstr ""
"з окремими функціями переходу, роблячи можливим операції на зразок "
"регулювання яскравості і контрасту, баланс кольорів та постеризацію."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2750
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2951
msgid ""
"The <b>feComposite</b> filter primitive composites two images using one of "
"the Porter-Duff blending modes or the arithmetic mode described in SVG "
@@ -14835,7 +16746,7 @@ msgstr ""
"описаного у стандарті SVG. Режими змішування Портера-Даффа по суті є "
"булівськими операціями між значеннями кольорів відповідних точок зображень."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2754
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2955
msgid ""
"The <b>feConvolveMatrix</b> lets you specify a Convolution to be applied on "
"the image. Common effects created using convolution matrices are blur, "
@@ -14850,7 +16761,7 @@ msgstr ""
"за допомогою цього примітиву фільтра, особливий примітив фільтра для "
"Гаусового розмивання є швидшим та незалежним від роздільної здатності."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2758
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2959
msgid ""
"The <b>feDiffuseLighting</b> and feSpecularLighting filter primitives create "
"\"embossed\" shadings. The input's alpha channel is used to provide depth "
@@ -14862,7 +16773,7 @@ msgstr ""
"використовується для відтворення глибини: непрозоріші області наближаються "
"до глядача, а прозоріші — віддаляються."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2762
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2963
msgid ""
"The <b>feDisplacementMap</b> filter primitive displaces the pixels in the "
"first input using the second input as a displacement map, that shows from "
@@ -14874,7 +16785,7 @@ msgstr ""
"у якому напрямку і на яку відстань слід змістити точку. Класичними "
"прикладами фільтра є ефекти «вихор» і «затискання»."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2766
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2967
msgid ""
"The <b>feFlood</b> filter primitive fills the region with a given color and "
"opacity. It is usually used as an input to other filters to apply color to "
@@ -14884,7 +16795,7 @@ msgstr ""
"непрозорістю. Зазвичай, його використовують як початковий для інших "
"фільтрів, з метою надати графіці кольору."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2770
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2971
msgid ""
"The <b>feGaussianBlur</b> filter primitive uniformly blurs its input. It is "
"commonly used together with feOffset to create a drop shadow effect."
@@ -14893,7 +16804,7 @@ msgstr ""
"його застосовано. Зазвичай, він використовується разом з feOffset для "
"створення ефекту відкидання тіні."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2774
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2975
msgid ""
"The <b>feImage</b> filter primitive fills the region with an external image "
"or another part of the document."
@@ -14901,7 +16812,7 @@ msgstr ""
"Примітив фільтра <b>feImage</b> заливає область зовнішнім зображенням або "
"іншою частиною документа."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2778
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2979
msgid ""
"The <b>feMerge</b> filter primitive composites several temporary images "
"inside the filter primitive to a single image. It uses normal alpha "
@@ -14914,7 +16825,7 @@ msgstr ""
"кратне застосування примітивів feBlend у 'звичайному' режимі або кратне "
"застосування примітивів feComposite у 'над'-режимі."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2782
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2983
msgid ""
"The <b>feMorphology</b> filter primitive provides erode and dilate effects. "
"For single-color objects erode makes the object thinner and dilate makes it "
@@ -14924,7 +16835,7 @@ msgstr ""
"ерозії та розширення. Для однокольорових об'єктів ерозія робить об'єкт "
"меншим, а розширення — більшим."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2786
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2987
msgid ""
"The <b>feOffset</b> filter primitive offsets the image by an user-defined "
"amount. For example, this is useful for drop shadows, where the shadow is in "
@@ -14934,7 +16845,7 @@ msgstr ""
"відстань. Це, наприклад, корисно для відображення тіней, коли тінь "
"розташовано з невеликим зсувом відносно об'єкта, що її відкидає."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2790
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2991
msgid ""
"The <b>feDiffuseLighting</b> and <b>feSpecularLighting</b> filter primitives "
"create \"embossed\" shadings. The input's alpha channel is used to provide "
@@ -14946,14 +16857,14 @@ msgstr ""
"матеріалу, використовується для відтворення глибини: непрозоріші області "
"наближаються до глядача, а прозоріші — віддаляються."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2794
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2995
msgid ""
"The <b>feTile</b> filter primitive tiles a region with its input graphic"
msgstr ""
"Примітив фільтра <b>feTile</b> заповнює область мозаїкою у формі вхідного "
"графічного зображення"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2798
+#: ../src/ui/dialog/filter-effects-dialog.cpp:2999
msgid ""
"The <b>feTurbulence</b> filter primitive renders Perlin noise. This kind of "
"noise is useful in simulating several nature phenomena like clouds, fire and "
@@ -14963,11 +16874,11 @@ msgstr ""
"шумів корисний для імітації деяких природних явищ на зразок хмар, полум'я та "
"диму, та під час створення складних текстур на зразок мармуру та граніту."
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2817
+#: ../src/ui/dialog/filter-effects-dialog.cpp:3018
msgid "Duplicate filter primitive"
msgstr "Дублювати примітив фільтра"
-#: ../src/ui/dialog/filter-effects-dialog.cpp:2870
+#: ../src/ui/dialog/filter-effects-dialog.cpp:3071
msgid "Set filter primitive attribute"
msgstr "Встановити атрибут примітива фільтра"
@@ -16441,7 +18352,7 @@ msgstr "Стиль малювання об'єктів"
#. Zoom
#: ../src/ui/dialog/inkscape-preferences.cpp:376
-#: ../src/widgets/desktop-widget.cpp:635
+#: ../src/widgets/desktop-widget.cpp:636
msgid "Zoom"
msgstr "Масштаб"
@@ -16608,8 +18519,8 @@ msgstr "Відро з фарбою"
#. Gradient
#: ../src/ui/dialog/inkscape-preferences.cpp:478
-#: ../src/widgets/gradient-selector.cpp:151
-#: ../src/widgets/gradient-selector.cpp:303
+#: ../src/widgets/gradient-selector.cpp:152
+#: ../src/widgets/gradient-selector.cpp:320
msgid "Gradient"
msgstr "Градієнт"
@@ -17253,8 +19164,8 @@ msgid "_Time of opacity change animation:"
msgstr "_Час зміни непрозорості у анімації:"
#: ../src/ui/dialog/inkscape-preferences.cpp:703
-#: ../share/extensions/hpgl_output.inx.h:34
-#: ../share/extensions/plotter.inx.h:50
+#: ../share/extensions/hpgl_output.inx.h:33
+#: ../share/extensions/plotter.inx.h:49
msgid "Miscellaneous"
msgstr "Інше"
@@ -18046,7 +19957,7 @@ msgstr "Позначення"
#. Transforms options
#: ../src/ui/dialog/inkscape-preferences.cpp:1169
-#: ../src/widgets/select-toolbar.cpp:577
+#: ../src/widgets/select-toolbar.cpp:578
msgid "Scale stroke width"
msgstr "Змінювати ширину штриха"
@@ -18067,25 +19978,25 @@ msgid "Preserved"
msgstr "Без оптимізації"
#: ../src/ui/dialog/inkscape-preferences.cpp:1177
-#: ../src/widgets/select-toolbar.cpp:578
+#: ../src/widgets/select-toolbar.cpp:579
msgid "When scaling objects, scale the stroke width by the same proportion"
msgstr ""
"При зміні розміру об'єктів змінювати ширину штриха у відповідній пропорції"
#: ../src/ui/dialog/inkscape-preferences.cpp:1179
-#: ../src/widgets/select-toolbar.cpp:589
+#: ../src/widgets/select-toolbar.cpp:590
msgid "When scaling rectangles, scale the radii of rounded corners"
msgstr ""
"При зміні розміру прямокутників міняти радіус округлених кутів у тій самій "
"пропорції"
#: ../src/ui/dialog/inkscape-preferences.cpp:1181
-#: ../src/widgets/select-toolbar.cpp:600
+#: ../src/widgets/select-toolbar.cpp:601
msgid "Move gradients (in fill or stroke) along with the objects"
msgstr "Трансформувати градієнти (у заповненні чи штрихах) разом з об'єктом"
#: ../src/ui/dialog/inkscape-preferences.cpp:1183
-#: ../src/widgets/select-toolbar.cpp:611
+#: ../src/widgets/select-toolbar.cpp:612
msgid "Move patterns (in fill or stroke) along with the objects"
msgstr "Трансформувати візерунки (у заповненнях чи штрихах) разом з об'єктом"
@@ -18736,7 +20647,7 @@ msgid "Shortcut file:"
msgstr "Файл скорочень:"
#: ../src/ui/dialog/inkscape-preferences.cpp:1484
-#: ../src/ui/dialog/template-load-tab.cpp:49
+#: ../src/ui/dialog/template-load-tab.cpp:48
msgid "Search:"
msgstr "Шукати:"
@@ -19005,10 +20916,6 @@ msgstr ""
"Ви_користовувати графічний планшет чи інший пристрій (потребує "
"перезавантаження)"
-#: ../src/ui/dialog/input.cpp:1082 ../src/verbs.cpp:2361
-msgid "_Save"
-msgstr "З_берегти"
-
#: ../src/ui/dialog/input.cpp:1086
msgid "Axes"
msgstr "Вісі"
@@ -19169,69 +21076,69 @@ msgstr "Додати ефект контуру"
msgid "Add path effect"
msgstr "Додати ефект контуру"
-#: ../src/ui/dialog/livepatheffect-editor.cpp:113
+#: ../src/ui/dialog/livepatheffect-editor.cpp:119
msgid "Delete current path effect"
msgstr "Вилучити поточний ефект контуру"
-#: ../src/ui/dialog/livepatheffect-editor.cpp:117
+#: ../src/ui/dialog/livepatheffect-editor.cpp:129
msgid "Raise the current path effect"
msgstr "Підняти поточний ефект контуру у списку"
-#: ../src/ui/dialog/livepatheffect-editor.cpp:121
+#: ../src/ui/dialog/livepatheffect-editor.cpp:139
msgid "Lower the current path effect"
msgstr "Опустити поточний ефект контуру у списку"
-#: ../src/ui/dialog/livepatheffect-editor.cpp:289
+#: ../src/ui/dialog/livepatheffect-editor.cpp:313
msgid "Unknown effect is applied"
msgstr "Застосовано невідомий ефект"
-#: ../src/ui/dialog/livepatheffect-editor.cpp:292
+#: ../src/ui/dialog/livepatheffect-editor.cpp:316
msgid "Click button to add an effect"
msgstr "Натисніть кнопку, щоб додати ефект"
-#: ../src/ui/dialog/livepatheffect-editor.cpp:305
+#: ../src/ui/dialog/livepatheffect-editor.cpp:329
msgid "Click add button to convert clone"
msgstr "Натисніть кнопку додавання, щоб перетворити клон"
-#: ../src/ui/dialog/livepatheffect-editor.cpp:310
-#: ../src/ui/dialog/livepatheffect-editor.cpp:314
-#: ../src/ui/dialog/livepatheffect-editor.cpp:322
+#: ../src/ui/dialog/livepatheffect-editor.cpp:334
+#: ../src/ui/dialog/livepatheffect-editor.cpp:338
+#: ../src/ui/dialog/livepatheffect-editor.cpp:346
msgid "Select a path or shape"
msgstr "Виберіть контур або форму"
-#: ../src/ui/dialog/livepatheffect-editor.cpp:318
+#: ../src/ui/dialog/livepatheffect-editor.cpp:342
msgid "Only one item can be selected"
msgstr "Можна вибрати тільки один пункт"
-#: ../src/ui/dialog/livepatheffect-editor.cpp:350
+#: ../src/ui/dialog/livepatheffect-editor.cpp:374
msgid "Unknown effect"
msgstr "Невідомий ефект"
-#: ../src/ui/dialog/livepatheffect-editor.cpp:426
+#: ../src/ui/dialog/livepatheffect-editor.cpp:450
msgid "Create and apply path effect"
msgstr "Створити і застосувати ефект контуру"
-#: ../src/ui/dialog/livepatheffect-editor.cpp:461
+#: ../src/ui/dialog/livepatheffect-editor.cpp:485
msgid "Create and apply Clone original path effect"
msgstr "Створити і застосувати ефект клонування початкового контуру"
-#: ../src/ui/dialog/livepatheffect-editor.cpp:481
+#: ../src/ui/dialog/livepatheffect-editor.cpp:505
msgid "Remove path effect"
msgstr "Вилучити ефект контуру"
-#: ../src/ui/dialog/livepatheffect-editor.cpp:498
+#: ../src/ui/dialog/livepatheffect-editor.cpp:522
msgid "Move path effect up"
msgstr "Пересунути ефект контуру вгору"
-#: ../src/ui/dialog/livepatheffect-editor.cpp:514
+#: ../src/ui/dialog/livepatheffect-editor.cpp:538
msgid "Move path effect down"
msgstr "Пересунути ефект контуру вниз"
-#: ../src/ui/dialog/livepatheffect-editor.cpp:553
+#: ../src/ui/dialog/livepatheffect-editor.cpp:577
msgid "Activate path effect"
msgstr "Задіяти ефект контуру"
-#: ../src/ui/dialog/livepatheffect-editor.cpp:553
+#: ../src/ui/dialog/livepatheffect-editor.cpp:577
msgid "Deactivate path effect"
msgstr "Вимкнути ефект контуру"
@@ -19322,13 +21229,13 @@ msgstr "URL:"
#: ../src/ui/dialog/object-attributes.cpp:66
#: ../src/ui/dialog/object-attributes.cpp:75 ../src/ui/dialog/tile.cpp:618
-#: ../src/widgets/desktop-widget.cpp:670 ../src/widgets/node-toolbar.cpp:594
+#: ../src/widgets/desktop-widget.cpp:671 ../src/widgets/node-toolbar.cpp:594
msgid "X:"
msgstr "X:"
#: ../src/ui/dialog/object-attributes.cpp:67
#: ../src/ui/dialog/object-attributes.cpp:76 ../src/ui/dialog/tile.cpp:619
-#: ../src/widgets/desktop-widget.cpp:680 ../src/widgets/node-toolbar.cpp:612
+#: ../src/widgets/desktop-widget.cpp:681 ../src/widgets/node-toolbar.cpp:612
msgid "Y:"
msgstr "Y:"
@@ -19457,47 +21364,47 @@ msgstr "Сховати об'єкт"
msgid "Unhide object"
msgstr "Показати об'єкт"
-#: ../src/ui/dialog/ocaldialogs.cpp:714
+#: ../src/ui/dialog/ocaldialogs.cpp:715
msgid "Clipart found"
msgstr "Виявлено шаблон"
-#: ../src/ui/dialog/ocaldialogs.cpp:763
+#: ../src/ui/dialog/ocaldialogs.cpp:764
msgid "Downloading image..."
msgstr "Отримання зображення…"
-#: ../src/ui/dialog/ocaldialogs.cpp:911
+#: ../src/ui/dialog/ocaldialogs.cpp:912
msgid "Could not download image"
msgstr "Не вдалося отримати зображення"
-#: ../src/ui/dialog/ocaldialogs.cpp:921
+#: ../src/ui/dialog/ocaldialogs.cpp:922
msgid "Clipart downloaded successfully"
msgstr "Шаблон успішно отримано"
-#: ../src/ui/dialog/ocaldialogs.cpp:935
+#: ../src/ui/dialog/ocaldialogs.cpp:936
msgid "Could not download thumbnail file"
msgstr "Не вдалося отримати файл мініатюри"
-#: ../src/ui/dialog/ocaldialogs.cpp:1010
+#: ../src/ui/dialog/ocaldialogs.cpp:1011
msgid "No description"
msgstr "Немає опису"
-#: ../src/ui/dialog/ocaldialogs.cpp:1078
+#: ../src/ui/dialog/ocaldialogs.cpp:1079
msgid "Searching clipart..."
msgstr "Пошук шаблонів…"
-#: ../src/ui/dialog/ocaldialogs.cpp:1098 ../src/ui/dialog/ocaldialogs.cpp:1119
+#: ../src/ui/dialog/ocaldialogs.cpp:1099 ../src/ui/dialog/ocaldialogs.cpp:1120
msgid "Could not connect to the Open Clip Art Library"
msgstr "Не вдалося встановити зв'язок з бібліотекою Open Clip Art"
-#: ../src/ui/dialog/ocaldialogs.cpp:1144
+#: ../src/ui/dialog/ocaldialogs.cpp:1145
msgid "Could not parse search results"
msgstr "Не вдалося обробити результати пошуку"
-#: ../src/ui/dialog/ocaldialogs.cpp:1178
+#: ../src/ui/dialog/ocaldialogs.cpp:1179
msgid "No clipart named <b>%1</b> was found."
msgstr "Не виявлено шаблонів з назвою <b>%1</b>."
-#: ../src/ui/dialog/ocaldialogs.cpp:1180
+#: ../src/ui/dialog/ocaldialogs.cpp:1181
msgid ""
"Please make sure all keywords are spelled correctly, or try again with "
"different keywords."
@@ -19505,25 +21412,25 @@ msgstr ""
"Будь ласка, переконайтеся, що всі вказані ключові слова написано правильно "
"або повторіть спробу пошуку, вказавши інші ключові слова."
-#: ../src/ui/dialog/ocaldialogs.cpp:1232
+#: ../src/ui/dialog/ocaldialogs.cpp:1233
msgid "Search"
msgstr "Пошук"
-#: ../src/ui/dialog/ocaldialogs.cpp:1244
+#: ../src/ui/dialog/ocaldialogs.cpp:1245
msgid "Close"
msgstr "Закрити"
#: ../src/ui/dialog/pixelartdialog.cpp:162
-msgid "_Curves (multiplier)"
-msgstr "_Криві (множник)"
+msgid "_Curves (multiplier):"
+msgstr "_Криві (множник):"
#: ../src/ui/dialog/pixelartdialog.cpp:165
msgid "Favors connections that are part of a long curve"
msgstr "Надавати перевагу з’єднанням, які є частиною довших кривих"
#: ../src/ui/dialog/pixelartdialog.cpp:176
-msgid "_Islands (weight)"
-msgstr "_Області (вага)"
+msgid "_Islands (weight):"
+msgstr "_Області (вага):"
#: ../src/ui/dialog/pixelartdialog.cpp:179
msgid "Avoid single disconnected pixels"
@@ -19534,16 +21441,16 @@ msgid "A constant vote value"
msgstr "Стале значення рівня"
#: ../src/ui/dialog/pixelartdialog.cpp:191
-msgid "Sparse pixels (window _radius)"
-msgstr "Розріджені пікселі (_радіус вікна)"
+msgid "Sparse pixels (window _radius):"
+msgstr "Розріджені пікселі (_радіус вікна):"
#: ../src/ui/dialog/pixelartdialog.cpp:200
msgid "The radius of the window analyzed"
msgstr "Радіус вікна, яке буде проаналізовано"
#: ../src/ui/dialog/pixelartdialog.cpp:201
-msgid "Sparse pixels (_multiplier)"
-msgstr "Розріджені пікселі (_множник)"
+msgid "Sparse pixels (_multiplier):"
+msgstr "Розріджені пікселі (_множник):"
#: ../src/ui/dialog/pixelartdialog.cpp:212
msgid "Favors connections that are part of foreground color"
@@ -19874,8 +21781,8 @@ msgstr "Текст зразка"
msgid "Preview Text:"
msgstr "Перегляд тексту:"
-#: ../src/ui/dialog/swatches.cpp:203 ../src/ui/tools/gradient-tool.cpp:369
-#: ../src/ui/tools/gradient-tool.cpp:467
+#: ../src/ui/dialog/swatches.cpp:203 ../src/ui/tools/gradient-tool.cpp:371
+#: ../src/ui/tools/gradient-tool.cpp:469
#: ../src/widgets/gradient-vector.cpp:814
msgid "Add gradient stop"
msgstr "Додавання опорної точки градієнта"
@@ -19904,36 +21811,36 @@ msgid "Palettes directory (%s) is unavailable."
msgstr "Каталог з палітрами (%s) недоступний."
#. ******************* Symbol Sets ************************
-#: ../src/ui/dialog/symbols.cpp:128
+#: ../src/ui/dialog/symbols.cpp:127
msgid "Symbol set: "
msgstr "Набір символів: "
#. Fill in later
-#: ../src/ui/dialog/symbols.cpp:137 ../src/ui/dialog/symbols.cpp:138
+#: ../src/ui/dialog/symbols.cpp:136 ../src/ui/dialog/symbols.cpp:137
msgid "Current Document"
msgstr "Поточний документ"
-#: ../src/ui/dialog/symbols.cpp:205
+#: ../src/ui/dialog/symbols.cpp:204
msgid "Add Symbol from the current document."
msgstr "Додати символ до поточного документа."
-#: ../src/ui/dialog/symbols.cpp:214
+#: ../src/ui/dialog/symbols.cpp:213
msgid "Remove Symbol from the current document."
msgstr "Вилучити символ з поточного документа."
-#: ../src/ui/dialog/symbols.cpp:227
+#: ../src/ui/dialog/symbols.cpp:226
msgid "Make Icons bigger by zooming in."
msgstr "Робити піктограми більшими збільшенням масштабу."
-#: ../src/ui/dialog/symbols.cpp:236
+#: ../src/ui/dialog/symbols.cpp:235
msgid "Make Icons smaller by zooming out."
msgstr "Робити піктограми меншими зменшенням масштабу."
-#: ../src/ui/dialog/symbols.cpp:245
+#: ../src/ui/dialog/symbols.cpp:244
msgid "Toggle 'fit' symbols in icon space."
msgstr "Вмикати/Вимикати символи підбирання розмірів у просторі піктограм."
-#: ../src/ui/dialog/symbols.cpp:558
+#: ../src/ui/dialog/symbols.cpp:574
msgid "Unnamed Symbols"
msgstr "Символи без назв"
@@ -19941,10 +21848,6 @@ msgstr "Символи без назв"
msgid "More info"
msgstr "Додаткова інформація"
-#: ../src/ui/dialog/template-widget.cpp:37
-msgid " "
-msgstr " "
-
#: ../src/ui/dialog/template-widget.cpp:38
msgid "no template selected"
msgstr "не вибрано шаблону"
@@ -20011,7 +21914,7 @@ msgid "Text path offset"
msgstr "Відступ тексту від контуру"
#: ../src/ui/dialog/text-edit.cpp:588 ../src/ui/dialog/text-edit.cpp:662
-#: ../src/ui/tools/text-tool.cpp:1487
+#: ../src/ui/tools/text-tool.cpp:1488
msgid "Set text style"
msgstr "Встановити стиль тексту"
@@ -20370,7 +22273,7 @@ msgid "A_ngle:"
msgstr "_Кут:"
#: ../src/ui/dialog/transformation.cpp:84
-#: ../src/ui/dialog/transformation.cpp:1103
+#: ../src/ui/dialog/transformation.cpp:1104
msgid "Rotation angle (positive = counterclockwise)"
msgstr "Кут повороту (додатній = проти годинникової стрілки)"
@@ -20491,21 +22394,21 @@ msgstr "Обернути проти годинникової стрілки"
msgid "Rotate in a clockwise direction"
msgstr "Обернути за годинниковою стрілкою"
-#: ../src/ui/dialog/transformation.cpp:907
-#: ../src/ui/dialog/transformation.cpp:918
-#: ../src/ui/dialog/transformation.cpp:932
-#: ../src/ui/dialog/transformation.cpp:951
-#: ../src/ui/dialog/transformation.cpp:962
-#: ../src/ui/dialog/transformation.cpp:972
-#: ../src/ui/dialog/transformation.cpp:996
+#: ../src/ui/dialog/transformation.cpp:908
+#: ../src/ui/dialog/transformation.cpp:919
+#: ../src/ui/dialog/transformation.cpp:933
+#: ../src/ui/dialog/transformation.cpp:952
+#: ../src/ui/dialog/transformation.cpp:963
+#: ../src/ui/dialog/transformation.cpp:973
+#: ../src/ui/dialog/transformation.cpp:997
msgid "Transform matrix is singular, <b>not used</b>."
msgstr "Матриця перетворення є виродженою, <b>не використовуємо її</b>."
-#: ../src/ui/dialog/transformation.cpp:1011
+#: ../src/ui/dialog/transformation.cpp:1012
msgid "Edit transformation matrix"
msgstr "Редагування матриці трансформації"
-#: ../src/ui/dialog/transformation.cpp:1110
+#: ../src/ui/dialog/transformation.cpp:1111
msgid "Rotation angle (positive = clockwise)"
msgstr "Кут повороту (додатний = за годинниковою стрілкою)"
@@ -20652,95 +22555,95 @@ msgstr ""
"клацніть лівою кнопкою миші, щоб вставити вузол, клацніть один раз, щоб "
"позначити (більше: Shift, Ctrl+Alt)"
-#: ../src/ui/tool/multi-path-manipulator.cpp:326
+#: ../src/ui/tool/multi-path-manipulator.cpp:315
msgid "Retract handles"
msgstr "Втягнути вуса"
-#: ../src/ui/tool/multi-path-manipulator.cpp:326 ../src/ui/tool/node.cpp:270
+#: ../src/ui/tool/multi-path-manipulator.cpp:315 ../src/ui/tool/node.cpp:270
msgid "Change node type"
msgstr "Змінити тип вузла"
-#: ../src/ui/tool/multi-path-manipulator.cpp:334
+#: ../src/ui/tool/multi-path-manipulator.cpp:323
msgid "Straighten segments"
msgstr "Розпрямляти сегменти"
-#: ../src/ui/tool/multi-path-manipulator.cpp:336
+#: ../src/ui/tool/multi-path-manipulator.cpp:325
msgid "Make segments curves"
msgstr "Зробити сегменти кривими"
-#: ../src/ui/tool/multi-path-manipulator.cpp:344
+#: ../src/ui/tool/multi-path-manipulator.cpp:333
msgid "Add nodes"
msgstr "Додати вузли"
-#: ../src/ui/tool/multi-path-manipulator.cpp:350
+#: ../src/ui/tool/multi-path-manipulator.cpp:339
msgid "Add extremum nodes"
msgstr "Додати вузли у екстремумах"
-#: ../src/ui/tool/multi-path-manipulator.cpp:357
+#: ../src/ui/tool/multi-path-manipulator.cpp:346
msgid "Duplicate nodes"
msgstr "Дублювати вузли"
-#: ../src/ui/tool/multi-path-manipulator.cpp:420
+#: ../src/ui/tool/multi-path-manipulator.cpp:409
#: ../src/widgets/node-toolbar.cpp:421
msgid "Join nodes"
msgstr "З'єднати вузли"
-#: ../src/ui/tool/multi-path-manipulator.cpp:427
+#: ../src/ui/tool/multi-path-manipulator.cpp:416
#: ../src/widgets/node-toolbar.cpp:432
msgid "Break nodes"
msgstr "Розрізати вузли"
-#: ../src/ui/tool/multi-path-manipulator.cpp:434
+#: ../src/ui/tool/multi-path-manipulator.cpp:423
msgid "Delete nodes"
msgstr "Вилучити вузли"
-#: ../src/ui/tool/multi-path-manipulator.cpp:768
+#: ../src/ui/tool/multi-path-manipulator.cpp:757
msgid "Move nodes"
msgstr "Перемістити вузли"
-#: ../src/ui/tool/multi-path-manipulator.cpp:771
+#: ../src/ui/tool/multi-path-manipulator.cpp:760
msgid "Move nodes horizontally"
msgstr "Перемістити вузли горизонтально"
-#: ../src/ui/tool/multi-path-manipulator.cpp:775
+#: ../src/ui/tool/multi-path-manipulator.cpp:764
msgid "Move nodes vertically"
msgstr "Перемістити вузли вертикально"
-#: ../src/ui/tool/multi-path-manipulator.cpp:779
-#: ../src/ui/tool/multi-path-manipulator.cpp:782
+#: ../src/ui/tool/multi-path-manipulator.cpp:768
+#: ../src/ui/tool/multi-path-manipulator.cpp:771
msgid "Rotate nodes"
msgstr "Обертання вузлів"
-#: ../src/ui/tool/multi-path-manipulator.cpp:786
-#: ../src/ui/tool/multi-path-manipulator.cpp:792
+#: ../src/ui/tool/multi-path-manipulator.cpp:775
+#: ../src/ui/tool/multi-path-manipulator.cpp:781
msgid "Scale nodes uniformly"
msgstr "Масштабувати вузли однорідно"
-#: ../src/ui/tool/multi-path-manipulator.cpp:789
+#: ../src/ui/tool/multi-path-manipulator.cpp:778
msgid "Scale nodes"
msgstr "Масштабувати вузли"
-#: ../src/ui/tool/multi-path-manipulator.cpp:796
+#: ../src/ui/tool/multi-path-manipulator.cpp:785
msgid "Scale nodes horizontally"
msgstr "Масштабувати вузли горизонтально"
-#: ../src/ui/tool/multi-path-manipulator.cpp:800
+#: ../src/ui/tool/multi-path-manipulator.cpp:789
msgid "Scale nodes vertically"
msgstr "Масштабувати вузли вертикально"
-#: ../src/ui/tool/multi-path-manipulator.cpp:804
+#: ../src/ui/tool/multi-path-manipulator.cpp:793
msgid "Skew nodes horizontally"
msgstr "Перекосити вузли горизонтально"
-#: ../src/ui/tool/multi-path-manipulator.cpp:808
+#: ../src/ui/tool/multi-path-manipulator.cpp:797
msgid "Skew nodes vertically"
msgstr "Перекосити вузли вертикально"
-#: ../src/ui/tool/multi-path-manipulator.cpp:812
+#: ../src/ui/tool/multi-path-manipulator.cpp:801
msgid "Flip nodes horizontally"
msgstr "Віддзеркалити вузли горизонтально"
-#: ../src/ui/tool/multi-path-manipulator.cpp:815
+#: ../src/ui/tool/multi-path-manipulator.cpp:804
msgid "Flip nodes vertically"
msgstr "Віддзеркалити вузли вертикально"
@@ -21037,22 +22940,22 @@ msgstr "Створити лінію з'єднання"
msgid "Finishing connector"
msgstr "Завершення лінії з'єднання"
-#: ../src/ui/tools/connector-tool.cpp:1275
+#: ../src/ui/tools/connector-tool.cpp:1280
msgid "<b>Connector endpoint</b>: drag to reroute or connect to new shapes"
msgstr ""
"<b>Кінцева з'єднувальна точка</b>: перетягніть щоб змінити напрямок "
"з'єднання або з'єднання з новими фігурами"
-#: ../src/ui/tools/connector-tool.cpp:1415
+#: ../src/ui/tools/connector-tool.cpp:1420
msgid "Select <b>at least one non-connector object</b>."
msgstr "Позначте <b>принаймні два об'єкти</b> для з'єднання."
-#: ../src/ui/tools/connector-tool.cpp:1420
+#: ../src/ui/tools/connector-tool.cpp:1425
#: ../src/widgets/connector-toolbar.cpp:326
msgid "Make connectors avoid selected objects"
msgstr "Змусити лінії огинати вибрані об'єкти"
-#: ../src/ui/tools/connector-tool.cpp:1421
+#: ../src/ui/tools/connector-tool.cpp:1426
#: ../src/widgets/connector-toolbar.cpp:336
msgid "Make connectors ignore selected objects"
msgstr "Змусити лінії ігнорувати вибрані об'єкти"
@@ -21254,27 +23157,27 @@ msgstr[0] "<b>Жодного</b> вуса градієнта з %d в %d виб
msgstr[1] "<b>Жодного</b> вуса градієнта з %d в %d вибраних об'єктах"
msgstr[2] "<b>Жодного</b> вуса градієнта з %d в %d вибраних об'єктах"
-#: ../src/ui/tools/gradient-tool.cpp:442
+#: ../src/ui/tools/gradient-tool.cpp:444
msgid "Simplify gradient"
msgstr "Спростити градієнт"
-#: ../src/ui/tools/gradient-tool.cpp:518
+#: ../src/ui/tools/gradient-tool.cpp:520
msgid "Create default gradient"
msgstr "Створити типовий градієнт"
-#: ../src/ui/tools/gradient-tool.cpp:577 ../src/ui/tools/mesh-tool.cpp:572
+#: ../src/ui/tools/gradient-tool.cpp:579 ../src/ui/tools/mesh-tool.cpp:572
msgid "<b>Draw around</b> handles to select them"
msgstr "<b>Обведіть</b> вуса, щоб вибрати їх"
-#: ../src/ui/tools/gradient-tool.cpp:700
+#: ../src/ui/tools/gradient-tool.cpp:702
msgid "<b>Ctrl</b>: snap gradient angle"
msgstr "<b>Ctrl</b>: обмежити кут градієнта"
-#: ../src/ui/tools/gradient-tool.cpp:701
+#: ../src/ui/tools/gradient-tool.cpp:703
msgid "<b>Shift</b>: draw gradient around the starting point"
msgstr "<b>Shift</b>: малювати навколо початкової точки"
-#: ../src/ui/tools/gradient-tool.cpp:955 ../src/ui/tools/mesh-tool.cpp:995
+#: ../src/ui/tools/gradient-tool.cpp:957 ../src/ui/tools/mesh-tool.cpp:995
#, c-format
msgid "<b>Gradient</b> for %d object; with <b>Ctrl</b> to snap angle"
msgid_plural "<b>Gradient</b> for %d objects; with <b>Ctrl</b> to snap angle"
@@ -21282,7 +23185,7 @@ msgstr[0] "<b>Градієнт</b> для %d об'єкта; <b>Ctrl</b> обме
msgstr[1] "<b>Градієнт</b> для %d об'єктів; <b>Ctrl</b> обмежує кут"
msgstr[2] "<b>Градієнт</b> для %d об'єктів; <b>Ctrl</b> обмежує кут"
-#: ../src/ui/tools/gradient-tool.cpp:959 ../src/ui/tools/mesh-tool.cpp:999
+#: ../src/ui/tools/gradient-tool.cpp:961 ../src/ui/tools/mesh-tool.cpp:999
msgid "Select <b>objects</b> on which to create gradient."
msgstr "Позначте <b>об'єкти</b> до яких буде застосовано градієнт."
@@ -21721,58 +23624,58 @@ msgstr "<b>Зірка</b>: радіус %s, кут %5g&#176;; з <b>Ctrl</b> —
msgid "Create star"
msgstr "Створення зірки"
-#: ../src/ui/tools/text-tool.cpp:392
+#: ../src/ui/tools/text-tool.cpp:393
msgid "<b>Click</b> to edit the text, <b>drag</b> to select part of the text."
msgstr ""
"<b>Клацніть</b>, щоб редагувати текст, <b>перетягуванням</b> можна позначити "
"частину тексту."
-#: ../src/ui/tools/text-tool.cpp:394
+#: ../src/ui/tools/text-tool.cpp:395
msgid ""
"<b>Click</b> to edit the flowed text, <b>drag</b> to select part of the text."
msgstr ""
"<b>Клацніть</b>, щоб редагувати текст у рамці, <b>перетягуванням</b> можна "
"позначити частину тексту."
-#: ../src/ui/tools/text-tool.cpp:448
+#: ../src/ui/tools/text-tool.cpp:449
msgid "Create text"
msgstr "Створити текст"
-#: ../src/ui/tools/text-tool.cpp:473
+#: ../src/ui/tools/text-tool.cpp:474
msgid "Non-printable character"
msgstr "Недрукований символ"
-#: ../src/ui/tools/text-tool.cpp:488
+#: ../src/ui/tools/text-tool.cpp:489
msgid "Insert Unicode character"
msgstr "Вставити символ з таблиці Unicode"
-#: ../src/ui/tools/text-tool.cpp:523
+#: ../src/ui/tools/text-tool.cpp:524
#, c-format
msgid "Unicode (<b>Enter</b> to finish): %s: %s"
msgstr "Юнікод (<b>Enter</b> для завершення): %s: %s"
-#: ../src/ui/tools/text-tool.cpp:525 ../src/ui/tools/text-tool.cpp:832
+#: ../src/ui/tools/text-tool.cpp:526 ../src/ui/tools/text-tool.cpp:833
msgid "Unicode (<b>Enter</b> to finish): "
msgstr "Unicode (<b>Enter</b> для завершення): "
-#: ../src/ui/tools/text-tool.cpp:608
+#: ../src/ui/tools/text-tool.cpp:609
#, c-format
msgid "<b>Flowed text frame</b>: %s &#215; %s"
msgstr "<b>Текст у рамці</b>: %s &#215; %s"
-#: ../src/ui/tools/text-tool.cpp:666
+#: ../src/ui/tools/text-tool.cpp:667
msgid "Type text; <b>Enter</b> to start new line."
msgstr "Введіть текст; <b>Enter</b> — початок нового рядка."
-#: ../src/ui/tools/text-tool.cpp:677
+#: ../src/ui/tools/text-tool.cpp:678
msgid "Flowed text is created."
msgstr "Текстову область створено."
-#: ../src/ui/tools/text-tool.cpp:679
+#: ../src/ui/tools/text-tool.cpp:680
msgid "Create flowed text"
msgstr "Створити контурний текст"
-#: ../src/ui/tools/text-tool.cpp:681
+#: ../src/ui/tools/text-tool.cpp:682
msgid ""
"The frame is <b>too small</b> for the current font size. Flowed text not "
"created."
@@ -21780,75 +23683,75 @@ msgstr ""
"Рамка <b>надто мала</b> для поточного розміру шрифту. Текстову область не "
"створено."
-#: ../src/ui/tools/text-tool.cpp:817
+#: ../src/ui/tools/text-tool.cpp:818
msgid "No-break space"
msgstr "Нерозривний пробіл"
-#: ../src/ui/tools/text-tool.cpp:819
+#: ../src/ui/tools/text-tool.cpp:820
msgid "Insert no-break space"
msgstr "Вставити нерозривний пробіл"
-#: ../src/ui/tools/text-tool.cpp:856
+#: ../src/ui/tools/text-tool.cpp:857
msgid "Make bold"
msgstr "Зробити жирним"
-#: ../src/ui/tools/text-tool.cpp:874
+#: ../src/ui/tools/text-tool.cpp:875
msgid "Make italic"
msgstr "Зробити курсивним"
-#: ../src/ui/tools/text-tool.cpp:913
+#: ../src/ui/tools/text-tool.cpp:914
msgid "New line"
msgstr "Новий рядок"
-#: ../src/ui/tools/text-tool.cpp:955
+#: ../src/ui/tools/text-tool.cpp:956
msgid "Backspace"
msgstr "Забій"
-#: ../src/ui/tools/text-tool.cpp:1011
+#: ../src/ui/tools/text-tool.cpp:1012
msgid "Kern to the left"
msgstr "Відбивка ліворуч"
-#: ../src/ui/tools/text-tool.cpp:1036
+#: ../src/ui/tools/text-tool.cpp:1037
msgid "Kern to the right"
msgstr "Відбивка праворуч"
-#: ../src/ui/tools/text-tool.cpp:1061
+#: ../src/ui/tools/text-tool.cpp:1062
msgid "Kern up"
msgstr "Відбивка нагору"
-#: ../src/ui/tools/text-tool.cpp:1086
+#: ../src/ui/tools/text-tool.cpp:1087
msgid "Kern down"
msgstr "Відбивка донизу"
-#: ../src/ui/tools/text-tool.cpp:1162
+#: ../src/ui/tools/text-tool.cpp:1163
msgid "Rotate counterclockwise"
msgstr "Обертати проти годинникової стрілки"
-#: ../src/ui/tools/text-tool.cpp:1183
+#: ../src/ui/tools/text-tool.cpp:1184
msgid "Rotate clockwise"
msgstr "Обертати за годинниковою стрілкою"
-#: ../src/ui/tools/text-tool.cpp:1200
+#: ../src/ui/tools/text-tool.cpp:1201
msgid "Contract line spacing"
msgstr "Скорочення міжрядкового проміжку"
-#: ../src/ui/tools/text-tool.cpp:1207
+#: ../src/ui/tools/text-tool.cpp:1208
msgid "Contract letter spacing"
msgstr "Зменшена відстань між літерами"
-#: ../src/ui/tools/text-tool.cpp:1225
+#: ../src/ui/tools/text-tool.cpp:1226
msgid "Expand line spacing"
msgstr "Збільшена відстань між рядками"
-#: ../src/ui/tools/text-tool.cpp:1232
+#: ../src/ui/tools/text-tool.cpp:1233
msgid "Expand letter spacing"
msgstr "Збільшення міжрядкового проміжку"
-#: ../src/ui/tools/text-tool.cpp:1362
+#: ../src/ui/tools/text-tool.cpp:1363
msgid "Paste text"
msgstr "Вставити текст"
-#: ../src/ui/tools/text-tool.cpp:1616
+#: ../src/ui/tools/text-tool.cpp:1617
#, c-format
msgid ""
"Type or edit flowed text (%d character%s); <b>Enter</b> to start new "
@@ -21866,7 +23769,7 @@ msgstr[2] ""
"Введіть або змініть текст за контуром (%d символів%s); <b>Enter</b> починає "
"новий абзац."
-#: ../src/ui/tools/text-tool.cpp:1618
+#: ../src/ui/tools/text-tool.cpp:1619
#, c-format
msgid "Type or edit text (%d character%s); <b>Enter</b> to start new line."
msgid_plural ""
@@ -21880,7 +23783,7 @@ msgstr[2] ""
"Введіть або змініть текст (%d символів%s); <b>Enter</b> — початок нового "
"рядка."
-#: ../src/ui/tools/text-tool.cpp:1728
+#: ../src/ui/tools/text-tool.cpp:1729
msgid "Type text"
msgstr "Друк тексту"
@@ -23021,19 +24924,19 @@ msgstr "tutorial-elements.svg"
msgid "tutorial-tips.svg"
msgstr "tutorial-tips.svg"
-#: ../src/verbs.cpp:2325 ../src/verbs.cpp:2915
+#: ../src/verbs.cpp:2325 ../src/verbs.cpp:2917
msgid "Unlock all objects in the current layer"
msgstr "Розблокувати усі об'єкти у поточному шарі"
-#: ../src/verbs.cpp:2329 ../src/verbs.cpp:2917
+#: ../src/verbs.cpp:2329 ../src/verbs.cpp:2919
msgid "Unlock all objects in all layers"
msgstr "Розблокувати усі об'єкти в усіх шарах"
-#: ../src/verbs.cpp:2333 ../src/verbs.cpp:2919
+#: ../src/verbs.cpp:2333 ../src/verbs.cpp:2921
msgid "Unhide all objects in the current layer"
msgstr "Розблокувати усі об'єкти у поточному шарі"
-#: ../src/verbs.cpp:2337 ../src/verbs.cpp:2921
+#: ../src/verbs.cpp:2337 ../src/verbs.cpp:2923
msgid "Unhide all objects in all layers"
msgstr "Показати усі об'єкти в усіх шарах"
@@ -24766,117 +26669,119 @@ msgstr ""
"Редагування кольорів об'єкта, градієнтів, форми стрілок та інші параметри "
"заповнення та штриха…"
-#: ../src/verbs.cpp:2818
+#. FIXME: Probably better to either use something from the icon naming spec or ship our own "select-font" icon
+#: ../src/verbs.cpp:2819
msgid "Gl_yphs..."
msgstr "Г_ліфи…"
-#: ../src/verbs.cpp:2819
+#: ../src/verbs.cpp:2820
msgid "Select characters from a glyphs palette"
msgstr "Виберіть символи з палітри гліфів"
+#. FIXME: Probably better to either use something from the icon naming spec or ship our own "select-color" icon
#. TRANSLATORS: "Swatches" means: color samples
-#: ../src/verbs.cpp:2821
+#: ../src/verbs.cpp:2823
msgid "S_watches..."
msgstr "Зразки _кольорів…"
-#: ../src/verbs.cpp:2822
+#: ../src/verbs.cpp:2824
msgid "Select colors from a swatches palette"
msgstr "Виберіть колір з палітри зразків"
-#: ../src/verbs.cpp:2823
+#: ../src/verbs.cpp:2825
msgid "S_ymbols..."
msgstr "С_имволи…"
-#: ../src/verbs.cpp:2824
+#: ../src/verbs.cpp:2826
msgid "Select symbol from a symbols palette"
msgstr "Виберіть символ з палітри символів"
-#: ../src/verbs.cpp:2825
+#: ../src/verbs.cpp:2827
msgid "Transfor_m..."
msgstr "_Трансформувати…"
-#: ../src/verbs.cpp:2826
+#: ../src/verbs.cpp:2828
msgid "Precisely control objects' transformations"
msgstr "Контролювати точність перетворень об'єктів"
-#: ../src/verbs.cpp:2827
+#: ../src/verbs.cpp:2829
msgid "_Align and Distribute..."
msgstr "Вирів_няти та розподілити…"
-#: ../src/verbs.cpp:2828
+#: ../src/verbs.cpp:2830
msgid "Align and distribute objects"
msgstr "Вирівняти та розподілити об'єкти"
-#: ../src/verbs.cpp:2829
+#: ../src/verbs.cpp:2831
msgid "_Spray options..."
msgstr "Параметри _розкидання…"
-#: ../src/verbs.cpp:2830
+#: ../src/verbs.cpp:2832
msgid "Some options for the spray"
msgstr "Параметри розкидання"
-#: ../src/verbs.cpp:2831
+#: ../src/verbs.cpp:2833
msgid "Undo _History..."
msgstr "Істо_рія змін…"
-#: ../src/verbs.cpp:2832
+#: ../src/verbs.cpp:2834
msgid "Undo History"
msgstr "Історія для скасування змін"
-#: ../src/verbs.cpp:2834
+#: ../src/verbs.cpp:2836
msgid "View and select font family, font size and other text properties"
msgstr ""
"Перегляд та вибір назви шрифту, його розміру та інших властивостей тексту"
-#: ../src/verbs.cpp:2835
+#: ../src/verbs.cpp:2837
msgid "_XML Editor..."
msgstr "Редактор _XML…"
-#: ../src/verbs.cpp:2836
+#: ../src/verbs.cpp:2838
msgid "View and edit the XML tree of the document"
msgstr "Перегляд та редагування дерева XML поточного документа"
-#: ../src/verbs.cpp:2837
+#: ../src/verbs.cpp:2839
msgid "_Find/Replace..."
msgstr "Знайти і з_амінити…"
-#: ../src/verbs.cpp:2838
+#: ../src/verbs.cpp:2840
msgid "Find objects in document"
msgstr "Знайти об'єкти у документі"
-#: ../src/verbs.cpp:2839
+#: ../src/verbs.cpp:2841
msgid "Find and _Replace Text..."
msgstr "Знайти і з_амінити текст…"
-#: ../src/verbs.cpp:2840
+#: ../src/verbs.cpp:2842
msgid "Find and replace text in document"
msgstr "Знайти і замінити текст у документі"
-#: ../src/verbs.cpp:2842
+#: ../src/verbs.cpp:2844
msgid "Check spelling of text in document"
msgstr "Перевірити правопис тексту у документі"
-#: ../src/verbs.cpp:2843
+#: ../src/verbs.cpp:2845
msgid "_Messages..."
msgstr "По_відомлення…"
-#: ../src/verbs.cpp:2844
+#: ../src/verbs.cpp:2846
msgid "View debug messages"
msgstr "Переглянути діагностичні повідомлення"
-#: ../src/verbs.cpp:2845
+#: ../src/verbs.cpp:2847
msgid "Show/Hide D_ialogs"
msgstr "Показати/сховати діало_ги"
-#: ../src/verbs.cpp:2846
+#: ../src/verbs.cpp:2848
msgid "Show or hide all open dialogs"
msgstr "Показати чи сховати всі активні діалогові вікна"
-#: ../src/verbs.cpp:2847
+#: ../src/verbs.cpp:2849
msgid "Create Tiled Clones..."
msgstr "Створити мозаїку з клонів…"
-#: ../src/verbs.cpp:2848
+#: ../src/verbs.cpp:2850
msgid ""
"Create multiple clones of selected object, arranging them into a pattern or "
"scattering"
@@ -24884,221 +26789,221 @@ msgstr ""
"Створити множину клонів позначеного об'єкта, з розташуванням їх у формі "
"візерунку або покриття"
-#: ../src/verbs.cpp:2849
+#: ../src/verbs.cpp:2851
msgid "_Object attributes..."
msgstr "_Атрибути об'єкта…"
-#: ../src/verbs.cpp:2850
+#: ../src/verbs.cpp:2852
msgid "Edit the object attributes..."
msgstr "Змінити атрибути об'єкта…"
-#: ../src/verbs.cpp:2852
+#: ../src/verbs.cpp:2854
msgid "Edit the ID, locked and visible status, and other object properties"
msgstr ""
"Редагування ідентифікатора, стану заблокованості та видимості та інших "
"властивостей об'єкта"
-#: ../src/verbs.cpp:2853
+#: ../src/verbs.cpp:2855
msgid "_Input Devices..."
msgstr "_Пристрої введення…"
-#: ../src/verbs.cpp:2854
+#: ../src/verbs.cpp:2856
msgid "Configure extended input devices, such as a graphics tablet"
msgstr "Налаштовування розширених пристроїв введення"
-#: ../src/verbs.cpp:2855
+#: ../src/verbs.cpp:2857
msgid "_Extensions..."
msgstr "_Про додатки…"
-#: ../src/verbs.cpp:2856
+#: ../src/verbs.cpp:2858
msgid "Query information about extensions"
msgstr "Зібрати інформацію про додатки"
-#: ../src/verbs.cpp:2857
+#: ../src/verbs.cpp:2859
msgid "Layer_s..."
msgstr "_Шари…"
-#: ../src/verbs.cpp:2858
+#: ../src/verbs.cpp:2860
msgid "View Layers"
msgstr "Переглянути шари"
-#: ../src/verbs.cpp:2859
+#: ../src/verbs.cpp:2861
msgid "Path E_ffects ..."
msgstr "Е_фекти контурів…"
-#: ../src/verbs.cpp:2860
+#: ../src/verbs.cpp:2862
msgid "Manage, edit, and apply path effects"
msgstr "Керування, редагування і застосування ефектів контурів"
-#: ../src/verbs.cpp:2861
+#: ../src/verbs.cpp:2863
msgid "Filter _Editor..."
msgstr "Р_едактор фільтрів…"
-#: ../src/verbs.cpp:2862
+#: ../src/verbs.cpp:2864
msgid "Manage, edit, and apply SVG filters"
msgstr "Керування, редагування і застосування фільтрів SVG"
-#: ../src/verbs.cpp:2863
+#: ../src/verbs.cpp:2865
msgid "SVG Font Editor..."
msgstr "Редактор шрифтів SVG…"
-#: ../src/verbs.cpp:2864
+#: ../src/verbs.cpp:2866
msgid "Edit SVG fonts"
msgstr "Редагувати шрифти SVG"
-#: ../src/verbs.cpp:2865
+#: ../src/verbs.cpp:2867
msgid "Print Colors..."
msgstr "Друкувати кольори…"
-#: ../src/verbs.cpp:2866
+#: ../src/verbs.cpp:2868
msgid ""
"Select which color separations to render in Print Colors Preview rendermode"
msgstr ""
"Вкажіть ділянки кольорів, які слід обробляти у режимі обробки попереднього "
"перегляду кольорів друку."
-#: ../src/verbs.cpp:2867
+#: ../src/verbs.cpp:2869
msgid "_Export PNG Image..."
msgstr "_Експортувати як зображення PNG…"
-#: ../src/verbs.cpp:2868
+#: ../src/verbs.cpp:2870
msgid "Export this document or a selection as a PNG image"
msgstr "Експортувати документ чи позначену частину як зображення PNG"
#. Help
-#: ../src/verbs.cpp:2870
+#: ../src/verbs.cpp:2872
msgid "About E_xtensions"
msgstr "Про _додатки"
-#: ../src/verbs.cpp:2871
+#: ../src/verbs.cpp:2873
msgid "Information on Inkscape extensions"
msgstr "Інформація про додатки Inkscape"
-#: ../src/verbs.cpp:2872
+#: ../src/verbs.cpp:2874
msgid "About _Memory"
msgstr "Про п_ам'ять"
-#: ../src/verbs.cpp:2873
+#: ../src/verbs.cpp:2875
msgid "Memory usage information"
msgstr "Інформація про використання пам'яті"
-#: ../src/verbs.cpp:2874
+#: ../src/verbs.cpp:2876
msgid "_About Inkscape"
msgstr "_Про програму Inkscape"
-#: ../src/verbs.cpp:2875
+#: ../src/verbs.cpp:2877
msgid "Inkscape version, authors, license"
msgstr "Версія, автори та ліцензія Inkscape"
#. new HelpVerb(SP_VERB_SHOW_LICENSE, "ShowLicense", N_("_License"),
#. N_("Distribution terms"), /*"show_license"*/"inkscape_options"),
#. Tutorials
-#: ../src/verbs.cpp:2880
+#: ../src/verbs.cpp:2882
msgid "Inkscape: _Basic"
msgstr "Inkscape: _Початковий рівень"
-#: ../src/verbs.cpp:2881
+#: ../src/verbs.cpp:2883
msgid "Getting started with Inkscape"
msgstr "Починаємо роботу з Inkscape"
#. "tutorial_basic"
-#: ../src/verbs.cpp:2882
+#: ../src/verbs.cpp:2884
msgid "Inkscape: _Shapes"
msgstr "Inkscape: _Фігури"
-#: ../src/verbs.cpp:2883
+#: ../src/verbs.cpp:2885
msgid "Using shape tools to create and edit shapes"
msgstr "Використання інструментів малювання та редагування фігур"
-#: ../src/verbs.cpp:2884
+#: ../src/verbs.cpp:2886
msgid "Inkscape: _Advanced"
msgstr "Inkscape: _Другий рівень"
-#: ../src/verbs.cpp:2885
+#: ../src/verbs.cpp:2887
msgid "Advanced Inkscape topics"
msgstr "Додаткові теми з Inkscape"
#. "tutorial_advanced"
#. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize)
-#: ../src/verbs.cpp:2887
+#: ../src/verbs.cpp:2889
msgid "Inkscape: T_racing"
msgstr "Inkscape: _Векторизація"
-#: ../src/verbs.cpp:2888
+#: ../src/verbs.cpp:2890
msgid "Using bitmap tracing"
msgstr "Використання векторизації растру"
#. "tutorial_tracing"
-#: ../src/verbs.cpp:2889
+#: ../src/verbs.cpp:2891
msgid "Inkscape: Tracing Pixel Art"
msgstr "Inkscape: Трасування растрової графіки"
-#: ../src/verbs.cpp:2890
+#: ../src/verbs.cpp:2892
msgid "Using Trace Pixel Art dialog"
msgstr "Користування діалоговим вікном трасування растрової графіки"
-#: ../src/verbs.cpp:2891
+#: ../src/verbs.cpp:2893
msgid "Inkscape: _Calligraphy"
msgstr "Inkscape: _Каліграфія"
-#: ../src/verbs.cpp:2892
+#: ../src/verbs.cpp:2894
msgid "Using the Calligraphy pen tool"
msgstr "Використання каліграфічного пера"
-#: ../src/verbs.cpp:2893
+#: ../src/verbs.cpp:2895
msgid "Inkscape: _Interpolate"
msgstr "Inkscape: _Інтерполяція"
-#: ../src/verbs.cpp:2894
+#: ../src/verbs.cpp:2896
msgid "Using the interpolate extension"
msgstr "Використання додатка інтерполяції"
#. "tutorial_interpolate"
-#: ../src/verbs.cpp:2895
+#: ../src/verbs.cpp:2897
msgid "_Elements of Design"
msgstr "_Елементи дизайну"
-#: ../src/verbs.cpp:2896
+#: ../src/verbs.cpp:2898
msgid "Principles of design in the tutorial form"
msgstr "Підручник з принципів дизайну"
#. "tutorial_design"
-#: ../src/verbs.cpp:2897
+#: ../src/verbs.cpp:2899
msgid "_Tips and Tricks"
msgstr "_Поради та прийоми"
-#: ../src/verbs.cpp:2898
+#: ../src/verbs.cpp:2900
msgid "Miscellaneous tips and tricks"
msgstr "Різноманітні поради та прийоми"
#. "tutorial_tips"
#. Effect -- renamed Extension
-#: ../src/verbs.cpp:2901
+#: ../src/verbs.cpp:2903
msgid "Previous Exte_nsion"
msgstr "Попередній _додаток"
-#: ../src/verbs.cpp:2902
+#: ../src/verbs.cpp:2904
msgid "Repeat the last extension with the same settings"
msgstr ""
"Повторити ефекти використання попереднього додатка з тими самими параметрами"
-#: ../src/verbs.cpp:2903
+#: ../src/verbs.cpp:2905
msgid "_Previous Extension Settings..."
msgstr "П_араметри попереднього додатка…"
-#: ../src/verbs.cpp:2904
+#: ../src/verbs.cpp:2906
msgid "Repeat the last extension with new settings"
msgstr "Повторити останній ефект з новими параметрами"
-#: ../src/verbs.cpp:2908
+#: ../src/verbs.cpp:2910
msgid "Fit the page to the current selection"
msgstr "Підігнати полотно до поточного позначеної області"
-#: ../src/verbs.cpp:2910
+#: ../src/verbs.cpp:2912
msgid "Fit the page to the drawing"
msgstr "Підганяє полотно під вже намальоване"
-#: ../src/verbs.cpp:2912
+#: ../src/verbs.cpp:2914
msgid ""
"Fit the page to the current selection or the drawing if there is no selection"
msgstr ""
@@ -25106,75 +27011,75 @@ msgstr ""
"креслення, якщо нічого не позначено"
#. LockAndHide
-#: ../src/verbs.cpp:2914
+#: ../src/verbs.cpp:2916
msgid "Unlock All"
msgstr "Розблокувати все"
-#: ../src/verbs.cpp:2916
+#: ../src/verbs.cpp:2918
msgid "Unlock All in All Layers"
msgstr "Розблокувати все в усіх шарах"
-#: ../src/verbs.cpp:2918
+#: ../src/verbs.cpp:2920
msgid "Unhide All"
msgstr "Показати все"
-#: ../src/verbs.cpp:2920
+#: ../src/verbs.cpp:2922
msgid "Unhide All in All Layers"
msgstr "Показати все в усіх шарах"
-#: ../src/verbs.cpp:2924
+#: ../src/verbs.cpp:2926
msgid "Link an ICC color profile"
msgstr "Посилання на профіль кольорів ICC"
-#: ../src/verbs.cpp:2925
+#: ../src/verbs.cpp:2927
msgid "Remove Color Profile"
msgstr "Вилучити профіль кольорів"
-#: ../src/verbs.cpp:2926
+#: ../src/verbs.cpp:2928
msgid "Remove a linked ICC color profile"
msgstr "Вилучити пов'язаний профіль кольорів ICC"
-#: ../src/verbs.cpp:2929
+#: ../src/verbs.cpp:2931
msgid "Add External Script"
msgstr "Додати зовнішній скрипт"
-#: ../src/verbs.cpp:2929
+#: ../src/verbs.cpp:2931
msgid "Add an external script"
msgstr "Додати зовнішній скрипт"
-#: ../src/verbs.cpp:2931
+#: ../src/verbs.cpp:2933
msgid "Add Embedded Script"
msgstr "Додати вбудований скрипт"
-#: ../src/verbs.cpp:2931
+#: ../src/verbs.cpp:2933
msgid "Add an embedded script"
msgstr "Додати вбудований скрипт"
-#: ../src/verbs.cpp:2933
+#: ../src/verbs.cpp:2935
msgid "Edit Embedded Script"
msgstr "Редагувати вбудований скрипт"
-#: ../src/verbs.cpp:2933
+#: ../src/verbs.cpp:2935
msgid "Edit an embedded script"
msgstr "Редагувати вбудований скрипт"
-#: ../src/verbs.cpp:2935
+#: ../src/verbs.cpp:2937
msgid "Remove External Script"
msgstr "Вилучити зовнішній скрипт"
-#: ../src/verbs.cpp:2935
+#: ../src/verbs.cpp:2937
msgid "Remove an external script"
msgstr "Вилучити зовнішній скрипт"
-#: ../src/verbs.cpp:2937
+#: ../src/verbs.cpp:2939
msgid "Remove Embedded Script"
msgstr "Вилучити вбудований скрипт"
-#: ../src/verbs.cpp:2937
+#: ../src/verbs.cpp:2939
msgid "Remove an embedded script"
msgstr "Вилучити вбудований скрипт"
-#: ../src/verbs.cpp:2959 ../src/verbs.cpp:2960
+#: ../src/verbs.cpp:2961 ../src/verbs.cpp:2962
msgid "Center on horizontal and vertical axis"
msgstr "Центрувати на горизонтальній і вертикальній осі"
@@ -25682,20 +27587,20 @@ msgstr "Пунктир"
msgid "Pattern offset"
msgstr "Зміщення пунктиру"
-#: ../src/widgets/desktop-widget.cpp:465
+#: ../src/widgets/desktop-widget.cpp:466
msgid "Zoom drawing if window size changes"
msgstr "Змінювати масштаб при зміні розмірів вікна"
-#: ../src/widgets/desktop-widget.cpp:669
+#: ../src/widgets/desktop-widget.cpp:670
msgid "Cursor coordinates"
msgstr "Координати курсора"
-#: ../src/widgets/desktop-widget.cpp:695
+#: ../src/widgets/desktop-widget.cpp:696
msgid "Z:"
msgstr "Z:"
#. display the initial welcome message in the statusbar
-#: ../src/widgets/desktop-widget.cpp:738
+#: ../src/widgets/desktop-widget.cpp:739
msgid ""
"<b>Welcome to Inkscape!</b> Use shape or freehand tools to create objects; "
"use selector (arrow) to move or transform them."
@@ -25704,69 +27609,69 @@ msgstr ""
"малювання для створення об'єктів; для їх переміщення чи трансформації "
"використовуйте селектор (стрілку)."
-#: ../src/widgets/desktop-widget.cpp:832
+#: ../src/widgets/desktop-widget.cpp:833
msgid "grayscale"
msgstr "сірі півтони"
-#: ../src/widgets/desktop-widget.cpp:833
+#: ../src/widgets/desktop-widget.cpp:834
msgid ", grayscale"
msgstr ", сірі півтони"
-#: ../src/widgets/desktop-widget.cpp:834
+#: ../src/widgets/desktop-widget.cpp:835
msgid "print colors preview"
msgstr "друк попереднього перегляду кольорів"
-#: ../src/widgets/desktop-widget.cpp:835
+#: ../src/widgets/desktop-widget.cpp:836
msgid ", print colors preview"
msgstr ", друк попереднього перегляду кольорів"
-#: ../src/widgets/desktop-widget.cpp:836
+#: ../src/widgets/desktop-widget.cpp:837
msgid "outline"
msgstr "обрис"
-#: ../src/widgets/desktop-widget.cpp:837
+#: ../src/widgets/desktop-widget.cpp:838
msgid "no filters"
msgstr "без фільтрування"
-#: ../src/widgets/desktop-widget.cpp:864
+#: ../src/widgets/desktop-widget.cpp:865
#, c-format
msgid "%s%s: %d (%s%s) - Inkscape"
msgstr "%s%s: %d (%s%s) – Inkscape"
-#: ../src/widgets/desktop-widget.cpp:866 ../src/widgets/desktop-widget.cpp:870
+#: ../src/widgets/desktop-widget.cpp:867 ../src/widgets/desktop-widget.cpp:871
#, c-format
msgid "%s%s: %d (%s) - Inkscape"
msgstr "%s%s: %d (%s) — Inkscape"
-#: ../src/widgets/desktop-widget.cpp:872
+#: ../src/widgets/desktop-widget.cpp:873
#, c-format
msgid "%s%s: %d - Inkscape"
msgstr "%s%s: %d — Inkscape"
-#: ../src/widgets/desktop-widget.cpp:878
+#: ../src/widgets/desktop-widget.cpp:879
#, c-format
msgid "%s%s (%s%s) - Inkscape"
msgstr "%s%s (%s%s) — Inkscape"
-#: ../src/widgets/desktop-widget.cpp:880 ../src/widgets/desktop-widget.cpp:884
+#: ../src/widgets/desktop-widget.cpp:881 ../src/widgets/desktop-widget.cpp:885
#, c-format
msgid "%s%s (%s) - Inkscape"
msgstr "%s%s (%s) — Inkscape"
-#: ../src/widgets/desktop-widget.cpp:886
+#: ../src/widgets/desktop-widget.cpp:887
#, c-format
msgid "%s%s - Inkscape"
msgstr "%s%s — Inkscape"
-#: ../src/widgets/desktop-widget.cpp:1055
+#: ../src/widgets/desktop-widget.cpp:1056
msgid "Color-managed display is <b>enabled</b> in this window"
msgstr "Показ з керуванням кольорами у цьому вікні <b>увімкнено</b>"
-#: ../src/widgets/desktop-widget.cpp:1057
+#: ../src/widgets/desktop-widget.cpp:1058
msgid "Color-managed display is <b>disabled</b> in this window"
msgstr "Показ з керуванням кольорами у цьому вікні <b>вимкнено</b>"
-#: ../src/widgets/desktop-widget.cpp:1112
+#: ../src/widgets/desktop-widget.cpp:1113
#, c-format
msgid ""
"<span weight=\"bold\" size=\"larger\">Save changes to document \"%s\" before "
@@ -25779,12 +27684,12 @@ msgstr ""
"\n"
"Якщо ви закриєте документ без збереження, усі зміни будуть втрачені."
-#: ../src/widgets/desktop-widget.cpp:1122
-#: ../src/widgets/desktop-widget.cpp:1181
+#: ../src/widgets/desktop-widget.cpp:1123
+#: ../src/widgets/desktop-widget.cpp:1182
msgid "Close _without saving"
msgstr "_Не зберігати"
-#: ../src/widgets/desktop-widget.cpp:1171
+#: ../src/widgets/desktop-widget.cpp:1172
#, c-format
msgid ""
"<span weight=\"bold\" size=\"larger\">The file \"%s\" was saved with a "
@@ -25797,11 +27702,11 @@ msgstr ""
"\n"
"Зберегти документ у форматі SVG Inkscape?"
-#: ../src/widgets/desktop-widget.cpp:1183
+#: ../src/widgets/desktop-widget.cpp:1184
msgid "_Save as Inkscape SVG"
msgstr "_Зберегти як SVG Inkscape"
-#: ../src/widgets/desktop-widget.cpp:1393
+#: ../src/widgets/desktop-widget.cpp:1394
msgid "Note:"
msgstr "Примітка:"
@@ -25903,20 +27808,20 @@ msgstr "Стиль"
msgid "Font size:"
msgstr "Розмір шрифту:"
-#: ../src/widgets/gradient-selector.cpp:208
+#: ../src/widgets/gradient-selector.cpp:214
msgid "Create a duplicate gradient"
msgstr "Створення дублікат градієнта"
-#: ../src/widgets/gradient-selector.cpp:218
+#: ../src/widgets/gradient-selector.cpp:230
msgid "Edit gradient"
msgstr "Змінити градієнт"
-#: ../src/widgets/gradient-selector.cpp:289
+#: ../src/widgets/gradient-selector.cpp:306
#: ../src/widgets/paint-selector.cpp:244
msgid "Swatch"
msgstr "Зразок"
-#: ../src/widgets/gradient-selector.cpp:339
+#: ../src/widgets/gradient-selector.cpp:356
msgid "Rename gradient"
msgstr "Перейменувати градієнт"
@@ -26055,6 +27960,13 @@ msgstr "Позначте опорну точку поточного градіє
msgid "Stops:"
msgstr "Опорні точки:"
+#. Label
+#: ../src/widgets/gradient-toolbar.cpp:1174
+#: ../src/widgets/gradient-vector.cpp:926
+msgctxt "Gradient"
+msgid "Offset:"
+msgstr "Зсув:"
+
#: ../src/widgets/gradient-toolbar.cpp:1174
msgid "Offset of selected stop"
msgstr "Відступ позначеної опорної точки"
@@ -26170,7 +28082,7 @@ msgstr "Показувати відомості щодо виміру для в
#. Add the units menu.
#: ../src/widgets/lpe-toolbar.cpp:405 ../src/widgets/node-toolbar.cpp:626
#: ../src/widgets/paintbucket-toolbar.cpp:187
-#: ../src/widgets/rect-toolbar.cpp:382 ../src/widgets/select-toolbar.cpp:543
+#: ../src/widgets/rect-toolbar.cpp:382 ../src/widgets/select-toolbar.cpp:544
msgid "Units"
msgstr "Одиниці"
@@ -26783,23 +28695,23 @@ msgstr "Макс. розмір"
msgid "Maximum size of the ruler"
msgstr "Максимальний розмір лінійки"
-#: ../src/widgets/select-toolbar.cpp:267
+#: ../src/widgets/select-toolbar.cpp:268
msgid "Transform by toolbar"
msgstr "Трансформувати візерунки"
-#: ../src/widgets/select-toolbar.cpp:346
+#: ../src/widgets/select-toolbar.cpp:347
msgid "Now <b>stroke width</b> is <b>scaled</b> when objects are scaled."
msgstr ""
"Тепер <b>товщина штриха</b> <b>масштабується</b> під час зміни масштабу "
"об'єктів."
-#: ../src/widgets/select-toolbar.cpp:348
+#: ../src/widgets/select-toolbar.cpp:349
msgid "Now <b>stroke width</b> is <b>not scaled</b> when objects are scaled."
msgstr ""
"Тепер <b>товщина штриха</b> <b>не масштабується</b> під час зміни масштабу "
"об'єктів."
-#: ../src/widgets/select-toolbar.cpp:359
+#: ../src/widgets/select-toolbar.cpp:360
msgid ""
"Now <b>rounded rectangle corners</b> are <b>scaled</b> when rectangles are "
"scaled."
@@ -26807,7 +28719,7 @@ msgstr ""
"Тепер <b>закруглені кути прямокутника</b> <b>змінюватимуть масштаб</b> під "
"час зміни масштабу прямокутника."
-#: ../src/widgets/select-toolbar.cpp:361
+#: ../src/widgets/select-toolbar.cpp:362
msgid ""
"Now <b>rounded rectangle corners</b> are <b>not scaled</b> when rectangles "
"are scaled."
@@ -26815,7 +28727,7 @@ msgstr ""
"Тепер <b>закруглені кути прямокутника</b> <b>не змінюватимуть масштаб</b> "
"під час зміни масштабу прямокутника."
-#: ../src/widgets/select-toolbar.cpp:372
+#: ../src/widgets/select-toolbar.cpp:373
msgid ""
"Now <b>gradients</b> are <b>transformed</b> along with their objects when "
"those are transformed (moved, scaled, rotated, or skewed)."
@@ -26824,7 +28736,7 @@ msgstr ""
"коли вони перетворюватимуться (переміщуватимуться, змінюватимуть масштаб, "
"повертатимуться або нахилятимуться)."
-#: ../src/widgets/select-toolbar.cpp:374
+#: ../src/widgets/select-toolbar.cpp:375
msgid ""
"Now <b>gradients</b> remain <b>fixed</b> when objects are transformed "
"(moved, scaled, rotated, or skewed)."
@@ -26832,7 +28744,7 @@ msgstr ""
"Тепер <b>закруглені кути прямокутника</b> <b>не змінюватимуться</b> під час "
"зміни масштабу прямокутника."
-#: ../src/widgets/select-toolbar.cpp:385
+#: ../src/widgets/select-toolbar.cpp:386
msgid ""
"Now <b>patterns</b> are <b>transformed</b> along with their objects when "
"those are transformed (moved, scaled, rotated, or skewed)."
@@ -26841,7 +28753,7 @@ msgstr ""
"коли вони перетворюватимуться (переміщуватимуться, змінюватимуть масштаб, "
"повертатимуться або нахилятимуться)."
-#: ../src/widgets/select-toolbar.cpp:387
+#: ../src/widgets/select-toolbar.cpp:388
msgid ""
"Now <b>patterns</b> remain <b>fixed</b> when objects are transformed (moved, "
"scaled, rotated, or skewed)."
@@ -26851,79 +28763,79 @@ msgstr ""
"повертатимуться або нахилятимуться)."
#. four spinbuttons
-#: ../src/widgets/select-toolbar.cpp:505
+#: ../src/widgets/select-toolbar.cpp:506
msgctxt "Select toolbar"
msgid "X position"
msgstr "Розташування за X"
-#: ../src/widgets/select-toolbar.cpp:505
+#: ../src/widgets/select-toolbar.cpp:506
msgctxt "Select toolbar"
msgid "X:"
msgstr "X:"
-#: ../src/widgets/select-toolbar.cpp:507
+#: ../src/widgets/select-toolbar.cpp:508
msgid "Horizontal coordinate of selection"
msgstr "Горизонтальна координата позначення"
-#: ../src/widgets/select-toolbar.cpp:511
+#: ../src/widgets/select-toolbar.cpp:512
msgctxt "Select toolbar"
msgid "Y position"
msgstr "Розташування за Y"
-#: ../src/widgets/select-toolbar.cpp:511
+#: ../src/widgets/select-toolbar.cpp:512
msgctxt "Select toolbar"
msgid "Y:"
msgstr "Y:"
-#: ../src/widgets/select-toolbar.cpp:513
+#: ../src/widgets/select-toolbar.cpp:514
msgid "Vertical coordinate of selection"
msgstr "Вертикальна координата позначення"
-#: ../src/widgets/select-toolbar.cpp:517
+#: ../src/widgets/select-toolbar.cpp:518
msgctxt "Select toolbar"
msgid "Width"
msgstr "Ширина"
-#: ../src/widgets/select-toolbar.cpp:517
+#: ../src/widgets/select-toolbar.cpp:518
msgctxt "Select toolbar"
msgid "W:"
msgstr "Ш:"
-#: ../src/widgets/select-toolbar.cpp:519
+#: ../src/widgets/select-toolbar.cpp:520
msgid "Width of selection"
msgstr "Ширина позначення"
-#: ../src/widgets/select-toolbar.cpp:526
+#: ../src/widgets/select-toolbar.cpp:527
msgid "Lock width and height"
msgstr "Заблокувати ширину і висоту"
-#: ../src/widgets/select-toolbar.cpp:527
+#: ../src/widgets/select-toolbar.cpp:528
msgid "When locked, change both width and height by the same proportion"
msgstr "Коли заблоковано, пропорційно змінювати ширину та висоту"
-#: ../src/widgets/select-toolbar.cpp:536
+#: ../src/widgets/select-toolbar.cpp:537
msgctxt "Select toolbar"
msgid "Height"
msgstr "Висота"
-#: ../src/widgets/select-toolbar.cpp:536
+#: ../src/widgets/select-toolbar.cpp:537
msgctxt "Select toolbar"
msgid "H:"
msgstr "В:"
-#: ../src/widgets/select-toolbar.cpp:538
+#: ../src/widgets/select-toolbar.cpp:539
msgid "Height of selection"
msgstr "Висота позначення"
-#: ../src/widgets/select-toolbar.cpp:588
+#: ../src/widgets/select-toolbar.cpp:589
msgid "Scale rounded corners"
msgstr "Змінити розмір округлених кутів"
-#: ../src/widgets/select-toolbar.cpp:599
+#: ../src/widgets/select-toolbar.cpp:600
msgid "Move gradients"
msgstr "Перемістити градієнти"
-#: ../src/widgets/select-toolbar.cpp:610
+#: ../src/widgets/select-toolbar.cpp:611
msgid "Move patterns"
msgstr "Перемістити текстури"
@@ -26952,10 +28864,6 @@ msgid "_B:"
msgstr "_B:"
#: ../src/widgets/sp-color-icc-selector.cpp:359
-msgid "G:"
-msgstr "С:"
-
-#: ../src/widgets/sp-color-icc-selector.cpp:359
msgid "Gray"
msgstr "Сірий"
@@ -28633,7 +30541,7 @@ msgstr ""
msgid "An error occurred while processing the XCF file."
msgstr "Під час спроби обробки файла XCF сталася помилка."
-#: ../share/extensions/gimp_xcf.py:171
+#: ../share/extensions/gimp_xcf.py:177
msgid "This extension requires at least one non empty layer."
msgstr "Для роботи цього додатка потрібен хоча б один непорожній шар."
@@ -28663,7 +30571,7 @@ msgstr ""
"кресленні не буде деяких елементів."
#. issue error if no paths found
-#: ../share/extensions/hpgl_output.py:62
+#: ../share/extensions/hpgl_output.py:63
msgid ""
"No paths where found. Please convert all objects you want to save into paths."
msgstr ""
@@ -28689,7 +30597,12 @@ msgstr ""
"Технічна інформація:\n"
"%s"
-#: ../share/extensions/inkex.py:260
+#: ../share/extensions/inkex.py:162 ../share/extensions/inkex.py:171
+#, python-format
+msgid "Unable to open specified file: %s"
+msgstr "Не вдалося відкрити вказаний файл: %s"
+
+#: ../share/extensions/inkex.py:276
#, python-format
msgid "No matching node for expression: %s"
msgstr "Не знайдено відповідного вузла для виразу: %s"
@@ -28730,6 +30643,7 @@ msgstr ""
"\n"
#: ../share/extensions/jessyInk_autoTexts.py:54
+#, python-brace-format
msgid ""
"Node with id '{0}' is not a suitable text node and was therefore ignored.\n"
"\n"
@@ -28763,6 +30677,7 @@ msgstr ""
"основного слайда.\n"
#: ../share/extensions/jessyInk_summary.py:69
+#, python-brace-format
msgid "JessyInk script version {0} installed."
msgstr "Встановлено версію {0} скрипту JessyInk."
@@ -28787,6 +30702,7 @@ msgstr ""
"Слайд {0!s}:"
#: ../share/extensions/jessyInk_summary.py:94
+#, python-brace-format
msgid "{0}Layer name: {1}"
msgstr "{0}Назва шару: {1}"
@@ -28795,6 +30711,7 @@ msgid "{0}Transition in: {1} ({2!s} s)"
msgstr "{0}Перехід у {1} ({2!s} с)"
#: ../share/extensions/jessyInk_summary.py:104
+#, python-brace-format
msgid "{0}Transition in: {1}"
msgstr "{0}Перехід у {1}"
@@ -28803,10 +30720,12 @@ msgid "{0}Transition out: {1} ({2!s} s)"
msgstr "{0}Перехід з {1} ({2!s} с)"
#: ../share/extensions/jessyInk_summary.py:113
+#, python-brace-format
msgid "{0}Transition out: {1}"
msgstr "{0}Вихідна позиція переходу: {1}"
#: ../share/extensions/jessyInk_summary.py:120
+#, python-brace-format
msgid ""
"\n"
"{0}Auto-texts:"
@@ -28815,10 +30734,12 @@ msgstr ""
"{0}Автотексти:"
#: ../share/extensions/jessyInk_summary.py:123
+#, python-brace-format
msgid "{0}\t\"{1}\" (object id \"{2}\") will be replaced by \"{3}\"."
msgstr "{0}\t\"{1}\" (ідентифікатор об'єкта «{2}») буде замінено на «{3}»."
#: ../share/extensions/jessyInk_summary.py:168
+#, python-brace-format
msgid ""
"\n"
"{0}Initial effect (order number {1}):"
@@ -28835,10 +30756,12 @@ msgstr ""
"{0}Ефект {1!s} (порядковий номер {2}):"
#: ../share/extensions/jessyInk_summary.py:174
+#, python-brace-format
msgid "{0}\tView will be set according to object \"{1}\""
msgstr "{0}\tОбласть перегляду буде встановлено відповідно до об'єкта «{1}»"
#: ../share/extensions/jessyInk_summary.py:176
+#, python-brace-format
msgid "{0}\tObject \"{1}\""
msgstr "{0}\tОб'єкт «{1}»"
@@ -28851,6 +30774,7 @@ msgid " will disappear"
msgstr " зникне"
#: ../share/extensions/jessyInk_summary.py:184
+#, python-brace-format
msgid " using effect \"{0}\""
msgstr " з використанням ефекту «{0}»"
@@ -28988,18 +30912,32 @@ msgstr ""
"Спробуйте скористатися пунктом меню Контур -> Об'єкт у контур."
#. issue error if no paths found
-#: ../share/extensions/plotter.py:70
+#: ../share/extensions/plotter.py:71
msgid ""
"No paths where found. Please convert all objects you want to plot into paths."
msgstr ""
"Контурів не знайдено. Будь ласка, перетворіть усі потрібні вам об’єкти для "
"вирізання на контури."
-#: ../share/extensions/plotter.py:131
-msgid "pySerial is not installed."
-msgstr "Не встановлено pySerial."
+#: ../share/extensions/plotter.py:132
+msgid ""
+"pySerial is not installed.\n"
+"\n"
+"1. Download pySerial here (not the \".exe\"!): http://pypi.python.org/pypi/"
+"pyserial\n"
+"2. Extract the \"serial\" subfolder from the zip to the following folder: C:"
+"\\[Program files]\\inkscape\\python\\Lib\\\n"
+"3. Restart Inkscape."
+msgstr ""
+"pySerial не встановлено.\n"
+"\n"
+"1. Отримайте пакунок pySerial (не файл «.exe»!) тут: http://pypi.python.org/"
+"pypi/pyserial\n"
+"2. Виконайте видобування підтеки «serial» з архіву zip до цієї теки: C:"
+"\\[Program files]\\inkscape\\python\\Lib\\\n"
+"3. Перезапустіть Inkscape."
-#: ../share/extensions/plotter.py:151
+#: ../share/extensions/plotter.py:152
msgid ""
"Could not open port. Please check that your plotter is running, connected "
"and the settings are correct."
@@ -29141,8 +31079,18 @@ msgstr "Вам слід вибрати відповідне кодування
#: ../share/extensions/uniconv-ext.py:56
#: ../share/extensions/uniconv_output.py:122
-msgid "You need to install the UniConvertor software.\n"
-msgstr "Вам слід встановити UniConvertor.\n"
+msgid ""
+"You need to install the UniConvertor software.\n"
+"For GNU/Linux: install the package python-uniconvertor.\n"
+"For Windows: download it from\n"
+"http://sk1project.org/modules.php?name=Products&product=uniconvertor\n"
+"and install into your Inkscape's Python location\n"
+msgstr ""
+"Вам слід встановити програму UniConvertor.\n"
+"У GNU/Linux: встановіть пакунок python-uniconvertor.\n"
+"У Windows: отримайте пакунок зі сторінки\n"
+"http://sk1project.org/modules.php?name=Products&product=uniconvertor\n"
+"і встановіть його до теки Python Inkscape.\n"
#: ../share/extensions/voronoi2svg.py:215
msgid "Please select objects!"
@@ -31143,7 +33091,11 @@ msgstr "Зберегти сітку"
msgid "Save Background"
msgstr "Зберегти тло"
-#: ../share/extensions/gimp_xcf.inx.h:7
+#: ../share/extensions/gimp_xcf.inx.h:6
+msgid "File Resolution:"
+msgstr "Роздільність файла:"
+
+#: ../share/extensions/gimp_xcf.inx.h:8
msgid ""
"This extension exports the document to Gimp XCF format according to the "
"following options:\n"
@@ -31151,6 +33103,7 @@ msgid ""
" * Save Grid: convert the first rectangular grid to a Gimp grid (note "
"that the default Inkscape grid is very narrow when shown in Gimp).\n"
" * Save Background: add the document background to each converted layer.\n"
+" * File Resolution: XCF file resolution, in DPI.\n"
"\n"
"Each first level layer is converted to a Gimp layer. Sublayers are "
"concatenated and converted with their first level parent layer into a single "
@@ -31163,12 +33116,14 @@ msgstr ""
"(зауважте, що типову сітку Inkscape буде показано дуже вузькою у вікні "
"Gimp).\n"
" * Зберегти тло: додати тло документа до кожного з перетворених шарів.\n"
+" * Роздільність файла: роздільна здатність даних у файлі XCF, у точках на "
+"дюйм.\n"
"\n"
"Всі шари першого рівня буде перетворено у шари Gimp. Всі підлеглі шарити "
"буде об'єднано і перетворено разом з відповідним батьківським шаром першого "
"рівня у єдиний шар Gimp."
-#: ../share/extensions/gimp_xcf.inx.h:13
+#: ../share/extensions/gimp_xcf.inx.h:15
msgid "GIMP XCF maintaining layers (*.xcf)"
msgstr "GIMP XCF з підтримкою шарів (*.xcf)"
@@ -31642,8 +33597,13 @@ msgid "Resolution X (dpi)"
msgstr "Роздільна здатність за X (у т/дюйм):"
#: ../share/extensions/hpgl_input.inx.h:4
-msgid "The amount of steps in one inch on the X axis. (Default: 1016.0)"
-msgstr "Кількість кроків у одному дюймі за віссю X. (типове значення — 1016.0)"
+#: ../share/extensions/hpgl_output.inx.h:5
+#: ../share/extensions/plotter.inx.h:21
+msgid ""
+"The amount of steps the plotter moves if it moves for 1 inch on the X axis. "
+"(Default: 1016.0)"
+msgstr ""
+"Кількість кроків різця у одному дюймі за віссю X (типове значення — 1016.0)"
#: ../share/extensions/hpgl_input.inx.h:5
#: ../share/extensions/hpgl_output.inx.h:6
@@ -31652,8 +33612,13 @@ msgid "Resolution Y (dpi)"
msgstr "Роздільна здатність за Y (у т/дюйм):"
#: ../share/extensions/hpgl_input.inx.h:6
-msgid "The amount of steps in one inch on the Y axis. (Default: 1016.0)"
-msgstr "Кількість кроків у одному дюймі за віссю Y. (типове значення — 1016.0)"
+#: ../share/extensions/hpgl_output.inx.h:7
+#: ../share/extensions/plotter.inx.h:23
+msgid ""
+"The amount of steps the plotter moves if it moves for 1 inch on the Y axis. "
+"(Default: 1016.0)"
+msgstr ""
+"Кількість кроків різця у одному дюймі за віссю Y (типове значення — 1016.0)"
#: ../share/extensions/hpgl_input.inx.h:7
msgid "Show movements between paths"
@@ -31666,7 +33631,7 @@ msgstr ""
"(Типове значення: не позначено)"
#: ../share/extensions/hpgl_input.inx.h:9
-#: ../share/extensions/hpgl_output.inx.h:42
+#: ../share/extensions/hpgl_output.inx.h:43
msgid "HP Graphics Language file (*.hpgl)"
msgstr "Файли графічної мови HP (*.hpgl)"
@@ -31681,35 +33646,18 @@ msgstr "Експорт до HPGL"
#: ../share/extensions/hpgl_output.inx.h:2
msgid ""
"Please make sure that all objects you want to save are converted to paths. "
-"The drawing will be automatically aligned to the zero point. Please use the "
-"plotter extension (Extensions menu) to plot directly on a plotter."
+"Please use the plotter extension (Extensions menu) to plot directly over a "
+"serial connection."
msgstr ""
"Будь ласка, переконайтеся, що всі об’єкти, які слід вирізати, перетворено на "
-"контури. Креслення буде автоматично вирівняно за нульовою точкою. "
-"Скористайтеся додатком плотера (меню «Додатки»), щоб виконати вирізання "
-"безпосередньо на плотері."
+"контури. Скористайтеся додатком плотера (меню «Додатки»), щоб виконати "
+"вирізання безпосередньо за допомогою послідовного з’єднання."
#: ../share/extensions/hpgl_output.inx.h:3
#: ../share/extensions/plotter.inx.h:19
msgid "Plotter Settings"
msgstr "Параметри вирізання"
-#: ../share/extensions/hpgl_output.inx.h:5
-#: ../share/extensions/plotter.inx.h:21
-msgid ""
-"The amount of steps the cutter moves if it moves for 1 inch on the X axis. "
-"(Default: 1016.0)"
-msgstr ""
-"Кількість кроків різця у одному дюймі за віссю X (типове значення — 1016.0)"
-
-#: ../share/extensions/hpgl_output.inx.h:7
-#: ../share/extensions/plotter.inx.h:23
-msgid ""
-"The amount of steps the cutter moves if it moves for 1 inch on the Y axis. "
-"(Default: 1016.0)"
-msgstr ""
-"Кількість кроків різця у одному дюймі за віссю Y (типове значення — 1016.0)"
-
#: ../share/extensions/hpgl_output.inx.h:8
#: ../share/extensions/plotter.inx.h:24
msgid "Pen number"
@@ -31730,26 +33678,27 @@ msgstr "Тиск різця (у грамах)"
#: ../share/extensions/plotter.inx.h:27
msgid ""
"The amount of force pushing down the pen in grams, set to 0 to omit command. "
-"Most plotters ignore this command. (Default: 24)"
+"Most plotters ignore this command. (Default: 0)"
msgstr ""
"Величина сили, що притискає різець, у грамах сили. Встановіть значення 0, "
"якщо цю команду віддавати не слід. Більшість плотерів ігнорує цю команду. "
-"(Типове значення: 24)"
+"(Типове значення: 0)"
#: ../share/extensions/hpgl_output.inx.h:12
#: ../share/extensions/plotter.inx.h:28
-msgid "Pen speed (cm/s)"
-msgstr "Швидкість різця (у см/с)"
+msgid "Pen speed (cm/s or mm/s)"
+msgstr "Швидкість різця (у см/с або мм/с)"
#: ../share/extensions/hpgl_output.inx.h:13
#: ../share/extensions/plotter.inx.h:29
msgid ""
-"The speed the pen will move with in centimetres per second, set to 0 to omit "
-"command. Most plotters ignore this command. (Default: 20)"
+"The speed the pen will move with in centimeters or millimeters per second "
+"(depending on your plotter model), set to 0 to omit command. Most plotters "
+"ignore this command. (Default: 0)"
msgstr ""
-"Швидкість руху різця у сантиметрах на секунду. Встановіть значення 0, щоб "
-"вимкнути команду. Більшість плотерів ігнорує цю команду. (Типове значення: "
-"20)"
+"Швидкість руху різця у сантиметрах або міліметрах на секунду (залежно від "
+"моделі плотера). Встановіть значення 0, щоб вимкнути команду. Більшість "
+"плотерів ігнорує цю команду. (Типове значення: 20)"
#: ../share/extensions/hpgl_output.inx.h:14
#: ../share/extensions/plotter.inx.h:30
@@ -31758,7 +33707,7 @@ msgstr "Обертання за годинниковою стрілкою"
#: ../share/extensions/hpgl_output.inx.h:15
#: ../share/extensions/plotter.inx.h:31
-msgid "Rotation of the plot. (Default: 0°)"
+msgid "Rotation of the drawing. (Default: 0°)"
msgstr "Кут обертання креслення. (Типове значення: 0°)"
#: ../share/extensions/hpgl_output.inx.h:16
@@ -31866,30 +33815,20 @@ msgstr "Використовувати підрізання"
#: ../share/extensions/hpgl_output.inx.h:32
#: ../share/extensions/plotter.inx.h:48
msgid ""
-"Check this to plot a small line before the real plot to align the tool "
-"orientation for the first real plot. (Default: Checked)"
+"Check this to cut a small line before the real drawing starts to correctly "
+"align the tool orientation. (Default: Checked)"
msgstr ""
"Позначте цей пункт, щоб різець вирізав невеличку пряму лінію, перш ніж "
"виконати основну процедуру вирізання. Така лінія потрібна для вирівнювання "
"орієнтації інструмента для першого вирізання. (Типове значення: позначено)"
-#: ../share/extensions/hpgl_output.inx.h:33
-#: ../share/extensions/plotter.inx.h:49
-msgid ""
-"Please note that using the tool offset correction will move your plot away "
-"from the zero point by one tool offset length."
-msgstr ""
-"Будь ласка, зауважте, що у результаті використання виправлення відступу "
-"інструмента різець буде відсунуто від нульової точки на довжину одного "
-"відступу інструмента."
-
-#: ../share/extensions/hpgl_output.inx.h:35
-#: ../share/extensions/plotter.inx.h:51
+#: ../share/extensions/hpgl_output.inx.h:34
+#: ../share/extensions/plotter.inx.h:50
msgid "Curve flatness"
msgstr "Пласкість кривої"
-#: ../share/extensions/hpgl_output.inx.h:36
-#: ../share/extensions/plotter.inx.h:52
+#: ../share/extensions/hpgl_output.inx.h:35
+#: ../share/extensions/plotter.inx.h:51
msgid ""
"Curves are divided into lines, this number controls how fine the curves will "
"be reproduced, the smaller the finer. (Default: '1.2')"
@@ -31897,36 +33836,49 @@ msgstr ""
"Криві буде розділено на прямі відрізки. Це значення керує точністю такого "
"поділу. Чим меншим воно буде, тим точнішим буде поділ. (Типове значення: 1.2)"
-#: ../share/extensions/hpgl_output.inx.h:37
-#: ../share/extensions/plotter.inx.h:53
+#: ../share/extensions/hpgl_output.inx.h:36
+#: ../share/extensions/plotter.inx.h:52
msgid "X offset (mm)"
msgstr "Відступ за X (у мм)"
-#: ../share/extensions/hpgl_output.inx.h:38
-#: ../share/extensions/plotter.inx.h:54
-msgid ""
-"The offset to move your plot away from the zero point on the X axis in mm. "
-"(Default: '0.00')"
+#: ../share/extensions/hpgl_output.inx.h:37
+#: ../share/extensions/plotter.inx.h:53
+msgid "Shifts your drawing on the X axis in mm. (Default: '0.00')"
msgstr ""
"Відступ вашого креслення від початкової точки за віссю X у мм. (Типове "
"значення: 0.00)"
-#: ../share/extensions/hpgl_output.inx.h:39
-#: ../share/extensions/plotter.inx.h:55
+#: ../share/extensions/hpgl_output.inx.h:38
+#: ../share/extensions/plotter.inx.h:54
msgid "Y offset (mm)"
msgstr "Відступ за Y (у мм)"
-#: ../share/extensions/hpgl_output.inx.h:40
-#: ../share/extensions/plotter.inx.h:56
-msgid ""
-"The offset to move your plot away from the zero point on the Y axis in mm. "
-"(Default: '0.00')"
+#: ../share/extensions/hpgl_output.inx.h:39
+#: ../share/extensions/plotter.inx.h:55
+msgid "Shifts your drawing on the Y axis in mm. (Default: '0.00')"
msgstr ""
"Відступ вашого креслення від початкової точки за віссю Y у мм. (Типове "
"значення: 0.00)"
+#: ../share/extensions/hpgl_output.inx.h:40
+#: ../share/extensions/plotter.inx.h:56
+msgid "Auto align"
+msgstr "Автовирівнювання"
+
#: ../share/extensions/hpgl_output.inx.h:41
-#: ../share/extensions/plotter.inx.h:59
+#: ../share/extensions/plotter.inx.h:57
+msgid ""
+"Check this to auto align the drawing to the zero point (Plus the tool offset "
+"if used). If unchecked you have to make sure that all parts of your drawing "
+"are within the document border! (Default: Checked)"
+msgstr ""
+"Позначте цей пункт, щоб креслення було автоматично вирівняно за нульовою "
+"точкою (плюс відступ інструмента, якщо він використовується). Якщо пункт не "
+"буде позначено, слід переконатися, що усіх частини креслення перебувають у "
+"межах документа! (Типовий стан: позначено)"
+
+#: ../share/extensions/hpgl_output.inx.h:42
+#: ../share/extensions/plotter.inx.h:60
msgid ""
"All these settings depend on the plotter you use, for more information "
"please consult the manual or homepage for your plotter."
@@ -31935,7 +33887,7 @@ msgstr ""
"Докладнішу інформацію можна отримати з підручника до плотера або домашньої "
"сторінки компанії-виробника."
-#: ../share/extensions/hpgl_output.inx.h:43
+#: ../share/extensions/hpgl_output.inx.h:44
msgid "Export an HP Graphics Language file"
msgstr "Експортувати до файла графічної мови HP"
@@ -33261,11 +35213,10 @@ msgstr "Різання"
#: ../share/extensions/plotter.inx.h:2
msgid ""
-"Please make sure that all objects you want to plot are converted to paths. "
-"The plot will automatically be aligned to the zero point."
+"Please make sure that all objects you want to plot are converted to paths."
msgstr ""
"Будь ласка, переконайтеся, що всі об’єкти, які слід вирізати, перетворено на "
-"контури. Креслення буде автоматично вирівняно за нульовою точкою."
+"контури."
#: ../share/extensions/plotter.inx.h:3
msgid "Connection"
@@ -33328,7 +35279,7 @@ msgstr "апаратне (DSR/DTR + RTS/CTS)"
#: ../share/extensions/plotter.inx.h:16
msgid ""
"Using wrong settings can under certain circumstances cause Inkscape to "
-"freeze. Always save your work before plotting."
+"freeze. Always save your work before plotting!"
msgstr ""
"Використання помилкових параметрів, за певних обставин, може призвести до "
"зависання Inkscape. Завжди зберігайте вашу роботу до того, як розпочати "
@@ -33347,11 +35298,11 @@ msgstr ""
msgid "Parallel (LPT) connections are not supported."
msgstr "Підтримки паралельних з’єднань (LPT) не передбачено."
-#: ../share/extensions/plotter.inx.h:57
+#: ../share/extensions/plotter.inx.h:58
msgid "Show debug information"
msgstr "Показувати діагностичну інформацію"
-#: ../share/extensions/plotter.inx.h:58
+#: ../share/extensions/plotter.inx.h:59
msgid ""
"Check this to get verbose information about the plot without actually "
"sending something to the plotter (A.k.a. data dump). (Default: Unchecked)"
@@ -33360,7 +35311,7 @@ msgstr ""
"вирізання без надсилання даних на плотер (тобто отримувати дамп даних). "
"(Типове значення: не позначено)"
-#: ../share/extensions/plotter.inx.h:60
+#: ../share/extensions/plotter.inx.h:61
msgid "Plotter"
msgstr "Плотер"
@@ -35107,6 +37058,47 @@ msgstr "Популярний графічний формат для кліпар
msgid "XAML Input"
msgstr "Імпорт з XAML"
+#~ msgctxt "Symbol"
+#~ msgid "Intormation"
+#~ msgstr "Інформація"
+
+#~ msgid "drawing-%d%s"
+#~ msgstr "рисунок-%d%s"
+
+#~ msgid "%s"
+#~ msgstr "%s"
+
+#~ msgid "Adjust the bisector's \"left\" end"
+#~ msgstr "Скоригувати «лівий» кінець бісектриси"
+
+#~ msgid "Adjust the bisector's \"right\" end"
+#~ msgstr "Скоригувати «правий» кінець бісектриси"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "pySerial is not installed."
+#~ msgstr "Не встановлено pySerial."
+
+#~ msgid "You need to install the UniConvertor software.\n"
+#~ msgstr "Вам слід встановити UniConvertor.\n"
+
+#~ msgid "The amount of steps in one inch on the X axis. (Default: 1016.0)"
+#~ msgstr ""
+#~ "Кількість кроків у одному дюймі за віссю X. (типове значення — 1016.0)"
+
+#~ msgid "The amount of steps in one inch on the Y axis. (Default: 1016.0)"
+#~ msgstr ""
+#~ "Кількість кроків у одному дюймі за віссю Y. (типове значення — 1016.0)"
+
+#~ msgid ""
+#~ "Please note that using the tool offset correction will move your plot "
+#~ "away from the zero point by one tool offset length."
+#~ msgstr ""
+#~ "Будь ласка, зауважте, що у результаті використання виправлення відступу "
+#~ "інструмента різець буде відсунуто від нульової точки на довжину одного "
+#~ "відступу інструмента."
+
#~ msgid "(%d characters%s)"
#~ msgstr "(%d символів%s)"
@@ -35119,9 +37111,6 @@ msgstr "Імпорт з XAML"
#~ msgid "8x8"
#~ msgstr "8x8"
-#~ msgid "16x16"
-#~ msgstr "16x16"
-
#~ msgid "Oversample bitmaps:"
#~ msgstr "Усереднювати растр по точках:"
diff --git a/share/extensions/draw_from_triangle.py b/share/extensions/draw_from_triangle.py
index 414363e86..42cda7035 100755
--- a/share/extensions/draw_from_triangle.py
+++ b/share/extensions/draw_from_triangle.py
@@ -148,6 +148,8 @@ def get_n_points_from_path( node, n):#returns a list of first n points (x,y) in
if len(xi) == n and len(yi) == n:
points = [] # returned pairs of points
for i in range(n):
+ xi[i] = Draw_From_Triangle.unittouu(e, str(xi[i]) + 'px')
+ yi[i] = Draw_From_Triangle.unittouu(e, str(yi[i]) + 'px')
points.append( [ xi[i], yi[i] ] )
else:
#inkex.errormsg(_('Error: Not enough nodes to gather coordinates.')) #fail silently and exit, rather than invoke an error console
@@ -190,17 +192,17 @@ class Style(object): #container for style information
def __init__(self, options):
#dot markers
self.d_rad = 4 #dot marker radius
- self.d_th = 2 #stroke width
+ self.d_th = Draw_From_Triangle.unittouu(e, '2px') #stroke width
self.d_fill= '#aaaaaa' #fill colour
self.d_col = '#000000' #stroke colour
#lines
- self.l_th = 2
+ self.l_th = Draw_From_Triangle.unittouu(e, '2px')
self.l_fill= 'none'
self.l_col = '#000000'
#circles
- self.c_th = 2
+ self.c_th = Draw_From_Triangle.unittouu(e, '2px')
self.c_fill= 'none'
self.c_col = '#000000'
@@ -314,7 +316,7 @@ class Draw_From_Triangle(inkex.Effect):
if len(pts) == 3: #if we have right number of nodes, else skip and end program
st = Style(so)#style for dots, lines and circles
-
+
#CREATE A GROUP TO HOLD ALL GENERATED ELEMENTS IN
#Hold relative to point A (pt[0])
group_translation = 'translate(' + str( pts[0][0] ) + ','+ str( pts[0][1] ) + ')'
diff --git a/share/extensions/foldablebox.py b/share/extensions/foldablebox.py
index 5d5945dd9..b504de89f 100755
--- a/share/extensions/foldablebox.py
+++ b/share/extensions/foldablebox.py
@@ -70,7 +70,7 @@ class FoldableBox(inkex.Effect):
box_id = self.uniqueId('box')
self.box = g = inkex.etree.SubElement(self.current_layer, 'g', {'id':box_id})
- line_style = simplestyle.formatStyle({ 'stroke': '#000000', 'fill': 'none' })
+ line_style = simplestyle.formatStyle({ 'stroke': '#000000', 'fill': 'none', 'stroke-width': str(self.unittouu('1px')) })
#self.createGuide( 0, docH, 0 );
diff --git a/share/extensions/grid_cartesian.py b/share/extensions/grid_cartesian.py
index 85716a6fd..23df0ff84 100755
--- a/share/extensions/grid_cartesian.py
+++ b/share/extensions/grid_cartesian.py
@@ -122,7 +122,17 @@ class Grid_Polar(inkex.Effect):
def effect(self):
-
+
+ self.options.border_th = self.unittouu(str(self.options.border_th) + 'px')
+ self.options.dx = self.unittouu(str(self.options.dx) + 'px')
+ self.options.x_divs_th = self.unittouu(str(self.options.x_divs_th) + 'px')
+ self.options.x_subdivs_th = self.unittouu(str(self.options.x_subdivs_th) + 'px')
+ self.options.x_subsubdivs_th = self.unittouu(str(self.options.x_subsubdivs_th) + 'px')
+ self.options.dy = self.unittouu(str(self.options.dy) + 'px')
+ self.options.y_divs_th = self.unittouu(str(self.options.y_divs_th) + 'px')
+ self.options.y_subdivs_th = self.unittouu(str(self.options.y_subdivs_th) + 'px')
+ self.options.y_subsubdivs_th = self.unittouu(str(self.options.y_subsubdivs_th) + 'px')
+
#find the pixel dimensions of the overall grid
ymax = self.options.dy * self.options.y_divs
xmax = self.options.dx * self.options.x_divs
diff --git a/share/extensions/grid_isometric.py b/share/extensions/grid_isometric.py
index 27951a0a8..8ac407613 100755
--- a/share/extensions/grid_isometric.py
+++ b/share/extensions/grid_isometric.py
@@ -84,6 +84,12 @@ class Grid_Polar(inkex.Effect):
def effect(self):
+ self.options.dx = self.unittouu(str(self.options.dx) + 'px')
+ self.options.divs_th = self.unittouu(str(self.options.divs_th) + 'px')
+ self.options.subdivs_th = self.unittouu(str(self.options.subdivs_th) + 'px')
+ self.options.subsubdivs_th = self.unittouu(str(self.options.subsubdivs_th) + 'px')
+ self.options.border_th = self.unittouu(str(self.options.border_th) + 'px')
+
#Can't generate a grid too flat
#If the Y dimension is smallest than half the X dimension, fix it.
if self.options.y_divs<((self.options.x_divs+1)/2):
diff --git a/share/extensions/grid_polar.py b/share/extensions/grid_polar.py
index 3ae3fac34..17c3499cb 100755
--- a/share/extensions/grid_polar.py
+++ b/share/extensions/grid_polar.py
@@ -119,7 +119,16 @@ class Grid_Polar(inkex.Effect):
help="The radial outset of the circumferential labels")
def effect(self):
-
+
+ self.options.dr = self.unittouu(str(self.options.dr) + 'px')
+ self.options.r_divs_th = self.unittouu(str(self.options.r_divs_th) + 'px')
+ self.options.r_subdivs_th = self.unittouu(str(self.options.r_subdivs_th) + 'px')
+ self.options.a_divs_th = self.unittouu(str(self.options.a_divs_th) + 'px')
+ self.options.a_subdivs_th = self.unittouu(str(self.options.a_subdivs_th) + 'px')
+ self.options.c_dot_dia = self.unittouu(str(self.options.c_dot_dia) + 'px')
+ self.options.a_label_size = self.unittouu(str(self.options.a_label_size) + 'px')
+ self.options.a_label_outset = self.unittouu(str(self.options.a_label_outset) + 'px')
+
# Embed grid in group
#Put in in the centre of the current view
t = 'translate(' + str( self.view_center[0] ) + ',' + str( self.view_center[1] ) + ')'
diff --git a/share/extensions/guides_creator.py b/share/extensions/guides_creator.py
index abd41c6fc..21df1cd50 100755
--- a/share/extensions/guides_creator.py
+++ b/share/extensions/guides_creator.py
@@ -297,8 +297,8 @@ class Guides_Creator(inkex.Effect):
svg = self.document.getroot()
# getting the width and height attributes of the canvas
- width = self.unittouu(svg.get('width'))
- height = self.unittouu(svg.attrib['height'])
+ width = float(svg.get('width'))
+ height = float(svg.get('height'))
# getting edges coordinates
h_orientation = '0,' + str(round(width,4))
diff --git a/share/extensions/lindenmayer.py b/share/extensions/lindenmayer.py
index f9abce3ec..2e058f541 100755
--- a/share/extensions/lindenmayer.py
+++ b/share/extensions/lindenmayer.py
@@ -104,7 +104,8 @@ class LSystem(inkex.Effect):
return level_string
def effect(self):
- s = {'stroke-linejoin': 'miter', 'stroke-width': '1.0px',
+ self.options.step = self.unittouu(str(self.options.step) + 'px')
+ s = {'stroke-linejoin': 'miter', 'stroke-width': str(self.unittouu('1px')),
'stroke-opacity': '1.0', 'fill-opacity': '1.0',
'stroke': '#000000', 'stroke-linecap': 'butt',
'fill': 'none'}
diff --git a/share/extensions/render_alphabetsoup.py b/share/extensions/render_alphabetsoup.py
index ad43163e4..083f03af9 100755
--- a/share/extensions/render_alphabetsoup.py
+++ b/share/extensions/render_alphabetsoup.py
@@ -514,7 +514,7 @@ class AlphabetSoup(inkex.Effect):
help="Generate random (unreadable) text")
def effect(self):
- zoom = self.options.zoom
+ zoom = self.unittouu( str(self.options.zoom) + 'px')
if self.options.randomize:
imagelist = generate_random_string(self.options.text, zoom)
diff --git a/share/extensions/render_gear_rack.py b/share/extensions/render_gear_rack.py
index 13eaf1017..68c5d050e 100644
--- a/share/extensions/render_gear_rack.py
+++ b/share/extensions/render_gear_rack.py
@@ -65,8 +65,8 @@ class RackGear(inkex.Effect):
help="Contact Angle")
def effect(self):
- length = self.options.length
- spacing = self.options.spacing
+ length = self.unittouu(str(self.options.length) + 'px')
+ spacing = self.unittouu(str(self.options.spacing) + 'px')
angle = radians(self.options.angle)
# generate points: list of (x, y) pairs
@@ -93,7 +93,7 @@ class RackGear(inkex.Effect):
g = inkex.etree.SubElement(self.current_layer, 'g', g_attribs)
# Create SVG Path for gear
- style = {'stroke': '#000000', 'fill': 'none'}
+ style = {'stroke': '#000000', 'fill': 'none', 'stroke-width': str(self.unittouu('1px'))}
gear_attribs = {
'style': simplestyle.formatStyle(style),
'd': path}
diff --git a/share/extensions/render_gears.py b/share/extensions/render_gears.py
index 5201e553b..d5c8131a8 100644
--- a/share/extensions/render_gears.py
+++ b/share/extensions/render_gears.py
@@ -164,7 +164,7 @@ class Gears(inkex.Effect):
g = inkex.etree.SubElement(self.current_layer, 'g', g_attribs)
# Create SVG Path for gear
- style = { 'stroke': '#000000', 'fill': 'none' }
+ style = { 'stroke': '#000000', 'fill': 'none', 'stroke-width': str(self.unittouu('1px')) }
gear_attribs = {'style':simplestyle.formatStyle(style), 'd':path}
gear = inkex.etree.SubElement(g, inkex.addNS('path','svg'), gear_attribs )
if(centerdiameter > 0.0):
diff --git a/share/extensions/rtree.py b/share/extensions/rtree.py
index 3231d284e..db677d0d5 100755
--- a/share/extensions/rtree.py
+++ b/share/extensions/rtree.py
@@ -44,7 +44,9 @@ class RTreeTurtle(inkex.Effect):
dest="minimum", default=4.0,
help="minimum branch size")
def effect(self):
- s = {'stroke-linejoin': 'miter', 'stroke-width': '1.0px',
+ self.options.size = self.unittouu(str(self.options.size) + 'px')
+ self.options.minimum = self.unittouu(str(self.options.minimum) + 'px')
+ s = {'stroke-linejoin': 'miter', 'stroke-width': str(self.unittouu('1px')),
'stroke-opacity': '1.0', 'fill-opacity': '1.0',
'stroke': '#000000', 'stroke-linecap': 'butt',
'fill': 'none'}
diff --git a/share/extensions/spirograph.py b/share/extensions/spirograph.py
index cb9d1ac24..77a258d5f 100755
--- a/share/extensions/spirograph.py
+++ b/share/extensions/spirograph.py
@@ -47,6 +47,9 @@ class Spirograph(inkex.Effect):
help="The quality of the calculated output")
def effect(self):
+ self.options.primaryr = self.unittouu(str(self.options.primaryr) + 'px')
+ self.options.secondaryr = self.unittouu(str(self.options.secondaryr) + 'px')
+ self.options.penr = self.unittouu(str(self.options.penr) + 'px')
if self.options.secondaryr == 0:
return
@@ -68,7 +71,7 @@ class Spirograph(inkex.Effect):
rotation = - math.pi * self.options.rotation / 180;
new = inkex.etree.Element(inkex.addNS('path','svg'))
- s = { 'stroke': '#000000', 'fill': 'none' }
+ s = { 'stroke': '#000000', 'fill': 'none', 'stroke-width': str(self.unittouu('1px')) }
new.set('style', simplestyle.formatStyle(s))
pathString = ''
diff --git a/share/symbols/AigaSymbols.svg b/share/symbols/AigaSymbols.svg
index 946633315..3ac907e61 100644
--- a/share/symbols/AigaSymbols.svg
+++ b/share/symbols/AigaSymbols.svg
@@ -241,7 +241,7 @@
</symbol>
<symbol id="BaggageLockers">
- <title>Bagage Lockers</title>
+ <title>Baggage Lockers</title>
<!-- key -->
<path d="m 34.625,11 a 7.5,7.5 0 1 0 0,7 l 2.375,0 2.5,-2.5 2,2 2,-2 2,2 2,-2 2,2 2.5,-2.5 c 0.5,-0.5 0.5,-1 0,-1.5 L 49.5,11 z M 27,14.5 a 2,2 0 1 1 -4,0 2,2 0 1 1 4,0 z" style="stroke:none"/>
<!-- locker -->
@@ -251,7 +251,7 @@
</symbol>
<symbol id="BaggageLockers_Inv">
- <title>Bagage Lockers</title>
+ <title>Baggage Lockers</title>
<rect x="0.5" y="0.5" width="71" height="71" ry="6" style="stroke:white"/>
<!-- key -->
<path d="m 34.625,11 a 7.5,7.5 0 1 0 0,7 l 2.375,0 2.5,-2.5 2,2 2,-2 2,2 2,-2 2,2 2.5,-2.5 c 0.5,-0.5 0.5,-1 0,-1.5 L 49.5,11 z M 27,14.5 a 2,2 0 1 1 -4,0 2,2 0 1 1 4,0 z" style="fill:white;stroke:none"/>
@@ -1241,7 +1241,7 @@
</symbol>
<symbol id="WheelChair1996">
- <title>NPS Wheelchair Accessable - 1996</title>
+ <title>NPS Wheelchair Accessible - 1996</title>
<g style="stroke:none">
<circle cx="30" cy="11.75" r="5"/>
<path d="M 51,36.5 C 50.48,35.61 49.5,35 48.5,35 L 36,35 35.8,31 45,31 a 2.25,2.25 0 0 0 0,-4.5 l -9.5,0 -0.2,-4.3 c -0.18,-2.6 -2.2,-4.75 -4.9,-4.6 -2.7,0.15 -5,2.5 -4.8,5.1 L 26.45,38 c 0.2,2.6 2.45,4.5 5.05,4.5 l 16.5,0 6.5,11.5 a 2.916,2.916 0 0 0 5,-3 z"/>
@@ -1250,7 +1250,7 @@
</symbol>
<symbol id="WheelChairInv">
- <title>NPS Wheelchair Accessable - 1996</title>
+ <title>NPS Wheelchair Accessible - 1996</title>
<rect x="0.5" y="0.5" width="71" height="71" ry="6" style="stroke:white"/>
<g style="fill:white;stroke:none">
<circle cx="30" cy="11.75" r="5"/>
@@ -1260,7 +1260,7 @@
</symbol>
<symbol id="WheelChair">
- <title>NPS Wheelchair Accessable</title>
+ <title>NPS Wheelchair Accessible</title>
<g style="stroke:none">
<circle cx="30" cy="11.75" r="5"/>
<path d="m 63.5,55.5 a 2.25,2.25 0 0 0 0,-4.5 l -4,0 L 51,36.5 C 50.48,35.61 49.5,35 48.5,35 L 36,35 35.8,31 45,31 a 2.25,2.25 0 0 0 0,-4.5 l -9.5,0 -0.2,-4.3 c -0.18,-2.6 -2.2,-4.75 -4.9,-4.6 -2.7,0.15 -5,2.5 -4.8,5.1 L 26.45,38 c 0.2,2.6 2.45,4.5 5.05,4.5 l 16.5,0 6.5,11.5 c 0.25,0.5 1.3,1.5 2.5,1.5 z"/>
@@ -1269,7 +1269,7 @@
</symbol>
<symbol id="WheelChair_Inv">
- <title>NPS Wheelchair Accessable</title>
+ <title>NPS Wheelchair Accessible</title>
<rect x="0.5" y="0.5" width="71" height="71" ry="6" style="stroke:white"/>
<g style="fill:white;stroke:none">
<circle cx="30" cy="11.75" r="5"/>
@@ -1279,7 +1279,7 @@
</symbol>
<symbol id="WheelChairNew">
- <title>New Wheelchair Accessable</title>
+ <title>New Wheelchair Accessible</title>
<g style="stroke:none">
<circle cx="37" cy="12.5" r="5"/>
<path d="m 15.9,31.3 5.3,-7.7 c 0.3,-0.4 0.9,-0.8 1.3,-1 L 32,18.5 c 4,-1.8 7,2 6.5,4.7 l -2,9.8 9.5,2 c 1.3,0.3 2.1,0.9 2.8,2 l 7.3,12.3 2.8,-1.9 c 2.2,-1.5 4.5,1.7 2.2,3.3 l -5.6,3.8 c -1,0.7 -2.5,0.4 -3,-0.5 l -7,-12 -15,-3 c -2,-0.4 -3.8,-3 -3.5,-5 l 2,-10 -4.5,2 -5.4,7.6 c -1.5,2.2 -4.8,0 -3.2,-2.4 z"/>
@@ -1288,7 +1288,7 @@
</symbol>
<symbol id="WheelChairNew_Inv">
- <title>New Wheelchair Accessable</title>
+ <title>New Wheelchair Accessible</title>
<rect x="0.5" y="0.5" width="71" height="71" ry="6" style="stroke:white"/>
<g style="fill:white;stroke:none">
<circle cx="37" cy="12.5" r="5"/>
diff --git a/share/symbols/MapSymbols.svg b/share/symbols/MapSymbols.svg
index 0d3e1b0fa..4fccc0492 100644
--- a/share/symbols/MapSymbols.svg
+++ b/share/symbols/MapSymbols.svg
@@ -1911,7 +1911,7 @@
<path inkscape:connector-curvature="0" transform="matrix(14.68584,0,0,14.68584,569.7658,1146.064)" style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:NPSPICT3;-inkscape-font-specification:NPSPICT3" d="m -7.062988,-45.30859 c -0.479361,0 -1.139151,0.14668 -1.97937,0.44006 -0.84028,0.29337 -1.500472,0.44006 -1.980592,0.44006 -0.47936,0 -1.14586,-0.14669 -1.99951,-0.44006 -0.85371,-0.29338 -1.50719,-0.44006 -1.96045,-0.44006 -0.47935,0 -1.14586,0.14668 -1.99951,0.44006 -0.8537,0.29337 -1.5202,0.44006 -1.99951,0.44006 -0.45413,0 -1.10781,-0.14669 -1.96106,-0.44006 -0.85329,-0.29338 -1.51959,-0.44006 -1.99891,-0.44006 -0.48015,0 -1.14035,0.14668 -1.98059,0.44006 -0.84026,0.29337 -1.50046,0.44006 -1.98059,0.44006 -0.47934,0 -1.13913,-0.14669 -1.97937,-0.44006 -0.84026,-0.29338 -1.50045,-0.44006 -1.98059,-0.44006 -0.47933,0 -1.14584,0.14668 -1.99951,0.44006 -0.85368,0.29337 -1.50717,0.44006 -1.96045,0.44006 l 0,2.91993 c 0.45328,-10e-6 1.10677,-0.1467 1.96045,-0.44007 0.85367,-0.29338 1.52018,-0.44007 1.99951,-0.44006 0.48014,-1e-5 1.14033,0.14668 1.98059,0.44006 0.84024,0.29337 1.50003,0.44006 1.97937,0.44007 0.48013,-10e-6 1.14033,-0.1467 1.98059,-0.44007 0.84024,-0.29338 1.50044,-0.44007 1.98059,-0.44006 0.47932,-1e-5 1.14562,0.14668 1.99891,0.44006 0.85325,0.29337 1.50693,0.44006 1.96106,0.44007 0.47931,-10e-6 1.14581,-0.1467 1.99951,-0.44007 0.85365,-0.29338 1.52016,-0.44007 1.99951,-0.44006 0.45326,-1e-5 1.10674,0.14668 1.96045,0.44006 0.85365,0.29337 1.52015,0.44006 1.99951,0.44007 0.48012,-10e-6 1.140312,-0.1467 1.980592,-0.44007 0.840219,-0.29338 1.500009,-0.44007 1.97937,-0.44006 0.48011,-1e-5 1.140307,0.14668 1.980591,0.44006 0.840215,0.29337 1.500005,0.44006 1.97937,0.44007 l 0,-2.91993 c -0.479365,0 -1.139155,-0.14669 -1.97937,-0.44006 -0.840284,-0.29338 -1.500481,-0.44006 -1.980591,-0.44006 L -7.062988,-45.30859 z m -8.759762,-30.52002 -18.07984,22.08008 18.07984,0 L -15.82275,-75.82861 z m 1.67968,5.08056 0,16.99952 10.841068,0 c 0.05286,-0.48014 0.07931,-0.94686 0.07935,-1.40015 -3.6e-5,-3.38622 -1.199986,-6.59951 -3.599854,-9.63989 -2.053253,-2.63996 -4.493444,-4.62645 -7.320564,-5.95948 L -14.14307,-70.74805 z m -15.47973,18.59986 0,4.36035 c 0.42723,0.13265 0.8675,0.27913 1.3208,0.43945 0.45327,0.16032 0.91958,0.24048 1.39892,0.24048 0.48013,0 1.14684,-0.14669 2.00013,-0.44006 0.85325,-0.29338 1.50694,-0.44007 1.96105,-0.44007 0.47932,0 1.14562,0.14669 1.99891,0.44007 0.85325,0.29337 1.50693,0.44006 1.96106,0.44006 0.47931,0 1.14581,-0.14669 1.99951,-0.44006 0.85365,-0.29338 1.52016,-0.44007 1.99951,-0.44007 0.45326,0 1.10674,0.14669 1.96045,0.44007 0.85365,0.29337 1.52015,0.44006 1.99951,0.44006 -3e-5,0 0.13344,-0.0134 0.40039,-0.0403 -3e-5,0 -3e-5,0 0,0 -3e-5,0 0.007,0 0.0201,0 0.0134,0 0.0466,0 0.0995,0 0.0537,-0.0269 0.1139,-0.0403 0.18066,-0.0403 0.0667,0 0.20668,-0.0269 0.419926,-0.0806 0.639619,-0.29297 1.41273,-0.75928 2.319336,-1.39893 L -4.782715,-52.14819 -29.6228,-52.14819 Z" id="path17239" />
</symbol>
<symbol transform="matrix(0.1103728,0,0,0.1103728,454.4565,1345.265)" id="g70357">
-<title id="title17247">Leasure Center</title>
+<title id="title17247">Leisure Center</title>
<g id="g17249">
<path d="M 66.275,1.768 C 24.94,1.768 1.704,23.139 1.704,86.804 l 0,450.123 c 0,20.844 20.896,42.229 62.192,42.229 l 452.024,0 c 41.307,0 62.229,-20.313 62.229,-62.229 l 0,-450.123 C 578.149,24.203 557.227,1.768 514.628,1.768 514.624,1.768 66.133,1.625 66.275,1.768 Z" style="fill:#111111;stroke:#eeeeee;stroke-width:3.408" id="path17251" inkscape:connector-curvature="0" />
</g>
@@ -2098,7 +2098,7 @@
<path inkscape:connector-curvature="0" style="fill:#ffffff;fill-opacity:1" d="m 186.1224,419.2769 c -15.5875,-2.1652 -30.477,-11.4087 -37.973,-25.4518 8.3008,-9.2226 20.1547,0.1201 29.846,1.0014 22.6039,2.8578 43.7286,-12.0049 54.7396,-30.8782 7.138,-6.8412 8.0681,-25.4986 20.4823,-22.7628 8.9533,4.9551 7.2662,16.3566 5.0791,24.6398 -1.4157,11.0444 -6.7831,20.9741 -13.878,29.3942 -5.5893,7.486 -11.1394,16.0521 -20.8063,18.5313 C 211.2499,416.0508 198.9486,421.8935 186.1224,419.2769 z m -55.2276,-120.843 c -11.9155,-7.0335 -26.2781,-11.3583 -34.72464,-23.0337 -1.88388,-13.2833 14.87324,-21.9448 26.01984,-16.757 13.1263,4.1069 25.5393,11.6235 33.8461,22.7568 5.5137,10.0174 -4.0566,25.8353 -15.9644,20.6756 C 136.9139,301.1213 133.9712,299.6034 130.8948,298.4339 z m 75.9973,-24.5921 c -8.3339,-10.9448 -8.412,-29.9962 4.5392,-37.5055 8.506,-5.6193 20.7127,-9.4814 29.7536,-2.8491 4.7457,9.7797 -3.6123,18.7431 -7.3837,27.2043 -2.2786,8.5463 -7.8821,18.1434 -17.6474,18.9946 C 212.222,279.7835 208.731,277.1721 206.8921,273.8418 Z" id="path20423" />
</symbol>
<symbol transform="matrix(0.1103727,0,0,0.1103727,-15.22728,1604.204)" id="g81881">
-<title id="title20431">Park / Picnick Area</title>
+<title id="title20431">Park / Picnic Area</title>
<g id="g20433">
<path inkscape:connector-curvature="0" d="M 66.275,1.768 C 24.94,1.768 1.704,23.139 1.704,66.804 l 0,450.123 c 0,40.844 20.895,62.229 62.192,62.229 l 452.024,0 c 41.307,0 62.229,-20.315 62.229,-62.229 l 0,-450.123 C 578.149,24.203 557.227,1.768 514.628,1.768 514.624,1.768 66.133,1.625 66.275,1.768 Z" style="fill:#111111;stroke:#eeeeee;stroke-width:3.408" id="path20435" />
</g>
@@ -2134,7 +2134,7 @@
<path inkscape:connector-curvature="0" d="m 71.97432,176.8669 0,-32.9636 214.18778,-90.82787 216.4043,88.83257 0,32.9649 L 284.1904,90.53986 71.97432,176.8669 Z M 130.5485,175.3484 287.8228,112.4378 440.7941,177.038 378.835,176.7565 287.3056,144.3501 196.0368,174.7018 130.5485,175.3484 Z" style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" id="path20491" />
</symbol>
<symbol transform="matrix(0.1103727,0,0,0.1103727,60.52537,1606.476)" id="g78634">
-<title id="title20499">Intormation</title>
+<title id="title20499">Information</title>
<g id="g20501">
<path inkscape:connector-curvature="0" d="M 66.275,1.768 C 24.94,1.768 1.704,23.139 1.704,66.804 l 0,450.123 c 0,40.844 20.894,62.229 62.192,62.229 l 452.024,0 c 41.307,0 62.229,-20.316 62.229,-62.229 l 0,-450.123 C 578.149,24.203 557.227,1.768 514.627,1.768 514.624,1.768 66.133,1.625 66.275,1.768 Z" style="fill:#111111;stroke:#eeeeee;stroke-width:3.408" id="path20503" />
</g>
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 54b15d342..d1a3d194e 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -78,7 +78,7 @@ set(sp_SRC
sp-use-reference.cpp
sp-use.cpp
splivarot.cpp
-
+ viewbox.cpp
# -------
# Headers
@@ -163,6 +163,7 @@ set(sp_SRC
sp-tspan.h
sp-use-reference.h
sp-use.h
+ viewbox.h
)
set(inkscape_SRC
diff --git a/src/Makefile_insert b/src/Makefile_insert
index 5e441560a..7aedb38ee 100644
--- a/src/Makefile_insert
+++ b/src/Makefile_insert
@@ -228,7 +228,8 @@ ink_common_sources += \
uri-references.cpp uri-references.h \
vanishing-point.cpp vanishing-point.h \
verbs.cpp verbs.h \
- version.cpp version.h
+ version.cpp version.h \
+ viewbox.cpp viewbox.h
# Additional dependencies
diff --git a/src/display/canvas-arena.cpp b/src/display/canvas-arena.cpp
index 8e25c1843..404a94828 100644
--- a/src/display/canvas-arena.cpp
+++ b/src/display/canvas-arena.cpp
@@ -216,10 +216,10 @@ sp_canvas_arena_render (SPCanvasItem *item, SPCanvasBuf *buf)
Geom::OptIntRect r = buf->rect;
if (!r || r->hasZeroArea()) return;
- Inkscape::DrawingContext ct(buf->ct, r->min());
+ Inkscape::DrawingContext dc(buf->ct, r->min());
arena->drawing.update(Geom::IntRect::infinite(), arena->ctx);
- arena->drawing.render(ct, *r);
+ arena->drawing.render(dc, *r);
}
static double
@@ -386,9 +386,9 @@ sp_canvas_arena_render_surface (SPCanvasArena *ca, cairo_surface_t *surface, Geo
g_return_if_fail (ca != NULL);
g_return_if_fail (SP_IS_CANVAS_ARENA (ca));
- Inkscape::DrawingContext ct(surface, r.min());
+ Inkscape::DrawingContext dc(surface, r.min());
ca->drawing.update(Geom::IntRect::infinite(), ca->ctx);
- ca->drawing.render(ct, r);
+ ca->drawing.render(dc, r);
}
/*
diff --git a/src/display/drawing-context.cpp b/src/display/drawing-context.cpp
index de5beb0f6..319136e06 100644
--- a/src/display/drawing-context.cpp
+++ b/src/display/drawing-context.cpp
@@ -25,27 +25,27 @@ using Geom::Y;
*/
DrawingContext::Save::Save()
- : _ct(NULL)
+ : _dc(NULL)
{}
-DrawingContext::Save::Save(DrawingContext &ct)
- : _ct(&ct)
+DrawingContext::Save::Save(DrawingContext &dc)
+ : _dc(&dc)
{
- _ct->save();
+ _dc->save();
}
DrawingContext::Save::~Save()
{
- if (_ct) {
- _ct->restore();
+ if (_dc) {
+ _dc->restore();
}
}
-void DrawingContext::Save::save(DrawingContext &ct)
+void DrawingContext::Save::save(DrawingContext &dc)
{
- if (_ct) {
+ if (_dc) {
// TODO: it might be better to treat this occurence as a bug
- _ct->restore();
+ _dc->restore();
}
- _ct = &ct;
- _ct->save();
+ _dc = &dc;
+ _dc->save();
}
/**
diff --git a/src/display/drawing-context.h b/src/display/drawing-context.h
index 35be9a86b..d990bcb73 100644
--- a/src/display/drawing-context.h
+++ b/src/display/drawing-context.h
@@ -31,11 +31,11 @@ public:
class Save {
public:
Save();
- Save(DrawingContext &ct);
+ Save(DrawingContext &dc);
~Save();
- void save(DrawingContext &ct);
+ void save(DrawingContext &dc);
private:
- DrawingContext *_ct;
+ DrawingContext *_dc;
};
DrawingContext(cairo_t *ct, Geom::Point const &origin);
diff --git a/src/display/drawing-group.cpp b/src/display/drawing-group.cpp
index b5ce18891..38ace001f 100644
--- a/src/display/drawing-group.cpp
+++ b/src/display/drawing-group.cpp
@@ -98,12 +98,12 @@ DrawingGroup::_updateItem(Geom::IntRect const &area, UpdateContext const &ctx, u
}
unsigned
-DrawingGroup::_renderItem(DrawingContext &ct, Geom::IntRect const &area, unsigned flags, DrawingItem *stop_at)
+DrawingGroup::_renderItem(DrawingContext &dc, Geom::IntRect const &area, unsigned flags, DrawingItem *stop_at)
{
if (stop_at == NULL) {
// normal rendering
for (ChildrenList::iterator i = _children.begin(); i != _children.end(); ++i) {
- i->render(ct, area, flags, stop_at);
+ i->render(dc, area, flags, stop_at);
}
} else {
// background rendering
@@ -111,11 +111,11 @@ DrawingGroup::_renderItem(DrawingContext &ct, Geom::IntRect const &area, unsigne
if (&*i == stop_at) return RENDER_OK; // do not render the stop_at item at all
if (i->isAncestorOf(stop_at)) {
// render its ancestors without masks, opacity or filters
- i->render(ct, area, flags | RENDER_FILTER_BACKGROUND, stop_at);
+ i->render(dc, area, flags | RENDER_FILTER_BACKGROUND, stop_at);
// stop further rendering
return RENDER_OK;
} else {
- i->render(ct, area, flags, stop_at);
+ i->render(dc, area, flags, stop_at);
}
}
}
@@ -123,10 +123,10 @@ DrawingGroup::_renderItem(DrawingContext &ct, Geom::IntRect const &area, unsigne
}
void
-DrawingGroup::_clipItem(DrawingContext &ct, Geom::IntRect const &area)
+DrawingGroup::_clipItem(DrawingContext &dc, Geom::IntRect const &area)
{
for (ChildrenList::iterator i = _children.begin(); i != _children.end(); ++i) {
- i->clip(ct, area);
+ i->clip(dc, area);
}
}
diff --git a/src/display/drawing-group.h b/src/display/drawing-group.h
index 775fec8c4..651e9d8af 100644
--- a/src/display/drawing-group.h
+++ b/src/display/drawing-group.h
@@ -34,9 +34,9 @@ public:
protected:
virtual unsigned _updateItem(Geom::IntRect const &area, UpdateContext const &ctx,
unsigned flags, unsigned reset);
- virtual unsigned _renderItem(DrawingContext &ct, Geom::IntRect const &area, unsigned flags,
+ virtual unsigned _renderItem(DrawingContext &dc, Geom::IntRect const &area, unsigned flags,
DrawingItem *stop_at);
- virtual void _clipItem(DrawingContext &ct, Geom::IntRect const &area);
+ virtual void _clipItem(DrawingContext &dc, Geom::IntRect const &area);
virtual DrawingItem *_pickItem(Geom::Point const &p, double delta, unsigned flags);
virtual bool _canClip();
diff --git a/src/display/drawing-image.cpp b/src/display/drawing-image.cpp
index 1b9214c49..8fd81caac 100644
--- a/src/display/drawing-image.cpp
+++ b/src/display/drawing-image.cpp
@@ -102,22 +102,22 @@ DrawingImage::_updateItem(Geom::IntRect const &, UpdateContext const &, unsigned
return STATE_ALL;
}
-unsigned DrawingImage::_renderItem(DrawingContext &ct, Geom::IntRect const &/*area*/, unsigned /*flags*/, DrawingItem * /*stop_at*/)
+unsigned DrawingImage::_renderItem(DrawingContext &dc, Geom::IntRect const &/*area*/, unsigned /*flags*/, DrawingItem * /*stop_at*/)
{
bool outline = _drawing.outline();
if (!outline) {
if (!_pixbuf) return RENDER_OK;
- Inkscape::DrawingContext::Save save(ct);
- ct.transform(_ctm);
- ct.newPath();
- ct.rectangle(_clipbox);
- ct.clip();
+ Inkscape::DrawingContext::Save save(dc);
+ dc.transform(_ctm);
+ dc.newPath();
+ dc.rectangle(_clipbox);
+ dc.clip();
- ct.translate(_origin);
- ct.scale(_scale);
- ct.setSource(_pixbuf->getSurfaceRaw(), 0, 0);
+ dc.translate(_origin);
+ dc.scale(_scale);
+ dc.setSource(_pixbuf->getSurfaceRaw(), 0, 0);
if (_style) {
// See: http://www.w3.org/TR/SVG/painting.html#ImageRenderingProperty
@@ -128,24 +128,24 @@ unsigned DrawingImage::_renderItem(DrawingContext &ct, Geom::IntRect const &/*ar
// Do nothing
break;
case SP_CSS_COLOR_RENDERING_OPTIMIZEQUALITY:
- ct.patternSetFilter( CAIRO_FILTER_BEST );
+ dc.patternSetFilter( CAIRO_FILTER_BEST );
break;
case SP_CSS_COLOR_RENDERING_OPTIMIZESPEED:
default:
- ct.patternSetFilter( CAIRO_FILTER_NEAREST );
+ dc.patternSetFilter( CAIRO_FILTER_NEAREST );
break;
}
}
- ct.paint(_opacity);
+ dc.paint(_opacity);
} else { // outline; draw a rect instead
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
guint32 rgba = prefs->getInt("/options/wireframecolors/images", 0xff0000ff);
- { Inkscape::DrawingContext::Save save(ct);
- ct.transform(_ctm);
- ct.newPath();
+ { Inkscape::DrawingContext::Save save(dc);
+ dc.transform(_ctm);
+ dc.newPath();
Geom::Rect r = bounds();
Geom::Point c00 = r.corner(0);
@@ -153,21 +153,21 @@ unsigned DrawingImage::_renderItem(DrawingContext &ct, Geom::IntRect const &/*ar
Geom::Point c11 = r.corner(2);
Geom::Point c10 = r.corner(1);
- ct.moveTo(c00);
+ dc.moveTo(c00);
// the box
- ct.lineTo(c10);
- ct.lineTo(c11);
- ct.lineTo(c01);
- ct.lineTo(c00);
+ dc.lineTo(c10);
+ dc.lineTo(c11);
+ dc.lineTo(c01);
+ dc.lineTo(c00);
// the diagonals
- ct.lineTo(c11);
- ct.moveTo(c10);
- ct.lineTo(c01);
+ dc.lineTo(c11);
+ dc.moveTo(c10);
+ dc.lineTo(c01);
}
- ct.setLineWidth(0.5);
- ct.setSource(rgba);
- ct.stroke();
+ dc.setLineWidth(0.5);
+ dc.setSource(rgba);
+ dc.stroke();
}
return RENDER_OK;
}
diff --git a/src/display/drawing-image.h b/src/display/drawing-image.h
index cebaafc85..64e4517b0 100644
--- a/src/display/drawing-image.h
+++ b/src/display/drawing-image.h
@@ -38,7 +38,7 @@ public:
protected:
virtual unsigned _updateItem(Geom::IntRect const &area, UpdateContext const &ctx,
unsigned flags, unsigned reset);
- virtual unsigned _renderItem(DrawingContext &ct, Geom::IntRect const &area, unsigned flags,
+ virtual unsigned _renderItem(DrawingContext &dc, Geom::IntRect const &area, unsigned flags,
DrawingItem *stop_at);
virtual DrawingItem *_pickItem(Geom::Point const &p, double delta, unsigned flags);
diff --git a/src/display/drawing-item.cpp b/src/display/drawing-item.cpp
index a9b07bb6e..13e7b61eb 100644
--- a/src/display/drawing-item.cpp
+++ b/src/display/drawing-item.cpp
@@ -24,60 +24,60 @@
namespace Inkscape {
#ifdef WITH_CSSBLEND
-void set_cairo_blend_operator( DrawingContext &ct, unsigned blend_mode ) {
+void set_cairo_blend_operator( DrawingContext &dc, unsigned blend_mode ) {
// All of the blend modes are implemented in Cairo as of 1.10.
// For a detailed description, see:
// http://cairographics.org/operators/
switch (blend_mode) {
case SP_CSS_BLEND_MULTIPLY:
- ct.setOperator(CAIRO_OPERATOR_MULTIPLY);
+ dc.setOperator(CAIRO_OPERATOR_MULTIPLY);
break;
case SP_CSS_BLEND_SCREEN:
- ct.setOperator(CAIRO_OPERATOR_SCREEN);
+ dc.setOperator(CAIRO_OPERATOR_SCREEN);
break;
case SP_CSS_BLEND_DARKEN:
- ct.setOperator(CAIRO_OPERATOR_DARKEN);
+ dc.setOperator(CAIRO_OPERATOR_DARKEN);
break;
case SP_CSS_BLEND_LIGHTEN:
- ct.setOperator(CAIRO_OPERATOR_LIGHTEN);
+ dc.setOperator(CAIRO_OPERATOR_LIGHTEN);
break;
case SP_CSS_BLEND_OVERLAY:
- ct.setOperator(CAIRO_OPERATOR_OVERLAY);
+ dc.setOperator(CAIRO_OPERATOR_OVERLAY);
break;
case SP_CSS_BLEND_COLORDODGE:
- ct.setOperator(CAIRO_OPERATOR_COLOR_DODGE);
+ dc.setOperator(CAIRO_OPERATOR_COLOR_DODGE);
break;
case SP_CSS_BLEND_COLORBURN:
- ct.setOperator(CAIRO_OPERATOR_COLOR_BURN);
+ dc.setOperator(CAIRO_OPERATOR_COLOR_BURN);
break;
case SP_CSS_BLEND_HARDLIGHT:
- ct.setOperator(CAIRO_OPERATOR_HARD_LIGHT);
+ dc.setOperator(CAIRO_OPERATOR_HARD_LIGHT);
break;
case SP_CSS_BLEND_SOFTLIGHT:
- ct.setOperator(CAIRO_OPERATOR_SOFT_LIGHT);
+ dc.setOperator(CAIRO_OPERATOR_SOFT_LIGHT);
break;
case SP_CSS_BLEND_DIFFERENCE:
- ct.setOperator(CAIRO_OPERATOR_DIFFERENCE);
+ dc.setOperator(CAIRO_OPERATOR_DIFFERENCE);
break;
case SP_CSS_BLEND_EXCLUSION:
- ct.setOperator(CAIRO_OPERATOR_EXCLUSION);
+ dc.setOperator(CAIRO_OPERATOR_EXCLUSION);
break;
case SP_CSS_BLEND_HUE:
- ct.setOperator(CAIRO_OPERATOR_HSL_HUE);
+ dc.setOperator(CAIRO_OPERATOR_HSL_HUE);
break;
case SP_CSS_BLEND_SATURATION:
- ct.setOperator(CAIRO_OPERATOR_HSL_SATURATION);
+ dc.setOperator(CAIRO_OPERATOR_HSL_SATURATION);
break;
case SP_CSS_BLEND_COLOR:
- ct.setOperator(CAIRO_OPERATOR_HSL_COLOR);
+ dc.setOperator(CAIRO_OPERATOR_HSL_COLOR);
break;
case SP_CSS_BLEND_LUMINOSITY:
- ct.setOperator(CAIRO_OPERATOR_HSL_LUMINOSITY);
+ dc.setOperator(CAIRO_OPERATOR_HSL_LUMINOSITY);
break;
case SP_CSS_BLEND_NORMAL:
default:
- ct.setOperator(CAIRO_OPERATOR_OVER);
+ dc.setOperator(CAIRO_OPERATOR_OVER);
break;
}
}
@@ -545,7 +545,7 @@ struct MaskLuminanceToAlpha {
* @param flags Rendering options. This deals mainly with cache control.
*/
unsigned
-DrawingItem::render(DrawingContext &ct, Geom::IntRect const &area, unsigned flags, DrawingItem *stop_at)
+DrawingItem::render(DrawingContext &dc, Geom::IntRect const &area, unsigned flags, DrawingItem *stop_at)
{
bool outline = _drawing.outline();
bool render_filters = _drawing.renderFilters();
@@ -560,7 +560,7 @@ DrawingItem::render(DrawingContext &ct, Geom::IntRect const &area, unsigned flag
// TODO convert outline rendering to a separate virtual function
if (outline) {
- _renderOutline(ct, area, flags);
+ _renderOutline(dc, area, flags);
return RENDER_OK;
}
@@ -573,9 +573,9 @@ DrawingItem::render(DrawingContext &ct, Geom::IntRect const &area, unsigned flag
if (_cache) {
_cache->prepare();
#ifdef WITH_CSSBLEND
- set_cairo_blend_operator( ct, _blend_mode );
+ set_cairo_blend_operator( dc, _blend_mode );
#endif
- _cache->paintFromCache(ct, carea);
+ _cache->paintFromCache(dc, carea);
if (!carea) return RENDER_OK;
} else {
// There is no cache. This could be because caching of this item
@@ -625,7 +625,7 @@ DrawingItem::render(DrawingContext &ct, Geom::IntRect const &area, unsigned flag
// filters and opacity do not apply when rendering the ancestors of the filtered
// element
if ((flags & RENDER_FILTER_BACKGROUND) || !needs_intermediate_rendering) {
- return _renderItem(ct, *carea, flags & ~RENDER_FILTER_BACKGROUND, stop_at);
+ return _renderItem(dc, *carea, flags & ~RENDER_FILTER_BACKGROUND, stop_at);
}
// iarea is the bounding box for intermediate rendering
@@ -688,9 +688,9 @@ DrawingItem::render(DrawingContext &ct, Geom::IntRect const &area, unsigned flag
}
if (bg_root) {
DrawingSurface bg(*iarea);
- DrawingContext bgct(bg);
- bg_root->render(bgct, *iarea, flags | RENDER_FILTER_BACKGROUND, this);
- _filter->render(this, ict, &bgct);
+ DrawingContext bgdc(bg);
+ bg_root->render(bgdc, *iarea, flags | RENDER_FILTER_BACKGROUND, this);
+ _filter->render(this, ict, &bgdc);
rendered = true;
}
}
@@ -716,20 +716,20 @@ DrawingItem::render(DrawingContext &ct, Geom::IntRect const &area, unsigned flag
cachect.fill();
_cache->markClean(*carea);
}
- ct.rectangle(*carea);
- ct.setSource(&intermediate);
+ dc.rectangle(*carea);
+ dc.setSource(&intermediate);
#ifdef WITH_CSSBLEND
- set_cairo_blend_operator( ct, _blend_mode );
+ set_cairo_blend_operator( dc, _blend_mode );
#endif
- ct.fill();
- ct.setSource(0,0,0,0);
- // the call above is to clear a ref on the intermediate surface held by ct
+ dc.fill();
+ dc.setSource(0,0,0,0);
+ // the call above is to clear a ref on the intermediate surface held by dc
return render_result;
}
void
-DrawingItem::_renderOutline(DrawingContext &ct, Geom::IntRect const &area, unsigned flags)
+DrawingItem::_renderOutline(DrawingContext &dc, Geom::IntRect const &area, unsigned flags)
{
// intersect with bbox rather than drawbox, as we want to render things outside
// of the clipping path as well
@@ -738,7 +738,7 @@ DrawingItem::_renderOutline(DrawingContext &ct, Geom::IntRect const &area, unsig
// just render everything: item, clip, mask
// First, render the object itself
- _renderItem(ct, *carea, flags, NULL);
+ _renderItem(dc, *carea, flags, NULL);
// render clip and mask, if any
guint32 saved_rgba = _drawing.outlinecolor; // save current outline color
@@ -746,12 +746,12 @@ DrawingItem::_renderOutline(DrawingContext &ct, Geom::IntRect const &area, unsig
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
if (_clip) {
_drawing.outlinecolor = prefs->getInt("/options/wireframecolors/clips", 0x00ff00ff); // green clips
- _clip->render(ct, *carea, flags);
+ _clip->render(dc, *carea, flags);
}
// render mask as an object, using a different color
if (_mask) {
_drawing.outlinecolor = prefs->getInt("/options/wireframecolors/masks", 0x0000ffff); // blue masks
- _mask->render(ct, *carea, flags);
+ _mask->render(dc, *carea, flags);
}
_drawing.outlinecolor = saved_rgba; // restore outline color
}
@@ -765,31 +765,31 @@ DrawingItem::_renderOutline(DrawingContext &ct, Geom::IntRect const &area, unsig
* of render() for details.
*/
void
-DrawingItem::clip(Inkscape::DrawingContext &ct, Geom::IntRect const &area)
+DrawingItem::clip(Inkscape::DrawingContext &dc, Geom::IntRect const &area)
{
// don't bother if the object does not implement clipping (e.g. DrawingImage)
if (!_canClip()) return;
if (!_visible) return;
if (!area.intersects(_bbox)) return;
- ct.setSource(0,0,0,1);
- ct.pushGroup();
+ dc.setSource(0,0,0,1);
+ dc.pushGroup();
// rasterize the clipping path
- _clipItem(ct, area);
+ _clipItem(dc, area);
if (_clip) {
// The item used as the clipping path itself has a clipping path.
// Render this item's clipping path onto a temporary surface, then composite it
// with the item using the IN operator
- ct.pushGroup();
- _clip->clip(ct, area);
- ct.popGroupToSource();
- ct.setOperator(CAIRO_OPERATOR_IN);
- ct.paint();
+ dc.pushGroup();
+ _clip->clip(dc, area);
+ dc.popGroupToSource();
+ dc.setOperator(CAIRO_OPERATOR_IN);
+ dc.paint();
}
- ct.popGroupToSource();
- ct.setOperator(CAIRO_OPERATOR_OVER);
- ct.paint();
- ct.setSource(0,0,0,0);
+ dc.popGroupToSource();
+ dc.setOperator(CAIRO_OPERATOR_OVER);
+ dc.paint();
+ dc.setSource(0,0,0,0);
}
/**
diff --git a/src/display/drawing-item.h b/src/display/drawing-item.h
index 1796d29d6..913706021 100644
--- a/src/display/drawing-item.h
+++ b/src/display/drawing-item.h
@@ -123,8 +123,8 @@ public:
void *data() const { return _user_data; }
void update(Geom::IntRect const &area = Geom::IntRect::infinite(), UpdateContext const &ctx = UpdateContext(), unsigned flags = STATE_ALL, unsigned reset = 0);
- unsigned render(DrawingContext &ct, Geom::IntRect const &area, unsigned flags = 0, DrawingItem *stop_at = NULL);
- void clip(DrawingContext &ct, Geom::IntRect const &area);
+ unsigned render(DrawingContext &dc, Geom::IntRect const &area, unsigned flags = 0, DrawingItem *stop_at = NULL);
+ void clip(DrawingContext &dc, Geom::IntRect const &area);
DrawingItem *pick(Geom::Point const &p, double delta, unsigned flags = 0);
protected:
@@ -141,7 +141,7 @@ protected:
RENDER_OK = 0,
RENDER_STOP = 1
};
- void _renderOutline(DrawingContext &ct, Geom::IntRect const &area, unsigned flags);
+ void _renderOutline(DrawingContext &dc, Geom::IntRect const &area, unsigned flags);
void _markForUpdate(unsigned state, bool propagate);
void _markForRendering();
void _invalidateFilterBackground(Geom::IntRect const &area);
@@ -150,9 +150,9 @@ protected:
Geom::OptIntRect _cacheRect();
virtual unsigned _updateItem(Geom::IntRect const &/*area*/, UpdateContext const &/*ctx*/,
unsigned /*flags*/, unsigned /*reset*/) { return 0; }
- virtual unsigned _renderItem(DrawingContext &/*ct*/, Geom::IntRect const &/*area*/, unsigned /*flags*/,
+ virtual unsigned _renderItem(DrawingContext &/*dc*/, Geom::IntRect const &/*area*/, unsigned /*flags*/,
DrawingItem * /*stop_at*/) { return RENDER_OK; }
- virtual void _clipItem(DrawingContext &/*ct*/, Geom::IntRect const &/*area*/) {}
+ virtual void _clipItem(DrawingContext &/*dc*/, Geom::IntRect const &/*area*/) {}
virtual DrawingItem *_pickItem(Geom::Point const &/*p*/, double /*delta*/, unsigned /*flags*/) { return NULL; }
virtual bool _canClip() { return false; }
diff --git a/src/display/drawing-shape.cpp b/src/display/drawing-shape.cpp
index 03d7f51b5..f99f9442f 100644
--- a/src/display/drawing-shape.cpp
+++ b/src/display/drawing-shape.cpp
@@ -150,7 +150,7 @@ DrawingShape::_updateItem(Geom::IntRect const &area, UpdateContext const &ctx, u
}
unsigned
-DrawingShape::_renderItem(DrawingContext &ct, Geom::IntRect const &area, unsigned flags, DrawingItem *stop_at)
+DrawingShape::_renderItem(DrawingContext &dc, Geom::IntRect const &area, unsigned flags, DrawingItem *stop_at)
{
if (!_curve || !_style) return RENDER_OK;
if (!area.intersects(_bbox)) return RENDER_OK; // skip if not within bounding box
@@ -160,67 +160,67 @@ DrawingShape::_renderItem(DrawingContext &ct, Geom::IntRect const &area, unsigne
if (outline) {
guint32 rgba = _drawing.outlinecolor;
- { Inkscape::DrawingContext::Save save(ct);
- ct.transform(_ctm);
- ct.path(_curve->get_pathvector());
+ { Inkscape::DrawingContext::Save save(dc);
+ dc.transform(_ctm);
+ dc.path(_curve->get_pathvector());
}
- { Inkscape::DrawingContext::Save save(ct);
- ct.setSource(rgba);
- ct.setLineWidth(0.5);
- ct.setTolerance(0.5);
- ct.stroke();
+ { Inkscape::DrawingContext::Save save(dc);
+ dc.setSource(rgba);
+ dc.setLineWidth(0.5);
+ dc.setTolerance(0.5);
+ dc.stroke();
}
} else {
bool has_stroke, has_fill;
// we assume the context has no path
- Inkscape::DrawingContext::Save save(ct);
- ct.transform(_ctm);
+ Inkscape::DrawingContext::Save save(dc);
+ dc.transform(_ctm);
// update fill and stroke paints.
// this cannot be done during nr_arena_shape_update, because we need a Cairo context
// to render svg:pattern
- has_fill = _nrstyle.prepareFill(ct, _item_bbox);
- has_stroke = _nrstyle.prepareStroke(ct, _item_bbox);
+ has_fill = _nrstyle.prepareFill(dc, _item_bbox);
+ has_stroke = _nrstyle.prepareStroke(dc, _item_bbox);
has_stroke &= (_nrstyle.stroke_width != 0);
if (has_fill || has_stroke) {
// TODO: remove segments outside of bbox when no dashes present
- ct.path(_curve->get_pathvector());
+ dc.path(_curve->get_pathvector());
if (has_fill) {
- _nrstyle.applyFill(ct);
- ct.fillPreserve();
+ _nrstyle.applyFill(dc);
+ dc.fillPreserve();
}
if (has_stroke) {
- _nrstyle.applyStroke(ct);
- ct.strokePreserve();
+ _nrstyle.applyStroke(dc);
+ dc.strokePreserve();
}
- ct.newPath(); // clear path
+ dc.newPath(); // clear path
} // has fill or stroke pattern
}
// marker rendering
for (ChildrenList::iterator i = _children.begin(); i != _children.end(); ++i) {
- i->render(ct, area, flags, stop_at);
+ i->render(dc, area, flags, stop_at);
}
return RENDER_OK;
}
-void DrawingShape::_clipItem(DrawingContext &ct, Geom::IntRect const & /*area*/)
+void DrawingShape::_clipItem(DrawingContext &dc, Geom::IntRect const & /*area*/)
{
if (!_curve) return;
- Inkscape::DrawingContext::Save save(ct);
+ Inkscape::DrawingContext::Save save(dc);
// handle clip-rule
if (_style) {
if (_style->clip_rule.computed == SP_WIND_RULE_EVENODD) {
- ct.setFillRule(CAIRO_FILL_RULE_EVEN_ODD);
+ dc.setFillRule(CAIRO_FILL_RULE_EVEN_ODD);
} else {
- ct.setFillRule(CAIRO_FILL_RULE_WINDING);
+ dc.setFillRule(CAIRO_FILL_RULE_WINDING);
}
}
- ct.transform(_ctm);
- ct.path(_curve->get_pathvector());
- ct.fill();
+ dc.transform(_ctm);
+ dc.path(_curve->get_pathvector());
+ dc.fill();
}
DrawingItem *
diff --git a/src/display/drawing-shape.h b/src/display/drawing-shape.h
index 52496d86e..47b9e807e 100644
--- a/src/display/drawing-shape.h
+++ b/src/display/drawing-shape.h
@@ -33,9 +33,9 @@ public:
protected:
virtual unsigned _updateItem(Geom::IntRect const &area, UpdateContext const &ctx,
unsigned flags, unsigned reset);
- virtual unsigned _renderItem(DrawingContext &ct, Geom::IntRect const &area, unsigned flags,
+ virtual unsigned _renderItem(DrawingContext &dc, Geom::IntRect const &area, unsigned flags,
DrawingItem *stop_at);
- virtual void _clipItem(DrawingContext &ct, Geom::IntRect const &area);
+ virtual void _clipItem(DrawingContext &dc, Geom::IntRect const &area);
virtual DrawingItem *_pickItem(Geom::Point const &p, double delta, unsigned flags);
virtual bool _canClip();
diff --git a/src/display/drawing-surface.cpp b/src/display/drawing-surface.cpp
index bddccbd96..94e0e1ab5 100644
--- a/src/display/drawing-surface.cpp
+++ b/src/display/drawing-surface.cpp
@@ -267,7 +267,7 @@ DrawingCache::prepare()
* parameter to the bounds of the region that must be repainted.
*/
void
-DrawingCache::paintFromCache(DrawingContext &ct, Geom::OptIntRect &area)
+DrawingCache::paintFromCache(DrawingContext &dc, Geom::OptIntRect &area)
{
if (!area) return;
@@ -296,10 +296,10 @@ DrawingCache::paintFromCache(DrawingContext &ct, Geom::OptIntRect &area)
cairo_rectangle_int_t tmp;
for (int i = 0; i < nr; ++i) {
cairo_region_get_rectangle(cache_region, i, &tmp);
- ct.rectangle(_convertRect(tmp));
+ dc.rectangle(_convertRect(tmp));
}
- ct.setSource(this);
- ct.fill();
+ dc.setSource(this);
+ dc.fill();
}
cairo_region_destroy(cache_region);
}
@@ -310,21 +310,21 @@ DrawingCache::_dumpCache(Geom::OptIntRect const &area)
{
static int dumpnr = 0;
cairo_surface_t *surface = ink_cairo_surface_copy(_surface);
- DrawingContext ct(surface, _origin);
+ DrawingContext dc(surface, _origin);
if (!cairo_region_is_empty(_clean_region)) {
- Inkscape::DrawingContext::Save save(ct);
+ Inkscape::DrawingContext::Save save(dc);
int nr = cairo_region_num_rectangles(_clean_region);
cairo_rectangle_int_t tmp;
for (int i = 0; i < nr; ++i) {
cairo_region_get_rectangle(_clean_region, i, &tmp);
- ct.rectangle(_convertRect(tmp));
+ dc.rectangle(_convertRect(tmp));
}
- ct.setSource(0,1,0,0.1);
- ct.fill();
+ dc.setSource(0,1,0,0.1);
+ dc.fill();
}
- ct.rectangle(*area);
- ct.setSource(1,0,0,0.1);
- ct.fill();
+ dc.rectangle(*area);
+ dc.setSource(1,0,0,0.1);
+ dc.fill();
char *fn = g_strdup_printf("dump%d.png", dumpnr++);
cairo_surface_write_to_png(surface, fn);
cairo_surface_destroy(surface);
diff --git a/src/display/drawing-surface.h b/src/display/drawing-surface.h
index 1ec848405..e937cca55 100644
--- a/src/display/drawing-surface.h
+++ b/src/display/drawing-surface.h
@@ -65,7 +65,7 @@ public:
void markClean(Geom::IntRect const &area = Geom::IntRect::infinite());
void scheduleTransform(Geom::IntRect const &new_area, Geom::Affine const &trans);
void prepare();
- void paintFromCache(DrawingContext &ct, Geom::OptIntRect &area);
+ void paintFromCache(DrawingContext &dc, Geom::OptIntRect &area);
protected:
cairo_region_t *_clean_region;
diff --git a/src/display/drawing-text.cpp b/src/display/drawing-text.cpp
index f652a2970..f5a0f0af5 100644
--- a/src/display/drawing-text.cpp
+++ b/src/display/drawing-text.cpp
@@ -195,7 +195,7 @@ DrawingText::_updateItem(Geom::IntRect const &area, UpdateContext const &ctx, un
return DrawingGroup::_updateItem(area, ctx, flags, reset);
}
-void DrawingText::decorateStyle(DrawingContext &ct, double vextent, double xphase, Geom::Point const &p1, Geom::Point const &p2)
+void DrawingText::decorateStyle(DrawingContext &dc, double vextent, double xphase, Geom::Point const &p1, Geom::Point const &p2)
{
double wave[16]={
0.000000, 0.382499, 0.706825, 0.923651, 1.000000, 0.923651, 0.706825, 0.382499,
@@ -235,12 +235,12 @@ pf = Geom::Point(step * round(p2[Geom::X]/step),p2[Geom::Y]);
if(_nrstyle.text_decoration_style & TEXT_DECORATION_STYLE_ISDOUBLE){
ps -= Geom::Point(0, vextent/12.0);
pf -= Geom::Point(0, vextent/12.0);
- ct.moveTo(ps);
- ct.lineTo(pf);
+ dc.moveTo(ps);
+ dc.lineTo(pf);
ps += Geom::Point(0, vextent/6.0);
pf += Geom::Point(0, vextent/6.0);
- ct.moveTo(ps);
- ct.lineTo(pf);
+ dc.moveTo(ps);
+ dc.lineTo(pf);
}
/* The next three have a problem in that they are phase dependent. The bits of a line are not
necessarily passing through this routine in order, so we have to use the xphase information
@@ -251,14 +251,14 @@ pf = Geom::Point(step * round(p2[Geom::X]/step),p2[Geom::Y]);
while(1){
if(dots[i]>0){
if(ps[Geom::X]> pf[Geom::X])break;
- ct.moveTo(ps);
+ dc.moveTo(ps);
ps += Geom::Point(step * (double)dots[i], 0.0);
if(ps[Geom::X]>= pf[Geom::X]){
- ct.lineTo(pf);
+ dc.lineTo(pf);
break;
}
else {
- ct.lineTo(ps);
+ dc.lineTo(ps);
}
ps += Geom::Point(step * 4.0, 0.0);
}
@@ -272,14 +272,14 @@ pf = Geom::Point(step * round(p2[Geom::X]/step),p2[Geom::Y]);
while(1){
if(dashes[i]>0){
if(ps[Geom::X]> pf[Geom::X])break;
- ct.moveTo(ps);
+ dc.moveTo(ps);
ps += Geom::Point(step * (double)dashes[i], 0.0);
if(ps[Geom::X]>= pf[Geom::X]){
- ct.lineTo(pf);
+ dc.lineTo(pf);
break;
}
else {
- ct.lineTo(ps);
+ dc.lineTo(ps);
}
ps += Geom::Point(step * 8.0, 0.0);
}
@@ -293,23 +293,23 @@ pf = Geom::Point(step * round(p2[Geom::X]/step),p2[Geom::Y]);
double amp = vextent/10.0;
double x = ps[Geom::X];
double y = ps[Geom::Y];
- ct.moveTo(Geom::Point(x, y + amp * wave[i]));
+ dc.moveTo(Geom::Point(x, y + amp * wave[i]));
while(1){
i = ((i + 1) & 15);
x += step;
- ct.lineTo(Geom::Point(x, y + amp * wave[i]));
+ dc.lineTo(Geom::Point(x, y + amp * wave[i]));
if(x >= pf[Geom::X])break;
}
}
else { // TEXT_DECORATION_STYLE_SOLID, also default in case it was not set for some reason
- ct.moveTo(ps);
- ct.lineTo(pf);
-// ct.revrectangle(Geom::Rect(ps,pf));
+ dc.moveTo(ps);
+ dc.lineTo(pf);
+// dc.revrectangle(Geom::Rect(ps,pf));
}
}
/* returns scaled line thickness */
-double DrawingText::decorateItem(DrawingContext &ct, Geom::Affine const &aff, double phase_length)
+double DrawingText::decorateItem(DrawingContext &dc, Geom::Affine const &aff, double phase_length)
{
double tsp_width_adj = _nrstyle.tspan_width / _nrstyle.font_size;
double tsp_asc_adj = _nrstyle.ascender / _nrstyle.font_size;
@@ -321,8 +321,8 @@ double DrawingText::decorateItem(DrawingContext &ct, Geom::Affine const &aff, do
double scale = aff.descrim();
double xphase = phase_length/ _nrstyle.font_size; // used to figure out phase of patterns
- Inkscape::DrawingContext::Save save(ct);
- ct.transform(aff); // must be leftmost affine in span
+ Inkscape::DrawingContext::Save save(dc);
+ dc.transform(aff); // must be leftmost affine in span
Geom::Point p1;
Geom::Point p2;
@@ -331,52 +331,52 @@ double DrawingText::decorateItem(DrawingContext &ct, Geom::Affine const &aff, do
if(_nrstyle.text_decoration_line & TEXT_DECORATION_LINE_UNDERLINE){
p1 = Geom::Point(0.0, -_nrstyle.underline_position);
p2 = Geom::Point(tsp_width_adj,-_nrstyle.underline_position);
- decorateStyle(ct, tsp_size_adj, xphase, p1, p2);
+ decorateStyle(dc, tsp_size_adj, xphase, p1, p2);
}
if(_nrstyle.text_decoration_line & TEXT_DECORATION_LINE_OVERLINE){
p1 = Geom::Point(0.0, tsp_asc_adj -_nrstyle.underline_position + 1 * final_underline_thickness);
p2 = Geom::Point(tsp_width_adj,tsp_asc_adj -_nrstyle.underline_position + 1 * final_underline_thickness);
- decorateStyle(ct, tsp_size_adj, xphase, p1, p2);
+ decorateStyle(dc, tsp_size_adj, xphase, p1, p2);
}
if(_nrstyle.text_decoration_line & TEXT_DECORATION_LINE_LINETHROUGH){
thickness = final_line_through_thickness;
p1 = Geom::Point(0.0, _nrstyle.line_through_position);
p2 = Geom::Point(tsp_width_adj,_nrstyle.line_through_position);
- decorateStyle(ct, tsp_size_adj, xphase, p1, p2);
+ decorateStyle(dc, tsp_size_adj, xphase, p1, p2);
}
// Obviously this does not blink, but it does indicate which text has been set with that attribute
if(_nrstyle.text_decoration_line & TEXT_DECORATION_LINE_BLINK){
thickness = final_line_through_thickness;
p1 = Geom::Point(0.0, _nrstyle.line_through_position - 2*final_line_through_thickness);
p2 = Geom::Point(tsp_width_adj,_nrstyle.line_through_position - 2*final_line_through_thickness);
- decorateStyle(ct, tsp_size_adj, xphase, p1, p2);
+ decorateStyle(dc, tsp_size_adj, xphase, p1, p2);
p1 = Geom::Point(0.0, _nrstyle.line_through_position + 2*final_line_through_thickness);
p2 = Geom::Point(tsp_width_adj,_nrstyle.line_through_position + 2*final_line_through_thickness);
- decorateStyle(ct, tsp_size_adj, xphase, p1, p2);
+ decorateStyle(dc, tsp_size_adj, xphase, p1, p2);
}
thickness *= scale;
return(thickness);
}
-unsigned DrawingText::_renderItem(DrawingContext &ct, Geom::IntRect const &/*area*/, unsigned /*flags*/, DrawingItem * /*stop_at*/)
+unsigned DrawingText::_renderItem(DrawingContext &dc, Geom::IntRect const &/*area*/, unsigned /*flags*/, DrawingItem * /*stop_at*/)
{
if (_drawing.outline()) {
guint32 rgba = _drawing.outlinecolor;
- Inkscape::DrawingContext::Save save(ct);
- ct.setSource(rgba);
- ct.setTolerance(0.5); // low quality, but good enough for outline mode
+ Inkscape::DrawingContext::Save save(dc);
+ dc.setSource(rgba);
+ dc.setTolerance(0.5); // low quality, but good enough for outline mode
for (ChildrenList::iterator i = _children.begin(); i != _children.end(); ++i) {
DrawingGlyphs *g = dynamic_cast<DrawingGlyphs *>(&*i);
if (!g) throw InvalidItemException();
- Inkscape::DrawingContext::Save save(ct);
+ Inkscape::DrawingContext::Save save(dc);
// skip glyphs with singular transforms
if (g->_ctm.isSingular()) continue;
- ct.transform(g->_ctm);
+ dc.transform(g->_ctm);
if(g->_drawable){
- ct.path(*g->_font->PathVector(g->_glyph));
- ct.fill();
+ dc.path(*g->_font->PathVector(g->_glyph));
+ dc.fill();
}
}
return RENDER_OK;
@@ -398,11 +398,11 @@ unsigned DrawingText::_renderItem(DrawingContext &ct, Geom::IntRect const &/*are
// Therefore, only apply this ctm temporarily.
bool has_stroke, has_fill;
{
- Inkscape::DrawingContext::Save save(ct);
- ct.transform(_ctm);
+ Inkscape::DrawingContext::Save save(dc);
+ dc.transform(_ctm);
- has_fill = _nrstyle.prepareFill( ct, _item_bbox);
- has_stroke = _nrstyle.prepareStroke(ct, _item_bbox);
+ has_fill = _nrstyle.prepareFill( dc, _item_bbox);
+ has_stroke = _nrstyle.prepareStroke(dc, _item_bbox);
}
if (has_fill || has_stroke) {
@@ -418,11 +418,11 @@ unsigned DrawingText::_renderItem(DrawingContext &ct, Geom::IntRect const &/*are
invset = true;
}
- Inkscape::DrawingContext::Save save(ct);
+ Inkscape::DrawingContext::Save save(dc);
if (g->_ctm.isSingular()) continue;
- ct.transform(g->_ctm);
+ dc.transform(g->_ctm);
if (g->_drawable) {
- ct.path(*g->_font->PathVector(g->_glyph));
+ dc.path(*g->_font->PathVector(g->_glyph));
}
// get the leftmost affine transform (leftmost defined with respect to the x axis of the first transform).
// That way the decoration will work no matter what mix of L->R, R->L text is in the span.
@@ -448,17 +448,17 @@ unsigned DrawingText::_renderItem(DrawingContext &ct, Geom::IntRect const &/*are
// draw the text itself
// we need to apply this object's ctm again
- Inkscape::DrawingContext::Save save(ct);
- ct.transform(_ctm);
+ Inkscape::DrawingContext::Save save(dc);
+ dc.transform(_ctm);
if (has_fill) {
- _nrstyle.applyFill(ct);
- ct.fillPreserve();
+ _nrstyle.applyFill(dc);
+ dc.fillPreserve();
}
if (has_stroke) {
- _nrstyle.applyStroke(ct);
- ct.strokePreserve();
+ _nrstyle.applyStroke(dc);
+ dc.strokePreserve();
}
- ct.newPath(); // clear path
+ dc.newPath(); // clear path
// draw text decoration
if (_nrstyle.text_decoration_line != TEXT_DECORATION_LINE_CLEAR && decorate) {
@@ -477,27 +477,27 @@ unsigned DrawingText::_renderItem(DrawingContext &ct, Geom::IntRect const &/*are
_nrstyle.fill.color.v.c[2],
1.0);
}
- ct.setSource(ergba);
- ct.setTolerance(0.5);
- double thickness = decorateItem(ct, aff, phase_length);
- ct.setLineWidth(thickness);
- ct.strokePreserve();
- ct.newPath(); // clear path
+ dc.setSource(ergba);
+ dc.setTolerance(0.5);
+ double thickness = decorateItem(dc, aff, phase_length);
+ dc.setLineWidth(thickness);
+ dc.strokePreserve();
+ dc.newPath(); // clear path
}
}
return RENDER_OK;
}
-void DrawingText::_clipItem(DrawingContext &ct, Geom::IntRect const &/*area*/)
+void DrawingText::_clipItem(DrawingContext &dc, Geom::IntRect const &/*area*/)
{
- Inkscape::DrawingContext::Save save(ct);
+ Inkscape::DrawingContext::Save save(dc);
// handle clip-rule
if (_style) {
if (_style->clip_rule.computed == SP_WIND_RULE_EVENODD) {
- ct.setFillRule(CAIRO_FILL_RULE_EVEN_ODD);
+ dc.setFillRule(CAIRO_FILL_RULE_EVEN_ODD);
} else {
- ct.setFillRule(CAIRO_FILL_RULE_WINDING);
+ dc.setFillRule(CAIRO_FILL_RULE_WINDING);
}
}
@@ -507,13 +507,13 @@ void DrawingText::_clipItem(DrawingContext &ct, Geom::IntRect const &/*area*/)
throw InvalidItemException();
}
- Inkscape::DrawingContext::Save save(ct);
- ct.transform(g->_ctm);
+ Inkscape::DrawingContext::Save save(dc);
+ dc.transform(g->_ctm);
if(g->_drawable){
- ct.path(*g->_font->PathVector(g->_glyph));
+ dc.path(*g->_font->PathVector(g->_glyph));
}
}
- ct.fill();
+ dc.fill();
}
DrawingItem *
diff --git a/src/display/drawing-text.h b/src/display/drawing-text.h
index fd122b54b..b863ca2a4 100644
--- a/src/display/drawing-text.h
+++ b/src/display/drawing-text.h
@@ -62,14 +62,14 @@ public:
protected:
virtual unsigned _updateItem(Geom::IntRect const &area, UpdateContext const &ctx,
unsigned flags, unsigned reset);
- virtual unsigned _renderItem(DrawingContext &ct, Geom::IntRect const &area, unsigned flags,
+ virtual unsigned _renderItem(DrawingContext &dc, Geom::IntRect const &area, unsigned flags,
DrawingItem *stop_at);
- virtual void _clipItem(DrawingContext &ct, Geom::IntRect const &area);
+ virtual void _clipItem(DrawingContext &dc, Geom::IntRect const &area);
virtual DrawingItem *_pickItem(Geom::Point const &p, double delta, unsigned flags);
virtual bool _canClip();
- double decorateItem(DrawingContext &ct, Geom::Affine const &aff, double phase_length);
- void decorateStyle(DrawingContext &ct, double vextent, double xphase, Geom::Point const &p1, Geom::Point const &p2);
+ double decorateItem(DrawingContext &dc, Geom::Affine const &aff, double phase_length);
+ void decorateStyle(DrawingContext &dc, double vextent, double xphase, Geom::Point const &p1, Geom::Point const &p2);
NRStyle _nrstyle;
friend class DrawingGlyphs;
diff --git a/src/display/drawing.cpp b/src/display/drawing.cpp
index c192e4565..6e728b03d 100644
--- a/src/display/drawing.cpp
+++ b/src/display/drawing.cpp
@@ -167,22 +167,22 @@ Drawing::update(Geom::IntRect const &area, UpdateContext const &ctx, unsigned fl
}
void
-Drawing::render(DrawingContext &ct, Geom::IntRect const &area, unsigned flags)
+Drawing::render(DrawingContext &dc, Geom::IntRect const &area, unsigned flags)
{
if (_root) {
- _root->render(ct, area, flags);
+ _root->render(dc, area, flags);
}
if (colorMode() == COLORMODE_GRAYSCALE) {
// apply grayscale filter on top of everything
- cairo_surface_t *input = ct.rawTarget();
+ cairo_surface_t *input = dc.rawTarget();
cairo_surface_t *out = ink_cairo_surface_create_identical(input);
ink_cairo_surface_filter(input, out, _grayscale_colormatrix);
- Geom::Point origin = ct.targetLogicalBounds().min();
- ct.setSource(out, origin[Geom::X], origin[Geom::Y]);
- ct.setOperator(CAIRO_OPERATOR_SOURCE);
- ct.paint();
- ct.setOperator(CAIRO_OPERATOR_OVER);
+ Geom::Point origin = dc.targetLogicalBounds().min();
+ dc.setSource(out, origin[Geom::X], origin[Geom::Y]);
+ dc.setOperator(CAIRO_OPERATOR_SOURCE);
+ dc.paint();
+ dc.setOperator(CAIRO_OPERATOR_OVER);
cairo_surface_destroy(out);
}
diff --git a/src/display/drawing.h b/src/display/drawing.h
index 74ab57fae..cc74833ba 100644
--- a/src/display/drawing.h
+++ b/src/display/drawing.h
@@ -68,7 +68,7 @@ public:
void setGrayscaleMatrix(gdouble value_matrix[20]);
void update(Geom::IntRect const &area = Geom::IntRect::infinite(), UpdateContext const &ctx = UpdateContext(), unsigned flags = DrawingItem::STATE_ALL, unsigned reset = 0);
- void render(DrawingContext &ct, Geom::IntRect const &area, unsigned flags = 0);
+ void render(DrawingContext &dc, Geom::IntRect const &area, unsigned flags = 0);
DrawingItem *pick(Geom::Point const &p, double delta, unsigned flags);
sigc::signal<void, DrawingItem *> signal_request_update;
diff --git a/src/display/nr-filter-image.cpp b/src/display/nr-filter-image.cpp
index 92bb9dcaa..154d1ab32 100644
--- a/src/display/nr-filter-image.cpp
+++ b/src/display/nr-filter-image.cpp
@@ -108,17 +108,17 @@ void FilterImage::render_cairo(FilterSlot &slot)
Geom::Rect sa = slot.get_slot_area();
cairo_surface_t *out = cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
sa.width(), sa.height());
- Inkscape::DrawingContext ct(out, sa.min());
- ct.transform(user2pb); // we are now in primitive units
- ct.translate(feImageX, feImageY);
-// ct.scale(scaleX, scaleY); No scaling should be done
+ Inkscape::DrawingContext dc(out, sa.min());
+ dc.transform(user2pb); // we are now in primitive units
+ dc.translate(feImageX, feImageY);
+// dc.scale(scaleX, scaleY); No scaling should be done
Geom::IntRect render_rect = area.roundOutwards();
- ct.translate(render_rect.min());
+ dc.translate(render_rect.min());
// Update to renderable state
drawing.update(render_rect);
- drawing.render(ct, render_rect);
+ drawing.render(dc, render_rect);
SVGElem->invoke_hide(key);
// For the moment, we'll assume that any image is in sRGB color space
diff --git a/src/display/nr-filter-slot.cpp b/src/display/nr-filter-slot.cpp
index 755a30a74..e4c2f048e 100644
--- a/src/display/nr-filter-slot.cpp
+++ b/src/display/nr-filter-slot.cpp
@@ -25,13 +25,13 @@
namespace Inkscape {
namespace Filters {
-FilterSlot::FilterSlot(DrawingItem *item, DrawingContext *bgct,
+FilterSlot::FilterSlot(DrawingItem *item, DrawingContext *bgdc,
DrawingContext &graphic, FilterUnits const &u)
: _item(item)
, _source_graphic(graphic.rawTarget())
- , _background_ct(bgct ? bgct->raw() : NULL)
+ , _background_ct(bgdc ? bgdc->raw() : NULL)
, _source_graphic_area(graphic.targetLogicalBounds().roundOutwards()) // fixme
- , _background_area(bgct ? bgct->targetLogicalBounds().roundOutwards() : Geom::IntRect()) // fixme
+ , _background_area(bgdc ? bgdc->targetLogicalBounds().roundOutwards() : Geom::IntRect()) // fixme
, _units(u)
, _last_out(NR_FILTER_SOURCEGRAPHIC)
, filterquality(FILTER_QUALITY_BEST)
diff --git a/src/display/nr-filter-slot.h b/src/display/nr-filter-slot.h
index 805027bfe..f3c98b8d9 100644
--- a/src/display/nr-filter-slot.h
+++ b/src/display/nr-filter-slot.h
@@ -28,7 +28,7 @@ namespace Filters {
class FilterSlot {
public:
/** Creates a new FilterSlot object. */
- FilterSlot(DrawingItem *item, DrawingContext *bgct,
+ FilterSlot(DrawingItem *item, DrawingContext *bgdc,
DrawingContext &graphic, FilterUnits const &u);
/** Destroys the FilterSlot object and all its contents */
virtual ~FilterSlot();
diff --git a/src/display/nr-filter.cpp b/src/display/nr-filter.cpp
index af9c15cd8..11984ba76 100644
--- a/src/display/nr-filter.cpp
+++ b/src/display/nr-filter.cpp
@@ -98,7 +98,7 @@ Filter::~Filter()
}
-int Filter::render(Inkscape::DrawingItem const *item, DrawingContext &graphic, DrawingContext *bgct)
+int Filter::render(Inkscape::DrawingItem const *item, DrawingContext &graphic, DrawingContext *bgdc)
{
if (_primitive.empty()) {
// when no primitives are defined, clear source graphic
@@ -150,7 +150,7 @@ int Filter::render(Inkscape::DrawingItem const *item, DrawingContext &graphic, D
}
}
- FilterSlot slot(const_cast<Inkscape::DrawingItem*>(item), bgct, graphic, units);
+ FilterSlot slot(const_cast<Inkscape::DrawingItem*>(item), bgdc, graphic, units);
slot.set_quality(filterquality);
slot.set_blurquality(blurquality);
diff --git a/src/display/nr-filter.h b/src/display/nr-filter.h
index 5df38ffe9..f9dcf1d84 100644
--- a/src/display/nr-filter.h
+++ b/src/display/nr-filter.h
@@ -28,12 +28,12 @@ namespace Filters {
class Filter {
public:
- /** Given background state from @a bgct and an intermediate rendering from the surface
+ /** Given background state from @a bgdc and an intermediate rendering from the surface
* backing @a graphic, modify the contents of the surface backing @a graphic to represent
* the results of filter rendering. @a bgarea and @a area specify bounding boxes
* of both surfaces in world coordinates; Cairo contexts are assumed to be in default state
* (0,0 = surface origin, no path, OVER operator) */
- int render(Inkscape::DrawingItem const *item, DrawingContext &graphic, DrawingContext *bgct);
+ int render(Inkscape::DrawingItem const *item, DrawingContext &graphic, DrawingContext *bgdc);
/**
* Creates a new filter primitive under this filter object.
diff --git a/src/display/nr-style.cpp b/src/display/nr-style.cpp
index 317f38635..403b139e0 100644
--- a/src/display/nr-style.cpp
+++ b/src/display/nr-style.cpp
@@ -207,14 +207,14 @@ void NRStyle::set(SPStyle *style)
update();
}
-bool NRStyle::prepareFill(Inkscape::DrawingContext &ct, Geom::OptRect const &paintbox)
+bool NRStyle::prepareFill(Inkscape::DrawingContext &dc, Geom::OptRect const &paintbox)
{
// update fill pattern
if (!fill_pattern) {
switch (fill.type) {
case PAINT_SERVER: {
- //fill_pattern = sp_paint_server_create_pattern(fill.server, ct.raw(), paintbox, fill.opacity);
- fill_pattern = fill.server->pattern_new(ct.raw(), paintbox, fill.opacity);
+ //fill_pattern = sp_paint_server_create_pattern(fill.server, dc.raw(), paintbox, fill.opacity);
+ fill_pattern = fill.server->pattern_new(dc.raw(), paintbox, fill.opacity);
} break;
case PAINT_COLOR: {
@@ -229,19 +229,19 @@ bool NRStyle::prepareFill(Inkscape::DrawingContext &ct, Geom::OptRect const &pai
return true;
}
-void NRStyle::applyFill(Inkscape::DrawingContext &ct)
+void NRStyle::applyFill(Inkscape::DrawingContext &dc)
{
- ct.setSource(fill_pattern);
- ct.setFillRule(fill_rule);
+ dc.setSource(fill_pattern);
+ dc.setFillRule(fill_rule);
}
-bool NRStyle::prepareStroke(Inkscape::DrawingContext &ct, Geom::OptRect const &paintbox)
+bool NRStyle::prepareStroke(Inkscape::DrawingContext &dc, Geom::OptRect const &paintbox)
{
if (!stroke_pattern) {
switch (stroke.type) {
case PAINT_SERVER: {
- //stroke_pattern = sp_paint_server_create_pattern(stroke.server, ct.raw(), paintbox, stroke.opacity);
- stroke_pattern = stroke.server->pattern_new(ct.raw(), paintbox, stroke.opacity);
+ //stroke_pattern = sp_paint_server_create_pattern(stroke.server, dc.raw(), paintbox, stroke.opacity);
+ stroke_pattern = stroke.server->pattern_new(dc.raw(), paintbox, stroke.opacity);
} break;
case PAINT_COLOR: {
@@ -256,14 +256,14 @@ bool NRStyle::prepareStroke(Inkscape::DrawingContext &ct, Geom::OptRect const &p
return true;
}
-void NRStyle::applyStroke(Inkscape::DrawingContext &ct)
+void NRStyle::applyStroke(Inkscape::DrawingContext &dc)
{
- ct.setSource(stroke_pattern);
- ct.setLineWidth(stroke_width);
- ct.setLineCap(line_cap);
- ct.setLineJoin(line_join);
- ct.setMiterLimit(miter_limit);
- cairo_set_dash(ct.raw(), dash, n_dash, dash_offset); // fixme
+ dc.setSource(stroke_pattern);
+ dc.setLineWidth(stroke_width);
+ dc.setLineCap(line_cap);
+ dc.setLineJoin(line_join);
+ dc.setMiterLimit(miter_limit);
+ cairo_set_dash(dc.raw(), dash, n_dash, dash_offset); // fixme
}
void NRStyle::update()
diff --git a/src/display/nr-style.h b/src/display/nr-style.h
index 8fd736cc3..e54eef547 100644
--- a/src/display/nr-style.h
+++ b/src/display/nr-style.h
@@ -28,10 +28,10 @@ struct NRStyle {
~NRStyle();
void set(SPStyle *);
- bool prepareFill(Inkscape::DrawingContext &ct, Geom::OptRect const &paintbox);
- bool prepareStroke(Inkscape::DrawingContext &ct, Geom::OptRect const &paintbox);
- void applyFill(Inkscape::DrawingContext &ct);
- void applyStroke(Inkscape::DrawingContext &ct);
+ bool prepareFill(Inkscape::DrawingContext &dc, Geom::OptRect const &paintbox);
+ bool prepareStroke(Inkscape::DrawingContext &dc, Geom::OptRect const &paintbox);
+ void applyFill(Inkscape::DrawingContext &dc);
+ void applyStroke(Inkscape::DrawingContext &dc);
void update();
enum PaintType {
diff --git a/src/document.cpp b/src/document.cpp
index 634462001..470d0cc5a 100644
--- a/src/document.cpp
+++ b/src/document.cpp
@@ -381,16 +381,6 @@ SPDocument *SPDocument::createDoc(Inkscape::XML::Document *rdoc,
rroot->setAttribute("inkscape:version", Inkscape::version_string);
/* fixme: Again, I moved these here to allow version determining in ::build (Lauris) */
- /* Quick hack 2 - get default image size into document */
- if (!rroot->attribute("width")) rroot->setAttribute("width", "100%");
- if (!rroot->attribute("height")) rroot->setAttribute("height", "100%");
- /* End of quick hack 2 */
-
- /* Quick hack 3 - Set uri attributes */
-// if (uri) { // this is done in do_change_uri()
-// rroot->setAttribute("sodipodi:docname", uri);
-// }
- /* End of quick hack 3 */
/* Eliminate obsolete sodipodi:docbase, for privacy reasons */
rroot->setAttribute("sodipodi:docbase", NULL);
@@ -483,7 +473,7 @@ SPDocument *SPDocument::createChildDoc(std::string const &uri)
SPDocument *parent = this;
SPDocument *document = NULL;
- while(parent != NULL && document == NULL) {
+ while(parent != NULL && parent->getURI() != NULL && document == NULL) {
// Check myself and any parents int he chain
if(uri == parent->getURI()) {
document = parent;
diff --git a/src/extension/internal/emf-inout.cpp b/src/extension/internal/emf-inout.cpp
index cca541c5b..276dee362 100644
--- a/src/extension/internal/emf-inout.cpp
+++ b/src/extension/internal/emf-inout.cpp
@@ -4,6 +4,7 @@
/* Authors:
* Ulf Erikson <ulferikson@users.sf.net>
* Jon A. Cruz <jon@joncruz.org>
+ * David Mathog
* Abhishek Sharma
*
* Copyright (C) 2006-2008 Authors
@@ -1563,6 +1564,7 @@ int Emf::myEnhMetaFileProc(char *contents, unsigned int length, PEMF_CALLBACK_DA
tsp.vadvance = 0.0; /* meaningful only when a complex contains two or more lines */
tsp.taln = ALILEFT + ALIBASE;
tsp.ldir = LDIR_LR;
+ tsp.spaces = 0; // this field is only used for debugging
tsp.color.Red = 0; /* RGB Black */
tsp.color.Green = 0; /* RGB Black */
tsp.color.Blue = 0; /* RGB Black */
diff --git a/src/extension/internal/emf-inout.h b/src/extension/internal/emf-inout.h
index 97f93e71b..a97cb0a54 100644
--- a/src/extension/internal/emf-inout.h
+++ b/src/extension/internal/emf-inout.h
@@ -3,6 +3,7 @@
*/
/* Authors:
* Ulf Erikson <ulferikson@users.sf.net>
+ * David Mathog
*
* Copyright (C) 2006-2008 Authors
*
diff --git a/src/extension/internal/emf-print.cpp b/src/extension/internal/emf-print.cpp
index 2680718cf..6d5bb6f4b 100644
--- a/src/extension/internal/emf-print.cpp
+++ b/src/extension/internal/emf-print.cpp
@@ -124,7 +124,7 @@ unsigned int PrintEmf::begin(Inkscape::Extension::Print *mod, SPDocument *doc)
char *rec;
gchar const *utf8_fn = mod->get_param_string("destination");
- // Typially PX2WORLD is 1200/90, using inkscape's default dpi
+ // Typically PX2WORLD is 1200/90, using inkscape's default dpi
PX2WORLD = 1200.0 / Inkscape::Util::Quantity::convert(1.0, "in", "px");
FixPPTCharPos = mod->get_param_bool("FixPPTCharPos");
FixPPTDashLine = mod->get_param_bool("FixPPTDashLine");
@@ -848,7 +848,7 @@ Geom::Path PrintEmf::pathv_to_rect(Geom::PathVector const &pathv, bool *is_rect,
int vertices;
Geom::Path pR = pathv_to_simple_polygon(pathv, &vertices);
*is_rect = false;
- if(vertices==4){ // or else it cannot be a rectangle rectangle
+ if(vertices==4){ // or else it cannot be a rectangle
int vertex_count=0;
/* Get the ends of the LAST line segment.
Find minimum rotation to align rectangle with X,Y axes. (Very degenerate if it is rotated 45 degrees.) */
@@ -862,12 +862,17 @@ Geom::Path PrintEmf::pathv_to_rect(Geom::PathVector const &pathv, bool *is_rect,
if(fabs(ang) < fabs(*angle))*angle = -ang; // y increases down, flips sign on angle
}
}
+
+ /* For increased numerical stability, snap the angle to the nearest 1/100th of a degree. */
+ double convert = 36000.0/ (2.0 * M_PI);
+ *angle = round(*angle * convert)/convert;
for(Geom::Path::const_iterator cit = pR.begin(); cit != pR.end_open();++cit) {
P1_lead = cit->finalPoint();
v1 = unit_vector(P1 - P1_trail);
v2 = unit_vector(P1_lead - P1 );
- if(!Geom::are_near(dot(v1,v2), 0.0, 1e-5))break; // P1 is center of a turn that is not 90 degrees
+ // P1 is center of a turn that is not 90 degrees. Limit comes from cos(89.9) = .001745
+ if(!Geom::are_near(dot(v1,v2), 0.0, 2e-3))break;
P1_trail = P1;
P1 = P1_lead;
vertex_count++;
@@ -985,12 +990,13 @@ unsigned int PrintEmf::fill(
int rectDir=0;
Geom::Path pathRect;
if(FixPPTLinGrad && brush_stat && gv.mode == DRAW_LINEAR_GRADIENT){
- pathRect = pathv_to_rect(pathv, &is_Rect, &angle);
+ Geom::PathVector pvr = pathv * fill_transform;
+ pathRect = pathv_to_rect(pvr, &is_Rect, &angle);
if(is_Rect){
/* Gradientfill records can only be used if the gradient is parallel to the sides of the rectangle.
That must be checked here so that we can fall back to another form of gradient fill if it is not
the case. */
- rectDir = vector_rect_alignment(angle, gv.p2 - gv.p1);
+ rectDir = vector_rect_alignment(angle, (gv.p2 - gv.p1) * fill_transform);
if(!rectDir)is_Rect = false;
}
if(!is_Rect && !FixPPTGrad2Polys)brush_stat=0; // fall all the way back to a solid fill
@@ -1094,26 +1100,27 @@ unsigned int PrintEmf::fill(
U_XFORM tmpTransform;
double wRect, hRect;
- /* coordinates, w,h and transform for the ENTIRE retangle */
- ul = get_pathrect_corner(pathRect, angle, 0) * fill_transform * PX2WORLD;
- ur = get_pathrect_corner(pathRect, angle, 1) * fill_transform * PX2WORLD;
- lr = get_pathrect_corner(pathRect, angle, 2) * fill_transform * PX2WORLD;
+ /* coordinates: upper left, upper right, and lower right corners of the rectangle.
+ inkscape transform already applied, but needs to be scaled to EMF coordinates. */
+ ul = get_pathrect_corner(pathRect, angle, 0) * PX2WORLD;
+ ur = get_pathrect_corner(pathRect, angle, 1) * PX2WORLD;
+ lr = get_pathrect_corner(pathRect, angle, 2) * PX2WORLD;
wRect = Geom::distance(ul,ur);
hRect = Geom::distance(ur,lr);
/* The basic rectangle for all of these is placed with its UL corner at 0,0 with a size wRect,hRect.
Apply a world transform to place/scale it into the appropriate position on the drawing.
Actual gradientfill records are either this entire rectangle or slices of it as defined by the stops.
+ This rectangle has already been transformed by tf (whatever rotation/scale) Inkscape had applied to it.
*/
Geom::Affine tf2 = Geom::Rotate(-angle); // the rectangle may be drawn skewed to the coordinate system
- tf2 *= tf; // the coordinate system of the rectangular path may be rotated
tmpTransform.eM11 = tf2[0];
tmpTransform.eM12 = tf2[1];
tmpTransform.eM21 = tf2[2];
tmpTransform.eM22 = tf2[3];
- tmpTransform.eDx = (ul)[Geom::X];
- tmpTransform.eDy = (ul)[Geom::Y];
+ tmpTransform.eDx = round((ul)[Geom::X]); // use explicit round for better stability
+ tmpTransform.eDy = round((ul)[Geom::Y]);
rec = U_EMRSAVEDC_set();
if (!rec || emf_append((PU_ENHMETARECORD)rec, et, U_REC_FREE)) {
@@ -1138,10 +1145,10 @@ unsigned int PrintEmf::fill(
gMode = U_GRADIENT_FILL_RECT_V;
}
doff_base = doff_range;
- rcb.left = outUL[X];
- rcb.top = outUL[Y];
- rcb.right = outLR[X];
- rcb.bottom = outLR[Y];
+ rcb.left = round(outUL[X]); // use explicit round for better stability
+ rcb.top = round(outUL[Y]);
+ rcb.right = round(outLR[X]);
+ rcb.bottom = round(outLR[Y]);
sp_color_get_rgb_floatv(&tg->vector.stops[istop].color, rgb);
opa = tg->vector.stops[istop].opacity;
c2 = U_RGBA(255 * rgb[0], 255 * rgb[1], 255 * rgb[2], 255 * opa);
@@ -1157,7 +1164,6 @@ unsigned int PrintEmf::fill(
c1 = c2; // for next stop
ug4.UpperLeft = 0;
ug4.LowerRight= 1;
- /* NEED to push world transform here for rotations */
rec = U_EMRGRADIENTFILL_set(rcb, 2, 1, gMode, ut, (uint32_t *) &ug4 );
if (!rec || emf_append((PU_ENHMETARECORD)rec, et, U_REC_FREE)) {
g_error("Fatal programming error in PrintEmf::fill at U_EMRGRADIENTFILL_set");
diff --git a/src/extension/internal/emf-print.h b/src/extension/internal/emf-print.h
index 8fc9908e3..1e4970a46 100644
--- a/src/extension/internal/emf-print.h
+++ b/src/extension/internal/emf-print.h
@@ -1,8 +1,9 @@
/** @file
* @brief Enhanced Metafile printing - implementation
*/
-/* Author:
+/* Authors:
* Ulf Erikson <ulferikson@users.sf.net>
+ * David Mathog
*
* Copyright (C) 2006-2008 Authors
*
diff --git a/src/extension/internal/image-resolution.cpp b/src/extension/internal/image-resolution.cpp
index aee46aaba..18eb97f80 100644
--- a/src/extension/internal/image-resolution.cpp
+++ b/src/extension/internal/image-resolution.cpp
@@ -322,6 +322,12 @@ void ImageResolution::readjfif(char const *fn) {
y_ = cinfo.Y_density * 2.54;
ok_ = true;
}
+ /* According to http://www.jpeg.org/public/jfif.pdf (page 7):
+ * "Xdensity and Ydensity should always be non-zero".
+ * but in some cases, they are (see LP bug #1275443) */
+ if (x_ == 0 or y_ == 0) {
+ ok_ = false;
+ }
}
jpeg_destroy_decompress(&cinfo);
fclose(ifd);
diff --git a/src/extension/internal/text_reassemble.c b/src/extension/internal/text_reassemble.c
index cd84910fc..e28e5effb 100644
--- a/src/extension/internal/text_reassemble.c
+++ b/src/extension/internal/text_reassemble.c
@@ -67,11 +67,11 @@ Optional compiler switches for development:
File: text_reassemble.c
-Version: 0.0.10
-Date: 06-MAY-2013
+Version: 0.0.12
+Date: 07-FEB-2014
Author: David Mathog, Biology Division, Caltech
email: mathog@caltech.edu
-Copyright: 2013 David Mathog and California Institute of Technology (Caltech)
+Copyright: 2014 David Mathog and California Institute of Technology (Caltech)
*/
#ifdef __cplusplus
@@ -665,7 +665,7 @@ FT_INFO *ftinfo_clear(FT_INFO *fti){
free(fsp->file); /* release memory holding copies of paths */
free(fsp->fontspec); /* release memory holding copies of font names */
FcPatternDestroy(fsp->fpat); /* release memory for FontConfig fpats */
- FcFontSetDestroy(fti->fonts[i].fontset);
+ FcFontSetDestroy(fsp->fontset);
if(fsp->alts){ free(fsp->alts); }
}
free(fti->fonts);
@@ -726,9 +726,10 @@ int ftinfo_find_loaded_by_src(const FT_INFO *fti, const uint8_t *filename){
*/
int ftinfo_load_fontname(FT_INFO *fti, const char *fontspec){
- FcPattern *pattern, *fpat;
- FcFontSet *fontset;
- FcResult result = FcResultMatch;
+ FcPattern *pattern = NULL;
+ FcPattern *fpat = NULL;
+ FcFontSet *fontset = NULL;
+ FcResult result = FcResultMatch;
char *filename;
double fd;
FNT_SPECS *fsp;
@@ -738,38 +739,45 @@ int ftinfo_load_fontname(FT_INFO *fti, const char *fontspec){
if(!fti)return(-1);
/* If it is already loaded, do not load it again */
- if((status = ftinfo_find_loaded_by_spec(fti, (uint8_t *) fontspec))>=0){
- return(status);
- }
+ status = ftinfo_find_loaded_by_spec(fti, (uint8_t *) fontspec);
+ if(status >= 0){ return(status); }
+ status = 0; /* was -1, reset to 0 */
ftinfo_make_insertable(fti);
fi_idx = fti->used;
- if(!(pattern = FcNameParse((const FcChar8 *)fontspec)) )return(2);
- if(!FcConfigSubstitute(NULL, pattern, FcMatchPattern) )return(3);
- FcDefaultSubstitute(pattern);
- /* get a fontset, trimmed to only those with new glyphs as needed, so that missing glyph's may be handled */
- if(!(fontset = FcFontSort (NULL,pattern, FcTrue, NULL, &result))
- || result != FcResultMatch)return(4);
- if(!(fpat = FcFontRenderPrepare(NULL, pattern, fontset->fonts[0])) )return(405);
- if(FcPatternGetString( fpat, FC_FILE, 0, (FcChar8 **)&filename) != FcResultMatch)return(5);
- if(FcPatternGetDouble( fpat, FC_SIZE, 0, &fd) != FcResultMatch)return(6);
-
- /* copy these into memory for external use */
- fsp = &(fti->fonts[fti->used]);
- fsp->fontset = fontset;
- fsp->alts = NULL; /* Initially no links to alternate fonts */
- fsp->space = 0;
- fsp->file = (uint8_t *) U_strdup((char *) filename);
- fsp->fontspec = (uint8_t *) U_strdup((char *) fontspec);
- fsp->fpat = fpat;
- fsp->fsize = fd;
-
+ pattern = FcNameParse((const FcChar8 *)fontspec);
+ while(1) { /* this is NOT a loop, it uses breaks to avoid gotos and deep nesting */
+ if(!(pattern)){ status = -2; break; }
+ if(!FcConfigSubstitute(NULL, pattern, FcMatchPattern)){ status = -3; break; };
+ FcDefaultSubstitute(pattern);
+ /* get a fontset, trimmed to only those with new glyphs as needed, so that missing glyph's may be handled */
+ if(!(fontset = FcFontSort (NULL,pattern, FcTrue, NULL, &result)) || (result != FcResultMatch)){ status = -4; break; }
+ if(!(fpat = FcFontRenderPrepare(NULL, pattern, fontset->fonts[0]))){ status = -405; break; }
+ if(FcPatternGetString( fpat, FC_FILE, 0, (FcChar8 **)&filename) != FcResultMatch){ status = -5; break; }
+ if(FcPatternGetDouble( fpat, FC_SIZE, 0, &fd) != FcResultMatch){ status = -6; break; }
+
+ /* copy these into memory for external use */
+ fsp = &(fti->fonts[fti->used]);
+ fsp->fontset = fontset;
+ fsp->alts = NULL; /* Initially no links to alternate fonts */
+ fsp->space = 0;
+ fsp->file = (uint8_t *) U_strdup((char *) filename);
+ fsp->fontspec = (uint8_t *) U_strdup((char *) fontspec);
+ fsp->fpat = fpat;
+ fsp->fsize = fd;
+ break;
+ }
/* release FC's own memory related to this call that does not need to be kept around so that face will work */
- FcPatternDestroy(pattern);
+ if(pattern)FcPatternDestroy(pattern); /* done with this memory */
+ if(status<0){
+ if(fontset)FcFontSetDestroy(fontset);
+ if(fpat)FcPatternDestroy(fpat);
+ return(status);
+ }
/* get the current face */
- if(FT_New_Face( fti->library, (const char *) fsp->file, 0, &(fsp->face) )){ return(8); }
+ if(FT_New_Face( fti->library, (const char *) fsp->file, 0, &(fsp->face) )){ return(-8); }
if(FT_Set_Char_Size(
fsp->face, /* handle to face object */
@@ -777,12 +785,12 @@ int ftinfo_load_fontname(FT_INFO *fti, const char *fontspec){
fd*64, /* char_height in 1/64th of points */
72, /* horizontal device resolution, DPI */
72) /* vebrical device resolution, DPI */
- ){ return(9); }
+ ){ return(-9); }
/* The space advance is needed in various places. Get it now, and get it in the font units,
so that it can be scaled later with the text size */
status = TR_getadvance(fti, fsp,' ',0,FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP, FT_KERNING_UNSCALED, NULL, NULL);
- if(status < 0)return(7);
+ if(status < 0)return(-7);
fsp->spcadv = ((double) status)/(64.0);
fti->used++;
@@ -1380,7 +1388,7 @@ printf("Overlap rprect (LL,UR) dst:(%lf,%lf),(%lf,%lf) src:(%lf,%lf),(%lf,%lf)\n
}
/**
- \brief Check for a text element upstream from the start element and in the reversed direction.
+ \brief Check for various sorts of invalid text elements upstream (language dir changes, draw order backwards from language direction)
\returns 0 on success (not upstream), 1 if upstream, anything else is an error.
\param bri pointer to the BR_INFO structure
\param dst index of the destination bounding rectangle.
@@ -1405,6 +1413,12 @@ int brinfo_upstream(BR_INFO *bri, int dst, int src, int ddir, int sdir){
else if( ddir == LDIR_LR && sdir == LDIR_RL){
if((br_src->xll + br_src->xur)/2.0 <= br_dst->xll ){ status = 1; }
}
+ else if( ddir == LDIR_RL && sdir == LDIR_RL){
+ if(br_dst->xur <= (br_src->xll + br_src->xur)/2.0){ status = 1; }
+ }
+ else if( ddir == LDIR_LR && sdir == LDIR_LR){
+ if((br_src->xll + br_src->xur)/2.0 <= br_dst->xll ){ status = 1; }
+ }
return(status);
}
@@ -1490,13 +1504,19 @@ TR_INFO *trinfo_init(TR_INFO *tri){
!(tri->bri = brinfo_init()) ||
!(tri->cxi = cxinfo_init())
){ tri = trinfo_release(tri); }
+ tri->out = NULL; /* This will allocate as needed, it might not ever be needed. */
+ tri->qe = 0.0;
+ tri->esc = 0.0;
+ tri->x = DBL_MAX;
+ tri->y = DBL_MAX;
+ tri->dirty = 0;
tri->use_kern = 1;
- tri->usebk = BKCLR_NONE;
tri->load_flags = FT_LOAD_NO_SCALE;
tri->kern_mode = FT_KERNING_UNSCALED;
- tri->out = NULL; /* This will allocate as needed, it might not ever be needed. */
tri->outspace = 0;
tri->outused = 0;
+ tri->usebk = BKCLR_NONE;
+ memset(&(tri->bkcolor),0,sizeof(TRCOLORREF));
return(tri);
}
@@ -1552,9 +1572,6 @@ TR_INFO *trinfo_release_except_FC(TR_INFO *tri){
*/
TR_INFO *trinfo_clear(TR_INFO *tri){
if(tri){
- tri->dirty = 0; /* set these back to their defaults */
- tri->esc = 0.0;
- /* Do NOT modify use_kern, usebk, load_flags, or kern_mode */
if(tri->bri)tri->bri=brinfo_release(tri->bri);
if(tri->tpi)tri->tpi=tpinfo_release(tri->tpi);
@@ -1565,6 +1582,11 @@ TR_INFO *trinfo_clear(TR_INFO *tri){
tri->outused = 0;
tri->outspace = 0;
};
+ /* Do NOT modify: qe, use_kern, usebk, load_flags, kern_mode, or bkcolor. Set the rest back to their defaults */
+ tri->esc = 0.0;
+ tri->x = DBL_MAX;
+ tri->y = DBL_MAX;
+ tri->dirty = 0;
if(!(tri->tpi = tpinfo_init()) || /* re-init the pieces just released */
!(tri->bri = brinfo_init()) ||
!(tri->cxi = cxinfo_init())
@@ -1958,7 +1980,7 @@ void TR_layout_2_svg(TR_INFO *tri){
cutat=strcspn((char *)fti->fonts[tsp->fi_idx].fontspec,":");
sprintf(obuf,"font-family:%.*s;",cutat,fti->fonts[tsp->fi_idx].fontspec);
TRPRINT(tri, obuf);
- sprintf(obuf,"\n\">%s</text>\n",tsp->string);
+ sprintf(obuf,"\n\">%s</text>\n",&tsp->string[tsp->spaces]);
TRPRINT(tri, obuf);
#endif /* DBG_TR_INPUT debugging code, original text objects */
}
@@ -2278,7 +2300,10 @@ int TR_layout_analyze(TR_INFO *tri){
next logical piece of text is "upstream" positionally of its logical predecessor. The meaning of such
a construct is at best ambiguous. The test is only applied with respect to the first text chunk. This sort
of construct may appear when a valid initial construct like [1->English][2<-Hebrew][3->English] is edited
- and the leading chunk of text removed.
+ and the leading chunk of text removed.
+
+ Also reject reversed order text as in (English) <A><B><C> (draw order) arranged as <C><B><A>. This happens
+ if the language direction field is incorrect, perhaps due to a corrupt or malformed input file.
*/
if(brinfo_upstream(bri,
dst_rt, /* index into bri for dst */
@@ -2422,10 +2447,28 @@ int TR_layout_analyze(TR_INFO *tri){
}
}
- /* if x or y kern is less than the quantization error it is probably noise, set it to zero */
- if(fabs(tspj->xkern)<tri->qe)tspj->xkern = 0.0;
- if(fabs(tspj->ykern)<tri->qe)tspj->ykern = 0.0;
-
+ /* if x or y kern is less than twice the quantization error it is probably noise, set it to zero */
+ if(fabs(tspj->xkern) <= 2.0*tri->qe)tspj->xkern = 0.0;
+ if(fabs(tspj->ykern) <= 2.0*tri->qe)tspj->ykern = 0.0;
+
+ /* reintroduce spaces on the leading edge of text "j" if the kerning can be in part or in whole replaced
+ with 1 or 2 spaces */
+ if(tspj->ykern == 0.0){
+ double spaces = tspj->xkern/spcadv; /* negative on RL language, positive on LR */
+ if((ldir == LDIR_RL && (spaces <= -0.9 && spaces >= -2.1)) ||
+ (ldir == LDIR_LR && (spaces >= 0.9 && spaces <= 2.1)) ){
+ int ispaces = lround(spaces);
+ tspj->xkern -= ((double)ispaces*spcadv);
+ if(ispaces<0)ispaces=-ispaces;
+ size_t slen = strlen((char *)tspj->string);
+ uint8_t *newstring = malloc(1 + ispaces + slen);
+ sprintf((char *)newstring," "); /* start with two spaces, possibly overwrite one in the next line */
+ memcpy(newstring+ispaces,tspj->string,slen+1); /* copy existing string to proper position */
+ free(tspj->string);
+ tspj->string = newstring;
+ tspj->spaces = ispaces; // only needed to fix optional debugging SVG output later
+ }
+ }
tspi = tspj;
lastldir = ldir;
@@ -2699,7 +2742,7 @@ int main(int argc, char *argv[]){
tsp.weight = 80;
tsp.condensed = 100;
tsp.decoration = 0; /* none */
- tsp.co = 0;
+ tsp.spaces = 0; /* none */
tsp.fi_idx = -1; /* set to an invalid */
tsp.rt_tidx = -1; /* set to an invalid */
tsp.xkern = tsp.ykern = 0.0;
diff --git a/src/extension/internal/text_reassemble.h b/src/extension/internal/text_reassemble.h
index d85b233be..6c1acafe5 100644
--- a/src/extension/internal/text_reassemble.h
+++ b/src/extension/internal/text_reassemble.h
@@ -4,11 +4,11 @@
See text_reassemble.c for notes
File: text_reassemble.h
-Version: 0.0.12
-Date: 14-MAY-2013
+Version: 0.0.13
+Date: 06-FEB-2014
Author: David Mathog, Biology Division, Caltech
email: mathog@caltech.edu
-Copyright: 2013 David Mathog and California Institute of Technology (Caltech)
+Copyright: 2014 David Mathog and California Institute of Technology (Caltech)
*/
#ifndef _TEXT_REASSEMBLE_
@@ -189,6 +189,7 @@ typedef struct {
int weight; /**< weight, as in FontConfig */
int condensed; /**< condensed, as in FontConfig */
int decoration; /**< text decorations, ignored during assembly, used during output */
+ int spaces; /**< count of spaces converted from wide kerning (1 or 2) */
TRCOLORREF decColor; /**< text decoration color, ignored during assembly, used during output */
int co; /**< condensed override, if set Font name included narrow */
int rt_tidx; /**< index of rectangle that contains it */
diff --git a/src/extension/internal/wmf-inout.cpp b/src/extension/internal/wmf-inout.cpp
index a72c16a88..fc54350df 100644
--- a/src/extension/internal/wmf-inout.cpp
+++ b/src/extension/internal/wmf-inout.cpp
@@ -4,6 +4,7 @@
/* Authors:
* Ulf Erikson <ulferikson@users.sf.net>
* Jon A. Cruz <jon@joncruz.org>
+ * David Mathog
* Abhishek Sharma
*
* Copyright (C) 2006-2008 Authors
@@ -1079,6 +1080,28 @@ Wmf::select_brush(PWMF_CALLBACK_DATA d, int index)
g_message("Please send WMF file to developers - select_brush U_WMR_DIBCREATEPATTERNBRUSH not bm16 or dib, not handled");
}
}
+ else if(iType == U_WMR_CREATEPATTERNBRUSH){
+ uint32_t tidx;
+ int cbPx;
+ U_BITMAP16 Bm16h;
+ const char *px;
+ if(U_WMRCREATEPATTERNBRUSH_get(record, &Bm16h, &cbPx, &px)){
+ tidx = add_bm16_image(d, Bm16h, px);
+ if(tidx == 0xFFFFFFFF){ // Problem with the image, for instance, an unsupported bitmap16 type
+ double r, g, b;
+ r = SP_COLOR_U_TO_F( U_RGBAGetR(d->dc[d->level].textColor));
+ g = SP_COLOR_U_TO_F( U_RGBAGetG(d->dc[d->level].textColor));
+ b = SP_COLOR_U_TO_F( U_RGBAGetB(d->dc[d->level].textColor));
+ d->dc[d->level].style.fill.value.color.set( r, g, b );
+ d->dc[d->level].fill_mode = DRAW_PAINT;
+ }
+ else {
+ d->dc[d->level].fill_idx = tidx;
+ d->dc[d->level].fill_mode = DRAW_IMAGE;
+ }
+ d->dc[d->level].fill_set = true;
+ }
+ }
}
@@ -1488,6 +1511,7 @@ int Wmf::myMetaFileProc(const char *contents, unsigned int length, PWMF_CALLBACK
tsp.vadvance = 0.0; /* meaningful only when a complex contains two or more lines */
tsp.taln = ALILEFT + ALIBASE;
tsp.ldir = LDIR_LR;
+ tsp.spaces = 0; // this field is only used for debugging
tsp.color.Red = 0; /* RGB Black */
tsp.color.Green = 0; /* RGB Black */
tsp.color.Blue = 0; /* RGB Black */
@@ -1498,6 +1522,7 @@ int Wmf::myMetaFileProc(const char *contents, unsigned int length, PWMF_CALLBACK
tsp.condensed = 100;
tsp.co = 0;
tsp.fi_idx = -1; /* set to an invalid */
+ tsp.rt_tidx = -1; /* set to an invalid */
SVGOStringStream dbg_str;
@@ -1568,7 +1593,10 @@ int Wmf::myMetaFileProc(const char *contents, unsigned int length, PWMF_CALLBACK
d->dc[d->level].sizeView.x = d->dc[d->level].sizeWnd.x = 0;
d->dc[d->level].sizeView.y = d->dc[d->level].sizeWnd.y = 0;
- // Upper left corner in device units, usually both 0, but not always
+ /* Upper left corner in device units, usually both 0, but not always.
+ If a placeable header is used, and later a windoworg/windowext are found, then
+ the placeable information will be ignored.
+ */
d->ulCornerInX = Placeable.Dst.left;
d->ulCornerInY = Placeable.Dst.top;
@@ -1805,6 +1833,8 @@ std::cout << "BEFORE DRAW"
{
dbg_str << "<!-- U_WMR_SETWINDOWORG -->\n";
nSize = U_WMRSETWINDOWORG_get(contents, &d->dc[d->level].winorg);
+ d->ulCornerOutX = 0.0; // In the examples seen to date if this record is used with a placeable header, that header is ignored
+ d->ulCornerOutY = 0.0;
break;
}
case U_WMR_SETWINDOWEXT:
@@ -2322,12 +2352,12 @@ std::cout << "BEFORE DRAW"
break;
case U_WMR_CREATEBRUSHINDIRECT:
case U_WMR_DIBCREATEPATTERNBRUSH:
+ case U_WMR_CREATEPATTERNBRUSH: // <- this one did not display properly on XP, DIBCREATEPATTERNBRUSH works
select_brush(d, index);
break;
case U_WMR_CREATEFONTINDIRECT:
select_font(d, index);
break;
- case U_WMR_CREATEPATTERNBRUSH: // <- this one did not display properly on XP, DIBCREATEPATTERNBRUSH works
case U_WMR_CREATEPALETTE:
case U_WMR_CREATEBITMAPINDIRECT:
case U_WMR_CREATEBITMAP:
@@ -2376,6 +2406,7 @@ std::cout << "BEFORE DRAW"
if(iType == U_WMR_TEXTOUT){
dbg_str << "<!-- U_WMR_TEXTOUT -->\n";
nSize = U_WMRTEXTOUT_get(contents, &Dst, &tlen, &text);
+ Opts=0;
}
else {
dbg_str << "<!-- U_WMR_EXTTEXTOUT -->\n";
@@ -3053,7 +3084,14 @@ Wmf::open( Inkscape::Extension::Input * /*mod*/, const gchar *uri )
// Scale and translate objects
double scale = Inkscape::Util::Quantity::convert(1, "px", doc_unit);
ShapeEditor::blockSetItem(true);
- doc->getRoot()->scaleChildItemsRec(Geom::Scale(scale), Geom::Point(0, doc->getHeight().value("px")));
+ double dh;
+ if(SP_ACTIVE_DOCUMENT){ // for file menu open or import, or paste from clipboard
+ dh = SP_ACTIVE_DOCUMENT->getHeight().value("px");
+ }
+ else { // for open via --file on command line
+ dh = doc->getHeight().value("px");
+ }
+ doc->getRoot()->scaleChildItemsRec(Geom::Scale(scale), Geom::Point(0, dh));
ShapeEditor::blockSetItem(false);
Inkscape::DocumentUndo::setUndoSensitive(doc, saved);
diff --git a/src/helper/pixbuf-ops.cpp b/src/helper/pixbuf-ops.cpp
index cd4f539ec..1ba6628c5 100644
--- a/src/helper/pixbuf-ops.cpp
+++ b/src/helper/pixbuf-ops.cpp
@@ -140,10 +140,10 @@ Inkscape::Pixbuf *sp_generate_internal_bitmap(SPDocument *doc, gchar const */*fi
cairo_surface_t *surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
if (cairo_surface_status(surface) == CAIRO_STATUS_SUCCESS) {
- Inkscape::DrawingContext ct(surface, Geom::Point(0,0));
+ Inkscape::DrawingContext dc(surface, Geom::Point(0,0));
// render items
- drawing.render(ct, final_bbox, Inkscape::DrawingItem::RENDER_BYPASS_CACHE);
+ drawing.render(dc, final_bbox, Inkscape::DrawingItem::RENDER_BYPASS_CACHE);
inkpb = new Inkscape::Pixbuf(surface);
}
diff --git a/src/helper/png-write.cpp b/src/helper/png-write.cpp
index a16fe8e12..a7ebe7423 100644
--- a/src/helper/png-write.cpp
+++ b/src/helper/png-write.cpp
@@ -335,14 +335,14 @@ sp_export_get_rows(guchar const **rows, void **to_free, int row, int num_rows, v
cairo_surface_t *s = cairo_image_surface_create_for_data(
px, CAIRO_FORMAT_ARGB32, ebp->width, num_rows, stride);
- Inkscape::DrawingContext ct(s, bbox.min());
- ct.setSource(ebp->background);
- ct.setOperator(CAIRO_OPERATOR_SOURCE);
- ct.paint();
- ct.setOperator(CAIRO_OPERATOR_OVER);
+ Inkscape::DrawingContext dc(s, bbox.min());
+ dc.setSource(ebp->background);
+ dc.setOperator(CAIRO_OPERATOR_SOURCE);
+ dc.paint();
+ dc.setOperator(CAIRO_OPERATOR_OVER);
/* Render */
- ebp->drawing->render(ct, bbox);
+ ebp->drawing->render(dc, bbox);
cairo_surface_destroy(s);
*to_free = px;
diff --git a/src/libuemf/README b/src/libuemf/README
index 4c23cdd52..cfa322178 100644
--- a/src/libuemf/README
+++ b/src/libuemf/README
@@ -366,6 +366,12 @@ History
(Note, version numbers in files represent the libUEMF release where it was last modified, so not
all files will show the same version numbers in each release.)
+0.1.11 2014-01-29
+ Fixed bug in uwmf.c (wrong minimum record size on U_WMRTEXTOUT)
+ Fixed bug in uwmf.c (U_WMRCREATEPATTERNBRUSH not right)
+ Added error handling to uemf_utf.c for cases where src is a null pointer.
+ Added a test of createpatternbrush to testlib_wmf
+
0.1.10 2014-01-14
Slight changes in documentation for uemf.h.
Fixed typo in uemf_endian.c.
diff --git a/src/libuemf/uemf_utf.c b/src/libuemf/uemf_utf.c
index f329e74d9..bce60af4d 100644
--- a/src/libuemf/uemf_utf.c
+++ b/src/libuemf/uemf_utf.c
@@ -12,11 +12,11 @@
/*
File: uemf_utf.c
-Version: 0.0.4
-Date: 19-MAR-2013
+Version: 0.0.5
+Date: 29-JAN-2014
Author: David Mathog, Biology Division, Caltech
email: mathog@caltech.edu
-Copyright: 2013 David Mathog and California Institute of Technology (Caltech)
+Copyright: 2014 David Mathog and California Institute of Technology (Caltech)
*/
#ifdef __cplusplus
@@ -68,9 +68,14 @@ These functions are used for development and debugging and should be be includie
void wchar8show(
const char *src
){
- printf("char show\n");
- size_t srclen = 0;
- while(*src){ printf("%d %d %x\n",(int) srclen,*src,*src); srclen++; src++; }
+ if(!src){
+ printf("char show <NULL>\n");
+ }
+ else {
+ printf("char show\n");
+ size_t srclen = 0;
+ while(*src){ printf("%d %d %x\n",(int) srclen,*src,*src); srclen++; src++; }
+ }
}
/**
@@ -80,9 +85,14 @@ void wchar8show(
void wchar16show(
const uint16_t *src
){
- printf("uint16_t show\n");
- size_t srclen = 0;
- while(*src){ printf("%d %d %x\n",(int) srclen,*src,*src); srclen++; src++; }
+ if(!src){
+ printf("uint16_t show <NULL>\n");
+ }
+ else {
+ printf("uint16_t show\n");
+ size_t srclen = 0;
+ while(*src){ printf("%d %d %x\n",(int) srclen,*src,*src); srclen++; src++; }
+ }
}
/**
@@ -91,9 +101,14 @@ void wchar16show(
void wchar32show(
const uint32_t *src
){
- printf("uint32_t show\n");
- size_t srclen = 0;
- while(*src){ printf("%d %d %x\n",(int) srclen,*src,*src); srclen++; src++; }
+ if(!src){
+ printf("uint32_t show <NULL>\n");
+ }
+ else {
+ printf("uint32_t show\n");
+ size_t srclen = 0;
+ while(*src){ printf("%d %d %x\n",(int) srclen,*src,*src); srclen++; src++; }
+ }
}
/**
@@ -104,13 +119,19 @@ void wchartshow(
const wchar_t *src
){
uint32_t val;
- printf("wchar_t show\n");
- size_t srclen = 0;
- while(*src){
- val = *src; // because *src is wchar_t is not strictly an integer type, can cause warnings on next line
- printf("%d %d %x\n",(int) srclen,val,val);
- srclen++;
- src++;
+ if(!src){
+ printf("wchar_t show <NULL>\n");
+ }
+ else {
+ printf("wchar_t show\n");
+ size_t srclen = 0;
+ if(!src)return;
+ while(*src){
+ val = *src; // because *src is wchar_t is not strictly an integer type, can cause warnings on next line
+ printf("%d %d %x\n",(int) srclen,val,val);
+ srclen++;
+ src++;
+ }
}
}
@@ -127,7 +148,9 @@ size_t wchar16len(
const uint16_t *src
){
size_t srclen = 0;
- while(*src){ srclen++; src++; }
+ if(src){
+ while(*src){ srclen++; src++; }
+ }
return(srclen);
}
@@ -139,7 +162,9 @@ size_t wchar32len(
const uint32_t *src
){
size_t srclen = 0;
- while(*src){ srclen++; src++; }
+ if(src){
+ while(*src){ srclen++; src++; }
+ }
return(srclen);
}
@@ -154,9 +179,11 @@ void wchar16strncpy(
const uint16_t *src,
size_t nchars
){
- for(;nchars;nchars--,dst++,src++){
- *dst = *src;
- if(!*src)break;
+ if(src){
+ for(;nchars;nchars--,dst++,src++){
+ *dst = *src;
+ if(!*src)break;
+ }
}
}
@@ -172,8 +199,10 @@ void wchar16strncpypad(
const uint16_t *src,
size_t nchars
){
- for(;*src && nchars;nchars--,dst++,src++){ *dst = *src; }
- for(;nchars;nchars--,dst++){ *dst = 0; } // Pad the remainder
+ if(src){
+ for(;*src && nchars;nchars--,dst++,src++){ *dst = *src; }
+ for(;nchars;nchars--,dst++){ *dst = 0; } // Pad the remainder
+ }
}
/* For the following converstion functions, remember that iconv() modifies ALL of its parameters,
@@ -197,6 +226,7 @@ uint16_t *U_Utf32leToUtf16le(
char *dst,*dst2;
size_t srclen,dstlen,status;
+ if(!src)return(NULL);
if(max){ srclen = 4*max; }
else { srclen = 4 + 4*wchar32len(src); } //include terminator, length in BYTES
@@ -226,6 +256,8 @@ uint32_t *U_Utf16leToUtf32le(
char *dst,*dst2;
char *src2 = (char *) src;
size_t srclen,dstlen,status;
+
+ if(!src)return(NULL);
if(max){ srclen = 2*max; }
else { srclen = 2*wchar16len(src)+2; } // include terminator, length in BYTES
dstlen = 2*(2 + srclen); // This should always work
@@ -261,6 +293,8 @@ uint32_t *U_Latin1ToUtf32le(
char *dst,*dst2;
char *src2 = (char *) src;
size_t srclen,dstlen,status;
+
+ if(!src)return(NULL);
if(max){ srclen = max; }
else { srclen = strlen(src)+1; } // include terminator, length in BYTES
dstlen = sizeof(uint32_t)*(1 + srclen); // This should always work but might waste some space
@@ -290,6 +324,8 @@ uint32_t *U_Utf8ToUtf32le(
char *dst,*dst2;
char *src2 = (char *) src;
size_t srclen,dstlen,status;
+
+ if(!src)return(NULL);
if(max){ srclen = max; }
else { srclen = strlen(src)+1; } // include terminator, length in BYTES
dstlen = sizeof(uint32_t)*(1 + srclen); // This should always work but might waste some space
@@ -319,6 +355,8 @@ char *U_Utf32leToUtf8(
char *dst,*dst2;
char *src2 = (char *) src;
size_t srclen,dstlen,status;
+
+ if(!src)return(NULL);
if(max){ srclen = 4*max; }
else { srclen = 4*(1 + wchar32len(src)); } //include terminator, length in BYTES
dstlen = 1 + srclen; // This should always work but might waste some space
@@ -349,6 +387,7 @@ uint16_t *U_Utf8ToUtf16le(
size_t srclen,dstlen,status;
iconv_t conv;
+ if(!src)return(NULL);
if(max){ srclen = max; }
else { srclen = strlen(src)+1; } // include terminator, length in BYTES
dstlen = 2 * (1 + srclen); // this will always work, but may waste space
@@ -378,6 +417,8 @@ char *U_Utf16leToUtf8(
char *dst, *dst2;
char *ret=NULL;
size_t srclen,dstlen,status;
+
+ if(!src)return(NULL);
if(max){ srclen = 2*max; }
else { srclen = 2*(1 +wchar16len(src)); } //include terminator, length in BYTES
dstlen = 1 + 2*srclen; // this will always work, but may waste space
@@ -410,6 +451,8 @@ char *U_Utf16leToLatin1(
char *dst, *dst2;
char *ret=NULL;
size_t srclen,dstlen,status;
+
+ if(!src)return(NULL);
if(max){ srclen = 2*max; }
else { srclen = 2*(1 +wchar16len(src)); } //include terminator, length in BYTES
dstlen = 1 + srclen; // this will always work as latin1 is always 1 byte/character
diff --git a/src/libuemf/uwmf.c b/src/libuemf/uwmf.c
index a6ac963cb..be1feadea 100644
--- a/src/libuemf/uwmf.c
+++ b/src/libuemf/uwmf.c
@@ -19,11 +19,11 @@
/*
File: uwmf.c
-Version: 0.0.12
-Date: 25-NOV-2013
+Version: 0.0.13
+Date: 30-JAN-2014
Author: David Mathog, Biology Division, Caltech
email: mathog@caltech.edu
-Copyright: 2013 David Mathog and California Institute of Technology (Caltech)
+Copyright: 2014 David Mathog and California Institute of Technology (Caltech)
*/
#ifdef __cplusplus
@@ -4271,13 +4271,12 @@ char *U_WMRCREATEPATTERNBRUSH_set(
if(!Bm16 || !Pattern)return(NULL);
cbPat = (((Bm16->Width * Bm16->BitsPixel + 15) >> 4) << 1) * Bm16->Height;
- irecsize = U_SIZE_METARECORD + 14 + 4 + 18 + cbPat; /* core WMR + truncated Bm16 + pattern */
+ irecsize = U_SIZE_METARECORD + 14 + 18 + cbPat; /* core WMR + truncated Bm16 + 18 spaces bytes + pattern */
record = malloc(irecsize);
if(record){
U_WMRCORE_SETRECHEAD(record,irecsize,U_WMR_CREATEPATTERNBRUSH);
off = U_SIZE_METARECORD;
- memcpy(record + off, Bm16, 14); off+=14; /* Truncated bitmap16 object*/
- memset(record + off, 0, 4); off+=4; /* 4 bytes of its "bits", which are ignored */
+ memcpy(record + off, Bm16, 14); off+=14; /* Truncated bitmap16 object, last 4 bytes are to be ignored*/
memset(record + off, 0, 18); off+=18; /* 18 bytes of zero, which are ignored */
memcpy(record + off, Pattern, cbPat); /* The pattern array */
}
@@ -5359,7 +5358,7 @@ int U_WMRTEXTOUT_get(
){
int16_t L2;
int off;
- int size = U_WMRCORE_RECSAFE_get(contents, (U_SIZE_WMRPATBLT));
+ int size = U_WMRCORE_RECSAFE_get(contents, (U_SIZE_WMRTEXTOUT));
if(!size)return(0);
*Length = *(int16_t *)(contents + offsetof(U_WMRTEXTOUT, Length));
*string = contents + offsetof(U_WMRTEXTOUT, String); /* May not be null terminated!!! */
@@ -6851,12 +6850,15 @@ int U_WMRCREATEPATTERNBRUSH_get(
const char **Pattern
){
int off = U_SIZE_METARECORD;
- int size = U_WMRCORE_RECSAFE_get(contents, (U_SIZE_WMRSETDIBTODEV));
+ /* size in next one is
+ 6 (core header) + 14 (truncated bitmap16) + 18 bytes reserved + 2 bytes (at least) for data */
+ int size = U_WMRCORE_RECSAFE_get(contents, (U_SIZE_METARECORD + 14 + 18 + 2));
if(!size)return(0);
memset(Bm16, 0, U_SIZE_BITMAP16);
- memcpy(Bm16, contents + off, 14); /* BM16 is truncated in this record type */
+ /* BM16 is truncated in this record type to 14 bytes, last 4 bytes must be ignored, so they are not even copied */
+ memcpy(Bm16, contents + off, 10);
*pasize = (((Bm16->Width * Bm16->BitsPixel + 15) >> 4) << 1) * Bm16->Height;
- off += 36; /* skip [truncated bitmap16 object and 18 bytes of reserved */
+ off += 32; /* skip [14 bytes of truncated bitmap16 object and 18 bytes of reserved */
*Pattern = (contents + off);
return(size);
}
diff --git a/src/marker.cpp b/src/marker.cpp
index b9464186d..900f8a2ca 100644
--- a/src/marker.cpp
+++ b/src/marker.cpp
@@ -47,18 +47,15 @@ namespace {
bool markerRegistered = SPFactory::instance().registerObject("svg:marker", createMarker);
}
-SPMarker::SPMarker() : SPGroup() {
- this->aspect_clip = 0;
- this->aspect_align = 0;
- this->aspect_set = 0;
- this->markerUnits = 0;
- this->orient_auto = 0;
- this->markerUnits_set = 0;
- this->orient_set = 0;
- this->orient = 0;
-
- this->viewBox = Geom::OptRect();
- this->c2p.setIdentity();
+SPMarker::SPMarker() : SPGroup(), SPViewBox() {
+
+ this->markerUnits = 0;
+ this->markerUnits_set = 0;
+
+ this->orient_auto = 0;
+ this->orient_set = 0;
+ this->orient = 0;
+
this->views = NULL;
}
@@ -177,133 +174,14 @@ void SPMarker::set(unsigned int key, const gchar* value) {
break;
case SP_ATTR_VIEWBOX:
- this->viewBox = Geom::OptRect();
-
- if (value) {
- double x, y, width, height;
- char *eptr;
-
- /* fixme: We have to take original item affine into account */
- /* fixme: Think (Lauris) */
- eptr = (gchar *) value;
- x = g_ascii_strtod (eptr, &eptr);
-
- while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
- eptr++;
- }
-
- y = g_ascii_strtod (eptr, &eptr);
-
- while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
- eptr++;
- }
-
- width = g_ascii_strtod (eptr, &eptr);
-
- while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
- eptr++;
- }
-
- height = g_ascii_strtod (eptr, &eptr);
-
- while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
- eptr++;
- }
-
- if ((width > 0) && (height > 0)) {
- /* Set viewbox */
- this->viewBox = Geom::Rect(Geom::Point(x, y), Geom::Point(x + width, y + height));
- }
- }
-
- this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG);
- break;
+ set_viewBox( value );
+ this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG);
+ break;
case SP_ATTR_PRESERVEASPECTRATIO:
- /* Do setup before, so we can use break to escape */
- this->aspect_set = FALSE;
- this->aspect_align = SP_ASPECT_NONE;
- this->aspect_clip = SP_ASPECT_MEET;
-
- this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG);
-
- if (value) {
- int len;
- gchar c[256];
- const gchar *p, *e;
- unsigned int align, clip;
- p = value;
-
- while (*p && *p == 32) {
- p += 1;
- }
-
- if (!*p) {
- break;
- }
-
- e = p;
-
- while (*e && *e != 32) {
- e += 1;
- }
-
- len = e - p;
-
- if (len > 8) {
- break;
- }
-
- memcpy (c, value, len);
-
- c[len] = 0;
-
- /* Now the actual part */
- if (!strcmp (c, "none")) {
- align = SP_ASPECT_NONE;
- } else if (!strcmp (c, "xMinYMin")) {
- align = SP_ASPECT_XMIN_YMIN;
- } else if (!strcmp (c, "xMidYMin")) {
- align = SP_ASPECT_XMID_YMIN;
- } else if (!strcmp (c, "xMaxYMin")) {
- align = SP_ASPECT_XMAX_YMIN;
- } else if (!strcmp (c, "xMinYMid")) {
- align = SP_ASPECT_XMIN_YMID;
- } else if (!strcmp (c, "xMidYMid")) {
- align = SP_ASPECT_XMID_YMID;
- } else if (!strcmp (c, "xMaxYMid")) {
- align = SP_ASPECT_XMAX_YMID;
- } else if (!strcmp (c, "xMinYMax")) {
- align = SP_ASPECT_XMIN_YMAX;
- } else if (!strcmp (c, "xMidYMax")) {
- align = SP_ASPECT_XMID_YMAX;
- } else if (!strcmp (c, "xMaxYMax")) {
- align = SP_ASPECT_XMAX_YMAX;
- } else {
- break;
- }
-
- clip = SP_ASPECT_MEET;
-
- while (*e && *e == 32) {
- e += 1;
- }
-
- if (*e) {
- if (!strcmp (e, "meet")) {
- clip = SP_ASPECT_MEET;
- } else if (!strcmp (e, "slice")) {
- clip = SP_ASPECT_SLICE;
- } else {
- break;
- }
- }
-
- this->aspect_set = TRUE;
- this->aspect_align = align;
- this->aspect_clip = clip;
- }
- break;
+ set_preserveAspectRatio( value );
+ this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG);
+ break;
default:
SPGroup::set(key, value);
@@ -312,112 +190,23 @@ void SPMarker::set(unsigned int key, const gchar* value) {
}
void SPMarker::update(SPCtx *ctx, guint flags) {
- SPItemCtx rctx;
- // fixme: We have to set up clip here too
+ SPItemCtx ictx;
// Copy parent context
- rctx.flags = ctx->flags;
+ ictx.flags = ctx->flags;
// Initialize transformations
- rctx.i2doc = Geom::identity();
- rctx.i2vp = Geom::identity();
+ ictx.i2doc = Geom::identity();
+ ictx.i2vp = Geom::identity();
// Set up viewport
- rctx.viewport = Geom::Rect::from_xywh(0, 0, this->markerWidth.computed, this->markerHeight.computed);
-
- // Start with identity transform
- this->c2p.setIdentity();
-
- // Viewbox is always present, either implicitly or explicitly
- Geom::Rect vb;
- if (this->viewBox) {
- vb = *this->viewBox;
- } else {
- vb = rctx.viewport;
- }
-
- // Now set up viewbox transformation
-
- // Determine actual viewbox in viewport coordinates
- // double x = 0;
- // double y = 0;
- double width = 0;
- double height = 0;
-
- if (this->aspect_align == SP_ASPECT_NONE) {
- // x = 0.0;
- // y = 0.0;
- width = rctx.viewport.width();
- height = rctx.viewport.height();
- } else {
- double scalex, scaley, scale;
- // Things are getting interesting
- scalex = rctx.viewport.width() / (vb.width());
- scaley = rctx.viewport.height() / (vb.height());
- scale = (this->aspect_clip == SP_ASPECT_MEET) ? MIN (scalex, scaley) : MAX (scalex, scaley);
- width = (vb.width()) * scale;
- height = (vb.height()) * scale;
-
- // Now place viewbox to requested position
- /*switch (marker->aspect_align) {
- case SP_ASPECT_XMIN_YMIN:
- x = 0.0;
- y = 0.0;
- break;
- case SP_ASPECT_XMID_YMIN:
- x = 0.5 * (rctx.viewport.width() - width);
- y = 0.0;
- break;
- case SP_ASPECT_XMAX_YMIN:
- x = 1.0 * (rctx.viewport.width() - width);
- y = 0.0;
- break;
- case SP_ASPECT_XMIN_YMID:
- x = 0.0;
- y = 0.5 * (rctx.viewport.height() - height);
- break;
- case SP_ASPECT_XMID_YMID:
- x = 0.5 * (rctx.viewport.width() - width);
- y = 0.5 * (rctx.viewport.height() - height);
- break;
- case SP_ASPECT_XMAX_YMID:
- x = 1.0 * (rctx.viewport.width() - width);
- y = 0.5 * (rctx.viewport.height() - height);
- break;
- case SP_ASPECT_XMIN_YMAX:
- x = 0.0;
- y = 1.0 * (rctx.viewport.height() - height);
- break;
- case SP_ASPECT_XMID_YMAX:
- x = 0.5 * (rctx.viewport.width() - width);
- y = 1.0 * (rctx.viewport.height() - height);
- break;
- case SP_ASPECT_XMAX_YMAX:
- x = 1.0 * (rctx.viewport.width() - width);
- y = 1.0 * (rctx.viewport.height() - height);
- break;
- default:
- x = 0.0;
- y = 0.0;
- break;
- }*/
- }
-
- // TODO fixme: all that work is done to figure out x and y, which are just ignored. Check why.
+ ictx.viewport = Geom::Rect::from_xywh(0, 0, this->markerWidth.computed, this->markerHeight.computed);
- // viewbox transformation and reference translation
- this->c2p = Geom::Translate(-this->refX.computed, -this->refY.computed) *
- Geom::Scale(width / vb.width(), height / vb.height());
+ SPItemCtx rctx = get_rctx( &ictx );
- rctx.i2doc = this->c2p * rctx.i2doc;
-
- // If viewBox is set reinitialize child viewport
- // Otherwise it already correct
- if (this->viewBox) {
- rctx.viewport = *this->viewBox;
- rctx.i2vp = Geom::identity();
- }
+ // Shift according to refX, refY
+ this->c2p = Geom::Translate(this->viewBox.left()-this->refX.computed, this->viewBox.top()-this->refY.computed) * this->c2p;
// And invoke parent method
SPGroup::update((SPCtx *) &rctx, flags);
@@ -494,8 +283,12 @@ Inkscape::XML::Node* SPMarker::write(Inkscape::XML::Document *xml_doc, Inkscape:
}
Inkscape::DrawingItem* SPMarker::show(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) {
- // CPPIFY: correct?
- return SPGroup::show(drawing, key, flags);
+ // Markers in tree are never shown directly even if outside of <defs>.
+ return 0;
+}
+
+Inkscape::DrawingItem* SPMarker::private_show(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags) {
+ return SPGroup::show(drawing, key, flags);
}
void SPMarker::hide(unsigned int key) {
@@ -575,7 +368,7 @@ sp_marker_show_instance ( SPMarker *marker, Inkscape::DrawingItem *parent,
}
if (!v->items[pos]) {
/* Parent class ::show method */
- v->items[pos] = marker->show(parent->drawing(), key, SP_ITEM_REFERENCE_FLAGS);
+ v->items[pos] = marker->private_show(parent->drawing(), key, SP_ITEM_REFERENCE_FLAGS);
if (v->items[pos]) {
/* fixme: Position (Lauris) */
diff --git a/src/marker.h b/src/marker.h
index b780950de..21ad63a41 100644
--- a/src/marker.h
+++ b/src/marker.h
@@ -31,8 +31,9 @@ struct SPMarkerView;
#include "sp-item-group.h"
#include "sp-marker-loc.h"
#include "uri-references.h"
+#include "viewbox.h"
-class SPMarker : public SPGroup {
+class SPMarker : public SPGroup, public SPViewBox {
public:
SPMarker();
virtual ~SPMarker();
@@ -54,17 +55,6 @@ public:
unsigned int orient_auto : 1;
float orient;
- /* viewBox; */
- Geom::OptRect viewBox;
-
- /* preserveAspectRatio */
- unsigned int aspect_set : 1;
- unsigned int aspect_align : 4;
- unsigned int aspect_clip : 1;
-
- /* Child to parent additional transform */
- Geom::Affine c2p;
-
/* Private views */
SPMarkerView *views;
@@ -75,6 +65,7 @@ public:
virtual Inkscape::XML::Node* write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags);
virtual Inkscape::DrawingItem* show(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags);
+ virtual Inkscape::DrawingItem* private_show(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags);
virtual void hide(unsigned int key);
virtual Geom::OptRect bbox(Geom::Affine const &transform, SPItem::BBoxType type) const;
diff --git a/src/sp-image.cpp b/src/sp-image.cpp
index 8f7a60ca6..5f630f7b7 100644
--- a/src/sp-image.cpp
+++ b/src/sp-image.cpp
@@ -119,14 +119,12 @@ SPObject* createImage() {
bool imageRegistered = SPFactory::instance().registerObject("svg:image", createImage);
}
-SPImage::SPImage() : SPItem() {
- this->aspect_clip = 0;
+SPImage::SPImage() : SPItem(), SPViewBox() {
this->x.unset();
this->y.unset();
this->width.unset();
this->height.unset();
- this->aspect_align = SP_ASPECT_NONE;
this->clipbox = Geom::Rect();
this->sx = this->sy = 1.0;
this->ox = this->oy = 0.0;
@@ -195,8 +193,8 @@ void SPImage::set(unsigned int key, const gchar* value) {
break;
case SP_ATTR_X:
- if (!this->x.readAbsolute(value)) {
- /* fixme: em, ex, % are probably valid, but require special treatment (Lauris) */
+ /* ex, em not handled correctly. */
+ if (!this->x.read(value)) {
this->x.unset();
}
@@ -204,8 +202,8 @@ void SPImage::set(unsigned int key, const gchar* value) {
break;
case SP_ATTR_Y:
- if (!this->y.readAbsolute(value)) {
- /* fixme: em, ex, % are probably valid, but require special treatment (Lauris) */
+ /* ex, em not handled correctly. */
+ if (!this->y.read(value)) {
this->y.unset();
}
@@ -213,8 +211,8 @@ void SPImage::set(unsigned int key, const gchar* value) {
break;
case SP_ATTR_WIDTH:
- if (!this->width.readAbsolute(value)) {
- /* fixme: em, ex, % are probably valid, but require special treatment (Lauris) */
+ /* ex, em not handled correctly. */
+ if (!this->width.read(value)) {
this->width.unset();
}
@@ -222,8 +220,8 @@ void SPImage::set(unsigned int key, const gchar* value) {
break;
case SP_ATTR_HEIGHT:
- if (!this->height.readAbsolute(value)) {
- /* fixme: em, ex, % are probably valid, but require special treatment (Lauris) */
+ /* ex, em not handled correctly. */
+ if (!this->height.read(value)) {
this->height.unset();
}
@@ -231,67 +229,8 @@ void SPImage::set(unsigned int key, const gchar* value) {
break;
case SP_ATTR_PRESERVEASPECTRATIO:
- /* Do setup before, so we can use break to escape */
- this->aspect_align = SP_ASPECT_NONE;
- this->aspect_clip = SP_ASPECT_MEET;
+ set_preserveAspectRatio( value );
this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG);
-
- if (value) {
- int len;
- gchar c[256];
- const gchar *p, *e;
- unsigned int align, clip;
- p = value;
- while (*p && *p == 32) p += 1;
- if (!*p) break;
- e = p;
- while (*e && *e != 32) e += 1;
- len = e - p;
- if (len > 8) break;
- memcpy (c, value, len);
- c[len] = 0;
- /* Now the actual part */
- if (!strcmp (c, "none")) {
- align = SP_ASPECT_NONE;
- } else if (!strcmp (c, "xMinYMin")) {
- align = SP_ASPECT_XMIN_YMIN;
- } else if (!strcmp (c, "xMidYMin")) {
- align = SP_ASPECT_XMID_YMIN;
- } else if (!strcmp (c, "xMaxYMin")) {
- align = SP_ASPECT_XMAX_YMIN;
- } else if (!strcmp (c, "xMinYMid")) {
- align = SP_ASPECT_XMIN_YMID;
- } else if (!strcmp (c, "xMidYMid")) {
- align = SP_ASPECT_XMID_YMID;
- } else if (!strcmp (c, "xMaxYMid")) {
- align = SP_ASPECT_XMAX_YMID;
- } else if (!strcmp (c, "xMinYMax")) {
- align = SP_ASPECT_XMIN_YMAX;
- } else if (!strcmp (c, "xMidYMax")) {
- align = SP_ASPECT_XMID_YMAX;
- } else if (!strcmp (c, "xMaxYMax")) {
- align = SP_ASPECT_XMAX_YMAX;
- } else {
- break;
- }
-
- clip = SP_ASPECT_MEET;
-
- while (*e && *e == 32) e += 1;
-
- if (*e) {
- if (!strcmp (e, "meet")) {
- clip = SP_ASPECT_MEET;
- } else if (!strcmp (e, "slice")) {
- clip = SP_ASPECT_SLICE;
- } else {
- break;
- }
- }
-
- this->aspect_align = align;
- this->aspect_clip = clip;
- }
break;
#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
@@ -322,7 +261,79 @@ void SPImage::set(unsigned int key, const gchar* value) {
sp_image_set_curve(this); //creates a curve at the image's boundary for snapping
}
+// BLIP
+#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
+void SPImage::apply_profile(Inkscape::Pixbuf *pixbuf) {
+
+ // TODO: this will prevent using MIME data when exporting.
+ // Integrate color correction into loading.
+ pixbuf->ensurePixelFormat(Inkscape::Pixbuf::PF_GDK);
+ int imagewidth = pixbuf->width();
+ int imageheight = pixbuf->height();
+ int rowstride = pixbuf->rowstride();;
+ guchar* px = pixbuf->pixels();
+
+ if ( px ) {
+ DEBUG_MESSAGE( lcmsFive, "in <image>'s sp_image_update. About to call colorprofile_get_handle()" );
+
+ guint profIntent = Inkscape::RENDERING_INTENT_UNKNOWN;
+ cmsHPROFILE prof = Inkscape::CMSSystem::getHandle( this->document,
+ &profIntent,
+ this->color_profile );
+ if ( prof ) {
+ cmsProfileClassSignature profileClass = cmsGetDeviceClass( prof );
+ if ( profileClass != cmsSigNamedColorClass ) {
+ int intent = INTENT_PERCEPTUAL;
+
+ switch ( profIntent ) {
+ case Inkscape::RENDERING_INTENT_RELATIVE_COLORIMETRIC:
+ intent = INTENT_RELATIVE_COLORIMETRIC;
+ break;
+ case Inkscape::RENDERING_INTENT_SATURATION:
+ intent = INTENT_SATURATION;
+ break;
+ case Inkscape::RENDERING_INTENT_ABSOLUTE_COLORIMETRIC:
+ intent = INTENT_ABSOLUTE_COLORIMETRIC;
+ break;
+ case Inkscape::RENDERING_INTENT_PERCEPTUAL:
+ case Inkscape::RENDERING_INTENT_UNKNOWN:
+ case Inkscape::RENDERING_INTENT_AUTO:
+ default:
+ intent = INTENT_PERCEPTUAL;
+ }
+
+ cmsHPROFILE destProf = cmsCreate_sRGBProfile();
+ cmsHTRANSFORM transf = cmsCreateTransform( prof,
+ TYPE_RGBA_8,
+ destProf,
+ TYPE_RGBA_8,
+ intent, 0 );
+ if ( transf ) {
+ guchar* currLine = px;
+ for ( int y = 0; y < imageheight; y++ ) {
+ // Since the types are the same size, we can do the transformation in-place
+ cmsDoTransform( transf, currLine, currLine, imagewidth );
+ currLine += rowstride;
+ }
+
+ cmsDeleteTransform( transf );
+ } else {
+ DEBUG_MESSAGE( lcmsSix, "in <image>'s sp_image_update. Unable to create LCMS transform." );
+ }
+
+ cmsCloseProfile( destProf );
+ } else {
+ DEBUG_MESSAGE( lcmsSeven, "in <image>'s sp_image_update. Profile type is named color. Can't transform." );
+ }
+ } else {
+ DEBUG_MESSAGE( lcmsEight, "in <image>'s sp_image_update. No profile found." );
+ }
+ }
+}
+#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
+
void SPImage::update(SPCtx *ctx, unsigned int flags) {
+
SPDocument *doc = this->document;
SPItem::update(ctx, flags);
@@ -339,170 +350,84 @@ void SPImage::update(SPCtx *ctx, unsigned int flags) {
doc->getBase());
if (pixbuf) {
-// BLIP
#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
- if ( this->color_profile )
- {
- // TODO: this will prevent using MIME data when exporting.
- // Integrate color correction into loading.
- pixbuf->ensurePixelFormat(Inkscape::Pixbuf::PF_GDK);
- int imagewidth = pixbuf->width();
- int imageheight = pixbuf->height();
- int rowstride = pixbuf->rowstride();;
- guchar* px = pixbuf->pixels();
-
- if ( px ) {
- DEBUG_MESSAGE( lcmsFive, "in <image>'s sp_image_update. About to call colorprofile_get_handle()" );
-
- guint profIntent = Inkscape::RENDERING_INTENT_UNKNOWN;
- cmsHPROFILE prof = Inkscape::CMSSystem::getHandle( this->document,
- &profIntent,
- this->color_profile );
- if ( prof ) {
- cmsProfileClassSignature profileClass = cmsGetDeviceClass( prof );
- if ( profileClass != cmsSigNamedColorClass ) {
- int intent = INTENT_PERCEPTUAL;
-
- switch ( profIntent ) {
- case Inkscape::RENDERING_INTENT_RELATIVE_COLORIMETRIC:
- intent = INTENT_RELATIVE_COLORIMETRIC;
- break;
- case Inkscape::RENDERING_INTENT_SATURATION:
- intent = INTENT_SATURATION;
- break;
- case Inkscape::RENDERING_INTENT_ABSOLUTE_COLORIMETRIC:
- intent = INTENT_ABSOLUTE_COLORIMETRIC;
- break;
- case Inkscape::RENDERING_INTENT_PERCEPTUAL:
- case Inkscape::RENDERING_INTENT_UNKNOWN:
- case Inkscape::RENDERING_INTENT_AUTO:
- default:
- intent = INTENT_PERCEPTUAL;
- }
-
- cmsHPROFILE destProf = cmsCreate_sRGBProfile();
- cmsHTRANSFORM transf = cmsCreateTransform( prof,
- TYPE_RGBA_8,
- destProf,
- TYPE_RGBA_8,
- intent, 0 );
- if ( transf ) {
- guchar* currLine = px;
- for ( int y = 0; y < imageheight; y++ ) {
- // Since the types are the same size, we can do the transformation in-place
- cmsDoTransform( transf, currLine, currLine, imagewidth );
- currLine += rowstride;
- }
-
- cmsDeleteTransform( transf );
- } else {
- DEBUG_MESSAGE( lcmsSix, "in <image>'s sp_image_update. Unable to create LCMS transform." );
- }
-
- cmsCloseProfile( destProf );
- } else {
- DEBUG_MESSAGE( lcmsSeven, "in <image>'s sp_image_update. Profile type is named color. Can't transform." );
- }
- } else {
- DEBUG_MESSAGE( lcmsEight, "in <image>'s sp_image_update. No profile found." );
- }
- }
- }
-#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
-
+ if ( this->color_profile ) apply_profile( pixbuf );
+#endif
this->pixbuf = pixbuf;
}
}
}
+ SPItemCtx *ictx = (SPItemCtx *) ctx;
+
+ // Why continue without a pixbuf? So we can display "Missing Image" png.
+ // Eventually, we should properly support SVG image type (i.e. render it ourselves).
+
if (this->pixbuf) {
- /* fixme: We are slightly violating spec here (Lauris) */
+ if (!this->x._set) {
+ this->x.unit = SVGLength::PX;
+ this->x.computed = 0;
+ }
+
+ if (!this->y._set) {
+ this->y.unit = SVGLength::PX;
+ this->y.computed = 0;
+ }
+
if (!this->width._set) {
+ this->width.unit = SVGLength::PX;
this->width.computed = this->pixbuf->width();
}
if (!this->height._set) {
+ this->height.unit = SVGLength::PX;
this->height.computed = this->pixbuf->height();
}
}
- this->clipbox = Geom::Rect::from_xywh(
- this->x.computed, this->y.computed,
- this->width.computed, this->height.computed);
+
+ // Calculate x, y, width, height from parent/initial viewport, see sp-root.cpp
+ if (this->x.unit == SVGLength::PERCENT) {
+ this->x.computed = this->x.value * ictx->viewport.width();
+ }
+
+ if (this->y.unit == SVGLength::PERCENT) {
+ this->y.computed = this->y.value * ictx->viewport.height();
+ }
+
+ if (this->width.unit == SVGLength::PERCENT) {
+ this->width.computed = this->width.value * ictx->viewport.width();
+ }
+
+ if (this->height.unit == SVGLength::PERCENT) {
+ this->height.computed = this->height.value * ictx->viewport.height();
+ }
+
+ // Image creates a new viewport
+ ictx->viewport= Geom::Rect::from_xywh( this->x.computed, this->y.computed,
+ this->width.computed, this->height.computed);
+
+ this->clipbox = ictx->viewport;
this->ox = this->x.computed;
this->oy = this->y.computed;
if (this->pixbuf) {
- int pixwidth = this->pixbuf->width();
- int pixheight = this->pixbuf->height();
-
- this->sx = this->width.computed / pixwidth;
- this->sy = this->height.computed / pixheight;
-
- // preserveAspectRatio calculate bounds / clipping rectangle -- EAF
- if (this->aspect_align != SP_ASPECT_NONE) {
- double x, y;
-
- switch (this->aspect_align) {
- case SP_ASPECT_XMIN_YMIN:
- x = 0.0;
- y = 0.0;
- break;
- case SP_ASPECT_XMID_YMIN:
- x = 0.5;
- y = 0.0;
- break;
- case SP_ASPECT_XMAX_YMIN:
- x = 1.0;
- y = 0.0;
- break;
- case SP_ASPECT_XMIN_YMID:
- x = 0.0;
- y = 0.5;
- break;
- case SP_ASPECT_XMID_YMID:
- x = 0.5;
- y = 0.5;
- break;
- case SP_ASPECT_XMAX_YMID:
- x = 1.0;
- y = 0.5;
- break;
- case SP_ASPECT_XMIN_YMAX:
- x = 0.0;
- y = 1.0;
- break;
- case SP_ASPECT_XMID_YMAX:
- x = 0.5;
- y = 1.0;
- break;
- case SP_ASPECT_XMAX_YMAX:
- x = 1.0;
- y = 1.0;
- break;
- default:
- x = 0.0;
- y = 0.0;
- break;
- }
- if (this->aspect_clip == SP_ASPECT_SLICE) {
- double scale = std::max(this->sx, this->sy);
- this->sx = scale;
- this->sy = scale;
- } else {
- double scale = std::min(this->sx, this->sy);
- this->sx = scale;
- this->sy = scale;
- }
+ // Viewbox is either from SVG (not supported) or dimensions of pixbuf (PNG, JPG)
+ this->viewBox = Geom::Rect::from_xywh(0, 0, this->pixbuf->width(), this->pixbuf->height());
+ this->viewBox_set = true;
- double vw = pixwidth * this->sx;
- double vh = pixheight * this->sy;
- this->ox += x * (this->width.computed - vw);
- this->oy += y * (this->height.computed - vh);
- }
+ // SPItemCtx rctx =
+ get_rctx( ictx );
+
+ this->ox = c2p[4];
+ this->oy = c2p[5];
+ this->sx = c2p[0];
+ this->sy = c2p[3];
}
+
+ // TODO: eliminate ox, oy, sx, sy
sp_image_update_canvas_image ((SPImage *) this);
}
diff --git a/src/sp-image.h b/src/sp-image.h
index 3b7208487..50eb731d7 100644
--- a/src/sp-image.h
+++ b/src/sp-image.h
@@ -18,6 +18,7 @@
#include <glibmm/ustring.h>
#include "svg/svg-length.h"
#include "sp-shape.h"
+#include "viewbox.h"
#define SP_IMAGE(obj) (dynamic_cast<SPImage*>((SPObject*)obj))
#define SP_IS_IMAGE(obj) (dynamic_cast<const SPImage*>((SPObject*)obj) != NULL)
@@ -25,7 +26,7 @@
#define SP_IMAGE_HREF_MODIFIED_FLAG SP_OBJECT_USER_MODIFIED_FLAG_A
namespace Inkscape { class Pixbuf; }
-class SPImage : public SPItem {
+class SPImage : public SPItem, public SPViewBox {
public:
SPImage();
virtual ~SPImage();
@@ -39,13 +40,6 @@ public:
double sx, sy;
double ox, oy;
- // Added by EAF
- /* preserveAspectRatio */
- unsigned int aspect_align : 4;
- unsigned int aspect_clip : 1;
- //int trimx, trimy, trimwidth, trimheight;
- //double viewx, viewy, viewwidth, viewheight;
-
SPCurve *curve; // This curve is at the image's boundary for snapping
gchar *href;
@@ -69,6 +63,10 @@ public:
virtual Inkscape::DrawingItem* show(Inkscape::Drawing &drawing, unsigned int key, unsigned int flags);
virtual void snappoints(std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs) const;
virtual Geom::Affine set_transform(Geom::Affine const &transform);
+
+#if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
+ void apply_profile(Inkscape::Pixbuf *pixbuf);
+#endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2)
};
/* Return duplicate of curve or NULL */
diff --git a/src/sp-mesh-array.cpp b/src/sp-mesh-array.cpp
index 5a204e8b0..ab14e75d2 100644
--- a/src/sp-mesh-array.cpp
+++ b/src/sp-mesh-array.cpp
@@ -1925,10 +1925,10 @@ guint SPMeshNodeArray::color_pick( std::vector<guint> icorners, SPItem* item ) {
/* Find visible area */
cairo_surface_t *s = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, ibox.width(), ibox.height());
- Inkscape::DrawingContext ct(s, ibox.min());
+ Inkscape::DrawingContext dc(s, ibox.min());
/* Render copy and pick color */
- pick_drawing->render(ct, ibox);
+ pick_drawing->render(dc, ibox);
double R = 0, G = 0, B = 0, A = 0;
ink_cairo_surface_average_color(s, R, G, B, A);
cairo_surface_destroy(s);
diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp
index ad5449f34..425ca9efa 100644
--- a/src/sp-pattern.cpp
+++ b/src/sp-pattern.cpp
@@ -53,7 +53,7 @@ namespace {
bool patternRegistered = SPFactory::instance().registerObject("svg:pattern", createPattern);
}
-SPPattern::SPPattern() : SPPaintServer() {
+SPPattern::SPPattern() : SPPaintServer(), SPViewBox() {
this->href = NULL;
this->ref = new SPPatternReference(this);
@@ -72,8 +72,6 @@ SPPattern::SPPattern() : SPPaintServer() {
this->y.unset();
this->width.unset();
this->height.unset();
-
- this->viewBox_set = FALSE;
}
SPPattern::~SPPattern() {
@@ -90,6 +88,7 @@ void SPPattern::build(SPDocument* doc, Inkscape::XML::Node* repr) {
this->readAttr( "width" );
this->readAttr( "height" );
this->readAttr( "viewBox" );
+ this->readAttr( "preserveAspectRatio" );
this->readAttr( "xlink:href" );
/* Register ourselves */
@@ -180,50 +179,16 @@ void SPPattern::set(unsigned int key, const gchar* value) {
this->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
- case SP_ATTR_VIEWBOX: {
- /* fixme: Think (Lauris) */
- double x, y, width, height;
- char *eptr;
-
- if (value) {
- eptr = (gchar *) value;
- x = g_ascii_strtod (eptr, &eptr);
-
- while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
- eptr++;
- }
-
- y = g_ascii_strtod (eptr, &eptr);
-
- while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
- eptr++;
- }
-
- width = g_ascii_strtod (eptr, &eptr);
-
- while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
- eptr++;
- }
-
- height = g_ascii_strtod (eptr, &eptr);
-
- while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
- eptr++;
- }
+ case SP_ATTR_VIEWBOX:
+ set_viewBox( value );
+ this->requestModified(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG);
+ break;
- if ((width > 0) && (height > 0)) {
- this->viewBox = Geom::Rect::from_xywh(x, y, width, height);
- this->viewBox_set = TRUE;
- } else {
- this->viewBox_set = FALSE;
- }
- } else {
- this->viewBox_set = FALSE;
- }
+ case SP_ATTR_PRESERVEASPECTRATIO:
+ set_preserveAspectRatio( value );
+ this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG);
+ break;
- this->requestModified(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG);
- break;
- }
case SP_ATTR_XLINK_HREF:
if ( value && this->href && ( strcmp(value, this->href) == 0 ) ) {
/* Href unchanged, do nothing. */
@@ -674,25 +639,25 @@ cairo_pattern_t* SPPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &b
// Create drawing surface with size of pattern tile (in tile space) but with number of pixels
// based on required resolution (c).
Inkscape::DrawingSurface pattern_surface(pattern_tile, c.ceil());
- Inkscape::DrawingContext ct(pattern_surface);
+ Inkscape::DrawingContext dc(pattern_surface);
pattern_tile *= pattern_surface.drawingTransform();
Geom::IntRect one_tile = pattern_tile.roundOutwards();
// render pattern.
if (needs_opacity) {
- ct.pushGroup(); // this group is for pattern + opacity
+ dc.pushGroup(); // this group is for pattern + opacity
}
// TODO: make sure there are no leaks.
Inkscape::UpdateContext ctx; // UpdateContext is structure with only ctm!
ctx.ctm = vb2ps * pattern_surface.drawingTransform();
- ct.transform( pattern_surface.drawingTransform().inverse() );
+ dc.transform( pattern_surface.drawingTransform().inverse() );
drawing.update(Geom::IntRect::infinite(), ctx);
// Render drawing to pattern_surface via drawing context, this calls root->render
// which is really DrawingItem->render().
- drawing.render(ct, one_tile);
+ drawing.render(dc, one_tile);
for (SPObject *child = shown->firstChild() ; child != NULL; child = child->getNext() ) {
if (SP_IS_ITEM (child)) {
SP_ITEM(child)->invoke_hide(dkey);
@@ -708,8 +673,8 @@ cairo_pattern_t* SPPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &b
// cairo_surface_write_to_png( pattern_surface.raw(), "sp-pattern.png" );
if (needs_opacity) {
- ct.popGroupToSource(); // pop raw pattern
- ct.paint(opacity); // apply opacity
+ dc.popGroupToSource(); // pop raw pattern
+ dc.paint(opacity); // apply opacity
}
cairo_pattern_t *cp = cairo_pattern_create_for_surface(pattern_surface.raw());
diff --git a/src/sp-pattern.h b/src/sp-pattern.h
index 4e3657ccf..f69ba10b3 100644
--- a/src/sp-pattern.h
+++ b/src/sp-pattern.h
@@ -25,12 +25,13 @@ class SPPatternReference;
#include "svg/svg-length.h"
#include "sp-paint-server.h"
#include "uri-references.h"
+#include "viewbox.h"
#include <stddef.h>
#include <sigc++/connection.h>
-class SPPattern : public SPPaintServer {
+class SPPattern : public SPPaintServer, public SPViewBox {
public:
SPPattern();
virtual ~SPPattern();
@@ -52,9 +53,6 @@ public:
SVGLength y;
SVGLength width;
SVGLength height;
- /* VieBox */
- Geom::Rect viewBox;
- guint viewBox_set : 1;
sigc::connection modified_connection;
diff --git a/src/sp-root.cpp b/src/sp-root.cpp
index 5466649a2..bc870b116 100644
--- a/src/sp-root.cpp
+++ b/src/sp-root.cpp
@@ -42,12 +42,9 @@ SPObject *createRoot()
bool rootRegistered = SPFactory::instance().registerObject("svg:svg", createRoot);
}
-SPRoot::SPRoot() : SPGroup()
+SPRoot::SPRoot() : SPGroup(), SPViewBox()
{
- this->aspect_set = 0;
- this->aspect_align = 0;
this->onload = NULL;
- this->aspect_clip = 0;
static Inkscape::Version const zero_version(0, 0);
@@ -57,15 +54,11 @@ SPRoot::SPRoot() : SPGroup()
this->version.inkscape = zero_version;
this->original.inkscape = zero_version;
- this->x.unset();
- this->y.unset();
+ this->x.unset(SVGLength::PERCENT, 0.0, 0.0); // Ignored for root SVG element
+ this->y.unset(SVGLength::PERCENT, 0.0, 0.0);
this->width.unset(SVGLength::PERCENT, 1.0, 1.0);
this->height.unset(SVGLength::PERCENT, 1.0, 1.0);
- this->viewBox_set = false;
-
- this->c2p.setIdentity();
-
this->defs = NULL;
}
@@ -129,9 +122,9 @@ void SPRoot::set(unsigned int key, const gchar *value)
break;
case SP_ATTR_X:
- if (!this->x.readAbsolute(value)) {
- /* fixme: em, ex, % are probably valid, but require special treatment (Lauris) */
- this->x.unset();
+ /* Valid for non-root SVG elements; ex, em not handled correctly. */
+ if (!this->x.read(value)) {
+ this->x.unset(SVGLength::PERCENT, 0.0, 0.0);
}
/* fixme: I am almost sure these do not require viewport flag (Lauris) */
@@ -139,9 +132,9 @@ void SPRoot::set(unsigned int key, const gchar *value)
break;
case SP_ATTR_Y:
- if (!this->y.readAbsolute(value)) {
- /* fixme: em, ex, % are probably valid, but require special treatment (Lauris) */
- this->y.unset();
+ /* Valid for non-root SVG elements; ex, em not handled correctly. */
+ if (!this->y.read(value)) {
+ this->y.unset(SVGLength::PERCENT, 0.0, 0.0);
}
/* fixme: I am almost sure these do not require viewport flag (Lauris) */
@@ -149,153 +142,27 @@ void SPRoot::set(unsigned int key, const gchar *value)
break;
case SP_ATTR_WIDTH:
- if (!this->width.readAbsolute(value) || !(this->width.computed > 0.0)) {
- /* fixme: em, ex, % are probably valid, but require special treatment (Lauris) */
+ if (!this->width.read(value) || !(this->width.computed > 0.0)) {
this->width.unset(SVGLength::PERCENT, 1.0, 1.0);
}
-
this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG);
break;
case SP_ATTR_HEIGHT:
- if (!this->height.readAbsolute(value) || !(this->height.computed > 0.0)) {
- /* fixme: em, ex, % are probably valid, but require special treatment (Lauris) */
+ if (!this->height.read(value) || !(this->height.computed > 0.0)) {
this->height.unset(SVGLength::PERCENT, 1.0, 1.0);
}
-
this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG);
break;
case SP_ATTR_VIEWBOX:
- if (value) {
- double x, y, width, height;
- char *eptr;
-
- /* fixme: We have to take original item affine into account */
- /* fixme: Think (Lauris) */
- eptr = (gchar *) value;
- x = g_ascii_strtod(eptr, &eptr);
-
- while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
- eptr++;
- }
-
- y = g_ascii_strtod(eptr, &eptr);
-
- while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
- eptr++;
- }
-
- width = g_ascii_strtod(eptr, &eptr);
-
- while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
- eptr++;
- }
-
- height = g_ascii_strtod(eptr, &eptr);
-
- while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
- eptr++;
- }
-
- if ((width > 0) && (height > 0)) {
- /* Set viewbox */
- this->viewBox = Geom::Rect::from_xywh(x, y, width, height);
- this->viewBox_set = TRUE;
- } else {
- this->viewBox_set = FALSE;
- }
- } else {
- this->viewBox_set = FALSE;
- }
-
+ set_viewBox( value );
this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG);
break;
case SP_ATTR_PRESERVEASPECTRATIO:
- /* Do setup before, so we can use break to escape */
- this->aspect_set = FALSE;
- this->aspect_align = SP_ASPECT_XMID_YMID;
- this->aspect_clip = SP_ASPECT_MEET;
-
+ set_preserveAspectRatio( value );
this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG);
-
- if (value) {
- int len;
- gchar c[256];
- gchar const *p, *e;
- unsigned int align, clip;
- p = value;
-
- while (*p && *p == 32) {
- p += 1;
- }
-
- if (!*p) {
- break;
- }
-
- e = p;
-
- while (*e && *e != 32) {
- e += 1;
- }
-
- len = e - p;
-
- if (len > 8) {
- break;
- }
-
- memcpy(c, value, len);
-
- c[len] = 0;
-
- /* Now the actual part */
- if (!strcmp(c, "none")) {
- align = SP_ASPECT_NONE;
- } else if (!strcmp(c, "xMinYMin")) {
- align = SP_ASPECT_XMIN_YMIN;
- } else if (!strcmp(c, "xMidYMin")) {
- align = SP_ASPECT_XMID_YMIN;
- } else if (!strcmp(c, "xMaxYMin")) {
- align = SP_ASPECT_XMAX_YMIN;
- } else if (!strcmp(c, "xMinYMid")) {
- align = SP_ASPECT_XMIN_YMID;
- } else if (!strcmp(c, "xMidYMid")) {
- align = SP_ASPECT_XMID_YMID;
- } else if (!strcmp(c, "xMaxYMid")) {
- align = SP_ASPECT_XMAX_YMID;
- } else if (!strcmp(c, "xMinYMax")) {
- align = SP_ASPECT_XMIN_YMAX;
- } else if (!strcmp(c, "xMidYMax")) {
- align = SP_ASPECT_XMID_YMAX;
- } else if (!strcmp(c, "xMaxYMax")) {
- align = SP_ASPECT_XMAX_YMAX;
- } else {
- break;
- }
-
- clip = SP_ASPECT_MEET;
-
- while (*e && *e == 32) {
- e += 1;
- }
-
- if (*e) {
- if (!strcmp(e, "meet")) {
- clip = SP_ASPECT_MEET;
- } else if (!strcmp(e, "slice")) {
- clip = SP_ASPECT_SLICE;
- } else {
- break;
- }
- }
-
- this->aspect_set = TRUE;
- this->aspect_align = align;
- this->aspect_clip = clip;
- }
break;
case SP_ATTR_ONLOAD:
@@ -356,141 +223,75 @@ void SPRoot::update(SPCtx *ctx, guint flags)
{
SPItemCtx *ictx = (SPItemCtx *) ctx;
- /* fixme: This will be invoked too often (Lauris) */
- /* fixme: We should calculate only if parent viewport has changed (Lauris) */
- /* If position is specified as percentage, calculate actual values */
- if (this->x.unit == SVGLength::PERCENT) {
- this->x.computed = this->x.value * ictx->viewport.width();
- }
-
- if (this->y.unit == SVGLength::PERCENT) {
- this->y.computed = this->y.value * ictx->viewport.height();
- }
-
- if (this->width.unit == SVGLength::PERCENT) {
- this->width.computed = this->width.value * ictx->viewport.width();
- }
-
- if (this->height.unit == SVGLength::PERCENT) {
- this->height.computed = this->height.value * ictx->viewport.height();
- }
-
- /* Create copy of item context */
- SPItemCtx rctx = *ictx;
-
- /* Calculate child to parent transformation */
- this->c2p.setIdentity();
+ if( !this->parent ) {
- if (this->parent) {
/*
- * fixme: I am not sure whether setting x and y does or does not
- * fixme: translate the content of inner SVG.
- * fixme: Still applying translation and setting viewport to width and
- * fixme: height seems natural, as this makes the inner svg element
- * fixme: self-contained. The spec is vague here.
+ * This is the root SVG element:
+ *
+ * x, y, width, and height apply to positioning the SVG element inside a parent.
+ * For the root SVG in Inkscape there is no parent, thus special rules apply:
+ * If width, height not set, width = 100%, height = 100% (as always).
+ * If width and height are in percent, they are percent of viewBox width/height.
+ * If width, height, and viewBox are not set... pick "random" width/height.
+ * x, y are ignored.
+ * initial viewport = (0 0 width height)
*/
- this->c2p = Geom::Affine(Geom::Translate(this->x.computed, this->y.computed));
- }
-
- if (this->viewBox_set) {
- double x, y, width, height;
- /* Determine actual viewbox in viewport coordinates */
- if (this->aspect_align == SP_ASPECT_NONE) {
- x = 0.0;
- y = 0.0;
- width = this->width.computed;
- height = this->height.computed;
- } else {
- double scalex, scaley, scale;
- /* Things are getting interesting */
- scalex = this->width.computed / this->viewBox.width();
- scaley = this->height.computed / this->viewBox.height();
- scale = (this->aspect_clip == SP_ASPECT_MEET) ? MIN(scalex, scaley) : MAX(scalex, scaley);
- width = this->viewBox.width() * scale;
- height = this->viewBox.height() * scale;
-
- /* Now place viewbox to requested position */
- /* todo: Use an array lookup to find the 0.0/0.5/1.0 coefficients,
- as is done for dialogs/align.cpp. */
- switch (this->aspect_align) {
- case SP_ASPECT_XMIN_YMIN:
- x = 0.0;
- y = 0.0;
- break;
-
- case SP_ASPECT_XMID_YMIN:
- x = 0.5 * (this->width.computed - width);
- y = 0.0;
- break;
-
- case SP_ASPECT_XMAX_YMIN:
- x = 1.0 * (this->width.computed - width);
- y = 0.0;
- break;
-
- case SP_ASPECT_XMIN_YMID:
- x = 0.0;
- y = 0.5 * (this->height.computed - height);
- break;
-
- case SP_ASPECT_XMID_YMID:
- x = 0.5 * (this->width.computed - width);
- y = 0.5 * (this->height.computed - height);
- break;
+ if( this->viewBox_set ) {
- case SP_ASPECT_XMAX_YMID:
- x = 1.0 * (this->width.computed - width);
- y = 0.5 * (this->height.computed - height);
- break;
+ if( this->width._set ) {
+ // Check if this is necessary
+ if (this->width.unit == SVGLength::PERCENT) {
+ this->width.computed = this->width.value * this->viewBox.width();
+ }
+ } else {
+ this->width.set( SVGLength::PX, this->viewBox.width(), this->viewBox.width() );
+ }
- case SP_ASPECT_XMIN_YMAX:
- x = 0.0;
- y = 1.0 * (this->height.computed - height);
- break;
+ if( this->height._set ) {
+ if (this->height.unit == SVGLength::PERCENT) {
+ this->height.computed = this->height.value * this->viewBox.height();
+ }
+ } else {
+ this->height.set(SVGLength::PX, this->viewBox.height(), this->viewBox.height() );
+ }
- case SP_ASPECT_XMID_YMAX:
- x = 0.5 * (this->width.computed - width);
- y = 1.0 * (this->height.computed - height);
- break;
+ } else {
- case SP_ASPECT_XMAX_YMAX:
- x = 1.0 * (this->width.computed - width);
- y = 1.0 * (this->height.computed - height);
- break;
+ if( !this->width._set ) {
+ this->width.set( SVGLength::PX, 100, 100 ); // Random default
+ }
- default:
- x = 0.0;
- y = 0.0;
- break;
+ if( !this->height._set ) {
+ this->height.set( SVGLength::PX, 100, 100 ); // Random default
}
}
- /* Compose additional transformation from scale and position */
- Geom::Scale const viewBox_length(this->viewBox.dimensions());
- Geom::Scale const new_length(width, height);
+ // Ignore x, y values for root element
+ this->x.unset(SVGLength::PERCENT, 0.0, 0.0);
+ this->y.unset(SVGLength::PERCENT, 0.0, 0.0);
+ }
- /* Append viewbox transformation */
- /* TODO: The below looks suspicious to me (pjrm): I wonder whether the RHS
- expression should have c2p at the beginning rather than at the end. Test it. */
- this->c2p = Geom::Translate(-this->viewBox.min()) * (new_length * viewBox_length.inverse()) * Geom::Translate(x, y) * this->c2p;
+ // Calculate x, y, width, height from parent/initial viewport
+ if (this->x.unit == SVGLength::PERCENT) {
+ this->x.computed = this->x.value * ictx->viewport.width();
}
- rctx.i2doc = this->c2p * rctx.i2doc;
+ if (this->y.unit == SVGLength::PERCENT) {
+ this->y.computed = this->y.value * ictx->viewport.height();
+ }
- /* Initialize child viewport */
- if (this->viewBox_set) {
- rctx.viewport = this->viewBox;
- } else {
- /* fixme: I wonder whether this logic is correct (Lauris) */
- Geom::Point minp(0, 0);
- if (this->parent) {
- minp = Geom::Point(this->x.computed, this->y.computed);
- }
+ if (this->width.unit == SVGLength::PERCENT) {
+ this->width.computed = this->width.value * ictx->viewport.width();
+ }
- rctx.viewport = Geom::Rect::from_xywh(minp[Geom::X], minp[Geom::Y], this->width.computed, this->height.computed);
+ if (this->height.unit == SVGLength::PERCENT) {
+ this->height.computed = this->height.value * ictx->viewport.height();
}
- rctx.i2vp = Geom::identity();
+ // Calculate new viewport
+ ictx->viewport = Geom::Rect::from_xywh( this->x.computed, this->y.computed,
+ this->width.computed, this->height.computed );
+ SPItemCtx rctx = get_rctx( ictx );
/* And invoke parent method */
SPGroup::update((SPCtx *) &rctx, flags);
diff --git a/src/sp-root.h b/src/sp-root.h
index 2931391ff..1c9faed9b 100644
--- a/src/sp-root.h
+++ b/src/sp-root.h
@@ -18,6 +18,7 @@
#include "svg/svg-length.h"
#include "enums.h"
#include "sp-item-group.h"
+#include "viewbox.h"
#define SP_ROOT(obj) (dynamic_cast<SPRoot*>((SPObject*)obj))
#define SP_IS_ROOT(obj) (dynamic_cast<const SPRoot*>((SPObject*)obj) != NULL)
@@ -25,7 +26,7 @@
class SPDefs;
/** \<svg\> element */
-class SPRoot : public SPGroup {
+class SPRoot : public SPGroup, public SPViewBox {
public:
SPRoot();
virtual ~SPRoot();
@@ -40,18 +41,6 @@ public:
SVGLength width;
SVGLength height;
- /* viewBox; */
- bool viewBox_set;
- Geom::Rect viewBox;
-
- /* preserveAspectRatio */
- unsigned int aspect_set : 1;
- unsigned int aspect_align : 4;
- unsigned int aspect_clip : 1;
-
- /** Child to parent additional transform. */
- Geom::Affine c2p;
-
gchar *onload;
/**
diff --git a/src/sp-symbol.cpp b/src/sp-symbol.cpp
index 8ffc2ab2c..817411a32 100644
--- a/src/sp-symbol.cpp
+++ b/src/sp-symbol.cpp
@@ -36,13 +36,7 @@ namespace {
bool symbolRegistered = SPFactory::instance().registerObject("svg:symbol", createSymbol);
}
-SPSymbol::SPSymbol() : SPGroup() {
- this->aspect_align = 0;
- this->aspect_clip = 0;
- this->aspect_set = 0;
-
- this->viewBox_set = FALSE;
- this->c2p = Geom::identity();
+SPSymbol::SPSymbol() : SPGroup(), SPViewBox() {
}
SPSymbol::~SPSymbol() {
@@ -62,134 +56,15 @@ void SPSymbol::release() {
void SPSymbol::set(unsigned int key, const gchar* value) {
switch (key) {
case SP_ATTR_VIEWBOX:
- if (value) {
- double x, y, width, height;
- char *eptr;
-
- /* fixme: We have to take original item affine into account */
- /* fixme: Think (Lauris) */
- eptr = (gchar *) value;
- x = g_ascii_strtod (eptr, &eptr);
-
- while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
- eptr++;
- }
-
- y = g_ascii_strtod (eptr, &eptr);
-
- while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
- eptr++;
- }
-
- width = g_ascii_strtod (eptr, &eptr);
-
- while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
- eptr++;
- }
-
- height = g_ascii_strtod (eptr, &eptr);
-
- while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
- eptr++;
- }
-
- if ((width > 0) && (height > 0)) {
- /* Set viewbox */
- this->viewBox = Geom::Rect::from_xywh(x, y, width, height);
- this->viewBox_set = TRUE;
- } else {
- this->viewBox_set = FALSE;
- }
- } else {
- this->viewBox_set = FALSE;
- }
-
+ set_viewBox( value );
+ std::cout << "Symbol: ViewBox: " << viewBox << std::endl;
this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG);
break;
case SP_ATTR_PRESERVEASPECTRATIO:
- /* Do setup before, so we can use break to escape */
- this->aspect_set = FALSE;
- this->aspect_align = SP_ASPECT_NONE;
- this->aspect_clip = SP_ASPECT_MEET;
+ set_preserveAspectRatio( value );
+ std::cout << "Symbol: Preserve aspect ratio: " << aspect_align << ", " << aspect_clip << std::endl;
this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG);
-
- if (value) {
- int len;
- gchar c[256];
- const gchar *p, *e;
- unsigned int align, clip;
- p = value;
-
- while (*p && *p == 32) {
- p += 1;
- }
-
- if (!*p) {
- break;
- }
-
- e = p;
-
- while (*e && *e != 32) {
- e += 1;
- }
-
- len = e - p;
-
- if (len > 8) {
- break;
- }
-
- memcpy (c, value, len);
-
- c[len] = 0;
-
- /* Now the actual part */
- if (!strcmp (c, "none")) {
- align = SP_ASPECT_NONE;
- } else if (!strcmp (c, "xMinYMin")) {
- align = SP_ASPECT_XMIN_YMIN;
- } else if (!strcmp (c, "xMidYMin")) {
- align = SP_ASPECT_XMID_YMIN;
- } else if (!strcmp (c, "xMaxYMin")) {
- align = SP_ASPECT_XMAX_YMIN;
- } else if (!strcmp (c, "xMinYMid")) {
- align = SP_ASPECT_XMIN_YMID;
- } else if (!strcmp (c, "xMidYMid")) {
- align = SP_ASPECT_XMID_YMID;
- } else if (!strcmp (c, "xMaxYMid")) {
- align = SP_ASPECT_XMAX_YMID;
- } else if (!strcmp (c, "xMinYMax")) {
- align = SP_ASPECT_XMIN_YMAX;
- } else if (!strcmp (c, "xMidYMax")) {
- align = SP_ASPECT_XMID_YMAX;
- } else if (!strcmp (c, "xMaxYMax")) {
- align = SP_ASPECT_XMAX_YMAX;
- } else {
- break;
- }
-
- clip = SP_ASPECT_MEET;
-
- while (*e && *e == 32) {
- e += 1;
- }
-
- if (*e) {
- if (!strcmp (e, "meet")) {
- clip = SP_ASPECT_MEET;
- } else if (!strcmp (e, "slice")) {
- clip = SP_ASPECT_SLICE;
- } else {
- break;
- }
- }
-
- this->aspect_set = TRUE;
- this->aspect_align = align;
- this->aspect_clip = clip;
- }
break;
default:
@@ -204,105 +79,10 @@ void SPSymbol::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
void SPSymbol::update(SPCtx *ctx, guint flags) {
- SPItemCtx *ictx = (SPItemCtx *) ctx;
- SPItemCtx rctx;
-
if (this->cloned) {
- /* Cloned <symbol> is actually renderable */
-
- /* fixme: We have to set up clip here too */
-
- /* Create copy of item context */
- rctx = *ictx;
-
- /* Calculate child to parent transformation */
- /* Apply parent <use> translation (set up as vewport) */
- this->c2p = Geom::Translate(rctx.viewport.min());
-
- if (this->viewBox_set) {
- double x, y, width, height;
-
- /* Determine actual viewbox in viewport coordinates */
- if (this->aspect_align == SP_ASPECT_NONE) {
- x = 0.0;
- y = 0.0;
- width = rctx.viewport.width();
- height = rctx.viewport.height();
- } else {
- double scalex, scaley, scale;
- /* Things are getting interesting */
- scalex = rctx.viewport.width() / this->viewBox.width();
- scaley = rctx.viewport.height() / this->viewBox.height();
- scale = (this->aspect_clip == SP_ASPECT_MEET) ? MIN (scalex, scaley) : MAX (scalex, scaley);
- width = this->viewBox.width() * scale;
- height = this->viewBox.height() * scale;
-
- /* Now place viewbox to requested position */
- switch (this->aspect_align) {
- case SP_ASPECT_XMIN_YMIN:
- x = 0.0;
- y = 0.0;
- break;
- case SP_ASPECT_XMID_YMIN:
- x = 0.5 * (rctx.viewport.width() - width);
- y = 0.0;
- break;
- case SP_ASPECT_XMAX_YMIN:
- x = 1.0 * (rctx.viewport.width() - width);
- y = 0.0;
- break;
- case SP_ASPECT_XMIN_YMID:
- x = 0.0;
- y = 0.5 * (rctx.viewport.height() - height);
- break;
- case SP_ASPECT_XMID_YMID:
- x = 0.5 * (rctx.viewport.width() - width);
- y = 0.5 * (rctx.viewport.height() - height);
- break;
- case SP_ASPECT_XMAX_YMID:
- x = 1.0 * (rctx.viewport.width() - width);
- y = 0.5 * (rctx.viewport.height() - height);
- break;
- case SP_ASPECT_XMIN_YMAX:
- x = 0.0;
- y = 1.0 * (rctx.viewport.height() - height);
- break;
- case SP_ASPECT_XMID_YMAX:
- x = 0.5 * (rctx.viewport.width() - width);
- y = 1.0 * (rctx.viewport.height() - height);
- break;
- case SP_ASPECT_XMAX_YMAX:
- x = 1.0 * (rctx.viewport.width() - width);
- y = 1.0 * (rctx.viewport.height() - height);
- break;
- default:
- x = 0.0;
- y = 0.0;
- break;
- }
- }
-
- /* Compose additional transformation from scale and position */
- Geom::Affine q;
- q[0] = width / this->viewBox.width();
- q[1] = 0.0;
- q[2] = 0.0;
- q[3] = height / this->viewBox.height();
- q[4] = -this->viewBox.left() * q[0] + x;
- q[5] = -this->viewBox.top() * q[3] + y;
-
- /* Append viewbox transformation */
- this->c2p = q * this->c2p;
- }
- rctx.i2doc = this->c2p * (Geom::Affine)rctx.i2doc;
-
- /* If viewBox is set initialize child viewport */
- /* Otherwise <use> has set it up already */
- if (this->viewBox_set) {
- rctx.viewport = this->viewBox;
- rctx.i2vp = Geom::identity();
- }
+ SPItemCtx *ictx = (SPItemCtx *) ctx;
+ SPItemCtx rctx = get_rctx( ictx );
// And invoke parent method
SPGroup::update((SPCtx *) &rctx, flags);
diff --git a/src/sp-symbol.h b/src/sp-symbol.h
index 7a43ed658..d1e62e923 100644
--- a/src/sp-symbol.h
+++ b/src/sp-symbol.h
@@ -25,24 +25,13 @@
#include "svg/svg-length.h"
#include "enums.h"
#include "sp-item-group.h"
+#include "viewbox.h"
-class SPSymbol : public SPGroup {
+class SPSymbol : public SPGroup, public SPViewBox {
public:
SPSymbol();
virtual ~SPSymbol();
- /* viewBox; */
- unsigned int viewBox_set : 1;
- Geom::Rect viewBox;
-
- /* preserveAspectRatio */
- unsigned int aspect_set : 1;
- unsigned int aspect_align : 4;
- unsigned int aspect_clip : 1;
-
- /* Child to parent additional transform */
- Geom::Affine c2p;
-
virtual void build(SPDocument *document, Inkscape::XML::Node *repr);
virtual void release();
virtual void set(unsigned int key, gchar const* value);
diff --git a/src/ui/cache/svg_preview_cache.cpp b/src/ui/cache/svg_preview_cache.cpp
index a09489f6d..f1d6304cb 100644
--- a/src/ui/cache/svg_preview_cache.cpp
+++ b/src/ui/cache/svg_preview_cache.cpp
@@ -56,9 +56,9 @@ GdkPixbuf* render_pixbuf(Inkscape::Drawing &drawing, double scale_factor, Geom::
/* Render */
cairo_surface_t *s = cairo_image_surface_create(
CAIRO_FORMAT_ARGB32, psize, psize);
- Inkscape::DrawingContext ct(s, area.min());
+ Inkscape::DrawingContext dc(s, area.min());
- drawing.render(ct, area, Inkscape::DrawingItem::RENDER_BYPASS_CACHE);
+ drawing.render(dc, area, Inkscape::DrawingItem::RENDER_BYPASS_CACHE);
cairo_surface_flush(s);
GdkPixbuf* pixbuf = ink_pixbuf_create_from_cairo_surface(s);
diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp
index 87c399339..fb131d8da 100644
--- a/src/ui/dialog/clonetiler.cpp
+++ b/src/ui/dialog/clonetiler.cpp
@@ -2063,9 +2063,9 @@ guint32 CloneTiler::clonetiler_trace_pick(Geom::Rect box)
/* Find visible area */
cairo_surface_t *s = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, ibox.width(), ibox.height());
- Inkscape::DrawingContext ct(s, ibox.min());
+ Inkscape::DrawingContext dc(s, ibox.min());
/* Render */
- trace_drawing->render(ct, ibox);
+ trace_drawing->render(dc, ibox);
double R = 0, G = 0, B = 0, A = 0;
ink_cairo_surface_average_color(s, R, G, B, A);
cairo_surface_destroy(s);
diff --git a/src/ui/tools/flood-tool.cpp b/src/ui/tools/flood-tool.cpp
index 0b72bc9f2..4e29b8856 100644
--- a/src/ui/tools/flood-tool.cpp
+++ b/src/ui/tools/flood-tool.cpp
@@ -794,7 +794,7 @@ static void sp_flood_do_flood_fill(ToolBase *event_context, GdkEvent *event, boo
cairo_surface_t *s = cairo_image_surface_create_for_data(
px, CAIRO_FORMAT_ARGB32, width, height, stride);
- Inkscape::DrawingContext ct(s, Geom::Point(0,0));
+ Inkscape::DrawingContext dc(s, Geom::Point(0,0));
// cairo_translate not necessary here - surface origin is at 0,0
SPNamedView *nv = sp_desktop_namedview(desktop);
@@ -802,12 +802,12 @@ static void sp_flood_do_flood_fill(ToolBase *event_context, GdkEvent *event, boo
// bgcolor is 0xrrggbbaa, we need 0xaarrggbb
dtc = (bgcolor >> 8) | (bgcolor << 24);
- ct.setSource(bgcolor);
- ct.setOperator(CAIRO_OPERATOR_SOURCE);
- ct.paint();
- ct.setOperator(CAIRO_OPERATOR_OVER);
+ dc.setSource(bgcolor);
+ dc.setOperator(CAIRO_OPERATOR_SOURCE);
+ dc.paint();
+ dc.setOperator(CAIRO_OPERATOR_OVER);
- drawing.render(ct, final_bbox);
+ drawing.render(dc, final_bbox);
//cairo_surface_write_to_png( s, "cairo.png" );
diff --git a/src/ui/tools/spray-tool.cpp b/src/ui/tools/spray-tool.cpp
index 91c606e8e..4ea482461 100644
--- a/src/ui/tools/spray-tool.cpp
+++ b/src/ui/tools/spray-tool.cpp
@@ -453,7 +453,7 @@ static bool sp_spray_recursive(SPDesktop *desktop,
Geom::OptRect a = parent_item->documentVisualBounds();
if (a) {
- if (i == 2) {
+ if (i == 1) {
Inkscape::XML::Node *copy1 = old_repr->duplicate(xml_doc);
parent->appendChild(copy1);
SPObject *new_obj1 = doc->getObjectByRepr(copy1);
diff --git a/src/uri-references.cpp b/src/uri-references.cpp
index abe16ec9d..ea8078b28 100644
--- a/src/uri-references.cpp
+++ b/src/uri-references.cpp
@@ -58,7 +58,7 @@ void URIReference::attach(const URI &uri) throw(BadURIException)
// The path contains references to seperate document files to load.
if(document && uri.getPath()) {
- std::string base = std::string(document->getBase());
+ std::string base = document->getBase() ? document->getBase() : "";
std::string path = uri.getFullPath(base);
if(!path.empty())
document = document->createChildDoc(path);
@@ -184,3 +184,14 @@ sp_uri_reference_resolve (SPDocument *document, const gchar *uri)
return ref;
}
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
diff --git a/src/viewbox.cpp b/src/viewbox.cpp
new file mode 100644
index 000000000..2314cbf6a
--- /dev/null
+++ b/src/viewbox.cpp
@@ -0,0 +1,277 @@
+/*
+ * viewBox helper class, common code used by root, symbol, marker, pattern, image, view
+ *
+ * Authors:
+ * Lauris Kaplinski <lauris@kaplinski.com> (code extracted from symbol.cpp)
+ * Tavmjong Bah <tavmjong@free.fr>
+ *
+ * Copyright (C) 2013 Tavmjong Bah, authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ *
+ */
+
+#include <2geom/transforms.h>
+
+#include "viewbox.h"
+#include "attributes.h"
+#include "enums.h"
+#include "sp-item.h"
+
+SPViewBox::SPViewBox() {
+
+ this->viewBox_set = FALSE;
+
+ this->aspect_set = FALSE;
+ this->aspect_align = SP_ASPECT_XMID_YMID; // Default per spec;
+ this->aspect_clip = SP_ASPECT_MEET;
+
+ this->c2p = Geom::identity();
+}
+
+SPViewBox::~SPViewBox() {
+}
+
+void SPViewBox::set_viewBox(const gchar* value) {
+
+ if (value) {
+ double x, y, width, height;
+ char *eptr;
+
+ eptr = (gchar *) value;
+ x = g_ascii_strtod (eptr, &eptr);
+
+ while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
+ eptr++;
+ }
+
+ y = g_ascii_strtod (eptr, &eptr);
+
+ while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
+ eptr++;
+ }
+
+ width = g_ascii_strtod (eptr, &eptr);
+
+ while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
+ eptr++;
+ }
+
+ height = g_ascii_strtod (eptr, &eptr);
+
+ while (*eptr && ((*eptr == ',') || (*eptr == ' '))) {
+ eptr++;
+ }
+
+ if ((width > 0) && (height > 0)) {
+ /* Set viewbox */
+ this->viewBox = Geom::Rect::from_xywh(x, y, width, height);
+ this->viewBox_set = TRUE;
+ } else {
+ this->viewBox_set = FALSE;
+ }
+ } else {
+ this->viewBox_set = FALSE;
+ }
+
+ // The C++ way?
+ // std::string sv( value );
+ // std::replace( sv.begin(), sv.end(), ',', ' ');
+ // std::stringstream ss( sv );
+ // double x, y, width, height;
+ // ss >> x >> y >> width >> height;
+}
+
+void SPViewBox::set_preserveAspectRatio(const gchar* value) {
+
+ /* Do setup before, so we can use break to escape */
+ this->aspect_set = FALSE;
+ this->aspect_align = SP_ASPECT_XMID_YMID; // Default per spec
+ this->aspect_clip = SP_ASPECT_MEET;
+
+ if (value) {
+ int len;
+ gchar c[256];
+ const gchar *p, *e;
+ unsigned int align, clip;
+ p = value;
+
+ while (*p && *p == 32) {
+ p += 1;
+ }
+
+ if (!*p) {
+ return;
+ }
+
+ e = p;
+
+ while (*e && *e != 32) {
+ e += 1;
+ }
+
+ len = e - p;
+
+ if (len > 8) {
+ return;
+ }
+
+ memcpy (c, value, len);
+
+ c[len] = 0;
+
+ /* Now the actual part */
+ if (!strcmp (c, "none")) {
+ align = SP_ASPECT_NONE;
+ } else if (!strcmp (c, "xMinYMin")) {
+ align = SP_ASPECT_XMIN_YMIN;
+ } else if (!strcmp (c, "xMidYMin")) {
+ align = SP_ASPECT_XMID_YMIN;
+ } else if (!strcmp (c, "xMaxYMin")) {
+ align = SP_ASPECT_XMAX_YMIN;
+ } else if (!strcmp (c, "xMinYMid")) {
+ align = SP_ASPECT_XMIN_YMID;
+ } else if (!strcmp (c, "xMidYMid")) {
+ align = SP_ASPECT_XMID_YMID;
+ } else if (!strcmp (c, "xMaxYMid")) {
+ align = SP_ASPECT_XMAX_YMID;
+ } else if (!strcmp (c, "xMinYMax")) {
+ align = SP_ASPECT_XMIN_YMAX;
+ } else if (!strcmp (c, "xMidYMax")) {
+ align = SP_ASPECT_XMID_YMAX;
+ } else if (!strcmp (c, "xMaxYMax")) {
+ align = SP_ASPECT_XMAX_YMAX;
+ } else {
+ return;
+ }
+
+ clip = SP_ASPECT_MEET;
+
+ while (*e && *e == 32) {
+ e += 1;
+ }
+
+ if (*e) {
+ if (!strcmp (e, "meet")) {
+ clip = SP_ASPECT_MEET;
+ } else if (!strcmp (e, "slice")) {
+ clip = SP_ASPECT_SLICE;
+ } else {
+ return;
+ }
+ }
+
+ this->aspect_set = TRUE;
+ this->aspect_align = align;
+ this->aspect_clip = clip;
+ }
+}
+
+// Apply scaling from viewbox
+void SPViewBox::apply_viewbox(const Geom::Rect& in) {
+
+ /* Determine actual viewbox in viewport coordinates */
+ double x = 0.0;
+ double y = 0.0;
+ double width = in.width();
+ double height = in.height();
+ // std::cout << " width: " << width << " height: " << height << std::endl;
+
+ if (this->aspect_align != SP_ASPECT_NONE) {
+ double scalex, scaley, scale;
+ /* Things are getting interesting */
+ scalex = in.width() / this->viewBox.width();
+ scaley = in.height() / this->viewBox.height();
+ scale = (this->aspect_clip == SP_ASPECT_MEET) ? MIN (scalex, scaley) : MAX (scalex, scaley);
+ width = this->viewBox.width() * scale;
+ height = this->viewBox.height() * scale;
+
+ /* Now place viewbox to requested position */
+ switch (this->aspect_align) {
+ case SP_ASPECT_XMIN_YMIN:
+ break;
+ case SP_ASPECT_XMID_YMIN:
+ x = 0.5 * (in.width() - width);
+ break;
+ case SP_ASPECT_XMAX_YMIN:
+ x = 1.0 * (in.width() - width);
+ break;
+ case SP_ASPECT_XMIN_YMID:
+ y = 0.5 * (in.height() - height);
+ break;
+ case SP_ASPECT_XMID_YMID:
+ x = 0.5 * (in.width() - width);
+ y = 0.5 * (in.height() - height);
+ break;
+ case SP_ASPECT_XMAX_YMID:
+ x = 1.0 * (in.width() - width);
+ y = 0.5 * (in.height() - height);
+ break;
+ case SP_ASPECT_XMIN_YMAX:
+ y = 1.0 * (in.height() - height);
+ break;
+ case SP_ASPECT_XMID_YMAX:
+ x = 0.5 * (in.width() - width);
+ y = 1.0 * (in.height() - height);
+ break;
+ case SP_ASPECT_XMAX_YMAX:
+ x = 1.0 * (in.width() - width);
+ y = 1.0 * (in.height() - height);
+ break;
+ default:
+ break;
+ }
+ }
+
+ /* Viewbox transform from scale and position */
+ Geom::Affine q;
+ q[0] = width / this->viewBox.width();
+ q[1] = 0.0;
+ q[2] = 0.0;
+ q[3] = height / this->viewBox.height();
+ q[4] = -this->viewBox.left() * q[0] + x;
+ q[5] = -this->viewBox.top() * q[3] + y;
+
+ // std::cout << " q\n" << q << std::endl;
+
+ /* Append viewbox transformation */
+ this->c2p = q * this->c2p;
+}
+
+SPItemCtx SPViewBox::get_rctx(const SPItemCtx* ictx) {
+
+ /* Create copy of item context */
+ SPItemCtx rctx = *ictx;
+
+ /* Calculate child to parent transformation */
+ /* Apply parent translation (set up as viewport) */
+ this->c2p = Geom::Translate(rctx.viewport.min());
+
+ if (this->viewBox_set) {
+ // Adjusts c2p for viewbox
+ apply_viewbox( rctx.viewport );
+ }
+
+ rctx.i2doc = this->c2p * rctx.i2doc;
+
+ /* If viewBox is set initialize child viewport */
+ /* Otherwise it is already correct */
+ if (this->viewBox_set) {
+ rctx.viewport = this->viewBox;
+ rctx.i2vp = Geom::identity();
+ }
+
+ return rctx;
+}
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-basic-offset:2
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=2:tabstop=8:softtabstop=2:fileencoding=utf-8:textwidth=99 :
diff --git a/src/viewbox.h b/src/viewbox.h
new file mode 100644
index 000000000..24356ed17
--- /dev/null
+++ b/src/viewbox.h
@@ -0,0 +1,66 @@
+#ifndef __SP_VIEWBOX_H__
+#define __SP_VIEWBOX_H__
+
+/*
+ * viewBox helper class, common code used by root, symbol, marker, pattern, image, view
+ *
+ * Authors:
+ * Lauris Kaplinski <lauris@kaplinski.com> (code extracted from sp-symbol.h)
+ * Tavmjong Bah
+ *
+ * Copyright (C) 2013 Tavmjong Bah, authors
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ *
+ */
+
+#include <2geom/rect.h>
+#include <glib.h>
+
+namespace Geom {
+class Rect;
+}
+class SPItemCtx;
+
+class SPViewBox {
+
+ public:
+
+ SPViewBox();
+ ~SPViewBox();
+
+ /* viewBox; */
+ unsigned int viewBox_set : 1;
+ Geom::Rect viewBox; // Could use optrect
+
+ /* preserveAspectRatio */
+ unsigned int aspect_set : 1;
+ unsigned int aspect_align : 4;
+ unsigned int aspect_clip : 1;
+
+ /* Child to parent additional transform */
+ Geom::Affine c2p;
+
+ void set_viewBox(const gchar* value);
+ void set_preserveAspectRatio(const gchar* value);
+
+ /* Adjusts c2p for viewbox */
+ void apply_viewbox(const Geom::Rect& in);
+
+ SPItemCtx get_rctx( const SPItemCtx* ictx);
+
+};
+
+#endif
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-basic-offset:2
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=2:tabstop=8:softtabstop=2:fileencoding=utf-8:textwidth=99 :
diff --git a/src/widgets/icon.cpp b/src/widgets/icon.cpp
index a059c100c..a96f47124 100644
--- a/src/widgets/icon.cpp
+++ b/src/widgets/icon.cpp
@@ -1191,9 +1191,9 @@ sp_icon_doc_icon( SPDocument *doc, Inkscape::Drawing &drawing,
/* Render */
cairo_surface_t *s = cairo_image_surface_create_for_data(px,
CAIRO_FORMAT_ARGB32, psize, psize, stride);
- Inkscape::DrawingContext ct(s, ua.min());
+ Inkscape::DrawingContext dc(s, ua.min());
- drawing.render(ct, ua);
+ drawing.render(dc, ua);
cairo_surface_destroy(s);
// convert to GdkPixbuf format